@libs-ui/services-diagram-draw 0.2.356-37

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 (33) hide show
  1. package/README.md +279 -0
  2. package/canvas.service.d.ts +42 -0
  3. package/diagram-draw.service.d.ts +91 -0
  4. package/direction.service.d.ts +43 -0
  5. package/esm2022/canvas.service.mjs +628 -0
  6. package/esm2022/diagram-draw.service.mjs +711 -0
  7. package/esm2022/direction.service.mjs +255 -0
  8. package/esm2022/index.mjs +6 -0
  9. package/esm2022/interfaces/canvas.interface.mjs +2 -0
  10. package/esm2022/interfaces/coordinates.interface.mjs +2 -0
  11. package/esm2022/interfaces/diagram.interface.mjs +2 -0
  12. package/esm2022/libs-ui-services-diagram-draw.mjs +5 -0
  13. package/esm2022/utils/calculator-branch.util.mjs +187 -0
  14. package/esm2022/utils/calculator-element.util.mjs +335 -0
  15. package/esm2022/utils/canvas.util.mjs +176 -0
  16. package/esm2022/utils/diagram.util.mjs +54 -0
  17. package/esm2022/utils/direction.util.mjs +103 -0
  18. package/esm2022/utils/horizontal/calculator-branch.util.mjs +243 -0
  19. package/esm2022/utils/horizontal/calculator-coordinates.util.mjs +315 -0
  20. package/fesm2022/libs-ui-services-diagram-draw.mjs +2982 -0
  21. package/fesm2022/libs-ui-services-diagram-draw.mjs.map +1 -0
  22. package/index.d.ts +5 -0
  23. package/interfaces/canvas.interface.d.ts +21 -0
  24. package/interfaces/coordinates.interface.d.ts +40 -0
  25. package/interfaces/diagram.interface.d.ts +109 -0
  26. package/package.json +27 -0
  27. package/utils/calculator-branch.util.d.ts +16 -0
  28. package/utils/calculator-element.util.d.ts +24 -0
  29. package/utils/canvas.util.d.ts +21 -0
  30. package/utils/diagram.util.d.ts +6 -0
  31. package/utils/direction.util.d.ts +6 -0
  32. package/utils/horizontal/calculator-branch.util.d.ts +67 -0
  33. package/utils/horizontal/calculator-coordinates.util.d.ts +42 -0
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from './canvas.service';
2
+ export * from './diagram-draw.service';
3
+ export * from './direction.service';
4
+ export * from './interfaces/canvas.interface';
5
+ export * from './interfaces/diagram.interface';
@@ -0,0 +1,21 @@
1
+ import { IDiagramElement, IDiagramElementBranch } from './diagram.interface';
2
+ export interface IBranchEndCount {
3
+ branchContainer?: IDiagramElementBranch;
4
+ count: number;
5
+ branchEmpty: number;
6
+ }
7
+ export interface IHandlerFunction {
8
+ getConfigDefaultBranches(code: string, dataDefault: IDiagramElement): IDiagramElement;
9
+ }
10
+ export interface IRuleConnectable {
11
+ elementCode: string;
12
+ elementCodeConnectableBefore: Array<string>;
13
+ }
14
+ /**
15
+ * Function kiểm tra điều kiện để hiển thị drop zone tại một element/branch.
16
+ * Trả về true → hiển thị "+", false → ẩn.
17
+ * - beforeElementDrag: element trước element đang xét để hiển thị drop zone
18
+ * - currentElementDrag: element đang xét để hiển thị drop zone
19
+ * - afterElementDrag: element sau element đang xét để hiển thị drop zone
20
+ */
21
+ export type TDropZoneCanDropFn = (beforeElementDrag: IDiagramElement | undefined, currentElementDrag: IDiagramElement | undefined, afterElementDrag: IDiagramElement | undefined, ruleConnectableElements: Array<IRuleConnectable>) => boolean;
@@ -0,0 +1,40 @@
1
+ export interface IConfigCoordinatesParam {
2
+ ELEMENT_WIDTH_DEFAULT_BRANCH_WHEN_NOT_ELEMENT?: number;
3
+ ELEMENT_MARGIN_DEFAULT?: number;
4
+ ELEMENT_MARGIN_DEFAULT_BRANCH?: number;
5
+ ELEMENT_MARGIN_BETWEEN_BRANCH_DEFAULT?: number;
6
+ DEFAULT_BRANCH_WHEN_NO_ELEMENT?: number;
7
+ ELEMENT_HEIGHT_CURVE?: number;
8
+ ELEMENT_MARGIN_DEFAULT_BRANCH_TO_ELEMENT_FIRST?: number;
9
+ ELEMENT_SVG_STROKE_COLOR?: string;
10
+ ELEMENT_SVG_STROKE_WIDTH?: string;
11
+ DISTANCE_TO_WAIT?: number;
12
+ WAIT_TO_ELEMENT?: number;
13
+ ELEMENT_WAIT_DEFAULT?: number;
14
+ DISTANCE_WAIT_TO_NEXT_LINE?: number;
15
+ TYPE_CONSTITUENT_OTHER_EXIT?: string;
16
+ }
17
+ export interface IDataDiagramConfigSvg {
18
+ updateSVG?: boolean;
19
+ mode?: 'preview' | 'config';
20
+ positionMaxLeft: number;
21
+ positionMaxTop: number;
22
+ widthHeightSvgCanvas: {
23
+ heightSvg: number;
24
+ widthSvg: number;
25
+ };
26
+ }
27
+ export interface IDataDiagramSvg {
28
+ elementSvg?: SVGPathElement;
29
+ attributeSvgD?: string;
30
+ }
31
+ export interface ICoordinatesDiagramSvg {
32
+ mx?: number;
33
+ my?: number;
34
+ x1?: number;
35
+ y1?: number;
36
+ x?: number;
37
+ y?: number;
38
+ lx?: number;
39
+ ly?: number;
40
+ }
@@ -0,0 +1,109 @@
1
+ import { ElementRef, Type, ViewContainerRef } from '@angular/core';
2
+ export interface IDiagramElement {
3
+ code?: string;
4
+ name?: string;
5
+ branches?: Array<IDiagramElementBranch>;
6
+ specific_x?: number;
7
+ specific_y?: number;
8
+ specific_width?: number;
9
+ specific_height?: number;
10
+ elementSvg?: SVGPathElement;
11
+ attributeSvgD?: string;
12
+ maxHeightBranch?: number;
13
+ position_end_branch?: number;
14
+ position_end?: number;
15
+ translateX?: number;
16
+ translateY?: number;
17
+ attributeSvgDConnectToOtherElement?: Array<{
18
+ elementSvg?: SVGPathElement;
19
+ path: string;
20
+ }>;
21
+ pre_other_id?: Array<string>;
22
+ next_other_id?: Array<string>;
23
+ subCodeOfElement?: string;
24
+ next_id?: string;
25
+ nodeOtherConfig?: IDiagramElement;
26
+ disable?: boolean;
27
+ id?: string;
28
+ element_type?: string;
29
+ specific_counter_current_code?: number;
30
+ pre_id?: string;
31
+ }
32
+ export interface IDiagramElementBranch {
33
+ code?: string;
34
+ label?: string;
35
+ labelBgColor?: string;
36
+ elements: Array<IDiagramElement>;
37
+ elementSvg?: SVGPathElement;
38
+ attributeSvgD?: string;
39
+ onTheSide?: 'above' | 'under' | 'center';
40
+ positionMaxLeft?: number;
41
+ positionMaxTop?: number;
42
+ specific_start_branch_x?: number;
43
+ specific_start_branch_y?: number;
44
+ widthBranch?: {
45
+ width?: number;
46
+ above?: number;
47
+ under?: number;
48
+ };
49
+ next_other_id?: Array<string>;
50
+ isDirection?: boolean;
51
+ nodeOtherConfig?: IDiagramElement;
52
+ }
53
+ export interface ICanvasConfig {
54
+ ELEMENT_WIDTH_DEFAULT_BRANCH_WHEN_NOT_ELEMENT: number;
55
+ ELEMENT_MARGIN_DEFAULT: number;
56
+ ELEMENT_MARGIN_DEFAULT_BRANCH: number;
57
+ ELEMENT_MARGIN_BETWEEN_BRANCH_DEFAULT: number;
58
+ DEFAULT_BRANCH_WHEN_NO_ELEMENT: number;
59
+ ELEMENT_HEIGHT_CURVE: number;
60
+ ELEMENT_SVG_STROKE_COLOR: string;
61
+ ELEMENT_SVG_STROKE_WIDTH: string;
62
+ ELEMENT_MARGIN_DEFAULT_BRANCH_TO_ELEMENT_FIRST: number;
63
+ DISTANCE_TO_WAIT: number;
64
+ WAIT_TO_ELEMENT: number;
65
+ ELEMENT_WAIT_DEFAULT: number;
66
+ DISTANCE_WAIT_TO_NEXT_LINE: number;
67
+ TYPE_ELEMENT_EXIT: string;
68
+ TYPE_ELEMENT_WORKFLOW: string;
69
+ WIDTH_ELEMENT_DEFAULT: number;
70
+ HEIGHT_ELEMENT_DEFAULT: number;
71
+ ADD_ICON_DIAMETER: number;
72
+ }
73
+ /**
74
+ * Style config cho indicator (nút "+") của drop zone.
75
+ * Tất cả các field đều optional – giá trị nào không truyền sẽ dùng mặc định.
76
+ */
77
+ export interface IDropZoneIndicatorStyle {
78
+ borderRadius?: string;
79
+ backgroundColor?: string;
80
+ iconColor?: string;
81
+ opacity?: number;
82
+ hoverBackgroundColor?: string;
83
+ hoverBorderColor?: string;
84
+ hoverBorderStyle?: string;
85
+ hoverBorderRadius?: number;
86
+ /** Hàm render **động** nội dung indicator ở trạng thái bình thường. */
87
+ renderIndicator?: (size: number) => string;
88
+ /** Hàm render **động** nội dung indicator ở trạng thái hover/drag-enter.*/
89
+ renderHoverIndicator?: () => string;
90
+ }
91
+ export interface IConfig {
92
+ storeDataDefine: IDiagramStoreData;
93
+ svgContainer?: ElementRef<HTMLDivElement>;
94
+ nodesContainer?: ElementRef<HTMLDivElement>;
95
+ viewContainerRef?: ViewContainerRef;
96
+ nodeComponentType?: Type<any>;
97
+ nodeOtherConfigComponentType?: Type<any>;
98
+ useVirtualizationTemplate?: boolean;
99
+ /** Tuỳ chỉnh style cho indicator (nút "+") của drop zone */
100
+ dropZoneStyle?: IDropZoneIndicatorStyle;
101
+ }
102
+ export interface IDiagramStoreData {
103
+ positionMaxLeft: number;
104
+ positionMaxTop: number;
105
+ widthHeightSvgCanvas: {
106
+ heightSvg: number;
107
+ widthSvg: number;
108
+ };
109
+ }
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@libs-ui/services-diagram-draw",
3
+ "version": "0.2.356-37",
4
+ "peerDependencies": {
5
+ "@angular/core": "^18.2.0",
6
+ "@libs-ui/utils": "0.2.356-37",
7
+ "@ngx-translate/core": "^15.0.0",
8
+ "rxjs": "~7.8.0"
9
+ },
10
+ "sideEffects": false,
11
+ "module": "fesm2022/libs-ui-services-diagram-draw.mjs",
12
+ "typings": "index.d.ts",
13
+ "exports": {
14
+ "./package.json": {
15
+ "default": "./package.json"
16
+ },
17
+ ".": {
18
+ "types": "./index.d.ts",
19
+ "esm2022": "./esm2022/libs-ui-services-diagram-draw.mjs",
20
+ "esm": "./esm2022/libs-ui-services-diagram-draw.mjs",
21
+ "default": "./fesm2022/libs-ui-services-diagram-draw.mjs"
22
+ }
23
+ },
24
+ "dependencies": {
25
+ "tslib": "^2.3.0"
26
+ }
27
+ }
@@ -0,0 +1,16 @@
1
+ import { ICoordinatesDiagramSvg, IDataDiagramConfigSvg } from '../interfaces/coordinates.interface';
2
+ import { IDiagramElement, IDiagramElementBranch } from '../interfaces/diagram.interface';
3
+ export declare class MoLibDiagramCalculatorBranchUtil {
4
+ static drawStraightLine(left: number, lineFormElementToBranching: number, top: number, branch: IDiagramElementBranch, maxHeightBranch: number, config: IDataDiagramConfigSvg): void;
5
+ static leftLine(left: number, lineFormElementToBranching: number, top: number, lineBetweenBranch: number, branch: IDiagramElementBranch, maxHeightBranch: number, element: IDiagramElement, config: IDataDiagramConfigSvg): void;
6
+ static rightLine(left: number, lineFormElementToBranching: number, top: number, lineBetweenBranch: number, branch: IDiagramElementBranch, maxHeightBranch: number, element: IDiagramElement, config: IDataDiagramConfigSvg): void;
7
+ static drawElementInBranchLine(branch: IDiagramElementBranch, coordQL2: ICoordinatesDiagramSvg, config: IDataDiagramConfigSvg): void;
8
+ static drawMissingLineFromLastElement(branch: IDiagramElementBranch, coordQ3: ICoordinatesDiagramSvg): void;
9
+ static drawAboveUnderLine(left: number, lineFormElementToBranching: number, top: number, lineBetweenBranch: number, branch: IDiagramElementBranch, maxHeightBranch: number, direction: 'left' | 'right', config: IDataDiagramConfigSvg): {
10
+ coordQL1: ICoordinatesDiagramSvg;
11
+ coordQL2: ICoordinatesDiagramSvg;
12
+ isCheckAllElementConnectToExit: boolean;
13
+ };
14
+ static checkChildrenConnectToExit(elements: IDiagramElement[]): boolean;
15
+ static mathOperatorsCalculation(direction: 'left' | 'right' | 'above' | 'under' | string, a: number | undefined, b: number | undefined, opposite?: boolean): number;
16
+ }
@@ -0,0 +1,24 @@
1
+ import { IDataDiagramConfigSvg } from '../interfaces/coordinates.interface';
2
+ import { IDiagramElement } from '../interfaces/diagram.interface';
3
+ export declare class MoLibDiagramCalculatorCoordinatesUtil {
4
+ static setXYElements(elements: Array<IDiagramElement>, config: IDataDiagramConfigSvg, positionX?: number): void;
5
+ /**
6
+ * Set translateX và translateY từ specific_x và specific_y cho tất cả elements (bao gồm branches)
7
+ */
8
+ private static setTranslatePositions;
9
+ static calculatorMaxBranchHeight(element: IDiagramElement, maxHeightBranch: {
10
+ height: number;
11
+ }): void;
12
+ static plusHeightElementInBranch(elements: IDiagramElement[], total: {
13
+ height: number;
14
+ }): void;
15
+ static calculatorWidthBranch(elements: IDiagramElement[] | undefined, maxWidth: {
16
+ width: number;
17
+ aboveWidth: number;
18
+ underWidth: number;
19
+ }, log?: boolean): void;
20
+ }
21
+ export declare const getDistanceFromBranchToFirstBlock: (hasWaitConfig?: IDiagramElement) => number;
22
+ export declare const getHeightWaitConfig: (hasWaitConfig?: IDiagramElement) => number;
23
+ export declare const checkMaxLeft: (config: IDataDiagramConfigSvg, specific_x: number | undefined, positionMaxLeft: number | undefined) => void;
24
+ export declare const checkMaxTop: (config: IDataDiagramConfigSvg, specific_y: number | undefined, positionMaxTop: number | undefined) => void;
@@ -0,0 +1,21 @@
1
+ import { IBranchEndCount } from '../interfaces/canvas.interface';
2
+ import { IDiagramElement, IDiagramElementBranch } from '../interfaces/diagram.interface';
3
+ export declare class LibsUiDiagramDrawCanvasUtil {
4
+ static buildFlatElement(elements: Array<IDiagramElement>, flatElementsContainer: Array<IDiagramElement>): void;
5
+ static flatElementHasBranch(element: IDiagramElement, flatElementsContainer: Array<IDiagramElement>): void;
6
+ static getDefaultStorageBranchEndCount(): IBranchEndCount;
7
+ /**
8
+ * data: sử dụng reference Object type nên count sẽ đệ quy cho đến node cuối cùng
9
+ * data.branchContainer: branch cuối cùng của element không next đến idElement
10
+ * data.count: số lượng branch có next_id đến idElement
11
+ */
12
+ static getBranchContainerAndCountElementHasNextIdToElement(element: IDiagramElement, idElement: string | undefined, data: IBranchEndCount, flowFlatElements: Array<IDiagramElement>): void;
13
+ static getElementHasCurrentBranchOrCurrentElement(currentBranch?: IDiagramElementBranch, currentElement?: IDiagramElement, flatElements?: Array<IDiagramElement>): {
14
+ currentBranch?: IDiagramElementBranch;
15
+ element?: IDiagramElement;
16
+ };
17
+ static findAndDeleteElementFromContainer(containerElement: Array<IDiagramElement>, elementDelete: IDiagramElement): boolean;
18
+ static getBranchOfElement(elementId: string, flatElements: Array<IDiagramElement>, elementTypeWorkflow: string): IDiagramElementBranch | undefined;
19
+ }
20
+ export declare const getDefaultConfigConstituentBranches: (code: string, dataDefault: IDiagramElement) => IDiagramElement;
21
+ export declare const findAndDeleteElementFromContainer: (containerElement: Array<IDiagramElement>, elementDelete: IDiagramElement) => boolean;
@@ -0,0 +1,6 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import { IDiagramElement } from '../interfaces/diagram.interface';
3
+ export declare const buildFlatElement: (elements: Array<IDiagramElement>, flatElementsContainer: Array<IDiagramElement>) => void;
4
+ export declare const setAttributeSvgAndAppend: (svgElement: ElementRef<any> | undefined, elementSvg: SVGPathElement | undefined, svgAttributePathD: string, color?: string) => void;
5
+ export declare const canvasRemoveChildInSvg: (svgElement: ElementRef<any> | undefined) => void;
6
+ export declare const applyElementStyle: (el: HTMLElement, element: IDiagramElement) => void;
@@ -0,0 +1,6 @@
1
+ import { IDiagramElement, IDiagramElementBranch } from '../interfaces/diagram.interface';
2
+ export declare const buildElementDirectionTo: (element: IDiagramElement, flatElements: IDiagramElement[], checkRule: (element: IDiagramElement, item: IDiagramElement) => boolean, branch?: IDiagramElementBranch) => IDiagramElement[] | undefined;
3
+ export declare const getAllItemPreOfElement: (element: IDiagramElement, flatElements: IDiagramElement[]) => void;
4
+ export declare const getAllItemNextOfElement: (element: IDiagramElement, flatElements: IDiagramElement[]) => void;
5
+ export declare const getAllItemNextOfBranch: (branch: IDiagramElementBranch, flatElements: IDiagramElement[]) => void;
6
+ export declare const collectNextChainElements: (element: IDiagramElement, flatContainerElement: IDiagramElement[], listElementDelete: IDiagramElement[]) => void;
@@ -0,0 +1,67 @@
1
+ import { ICoordinatesDiagramSvg, IDataDiagramConfigSvg } from '../../interfaces/coordinates.interface';
2
+ import { IDiagramElement, IDiagramElementBranch } from '../../interfaces/diagram.interface';
3
+ /**
4
+ * Horizontal branch calculator.
5
+ * Flow direction: LEFT → RIGHT (trái sang phải).
6
+ * Branches spread: above = UP (y giảm), under = DOWN (y tăng).
7
+ *
8
+ * Mapping từ trục dọc sang ngang:
9
+ * vertical "left" branch (x giảm) ↔ horizontal "above" branch (y giảm)
10
+ * vertical "right" branch (x tăng) ↔ horizontal "under" branch (y tăng)
11
+ *
12
+ * Ký hiệu trong ICoordinatesDiagramSvg:
13
+ * (mx,my) = điểm bắt đầu Q curve
14
+ * (x1,y1) = control point
15
+ * (x,y) = end point của Q curve
16
+ * (lx,ly) = điểm cuối của L sau Q
17
+ */
18
+ export declare class MoLibDiagramHorizontalCalculatorBranchUtil {
19
+ private static getHorizontalDistanceToFirstBlock;
20
+ /** Nhánh giữa (center): kéo thẳng sang phải */
21
+ static drawStraightLine(top: number, // Y tâm của element cha
22
+ lineFormElementToBranching: number, // width element + margin đến điểm rẽ
23
+ left: number, // X trái của element cha
24
+ branch: IDiagramElementBranch, maxWidthBranch: number, config: IDataDiagramConfigSvg): void;
25
+ /** Nhánh phía trên (above): rẽ lên, rồi bẻ phải đến element */
26
+ static aboveLine(top: number, lineFormElementToBranching: number, left: number, lineBetweenBranch: number, branch: IDiagramElementBranch, maxWidthBranch: number, element: IDiagramElement, config: IDataDiagramConfigSvg): void;
27
+ /** Nhánh phía dưới (under): rẽ xuống, rồi bẻ phải đến element */
28
+ static underLine(top: number, lineFormElementToBranching: number, left: number, lineBetweenBranch: number, branch: IDiagramElementBranch, maxWidthBranch: number, element: IDiagramElement, config: IDataDiagramConfigSvg): void;
29
+ /** Đặt element đầu tiên trong nhánh dựa theo tọa độ cuối của QL2 */
30
+ static drawElementInBranchLine(branch: IDiagramElementBranch, coordQL2: ICoordinatesDiagramSvg, config: IDataDiagramConfigSvg): void;
31
+ /**
32
+ * Vẽ đường rẽ nhánh kiểu horizontal:
33
+ *
34
+ * M left top → bắt đầu tại tâm Y của element cha
35
+ * L Lx top → kéo NGANG sang phải đến điểm rẽ (Lx = left + lineFormElementToBranching - CURVE)
36
+ *
37
+ * QL1: bẻ từ hướng → sang hướng ↑ (above) hoặc ↓ (under)
38
+ * M (Lx, top)
39
+ * Q (Lx+C, top) → (Lx+C, top±C) control đi thẳng phải, điểm kết bắt đầu đi dọc
40
+ * L Lx+C, top±C±straight kéo thẳng dọc (lên/xuống)
41
+ *
42
+ * QL2: bẻ ngược lại → hướng ngang để tới element
43
+ * Q (Lx+C, top±C±straight±C) → (Lx+2C, top±C±straight±C)
44
+ * control đi tiếp dọc, điểm kết đi ngang (phải)
45
+ * L Lx+2C+distToFirst, same_Y kéo ngang đến vị trí element đầu tiên
46
+ *
47
+ * Sau QL2:
48
+ * coordQL2.lx = X bắt đầu của element đầu tiên
49
+ * coordQL2.ly = Y tâm của nhánh
50
+ */
51
+ static drawAboveUnderLine(top: number, lineFormElementToBranching: number, left: number, lineBetweenBranch: number, branch: IDiagramElementBranch, maxWidthBranch: number, direction: 'above' | 'under', config: IDataDiagramConfigSvg): {
52
+ coordQL1: ICoordinatesDiagramSvg;
53
+ coordQL2: ICoordinatesDiagramSvg;
54
+ isCheckAllElementConnectToExit: boolean;
55
+ };
56
+ static checkChildrenConnectToExit(elements: IDiagramElement[]): boolean;
57
+ /**
58
+ * Quy ước:
59
+ * above + opposite=true → a - b (đi lên, y giảm)
60
+ * above + opposite=false → a + b
61
+ * under + opposite=true → a + b (đi xuống, y tăng)
62
+ * under + opposite=false → a - b
63
+ */
64
+ static mathOp(direction: 'above' | 'under' | string, a: number | undefined, b: number | undefined, opposite?: boolean): number;
65
+ /** Alias để tương thích với code cũ gọi mathOperatorsCalculation */
66
+ static mathOperatorsCalculation(direction: 'above' | 'under' | string, a: number | undefined, b: number | undefined, opposite?: boolean): number;
67
+ }
@@ -0,0 +1,42 @@
1
+ import { IDataDiagramConfigSvg } from '../../interfaces/coordinates.interface';
2
+ import { IDiagramElement } from '../../interfaces/diagram.interface';
3
+ /**
4
+ * Horizontal layout calculator.
5
+ * Mirrors MoLibDiagramCalculatorCoordinatesUtil (vertical) but rotated 90°:
6
+ * - Elements grow LEFT → RIGHT (specific_x advances along main axis)
7
+ * - Branches split UP / DOWN (specific_y for branch offset)
8
+ * - "above" branch = upper side (y decreases)
9
+ * - "under" branch = lower side (y increases)
10
+ *
11
+ * Key axis mapping vs. vertical:
12
+ * vertical: specific_y ↕ specific_x centered
13
+ * horizontal: specific_x → specific_y centered
14
+ */
15
+ export declare class MoLibDiagramHorizontalCalculatorCoordinatesUtil {
16
+ static setXYElements(elements: Array<IDiagramElement>, config: IDataDiagramConfigSvg, positionY?: number): void;
17
+ /**
18
+ * Set translateX/Y cho tất cả elements (bao gồm branches và nodeOtherConfig)
19
+ */
20
+ private static setTranslatePositions;
21
+ /** Tính chiều rộng tối đa của nhánh (trong horizontal = chiều cao thực của nhánh không có element) */
22
+ static calculatorMaxBranchWidth(element: IDiagramElement, maxWidthBranch: {
23
+ width: number;
24
+ }): void;
25
+ /** Tính tổng chiều rộng các elements trong nhánh (dọc theo trục X) */
26
+ static plusWidthElementInBranch(elements: IDiagramElement[], total: {
27
+ height: number;
28
+ }): void;
29
+ /**
30
+ * Tính chiều cao (Y span) của một nhánh — dùng để offset các nhánh trên/dưới.
31
+ * Trong horizontal context: mỗi nhánh trải dài theo Y (lên/xuống).
32
+ */
33
+ static calculatorHeightBranch(elements: IDiagramElement[] | undefined, maxWidth: {
34
+ width: number;
35
+ aboveWidth: number;
36
+ underWidth: number;
37
+ }): void;
38
+ /** Tính khoảng cách thêm vào sau element (bao gồm wait config nếu có) */
39
+ private static checkElementGetMargin;
40
+ /** Tính chiều rộng của wait config node */
41
+ private static getWidthWaitConfig;
42
+ }