@tienne/gestalt 0.92.0 → 0.93.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/package.json +1 -1
- package/dist/plugin/skills/architecture/SKILL.md +8 -4
- package/dist/schemas/architecture-ir.schema.json +34 -1
- package/dist/src/architecture/flow-layout.d.ts +16 -1
- package/dist/src/architecture/flow-layout.d.ts.map +1 -1
- package/dist/src/architecture/flow-layout.js +108 -28
- package/dist/src/architecture/flow-layout.js.map +1 -1
- package/dist/src/architecture/html-client.d.ts +2 -0
- package/dist/src/architecture/html-client.d.ts.map +1 -1
- package/dist/src/architecture/html-client.js +25 -4
- package/dist/src/architecture/html-client.js.map +1 -1
- package/dist/src/architecture/html-renderer.d.ts.map +1 -1
- package/dist/src/architecture/html-renderer.js +65 -22
- package/dist/src/architecture/html-renderer.js.map +1 -1
- package/dist/src/architecture/html-theme.d.ts +5 -0
- package/dist/src/architecture/html-theme.d.ts.map +1 -1
- package/dist/src/architecture/html-theme.js +36 -0
- package/dist/src/architecture/html-theme.js.map +1 -1
- package/dist/src/architecture/ir-schema.d.ts +58 -1
- package/dist/src/architecture/ir-schema.d.ts.map +1 -1
- package/dist/src/architecture/ir-schema.js +15 -2
- package/dist/src/architecture/ir-schema.js.map +1 -1
- package/dist/src/architecture/types.d.ts +10 -1
- package/dist/src/architecture/types.d.ts.map +1 -1
- package/dist/src/architecture/types.js +2 -0
- package/dist/src/architecture/types.js.map +1 -1
- package/dist/src/architecture/validator.d.ts.map +1 -1
- package/dist/src/architecture/validator.js +35 -0
- package/dist/src/architecture/validator.js.map +1 -1
- package/dist/src/mcp/schemas.d.ts +6 -6
- package/package.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.mcp.json +1 -1
- package/plugin/mcp.json +1 -1
- package/plugin/skills/architecture/SKILL.md +8 -4
- package/schemas/architecture-ir.schema.json +34 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-client.d.ts","sourceRoot":"","sources":["../../../src/architecture/html-client.ts"],"names":[],"mappings":"AAGA,OAAO,EAA6B,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,qCAAqC;IACrC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"html-client.d.ts","sourceRoot":"","sources":["../../../src/architecture/html-client.ts"],"names":[],"mappings":"AAGA,OAAO,EAA6B,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,qCAAqC;IACrC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mEAAmE;IACnE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAiZD,eAAO,MAAM,QAAQ,iXAOpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,+BAA+B,CAAC;AAI9D,eAAO,MAAM,iBAAiB,sNAKxB,CAAC;AAEP;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAgtD7D"}
|
|
@@ -7,6 +7,27 @@ import { FRAME_PAD, NODE_DESC_LINE } from './layout.js';
|
|
|
7
7
|
const COMPONENT_DKIND = "n.kind === 'component' ? 'cx_' + (n.renderClass || 'service') : ";
|
|
8
8
|
const COMPONENT_CHIP = "(n.kind === 'component' && n.displayKind) || ";
|
|
9
9
|
const ROOT_FLOWS = "current === 'root' ? flows.filter(function (f) { return !f.service; }) : []";
|
|
10
|
+
// 갈림길과 누른 것, 조건 조각. 그런 흐름이 있는 그림에만 싣는다. 늘 실으면 예전 흐름 그림의 바이트가 바뀐다
|
|
11
|
+
const BRANCH_STEP_CHIP = "st.kind === 'decision' ? '갈림길' : ";
|
|
12
|
+
const BRANCH_TRANSITION_SUB = 't.trigger || ';
|
|
13
|
+
const BRANCH_STEP_OUTS = ` if (st.kind === 'decision') {
|
|
14
|
+
var outs = f.transitions.filter(function (t) { return t.from === id && !!transitions[t.id]; });
|
|
15
|
+
if (outs.length) {
|
|
16
|
+
body.appendChild(el('h3', null, '나뉘는 길 ' + outs.length + '개'));
|
|
17
|
+
refButtons(body, outs.map(function (t) { return t.id; }), function (tid) {
|
|
18
|
+
var g = [].filter.call(active.querySelectorAll('.link.flow-t'), function (x) { return x.getAttribute('data-transition-id') === tid; })[0];
|
|
19
|
+
if (g) activateTransition(g); else renderTransitionPanel(transitions[tid]);
|
|
20
|
+
}, function () { return 'u-flow'; }, function (tid) {
|
|
21
|
+
var t = transitions[tid];
|
|
22
|
+
return (t.condition || t.label || '조건 없음') + ' → ' + label(t.to);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
`;
|
|
27
|
+
const BRANCH_TRANSITION_FACTS = ` if (t.trigger) factRow(facts, '누른 것', t.trigger);
|
|
28
|
+
if (t.condition) factRow(facts, '조건', t.condition);
|
|
29
|
+
if ((t.trigger || t.condition) && t.label) factRow(facts, '메모', t.label);
|
|
30
|
+
`;
|
|
10
31
|
// 근거가 섞인 묶음 조각. 그런 묶음이 있는 그림에만 싣는다. 문구는 html-renderer.ts의 inferredNote와 같다
|
|
11
32
|
const MIXED_NOTE = " + (e.inferred !== undefined ? ' (문서 근거만 있는 연결 ' + e.inferred + '개 포함)' : '')";
|
|
12
33
|
const MIXED_PANEL_NOTE = " + (bundle.inferred !== undefined ? ' (문서 근거만 있는 연결 ' + bundle.inferred + '개 포함)' : '')";
|
|
@@ -665,7 +686,7 @@ ${FOCUS_SOURCE}
|
|
|
665
686
|
var st = n.step;
|
|
666
687
|
var f = stepFlow[id];
|
|
667
688
|
panel.textContent = '';
|
|
668
|
-
panel.appendChild(panelHead(st.path === 'side' ? 'flow side' : 'flow', 'u-flow', '흐름 단계', f.title, st.label));
|
|
689
|
+
panel.appendChild(panelHead(st.path === 'side' ? 'flow side' : 'flow', 'u-flow', ${c.flowBranches ? BRANCH_STEP_CHIP : ''}'흐름 단계', f.title, st.label));
|
|
669
690
|
var body = el('div', 'dr-body');
|
|
670
691
|
var facts = el('ul', 'facts');
|
|
671
692
|
if (n.actor) factRow(facts, '누가', n.actor.label);
|
|
@@ -678,7 +699,7 @@ ${FOCUS_SOURCE}
|
|
|
678
699
|
body.appendChild(facts);
|
|
679
700
|
if (st.description) body.appendChild(el('p', 'desc', st.description));
|
|
680
701
|
questionList(body, st.questions);
|
|
681
|
-
var refs = (st.refs || []).filter(function (r) { return !!nodes[r]; });
|
|
702
|
+
${c.flowBranches ? BRANCH_STEP_OUTS : ''} var refs = (st.refs || []).filter(function (r) { return !!nodes[r]; });
|
|
682
703
|
if (refs.length) {
|
|
683
704
|
var web = refs.every(function (r) { return nodes[r].kind === 'screen' || nodes[r].kind === 'endpoint'; });
|
|
684
705
|
body.appendChild(el('h3', null, (web ? '이어진 화면과 API ' : '이어진 카드 ') + refs.length + '개'));
|
|
@@ -692,10 +713,10 @@ ${FOCUS_SOURCE}
|
|
|
692
713
|
syncFocusBtn();
|
|
693
714
|
panel.textContent = '';
|
|
694
715
|
var title = label(t.from) + ' → ' + label(t.to);
|
|
695
|
-
panel.appendChild(panelHead(t.path === 'side' ? 'flow side' : 'flow', 'u-flow', '상태 전이', t.label || '', title));
|
|
716
|
+
panel.appendChild(panelHead(t.path === 'side' ? 'flow side' : 'flow', 'u-flow', '상태 전이', ${c.flowBranches ? BRANCH_TRANSITION_SUB : ''}t.label || '', title));
|
|
696
717
|
var body = el('div', 'dr-body');
|
|
697
718
|
var facts = el('ul', 'facts');
|
|
698
|
-
var f = stepFlow[t.from];
|
|
719
|
+
${c.flowBranches ? BRANCH_TRANSITION_FACTS : ''} var f = stepFlow[t.from];
|
|
699
720
|
if (t.actors && f) {
|
|
700
721
|
factRow(facts, '누가', t.actors.map(function (a) {
|
|
701
722
|
var actor = f.actors.filter(function (x) { return x.id === a; })[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-client.js","sourceRoot":"","sources":["../../../src/architecture/html-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAe,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"html-client.js","sourceRoot":"","sources":["../../../src/architecture/html-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-renderer.d.ts","sourceRoot":"","sources":["../../../src/architecture/html-renderer.ts"],"names":[],"mappings":"AAWA,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"html-renderer.d.ts","sourceRoot":"","sources":["../../../src/architecture/html-renderer.ts"],"names":[],"mappings":"AAWA,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA8BnG,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAiCrB,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEpF,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAkFD,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAetD;AA2VD,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEjE;AA+9CD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,6BAA6B,GAClC,MAAM,CAkBR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,6BAA6B,GAClC,MAAM,CAsJR"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BAND_LINE_X, BAND_LINE_Y, BAND_TITLE_HALF, BAND_TITLE_X, CANVAS_PAD_TOP, CANVAS_PAD_X, LANE_INSET_Y, routeCanvas, } from './canvas-geometry.js';
|
|
2
2
|
import { flowCountByService, ROOT_LEVEL_ID } from './drilldown.js';
|
|
3
3
|
import { renderClientScript, THEME_BOOT_SCRIPT } from './html-client.js';
|
|
4
|
-
import { datastoreEngine, iconUse, PRODUCT_COLORS, renderCss, renderIconSprite, VIEW_CSS, DOC_CSS, SEQ_VIEW_CSS, } from './html-theme.js';
|
|
4
|
+
import { datastoreEngine, iconUse, PRODUCT_COLORS, renderCss, renderIconSprite, VIEW_CSS, DOC_CSS, FLOW_BRANCH_CSS, SEQ_VIEW_CSS, } from './html-theme.js';
|
|
5
5
|
import { EDGE_KIND_ABOUT, LANE_ABOUT, LANE_TITLES, NODE_KIND_ABOUT, STAGE_LANE_ABOUT, flowBadgeText, MICRO_HOST_SHORT, NODE_KIND_SHORT, PLATFORM_CHIP_TEXT, PLATFORM_NAME, WEB_HOSTING_CHIP_TEXT, WEB_HOSTING_NAME, platformChipText, platformName, } from './kind-text.js';
|
|
6
6
|
import { compareEnvironment, FLAT_BACKWARD_EDGE_KINDS, textUnits, } from './layout.js';
|
|
7
7
|
import { indexMicroApps } from './micro-app.js';
|
|
@@ -58,6 +58,9 @@ const FLOW_TEXT = {
|
|
|
58
58
|
side: '옆 흐름',
|
|
59
59
|
back: '앞 단계로 되돌아감',
|
|
60
60
|
end: '흐름 끝',
|
|
61
|
+
decision: '갈림길',
|
|
62
|
+
trigger: '누른 것',
|
|
63
|
+
condition: '조건',
|
|
61
64
|
person: '사람',
|
|
62
65
|
system: '시스템',
|
|
63
66
|
};
|
|
@@ -568,13 +571,19 @@ function renderFlowSection(level, flow, questionCount, drawableNodes) {
|
|
|
568
571
|
`y1="${round2(laneTop + FLOW_PAD)}" y2="${round2(laneBottom + FLOW_PAD)}"/>`)
|
|
569
572
|
.join('');
|
|
570
573
|
const stageHeads = layout.stages
|
|
571
|
-
.map((st) => `<div class="fstage${st.side ? ' side' : named(st.label)}" style="left:${round2(st.x + FLOW_PAD + 8)}px;top:${FLOW_PAD}px;width:${round2(st.width - 16)}px" ` +
|
|
574
|
+
.map((st) => `<div class="fstage${st.side ? ' side' : named(st.label)}" style="left:${round2(st.x + FLOW_PAD + 8)}px;top:${FLOW_PAD + layout.stageTop}px;width:${round2(st.width - 16)}px" ` +
|
|
572
575
|
`title="${escapeHtml(st.side ? st.label : stateText(st.label))}"><span>${escapeHtml(st.side ? st.label : stateText(st.label))}</span></div>`)
|
|
573
576
|
.join('');
|
|
574
|
-
const
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
577
|
+
const actorIcon = (kind) => iconUse(kind === 'person' ? 'u-person' : kind === 'agent' ? 'i-agent' : 'u-system');
|
|
578
|
+
// 행위자가 한 명이면 머리 칸이 없다. 누가 하는 흐름인지는 맨 위 띠의 칩 하나로 알린다
|
|
579
|
+
const solo = layout.headWidth === 0 ? layout.lanes[0] : undefined;
|
|
580
|
+
const heads = solo !== undefined
|
|
581
|
+
? `<div class="flane-actor a-${solo.actor.kind}" style="left:${FLOW_PAD + 4}px;top:${FLOW_PAD}px">` +
|
|
582
|
+
`${actorIcon(solo.actor.kind)}<span>${escapeHtml(solo.actor.label)}</span></div>`
|
|
583
|
+
: layout.lanes
|
|
584
|
+
.map((l) => `<div class="flane-title a-${l.actor.kind}" style="left:${FLOW_PAD + 12}px;top:${round2(l.y + FLOW_PAD + 12)}px">` +
|
|
585
|
+
`${actorIcon(l.actor.kind)}<span>${escapeHtml(l.actor.label)}</span></div>`)
|
|
586
|
+
.join('');
|
|
578
587
|
const labelOf = (id) => stepById.get(id)?.label ?? id;
|
|
579
588
|
const links = layout.transitions
|
|
580
589
|
.map((r) => {
|
|
@@ -586,17 +595,32 @@ function renderFlowSection(level, flow, questionCount, drawableNodes) {
|
|
|
586
595
|
const who = actorNames.join(', ');
|
|
587
596
|
// 선 위에는 괄호 앞 이름만 싣는다. "고객 (앱, QR, 알림톡 웹)"을 다 쓰면 선 글자가 카드 폭을 넘는다
|
|
588
597
|
const whoShort = actorNames.map((n) => n.replace(/\s*\([^)]*\)\s*$/, '')).join(', ');
|
|
598
|
+
// 누른 것이나 조건이 있으면 선에는 그 둘을 찍고 label은 서랍의 메모로만 보인다
|
|
599
|
+
const rich = t.trigger !== undefined || t.condition !== undefined;
|
|
600
|
+
const richParts = [
|
|
601
|
+
...(t.condition !== undefined ? [`${FLOW_TEXT.condition} ${t.condition}`] : []),
|
|
602
|
+
...(t.trigger !== undefined ? [`${FLOW_TEXT.trigger} ${t.trigger}`] : []),
|
|
603
|
+
];
|
|
589
604
|
const name = `${FLOW_TEXT[r.path]}${r.back ? `, ${FLOW_TEXT.back}` : ''}: ${labelOf(r.from)} → ${labelOf(r.to)}` +
|
|
590
|
-
(t.label !== undefined ? ` (${t.label})` : '') +
|
|
605
|
+
(rich ? ` (${richParts.join(', ')})` : t.label !== undefined ? ` (${t.label})` : '') +
|
|
591
606
|
(who !== '' ? `, 누가 ${who}` : '');
|
|
607
|
+
const richText = (t.condition !== undefined
|
|
608
|
+
? `<tspan class="t-cond">${escapeHtml(t.condition)}${t.trigger !== undefined ? ' ' : ''}</tspan>`
|
|
609
|
+
: '') + (t.trigger !== undefined ? escapeHtml(t.trigger) : '');
|
|
592
610
|
const text = r.labelAt
|
|
593
|
-
?
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
? `<tspan class="t-who"
|
|
598
|
-
|
|
599
|
-
|
|
611
|
+
? rich
|
|
612
|
+
? `<text class="t-label${r.labelAnchor === 'start' ? ' at-start' : ''}" x="${round2(r.labelAt.x + FLOW_PAD)}" y="${round2(r.labelAt.y + FLOW_PAD - 5)}">` +
|
|
613
|
+
(r.back ? '<tspan class="t-back">↩ </tspan>' : '') +
|
|
614
|
+
richText +
|
|
615
|
+
(whoShort !== '' ? `<tspan class="t-who"> · ${escapeHtml(whoShort)}</tspan>` : '') +
|
|
616
|
+
`</text>`
|
|
617
|
+
: `<text class="t-label${r.labelAnchor === 'start' ? ' at-start' : ''}" x="${round2(r.labelAt.x + FLOW_PAD)}" y="${round2(r.labelAt.y + FLOW_PAD - 5)}">` +
|
|
618
|
+
(r.back ? '<tspan class="t-back">↩ </tspan>' : '') +
|
|
619
|
+
(t.label !== undefined ? escapeHtml(t.label) : '') +
|
|
620
|
+
(whoShort !== ''
|
|
621
|
+
? `<tspan class="t-who">${t.label !== undefined ? ' · ' : ''}${escapeHtml(whoShort)}</tspan>`
|
|
622
|
+
: '') +
|
|
623
|
+
`</text>`
|
|
600
624
|
: '';
|
|
601
625
|
return (`<g class="link flow-t p-${r.path}${r.back ? ' back' : ''}" data-from="${escapeHtml(r.from)}" data-to="${escapeHtml(r.to)}" ` +
|
|
602
626
|
`data-transition-id="${escapeHtml(r.id)}" tabindex="0" role="button" aria-label="${escapeHtml(name)}">` +
|
|
@@ -611,16 +635,23 @@ function renderFlowSection(level, flow, questionCount, drawableNodes) {
|
|
|
611
635
|
const refs = (st.refs ?? []).filter((id) => drawableNodes.has(id));
|
|
612
636
|
const qs = questionCount.get(st.id) ?? 0;
|
|
613
637
|
const dashed = st.evidence.every((ev) => ev.type !== 'code' && ev.type !== 'spec');
|
|
638
|
+
const decision = b.shape === 'diamond';
|
|
614
639
|
const cls = ['node', 'flow-step', `p-${b.path}`];
|
|
640
|
+
if (decision)
|
|
641
|
+
cls.push('decision');
|
|
615
642
|
if (dashed)
|
|
616
643
|
cls.push('doc-only');
|
|
617
|
-
const aria = `${st.label}, ${FLOW_TEXT.step}, ${actor?.label ?? st.actor}` +
|
|
644
|
+
const aria = `${st.label}, ${decision ? FLOW_TEXT.decision : FLOW_TEXT.step}, ${actor?.label ?? st.actor}` +
|
|
618
645
|
(st.state !== undefined ? `, 상태 ${stateText(st.state)}` : '') +
|
|
619
646
|
(st.terminal ? `, ${FLOW_TEXT.end}` : '') +
|
|
620
647
|
(dashed ? ', 문서로만 확인' : '');
|
|
621
648
|
return (`<div class="${cls.join(' ')}" data-node-id="${escapeHtml(st.id)}" role="button" tabindex="0" ` +
|
|
622
649
|
`aria-label="${escapeHtml(aria)}" title="${escapeHtml(st.description ?? st.label)}" ` +
|
|
623
650
|
`style="left:${round2(b.x + FLOW_PAD)}px;top:${round2(b.y + FLOW_PAD)}px;width:${b.width}px;height:${b.height}px">` +
|
|
651
|
+
(decision
|
|
652
|
+
? `<svg class="dshape" viewBox="0 0 ${b.width} ${b.height}" preserveAspectRatio="none" aria-hidden="true">` +
|
|
653
|
+
`<polygon points="${b.width / 2},1 ${b.width - 1},${b.height / 2} ${b.width / 2},${b.height - 1} 1,${b.height / 2}"/></svg>`
|
|
654
|
+
: '') +
|
|
624
655
|
`<span class="nm"><span class="t">${escapeHtml(st.label)}</span></span>` +
|
|
625
656
|
`<span class="l2">` +
|
|
626
657
|
(st.state !== undefined
|
|
@@ -637,7 +668,7 @@ function renderFlowSection(level, flow, questionCount, drawableNodes) {
|
|
|
637
668
|
})
|
|
638
669
|
.join('');
|
|
639
670
|
return (`<section class="level flow-level" data-level-id="${escapeHtml(level.id)}" data-flow-id="${escapeHtml(level.flowId)}" ` +
|
|
640
|
-
`aria-label="${escapeHtml(flow.title)}" data-w="${width}" data-h="${height}" style="width:${width}px;height:${height}px" hidden>` +
|
|
671
|
+
`aria-label="${escapeHtml(solo !== undefined ? `${flow.title}, 행위자 ${solo.actor.label}` : flow.title)}" data-w="${width}" data-h="${height}" style="width:${width}px;height:${height}px" hidden>` +
|
|
641
672
|
`<svg class="links" xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" ` +
|
|
642
673
|
`role="group" aria-label="${escapeHtml(`${flow.title} 전이`)}"><g class="lanes">${lanes}${dividers}</g><g class="edges">${links}</g></svg>` +
|
|
643
674
|
`${stageHeads}${heads}${cards}</section>`);
|
|
@@ -1113,7 +1144,7 @@ function flowPayload(levels, flows, questions) {
|
|
|
1113
1144
|
};
|
|
1114
1145
|
});
|
|
1115
1146
|
}
|
|
1116
|
-
function renderLegend(nodes, edges, drill, generatedAt, nodeCount, edgeCount, hasFlows = false) {
|
|
1147
|
+
function renderLegend(nodes, edges, drill, generatedAt, nodeCount, edgeCount, hasFlows = false, hasDecisions = false) {
|
|
1117
1148
|
const nodeById = new Map(nodes.map((n) => [n.id, n]));
|
|
1118
1149
|
const line = (extra) => `<svg width="36" height="12" aria-hidden="true"><line x1="3" y1="6" x2="33" y2="6" ${extra}/></svg>`;
|
|
1119
1150
|
const kinds = [...new Set(nodes.map(displayKindOf))]
|
|
@@ -1134,6 +1165,9 @@ function renderLegend(nodes, edges, drill, generatedAt, nodeCount, edgeCount, ha
|
|
|
1134
1165
|
? `<li>${line('stroke-width="2" class="side-line"')}주황 선: 흐름에서 정상 흐름을 벗어나는 옆 흐름</li>` +
|
|
1135
1166
|
`<li><span class="swatch-step"></span>점선 테두리 카드: 기획 문서로만 확인한 흐름 단계</li>`
|
|
1136
1167
|
: '') +
|
|
1168
|
+
(hasDecisions
|
|
1169
|
+
? `<li><span class="swatch-decision"></span>마름모: 조건에 따라 길이 갈리는 갈림길</li>`
|
|
1170
|
+
: '') +
|
|
1137
1171
|
`</ul>` +
|
|
1138
1172
|
(kinds ? `<h3>항목</h3><ul class="legend-kinds">${kinds}</ul>` : '') +
|
|
1139
1173
|
`<p class="foot">만든 시각 ${escapeHtml(generatedAt)}<br>항목 ${nodeCount}개, 연결 ${edgeCount}개</p></div>`);
|
|
@@ -1258,8 +1292,8 @@ function renderBar(title, drill, generatedAt, nodeCount, edgeCount, questionCoun
|
|
|
1258
1292
|
}
|
|
1259
1293
|
const clientScripts = new Map();
|
|
1260
1294
|
/** 칩 글자와 설명, 레인 제목은 IR이 쓰는 팩 것만 싣는다. 팩을 더해도 그 팩을 안 쓰는 그림의 바이트가 그대로다 */
|
|
1261
|
-
function clientScriptFor(vocab, rootFlows, views, mixedBundles, sequences) {
|
|
1262
|
-
const key = `${vocab.packIds.join(',')}|${rootFlows}|${views}|${mixedBundles}|${sequences}`;
|
|
1295
|
+
function clientScriptFor(vocab, rootFlows, views, mixedBundles, sequences, flowBranches) {
|
|
1296
|
+
const key = `${vocab.packIds.join(',')}|${rootFlows}|${views}|${mixedBundles}|${sequences}|${flowBranches}`;
|
|
1263
1297
|
const hit = clientScripts.get(key);
|
|
1264
1298
|
if (hit !== undefined)
|
|
1265
1299
|
return hit;
|
|
@@ -1292,6 +1326,7 @@ function clientScriptFor(vocab, rootFlows, views, mixedBundles, sequences) {
|
|
|
1292
1326
|
views,
|
|
1293
1327
|
mixedBundles,
|
|
1294
1328
|
sequences,
|
|
1329
|
+
...(flowBranches ? { flowBranches } : {}),
|
|
1295
1330
|
docs: vocab.packIds.includes('knowledge'),
|
|
1296
1331
|
});
|
|
1297
1332
|
clientScripts.set(key, script);
|
|
@@ -1312,6 +1347,14 @@ function renderPage({ ir, payload, sections, drill, flows, views, mixedBundles =
|
|
|
1312
1347
|
const hasFlows = flows !== undefined && flows.flows.length > 0;
|
|
1313
1348
|
const hasViews = views !== undefined && views.length > 0;
|
|
1314
1349
|
const hasSequences = sequences.length > 0;
|
|
1350
|
+
const drawnFlows = flows?.flows ?? [];
|
|
1351
|
+
const hasDecisions = drawnFlows.some((f) => f.steps.some((st) => st.kind === 'decision' && flows.drawnSteps.has(st.id)));
|
|
1352
|
+
// 누른 것과 조건, 갈림길, 행위자 한 명 띠는 그 흐름이 있을 때만 CSS와 코드를 싣는다. 예전 흐름 그림의 바이트를 지키려고서다
|
|
1353
|
+
const flowBranches = hasDecisions ||
|
|
1354
|
+
drawnFlows.some((f) => f.transitions.some((t) => (t.trigger !== undefined || t.condition !== undefined) &&
|
|
1355
|
+
flows.drawnSteps.has(t.from) &&
|
|
1356
|
+
flows.drawnSteps.has(t.to)));
|
|
1357
|
+
const soloActor = drawnFlows.some((f) => f.actors.length === 1);
|
|
1315
1358
|
return [
|
|
1316
1359
|
'<!doctype html>',
|
|
1317
1360
|
'<html lang="ko">',
|
|
@@ -1320,7 +1363,7 @@ function renderPage({ ir, payload, sections, drill, flows, views, mixedBundles =
|
|
|
1320
1363
|
'<meta name="viewport" content="width=device-width, initial-scale=1">',
|
|
1321
1364
|
`<title>${escapeHtml(title)}</title>`,
|
|
1322
1365
|
`<script>${THEME_BOOT_SCRIPT}</script>`,
|
|
1323
|
-
`<style>${renderCss(vocab)}${hasViews ? `\n${VIEW_CSS}` : ''}${hasSequences ? `\n${SEQ_VIEW_CSS}` : ''}${vocab.packIds.includes('knowledge') ? `\n${DOC_CSS}` : ''}</style>`,
|
|
1366
|
+
`<style>${renderCss(vocab)}${hasViews ? `\n${VIEW_CSS}` : ''}${hasSequences ? `\n${SEQ_VIEW_CSS}` : ''}${vocab.packIds.includes('knowledge') ? `\n${DOC_CSS}` : ''}${flowBranches || soloActor ? `\n${FLOW_BRANCH_CSS}` : ''}</style>`,
|
|
1324
1367
|
'</head>',
|
|
1325
1368
|
'<body>',
|
|
1326
1369
|
renderIconSprite(vocab),
|
|
@@ -1341,13 +1384,13 @@ function renderPage({ ir, payload, sections, drill, flows, views, mixedBundles =
|
|
|
1341
1384
|
`<button type="button" id="drawer-close" class="btn icon dr-close" aria-label="닫기">${iconUse('u-close')}</button>` +
|
|
1342
1385
|
'<div id="panel" class="panel" aria-live="polite"></div></aside>',
|
|
1343
1386
|
'</div>',
|
|
1344
|
-
renderLegend(payload.nodes, payload.edges, drill, ir.generatedAt, payload.nodes.length, payload.edges.length, hasFlows),
|
|
1387
|
+
renderLegend(payload.nodes, payload.edges, drill, ir.generatedAt, payload.nodes.length, payload.edges.length, hasFlows, hasDecisions),
|
|
1345
1388
|
renderQuestions(payload.unresolved, nodeById, ir.edges, flows?.flows ?? [], flows?.drawnSteps ?? new Set(), views?.flatMap((v) => v.projection.messages)),
|
|
1346
1389
|
(hasFlows
|
|
1347
1390
|
? '<div id="flow-pop" class="pop" role="dialog" aria-label="흐름 고르기" tabindex="-1" hidden><h3>흐름</h3><ul class="flow-list"></ul></div>'
|
|
1348
1391
|
: '') + (hasViews ? `\n${renderViewsPop(views)}` : ''),
|
|
1349
1392
|
`<script id="ir" type="application/json">${embedJson(stableStringify(payload))}</script>`,
|
|
1350
|
-
`<script>${clientScriptFor(vocab, hasFlows && flows.flows.some((f) => f.service === undefined), hasViews, mixedBundles, hasSequences)}</script>`,
|
|
1393
|
+
`<script>${clientScriptFor(vocab, hasFlows && flows.flows.some((f) => f.service === undefined), hasViews, mixedBundles, hasSequences, flowBranches)}</script>`,
|
|
1351
1394
|
'</body>',
|
|
1352
1395
|
'</html>',
|
|
1353
1396
|
'',
|