@g1cloud/bpmn-modeler-next 5.0.0-alpha.5 → 5.0.0-alpha.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/agentBatch.d.ts +3 -1
- package/dist/agent/geometryAudit.d.ts +455 -5
- package/dist/agent/resolver/index.d.ts +38 -1
- package/dist/agent/resolver/lower.d.ts +43 -0
- package/dist/agent/resolver/routeRepair.d.ts +112 -2
- package/dist/bpmn-modeler.js +11299 -9297
- package/dist/bpmn-modeler.umd.cjs +89 -88
- package/package.json +2 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GeometryEdge, GeometryPoint, GeometryShape } from '../geometryAudit';
|
|
1
|
+
import { GeometryEdge, GeometryLabel, GeometryPoint, GeometryScene, GeometryShape } from '../geometryAudit';
|
|
2
2
|
import { ResolverServices } from './lower';
|
|
3
3
|
/**
|
|
4
4
|
* 축 정렬 구간이 장애물을 **완전히 가로지를 때** 그것을 우회하는 4점을 만든다(순수).
|
|
@@ -11,6 +11,36 @@ import { ResolverServices } from './lower';
|
|
|
11
11
|
* - 장애물이 구간 끝에 걸쳐 있음 — 끝점 도킹과 얽혀 잘못 건드리면 연결이 떨어져 보인다
|
|
12
12
|
*/
|
|
13
13
|
export declare function planSegmentDetours(a: GeometryPoint, b: GeometryPoint, rect: GeometryShape, margin?: number): [GeometryPoint[], GeometryPoint[]] | null;
|
|
14
|
+
/**
|
|
15
|
+
* 꺾임점이 장애물 **안**에 있는 형상 — 구간 우회로는 못 푼다(B-13 ②, 두 번째 표본 잔존 1건).
|
|
16
|
+
*
|
|
17
|
+
* bpmn-js 의 직각 경로는 대개 h-v-h(또는 v-h-v) 3구간이고, **중간 구간의 좌표**는 양 끝점의
|
|
18
|
+
* 중점이다. 그 중점이 어떤 도형의 폭 안에 떨어지면 세로 구간이 그 도형을 관통하고 꺾임점도
|
|
19
|
+
* 그 안에 있어 `planSegmentDetours` 가 거부한다(실측: 되돌아가는 간선의 중간 x 가 게이트웨이
|
|
20
|
+
* 폭 안). 해법은 우회가 아니라 **중간 구간을 장애물 옆으로 옮기는 것** — 점 수는 그대로 4 다.
|
|
21
|
+
* 두 후보(장애물 왼쪽/오른쪽 또는 위/아래)를 돌려주고 채택은 호출자가 판정기로 한다.
|
|
22
|
+
*
|
|
23
|
+
* `null` = 4점 직각 경로가 아니다.
|
|
24
|
+
*/
|
|
25
|
+
export declare function planMiddleSegmentShifts(waypoints: readonly GeometryPoint[], rect: GeometryShape, margin?: number): [GeometryPoint[], GeometryPoint[]] | null;
|
|
26
|
+
/**
|
|
27
|
+
* 정방향 간선(목표가 출발의 오른쪽, 다른 행)의 3점 후보 둘(순수) — B-17 ⓒ.
|
|
28
|
+
* h-v: 출발 옆면(오른쪽) → 출발 행에서 가로 → 목표 중심 열에서 목표 윗/아랫면으로
|
|
29
|
+
* v-h: 출발 윗/아랫면 → 목표 행까지 세로 → 목표 왼쪽 옆면으로
|
|
30
|
+
* 같은 행이거나 되돌아가는 간선이면 빈 배열(그쪽은 `backEdgeCandidates` 몫).
|
|
31
|
+
*/
|
|
32
|
+
export declare function forwardThreePointCandidates(edge: GeometryEdge, shapes: readonly GeometryShape[]): GeometryPoint[][];
|
|
33
|
+
/**
|
|
34
|
+
* B-19 ⓓ. 다른 풀(위/아래)의 노드로 가는 메시지플로우가 자기 풀 안에서 막힐 때 — **목표 반대편으로 나가**
|
|
35
|
+
* 자기 행 바깥의 채널(출발 도형 가장자리 + 30)을 타고 목표 열까지 간 뒤 직진하는 4점.
|
|
36
|
+
* 열 번째 표본에서 사용자가 `반려 상품 재발송 → 처리 결과 수신` 을 정확히 이렇게 놓았다(재발송 아랫면 →
|
|
37
|
+
* y+30 채널 → 수신 열 → 위로 직진). 종전에는 위로 나간 기본 경로가 게이트웨이를 만나 ㄷ 우회 2회(8점)가
|
|
38
|
+
* 됐다 — 저작 에이전트도 그 지그재그를 보고에 지목했다.
|
|
39
|
+
* 목표 열은 목표 중심에 도킹 편이 0/±25/±40 — 그 열에 다른 메시지가 이미 중심 도킹해 있으면(같은 방향·같은
|
|
40
|
+
* 종류라 finding 은 아니지만 두 화살표가 한 선으로 합쳐 보인다 — 사용자도 -19 비껴 놓았다) 편이 후보가 피한다.
|
|
41
|
+
* 채택은 호출자 몫: 관통 0 을 먼저, 그다음 다른 간선과의 공선 공유가 없는 후보를 고른다.
|
|
42
|
+
*/
|
|
43
|
+
export declare function farSideChannelCandidates(edge: GeometryEdge, shapes: readonly GeometryShape[]): GeometryPoint[][];
|
|
14
44
|
/**
|
|
15
45
|
* 한 간선의 관통을 없애는 웨이포인트를 찾는다(순수). 못 찾으면 `null`.
|
|
16
46
|
*
|
|
@@ -23,7 +53,7 @@ export declare function planEdgeRepair(edge: GeometryEdge, targets: readonly Geo
|
|
|
23
53
|
y: number;
|
|
24
54
|
width: number;
|
|
25
55
|
height: number;
|
|
26
|
-
}): GeometryPoint[] | null;
|
|
56
|
+
}, others?: readonly GeometryEdge[]): GeometryPoint[] | null;
|
|
27
57
|
/**
|
|
28
58
|
* 이 배치가 **새로 만든** 관통을 고친다(하강 직후, undo 에피소드 안에서 호출된다).
|
|
29
59
|
*
|
|
@@ -32,3 +62,83 @@ export declare function planEdgeRepair(edge: GeometryEdge, targets: readonly Geo
|
|
|
32
62
|
* "고쳤는데 여전히 깨져 있다"가 되어 보고와 실물이 어긋난다.
|
|
33
63
|
*/
|
|
34
64
|
export declare function repairIntroducedCrossings(services: Pick<ResolverServices, 'elementRegistry' | 'modeling'>, beforeKeys: ReadonlySet<string>): void;
|
|
65
|
+
/**
|
|
66
|
+
* 풀 횡단 메시지플로우의 6점 경로 계획(순수). `null` = 이 간선은 대상이 아니거나(중간 풀 없음 ·
|
|
67
|
+
* 끝점 해소 불가) 더 나은 열이 없다.
|
|
68
|
+
*/
|
|
69
|
+
export declare function planCrossPoolRoute(edge: GeometryEdge, scene: GeometryScene): GeometryPoint[] | null;
|
|
70
|
+
/**
|
|
71
|
+
* 이 배치가 **새로 만든** 메시지플로우 중 풀을 횡단하는 것을 재경로한다(하강 직후, undo 에피소드
|
|
72
|
+
* 안). `beforeEdgeIds` = 하강 전 간선 id — 그 밖의 것만 대상(안전 성질 2: 선재 경로 불가침).
|
|
73
|
+
*/
|
|
74
|
+
export declare function rerouteIntroducedCrossPoolEdges(services: Pick<ResolverServices, 'elementRegistry' | 'modeling'>, beforeEdgeIds: ReadonlySet<string>): void;
|
|
75
|
+
/** 안쪽 구간(첫·끝 도킹 구간 제외)이 컨테이너 경계선과 나란히 이 거리 안에서 달리면 "경계에 붙었다"고 본다. */
|
|
76
|
+
export declare const BOUNDARY_CLEARANCE = 30;
|
|
77
|
+
/** 웨이포인트의 **안쪽 구간**(도킹 구간 제외)이 어느 컨테이너의 경계선과 나란히 `BOUNDARY_CLEARANCE` 안에서 겹쳐 달리는가. */
|
|
78
|
+
export declare function hugsContainerBoundary(pts: readonly GeometryPoint[], containers: readonly GeometryShape[]): boolean;
|
|
79
|
+
/** 안쪽 구간이 이 거리 안에서 다른 도형 옆을 지나면 "스친다"고 본다(관통은 아니지만 도형 사이 통로를 달리는 선). */
|
|
80
|
+
export declare const NEAR_PASS_MARGIN = 40;
|
|
81
|
+
/** 안쪽 구간(도킹 구간 제외)이 끝점 아닌 도형을 `NEAR_PASS_MARGIN` 안에서 스치는 횟수 — 빈 여백을 달리는 경로가 0. */
|
|
82
|
+
export declare function nearPassCount(pts: readonly GeometryPoint[], shapes: readonly GeometryShape[], endpoints: readonly string[]): number;
|
|
83
|
+
/**
|
|
84
|
+
* 경계에 붙어 달리는 되돌아가는 간선의 재경로(순수, B-26 ⓑ). 스무 번째 표본 `재결재`(담당자 레인 위 행 → 팀장 레인
|
|
85
|
+
* 결재)의 보정 경로 A2 는 채널이 레인 경계선 15px 아래를 달리고 목표 열 세로선이 위 행 노드들 옆을 지나갔다 —
|
|
86
|
+
* 사용자는 출발 아랫면 → 오른쪽 빈 열 → 결재 아래 채널 → 결재 아랫면으로 **빈 여백만 달리는** 경로를 그렸다(그 채널도
|
|
87
|
+
* 경계에서 20px — 경계 근접만으로는 사용자 답까지 버려진다). 그래서 지금 경로가 경계에 붙어 있을 때만 발동하고, 후보는
|
|
88
|
+
* 관통 0 · 읽을 수 없는 중첩 비증가 · 교차 비용 비증가를 지킨 뒤 **(스침 수 + 경계 근접) 최소 → 편이 → 길이** 로 고른다.
|
|
89
|
+
* 같은 레인 안에서 되돌아가는 간선(r2 `Flow_o14`)은 A2 채널이 경계에서 멀어 발동하지 않는다. 없으면 `null`.
|
|
90
|
+
*/
|
|
91
|
+
export declare function planBackEdgeBoundaryClearance(edge: GeometryEdge, scene: GeometryScene): GeometryPoint[] | null;
|
|
92
|
+
/** 이 배치가 **새로 만든** 시퀀스 플로우 중 경계에 붙어 달리는 되돌아가는 간선을 재경로한다(B-26 ⓑ). */
|
|
93
|
+
/**
|
|
94
|
+
* 배치가 만든 정방향 간선의 **불필요한 꺾임을 줄인다**(B-34 ⓑ) — bpmn-js 기본 맨해튼 라우팅은 출발 직후
|
|
95
|
+
* 꺾어 목표 행으로 올라간 뒤 가로로 가는 4점을 낸다. 사람은 두 회차 연속(표본 30·31, 같은 간선 같은 변환)
|
|
96
|
+
* **출발 행으로 끝까지 간 뒤 목표 열에서 꺾는 3점**으로 고쳤다.
|
|
97
|
+
*
|
|
98
|
+
* `planEdgeRepair`(B-9 ②)는 **관통이 있을 때만** 돌아 이 형상을 보지 못한다 — 관통이 없는 우회다.
|
|
99
|
+
* 안전 성질은 그대로: 배치가 만든 간선만 · 점 수가 줄 때만 · 관통 0 · 읽을 수 없는 중첩 비증가 ·
|
|
100
|
+
* 교차 비용 비증가. 하나라도 어긋나면 손대지 않는다.
|
|
101
|
+
*/
|
|
102
|
+
export declare function repairIntroducedDetours(services: Pick<ResolverServices, 'elementRegistry' | 'modeling'>, beforeEdgeIds: ReadonlySet<string>): void;
|
|
103
|
+
export declare function repairIntroducedBoundaryHugging(services: Pick<ResolverServices, 'elementRegistry' | 'modeling'>, beforeEdgeIds: ReadonlySet<string>): void;
|
|
104
|
+
/**
|
|
105
|
+
* 한 간선의 **읽을 수 없는 중첩**(반대 방향 · 종류 다름)을 없애거나 줄이는 경로(순수). 못 찾으면 `null`.
|
|
106
|
+
* 종류 다른 중첩(B-17 ⓐ)의 보정 = 도킹 편이 — "가급적 중심에 도킹하되 어쩔 수 없을 땐 약간 비껴서"
|
|
107
|
+
* (사용자 프레이밍). 기본은 중심이고, finding 이 났을 때만, 최소 편이(±25)부터 본다.
|
|
108
|
+
*/
|
|
109
|
+
export declare function planOppositeOverlapRepair(edge: GeometryEdge, scene: GeometryScene): GeometryPoint[] | null;
|
|
110
|
+
/**
|
|
111
|
+
* 이 배치가 **새로 만든** 읽을 수 없는 중첩(반대 방향 · 종류 다름)을 고친다(하강 직후, undo 에피소드 안).
|
|
112
|
+
* 짝 중 새 간선만 손댄다(안전 성질 2). 둘 다 새 것이면 **시퀀스 플로우부터** — 종류 다른 중첩에서 사용자는
|
|
113
|
+
* 메시지플로우(중심 도킹)를 두고 시퀀스 쪽을 비켰다(표본 7).
|
|
114
|
+
*/
|
|
115
|
+
export declare function repairIntroducedOppositeOverlaps(services: Pick<ResolverServices, 'elementRegistry' | 'modeling'>, beforeKeys: ReadonlySet<string>, beforeEdgeIds: ReadonlySet<string>): void;
|
|
116
|
+
/**
|
|
117
|
+
* 라벨의 새 bounds(순수). 라벨이 공유 구간 위에 없으면 `null`(옮길 이유가 없다). 고유 구간을 못
|
|
118
|
+
* 찾거나 옮긴 자리가 도형과 겹치면 `null`(손대지 않고 보고에 맡긴다).
|
|
119
|
+
*
|
|
120
|
+
* 구간마다 다른 간선과 공선 공유하는 부분(≥ 20px)을 빼고 남은 **첫 자유 부분** 중 라벨이 들어가는
|
|
121
|
+
* 곳을 고른다 — 부분 공유 구간(갈림점 아래로 이어지는 세로 구간)도 그 아래쪽이 자유 부분이다.
|
|
122
|
+
*/
|
|
123
|
+
export declare function planLabelPlacement(edge: GeometryEdge, scene: GeometryScene): GeometryLabel | null;
|
|
124
|
+
/** 라벨 상자와 선 사이 최소 여백(px). 가로 구간 라벨의 bpmn-js 기본(중심 15, 높이 14 → 아랫변 8 위)과 같은 값. */
|
|
125
|
+
export declare const LABEL_LINE_GAP = 8;
|
|
126
|
+
/**
|
|
127
|
+
* 라벨의 새 bounds(순수) — 어떤 선(자기 구간 · 다른 간선 구간 · 컨테이너 경계선)이든 상자를 가로지르면, 라벨이 붙은
|
|
128
|
+
* 구간(중심에 가장 가까운 자기 구간)의 옆자리 후보를 순서대로 시험해 **아무 선도 지나지 않는 첫 자리**로 옮긴다.
|
|
129
|
+
* 순서 = 세로 구간이면 오른쪽 → 왼쪽, 가로 구간이면 위 → 아래; 각각 구간 방향으로 0 · 위/왼쪽 · 아래/오른쪽 · 2단 편이
|
|
130
|
+
* (사용자는 레인 경계에 걸친 라벨을 **위로** 올렸다 — 위/왼쪽 우선). 구간 밖으로는 안 나간다. 전부 막히면 `null`
|
|
131
|
+
* (판정기가 보고한다). 바꿀 것이 없으면 `null`.
|
|
132
|
+
*/
|
|
133
|
+
export declare function planLabelLineClearance(edge: GeometryEdge, scene: GeometryScene): GeometryLabel | null;
|
|
134
|
+
/** 이 배치가 **새로 만든** 간선의 라벨을 선·경계선에서 뗀다(맨 마지막 — 라벨 귀속 보정 뒤). 선재 라벨은 불가침. */
|
|
135
|
+
export declare function repairIntroducedLabelLines(services: Pick<ResolverServices, 'elementRegistry' | 'modeling'>, beforeEdgeIds: ReadonlySet<string>): void;
|
|
136
|
+
/**
|
|
137
|
+
* 이 배치가 **새로 만든** 간선의 라벨 귀속 문제를 고친다(하강 직후, undo 에피소드 안, 경로 보정들 뒤).
|
|
138
|
+
* 선재 간선의 라벨은 사람이 놓았을 수 있어 손대지 않는다(안전 성질 2).
|
|
139
|
+
*/
|
|
140
|
+
export declare function repairIntroducedSharedSegmentLabels(services: Pick<ResolverServices, 'elementRegistry' | 'modeling'>, beforeKeys: ReadonlySet<string>, beforeEdgeIds: ReadonlySet<string>): void;
|
|
141
|
+
/** 라벨 상자를 가로지르는 선을 피한 새 자리(순수). 같은 쪽에서 선 밖으로 비끼기 → 도형 상·하·좌·우 기본 자리. 없으면 `null`. */
|
|
142
|
+
export declare function planShapeLabelClearance(shape: GeometryShape, scene: GeometryScene): GeometryLabel | null;
|
|
143
|
+
/** 이 배치가 **새로 만든** 도형의 이름 라벨을 선에서 뗀다(맨 마지막 — 경로·간선 라벨이 전부 확정된 뒤). */
|
|
144
|
+
export declare function repairIntroducedShapeLabelLines(services: Pick<ResolverServices, 'elementRegistry' | 'modeling'>, beforeShapeIds: ReadonlySet<string>): void;
|