@g1cloud/bpmn-modeler-next 5.0.0-alpha.1

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.
@@ -0,0 +1,1645 @@
1
+ var Fe = Object.defineProperty;
2
+ var _e = (t, a, n) => a in t ? Fe(t, a, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[a] = n;
3
+ var Q = (t, a, n) => _e(t, typeof a != "symbol" ? a + "" : a, n);
4
+ import { BpmnModdle as Te } from "bpmn-moddle";
5
+ import $e from "bpmn-i18n-moddle/resources/bpmn-i18n.json";
6
+ import { ref as pe, defineComponent as Ne, onMounted as qe, watch as Be, onBeforeUnmount as Le, openBlock as Re, createElementBlock as Ce } from "vue";
7
+ import De from "bpmn-js/lib/BaseModeler";
8
+ import je from "bpmn-js/lib/core";
9
+ import Ge from "bpmn-js/lib/features/modeling";
10
+ import Ve from "bpmn-js/lib/features/auto-place";
11
+ import Xe from "diagram-js/lib/i18n/translate";
12
+ import Ye from "bpmn-js/lib/Modeler";
13
+ const fe = [
14
+ "startEvent",
15
+ "endEvent",
16
+ "userTask",
17
+ "serviceTask",
18
+ "task",
19
+ "sendTask",
20
+ "receiveTask",
21
+ "exclusiveGateway",
22
+ "parallelGateway"
23
+ ];
24
+ function Ue(t) {
25
+ return fe.includes(t);
26
+ }
27
+ const We = "http://g1project.net/spec/bpmn/bwl/1.0", xe = "bwl", Ee = [
28
+ "top-left",
29
+ "top",
30
+ "top-right",
31
+ "right",
32
+ "bottom-right",
33
+ "bottom",
34
+ "bottom-left",
35
+ "left"
36
+ ], He = {
37
+ name: "bwl-hints",
38
+ uri: We,
39
+ prefix: xe,
40
+ xml: { tagAlias: "lowerCase" },
41
+ types: [
42
+ {
43
+ name: "Placement",
44
+ superClass: ["Element"],
45
+ properties: [
46
+ { name: "anchor", isAttr: !0, type: "String" },
47
+ { name: "side", isAttr: !0, type: "String" },
48
+ { name: "offset", isAttr: !0, type: "Real" }
49
+ ]
50
+ },
51
+ {
52
+ name: "Members",
53
+ superClass: ["Element"],
54
+ properties: [{ name: "refs", isAttr: !0, type: "String" }]
55
+ },
56
+ {
57
+ name: "BandHint",
58
+ extends: ["bpmn:FlowNode"],
59
+ properties: [{ name: "band", isAttr: !0, type: "Integer" }]
60
+ },
61
+ {
62
+ name: "PoolOrderHint",
63
+ extends: ["bpmn:Participant"],
64
+ properties: [{ name: "poolOrder", isAttr: !0, type: "Integer" }]
65
+ }
66
+ ]
67
+ }, Oe = "bwl.undoEpisode", he = /* @__PURE__ */ new WeakSet();
68
+ function ze(t) {
69
+ he.has(t) || (t.register(Oe, {
70
+ preExecute(a) {
71
+ try {
72
+ a.run();
73
+ } catch (n) {
74
+ a.error = n;
75
+ }
76
+ }
77
+ }), he.add(t));
78
+ }
79
+ function Ke(t, a) {
80
+ ze(t);
81
+ const n = { run: a };
82
+ if (t.execute(Oe, n), n.error !== void 0)
83
+ throw t.canUndo() && t.undo(), n.error;
84
+ }
85
+ const Qe = [
86
+ "participant.add",
87
+ "participant.update",
88
+ "node.add",
89
+ "node.update",
90
+ "sequenceFlow.add",
91
+ "sequenceFlow.update",
92
+ "messageFlow.add",
93
+ "messageFlow.update",
94
+ "dataStore.add",
95
+ "dataStore.update",
96
+ "dataAssociation.add",
97
+ "association.add",
98
+ "annotation.add",
99
+ "annotation.update",
100
+ "group.add",
101
+ "group.update",
102
+ "element.remove"
103
+ ], Ze = {
104
+ description: "생략 = 보존, null = 제거.",
105
+ anyOf: [{ type: "string" }, { type: "null" }]
106
+ }, Je = {
107
+ type: "object",
108
+ description: "레인. 배열 선언 순서 = 풀 내 상→하 순서.",
109
+ properties: {
110
+ id: { type: "string" },
111
+ name: { type: "string" }
112
+ },
113
+ required: ["id"],
114
+ additionalProperties: !1
115
+ }, et = {
116
+ type: "object",
117
+ description: "풀(participant). 레인은 여기 선언하고 노드가 lane 인자로 배정된다 — 별도 레인 op 없음.",
118
+ properties: {
119
+ id: { type: "string", description: "문서 내 유일, XML NCName(공백 없이 문자/밑줄로 시작)." },
120
+ name: { type: "string" },
121
+ blackBox: { type: "boolean", description: "true = 내부 프로세스 없는 블랙박스 풀." },
122
+ lanes: { type: "array", items: { $ref: "#/$defs/irLane" } }
123
+ },
124
+ required: ["id"],
125
+ additionalProperties: !1
126
+ }, tt = {
127
+ type: "object",
128
+ description: "플로우 노드. 좌표는 지정하지 않는다 — 배치는 resolver 가 결정한다.",
129
+ properties: {
130
+ id: { type: "string" },
131
+ type: { type: "string", enum: [...fe] },
132
+ name: { type: "string" },
133
+ participant: { type: "string", description: "소속 풀 id(협업 문서)." },
134
+ lane: { type: "string", description: "소속 레인 id(풀 정의에 선언된 것)." }
135
+ },
136
+ required: ["id", "type"],
137
+ additionalProperties: !1
138
+ }, nt = {
139
+ type: "object",
140
+ description: "분기 조건 — 게이트웨이가 아닌 플로우에 붙인다. MVP 는 label 만.",
141
+ properties: {
142
+ label: { type: "string" }
143
+ },
144
+ required: ["label"],
145
+ additionalProperties: !1
146
+ }, ot = {
147
+ type: "object",
148
+ description: "시퀀스 플로우(같은 풀 안 노드 간).",
149
+ properties: {
150
+ id: { type: "string" },
151
+ source: { type: "string" },
152
+ target: { type: "string" },
153
+ name: { type: "string" },
154
+ condition: { $ref: "#/$defs/irFlowCondition" }
155
+ },
156
+ required: ["id", "source", "target"],
157
+ additionalProperties: !1
158
+ }, at = {
159
+ type: "object",
160
+ description: "메시지 플로우(풀 경계를 넘는 연결 — 노드 또는 블랙박스 풀 자체가 끝점).",
161
+ properties: {
162
+ id: { type: "string" },
163
+ source: { type: "string" },
164
+ target: { type: "string" },
165
+ name: { type: "string" }
166
+ },
167
+ required: ["id", "source", "target"],
168
+ additionalProperties: !1
169
+ }, it = {
170
+ type: "object",
171
+ properties: {
172
+ id: { type: "string" },
173
+ name: { type: "string" }
174
+ },
175
+ required: ["id"],
176
+ additionalProperties: !1
177
+ }, st = {
178
+ type: "object",
179
+ description: "데이터 입출력 연관. 방향 = source→target(태스크→스토어 = 쓰기, 스토어→태스크 = 읽기).",
180
+ properties: {
181
+ id: { type: "string" },
182
+ source: { type: "string" },
183
+ target: { type: "string" }
184
+ },
185
+ required: ["source", "target"],
186
+ additionalProperties: !1
187
+ }, rt = {
188
+ type: "object",
189
+ properties: {
190
+ id: { type: "string" },
191
+ text: { type: "string" }
192
+ },
193
+ required: ["id", "text"],
194
+ additionalProperties: !1
195
+ }, ct = {
196
+ type: "object",
197
+ description: "연관선(주석 ↔ 요소).",
198
+ properties: {
199
+ id: { type: "string" },
200
+ source: { type: "string" },
201
+ target: { type: "string" }
202
+ },
203
+ required: ["source", "target"],
204
+ additionalProperties: !1
205
+ }, dt = {
206
+ type: "object",
207
+ description: "그룹 — members(요소 id 목록)가 bwl:members 힌트로 기록되고 바운즈는 멤버 bbox 로 산출된다.",
208
+ properties: {
209
+ id: { type: "string" },
210
+ name: { type: "string" },
211
+ members: { type: "array", items: { type: "string" } }
212
+ },
213
+ required: ["id"],
214
+ additionalProperties: !1
215
+ }, pt = {
216
+ type: "object",
217
+ description: "주석 방위 힌트 — 앵커 요소 기준 상대 배치. 있으면 결정적 배치, 없으면 휴리스틱.",
218
+ properties: {
219
+ anchor: { type: "string", description: "기준 요소 id." },
220
+ side: { type: "string", enum: [...Ee] },
221
+ offset: { type: "number" }
222
+ },
223
+ required: ["anchor", "side"],
224
+ additionalProperties: !1
225
+ };
226
+ function B(t, a) {
227
+ return {
228
+ type: "object",
229
+ description: a.description,
230
+ properties: { kind: { const: t }, ...a.properties },
231
+ required: ["kind", ...a.required ?? []],
232
+ additionalProperties: !1
233
+ };
234
+ }
235
+ const lt = {
236
+ "participant.add": B("participant.add", {
237
+ description: "풀 추가. order = 풀 세로 순서 힌트(생략 시 op 순서가 곧 배치 순서).",
238
+ properties: {
239
+ participant: { $ref: "#/$defs/irParticipant" },
240
+ order: { type: "integer" }
241
+ },
242
+ required: ["participant"]
243
+ }),
244
+ "participant.update": B("participant.update", {
245
+ description: "풀 이름/레인 갱신. lanes 는 전체 재선언(생략 = 보존) — 기존 레인을 유지하려면 함께 다시 나열한다.",
246
+ properties: {
247
+ id: { type: "string" },
248
+ name: { $ref: "#/$defs/nullableString" },
249
+ lanes: { type: "array", items: { $ref: "#/$defs/irLane" } }
250
+ },
251
+ required: ["id"]
252
+ }),
253
+ "node.add": B("node.add", {
254
+ description: "플로우 노드 추가. band = 프로세스 내부 가로 밴드 순번 힌트(주 흐름 0, 보조 스트랜드 1…).",
255
+ properties: {
256
+ node: { $ref: "#/$defs/irNode" },
257
+ band: { type: "integer" }
258
+ },
259
+ required: ["node"]
260
+ }),
261
+ "node.update": B("node.update", {
262
+ description: "노드 이름/레인/타입 갱신. lane = 레인 재배정(이동), type = 태스크·이벤트 타입 전환.",
263
+ properties: {
264
+ id: { type: "string" },
265
+ name: { $ref: "#/$defs/nullableString" },
266
+ lane: { type: "string" },
267
+ type: { type: "string", enum: [...fe] }
268
+ },
269
+ required: ["id"]
270
+ }),
271
+ "sequenceFlow.add": B("sequenceFlow.add", {
272
+ description: "시퀀스 플로우 추가. 분기 조건은 게이트웨이가 아닌 플로우의 condition 에 싣는다.",
273
+ properties: {
274
+ flow: { $ref: "#/$defs/irSequenceFlow" }
275
+ },
276
+ required: ["flow"]
277
+ }),
278
+ "sequenceFlow.update": B("sequenceFlow.update", {
279
+ description: "시퀀스 플로우 이름/조건 갱신. condition: null = 조건 제거.",
280
+ properties: {
281
+ id: { type: "string" },
282
+ name: { $ref: "#/$defs/nullableString" },
283
+ condition: {
284
+ description: "생략 = 보존, null = 제거.",
285
+ anyOf: [{ $ref: "#/$defs/irFlowCondition" }, { type: "null" }]
286
+ }
287
+ },
288
+ required: ["id"]
289
+ }),
290
+ "messageFlow.add": B("messageFlow.add", {
291
+ description: "메시지 플로우 추가(풀 경계를 넘는 연결).",
292
+ properties: {
293
+ flow: { $ref: "#/$defs/irMessageFlow" }
294
+ },
295
+ required: ["flow"]
296
+ }),
297
+ "messageFlow.update": B("messageFlow.update", {
298
+ description: "메시지 플로우 이름 갱신.",
299
+ properties: {
300
+ id: { type: "string" },
301
+ name: { $ref: "#/$defs/nullableString" }
302
+ },
303
+ required: ["id"]
304
+ }),
305
+ "dataStore.add": B("dataStore.add", {
306
+ description: "데이터 스토어 추가(+ 입출력 연관 동반 가능).",
307
+ properties: {
308
+ dataStore: { $ref: "#/$defs/irDataStore" },
309
+ associations: { type: "array", items: { $ref: "#/$defs/irDataAssociation" } }
310
+ },
311
+ required: ["dataStore"]
312
+ }),
313
+ "dataStore.update": B("dataStore.update", {
314
+ description: "데이터 스토어 이름 갱신.",
315
+ properties: {
316
+ id: { type: "string" },
317
+ name: { $ref: "#/$defs/nullableString" }
318
+ },
319
+ required: ["id"]
320
+ }),
321
+ "dataAssociation.add": B("dataAssociation.add", {
322
+ description: "기존 노드 ↔ 기존 데이터 스토어의 입출력 연관 추가.",
323
+ properties: {
324
+ association: { $ref: "#/$defs/irDataAssociation" }
325
+ },
326
+ required: ["association"]
327
+ }),
328
+ "association.add": B("association.add", {
329
+ description: "주석 ↔ 요소 연관 추가(한쪽 끝은 주석). 주석 신설과 함께면 annotation.add 의 association 을 쓰고, 이 op 는 추가 연관(한 주석에 여러 연관)용.",
330
+ properties: {
331
+ association: { $ref: "#/$defs/irAssociation" }
332
+ },
333
+ required: ["association"]
334
+ }),
335
+ "annotation.add": B("annotation.add", {
336
+ description: "텍스트 주석 추가. association 으로 대상 요소와 연결하고, placement 로 방위를 지정하면 결정적 배치된다.",
337
+ properties: {
338
+ annotation: { $ref: "#/$defs/irTextAnnotation" },
339
+ association: { $ref: "#/$defs/irAssociation" },
340
+ placement: { $ref: "#/$defs/bwlPlacement" }
341
+ },
342
+ required: ["annotation"]
343
+ }),
344
+ "annotation.update": B("annotation.update", {
345
+ description: "주석 본문/방위 힌트 갱신. placement: null = 힌트 제거(휴리스틱 복귀). 주석 삭제는 element.remove.",
346
+ properties: {
347
+ id: { type: "string" },
348
+ text: { type: "string" },
349
+ placement: {
350
+ description: "생략 = 보존, null = 힌트 제거.",
351
+ anyOf: [{ $ref: "#/$defs/bwlPlacement" }, { type: "null" }]
352
+ }
353
+ },
354
+ required: ["id"]
355
+ }),
356
+ "group.add": B("group.add", {
357
+ description: "그룹 추가 — 바운즈는 members 의 bbox 로 산출되므로 좌표를 지정하지 않는다.",
358
+ properties: {
359
+ group: { $ref: "#/$defs/irGroup" }
360
+ },
361
+ required: ["group"]
362
+ }),
363
+ "group.update": B("group.update", {
364
+ description: "그룹 이름/멤버 갱신. members 는 전체 재선언(생략 = 보존).",
365
+ properties: {
366
+ id: { type: "string" },
367
+ name: { $ref: "#/$defs/nullableString" },
368
+ members: { type: "array", items: { type: "string" } }
369
+ },
370
+ required: ["id"]
371
+ }),
372
+ "element.remove": B("element.remove", {
373
+ description: "요소 제거(카테고리 무관). 부착된 연결선은 함께 제거된다.",
374
+ properties: {
375
+ id: { type: "string" }
376
+ },
377
+ required: ["id"]
378
+ })
379
+ }, ft = {
380
+ anyOf: Qe.map((t) => lt[t])
381
+ }, zt = {
382
+ type: "object",
383
+ description: "BPMN 문서에 요소를 추가·수정·삭제할 때 호출한다. 기존 요소는 describeProcess 가 노출하는 id 로 지정하고, 신규 요소 id 는 문서 내 유일한 XML NCName(공백 없이 문자/밑줄 시작)으로 짓는다. 좌표는 지정하지 않는다 — 배치는 서버가 결정하며, 필요하면 힌트(placement/band/order)로 의도만 전달하라.",
384
+ properties: {
385
+ ops: { type: "array", items: { $ref: "#/$defs/symbolicOp" } }
386
+ },
387
+ required: ["ops"],
388
+ additionalProperties: !1,
389
+ $defs: {
390
+ irLane: Je,
391
+ irParticipant: et,
392
+ irNode: tt,
393
+ irFlowCondition: nt,
394
+ irSequenceFlow: ot,
395
+ irMessageFlow: at,
396
+ irDataStore: it,
397
+ irDataAssociation: st,
398
+ irTextAnnotation: rt,
399
+ irAssociation: ct,
400
+ irGroup: dt,
401
+ bwlPlacement: pt,
402
+ nullableString: Ze,
403
+ symbolicOp: ft
404
+ }
405
+ }, ut = {
406
+ "bpmn:Participant": "participant",
407
+ "bpmn:Lane": "lane",
408
+ "bpmn:SequenceFlow": "sequenceFlow",
409
+ "bpmn:MessageFlow": "messageFlow",
410
+ "bpmn:DataStoreReference": "dataStore",
411
+ "bpmn:DataInputAssociation": "dataAssociation",
412
+ "bpmn:DataOutputAssociation": "dataAssociation",
413
+ "bpmn:TextAnnotation": "annotation",
414
+ "bpmn:Association": "association",
415
+ "bpmn:Group": "group"
416
+ };
417
+ function mt(t, a) {
418
+ const n = ut[t];
419
+ return n || (t === "label" || t.startsWith("bpmndi:") ? "other" : t.startsWith("bpmn:") && !("waypoints" in a && a.waypoints) ? "flowNode" : "other");
420
+ }
421
+ function ye(t) {
422
+ let a = t.parent;
423
+ for (; a; ) {
424
+ if (a.type === "bpmn:Participant") return a.id;
425
+ a = a.parent;
426
+ }
427
+ }
428
+ function gt(t) {
429
+ const a = () => t.getAll().filter((n) => n.type !== "label" && !("labelTarget" in n && n.labelTarget));
430
+ return {
431
+ isCollaboration: () => a().some((n) => n.type === "bpmn:Participant"),
432
+ categoryOf: (n) => {
433
+ const s = t.get(n);
434
+ if (!(!s || s.type === "label"))
435
+ return mt(s.type, s);
436
+ },
437
+ lanesOf: (n) => a().filter((s) => s.type === "bpmn:Lane" && ye(s) === n).sort((s, m) => s.y - m.y).map((s) => s.id),
438
+ participantOf: (n) => {
439
+ const s = t.get(n);
440
+ return s ? ye(s) : void 0;
441
+ }
442
+ };
443
+ }
444
+ const ht = /^[\p{L}_][\p{L}\p{N}_.\-]*$/u, be = /* @__PURE__ */ new Set([
445
+ "sequenceFlow",
446
+ "messageFlow",
447
+ "dataAssociation",
448
+ "association"
449
+ ]);
450
+ function yt(t, a) {
451
+ const n = [], s = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map();
452
+ function w(o, r, q) {
453
+ if (!ht.test(r)) {
454
+ n.push({ kind: "id-invalid", opIndex: o, id: r });
455
+ return;
456
+ }
457
+ if (a.categoryOf(r) !== void 0 || s.has(r)) {
458
+ n.push({ kind: "id-duplicate", opIndex: o, id: r });
459
+ return;
460
+ }
461
+ s.set(r, { ...q, opIndex: o });
462
+ }
463
+ t.forEach((o, r) => {
464
+ var q;
465
+ switch (o.kind) {
466
+ case "participant.add":
467
+ w(r, o.participant.id, {
468
+ category: "participant",
469
+ lanes: (o.participant.lanes ?? []).map((d) => d.id)
470
+ });
471
+ for (const d of o.participant.lanes ?? []) w(r, d.id, { category: "lane" });
472
+ break;
473
+ case "node.add":
474
+ w(r, o.node.id, { category: "flowNode", participant: o.node.participant });
475
+ break;
476
+ case "sequenceFlow.add":
477
+ w(r, o.flow.id, { category: "sequenceFlow" });
478
+ break;
479
+ case "messageFlow.add":
480
+ w(r, o.flow.id, { category: "messageFlow" });
481
+ break;
482
+ case "dataStore.add":
483
+ w(r, o.dataStore.id, { category: "dataStore" });
484
+ for (const d of o.associations ?? [])
485
+ d.id && w(r, d.id, { category: "dataAssociation" });
486
+ break;
487
+ case "dataAssociation.add":
488
+ o.association.id && w(r, o.association.id, { category: "dataAssociation" });
489
+ break;
490
+ case "association.add":
491
+ o.association.id && w(r, o.association.id, { category: "association" });
492
+ break;
493
+ case "annotation.add":
494
+ w(r, o.annotation.id, { category: "annotation" }), (q = o.association) != null && q.id && w(r, o.association.id, { category: "association" });
495
+ break;
496
+ case "group.add":
497
+ w(r, o.group.id, { category: "group" });
498
+ break;
499
+ case "participant.update":
500
+ if (o.lanes) {
501
+ m.set(o.id, o.lanes.map((d) => d.id));
502
+ for (const d of o.lanes)
503
+ a.categoryOf(d.id) === void 0 && w(r, d.id, { category: "lane" });
504
+ }
505
+ break;
506
+ }
507
+ });
508
+ const f = (o) => {
509
+ var r;
510
+ return ((r = s.get(o)) == null ? void 0 : r.category) ?? a.categoryOf(o);
511
+ }, O = (o) => {
512
+ const r = s.get(o);
513
+ return r ? r.category === "participant" ? o : r.participant : a.categoryOf(o) === "participant" ? o : a.participantOf(o);
514
+ };
515
+ function x(o, r, q, d) {
516
+ const y = f(r);
517
+ if (y === void 0) {
518
+ n.push({ kind: "ref-missing", opIndex: o, ref: r, role: q });
519
+ return;
520
+ }
521
+ if (d && !d.includes(y)) {
522
+ n.push({
523
+ kind: "ref-category",
524
+ opIndex: o,
525
+ ref: r,
526
+ role: q,
527
+ expected: d.join("|"),
528
+ actual: y
529
+ });
530
+ return;
531
+ }
532
+ return y;
533
+ }
534
+ const l = a.isCollaboration() || t.some((o) => o.kind === "participant.add");
535
+ return t.forEach((o, r) => {
536
+ var q;
537
+ switch (o.kind) {
538
+ case "participant.add":
539
+ break;
540
+ case "node.add": {
541
+ const { participant: d, lane: y } = o.node;
542
+ if (d === void 0) {
543
+ (l || y !== void 0) && n.push({ kind: "participant-required", opIndex: r, id: o.node.id });
544
+ break;
545
+ }
546
+ if (x(r, d, "participant", ["participant"]) === void 0) break;
547
+ y !== void 0 && ((((q = s.get(d)) == null ? void 0 : q.lanes) ?? m.get(d) ?? a.lanesOf(d)).includes(y) || n.push({ kind: "lane-unknown", opIndex: r, lane: y, participant: d }));
548
+ break;
549
+ }
550
+ case "sequenceFlow.add": {
551
+ const { id: d, source: y, target: I, name: k, condition: _ } = o.flow, C = x(r, y, "source", ["flowNode"]), D = x(r, I, "target", ["flowNode"]);
552
+ C && D && O(y) !== O(I) && n.push({ kind: "flow-cross-pool", opIndex: r, id: d }), k !== void 0 && _ !== void 0 && n.push({ kind: "condition-name-conflict", opIndex: r, id: d });
553
+ break;
554
+ }
555
+ case "messageFlow.add": {
556
+ const { id: d, source: y, target: I } = o.flow, k = x(r, y, "source", ["flowNode", "participant"]), _ = x(r, I, "target", ["flowNode", "participant"]);
557
+ if (k && _) {
558
+ const C = O(y), D = O(I);
559
+ C !== void 0 && C === D && n.push({ kind: "message-flow-same-pool", opIndex: r, id: d });
560
+ }
561
+ break;
562
+ }
563
+ case "dataStore.add": {
564
+ for (const d of o.associations ?? []) {
565
+ if ([d.source, d.target].filter((k) => k === o.dataStore.id).length !== 1) {
566
+ n.push({
567
+ kind: "data-association-ends",
568
+ opIndex: r,
569
+ source: d.source,
570
+ target: d.target
571
+ });
572
+ continue;
573
+ }
574
+ const I = d.source === o.dataStore.id ? d.target : d.source;
575
+ x(r, I, "dataAssociation", ["flowNode"]);
576
+ }
577
+ break;
578
+ }
579
+ case "dataAssociation.add": {
580
+ const { source: d, target: y } = o.association, I = x(r, d, "source"), k = x(r, y, "target");
581
+ if (I && k) {
582
+ const _ = /* @__PURE__ */ new Set([I, k]);
583
+ _.has("dataStore") && _.has("flowNode") || n.push({ kind: "data-association-ends", opIndex: r, source: d, target: y });
584
+ }
585
+ break;
586
+ }
587
+ case "association.add": {
588
+ const { id: d, source: y, target: I } = o.association, k = x(r, y, "source"), _ = x(r, I, "target");
589
+ k && _ && k !== "annotation" && _ !== "annotation" && n.push({
590
+ kind: "association-detached",
591
+ opIndex: r,
592
+ annotation: d ?? `${y}->${I}`
593
+ });
594
+ break;
595
+ }
596
+ case "annotation.add": {
597
+ if (o.association) {
598
+ const { source: d, target: y } = o.association;
599
+ if (d !== o.annotation.id && y !== o.annotation.id)
600
+ n.push({ kind: "association-detached", opIndex: r, annotation: o.annotation.id });
601
+ else {
602
+ const I = d === o.annotation.id ? y : d;
603
+ x(r, I, "association");
604
+ }
605
+ }
606
+ o.placement && x(r, o.placement.anchor, "anchor");
607
+ break;
608
+ }
609
+ case "group.add": {
610
+ for (const d of o.group.members ?? []) {
611
+ const y = x(r, d, "member");
612
+ y && be.has(y) && n.push({
613
+ kind: "ref-category",
614
+ opIndex: r,
615
+ ref: d,
616
+ role: "member",
617
+ expected: "shape",
618
+ actual: y
619
+ });
620
+ }
621
+ break;
622
+ }
623
+ // ── update/remove 계열 (세션 ②-b) — 대상은 기존 문서 요소여야 한다 ──
624
+ case "participant.update": {
625
+ if (S(r, o.id, "participant") === void 0) break;
626
+ if (o.lanes) {
627
+ const d = a.lanesOf(o.id), y = o.lanes.map((k) => k.id);
628
+ for (const k of d)
629
+ y.includes(k) || n.push({ kind: "lane-shrink-unsupported", opIndex: r, participant: o.id, lane: k });
630
+ for (const k of y)
631
+ a.categoryOf(k) !== void 0 && !d.includes(k) && n.push({ kind: "id-duplicate", opIndex: r, id: k });
632
+ const I = y.filter((k) => d.includes(k));
633
+ I.length === d.length && I.some((k, _) => k !== d[_]) && n.push({ kind: "lane-reorder-unsupported", opIndex: r, participant: o.id });
634
+ }
635
+ break;
636
+ }
637
+ case "node.update": {
638
+ if (S(r, o.id, "flowNode") === void 0) break;
639
+ if (o.lane !== void 0) {
640
+ const d = a.participantOf(o.id);
641
+ (d ? m.get(d) ?? a.lanesOf(d) : []).includes(o.lane) || n.push({ kind: "lane-unknown", opIndex: r, lane: o.lane, participant: d ?? "" });
642
+ }
643
+ break;
644
+ }
645
+ case "sequenceFlow.update": {
646
+ if (S(r, o.id, "sequenceFlow") === void 0) break;
647
+ o.name !== void 0 && o.condition !== void 0 && n.push({ kind: "condition-name-conflict", opIndex: r, id: o.id });
648
+ break;
649
+ }
650
+ case "messageFlow.update":
651
+ S(r, o.id, "messageFlow");
652
+ break;
653
+ case "dataStore.update":
654
+ S(r, o.id, "dataStore");
655
+ break;
656
+ case "annotation.update": {
657
+ if (S(r, o.id, "annotation") === void 0) break;
658
+ o.placement && x(r, o.placement.anchor, "anchor");
659
+ break;
660
+ }
661
+ case "group.update": {
662
+ if (S(r, o.id, "group") === void 0) break;
663
+ for (const d of o.members ?? []) {
664
+ const y = x(r, d, "member");
665
+ y && be.has(y) && n.push({
666
+ kind: "ref-category",
667
+ opIndex: r,
668
+ ref: d,
669
+ role: "member",
670
+ expected: "shape",
671
+ actual: y
672
+ });
673
+ }
674
+ break;
675
+ }
676
+ case "element.remove": {
677
+ S(r, o.id) === "lane" && n.push({
678
+ kind: "ref-category",
679
+ opIndex: r,
680
+ ref: o.id,
681
+ role: "target",
682
+ expected: "removable",
683
+ actual: "lane"
684
+ });
685
+ break;
686
+ }
687
+ }
688
+ }), n;
689
+ function S(o, r, q) {
690
+ if (s.has(r)) {
691
+ n.push({ kind: "target-added-in-batch", opIndex: o, id: r });
692
+ return;
693
+ }
694
+ const d = a.categoryOf(r);
695
+ if (d === void 0) {
696
+ n.push({ kind: "ref-missing", opIndex: o, ref: r, role: "target" });
697
+ return;
698
+ }
699
+ if (q && d !== q) {
700
+ n.push({
701
+ kind: "ref-category",
702
+ opIndex: o,
703
+ ref: r,
704
+ role: "target",
705
+ expected: q,
706
+ actual: d
707
+ });
708
+ return;
709
+ }
710
+ return d;
711
+ }
712
+ }
713
+ function bt(t) {
714
+ return {
715
+ modeling: t.get("modeling"),
716
+ bpmnFactory: t.get("bpmnFactory"),
717
+ elementFactory: t.get("elementFactory"),
718
+ elementRegistry: t.get("elementRegistry"),
719
+ canvas: t.get("canvas"),
720
+ autoPlace: t.get("autoPlace"),
721
+ bpmnReplace: t.get("bpmnReplace")
722
+ };
723
+ }
724
+ function de(t) {
725
+ return `bpmn:${t[0].toUpperCase()}${t.slice(1)}`;
726
+ }
727
+ const we = {
728
+ "top-left": [-1, -1],
729
+ top: [0, -1],
730
+ "top-right": [1, -1],
731
+ right: [1, 0],
732
+ "bottom-right": [1, 1],
733
+ bottom: [0, 1],
734
+ "bottom-left": [-1, 1],
735
+ left: [-1, 0]
736
+ };
737
+ function L(t, a) {
738
+ return t.filter((n) => n.kind === a);
739
+ }
740
+ function wt(t, a) {
741
+ var b, U, G, T;
742
+ const { modeling: n, bpmnFactory: s, elementFactory: m, elementRegistry: w, canvas: f, autoPlace: O, bpmnReplace: x } = a, l = () => f.getRootElement(), S = (e) => w.get(e), o = (e) => {
743
+ const i = S(e);
744
+ if (!i) throw new Error(`하강 참조 해소 실패: ${e}`);
745
+ return i;
746
+ }, r = (e) => {
747
+ let i = e.parent;
748
+ for (; i; ) {
749
+ if (i.type === "bpmn:Participant") return i;
750
+ i = i.parent;
751
+ }
752
+ }, q = L(t, "participant.add"), d = L(t, "node.add"), y = L(t, "sequenceFlow.add"), I = L(t, "messageFlow.add"), k = L(t, "dataStore.add"), _ = L(t, "dataAssociation.add"), C = L(t, "annotation.add"), D = L(t, "group.add"), se = new Map(d.map((e) => [e.node.id, e])), H = (e, i, p) => {
753
+ var $;
754
+ const g = e.businessObject, h = ((($ = g.extensionElements) == null ? void 0 : $.values) ?? []).filter((M) => M.$type !== i), v = p ? [...h, s.create(i, p)] : h;
755
+ if (!v.length) {
756
+ g.extensionElements && n.updateProperties(e, { extensionElements: void 0 });
757
+ return;
758
+ }
759
+ const F = s.create("bpmn:ExtensionElements", { values: v });
760
+ v.forEach((M) => {
761
+ M.$parent = F;
762
+ }), n.updateProperties(e, { extensionElements: F });
763
+ }, te = (e) => ({
764
+ anchor: e.anchor,
765
+ side: e.side,
766
+ ...e.offset !== void 0 ? { offset: e.offset } : {}
767
+ });
768
+ for (const e of L(t, "element.remove")) {
769
+ const i = S(e.id);
770
+ i && n.removeElements([i]);
771
+ }
772
+ const Z = (e) => w.filter(
773
+ (i) => {
774
+ var p;
775
+ return i.type === "bpmn:Lane" && ((p = r(i)) == null ? void 0 : p.id) === e;
776
+ }
777
+ ).sort((i, p) => i.y - p.y);
778
+ for (const e of L(t, "participant.update")) {
779
+ const i = o(e.id);
780
+ if (e.name !== void 0 && n.updateProperties(i, { name: e.name ?? void 0 }), !e.lanes) continue;
781
+ const p = Z(e.id);
782
+ if (!p.length) {
783
+ e.lanes.length >= 2 ? n.splitLane(i, e.lanes.length) : n.addLane(i, "bottom"), Z(e.id).forEach((h, v) => {
784
+ const F = e.lanes[v];
785
+ F && n.updateProperties(h, { id: F.id, name: F.name });
786
+ });
787
+ continue;
788
+ }
789
+ const g = new Set(p.map((h) => h.id));
790
+ e.lanes.forEach((h, v) => {
791
+ if (g.has(h.id)) {
792
+ n.updateProperties(o(h.id), { name: h.name });
793
+ return;
794
+ }
795
+ const F = v === 0 ? n.addLane(Z(e.id)[0], "top") : n.addLane(o(e.lanes[v - 1].id), "bottom");
796
+ n.updateProperties(F, { id: h.id, name: h.name });
797
+ });
798
+ }
799
+ const ne = q.map((e, i) => ({ op: e, declared: i }));
800
+ ne.sort((e, i) => {
801
+ const p = e.op.order ?? Number.POSITIVE_INFINITY, g = i.op.order ?? Number.POSITIVE_INFINITY;
802
+ return p !== g ? p - g : e.declared - i.declared;
803
+ });
804
+ let Y = 80;
805
+ for (const e of w.getAll())
806
+ e.parent === l() && "height" in e && typeof e.y == "number" && (Y = Math.max(Y, e.y + e.height + 60));
807
+ for (const { op: e } of ne) {
808
+ const i = e.participant, p = d.filter((N) => N.node.participant === i.id).length, g = ((b = i.lanes) == null ? void 0 : b.length) ?? 0, h = Math.max(1200, p * 160 + 300), v = i.blackBox || p + g === 0 ? 120 : Math.max(300, g * 180), F = m.createShape({
809
+ type: "bpmn:Participant",
810
+ businessObject: s.create("bpmn:Participant", {
811
+ id: i.id,
812
+ name: i.name,
813
+ // 풀 순서 힌트 기록 (bwl:poolOrder 속성) — 재생성 시 결정적 순서 복원용
814
+ ...e.order !== void 0 ? { "bwl:poolOrder": e.order } : {},
815
+ // bo 주입은 createParticipantShape 의 processRef 자동 부여를 우회하므로 직접 동반한다
816
+ // (누락 시 노드 bo 가 어느 프로세스에도 담기지 않아 직렬화에서 소실 — 실운영 재구축에서 실증).
817
+ // 블랙박스는 processRef 없는 진성 블랙박스로 하강한다.
818
+ ...i.blackBox ? {} : { processRef: s.create("bpmn:Process") }
819
+ }),
820
+ width: h,
821
+ height: v,
822
+ isExpanded: !0
823
+ }), $ = n.createShape(F, { x: 100 + h / 2, y: Y + v / 2 }, l()), M = i.lanes ?? [];
824
+ M.length >= 2 ? n.splitLane($, M.length) : M.length === 1 && n.addLane($, "bottom"), M.length && w.filter(
825
+ (V) => {
826
+ var A;
827
+ return V.type === "bpmn:Lane" && ((A = r(V)) == null ? void 0 : A.id) === i.id;
828
+ }
829
+ ).sort((V, A) => V.y - A.y).forEach((V, A) => {
830
+ const R = M[A];
831
+ R && n.updateProperties(V, { id: R.id, name: R.name });
832
+ }), Y = $.y + $.height + 60;
833
+ }
834
+ const oe = (e) => {
835
+ var g;
836
+ const i = se.get(e);
837
+ if (i) return i.node.participant ?? "";
838
+ const p = S(e);
839
+ return p ? p.type === "bpmn:Participant" ? p.id : ((g = r(p)) == null ? void 0 : g.id) ?? "" : "";
840
+ }, z = /* @__PURE__ */ new Map(), K = (e) => {
841
+ let i = z.get(e);
842
+ return i || z.set(e, i = { nodes: [], flows: [] }), i;
843
+ };
844
+ for (const e of d) K(e.node.participant ?? "").nodes.push(e);
845
+ for (const e of y) K(oe(e.flow.source)).flows.push(e);
846
+ const ae = (e) => {
847
+ var i;
848
+ return (
849
+ // 조건 라벨은 name 채널로 하강 (실측: conditionExpression 0건 — validate.ts 헤더)
850
+ s.create("bpmn:SequenceFlow", { id: e.id, name: e.name ?? ((i = e.condition) == null ? void 0 : i.label) })
851
+ );
852
+ }, re = (e, i) => m.createShape({
853
+ type: de(e.type),
854
+ businessObject: s.create(de(e.type), {
855
+ id: e.id,
856
+ name: e.name,
857
+ // 밴드 힌트 기록 (bwl:band 속성)
858
+ ...i !== void 0 ? { "bwl:band": i } : {}
859
+ })
860
+ });
861
+ for (const [e, i] of z) {
862
+ const p = e ? o(e) : void 0, g = p ? p.x + 150 : 250;
863
+ let h = p ? p.y + 80 : 120;
864
+ const v = (A) => {
865
+ const R = o(A);
866
+ return R.y + R.height / 2;
867
+ }, F = (A, R) => A.node.lane ? v(A.node.lane) : A.band !== void 0 && p ? p.y + 80 + A.band * 150 : R, $ = (A) => A.participant ? o(A.participant) : l(), M = new Set(i.flows.map((A) => A.flow.target));
868
+ for (const A of i.nodes)
869
+ M.has(A.node.id) || (n.createShape(
870
+ re(A.node, A.band),
871
+ { x: g, y: F(A, h) },
872
+ $(A.node)
873
+ ), !A.node.lane && A.band === void 0 && (h += 160));
874
+ const N = /* @__PURE__ */ new Set();
875
+ let V = 0;
876
+ for (; V++ < i.nodes.length + 2; ) {
877
+ for (let ce = 0; ce < i.nodes.length + i.flows.length + 2; ce++) {
878
+ let me = !1;
879
+ for (const Pe of i.flows) {
880
+ const W = Pe.flow;
881
+ if (N.has(W.id)) continue;
882
+ const J = S(W.source);
883
+ if (!J) continue;
884
+ const le = S(W.target), ee = se.get(W.target);
885
+ if (!le && ee) {
886
+ const ge = re(ee.node, ee.band);
887
+ if (ee.node.lane) {
888
+ const Ie = n.createShape(
889
+ ge,
890
+ { x: J.x + J.width + 130, y: v(ee.node.lane) },
891
+ $(ee.node)
892
+ );
893
+ n.connect(J, Ie, { type: "bpmn:SequenceFlow", businessObject: ae(W) });
894
+ } else
895
+ O.append(J, ge, {
896
+ connection: { type: "bpmn:SequenceFlow", businessObject: ae(W) }
897
+ });
898
+ } else if (le)
899
+ n.connect(J, le, { type: "bpmn:SequenceFlow", businessObject: ae(W) });
900
+ else
901
+ continue;
902
+ N.add(W.id), me = !0;
903
+ }
904
+ if (!me) break;
905
+ }
906
+ const A = i.nodes.filter((ce) => !S(ce.node.id));
907
+ if (!A.length) break;
908
+ const R = A[0];
909
+ n.createShape(
910
+ re(R.node, R.band),
911
+ { x: g, y: F(R, h) },
912
+ $(R.node)
913
+ ), !R.node.lane && R.band === void 0 && (h += 160);
914
+ }
915
+ }
916
+ const c = (e, i) => {
917
+ const p = i.target === e, g = o(i.source), h = o(i.target), v = p ? "bpmn:DataOutputAssociation" : "bpmn:DataInputAssociation";
918
+ n.connect(
919
+ g,
920
+ h,
921
+ i.id ? { type: v, businessObject: s.create(v, { id: i.id }) } : { type: v }
922
+ );
923
+ };
924
+ for (const e of k) {
925
+ const i = e.associations ?? [], p = i.map((v) => v.source === e.dataStore.id ? v.target : v.source).map(S).find(Boolean), g = p ? r(p) ?? l() : l(), h = p ? { x: p.x + p.width / 2, y: p.y + p.height + 110 } : { x: 200, y: Y + 60 };
926
+ n.createShape(
927
+ {
928
+ type: "bpmn:DataStoreReference",
929
+ businessObject: s.create("bpmn:DataStoreReference", {
930
+ id: e.dataStore.id,
931
+ name: e.dataStore.name
932
+ })
933
+ },
934
+ h,
935
+ g
936
+ );
937
+ for (const v of i) c(e.dataStore.id, v);
938
+ }
939
+ for (const e of _) {
940
+ const p = o(e.association.target).type === "bpmn:DataStoreReference" ? e.association.target : e.association.source;
941
+ c(p, e.association);
942
+ }
943
+ for (const e of I) {
944
+ const i = e.flow;
945
+ n.connect(o(i.source), o(i.target), {
946
+ type: "bpmn:MessageFlow",
947
+ businessObject: s.create("bpmn:MessageFlow", { id: i.id, name: i.name })
948
+ });
949
+ }
950
+ let u = 0;
951
+ for (const e of D) {
952
+ const i = (e.group.members ?? []).map(S).filter((v) => !!v), p = 40;
953
+ let g;
954
+ if (i.length) {
955
+ const v = Math.min(...i.map((N) => N.x)) - p, F = Math.min(...i.map((N) => N.y)) - p, $ = Math.max(...i.map((N) => N.x + N.width)) + p, M = Math.max(...i.map((N) => N.y + N.height)) + p;
956
+ g = { x: v, y: F, width: $ - v, height: M - F };
957
+ } else
958
+ g = { x: 300 + u * 350, y: 40, width: 300, height: 200 }, u++;
959
+ const h = n.createShape(
960
+ {
961
+ type: "bpmn:Group",
962
+ businessObject: s.create("bpmn:Group", { id: e.group.id }),
963
+ width: g.width,
964
+ height: g.height
965
+ },
966
+ { x: g.x + g.width / 2, y: g.y + g.height / 2 },
967
+ l()
968
+ );
969
+ e.group.name && n.updateLabel(h, e.group.name), (U = e.group.members) != null && U.length && H(h, "bwl:Members", { refs: e.group.members.join(" ") });
970
+ }
971
+ const E = (e) => {
972
+ const i = e.waypoints;
973
+ if (i != null && i.length) {
974
+ const g = i[Math.floor((i.length - 1) / 2)];
975
+ return { x: g.x, y: g.y, width: 0, height: 0 };
976
+ }
977
+ const p = e;
978
+ return { x: p.x, y: p.y, width: p.width, height: p.height };
979
+ };
980
+ let P = 0;
981
+ const j = { width: 100, height: 30 };
982
+ for (const e of C) {
983
+ const i = e.association, p = ((G = e.placement) == null ? void 0 : G.anchor) ?? (i ? i.source === e.annotation.id ? i.target : i.source : void 0), g = p ? S(p) : void 0, h = g ? E(g) : void 0;
984
+ let v;
985
+ if (h && e.placement) {
986
+ const [M, N] = we[e.placement.side], V = e.placement.offset ?? 50;
987
+ v = {
988
+ x: h.x + h.width / 2 + M * (h.width / 2 + j.width / 2 + V),
989
+ y: h.y + h.height / 2 + N * (h.height / 2 + j.height / 2 + V)
990
+ };
991
+ } else h ? (v = {
992
+ x: h.x + h.width / 2 + 180 + P % 3 * 260,
993
+ y: h.y - 110 - P % 2 * 95
994
+ }, P++) : (v = { x: 300 + P * 260, y: 60 }, P++);
995
+ const F = g ? r(g) ?? l() : l(), $ = n.createShape(
996
+ {
997
+ type: "bpmn:TextAnnotation",
998
+ businessObject: s.create("bpmn:TextAnnotation", {
999
+ id: e.annotation.id,
1000
+ text: e.annotation.text
1001
+ })
1002
+ },
1003
+ v,
1004
+ F
1005
+ );
1006
+ if (i) {
1007
+ const M = (N) => N === e.annotation.id ? $ : o(N);
1008
+ n.connect(
1009
+ M(i.source),
1010
+ M(i.target),
1011
+ i.id ? {
1012
+ type: "bpmn:Association",
1013
+ businessObject: s.create("bpmn:Association", { id: i.id })
1014
+ } : { type: "bpmn:Association" }
1015
+ );
1016
+ }
1017
+ e.placement && H($, "bwl:Placement", te(e.placement));
1018
+ }
1019
+ for (const e of L(t, "association.add")) {
1020
+ const i = e.association;
1021
+ n.connect(
1022
+ o(i.source),
1023
+ o(i.target),
1024
+ i.id ? {
1025
+ type: "bpmn:Association",
1026
+ businessObject: s.create("bpmn:Association", { id: i.id })
1027
+ } : { type: "bpmn:Association" }
1028
+ );
1029
+ }
1030
+ for (const e of L(t, "node.update")) {
1031
+ let i = o(e.id);
1032
+ if (e.type && de(e.type) !== i.type && (i = x.replaceElement(
1033
+ i,
1034
+ { type: de(e.type) }
1035
+ )), e.name !== void 0 && n.updateProperties(i, { name: e.name ?? void 0 }), e.lane) {
1036
+ const p = o(e.lane), g = p.y + p.height / 2 - (i.y + i.height / 2);
1037
+ g !== 0 && n.moveElements([i], { x: 0, y: g });
1038
+ }
1039
+ }
1040
+ for (const e of L(t, "sequenceFlow.update")) {
1041
+ const i = o(e.id);
1042
+ e.name !== void 0 && n.updateProperties(i, { name: e.name ?? void 0 }), e.condition !== void 0 && n.updateProperties(i, { name: ((T = e.condition) == null ? void 0 : T.label) ?? void 0 });
1043
+ }
1044
+ for (const e of L(t, "messageFlow.update"))
1045
+ e.name !== void 0 && n.updateProperties(o(e.id), { name: e.name ?? void 0 });
1046
+ for (const e of L(t, "dataStore.update"))
1047
+ e.name !== void 0 && n.updateProperties(o(e.id), { name: e.name ?? void 0 });
1048
+ for (const e of L(t, "annotation.update")) {
1049
+ const i = o(e.id);
1050
+ if (e.text !== void 0 && n.updateProperties(i, { text: e.text }), e.placement === null)
1051
+ H(i, "bwl:Placement", null);
1052
+ else if (e.placement) {
1053
+ const p = E(o(e.placement.anchor)), [g, h] = we[e.placement.side], v = e.placement.offset ?? 50, F = p.x + p.width / 2 + g * (p.width / 2 + i.width / 2 + v), $ = p.y + p.height / 2 + h * (p.height / 2 + i.height / 2 + v);
1054
+ n.moveElements([i], { x: F - (i.x + i.width / 2), y: $ - (i.y + i.height / 2) }), H(i, "bwl:Placement", te(e.placement));
1055
+ }
1056
+ }
1057
+ for (const e of L(t, "group.update")) {
1058
+ const i = o(e.id);
1059
+ if (e.name !== void 0 && n.updateLabel(i, e.name ?? ""), e.members) {
1060
+ const p = e.members.map(S).filter((g) => !!g);
1061
+ if (p.length) {
1062
+ const h = Math.min(...p.map((M) => M.x)) - 40, v = Math.min(...p.map((M) => M.y)) - 40, F = Math.max(...p.map((M) => M.x + M.width)) + 40, $ = Math.max(...p.map((M) => M.y + M.height)) + 40;
1063
+ n.resizeShape(i, { x: h, y: v, width: F - h, height: $ - v });
1064
+ }
1065
+ H(i, "bwl:Members", { refs: e.members.join(" ") });
1066
+ }
1067
+ }
1068
+ }
1069
+ function St(t, a, n = wt) {
1070
+ const s = bt(t), m = yt(a, gt(s.elementRegistry));
1071
+ if (m.length) return { ok: !1, issues: m };
1072
+ const w = t.get("commandStack");
1073
+ try {
1074
+ return Ke(w, () => n(a, s)), { ok: !0, issues: [] };
1075
+ } catch (f) {
1076
+ return {
1077
+ ok: !1,
1078
+ issues: [{ kind: "lower-failed", message: f instanceof Error ? f.message : String(f) }]
1079
+ };
1080
+ }
1081
+ }
1082
+ const Kt = "http://www.omg.org/spec/BPMN/non-normative/extensions/i18n/1.0", vt = "i18n", ue = {
1083
+ [vt]: $e,
1084
+ [xe]: He
1085
+ };
1086
+ function xt() {
1087
+ return Te(ue);
1088
+ }
1089
+ const ke = xt();
1090
+ async function Et(t) {
1091
+ const { rootElement: a, warnings: n } = await ke.fromXML(t, "bpmn:Definitions");
1092
+ return { definitions: a, warnings: n };
1093
+ }
1094
+ async function Qt(t) {
1095
+ const { xml: a } = await ke.toXML(t, { format: !0 });
1096
+ return a;
1097
+ }
1098
+ function Ae(t) {
1099
+ return t.map(
1100
+ (a) => typeof a == "string" ? a : a.message ?? String(a)
1101
+ );
1102
+ }
1103
+ function Ot(t) {
1104
+ const a = t.slice(t.indexOf(":") + 1);
1105
+ return a.charAt(0).toLowerCase() + a.slice(1);
1106
+ }
1107
+ function kt(t, a) {
1108
+ return typeof t.get == "function" ? t.get(a) : t[a];
1109
+ }
1110
+ function Se(t, a) {
1111
+ const n = kt(t, a);
1112
+ return typeof n == "number" && Number.isFinite(n) ? n : void 0;
1113
+ }
1114
+ function ve(t, a) {
1115
+ var s;
1116
+ return (((s = t.extensionElements) == null ? void 0 : s.values) ?? []).find((m) => (m == null ? void 0 : m.$type) === a);
1117
+ }
1118
+ function At(t) {
1119
+ return typeof t == "string" && Ee.includes(t);
1120
+ }
1121
+ function X(t) {
1122
+ if (typeof t == "string") return t;
1123
+ const a = t == null ? void 0 : t.id;
1124
+ return typeof a == "string" ? a : void 0;
1125
+ }
1126
+ function Mt(t) {
1127
+ const a = t.rootElements ?? [], n = a.find((c) => c.$type === "bpmn:Collaboration"), s = new Map(
1128
+ a.filter((c) => c.$type === "bpmn:Process").map((c) => [c.id, c])
1129
+ ), m = [], w = [], f = [], O = [], x = [], l = [], S = { poolOrders: {}, bands: {}, placements: {} }, o = [], r = [], q = [], d = [], y = [], I = [], k = /* @__PURE__ */ new Set(), _ = /* @__PURE__ */ new Set(), C = (c) => {
1130
+ c && k.add(c);
1131
+ }, D = (c) => {
1132
+ k.add(c), _.add(c);
1133
+ }, se = (c) => {
1134
+ const u = ve(c, "bwl:Placement");
1135
+ if (!u) return;
1136
+ const E = typeof u.anchor == "string" ? u.anchor : void 0;
1137
+ if (!E || !At(u.side)) return;
1138
+ const P = typeof u.offset == "number" ? u.offset : void 0;
1139
+ y.push({ owner: c.id, anchor: E, side: u.side, ...P !== void 0 ? { offset: P } : {} });
1140
+ }, H = (c) => {
1141
+ const u = ve(c, "bwl:Members"), E = typeof (u == null ? void 0 : u.refs) == "string" ? u.refs.split(/\s+/).filter(Boolean) : [];
1142
+ E.length && I.push({ owner: c.id, refs: E });
1143
+ }, te = (c) => {
1144
+ var u;
1145
+ for (const E of c)
1146
+ switch (C(E.id), E.$type) {
1147
+ case "bpmn:TextAnnotation":
1148
+ D(E.id), O.push({ id: E.id, text: typeof E.text == "string" ? E.text : "" }), se(E);
1149
+ break;
1150
+ case "bpmn:Association":
1151
+ q.push({
1152
+ id: E.id,
1153
+ type: E.$type,
1154
+ source: X(E.sourceRef),
1155
+ target: X(E.targetRef)
1156
+ });
1157
+ break;
1158
+ case "bpmn:Group": {
1159
+ D(E.id);
1160
+ const P = (u = E.categoryValueRef) == null ? void 0 : u.value;
1161
+ x.push({ id: E.id, ...typeof P == "string" && P ? { name: P } : {} }), H(E);
1162
+ break;
1163
+ }
1164
+ default:
1165
+ l.push({ id: E.id, type: E.$type, reason: "type-outside-mvp" });
1166
+ }
1167
+ }, Z = (c, u) => {
1168
+ const E = c.flowElements ?? [], P = (c.laneSets ?? []).flatMap((b) => b.lanes ?? []), j = /* @__PURE__ */ new Map();
1169
+ for (const b of P) {
1170
+ C(b.id);
1171
+ for (const U of b.flowNodeRef ?? []) {
1172
+ const G = X(U);
1173
+ G && j.set(G, b.id);
1174
+ }
1175
+ }
1176
+ for (const b of E) {
1177
+ if (C(b.id), b.$type === "bpmn:SequenceFlow") {
1178
+ o.push({
1179
+ id: b.id,
1180
+ source: X(b.sourceRef),
1181
+ target: X(b.targetRef),
1182
+ ...typeof b.name == "string" && b.name ? { name: b.name } : {}
1183
+ });
1184
+ continue;
1185
+ }
1186
+ if (b.$type === "bpmn:DataStoreReference") {
1187
+ D(b.id), f.push({ id: b.id, ...b.name ? { name: b.name } : {} });
1188
+ continue;
1189
+ }
1190
+ const U = Ot(b.$type);
1191
+ if (!Ue(U)) {
1192
+ l.push({ id: b.id, type: b.$type, reason: "type-outside-mvp" });
1193
+ continue;
1194
+ }
1195
+ D(b.id), w.push({
1196
+ id: b.id,
1197
+ type: U,
1198
+ ...b.name ? { name: b.name } : {},
1199
+ ...u ? { participant: u } : {},
1200
+ ...j.has(b.id) ? { lane: j.get(b.id) } : {}
1201
+ });
1202
+ const G = Se(b, "bwl:band");
1203
+ G !== void 0 && (S.bands[b.id] = G);
1204
+ for (const T of b.dataOutputAssociations ?? [])
1205
+ C(T.id), d.push({
1206
+ id: T.id,
1207
+ type: T.$type,
1208
+ source: b.id,
1209
+ target: X(T.targetRef)
1210
+ });
1211
+ for (const T of b.dataInputAssociations ?? [])
1212
+ C(T.id), d.push({
1213
+ id: T.id,
1214
+ type: T.$type,
1215
+ // dataInputAssociation.sourceRef 는 다중 — MVP 는 단일 스토어 입력만 표현한다
1216
+ source: X((T.sourceRef ?? [])[0]),
1217
+ target: b.id
1218
+ });
1219
+ }
1220
+ te(c.artifacts ?? []);
1221
+ };
1222
+ if (n) {
1223
+ const c = /* @__PURE__ */ new Set();
1224
+ for (const u of n.participants ?? []) {
1225
+ D(u.id);
1226
+ const E = X(u.processRef);
1227
+ E && c.add(E);
1228
+ const P = E ? s.get(E) : void 0, j = ((P == null ? void 0 : P.laneSets) ?? []).flatMap((T) => T.lanes ?? []), b = j.map((T) => ({ id: T.id, ...T.name ? { name: T.name } : {} }));
1229
+ for (const T of b) D(T.id);
1230
+ const U = !P || (P.flowElements ?? []).length === 0 && j.length === 0 && (P.artifacts ?? []).length === 0;
1231
+ m.push({
1232
+ id: u.id,
1233
+ ...u.name ? { name: u.name } : {},
1234
+ ...U ? { blackBox: !0 } : {},
1235
+ ...b.length ? { lanes: b } : {}
1236
+ });
1237
+ const G = Se(u, "bwl:poolOrder");
1238
+ G !== void 0 && (S.poolOrders[u.id] = G), P && Z(P, u.id);
1239
+ }
1240
+ for (const u of n.messageFlows ?? [])
1241
+ C(u.id), r.push({
1242
+ id: u.id,
1243
+ source: X(u.sourceRef),
1244
+ target: X(u.targetRef),
1245
+ ...typeof u.name == "string" && u.name ? { name: u.name } : {}
1246
+ });
1247
+ te(n.artifacts ?? []);
1248
+ for (const [u, E] of s)
1249
+ !c.has(u) && (E.flowElements ?? []).length > 0 && l.push({ id: u, type: E.$type, reason: "unreachable-process" });
1250
+ } else
1251
+ for (const c of s.values()) Z(c);
1252
+ const ne = [], Y = [], oe = [], z = [], K = (c, u) => !!c && !!u && _.has(c) && _.has(u);
1253
+ for (const c of o) {
1254
+ if (!K(c.source, c.target)) {
1255
+ l.push({ id: c.id, type: "bpmn:SequenceFlow", reason: "endpoint-outside-mvp" });
1256
+ continue;
1257
+ }
1258
+ ne.push({ id: c.id, source: c.source, target: c.target, ...c.name ? { name: c.name } : {} }), _.add(c.id);
1259
+ }
1260
+ for (const c of r) {
1261
+ if (!K(c.source, c.target)) {
1262
+ l.push({ id: c.id, type: "bpmn:MessageFlow", reason: "endpoint-outside-mvp" });
1263
+ continue;
1264
+ }
1265
+ Y.push({ id: c.id, source: c.source, target: c.target, ...c.name ? { name: c.name } : {} }), _.add(c.id);
1266
+ }
1267
+ for (const c of d) {
1268
+ if (!K(c.source, c.target)) {
1269
+ l.push({ id: c.id ?? "", type: c.type, reason: "endpoint-outside-mvp" });
1270
+ continue;
1271
+ }
1272
+ z.push({ ...c.id ? { id: c.id } : {}, source: c.source, target: c.target }), c.id && _.add(c.id);
1273
+ }
1274
+ for (const c of q) {
1275
+ if (!K(c.source, c.target)) {
1276
+ l.push({ id: c.id ?? "", type: c.type, reason: "endpoint-outside-mvp" });
1277
+ continue;
1278
+ }
1279
+ oe.push({ ...c.id ? { id: c.id } : {}, source: c.source, target: c.target });
1280
+ }
1281
+ const ae = new Map(x.map((c) => [c.id, c]));
1282
+ for (const { owner: c, refs: u } of I) {
1283
+ const E = u.filter((j) => k.has(j)), P = ae.get(c);
1284
+ P && E.length && (P.members = E);
1285
+ }
1286
+ for (const c of y)
1287
+ k.has(c.anchor) && (S.placements[c.owner] = { anchor: c.anchor, side: c.side, ...c.offset !== void 0 ? { offset: c.offset } : {} });
1288
+ return { definition: {
1289
+ ...m.length ? { participants: m } : {},
1290
+ nodes: w,
1291
+ sequenceFlows: ne,
1292
+ ...Y.length ? { messageFlows: Y } : {},
1293
+ ...f.length ? { dataStores: f } : {},
1294
+ ...z.length ? { dataAssociations: z } : {},
1295
+ ...O.length ? { annotations: O } : {},
1296
+ ...oe.length ? { associations: oe } : {},
1297
+ ...x.length ? { groups: x } : {}
1298
+ }, hints: S, omitted: l };
1299
+ }
1300
+ async function Zt(t) {
1301
+ const { definitions: a, warnings: n } = await Et(t);
1302
+ return { ...Mt(a), warnings: n };
1303
+ }
1304
+ function Jt(t, a, n, s = {}) {
1305
+ return {
1306
+ documentId: t,
1307
+ baseVersion: a,
1308
+ ops: [...n],
1309
+ origin: s.origin ?? "agent",
1310
+ clientOpId: (s.mkClientOpId ?? (() => crypto.randomUUID()))()
1311
+ };
1312
+ }
1313
+ async function Pt(t, a, { currentVersion: n }) {
1314
+ if (a.baseVersion !== n)
1315
+ return { status: "conflict", baseVersion: a.baseVersion, currentVersion: n };
1316
+ const s = St(t, a.ops);
1317
+ if (!s.ok) return { status: "rejected", issues: s.issues };
1318
+ const { xml: m } = await t.saveXML({ format: !0 });
1319
+ return { status: "applied", version: n + 1, xml: m ?? "" };
1320
+ }
1321
+ const en = Symbol("bpmn-editor");
1322
+ function tn() {
1323
+ const t = pe(!1), a = pe(!0), n = pe(!1);
1324
+ let s, m;
1325
+ const w = () => {
1326
+ t.value = !0;
1327
+ };
1328
+ function f(l, S) {
1329
+ l.get("canvas").getContainer().style.pointerEvents = S ? "" : "none";
1330
+ const o = l.get("keyboard");
1331
+ S ? (m && o.bind(m), m = void 0) : m || (m = o.getBinding(), o.unbind());
1332
+ }
1333
+ function O() {
1334
+ if (!s) throw new Error("modeler not attached — 뷰 @ready 후 attach() 필요");
1335
+ return s;
1336
+ }
1337
+ function x() {
1338
+ return s == null ? void 0 : s.get("commandStack");
1339
+ }
1340
+ return {
1341
+ dirty: t,
1342
+ editable: a,
1343
+ agentBusy: n,
1344
+ attach(l) {
1345
+ s && this.detach(), s = l, s.get("eventBus").on("commandStack.changed", w), a.value || f(s, !1);
1346
+ },
1347
+ detach() {
1348
+ s == null || s.get("eventBus").off("commandStack.changed", w), s && !a.value && f(s, !0), m = void 0, s = void 0;
1349
+ },
1350
+ setEditable(l) {
1351
+ a.value = l, s && f(s, l);
1352
+ },
1353
+ async applyAgentBatch(l, S) {
1354
+ const o = O();
1355
+ n.value = !0;
1356
+ try {
1357
+ const r = await Pt(o, l, { currentVersion: S });
1358
+ return r.status === "applied" && (t.value = !1), r;
1359
+ } finally {
1360
+ n.value = !1;
1361
+ }
1362
+ },
1363
+ async importXml(l) {
1364
+ const { warnings: S } = await O().importXML(l);
1365
+ return t.value = !1, { warnings: Ae(S) };
1366
+ },
1367
+ async saveXml() {
1368
+ const { xml: l } = await O().saveXML({ format: !0 });
1369
+ return t.value = !1, l ?? "";
1370
+ },
1371
+ // command seam — 미연결 시 canUndo/canRedo 는 false (UI 버튼 게이트), undo/redo 는 no-op.
1372
+ undo: () => {
1373
+ var l;
1374
+ return (l = x()) == null ? void 0 : l.undo();
1375
+ },
1376
+ redo: () => {
1377
+ var l;
1378
+ return (l = x()) == null ? void 0 : l.redo();
1379
+ },
1380
+ canUndo: () => {
1381
+ var l;
1382
+ return ((l = x()) == null ? void 0 : l.canUndo()) ?? !1;
1383
+ },
1384
+ canRedo: () => {
1385
+ var l;
1386
+ return ((l = x()) == null ? void 0 : l.canRedo()) ?? !1;
1387
+ }
1388
+ };
1389
+ }
1390
+ const ie = {
1391
+ /** 전각(한글·한자·가나). */
1392
+ cjkEm: 0.865,
1393
+ /** 라틴 대문자 평균. */
1394
+ upperEm: 0.68,
1395
+ /** 라틴 소문자 평균. */
1396
+ lowerEm: 0.5,
1397
+ digitEm: 0.556,
1398
+ spaceEm: 0.278,
1399
+ /** 그 외(구두점 등). */
1400
+ otherEm: 0.35,
1401
+ /** 행 높이 산출용 — `fontBoundingBox{Ascent,Descent}` 근사. */
1402
+ ascentEm: 0.9,
1403
+ descentEm: 0.25
1404
+ }, It = /[ᄀ-ᇿ -〿぀-ヿ㐀-鿿가-힯＀-⦆]/;
1405
+ function Ft(t) {
1406
+ const a = ie;
1407
+ return It.test(t) ? a.cjkEm : t === " " ? a.spaceEm : t >= "0" && t <= "9" ? a.digitEm : t >= "A" && t <= "Z" ? a.upperEm : t >= "a" && t <= "z" ? a.lowerEm : a.otherEm;
1408
+ }
1409
+ function Me(t, a) {
1410
+ let n = 0;
1411
+ for (const s of t) n += a * Ft(s);
1412
+ return n;
1413
+ }
1414
+ function _t(t = globalThis, { textMeasurement: a = "approximate" } = {}) {
1415
+ if (!(t != null && t.SVGElement))
1416
+ throw new Error("installHeadlessBpmnDom: DOM 전역이 없다 — jsdom window 를 전역에 올린 뒤 호출할 것");
1417
+ a === "approximate" && Tt(t), $t(t), Nt(t), qt(t);
1418
+ }
1419
+ function Tt(t) {
1420
+ var s;
1421
+ const a = (s = t.HTMLCanvasElement) == null ? void 0 : s.prototype;
1422
+ if (!a || a.__headlessTextMeasurement) return;
1423
+ a.__headlessTextMeasurement = !0;
1424
+ const n = {
1425
+ font: "12px sans-serif",
1426
+ letterSpacing: "0px",
1427
+ measureText(m) {
1428
+ var f;
1429
+ const w = Number.parseFloat(((f = String(n.font).match(/(\d+(?:\.\d+)?)px/)) == null ? void 0 : f[1]) ?? "12");
1430
+ return {
1431
+ width: Me(m, w),
1432
+ fontBoundingBoxAscent: w * ie.ascentEm,
1433
+ fontBoundingBoxDescent: w * ie.descentEm,
1434
+ actualBoundingBoxAscent: w * ie.ascentEm,
1435
+ actualBoundingBoxDescent: w * ie.descentEm
1436
+ };
1437
+ }
1438
+ };
1439
+ a.getContext = () => n;
1440
+ }
1441
+ function $t(t) {
1442
+ if (t.SVGMatrix) return;
1443
+ class a {
1444
+ constructor() {
1445
+ Q(this, "a", 1);
1446
+ Q(this, "b", 0);
1447
+ Q(this, "c", 0);
1448
+ Q(this, "d", 1);
1449
+ Q(this, "e", 0);
1450
+ Q(this, "f", 0);
1451
+ }
1452
+ static of(s, m, w, f, O, x) {
1453
+ return Object.assign(new a(), { a: s, b: m, c: w, d: f, e: O, f: x });
1454
+ }
1455
+ multiply(s) {
1456
+ return a.of(
1457
+ this.a * s.a + this.c * s.b,
1458
+ this.b * s.a + this.d * s.b,
1459
+ this.a * s.c + this.c * s.d,
1460
+ this.b * s.c + this.d * s.d,
1461
+ this.a * s.e + this.c * s.f + this.e,
1462
+ this.b * s.e + this.d * s.f + this.f
1463
+ );
1464
+ }
1465
+ translate(s, m) {
1466
+ return this.multiply(a.of(1, 0, 0, 1, s, m));
1467
+ }
1468
+ scale(s, m = s) {
1469
+ return this.multiply(a.of(s, 0, 0, m, 0, 0));
1470
+ }
1471
+ inverse() {
1472
+ const s = this.a * this.d - this.b * this.c;
1473
+ return a.of(
1474
+ this.d / s,
1475
+ -this.b / s,
1476
+ -this.c / s,
1477
+ this.a / s,
1478
+ (this.c * this.f - this.d * this.e) / s,
1479
+ (this.b * this.e - this.a * this.f) / s
1480
+ );
1481
+ }
1482
+ }
1483
+ t.SVGMatrix = a;
1484
+ }
1485
+ function Nt(t) {
1486
+ var w;
1487
+ const a = () => {
1488
+ const f = new t.SVGMatrix();
1489
+ return {
1490
+ type: 0,
1491
+ matrix: f,
1492
+ setTranslate(O, x) {
1493
+ f.e = O, f.f = x;
1494
+ },
1495
+ setScale(O, x) {
1496
+ f.a = O, f.d = x;
1497
+ },
1498
+ setRotate(O, x = 0, l = 0) {
1499
+ const S = O * Math.PI / 180, o = Math.cos(S), r = Math.sin(S);
1500
+ f.a = o, f.b = r, f.c = -r, f.d = o, f.e = x - o * x + r * l, f.f = l - r * x - o * l;
1501
+ },
1502
+ setMatrix(O) {
1503
+ Object.assign(f, O);
1504
+ }
1505
+ };
1506
+ }, n = (f) => {
1507
+ const O = a();
1508
+ return Object.assign(O.matrix, f), O;
1509
+ }, s = (w = t.SVGSVGElement) == null ? void 0 : w.prototype;
1510
+ s && !s.createSVGTransform && (s.createSVGTransform = a, s.createSVGTransformFromMatrix = n, s.createSVGMatrix = () => new t.SVGMatrix(), s.createSVGPoint = () => ({ x: 0, y: 0, matrixTransform: () => ({ x: 0, y: 0 }) }));
1511
+ const m = t.SVGElement.prototype;
1512
+ Object.getOwnPropertyDescriptor(m, "transform") || Object.defineProperty(m, "transform", {
1513
+ configurable: !0,
1514
+ get() {
1515
+ if (!this.__headlessTransformList) {
1516
+ const f = [];
1517
+ this.__headlessTransformList = {
1518
+ baseVal: {
1519
+ get numberOfItems() {
1520
+ return f.length;
1521
+ },
1522
+ clear: () => {
1523
+ f.length = 0;
1524
+ },
1525
+ appendItem: (O) => (f.push(O), O),
1526
+ getItem: (O) => f[O],
1527
+ createSVGTransformFromMatrix: n,
1528
+ consolidate: () => f[f.length - 1] ?? null
1529
+ }
1530
+ };
1531
+ }
1532
+ return this.__headlessTransformList;
1533
+ }
1534
+ });
1535
+ }
1536
+ function qt(t) {
1537
+ const a = t.SVGElement.prototype;
1538
+ if (!a.getCTM) {
1539
+ const n = () => new t.SVGMatrix();
1540
+ a.getCTM = n, a.getScreenCTM = n;
1541
+ }
1542
+ a.getBBox || (a.getBBox = function() {
1543
+ const n = String(this.textContent ?? "");
1544
+ return { x: 0, y: 0, width: Me(n, 12), height: 14 };
1545
+ });
1546
+ }
1547
+ const Bt = [
1548
+ je,
1549
+ Xe,
1550
+ Ge,
1551
+ Ve
1552
+ ];
1553
+ function nn(t = {}) {
1554
+ _t(globalThis, t.dom);
1555
+ const a = document.createElement("div");
1556
+ return document.body.appendChild(a), new De({
1557
+ container: a,
1558
+ moddleExtensions: t.moddleExtensions ?? ue,
1559
+ additionalModules: [...Bt, ...t.additionalModules ?? []]
1560
+ });
1561
+ }
1562
+ const Lt = /* @__PURE__ */ Ne({
1563
+ __name: "BpmnModelerView",
1564
+ props: {
1565
+ xml: {}
1566
+ },
1567
+ emits: ["ready", "imported", "import-error"],
1568
+ setup(t, { expose: a, emit: n }) {
1569
+ const s = t, m = n, w = pe();
1570
+ let f;
1571
+ async function O(l) {
1572
+ if (!f) throw new Error("modeler not mounted");
1573
+ try {
1574
+ const { warnings: S } = await f.importXML(l), o = Ae(S);
1575
+ return m("imported", o), { warnings: o };
1576
+ } catch (S) {
1577
+ throw m("import-error", S), S;
1578
+ }
1579
+ }
1580
+ async function x() {
1581
+ if (!f) throw new Error("modeler not mounted");
1582
+ const { xml: l } = await f.saveXML({ format: !0 });
1583
+ return l ?? "";
1584
+ }
1585
+ return qe(async () => {
1586
+ f = new Ye({
1587
+ container: w.value,
1588
+ moddleExtensions: ue
1589
+ }), s.xml && await O(s.xml), m("ready");
1590
+ }), Be(
1591
+ () => s.xml,
1592
+ (l) => {
1593
+ l && f && O(l);
1594
+ }
1595
+ ), Le(() => {
1596
+ f == null || f.destroy(), f = void 0;
1597
+ }), a({ importXml: O, saveXml: x, getModeler: () => f }), (l, S) => (Re(), Ce("div", {
1598
+ ref_key: "container",
1599
+ ref: w,
1600
+ class: "bpmn-modeler-view"
1601
+ }, null, 512));
1602
+ }
1603
+ }), Rt = (t, a) => {
1604
+ const n = t.__vccOpts || t;
1605
+ for (const [s, m] of a)
1606
+ n[s] = m;
1607
+ return n;
1608
+ }, on = /* @__PURE__ */ Rt(Lt, [["__scopeId", "data-v-399ca5f0"]]);
1609
+ export {
1610
+ zt as APPLY_BPMN_OPS_SCHEMA,
1611
+ ue as BPMN_MODDLE_EXTENSIONS,
1612
+ He as BWL_MODDLE_SCHEMA,
1613
+ We as BWL_NS,
1614
+ xe as BWL_PREFIX,
1615
+ Ee as BWL_SIDES,
1616
+ on as BpmnModelerView,
1617
+ en as EDITOR,
1618
+ Bt as HEADLESS_BPMN_MODULES,
1619
+ ie as HEADLESS_TEXT_METRICS,
1620
+ Kt as I18N_NS,
1621
+ vt as I18N_PREFIX,
1622
+ fe as MVP_FLOW_NODE_TYPES,
1623
+ Qe as SYMBOLIC_OP_KINDS,
1624
+ ft as SYMBOLIC_OP_SCHEMA,
1625
+ Oe as UNDO_EPISODE_COMMAND,
1626
+ Pt as applyBpmnOpBatch,
1627
+ St as applyBpmnOps,
1628
+ Me as approximateTextWidth,
1629
+ Jt as buildBpmnOpBatch,
1630
+ gt as buildRegistryIndex,
1631
+ tn as createBpmnEditorController,
1632
+ xt as createBpmnModdle,
1633
+ nn as createHeadlessBpmnModeler,
1634
+ Mt as describeProcess,
1635
+ Zt as describeProcessXml,
1636
+ Ke as executeAsUndoEpisode,
1637
+ _t as installHeadlessBpmnDom,
1638
+ Ue as isMvpFlowNodeType,
1639
+ Et as loadBpmnXml,
1640
+ wt as lowerOps,
1641
+ bt as resolverServicesOf,
1642
+ Qt as saveBpmnXml,
1643
+ yt as validateOps,
1644
+ Ae as warningMessages
1645
+ };