@visactor/vtable-gantt 1.5.4

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 (190) hide show
  1. package/README.md +151 -0
  2. package/cjs/Gantt.d.ts +111 -0
  3. package/cjs/Gantt.js +244 -0
  4. package/cjs/Gantt.js.map +1 -0
  5. package/cjs/data/DataSource.d.ts +9 -0
  6. package/cjs/data/DataSource.js +30 -0
  7. package/cjs/data/DataSource.js.map +1 -0
  8. package/cjs/env.d.ts +19 -0
  9. package/cjs/env.js +48 -0
  10. package/cjs/env.js.map +1 -0
  11. package/cjs/event/EventHandler.d.ts +47 -0
  12. package/cjs/event/EventHandler.js +128 -0
  13. package/cjs/event/EventHandler.js.map +1 -0
  14. package/cjs/event/EventTarget.d.ts +12 -0
  15. package/cjs/event/EventTarget.js +67 -0
  16. package/cjs/event/EventTarget.js.map +1 -0
  17. package/cjs/event/event-manager.d.ts +15 -0
  18. package/cjs/event/event-manager.js +76 -0
  19. package/cjs/event/event-manager.js.map +1 -0
  20. package/cjs/event/scroll.d.ts +22 -0
  21. package/cjs/event/scroll.js +136 -0
  22. package/cjs/event/scroll.js.map +1 -0
  23. package/cjs/gantt-helper.d.ts +28 -0
  24. package/cjs/gantt-helper.js +225 -0
  25. package/cjs/gantt-helper.js.map +1 -0
  26. package/cjs/index.d.ts +7 -0
  27. package/cjs/index.js +48 -0
  28. package/cjs/index.js.map +1 -0
  29. package/cjs/register.d.ts +1 -0
  30. package/cjs/register.js +1 -0
  31. package/cjs/register.js.map +1 -0
  32. package/cjs/scenegraph/frame-border.d.ts +9 -0
  33. package/cjs/scenegraph/frame-border.js +42 -0
  34. package/cjs/scenegraph/frame-border.js.map +1 -0
  35. package/cjs/scenegraph/ganttNode.d.ts +7 -0
  36. package/cjs/scenegraph/ganttNode.js +16 -0
  37. package/cjs/scenegraph/ganttNode.js.map +1 -0
  38. package/cjs/scenegraph/grid.d.ts +30 -0
  39. package/cjs/scenegraph/grid.js +130 -0
  40. package/cjs/scenegraph/grid.js.map +1 -0
  41. package/cjs/scenegraph/mark-line.d.ts +15 -0
  42. package/cjs/scenegraph/mark-line.js +66 -0
  43. package/cjs/scenegraph/mark-line.js.map +1 -0
  44. package/cjs/scenegraph/scenegraph.d.ts +41 -0
  45. package/cjs/scenegraph/scenegraph.js +109 -0
  46. package/cjs/scenegraph/scenegraph.js.map +1 -0
  47. package/cjs/scenegraph/scroll-bar.d.ts +19 -0
  48. package/cjs/scenegraph/scroll-bar.js +150 -0
  49. package/cjs/scenegraph/scroll-bar.js.map +1 -0
  50. package/cjs/scenegraph/task-bar.d.ts +24 -0
  51. package/cjs/scenegraph/task-bar.js +188 -0
  52. package/cjs/scenegraph/task-bar.js.map +1 -0
  53. package/cjs/scenegraph/timeline-header.d.ts +10 -0
  54. package/cjs/scenegraph/timeline-header.js +134 -0
  55. package/cjs/scenegraph/timeline-header.js.map +1 -0
  56. package/cjs/state/gantt-table-sync.d.ts +7 -0
  57. package/cjs/state/gantt-table-sync.js +60 -0
  58. package/cjs/state/gantt-table-sync.js.map +1 -0
  59. package/cjs/state/state-manager.d.ts +58 -0
  60. package/cjs/state/state-manager.js +223 -0
  61. package/cjs/state/state-manager.js.map +1 -0
  62. package/cjs/themes.d.ts +1 -0
  63. package/cjs/themes.js +1 -0
  64. package/cjs/themes.js.map +1 -0
  65. package/cjs/tools/debounce.d.ts +1 -0
  66. package/cjs/tools/debounce.js +51 -0
  67. package/cjs/tools/debounce.js.map +1 -0
  68. package/cjs/tools/index.d.ts +2 -0
  69. package/cjs/tools/index.js +20 -0
  70. package/cjs/tools/index.js.map +1 -0
  71. package/cjs/tools/isx.d.ts +16 -0
  72. package/cjs/tools/isx.js +117 -0
  73. package/cjs/tools/isx.js.map +1 -0
  74. package/cjs/tools/pixel-ratio.d.ts +2 -0
  75. package/cjs/tools/pixel-ratio.js +16 -0
  76. package/cjs/tools/pixel-ratio.js.map +1 -0
  77. package/cjs/tools/util.d.ts +7 -0
  78. package/cjs/tools/util.js +87 -0
  79. package/cjs/tools/util.js.map +1 -0
  80. package/cjs/ts-types/EVENT_TYPE.d.ts +5 -0
  81. package/cjs/ts-types/EVENT_TYPE.js +9 -0
  82. package/cjs/ts-types/EVENT_TYPE.js.map +1 -0
  83. package/cjs/ts-types/common.d.ts +13 -0
  84. package/cjs/ts-types/common.js +14 -0
  85. package/cjs/ts-types/common.js.map +1 -0
  86. package/cjs/ts-types/events.d.ts +14 -0
  87. package/cjs/ts-types/events.js +6 -0
  88. package/cjs/ts-types/events.js.map +1 -0
  89. package/cjs/ts-types/gantt-engine.d.ts +163 -0
  90. package/cjs/ts-types/gantt-engine.js +6 -0
  91. package/cjs/ts-types/gantt-engine.js.map +1 -0
  92. package/cjs/ts-types/index.d.ts +4 -0
  93. package/cjs/ts-types/index.js +22 -0
  94. package/cjs/ts-types/index.js.map +1 -0
  95. package/dist/vtable-gantt.js +53942 -0
  96. package/dist/vtable-gantt.min.js +1 -0
  97. package/es/Gantt.d.ts +111 -0
  98. package/es/Gantt.js +246 -0
  99. package/es/Gantt.js.map +1 -0
  100. package/es/data/DataSource.d.ts +9 -0
  101. package/es/data/DataSource.js +22 -0
  102. package/es/data/DataSource.js.map +1 -0
  103. package/es/env.d.ts +19 -0
  104. package/es/env.js +42 -0
  105. package/es/env.js.map +1 -0
  106. package/es/event/EventHandler.d.ts +47 -0
  107. package/es/event/EventHandler.js +119 -0
  108. package/es/event/EventHandler.js.map +1 -0
  109. package/es/event/EventTarget.d.ts +12 -0
  110. package/es/event/EventTarget.js +58 -0
  111. package/es/event/EventTarget.js.map +1 -0
  112. package/es/event/event-manager.d.ts +15 -0
  113. package/es/event/event-manager.js +78 -0
  114. package/es/event/event-manager.js.map +1 -0
  115. package/es/event/scroll.d.ts +22 -0
  116. package/es/event/scroll.js +126 -0
  117. package/es/event/scroll.js.map +1 -0
  118. package/es/gantt-helper.d.ts +28 -0
  119. package/es/gantt-helper.js +220 -0
  120. package/es/gantt-helper.js.map +1 -0
  121. package/es/index.d.ts +7 -0
  122. package/es/index.js +10 -0
  123. package/es/index.js.map +1 -0
  124. package/es/register.d.ts +1 -0
  125. package/es/register.js +1 -0
  126. package/es/register.js.map +1 -0
  127. package/es/scenegraph/frame-border.d.ts +9 -0
  128. package/es/scenegraph/frame-border.js +34 -0
  129. package/es/scenegraph/frame-border.js.map +1 -0
  130. package/es/scenegraph/ganttNode.d.ts +7 -0
  131. package/es/scenegraph/ganttNode.js +8 -0
  132. package/es/scenegraph/ganttNode.js.map +1 -0
  133. package/es/scenegraph/grid.d.ts +30 -0
  134. package/es/scenegraph/grid.js +122 -0
  135. package/es/scenegraph/grid.js.map +1 -0
  136. package/es/scenegraph/mark-line.d.ts +15 -0
  137. package/es/scenegraph/mark-line.js +58 -0
  138. package/es/scenegraph/mark-line.js.map +1 -0
  139. package/es/scenegraph/scenegraph.d.ts +41 -0
  140. package/es/scenegraph/scenegraph.js +116 -0
  141. package/es/scenegraph/scenegraph.js.map +1 -0
  142. package/es/scenegraph/scroll-bar.d.ts +19 -0
  143. package/es/scenegraph/scroll-bar.js +144 -0
  144. package/es/scenegraph/scroll-bar.js.map +1 -0
  145. package/es/scenegraph/task-bar.d.ts +24 -0
  146. package/es/scenegraph/task-bar.js +188 -0
  147. package/es/scenegraph/task-bar.js.map +1 -0
  148. package/es/scenegraph/timeline-header.d.ts +10 -0
  149. package/es/scenegraph/timeline-header.js +130 -0
  150. package/es/scenegraph/timeline-header.js.map +1 -0
  151. package/es/state/gantt-table-sync.d.ts +7 -0
  152. package/es/state/gantt-table-sync.js +51 -0
  153. package/es/state/gantt-table-sync.js.map +1 -0
  154. package/es/state/state-manager.d.ts +58 -0
  155. package/es/state/state-manager.js +219 -0
  156. package/es/state/state-manager.js.map +1 -0
  157. package/es/themes.d.ts +1 -0
  158. package/es/themes.js +1 -0
  159. package/es/themes.js.map +1 -0
  160. package/es/tools/debounce.d.ts +1 -0
  161. package/es/tools/debounce.js +43 -0
  162. package/es/tools/debounce.js.map +1 -0
  163. package/es/tools/index.d.ts +2 -0
  164. package/es/tools/index.js +4 -0
  165. package/es/tools/index.js.map +1 -0
  166. package/es/tools/isx.d.ts +16 -0
  167. package/es/tools/isx.js +80 -0
  168. package/es/tools/isx.js.map +1 -0
  169. package/es/tools/pixel-ratio.d.ts +2 -0
  170. package/es/tools/pixel-ratio.js +12 -0
  171. package/es/tools/pixel-ratio.js.map +1 -0
  172. package/es/tools/util.d.ts +7 -0
  173. package/es/tools/util.js +78 -0
  174. package/es/tools/util.js.map +1 -0
  175. package/es/ts-types/EVENT_TYPE.d.ts +5 -0
  176. package/es/ts-types/EVENT_TYPE.js +5 -0
  177. package/es/ts-types/EVENT_TYPE.js.map +1 -0
  178. package/es/ts-types/common.d.ts +13 -0
  179. package/es/ts-types/common.js +13 -0
  180. package/es/ts-types/common.js.map +1 -0
  181. package/es/ts-types/events.d.ts +14 -0
  182. package/es/ts-types/events.js +2 -0
  183. package/es/ts-types/events.js.map +1 -0
  184. package/es/ts-types/gantt-engine.d.ts +163 -0
  185. package/es/ts-types/gantt-engine.js +2 -0
  186. package/es/ts-types/gantt-engine.js.map +1 -0
  187. package/es/ts-types/index.d.ts +4 -0
  188. package/es/ts-types/index.js +8 -0
  189. package/es/ts-types/index.js.map +1 -0
  190. package/package.json +122 -0
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ function syncScrollStateToTable(gantt) {
4
+ const {scroll: scroll} = gantt.stateManager, {verticalBarPos: verticalBarPos} = scroll;
5
+ gantt.taskListTableInstance.stateManager.setScrollTop(verticalBarPos, !1);
6
+ }
7
+
8
+ function syncScrollStateFromTable(gantt) {
9
+ var _a;
10
+ gantt.taskListTableInstance && (null === (_a = gantt.taskListTableInstance) || void 0 === _a || _a.on("scroll", (args => {
11
+ if ("vertical" === args.scrollDirection) {
12
+ const {scroll: scroll} = gantt.taskListTableInstance.stateManager, {verticalBarPos: verticalBarPos} = scroll;
13
+ gantt.stateManager.setScrollTop(verticalBarPos, !1);
14
+ }
15
+ })));
16
+ }
17
+
18
+ function syncResizeStateFromTable(gantt) {
19
+ var _a, _b;
20
+ gantt.taskListTableInstance && "auto" === (null === (_a = gantt.options.taskListTable) || void 0 === _a ? void 0 : _a.width) && (null === (_b = gantt.taskListTableInstance) || void 0 === _b || _b.on("resize_column", (args => {
21
+ gantt.taskTableWidth = gantt.taskListTableInstance.getAllColsWidth() + 2 * gantt.taskListTableInstance.tableX,
22
+ gantt.element.style.left = gantt.taskTableWidth ? `${gantt.taskTableWidth}px` : "0px",
23
+ gantt._resize();
24
+ })));
25
+ }
26
+
27
+ function syncEditCellFromTable(gantt) {
28
+ var _a;
29
+ null === (_a = gantt.taskListTableInstance) || void 0 === _a || _a.on("change_cell_value", (args => {
30
+ const {col: col, row: row, rawValue: rawValue, changedValue: changedValue} = args;
31
+ gantt.redrawRecord(row - gantt.taskListTableInstance.columnHeaderLevelCount);
32
+ }));
33
+ }
34
+
35
+ function syncDragOrderFromTable(gantt) {
36
+ var _a;
37
+ null === (_a = gantt.taskListTableInstance) || void 0 === _a || _a.on("change_header_position", (args => {
38
+ gantt.scenegraph.refreshTaskBars();
39
+ const left = gantt.stateManager.scroll.horizontalBarPos, top = gantt.stateManager.scroll.verticalBarPos;
40
+ gantt.scenegraph.setX(-left), gantt.scenegraph.setY(-top);
41
+ }));
42
+ }
43
+
44
+ function syncTreeChangeFromTable(gantt) {
45
+ var _a;
46
+ null === (_a = gantt.taskListTableInstance) || void 0 === _a || _a.on("tree_hierarchy_state_change", (args => {
47
+ gantt._syncPropsFromTable(), gantt.resizeLine.style.height = gantt.drawHeight + "px",
48
+ gantt.scenegraph.refreshTaskBarsAndGrid();
49
+ const left = gantt.stateManager.scroll.horizontalBarPos, top = gantt.stateManager.scroll.verticalBarPos;
50
+ gantt.scenegraph.setX(-left), gantt.scenegraph.setY(-top);
51
+ }));
52
+ }
53
+
54
+ Object.defineProperty(exports, "__esModule", {
55
+ value: !0
56
+ }), exports.syncTreeChangeFromTable = exports.syncDragOrderFromTable = exports.syncEditCellFromTable = exports.syncResizeStateFromTable = exports.syncScrollStateFromTable = exports.syncScrollStateToTable = void 0,
57
+ exports.syncScrollStateToTable = syncScrollStateToTable, exports.syncScrollStateFromTable = syncScrollStateFromTable,
58
+ exports.syncResizeStateFromTable = syncResizeStateFromTable, exports.syncEditCellFromTable = syncEditCellFromTable,
59
+ exports.syncDragOrderFromTable = syncDragOrderFromTable, exports.syncTreeChangeFromTable = syncTreeChangeFromTable;
60
+ //# sourceMappingURL=gantt-table-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/state/gantt-table-sync.ts"],"names":[],"mappings":"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","file":"gantt-table-sync.js","sourcesContent":["import type { Gantt } from '../Gantt';\n\nexport function syncScrollStateToTable(gantt: Gantt) {\n const { scroll } = gantt.stateManager;\n const { verticalBarPos } = scroll;\n gantt.taskListTableInstance.stateManager.setScrollTop(verticalBarPos, false);\n}\n\nexport function syncScrollStateFromTable(gantt: Gantt) {\n if (gantt.taskListTableInstance) {\n gantt.taskListTableInstance?.on('scroll', (args: any) => {\n if (args.scrollDirection === 'vertical') {\n const { scroll } = gantt.taskListTableInstance.stateManager;\n const { verticalBarPos } = scroll;\n gantt.stateManager.setScrollTop(verticalBarPos, false);\n }\n });\n }\n}\nexport function syncResizeStateFromTable(gantt: Gantt) {\n if (gantt.taskListTableInstance && gantt.options.taskListTable?.width === 'auto') {\n gantt.taskListTableInstance?.on('resize_column', (args: any) => {\n gantt.taskTableWidth = gantt.taskListTableInstance.getAllColsWidth() + gantt.taskListTableInstance.tableX * 2;\n gantt.element.style.left = gantt.taskTableWidth ? `${gantt.taskTableWidth}px` : '0px';\n gantt._resize();\n });\n }\n}\nexport function syncEditCellFromTable(gantt: Gantt) {\n gantt.taskListTableInstance?.on('change_cell_value', (args: any) => {\n const { col, row, rawValue, changedValue } = args;\n gantt.redrawRecord(row - gantt.taskListTableInstance.columnHeaderLevelCount);\n // const record = gantt.getRecordByIndex(row - gantt.listTableInstance.columnHeaderLevelCount);\n // debugger;\n });\n}\n\nexport function syncDragOrderFromTable(gantt: Gantt) {\n gantt.taskListTableInstance?.on('change_header_position', (args: any) => {\n gantt.scenegraph.refreshTaskBars();\n const left = gantt.stateManager.scroll.horizontalBarPos;\n const top = gantt.stateManager.scroll.verticalBarPos;\n gantt.scenegraph.setX(-left);\n gantt.scenegraph.setY(-top);\n });\n}\n\nexport function syncTreeChangeFromTable(gantt: Gantt) {\n gantt.taskListTableInstance?.on('tree_hierarchy_state_change', (args: any) => {\n gantt._syncPropsFromTable();\n gantt.resizeLine.style.height = gantt.drawHeight + 'px'; //'100%';\n gantt.scenegraph.refreshTaskBarsAndGrid();\n const left = gantt.stateManager.scroll.horizontalBarPos;\n const top = gantt.stateManager.scroll.verticalBarPos;\n gantt.scenegraph.setX(-left);\n gantt.scenegraph.setY(-top);\n });\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import type { Gantt } from '../Gantt';
2
+ import { InteractionState } from '../ts-types';
3
+ import type { VRender } from '@visactor/vtable';
4
+ import type { GanttTaskBarNode } from '../scenegraph/ganttNode';
5
+ export declare class StateManager {
6
+ _gantt: Gantt;
7
+ scroll: {
8
+ horizontalBarPos: number;
9
+ verticalBarPos: number;
10
+ };
11
+ fastScrolling: boolean;
12
+ interactionState: InteractionState;
13
+ moveTaskBar: {
14
+ startX: number;
15
+ startY: number;
16
+ targetStartX: number;
17
+ moving: boolean;
18
+ target: GanttTaskBarNode;
19
+ };
20
+ hoverTaskBar: {
21
+ startX: number;
22
+ targetStartX: number;
23
+ target: GanttTaskBarNode;
24
+ };
25
+ resizeTaskBar: {
26
+ startX: number;
27
+ startY: number;
28
+ targetStartX: number;
29
+ target: GanttTaskBarNode;
30
+ resizing: boolean;
31
+ onIconName: string;
32
+ };
33
+ resizeTableWidth: {
34
+ lastX: number;
35
+ resizing: boolean;
36
+ };
37
+ resetInteractionState: (this: any, ...args: any) => any;
38
+ constructor(gantt: Gantt);
39
+ setScrollTop(top: number, triggerEvent?: boolean): void;
40
+ setScrollLeft(left: number, triggerEvent?: boolean): void;
41
+ updateInteractionState(mode: InteractionState): void;
42
+ updateVerticalScrollBar(yRatio: number): void;
43
+ updateHorizontalScrollBar(xRatio: number): void;
44
+ startMoveTaskBar(target: GanttTaskBarNode, x: number, y: number): void;
45
+ isMoveingTaskBar(): boolean;
46
+ endMoveTaskBar(x: number): void;
47
+ dealTaskBarMove(e: VRender.FederatedPointerEvent): void;
48
+ startResizeTaskBar(target: VRender.Group, x: number, y: number, onIconName: string): void;
49
+ isResizingTaskBar(): boolean;
50
+ endResizeTaskBar(x: number): void;
51
+ dealTaskBarResize(e: VRender.FederatedPointerEvent): void;
52
+ startResizeTableWidth(e: MouseEvent): void;
53
+ isResizingTableWidth(): boolean;
54
+ endResizeTableWidth(): void;
55
+ dealResizeTableWidth(e: MouseEvent): void;
56
+ showTaskBarHover(e: VRender.FederatedPointerEvent): void;
57
+ hideTaskBarHover(): void;
58
+ }
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.StateManager = void 0;
6
+
7
+ const vutils_1 = require("@visactor/vutils"), ts_types_1 = require("../ts-types"), gantt_table_sync_1 = require("./gantt-table-sync"), gantt_helper_1 = require("../gantt-helper"), debounce_1 = require("../tools/debounce");
8
+
9
+ class StateManager {
10
+ constructor(gantt) {
11
+ this.interactionState = ts_types_1.InteractionState.default, this.resetInteractionState = (0,
12
+ debounce_1.debounce)((() => {
13
+ this.updateInteractionState(ts_types_1.InteractionState.default);
14
+ }), 100), this._gantt = gantt, this.scroll = {
15
+ horizontalBarPos: 0,
16
+ verticalBarPos: 0
17
+ }, this.moveTaskBar = {
18
+ targetStartX: null,
19
+ startX: null,
20
+ startY: null,
21
+ moving: !1,
22
+ target: null
23
+ }, this.hoverTaskBar = {
24
+ targetStartX: null,
25
+ startX: null,
26
+ target: null
27
+ }, this.resizeTaskBar = {
28
+ targetStartX: null,
29
+ startX: null,
30
+ startY: null,
31
+ target: null,
32
+ resizing: !1,
33
+ onIconName: ""
34
+ }, this.resizeTableWidth = {
35
+ lastX: null,
36
+ resizing: !1
37
+ }, this.updateVerticalScrollBar = this.updateVerticalScrollBar.bind(this), this.updateHorizontalScrollBar = this.updateHorizontalScrollBar.bind(this),
38
+ (0, gantt_table_sync_1.syncScrollStateFromTable)(this._gantt), (0, gantt_table_sync_1.syncResizeStateFromTable)(this._gantt),
39
+ (0, gantt_table_sync_1.syncEditCellFromTable)(this._gantt), (0, gantt_table_sync_1.syncDragOrderFromTable)(this._gantt),
40
+ (0, gantt_table_sync_1.syncTreeChangeFromTable)(this._gantt);
41
+ }
42
+ setScrollTop(top, triggerEvent = !0) {
43
+ const totalHeight = this._gantt.getAllRowsHeight();
44
+ top = Math.max(0, Math.min(top, totalHeight - this._gantt.scenegraph.height)), top = Math.ceil(top);
45
+ const oldVerticalBarPos = this.scroll.verticalBarPos;
46
+ this.scroll.verticalBarPos = top, (0, vutils_1.isValid)(this.scroll.verticalBarPos) && !isNaN(this.scroll.verticalBarPos) || (this.scroll.verticalBarPos = 0),
47
+ this._gantt.scenegraph.setY(-top);
48
+ const yRatio = top / (totalHeight - this._gantt.scenegraph.height);
49
+ this._gantt.scenegraph.scrollbarComponent.updateVerticalScrollBarPos(yRatio), oldVerticalBarPos !== top && triggerEvent && ((0,
50
+ gantt_table_sync_1.syncScrollStateToTable)(this._gantt), this._gantt.fireListeners(ts_types_1.GANTT_EVENT_TYPE.SCROLL, {
51
+ scrollTop: this.scroll.verticalBarPos,
52
+ scrollLeft: this.scroll.horizontalBarPos,
53
+ scrollDirection: "vertical",
54
+ scrollRatioY: yRatio
55
+ }));
56
+ }
57
+ setScrollLeft(left, triggerEvent = !0) {
58
+ const totalWidth = this._gantt.getAllColsWidth();
59
+ left = Math.max(0, Math.min(left, totalWidth - this._gantt.scenegraph.width)), left = Math.ceil(left);
60
+ const oldHorizontalBarPos = this.scroll.horizontalBarPos;
61
+ this.scroll.horizontalBarPos = left, (0, vutils_1.isValid)(this.scroll.horizontalBarPos) && !isNaN(this.scroll.horizontalBarPos) || (this.scroll.horizontalBarPos = 0),
62
+ this._gantt.scenegraph.setX(-left);
63
+ const xRatio = left / (totalWidth - this._gantt.scenegraph.width);
64
+ this._gantt.scenegraph.scrollbarComponent.updateHorizontalScrollBarPos(xRatio),
65
+ oldHorizontalBarPos !== left && triggerEvent && this._gantt.fireListeners(ts_types_1.GANTT_EVENT_TYPE.SCROLL, {
66
+ scrollTop: this.scroll.verticalBarPos,
67
+ scrollLeft: this.scroll.horizontalBarPos,
68
+ scrollDirection: "horizontal",
69
+ scrollRatioX: xRatio
70
+ });
71
+ }
72
+ updateInteractionState(mode) {
73
+ if (this.interactionState === mode) return;
74
+ const oldState = this.interactionState;
75
+ this.interactionState = mode, oldState === ts_types_1.InteractionState.scrolling && ts_types_1.InteractionState.default;
76
+ }
77
+ updateVerticalScrollBar(yRatio) {
78
+ const totalHeight = this._gantt.getAllRowsHeight();
79
+ this.scroll.verticalBarPos;
80
+ this.scroll.verticalBarPos = Math.ceil(yRatio * (totalHeight - this._gantt.scenegraph.height)),
81
+ (0, vutils_1.isValid)(this.scroll.verticalBarPos) && !isNaN(this.scroll.verticalBarPos) || (this.scroll.verticalBarPos = 0),
82
+ this._gantt.scenegraph.setY(-this.scroll.verticalBarPos, 1 === yRatio), (0, gantt_table_sync_1.syncScrollStateToTable)(this._gantt),
83
+ this._gantt.fireListeners(ts_types_1.GANTT_EVENT_TYPE.SCROLL, {
84
+ scrollTop: this.scroll.verticalBarPos,
85
+ scrollLeft: this.scroll.horizontalBarPos,
86
+ scrollDirection: "vertical",
87
+ scrollRatioY: yRatio
88
+ });
89
+ }
90
+ updateHorizontalScrollBar(xRatio) {
91
+ const totalWidth = this._gantt.getAllColsWidth();
92
+ this.scroll.horizontalBarPos;
93
+ this.scroll.horizontalBarPos = Math.ceil(xRatio * (totalWidth - this._gantt.scenegraph.width)),
94
+ (0, vutils_1.isValid)(this.scroll.horizontalBarPos) && !isNaN(this.scroll.horizontalBarPos) || (this.scroll.horizontalBarPos = 0),
95
+ this._gantt.scenegraph.setX(-this.scroll.horizontalBarPos, 1 === xRatio), this._gantt.fireListeners(ts_types_1.GANTT_EVENT_TYPE.SCROLL, {
96
+ scrollTop: this.scroll.verticalBarPos,
97
+ scrollLeft: this.scroll.horizontalBarPos,
98
+ scrollDirection: "horizontal",
99
+ scrollRatioY: xRatio
100
+ });
101
+ }
102
+ startMoveTaskBar(target, x, y) {
103
+ "task-bar-hover-shadow" === target.name && (target = target.parent), this.moveTaskBar.moving = !0,
104
+ this.moveTaskBar.target = target, this.moveTaskBar.targetStartX = target.attribute.x,
105
+ this.moveTaskBar.startX = x, this.moveTaskBar.startY = y;
106
+ }
107
+ isMoveingTaskBar() {
108
+ return this.moveTaskBar.moving;
109
+ }
110
+ endMoveTaskBar(x) {
111
+ const deltaX = x - this.moveTaskBar.startX, days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay), correctX = days * this._gantt.parsedOptions.colWidthPerDay, targetEndX = this.moveTaskBar.targetStartX + correctX;
112
+ this._gantt.stateManager.moveTaskBar.target.setAttribute("x", targetEndX);
113
+ const taskIndex = (0, gantt_helper_1.getTaskIndexByY)(this.moveTaskBar.startY, this._gantt);
114
+ this._gantt.updateDateToTaskRecord("move", days, taskIndex), this.moveTaskBar.moving = !1,
115
+ this.moveTaskBar.target = null, this._gantt.scenegraph.updateNextFrame();
116
+ }
117
+ dealTaskBarMove(e) {
118
+ const target = this.moveTaskBar.target, x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x, dx = e.x - x1;
119
+ target.setAttribute("x", target.attribute.x + dx), this._gantt.scenegraph.updateNextFrame();
120
+ }
121
+ startResizeTaskBar(target, x, y, onIconName) {
122
+ this.resizeTaskBar.onIconName = onIconName, this.resizeTaskBar.resizing = !0, this.resizeTaskBar.target = target,
123
+ this.resizeTaskBar.targetStartX = target.attribute.x, this.resizeTaskBar.startX = x,
124
+ this.resizeTaskBar.startY = y;
125
+ }
126
+ isResizingTaskBar() {
127
+ return this.resizeTaskBar.resizing;
128
+ }
129
+ endResizeTaskBar(x) {
130
+ const direction = this._gantt.stateManager.resizeTaskBar.onIconName, deltaX = x - this.resizeTaskBar.startX;
131
+ let diff_days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay);
132
+ diff_days = "left" === direction ? -diff_days : diff_days;
133
+ const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target, rect = this._gantt.stateManager.resizeTaskBar.target.barRect, progressRect = this._gantt.stateManager.resizeTaskBar.target.progressRect, taskIndex = (0,
134
+ gantt_helper_1.getTaskIndexByY)(this.resizeTaskBar.startY, this._gantt), {taskDays: taskDays, progress: progress} = this._gantt.getTaskInfoByTaskListIndex(taskIndex);
135
+ diff_days < 0 && taskDays + diff_days <= 0 && (diff_days = 1 - taskDays);
136
+ const correctX = ("left" === direction ? -diff_days : diff_days) * this._gantt.parsedOptions.colWidthPerDay, targetEndX = this.resizeTaskBar.targetStartX + correctX, taskBarSize = this._gantt.parsedOptions.colWidthPerDay * (taskDays + diff_days);
137
+ "left" === direction ? (taskBarGroup.setAttribute("x", targetEndX), taskBarGroup.setAttribute("width", taskBarSize),
138
+ null == rect || rect.setAttribute("width", taskBarGroup.attribute.width), null == progressRect || progressRect.setAttribute("width", progress / 100 * taskBarGroup.attribute.width),
139
+ this._gantt.updateDateToTaskRecord("start-move", -diff_days, taskIndex)) : "right" === direction && (taskBarGroup.setAttribute("width", taskBarSize),
140
+ null == rect || rect.setAttribute("width", taskBarGroup.attribute.width), null == progressRect || progressRect.setAttribute("width", progress / 100 * taskBarGroup.attribute.width),
141
+ this._gantt.updateDateToTaskRecord("end-move", diff_days, taskIndex)), this._gantt.scenegraph.taskBar.showHoverBar(taskBarGroup.attribute.x, taskBarGroup.attribute.y, taskBarGroup.attribute.width, taskBarGroup.attribute.height),
142
+ reCreateCustomNode(this._gantt, taskBarGroup, taskIndex), this.resizeTaskBar.resizing = !1,
143
+ this.resizeTaskBar.target = null, this._gantt.scenegraph.updateNextFrame();
144
+ }
145
+ dealTaskBarResize(e) {
146
+ const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x, dx = e.x - x1, taskBarGroup = this._gantt.stateManager.resizeTaskBar.target, rect = taskBarGroup.barRect, progressRect = taskBarGroup.progressRect, textLabel = taskBarGroup.textLabel, progressField = this._gantt.parsedOptions.progressField, taskIndex = (0,
147
+ gantt_helper_1.getTaskIndexByY)(this.resizeTaskBar.startY, this._gantt), progress = this._gantt.getRecordByIndex(taskIndex)[progressField];
148
+ let diffWidth = "left" === this._gantt.stateManager.resizeTaskBar.onIconName ? -dx : dx, taskBarSize = taskBarGroup.attribute.width + diffWidth;
149
+ diffWidth < 0 && taskBarSize <= this._gantt.parsedOptions.colWidthPerDay && (diffWidth = this._gantt.parsedOptions.colWidthPerDay - taskBarGroup.attribute.width,
150
+ taskBarSize += diffWidth), taskBarGroup.setAttribute("width", taskBarSize), "left" === this._gantt.stateManager.resizeTaskBar.onIconName && taskBarGroup.setAttribute("x", taskBarGroup.attribute.x - diffWidth),
151
+ null == rect || rect.setAttribute("width", taskBarGroup.attribute.width), null == progressRect || progressRect.setAttribute("width", progress / 100 * taskBarGroup.attribute.width),
152
+ null == textLabel || textLabel.setAttribute("x", "center" === this._gantt.parsedOptions.taskBarLabelStyle.textAlign ? taskBarSize / 2 : "left" === this._gantt.parsedOptions.taskBarLabelStyle.textAlign ? 10 : taskBarSize - 10),
153
+ null == textLabel || textLabel.setAttribute("maxLineWidth", taskBarSize - 20);
154
+ const x = taskBarGroup.attribute.x, y = taskBarGroup.attribute.y, width = taskBarGroup.attribute.width, height = taskBarGroup.attribute.height;
155
+ this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, this.resizeTaskBar.target),
156
+ reCreateCustomNode(this._gantt, taskBarGroup, taskIndex), this._gantt.scenegraph.updateNextFrame();
157
+ }
158
+ startResizeTableWidth(e) {
159
+ this.resizeTableWidth.resizing = !0, this.resizeTableWidth.lastX = e.pageX;
160
+ }
161
+ isResizingTableWidth() {
162
+ return this.resizeTableWidth.resizing;
163
+ }
164
+ endResizeTableWidth() {
165
+ this.resizeTableWidth.resizing = !1;
166
+ }
167
+ dealResizeTableWidth(e) {
168
+ var _a, _b;
169
+ if (!this.resizeTableWidth.resizing) return;
170
+ const deltaX = e.pageX - this.resizeTableWidth.lastX;
171
+ if (Math.abs(deltaX) >= 1) {
172
+ let width = this._gantt.taskTableWidth + deltaX;
173
+ const maxWidth = Math.min(this._gantt.taskListTableInstance.getAllColsWidth() + 2 * this._gantt.tableX, null !== (_a = this._gantt.options.taskListTable.maxWidth) && void 0 !== _a ? _a : 1e5), minWidth = Math.max(2 * this._gantt.tableX, null !== (_b = this._gantt.options.taskListTable.minWidth) && void 0 !== _b ? _b : 0);
174
+ deltaX > 0 && width > maxWidth && (width = maxWidth), deltaX < 0 && width < minWidth && (width = minWidth),
175
+ this._gantt.taskTableWidth = width, this._gantt.element.style.left = this._gantt.taskTableWidth ? `${this._gantt.taskTableWidth}px` : "0px",
176
+ this._gantt.resizeLine.style.left = this._gantt.taskTableWidth ? this._gantt.taskTableWidth - 7 + "px" : "0px",
177
+ this._gantt._resize(), this.resizeTableWidth.lastX = e.pageX;
178
+ }
179
+ }
180
+ showTaskBarHover(e) {
181
+ const taskBarTarget = e.detailPath.find((pathNode => "task-bar" === pathNode.name));
182
+ if (this._gantt.stateManager.hoverTaskBar.target !== taskBarTarget) {
183
+ this._gantt.stateManager.hoverTaskBar.target = taskBarTarget;
184
+ const target = this._gantt.stateManager.hoverTaskBar.target, x = target.attribute.x, y = target.attribute.y, width = target.attribute.width, height = target.attribute.height;
185
+ this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, taskBarTarget),
186
+ this._gantt.scenegraph.updateNextFrame();
187
+ }
188
+ }
189
+ hideTaskBarHover() {
190
+ this._gantt.stateManager.hoverTaskBar.target = null, this._gantt.scenegraph.taskBar.hideHoverBar(),
191
+ this._gantt.scenegraph.updateNextFrame();
192
+ }
193
+ }
194
+
195
+ function reCreateCustomNode(gantt, taskBarGroup, taskIndex) {
196
+ const taskBarCustomLayout = gantt.parsedOptions.taskBarCustomLayout;
197
+ if (taskBarCustomLayout) {
198
+ let customLayoutObj;
199
+ if ("function" == typeof taskBarCustomLayout) {
200
+ const {startDate: startDate, endDate: endDate, taskDays: taskDays, progress: progress, taskRecord: taskRecord} = gantt.getTaskInfoByTaskListIndex(taskIndex);
201
+ customLayoutObj = taskBarCustomLayout({
202
+ width: taskBarGroup.attribute.width,
203
+ height: taskBarGroup.attribute.height,
204
+ index: taskIndex,
205
+ startDate: startDate,
206
+ endDate: endDate,
207
+ taskDays: taskDays,
208
+ progress: progress,
209
+ taskRecord: taskRecord,
210
+ ganttInstance: gantt
211
+ });
212
+ } else customLayoutObj = taskBarCustomLayout;
213
+ if (customLayoutObj) {
214
+ const rootContainer = customLayoutObj.rootContainer;
215
+ rootContainer.name = "task-bar-custom-render";
216
+ const oldCustomIndex = taskBarGroup.children.findIndex((node => "task-bar-custom-render" === node.name)), oldCustomNode = taskBarGroup.children[oldCustomIndex];
217
+ taskBarGroup.removeChild(oldCustomNode), taskBarGroup.insertInto(rootContainer, oldCustomIndex);
218
+ }
219
+ }
220
+ }
221
+
222
+ //# sourceMappingURL=state-manager.js.map
223
+ exports.StateManager = StateManager;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/state/state-manager.ts"],"names":[],"mappings":";;;AAAA,6CAA2C;AAE3C,0CAAiE;AAEjE,yDAO4B;AAC5B,kDAAkD;AAClD,gDAA6C;AAE7C,MAAa,YAAY;IAoDvB,YAAY,KAAY;QApCxB,qBAAgB,GAAqB,2BAAgB,CAAC,OAAO,CAAC;QAiC9D,0BAAqB,GAAG,IAAA,mBAAQ,EAAC,GAAG,EAAE;YACpC,IAAI,CAAC,sBAAsB,CAAC,2BAAgB,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC,EAAE,GAAG,CAAC,CAAC;QAEN,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG;YACZ,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,CAAC;SAClB,CAAC;QACF,IAAI,CAAC,WAAW,GAAG;YACjB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,IAAI;SACb,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG;YAClB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;SACb,CAAC;QACF,IAAI,CAAC,aAAa,GAAG;YACnB,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,EAAE;SACf,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG;YACtB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,KAAK;SAChB,CAAC;QAEF,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3E,IAAA,2CAAwB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,IAAA,2CAAwB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,IAAA,wCAAqB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,IAAA,yCAAsB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,IAAA,0CAAuB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,YAAY,CAAC,GAAW,EAAE,eAAwB,IAAI;QAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACnD,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC;QACjC,IAAI,CAAC,IAAA,gBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;YAC7E,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC;SAChC;QAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAGlC,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAE7E,IAAI,iBAAiB,KAAK,GAAG,IAAI,YAAY,EAAE;YAC7C,IAAA,yCAAsB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,2BAAgB,CAAC,MAAM,EAAE;gBACjD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;gBACrC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;gBAKxC,eAAe,EAAE,UAAU;gBAC3B,YAAY,EAAE,MAAM;aACrB,CAAC,CAAC;SACJ;IACH,CAAC;IACD,aAAa,CAAC,IAAY,EAAE,eAAwB,IAAI;QAEtD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAEjD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9E,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAMvB,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,IAAA,gBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;YACjF,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC;SAClC;QAGD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAGnC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;QAE/E,IAAI,mBAAmB,KAAK,IAAI,IAAI,YAAY,EAAE;YAChD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,2BAAgB,CAAC,MAAM,EAAE;gBACjD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;gBACrC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;gBAKxC,eAAe,EAAE,YAAY;gBAC7B,YAAY,EAAE,MAAM;aACrB,CAAC,CAAC;SACJ;IACH,CAAC;IAED,sBAAsB,CAAC,IAAsB;QAC3C,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE;YAClC,OAAO;SACR;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,QAAQ,KAAK,2BAAgB,CAAC,SAAS,IAAI,IAAI,KAAK,2BAAgB,CAAC,OAAO,EAAE;SAIjF;IACH,CAAC;IAED,uBAAuB,CAAC,MAAc;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC,IAAA,gBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;YAC7E,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC;SAChC;QACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC;QACvE,IAAA,yCAAsB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,2BAAgB,CAAC,MAAM,EAAE;YACjD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;YACrC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAKxC,eAAe,EAAE,UAAU;YAC3B,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IACD,yBAAyB,CAAC,MAAc;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QACjD,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC,IAAA,gBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;YACjF,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC;SAClC;QACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,2BAAgB,CAAC,MAAM,EAAE;YACjD,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;YACrC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAKxC,eAAe,EAAE,YAAY;YAC7B,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;IAkBL,CAAC;IAED,gBAAgB,CAAC,MAAwB,EAAE,CAAS,EAAE,CAAS;QAC7D,IAAI,MAAM,CAAC,IAAI,KAAK,uBAAuB,EAAE;YAC3C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;SACxB;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IACD,cAAc,CAAC,CAAS;QACtB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,IAAA,8BAAe,EAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;IAC3C,CAAC;IACD,eAAe,CAAC,CAAgC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACnB,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;IAG3C,CAAC;IAED,kBAAkB,CAAC,MAAqB,EAAE,CAAS,EAAE,CAAS,EAAE,UAAkB;QAIhF,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAChC,CAAC;IACD,iBAAiB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;IACrC,CAAC;IACD,gBAAgB,CAAC,CAAS;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC;QACpE,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAC7C,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAC9E,SAAS,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAE1D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC;QAChF,MAAM,SAAS,GAAG,IAAA,8BAAe,EAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1E,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;QACjF,IAAI,SAAS,GAAG,CAAC,IAAI,QAAQ,GAAG,SAAS,IAAI,CAAC,EAAE;YAC9C,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC;SAC1B;QACD,MAAM,QAAQ,GAAG,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC;QAC5G,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,QAAQ,CAAC;QAE9D,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;QACtF,IAAI,SAAS,KAAK,MAAM,EAAE;YACxB,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC3C,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAChD,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1D,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACrF,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SACzE;aAAM,IAAI,SAAS,KAAK,OAAO,EAAE;YAChC,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAChD,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1D,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACrF,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SACtE;QACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CACzC,YAAY,CAAC,SAAS,CAAC,CAAC,EACxB,YAAY,CAAC,SAAS,CAAC,CAAC,EACxB,YAAY,CAAC,SAAS,CAAC,KAAK,EAC5B,YAAY,CAAC,SAAS,CAAC,MAAM,CAC9B,CAAC;QACF,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;IAC3C,CAAC;IACD,iBAAiB,CAAC,CAAgC;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAEnB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;QACnE,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC;QAClC,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;QAC/C,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;QAEzC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAA,8BAAe,EAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;QAE3C,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,IAAI,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC;QAC3D,IAAI,SAAS,GAAG,CAAC,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE;YAC5E,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC;YACpF,WAAW,IAAI,SAAS,CAAC;SAC1B;QAED,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,KAAK,MAAM,EAAE;YAChE,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;SACtE;QAED,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1D,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrF,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,CACrB,GAAG,EACH,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,SAAS,KAAK,QAAQ;YAChE,CAAC,CAAC,WAAW,GAAG,CAAC;YACjB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,SAAS,KAAK,MAAM;gBAClE,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,WAAW,GAAG,EAAE,CACrB,CAAC;QACF,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,CAAC,cAAc,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC;QAE1D,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC;QAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAE5F,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;IAE3C,CAAC;IAID,qBAAqB,CAAC,CAAa;QACjC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAExC,CAAC;IACD,oBAAoB;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACxC,CAAC;IACD,mBAAmB;QACjB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,KAAK,CAAC;IACzC,CAAC;IAED,oBAAoB,CAAC,CAAa;;QAChC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YACnC,OAAO;SACR;QACD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QACrD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;YAC9C,IAAI,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAC5E,MAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,mCAAI,MAAM,CACrD,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,MAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,mCAAI,CAAC,CAAC,CAAC;YACnG,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE;gBAClC,KAAK,GAAG,QAAQ,CAAC;aAClB;YACD,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE;gBAClC,KAAK,GAAG,QAAQ,CAAC;aAClB;YACD,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YACxG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/G,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACvC;IACH,CAAC;IAGD,gBAAgB,CAAC,CAAgC;QAK/C,MAAM,aAAa,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAa,EAAE,EAAE;YACxD,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC;QACtC,CAAC,CAAQ,CAAC;QACV,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,KAAK,aAAa,EAAE;YAClE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,aAAa,CAAC;YAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC;YAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YAChF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;SAC1C;IAEH,CAAC;IACD,gBAAgB;QACd,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;IAC3C,CAAC;CACF;AA5bD,oCA4bC;AAED,SAAS,kBAAkB,CAAC,KAAY,EAAE,YAA2B,EAAE,SAAiB;IACtF,MAAM,mBAAmB,GAAG,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC;IACpE,IAAI,mBAAmB,EAAE;QACvB,IAAI,eAAe,CAAC;QACpB,IAAI,OAAO,mBAAmB,KAAK,UAAU,EAAE;YAC7C,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;YAC3G,MAAM,GAAG,GAAG;gBACV,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,KAAK;gBACnC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,MAAM;gBACrC,KAAK,EAAE,SAAS;gBAChB,SAAS;gBACT,OAAO;gBACP,QAAQ;gBACR,QAAQ;gBACR,UAAU;gBACV,aAAa,EAAE,KAAK;aACrB,CAAC;YACF,eAAe,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;SAC5C;aAAM;YACL,eAAe,GAAG,mBAAmB,CAAC;SACvC;QACD,IAAI,eAAe,EAAE;YACnB,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC;YACpD,aAAa,CAAC,IAAI,GAAG,wBAAwB,CAAC;YAC9C,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAS,EAAE,EAAE;gBACnE,OAAO,IAAI,CAAC,IAAI,KAAK,wBAAwB,CAAC;YAChD,CAAC,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAkB,CAAC;YAC7E,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACxC,YAAY,CAAC,UAAU,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;SACxD;KACF;AACH,CAAC","file":"state-manager.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport type { Gantt } from '../Gantt';\nimport { InteractionState, GANTT_EVENT_TYPE } from '../ts-types';\nimport type { VRender } from '@visactor/vtable';\nimport {\n syncEditCellFromTable,\n syncResizeStateFromTable,\n syncScrollStateFromTable,\n syncScrollStateToTable,\n syncDragOrderFromTable,\n syncTreeChangeFromTable\n} from './gantt-table-sync';\nimport { getTaskIndexByY } from '../gantt-helper';\nimport { debounce } from '../tools/debounce';\nimport type { GanttTaskBarNode } from '../scenegraph/ganttNode';\nexport class StateManager {\n _gantt: Gantt;\n\n scroll: {\n horizontalBarPos: number;\n verticalBarPos: number;\n };\n fastScrolling: boolean;\n /**\n * Default 默认展示\n * grabing 拖拽中\n * -Resize column 改变列宽\n * -column move 调整列顺序\n * -drag select 拖拽多选\n * Scrolling 滚动中\n */\n interactionState: InteractionState = InteractionState.default;\n\n moveTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n targetStartX: number;\n moving: boolean;\n target: GanttTaskBarNode;\n };\n\n hoverTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n targetStartX: number;\n target: GanttTaskBarNode;\n };\n resizeTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n targetStartX: number;\n target: GanttTaskBarNode;\n resizing: boolean;\n onIconName: string;\n };\n resizeTableWidth: {\n /** x坐标是相对table内坐标 */\n lastX: number;\n resizing: boolean;\n };\n\n // 供滚动重置为default使用\n resetInteractionState = debounce(() => {\n this.updateInteractionState(InteractionState.default);\n }, 100);\n constructor(gantt: Gantt) {\n this._gantt = gantt;\n this.scroll = {\n horizontalBarPos: 0,\n verticalBarPos: 0\n };\n this.moveTaskBar = {\n targetStartX: null,\n startX: null,\n startY: null,\n moving: false,\n target: null\n };\n\n this.hoverTaskBar = {\n targetStartX: null,\n startX: null,\n target: null\n };\n this.resizeTaskBar = {\n targetStartX: null,\n startX: null,\n startY: null,\n target: null,\n resizing: false,\n onIconName: ''\n };\n this.resizeTableWidth = {\n lastX: null,\n resizing: false\n };\n\n this.updateVerticalScrollBar = this.updateVerticalScrollBar.bind(this);\n this.updateHorizontalScrollBar = this.updateHorizontalScrollBar.bind(this);\n\n syncScrollStateFromTable(this._gantt);\n syncResizeStateFromTable(this._gantt);\n syncEditCellFromTable(this._gantt);\n syncDragOrderFromTable(this._gantt);\n syncTreeChangeFromTable(this._gantt);\n }\n\n setScrollTop(top: number, triggerEvent: boolean = true) {\n // 矫正top值范围\n const totalHeight = this._gantt.getAllRowsHeight();\n top = Math.max(0, Math.min(top, totalHeight - this._gantt.scenegraph.height));\n top = Math.ceil(top);\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n this.scroll.verticalBarPos = top;\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n // 设置scenegraph坐标\n this._gantt.scenegraph.setY(-top);\n\n // 更新scrollbar位置\n const yRatio = top / (totalHeight - this._gantt.scenegraph.height);\n this._gantt.scenegraph.scrollbarComponent.updateVerticalScrollBarPos(yRatio);\n\n if (oldVerticalBarPos !== top && triggerEvent) {\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n }\n setScrollLeft(left: number, triggerEvent: boolean = true) {\n // 矫正left值范围\n const totalWidth = this._gantt.getAllColsWidth();\n\n left = Math.max(0, Math.min(left, totalWidth - this._gantt.scenegraph.width));\n left = Math.ceil(left);\n // 滚动期间清空选中清空\n // if (left !== this.scroll.horizontalBarPos) {\n // this.updateHoverPos(-1, -1);\n // }\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = left;\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n\n // 设置scenegraph坐标\n this._gantt.scenegraph.setX(-left);\n\n // 更新scrollbar位置\n const xRatio = left / (totalWidth - this._gantt.scenegraph.width);\n this._gantt.scenegraph.scrollbarComponent.updateHorizontalScrollBarPos(xRatio);\n\n if (oldHorizontalBarPos !== left && triggerEvent) {\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioX: xRatio\n });\n }\n }\n\n updateInteractionState(mode: InteractionState) {\n if (this.interactionState === mode) {\n return;\n }\n const oldState = this.interactionState;\n this.interactionState = mode;\n // 处理mode 更新后逻辑\n if (oldState === InteractionState.scrolling && mode === InteractionState.default) {\n // this.table.scenegraph.stage.disableDirtyBounds();\n // this.table.scenegraph.stage.render();\n // this.table.scenegraph.stage.enableDirtyBounds();\n }\n }\n\n updateVerticalScrollBar(yRatio: number) {\n const totalHeight = this._gantt.getAllRowsHeight();\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n this.scroll.verticalBarPos = Math.ceil(yRatio * (totalHeight - this._gantt.scenegraph.height));\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n this._gantt.scenegraph.setY(-this.scroll.verticalBarPos, yRatio === 1);\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n updateHorizontalScrollBar(xRatio: number) {\n const totalWidth = this._gantt.getAllColsWidth();\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = Math.ceil(xRatio * (totalWidth - this._gantt.scenegraph.width));\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n this._gantt.scenegraph.setX(-this.scroll.horizontalBarPos, xRatio === 1);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioY: xRatio\n });\n // this.scroll.horizontalBarPos -= this._gantt.scenegraph.proxy.deltaX;\n // this._gantt.scenegraph.proxy.deltaX = 0;\n\n // this._gantt.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n // scrollTop: this.scroll.verticalBarPos,\n // scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n // scrollDirection: 'horizontal',\n // scrollRatioX: xRatio\n // });\n\n // if (oldHorizontalBarPos !== this.scroll.horizontalBarPos) {\n // this.checkHorizontalScrollBarEnd();\n // }\n }\n\n startMoveTaskBar(target: GanttTaskBarNode, x: number, y: number) {\n if (target.name === 'task-bar-hover-shadow') {\n target = target.parent;\n }\n this.moveTaskBar.moving = true;\n this.moveTaskBar.target = target;\n this.moveTaskBar.targetStartX = target.attribute.x;\n this.moveTaskBar.startX = x;\n this.moveTaskBar.startY = y;\n }\n\n isMoveingTaskBar() {\n return this.moveTaskBar.moving;\n }\n endMoveTaskBar(x: number) {\n const deltaX = x - this.moveTaskBar.startX;\n const days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay);\n const correctX = days * this._gantt.parsedOptions.colWidthPerDay;\n const targetEndX = this.moveTaskBar.targetStartX + correctX;\n this._gantt.stateManager.moveTaskBar.target.setAttribute('x', targetEndX);\n const taskIndex = getTaskIndexByY(this.moveTaskBar.startY, this._gantt);\n this._gantt.updateDateToTaskRecord('move', days, taskIndex);\n this.moveTaskBar.moving = false;\n this.moveTaskBar.target = null;\n this._gantt.scenegraph.updateNextFrame();\n }\n dealTaskBarMove(e: VRender.FederatedPointerEvent) {\n const target = this.moveTaskBar.target;\n const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n target.setAttribute('x', target.attribute.x + dx);\n this._gantt.scenegraph.updateNextFrame();\n\n //\n }\n //#region 调整拖拽任务条的大小\n startResizeTaskBar(target: VRender.Group, x: number, y: number, onIconName: string) {\n // if (target.name === 'task-bar-hover-shadow') {\n // target = target.parent.parent;\n // }\n this.resizeTaskBar.onIconName = onIconName;\n this.resizeTaskBar.resizing = true;\n this.resizeTaskBar.target = target;\n this.resizeTaskBar.targetStartX = target.attribute.x;\n this.resizeTaskBar.startX = x;\n this.resizeTaskBar.startY = y;\n }\n isResizingTaskBar() {\n return this.resizeTaskBar.resizing;\n }\n endResizeTaskBar(x: number) {\n const direction = this._gantt.stateManager.resizeTaskBar.onIconName;\n const deltaX = x - this.resizeTaskBar.startX;\n let diff_days = Math.round(deltaX / this._gantt.parsedOptions.colWidthPerDay);\n diff_days = direction === 'left' ? -diff_days : diff_days;\n\n const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target;\n const rect = this._gantt.stateManager.resizeTaskBar.target.barRect;\n const progressRect = this._gantt.stateManager.resizeTaskBar.target.progressRect;\n const taskIndex = getTaskIndexByY(this.resizeTaskBar.startY, this._gantt);\n const { taskDays, progress } = this._gantt.getTaskInfoByTaskListIndex(taskIndex);\n if (diff_days < 0 && taskDays + diff_days <= 0) {\n diff_days = 1 - taskDays;\n }\n const correctX = (direction === 'left' ? -diff_days : diff_days) * this._gantt.parsedOptions.colWidthPerDay;\n const targetEndX = this.resizeTaskBar.targetStartX + correctX;\n\n const taskBarSize = this._gantt.parsedOptions.colWidthPerDay * (taskDays + diff_days);\n if (direction === 'left') {\n taskBarGroup.setAttribute('x', targetEndX);\n taskBarGroup.setAttribute('width', taskBarSize);\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n this._gantt.updateDateToTaskRecord('start-move', -diff_days, taskIndex);\n } else if (direction === 'right') {\n taskBarGroup.setAttribute('width', taskBarSize);\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n this._gantt.updateDateToTaskRecord('end-move', diff_days, taskIndex);\n }\n this._gantt.scenegraph.taskBar.showHoverBar(\n taskBarGroup.attribute.x,\n taskBarGroup.attribute.y,\n taskBarGroup.attribute.width,\n taskBarGroup.attribute.height\n );\n reCreateCustomNode(this._gantt, taskBarGroup, taskIndex);\n this.resizeTaskBar.resizing = false;\n this.resizeTaskBar.target = null;\n this._gantt.scenegraph.updateNextFrame();\n }\n dealTaskBarResize(e: VRender.FederatedPointerEvent) {\n const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n // debugger;\n const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target;\n const rect = taskBarGroup.barRect;\n const progressRect = taskBarGroup.progressRect;\n const textLabel = taskBarGroup.textLabel;\n\n const progressField = this._gantt.parsedOptions.progressField;\n const taskIndex = getTaskIndexByY(this.resizeTaskBar.startY, this._gantt);\n const taskRecord = this._gantt.getRecordByIndex(taskIndex);\n const progress = taskRecord[progressField];\n\n let diffWidth = this._gantt.stateManager.resizeTaskBar.onIconName === 'left' ? -dx : dx;\n let taskBarSize = taskBarGroup.attribute.width + diffWidth;\n if (diffWidth < 0 && taskBarSize <= this._gantt.parsedOptions.colWidthPerDay) {\n diffWidth = this._gantt.parsedOptions.colWidthPerDay - taskBarGroup.attribute.width;\n taskBarSize += diffWidth;\n }\n\n taskBarGroup.setAttribute('width', taskBarSize);\n if (this._gantt.stateManager.resizeTaskBar.onIconName === 'left') {\n taskBarGroup.setAttribute('x', taskBarGroup.attribute.x - diffWidth);\n }\n\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n textLabel?.setAttribute(\n 'x',\n this._gantt.parsedOptions.taskBarLabelStyle.textAlign === 'center'\n ? taskBarSize / 2\n : this._gantt.parsedOptions.taskBarLabelStyle.textAlign === 'left'\n ? 10\n : taskBarSize - 10\n );\n textLabel?.setAttribute('maxLineWidth', taskBarSize - 20);\n\n const x = taskBarGroup.attribute.x;\n const y = taskBarGroup.attribute.y;\n const width = taskBarGroup.attribute.width;\n const height = taskBarGroup.attribute.height;\n this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, this.resizeTaskBar.target);\n\n reCreateCustomNode(this._gantt, taskBarGroup, taskIndex);\n this._gantt.scenegraph.updateNextFrame();\n //\n }\n //#endregion\n\n //#region 调整左侧任务列表表格整体的宽度\n startResizeTableWidth(e: MouseEvent) {\n this.resizeTableWidth.resizing = true;\n this.resizeTableWidth.lastX = e.pageX;\n //this.resizeTableWidth.startWidth = this._gantt.tableNoFrameWidth;\n }\n isResizingTableWidth() {\n return this.resizeTableWidth.resizing;\n }\n endResizeTableWidth() {\n this.resizeTableWidth.resizing = false;\n }\n\n dealResizeTableWidth(e: MouseEvent) {\n if (!this.resizeTableWidth.resizing) {\n return;\n }\n const deltaX = e.pageX - this.resizeTableWidth.lastX;\n if (Math.abs(deltaX) >= 1) {\n const startWidth = this._gantt.taskTableWidth;\n let width = startWidth + deltaX;\n const maxWidth = Math.min(\n this._gantt.taskListTableInstance.getAllColsWidth() + this._gantt.tableX * 2,\n this._gantt.options.taskListTable.maxWidth ?? 100000\n );\n const minWidth = Math.max(this._gantt.tableX * 2, this._gantt.options.taskListTable.minWidth ?? 0);\n if (deltaX > 0 && width > maxWidth) {\n width = maxWidth;\n }\n if (deltaX < 0 && width < minWidth) {\n width = minWidth;\n }\n this._gantt.taskTableWidth = width;\n this._gantt.element.style.left = this._gantt.taskTableWidth ? `${this._gantt.taskTableWidth}px` : '0px';\n this._gantt.resizeLine.style.left = this._gantt.taskTableWidth ? `${this._gantt.taskTableWidth - 7}px` : '0px';\n this._gantt._resize();\n this.resizeTableWidth.lastX = e.pageX;\n }\n }\n //#endregion\n\n showTaskBarHover(e: VRender.FederatedPointerEvent) {\n // const taskBarTarget =\n // e.target?.name === 'task-bar-hover-shadow-left-icon' || e.target?.name === 'task-bar-hover-shadow-right-icon'\n // ? e.target.parent //转成父级元素task-bar-hover-shadow 后面逻辑需要宽高值\n // : e.target;\n const taskBarTarget = e.detailPath.find((pathNode: any) => {\n return pathNode.name === 'task-bar'; // || pathNode.name === 'task-bar-hover-shadow';\n }) as any;\n if (this._gantt.stateManager.hoverTaskBar.target !== taskBarTarget) {\n this._gantt.stateManager.hoverTaskBar.target = taskBarTarget;\n const target = this._gantt.stateManager.hoverTaskBar.target;\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, taskBarTarget);\n this._gantt.scenegraph.updateNextFrame();\n }\n //\n }\n hideTaskBarHover() {\n this._gantt.stateManager.hoverTaskBar.target = null;\n this._gantt.scenegraph.taskBar.hideHoverBar();\n this._gantt.scenegraph.updateNextFrame();\n }\n}\n\nfunction reCreateCustomNode(gantt: Gantt, taskBarGroup: VRender.Group, taskIndex: number) {\n const taskBarCustomLayout = gantt.parsedOptions.taskBarCustomLayout;\n if (taskBarCustomLayout) {\n let customLayoutObj;\n if (typeof taskBarCustomLayout === 'function') {\n const { startDate, endDate, taskDays, progress, taskRecord } = gantt.getTaskInfoByTaskListIndex(taskIndex);\n const arg = {\n width: taskBarGroup.attribute.width,\n height: taskBarGroup.attribute.height,\n index: taskIndex,\n startDate,\n endDate,\n taskDays,\n progress,\n taskRecord,\n ganttInstance: gantt\n };\n customLayoutObj = taskBarCustomLayout(arg);\n } else {\n customLayoutObj = taskBarCustomLayout;\n }\n if (customLayoutObj) {\n const rootContainer = customLayoutObj.rootContainer;\n rootContainer.name = 'task-bar-custom-render';\n const oldCustomIndex = taskBarGroup.children.findIndex((node: any) => {\n return node.name === 'task-bar-custom-render';\n });\n const oldCustomNode = taskBarGroup.children[oldCustomIndex] as VRender.Group;\n taskBarGroup.removeChild(oldCustomNode);\n taskBarGroup.insertInto(rootContainer, oldCustomIndex);\n }\n }\n}\n"]}
@@ -0,0 +1 @@
1
+
package/cjs/themes.js ADDED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/themes.ts"],"names":[],"mappings":"","file":"themes.js","sourcesContent":["// /* eslint-disable sort-imports */\n// import { extend, getIgnoreCase } from './tools/helper';\n// import darkTheme from './themes/DARK';\n// import brightTheme from './themes/BRIGHT';\n// import arcoTheme from './themes/ARCO';\n// import defaultTheme from './themes/DEFAULT';\n// import materialDesignTheme from './themes/SIMPLIFY';\n// import { themes as plugins } from './plugins/themes';\n// import { TableTheme } from './themes/theme';\n// import type { ITableThemeDefine } from './ts-types';\n// export const DARK = new TableTheme(darkTheme, darkTheme);\n// export const BRIGHT = new TableTheme(brightTheme, brightTheme);\n// export const ARCO = new TableTheme(arcoTheme, arcoTheme);\n// export const DEFAULT = new TableTheme(defaultTheme, defaultTheme);\n// export const SIMPLIFY = new TableTheme(materialDesignTheme, materialDesignTheme);\n\n// const builtin: { [key: string]: TableTheme } = {\n// DEFAULT,\n// SIMPLIFY,\n// ARCO,\n// DARK,\n// BRIGHT\n// };\n// // let defTheme = DEFAULT;\n// export const theme = { TableTheme };\n// export function of(value: ITableThemeDefine | string | undefined | null): TableTheme | null {\n// if (!value) {\n// return null;\n// }\n// if (typeof value === 'string') {\n// const t = getIgnoreCase(get(), value);\n// if (t) {\n// if (t instanceof TableTheme) {\n// return t;\n// }\n// return new TableTheme(t, t);\n// }\n// return null;\n// }\n// if (value instanceof TableTheme) {\n// return value;\n// }\n// return new TableTheme(value, value);\n// }\n\n// export function get(): { [key: string]: TableTheme } {\n// return extend(builtin, plugins);\n// }\n// export { ITableThemeDefine };\n// export default {\n// DARK,\n// BRIGHT,\n// ARCO,\n// DEFAULT,\n// SIMPLIFY,\n// theme,\n// of,\n// get\n// };\n"]}
@@ -0,0 +1 @@
1
+ export declare function debounce(func: Function, wait?: number, options?: any): (this: any, ...args: any) => any;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.debounce = void 0;
6
+
7
+ const isx_1 = require("./isx");
8
+
9
+ function debounce(func, wait, options) {
10
+ let lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, maxing = !1, leading = !1, trailing = !0;
11
+ const useRAF = !wait && 0 !== wait && "function" == typeof requestAnimationFrame;
12
+ if ("function" != typeof func) throw new TypeError("Expected a function");
13
+ function invokeFunc(time) {
14
+ const args = lastArgs, thisArg = lastThis;
15
+ return lastThis = void 0, lastArgs = void 0, lastInvokeTime = time, result = func.apply(thisArg, args),
16
+ result;
17
+ }
18
+ function startTimer(pendingFunc, wait) {
19
+ return useRAF ? requestAnimationFrame(pendingFunc) : setTimeout(pendingFunc, wait);
20
+ }
21
+ function shouldInvoke(time) {
22
+ const timeSinceLastCall = time - lastCallTime;
23
+ return void 0 === lastCallTime || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && time - lastInvokeTime >= maxWait;
24
+ }
25
+ function timerExpired() {
26
+ const time = Date.now();
27
+ if (shouldInvoke(time)) return function(time) {
28
+ return timerId = void 0, trailing && lastArgs ? invokeFunc(time) : (lastThis = void 0,
29
+ lastArgs = void 0, result);
30
+ }(time);
31
+ timerId = startTimer(timerExpired, function(time) {
32
+ const timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait && -(time - lastCallTime);
33
+ return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
34
+ }(time));
35
+ }
36
+ return wait = +wait || 0, (0, isx_1.isObject)(options) && (leading = !!options.leading,
37
+ maxing = "maxWait" in options, maxing && (maxWait = Math.max(+options.maxWait || 0, wait)),
38
+ trailing = "trailing" in options ? !!options.trailing : trailing), function(...args) {
39
+ const time = Date.now(), isInvoking = shouldInvoke(time);
40
+ if (lastArgs = args, lastThis = this, lastCallTime = time, isInvoking) {
41
+ if (void 0 === timerId) return function(time) {
42
+ return lastInvokeTime = time, timerId = startTimer(timerExpired, wait), leading ? invokeFunc(time) : result;
43
+ }(lastCallTime);
44
+ if (maxing) return timerId = startTimer(timerExpired, wait), invokeFunc(lastCallTime);
45
+ }
46
+ return void 0 === timerId && (timerId = startTimer(timerExpired, wait)), result;
47
+ };
48
+ }
49
+
50
+ exports.debounce = debounce;
51
+ //# sourceMappingURL=debounce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/debounce.ts"],"names":[],"mappings":"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","file":"debounce.js","sourcesContent":["import { isObject } from './isx';\n\nexport function debounce(func: Function, wait?: number, options?: any) {\n let lastArgs: any;\n let lastThis: any;\n let maxWait: number; // 最长等待时间\n let result: any; // 存储 func 函数的返回值\n let timerId: number | undefined; // 定时器 id\n let lastCallTime: number; // 最近一次 执行 debounced 函数时的时间\n\n // 最近一次执行 func 时的时间戳\n let lastInvokeTime = 0;\n // options 是否 传入了 maxWait\n let maxing = false;\n // 是否在延迟开始前调用函数\n let leading = false;\n // 是否在延迟结束后调用函数\n let trailing = true;\n\n const useRAF = !wait && wait !== 0 && typeof requestAnimationFrame === 'function';\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function');\n }\n\n wait = +(wait as number) || 0;\n\n if (isObject(options)) {\n leading = !!options.leading;\n\n maxing = 'maxWait' in options;\n if (maxing) {\n maxWait = Math.max(+options.maxWait || 0, wait);\n }\n\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time: number) {\n const args = lastArgs;\n const thisArg = lastThis;\n\n lastThis = undefined;\n lastArgs = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n // 开启定时器\n function startTimer(pendingFunc: any, wait: number) {\n if (useRAF) {\n return requestAnimationFrame(pendingFunc);\n }\n return setTimeout(pendingFunc, wait);\n }\n\n // 清除定时器\n // function cancelTimer(id: number) {\n // if (useRAF) {\n // return cancelAnimationFrame(id);\n // }\n // clearTimeout(id);\n // }\n\n // 在延迟开始前调用\n function leadingEdge(time: number) {\n // 记录 函数被调用时 的时间戳\n lastInvokeTime = time;\n //@ts-ignore\n timerId = startTimer(timerExpired, wait);\n return leading ? invokeFunc(time) : result;\n }\n\n // 在延迟结束后调用\n function trailingEdge(time: number) {\n timerId = undefined;\n\n // lastArgs 在 debounced 函数执行时赋值\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n // 重置参数和作用域\n lastThis = undefined;\n lastArgs = undefined;\n return result;\n }\n\n function remainingWait(time: number) {\n // 计算 time 与最近一次调用 debounced 函数的时间差\n const timeSinceLastCall = time - lastCallTime;\n // 计算 time 与最近一次调用 func 函数的时间差\n const timeSinceLastInvoke = time - lastInvokeTime;\n // 用 wait 减去已经等待的时间\n const timeWaiting = wait && -timeSinceLastCall;\n\n return maxing ? Math.min(timeWaiting as number, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n // 是否可以执行函数\n function shouldInvoke(time: number) {\n // 计算 time 与最近一次调用 debounced 函数的时间差\n const timeSinceLastCall = time - lastCallTime;\n // 计算 time 与最近一次调用 func 函数的时间差\n const timeSinceLastInvoke = time - lastInvokeTime;\n\n return (\n // 是不是第一次执行 debouned 函数\n lastCallTime === undefined ||\n timeSinceLastCall >= (wait as number) ||\n timeSinceLastCall < 0 ||\n (maxing && timeSinceLastInvoke >= maxWait)\n );\n }\n\n // 封装执行函数,用于 wait 延迟结束后执行\n function timerExpired() {\n const time = Date.now();\n // 根据时间来判断是否可以执行 func 函数\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // 重新计算时间,重新建一个定时器\n // @ts-ignore\n timerId = startTimer(timerExpired, remainingWait(time));\n }\n\n function debounced(this: any, ...args: any) {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n\n lastArgs = args;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n // 第一次执行时\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // @ts-ignore\n timerId = startTimer(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n // 因为 trailingEdge 函数内部会执行 timerId = undefined\n // trailingEdge 函数执行之后,又触发了 debounced\n if (timerId === undefined) {\n // @ts-ignore\n timerId = startTimer(timerExpired, wait);\n }\n\n return result;\n }\n\n return debounced;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { formatDate, getWeekNumber } from './util';
2
+ export { formatDate, getWeekNumber };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.getWeekNumber = exports.formatDate = void 0;
6
+
7
+ const util_1 = require("./util");
8
+
9
+ Object.defineProperty(exports, "formatDate", {
10
+ enumerable: !0,
11
+ get: function() {
12
+ return util_1.formatDate;
13
+ }
14
+ }), Object.defineProperty(exports, "getWeekNumber", {
15
+ enumerable: !0,
16
+ get: function() {
17
+ return util_1.getWeekNumber;
18
+ }
19
+ });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/index.ts"],"names":[],"mappings":";;;AAAA,iCAAmD;AAE1C,2FAFA,iBAAU,OAEA;AAAE,8FAFA,oBAAa,OAEA","file":"index.js","sourcesContent":["import { formatDate, getWeekNumber } from './util';\n\nexport { formatDate, getWeekNumber };\n"]}
@@ -0,0 +1,16 @@
1
+ export declare const judgeType: (value: any) => "symbol" | "error" | "undefined" | "object" | "function" | "array" | "string" | "number" | "regExp" | "boolean" | "date" | "null" | "document" | "global";
2
+ export declare const isIt: (v: any, type: string) => boolean;
3
+ export declare const isObject: (v: any) => boolean;
4
+ export declare const isFunction: (v: any) => boolean;
5
+ export declare const isArray: (v: any) => boolean;
6
+ export declare const isString: (v: any) => boolean;
7
+ export declare const isNumber: (v: any) => boolean;
8
+ export declare const isRegExp: (v: any) => boolean;
9
+ export declare const isBoolean: (v: any) => boolean;
10
+ export declare const isSymbol: (v: any) => boolean;
11
+ export declare const isDate: (v: any) => boolean;
12
+ export declare const isUndefined: (v: any) => boolean;
13
+ export declare const isNull: (v: any) => boolean;
14
+ export declare const isError: (v: any) => boolean;
15
+ export declare const isDocument: (v: any) => boolean;
16
+ export declare const isGlobal: (v: any) => boolean;