@tienne/gestalt 0.91.0 → 0.92.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/dist/package.json +1 -1
- package/dist/plugin/skills/architecture/SKILL.md +15 -1
- package/dist/schemas/architecture-ir.schema.json +20 -0
- package/dist/src/architecture/html-client.d.ts +3 -0
- package/dist/src/architecture/html-client.d.ts.map +1 -1
- package/dist/src/architecture/html-client.js +192 -11
- 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 +219 -8
- package/dist/src/architecture/html-renderer.js.map +1 -1
- package/dist/src/architecture/html-theme.d.ts +2 -0
- package/dist/src/architecture/html-theme.d.ts.map +1 -1
- package/dist/src/architecture/html-theme.js +60 -0
- package/dist/src/architecture/html-theme.js.map +1 -1
- package/dist/src/architecture/ir-schema.d.ts +66 -26
- package/dist/src/architecture/ir-schema.d.ts.map +1 -1
- package/dist/src/architecture/ir-schema.js +9 -0
- package/dist/src/architecture/ir-schema.js.map +1 -1
- package/dist/src/architecture/merge.d.ts.map +1 -1
- package/dist/src/architecture/merge.js +9 -0
- package/dist/src/architecture/merge.js.map +1 -1
- package/dist/src/architecture/sequence-views.d.ts +155 -0
- package/dist/src/architecture/sequence-views.d.ts.map +1 -0
- package/dist/src/architecture/sequence-views.js +407 -0
- package/dist/src/architecture/sequence-views.js.map +1 -0
- package/dist/src/architecture/types.d.ts +13 -0
- package/dist/src/architecture/types.d.ts.map +1 -1
- package/dist/src/architecture/validator.d.ts +2 -1
- package/dist/src/architecture/validator.d.ts.map +1 -1
- package/dist/src/architecture/validator.js +84 -0
- package/dist/src/architecture/validator.js.map +1 -1
- 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 +15 -1
- package/schemas/architecture-ir.schema.json +20 -0
package/dist/package.json
CHANGED
|
@@ -357,6 +357,7 @@ AI 클라이언트가 플러그인으로 읽어 들이는 스킬과 에이전트
|
|
|
357
357
|
- `participants`에는 그 경로에 나오는 스킬, 에이전트, MCP 서버만 10개 안팎으로 고른다. MCP 서버 자리에는 도구 처리기 `app_module`이나 도구 `endpoint`를 쓴다.
|
|
358
358
|
- 메시지는 지도 엣지를 `edge`로 가리킨다. 문서 읽기처럼 지도에 선이 없는 단계는 자기 호출 메시지로 쓰고 그 SKILL.md 줄을 근거로 단다. 응답은 `reply: true`다. 조건이 맞을 때만 도는 단계는 `blocks`의 `opt`로 묶고 경우에 따라 하나만 도는 단계는 `alt`로 묶는다.
|
|
359
359
|
- 세션이 도구를 두 번 불러 결과를 넘기는 2-Call Passthrough도 순서도에 그린다. 세션 모델과 MCP 서버를 오가는 메시지로 쓴다.
|
|
360
|
+
- 구간은 [`phases`](#질문별-그림을-얹는다)의 sequence 구간 규칙대로 직접 적는다.
|
|
360
361
|
- 지도는 그대로 그린다. 무엇이 어느 플러그인에 있는지는 지도가 보여준다. 전체보기 지도 위에 질문별 그림 카드 줄이 뜨니 순서도가 몇 개인지는 위쪽 바를 안 눌러도 보인다.
|
|
361
362
|
- IR의 `repos`가 둘 이상이면 순서도 머리 카드 둘째 줄에 노드의 레포 이름이 나온다. MCP 도구는 레포 대신 `<mcpServer> MCP`로 나온다. 카드에 그대로 찍히니 `participants`에 넣은 노드의 `repo`가 실제 레포와 맞는지 한 번 더 본다. MCP 도구에는 `mcpServer`를 빠뜨리지 않는다. 빠지면 도구를 기록한 레포 이름이 대신 나와 어느 서버의 도구인지 헷갈린다.
|
|
362
363
|
- `flows`는 사람 쪽 업무 절차가 따로 있을 때만 쓴다. 그때는 사용자가 `person`, MCP 서버가 `system`, 세션 모델과 서브에이전트가 `agent`다. `refs`에는 스킬과 에이전트 노드 id도 단다.
|
|
@@ -602,6 +603,10 @@ FE가 부르는 BE 레포나 배포 매니페스트 레포처럼 지금 레포
|
|
|
602
603
|
"messages": [
|
|
603
604
|
{ "id": "m1", "from": "app", "to": "api", "label": "POST /orders/pay", "edge": "e-app-api", "evidence": [], "lineStyle": "solid" },
|
|
604
605
|
{ "id": "m2", "from": "pg", "to": "api", "label": "승인됨", "edge": "e-api-pg", "evidence": [], "lineStyle": "solid", "reply": true, "block": "b-result", "branch": "승인" }
|
|
606
|
+
],
|
|
607
|
+
"phases": [
|
|
608
|
+
{ "id": "p-pay", "label": "결제 요청", "from": "m1", "to": "m1" },
|
|
609
|
+
{ "id": "p-result", "label": "승인 결과 받기", "from": "m2", "to": "m2" }
|
|
605
610
|
]
|
|
606
611
|
}
|
|
607
612
|
```
|
|
@@ -612,6 +617,10 @@ FE가 부르는 BE 레포나 배포 매니페스트 레포처럼 지금 레포
|
|
|
612
617
|
- 엣지로 안 잡히는 일(같은 노드 안의 검증, 문서에만 적힌 단계)은 `edge` 없이 자기 `evidence`를 단다. 자기 호출은 `from`과 `to`를 같게 쓴다.
|
|
613
618
|
- 근거가 하나도 없는 메시지는 그려지지 않고 `auto:message:<id>` 질문이 된다. 메시지를 지어내 채우지 말고 Step 7로 넘긴다.
|
|
614
619
|
- **sequence**: `participants`로 세로줄 순서를 정한다. 적으면 메시지 끝이 전부 여기 있어야 한다. 묶음은 `blocks`에 두고 메시지 `block`으로 건다. `alt`는 경우에 따라 하나만 도는 묶음, `opt`는 조건이 맞을 때만 도는 묶음, `loop`는 되풀이, `par`는 동시에 도는 묶음이다. `alt` 안의 경우 이름은 `branch`에 적는다. 한 묶음의 메시지는 붙여서 적는다.
|
|
620
|
+
- **sequence 구간**: `phases`는 순서도를 단계로 나눈다. 그림 위 보기 전환의 **단계별 카드**와 **따라가기**가 이 구간대로 카드를 나누고 띠를 깐다. 구간 하나는 `{ id, label, from, to }`이고 `from`과 `to`는 이 그림의 메시지 id다. 두 메시지 다 그 구간에 든다.
|
|
621
|
+
- `label`은 사람이 읽는 단계 이름이다. 노드 id나 도구 이름(`ges_interview`) 말고 "요구사항 인터뷰", "스펙 만들기"처럼 그 구간에서 무슨 일이 벌어지는지를 쓴다. [페이지 글](#페이지-글) 규칙을 따른다.
|
|
622
|
+
- 첫 메시지부터 마지막 메시지까지 빈틈도 겹침도 없이 메시지 순서대로 적는다. 배열 순서도 메시지 순서와 같아야 하고 한 메시지는 한 구간에만 든다. 구간 경계가 묶음 한가운데를 지나는 건 괜찮다.
|
|
623
|
+
- 안 적으면 render가 알아서 자른다. 맨 위 참여자가 지금 구간에서 처음 만나는 대상을 부르는 자리에서 새 구간이 열리고 구간 이름은 그 대상의 표시 이름이다. 그래서 모든 호출이 한 진입점을 거치는 흐름은 구간 하나로 뭉친다. 세션 모델이나 스킬 하나가 모든 호출을 내보내는 하네스 순서도가 그렇다. 같은 대상을 여러 번 오가는 흐름은 같은 이름 구간이 되풀이된다. 이런 흐름과 참여자가 많은 순서도에는 `phases`를 적는다.
|
|
615
624
|
- **dataflow**: `messages`만 쓴다. 데이터가 한 노드에서 다른 노드로 옮겨 가는 것 하나가 메시지 하나다. `blocks`와 메시지의 `reply`, `block`, `branch`는 쓰지 않는다.
|
|
616
625
|
- **compare**: `messages`는 빈 배열로 두고 `sides`에 견줄 두 묶음을 적는다. `{ id, label, nodes[] }` 둘이고 id는 달라야 한다. 그림은 "첫 묶음에만", "둘 다", "둘째 묶음에만" 세 열로 선다.
|
|
617
626
|
- 질문 하나에 그림 하나다. 질문이 여럿이면 그림도 여럿 단다.
|
|
@@ -651,7 +660,7 @@ FE가 부르는 BE 레포나 배포 매니페스트 레포처럼 지금 레포
|
|
|
651
660
|
|
|
652
661
|
- 성공하면 `{ ok: true, autoUnresolved, drawable }`이다. `drawable`에 빠진 노드와 엣지가 있으면 왜 빠졌는지 `autoUnresolved`에서 확인한다.
|
|
653
662
|
- 성공해도 `warnings`가 올 수 있다. 지금은 `NODE_DESCRIPTION_MISSING` 하나이고 그리는 노드 중 `description`이 빈 노드를 `nodeIds`에 모아 준다. render는 그대로 되지만 그 카드에는 설명 줄이 없다. [노드 설명](#노드-설명)대로 채운다. render 응답에도 같은 `warnings`가 실린다.
|
|
654
|
-
- 실패하면 `errors[]`에 `code`와 `nodeId`나 `edgeId`가 온다. 질문별 그림 에러면 `projectionId`와 `messageId`가 온다.
|
|
663
|
+
- 실패하면 `errors[]`에 `code`와 `nodeId`나 `edgeId`가 온다. 질문별 그림 에러면 `projectionId`와 `messageId`가 오고 구간 에러면 `phaseId`가 함께 온다.
|
|
655
664
|
|
|
656
665
|
| 에러 코드 | 고치는 법 |
|
|
657
666
|
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
@@ -684,6 +693,11 @@ FE가 부르는 BE 레포나 배포 매니페스트 레포처럼 지금 레포
|
|
|
684
693
|
| `SOLID_MESSAGE_WITHOUT_EVIDENCE` | 가리킨 엣지나 자기 근거에 code나 spec이 없다. 근거를 찾아 달거나 점선으로 바꾼다 |
|
|
685
694
|
| `PROJECTION_EMPTY` | sequence와 dataflow에 메시지를 넣는다. 넣을 메시지가 없으면 그 그림을 뺀다 |
|
|
686
695
|
| `PROJECTION_SHAPE_FIELD` | 모양에 안 맞는 필드를 뺀다. [질문별 그림을 얹는다](#질문별-그림을-얹는다)의 모양별 설명을 본다 |
|
|
696
|
+
| `DUPLICATE_PHASE_ID` | 한 그림 안에서 구간 id가 겹친다. 다시 짓는다 |
|
|
697
|
+
| `PROJECTION_PHASE_MESSAGE_NOT_FOUND` | 구간 `from`이나 `to`를 그 그림의 메시지 id로 고친다. 다른 그림의 메시지는 못 가리킨다 |
|
|
698
|
+
| `PROJECTION_PHASE_REVERSED` | `from`이 `to`보다 뒤 메시지다. 메시지 순서대로 앞쪽을 `from`에 둔다 |
|
|
699
|
+
| `PROJECTION_PHASE_OVERLAP` | 구간이 겹치면 다음 구간을 앞 구간의 `to` 바로 다음 메시지에서 시작한다. 구간 배열이 메시지 순서를 안 따르면 배열을 메시지 순서대로 다시 적는다 |
|
|
700
|
+
| `PROJECTION_PHASE_GAP` | 첫 구간은 첫 메시지에서 시작하고 마지막 구간은 마지막 메시지에서 끝낸다. 어느 구간에도 안 든 메시지는 앞뒤 구간에 넣는다. 배열이 메시지 순서대로인지도 함께 본다 |
|
|
687
701
|
|
|
688
702
|
**최대 3회까지 고쳐 다시 validate한다.** 세 번째에도 같은 노드나 엣지에서 실패하면 더 붙잡지 않는다. 그 노드나 엣지를 IR에서 빼고 `unresolved`에 무엇을 왜 확인 못 했는지 질문으로 남긴다.
|
|
689
703
|
|
|
@@ -580,9 +580,29 @@
|
|
|
580
580
|
"type": "array",
|
|
581
581
|
"description": "the two groups compare puts side by side, such as before and after",
|
|
582
582
|
"items": { "$ref": "#/definitions/projectionSide" }
|
|
583
|
+
},
|
|
584
|
+
"phases": {
|
|
585
|
+
"type": "array",
|
|
586
|
+
"minItems": 1,
|
|
587
|
+
"description": "sequence only. Phases in message order, from and to inclusive, no overlap or gap. Leave out to split automatically",
|
|
588
|
+
"items": { "$ref": "#/definitions/projectionPhase" }
|
|
583
589
|
}
|
|
584
590
|
}
|
|
585
591
|
},
|
|
592
|
+
"projectionPhase": {
|
|
593
|
+
"type": "object",
|
|
594
|
+
"required": ["id", "label", "from", "to"],
|
|
595
|
+
"properties": {
|
|
596
|
+
"id": { "type": "string", "minLength": 1 },
|
|
597
|
+
"label": {
|
|
598
|
+
"type": "string",
|
|
599
|
+
"minLength": 1,
|
|
600
|
+
"description": "step name a person reads"
|
|
601
|
+
},
|
|
602
|
+
"from": { "type": "string", "minLength": 1, "description": "first message id" },
|
|
603
|
+
"to": { "type": "string", "minLength": 1, "description": "last message id" }
|
|
604
|
+
}
|
|
605
|
+
},
|
|
586
606
|
"projectionSide": {
|
|
587
607
|
"type": "object",
|
|
588
608
|
"required": ["id", "label", "nodes"],
|
|
@@ -26,9 +26,12 @@ export interface ClientConstants {
|
|
|
26
26
|
views?: boolean;
|
|
27
27
|
/** 근거가 섞인 묶음 선이 있으면 true. 묶음 이름과 배지에 섞였다는 표시를 다는 코드를 싣는다 */
|
|
28
28
|
mixedBundles?: boolean;
|
|
29
|
+
/** 순서도가 있으면 true. 보기 전환과 따라가기 코드를 싣는다 */
|
|
30
|
+
sequences?: boolean;
|
|
29
31
|
/** 지식 문서 팩을 쓰면 true. 서랍에 문서 정보를 그리는 코드를 싣는다 */
|
|
30
32
|
docs?: boolean;
|
|
31
33
|
}
|
|
34
|
+
export declare const SEQ_KEYS = " if ((e.key === 'ArrowLeft' || e.key === 'ArrowRight') && seqBase && seqMode === 'walk' && !seqBar.hidden &&\n (t === doc.body || seqBar.contains(t) || seqSteps.contains(t) || !!(seqAlt('walk') && seqAlt('walk').contains(t)))) {\n e.preventDefault();\n seqStop();\n showStep(seqN + (e.key === 'ArrowRight' ? 1 : -1));\n return;\n }\n";
|
|
32
35
|
export declare const THEME_STORAGE_KEY = "gestalt-architecture-theme";
|
|
33
36
|
export declare const THEME_BOOT_SCRIPT = "(function () {\n try {\n var t = localStorage.getItem('gestalt-architecture-theme');\n if (t === 'light' || t === 'dark') document.documentElement.setAttribute('data-theme', t);\n } catch (e) {}\n})();";
|
|
34
37
|
/**
|
|
@@ -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,+CAA+C;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;
|
|
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;CAChB;AA2XD,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"}
|
|
@@ -150,7 +150,10 @@ const VIEW_CLICK = `var vm = e.target.closest('.link.seq-m');
|
|
|
150
150
|
const VIEW_KEY = `var vm = e.target.closest('.link.seq-m');
|
|
151
151
|
if (vm) { e.preventDefault(); activateMessage(vm); return; }
|
|
152
152
|
`;
|
|
153
|
-
|
|
153
|
+
// 순서도 보기 바가 화면 위를 덮으면 머리 카드는 그 바 아래에 붙인다
|
|
154
|
+
const STICK_FROM = '-view.y / view.k';
|
|
155
|
+
const SEQ_STICK_FROM = '(seqTop() - view.y) / view.k';
|
|
156
|
+
const viewFuncs = (sequences) => ` var messages = data.messages || {};
|
|
154
157
|
// 전체 레벨은 지도 위 카드 줄만큼 내려가 있다. 같은 이름으로 다시 선언해 그 거리를 더한 쪽이 쓰이게 한다
|
|
155
158
|
function cardCenter(c) {
|
|
156
159
|
var s = c.closest('.level');
|
|
@@ -162,7 +165,7 @@ const VIEW_FUNCS = ` var messages = data.messages || {};
|
|
|
162
165
|
if (!bar) return;
|
|
163
166
|
var top = parseFloat(bar.style.top);
|
|
164
167
|
var end = Number(active.getAttribute('data-h')) - top - bar.offsetHeight;
|
|
165
|
-
var dy = Math.min(Math.max(0,
|
|
168
|
+
var dy = Math.min(Math.max(0, ${sequences ? SEQ_STICK_FROM : STICK_FROM} - top), Math.max(0, end));
|
|
166
169
|
var t = dy > 0 ? 'translateY(' + dy + 'px)' : '';
|
|
167
170
|
bar.style.transform = t;
|
|
168
171
|
bar.classList.toggle('stuck', dy > 0);
|
|
@@ -198,6 +201,184 @@ const VIEW_POP = ` setupPop('views-btn', 'views');
|
|
|
198
201
|
var viewsPop = byId('views');
|
|
199
202
|
if (viewsPop) viewsPop.addEventListener('click', function (e) { if (e.target.closest('a')) closePops(false); });
|
|
200
203
|
`;
|
|
204
|
+
// 순서도 보기 조각. 순서도가 있는 그림에만 싣는다.
|
|
205
|
+
// 단계별 카드와 따라가기는 순서도 섹션 옆 형제 섹션(.seq-alt)이고 data-level-id가 없어 레벨 목록에 안 잡힌다.
|
|
206
|
+
// 보기는 레벨마다 페이지 메모리에만 둔다. 주소에 실으면 보기 전환이 뒤로가기 기록을 채운다
|
|
207
|
+
const SEQ_FUNCS = ` var seqBar = byId('seq-bar');
|
|
208
|
+
var seqSteps = byId('seq-steps');
|
|
209
|
+
var seqCap = seqBar.querySelector('.seq-cap');
|
|
210
|
+
var seqPlayBtn = seqBar.querySelector('.sw-play');
|
|
211
|
+
var seqSay = seqCap.querySelector('.sw-say');
|
|
212
|
+
var seqModeBtns = Array.prototype.slice.call(seqBar.querySelectorAll('button[data-seq-mode]'));
|
|
213
|
+
var seqAlts = Array.prototype.slice.call(doc.querySelectorAll('.seq-alt'));
|
|
214
|
+
var seqBase = null;
|
|
215
|
+
var seqMode = 'seq';
|
|
216
|
+
var seqModes = {};
|
|
217
|
+
var seqAt = {};
|
|
218
|
+
var seqN = 0;
|
|
219
|
+
var seqTimer = 0;
|
|
220
|
+
function seqNarrow() { return window.matchMedia('(max-width: 860px)').matches; }
|
|
221
|
+
function seqTop() { return seqBar.hidden ? 0 : seqBar.offsetTop + seqBar.offsetHeight; }
|
|
222
|
+
function seqInset() {
|
|
223
|
+
var r = { t: 0, r: 0, b: 0 };
|
|
224
|
+
if (seqBar.hidden) return r;
|
|
225
|
+
r.t = seqTop();
|
|
226
|
+
if (!seqSteps.hidden) {
|
|
227
|
+
if (seqNarrow()) r.b = seqSteps.offsetHeight + 16;
|
|
228
|
+
else r.r = seqSteps.offsetWidth + 16;
|
|
229
|
+
}
|
|
230
|
+
return r;
|
|
231
|
+
}
|
|
232
|
+
function seqBaseId() { return seqBase ? seqBase.getAttribute('data-level-id') : null; }
|
|
233
|
+
function seqAlt(mode) {
|
|
234
|
+
var id = seqBaseId();
|
|
235
|
+
for (var i = 0; i < seqAlts.length; i++) {
|
|
236
|
+
if (seqAlts[i].getAttribute('data-seq-of') === id && seqAlts[i].getAttribute('data-seq-mode') === mode) return seqAlts[i];
|
|
237
|
+
}
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
function seqList() {
|
|
241
|
+
var id = seqBaseId();
|
|
242
|
+
var lists = seqSteps.querySelectorAll('.ss-list');
|
|
243
|
+
for (var i = 0; i < lists.length; i++) if (lists[i].getAttribute('data-seq-of') === id) return lists[i];
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
function seqTotal() {
|
|
247
|
+
var walk = seqAlt('walk');
|
|
248
|
+
return walk ? walk.querySelectorAll('.w-step').length : 0;
|
|
249
|
+
}
|
|
250
|
+
function seqStop() {
|
|
251
|
+
if (seqTimer) clearInterval(seqTimer);
|
|
252
|
+
seqTimer = 0;
|
|
253
|
+
seqPlayBtn.setAttribute('aria-pressed', 'false');
|
|
254
|
+
seqSay.setAttribute('aria-live', 'polite');
|
|
255
|
+
}
|
|
256
|
+
// 보기 바가 두 줄로 접히면 목록이 그 아래에서 시작해야 안 겹친다. 창 폭이 바뀌면 다시 잰다
|
|
257
|
+
function seqPlaceSteps() {
|
|
258
|
+
seqSteps.style.top = !seqSteps.hidden && !seqNarrow() ? seqTop() + 8 + 'px' : '';
|
|
259
|
+
}
|
|
260
|
+
function seqLeave() {
|
|
261
|
+
seqStop();
|
|
262
|
+
seqAlts.forEach(function (s) { s.hidden = true; });
|
|
263
|
+
seqBar.hidden = true;
|
|
264
|
+
seqSteps.hidden = true;
|
|
265
|
+
seqBase = null;
|
|
266
|
+
}
|
|
267
|
+
function showStep(n) {
|
|
268
|
+
var walk = seqAlt('walk');
|
|
269
|
+
var total = seqTotal();
|
|
270
|
+
if (!walk || !total) return;
|
|
271
|
+
seqN = Math.max(1, Math.min(total, n));
|
|
272
|
+
seqAt[seqBaseId()] = seqN;
|
|
273
|
+
var on = null;
|
|
274
|
+
walk.querySelectorAll('.w-step').forEach(function (p) {
|
|
275
|
+
var hit = Number(p.getAttribute('data-n')) === seqN;
|
|
276
|
+
p.classList.toggle('on', hit);
|
|
277
|
+
if (hit) on = p;
|
|
278
|
+
});
|
|
279
|
+
var from = on.getAttribute('data-from');
|
|
280
|
+
var to = on.getAttribute('data-to');
|
|
281
|
+
walk.querySelectorAll('.node').forEach(function (c) {
|
|
282
|
+
var id = c.getAttribute('data-node-id');
|
|
283
|
+
c.classList.toggle('w-dim', id !== from && id !== to);
|
|
284
|
+
});
|
|
285
|
+
var item = null;
|
|
286
|
+
var list = seqList();
|
|
287
|
+
if (list) list.querySelectorAll('button[data-n]').forEach(function (b) {
|
|
288
|
+
if (Number(b.getAttribute('data-n')) === seqN) { b.setAttribute('aria-current', 'step'); item = b; }
|
|
289
|
+
else b.removeAttribute('aria-current');
|
|
290
|
+
});
|
|
291
|
+
seqCap.querySelector('.sw-n').textContent = seqN + ' / ' + total;
|
|
292
|
+
seqCap.querySelector('.sw-p').textContent = item ? item.getAttribute('data-phase') : '';
|
|
293
|
+
seqCap.querySelector('.sw-t').textContent = item ? item.getAttribute('data-say') : '';
|
|
294
|
+
var block = seqCap.querySelector('.sw-b');
|
|
295
|
+
block.textContent = item ? item.getAttribute('data-block') : '';
|
|
296
|
+
block.hidden = !block.textContent;
|
|
297
|
+
if (item) item.scrollIntoView({ block: 'nearest' });
|
|
298
|
+
}
|
|
299
|
+
function applySeqMode(mode, refit) {
|
|
300
|
+
if (!seqBase) return;
|
|
301
|
+
seqStop();
|
|
302
|
+
closeDrawer(false);
|
|
303
|
+
if (active) clearLit(active);
|
|
304
|
+
seqMode = mode;
|
|
305
|
+
seqModes[seqBaseId()] = mode;
|
|
306
|
+
seqBase.hidden = mode !== 'seq';
|
|
307
|
+
var alt = mode === 'seq' ? null : seqAlt(mode);
|
|
308
|
+
seqAlts.forEach(function (s) { s.hidden = s !== alt; });
|
|
309
|
+
active = alt || seqBase;
|
|
310
|
+
if (envPicker) applyEnv(active);
|
|
311
|
+
seqModeBtns.forEach(function (b) { b.setAttribute('aria-pressed', String(b.getAttribute('data-seq-mode') === mode)); });
|
|
312
|
+
var walking = mode === 'walk';
|
|
313
|
+
seqCap.hidden = !walking;
|
|
314
|
+
seqSteps.hidden = !walking;
|
|
315
|
+
var list = seqList();
|
|
316
|
+
seqSteps.querySelectorAll('.ss-list').forEach(function (l) { l.hidden = l !== list; });
|
|
317
|
+
seqPlaceSteps();
|
|
318
|
+
if (walking) showStep(seqAt[seqBaseId()] || 1);
|
|
319
|
+
syncFocusBtn();
|
|
320
|
+
if (refit) {
|
|
321
|
+
fit('smart');
|
|
322
|
+
runSearch(false);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
function syncSeqBar(id) {
|
|
326
|
+
seqStop();
|
|
327
|
+
var base = sectionOf(id);
|
|
328
|
+
var has = !!base && seqAlts.some(function (s) { return s.getAttribute('data-seq-of') === id; });
|
|
329
|
+
seqAlts.forEach(function (s) { s.hidden = true; });
|
|
330
|
+
seqBar.hidden = !has;
|
|
331
|
+
seqSteps.hidden = true;
|
|
332
|
+
seqBase = has ? base : null;
|
|
333
|
+
if (has) applySeqMode(seqModes[id] || 'seq', false);
|
|
334
|
+
}
|
|
335
|
+
function seqPlay() {
|
|
336
|
+
if (seqTimer) { seqStop(); return; }
|
|
337
|
+
if (seqN >= seqTotal()) showStep(1);
|
|
338
|
+
// 단추 이름은 '재생' 그대로 두고 눌림 상태로만 알린다. 이름까지 바꾸면 낭독기가 상태를 거꾸로 읽는다
|
|
339
|
+
seqPlayBtn.setAttribute('aria-pressed', 'true');
|
|
340
|
+
// 재생 중에 단계마다 읽어 주면 낭독이 밀려 쌓인다. 멈추면 seqStop이 되돌린다
|
|
341
|
+
seqSay.setAttribute('aria-live', 'off');
|
|
342
|
+
seqTimer = setInterval(function () {
|
|
343
|
+
// 마지막 단계는 재생을 먼저 끝내고 그린다. aria-live가 polite로 돌아온 뒤에 써야 낭독기가 읽는다
|
|
344
|
+
var next = seqN + 1;
|
|
345
|
+
if (next >= seqTotal()) { seqStop(); showStep(next); return; }
|
|
346
|
+
showStep(next);
|
|
347
|
+
}, 900);
|
|
348
|
+
}
|
|
349
|
+
seqBar.addEventListener('click', function (e) {
|
|
350
|
+
var b = e.target.closest('button');
|
|
351
|
+
if (!b) return;
|
|
352
|
+
var mode = b.getAttribute('data-seq-mode');
|
|
353
|
+
// 보기를 바꾼 뒤에도 키보드로 같은 바에서 이어 고를 수 있게 누른 단추에 포커스를 둔다
|
|
354
|
+
if (mode) { if (mode !== seqMode) { applySeqMode(mode, true); b.focus(); } return; }
|
|
355
|
+
if (b.classList.contains('sw-prev')) { seqStop(); showStep(seqN - 1); }
|
|
356
|
+
else if (b.classList.contains('sw-next')) { seqStop(); showStep(seqN + 1); }
|
|
357
|
+
else if (b.classList.contains('sw-play')) seqPlay();
|
|
358
|
+
});
|
|
359
|
+
seqSteps.addEventListener('click', function (e) {
|
|
360
|
+
var b = e.target.closest('button[data-n]');
|
|
361
|
+
if (!b) return;
|
|
362
|
+
seqStop();
|
|
363
|
+
showStep(Number(b.getAttribute('data-n')));
|
|
364
|
+
});
|
|
365
|
+
// 다른 탭에 가 있는 동안 단계가 혼자 넘어가 있지 않게 멈춘다
|
|
366
|
+
doc.addEventListener('visibilitychange', function () { if (doc.hidden) seqStop(); });
|
|
367
|
+
`;
|
|
368
|
+
const SEQ_FIT = `
|
|
369
|
+
var sq = seqInset();
|
|
370
|
+
W -= sq.r;
|
|
371
|
+
H -= sq.t + sq.b;`;
|
|
372
|
+
// ←, →는 따라가기 보기가 떠 있고 포커스가 보기 바, 단계 목록, 따라가기 지도 안이거나 아무 데도 없을 때만 단계를 넘긴다.
|
|
373
|
+
// 그 밖의 자리에서는 스크롤 같은 브라우저 기본 동작을 그대로 둔다
|
|
374
|
+
export const SEQ_KEYS = ` if ((e.key === 'ArrowLeft' || e.key === 'ArrowRight') && seqBase && seqMode === 'walk' && !seqBar.hidden &&
|
|
375
|
+
(t === doc.body || seqBar.contains(t) || seqSteps.contains(t) || !!(seqAlt('walk') && seqAlt('walk').contains(t)))) {
|
|
376
|
+
e.preventDefault();
|
|
377
|
+
seqStop();
|
|
378
|
+
showStep(seqN + (e.key === 'ArrowRight' ? 1 : -1));
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
`;
|
|
201
382
|
export const THEME_STORAGE_KEY = 'gestalt-architecture-theme';
|
|
202
383
|
const HINT_STORAGE_KEY = 'gestalt-architecture-hint';
|
|
203
384
|
// 첫 화면을 그리기 전에 저장한 테마를 걸어야 밝은 화면이 한 번 번쩍이지 않는다
|
|
@@ -728,7 +909,7 @@ ${FOCUS_SOURCE}
|
|
|
728
909
|
var s = dims(active);
|
|
729
910
|
var W = stage.clientWidth;
|
|
730
911
|
var H = stage.clientHeight - (sheet.hidden ? 0 : sheet.offsetHeight + 16);
|
|
731
|
-
var M = 24
|
|
912
|
+
var M = 24;${c.sequences ? SEQ_FIT : ''}
|
|
732
913
|
var kw = (W - M * 2) / s.w;
|
|
733
914
|
var kh = (H - M * 2) / s.h;
|
|
734
915
|
var k = Math.min(kw, kh, 1);
|
|
@@ -739,7 +920,7 @@ ${FOCUS_SOURCE}
|
|
|
739
920
|
k = clampK(k);
|
|
740
921
|
view.k = k;
|
|
741
922
|
view.x = Math.max(M, (W - s.w * k) / 2);
|
|
742
|
-
view.y = top ? M : Math.max(M, (H - s.h * k) / 2);
|
|
923
|
+
view.y = ${c.sequences ? 'sq.t + (' : ''}top ? M : Math.max(M, (H - s.h * k) / 2)${c.sequences ? ')' : ''};
|
|
743
924
|
glide();
|
|
744
925
|
applyView();
|
|
745
926
|
}
|
|
@@ -948,7 +1129,7 @@ ${FOCUS_SOURCE}
|
|
|
948
1129
|
returnFocus = g;
|
|
949
1130
|
renderTransitionPanel(t);
|
|
950
1131
|
}
|
|
951
|
-
${c.views ?
|
|
1132
|
+
${c.views ? viewFuncs(!!c.sequences) : ''}${c.sequences ? SEQ_FUNCS : ''}${c.docs ? DOC_FUNCS : ''} stage.addEventListener('click', function (e) {
|
|
952
1133
|
if (suppressClick) { suppressClick = false; return; }
|
|
953
1134
|
var more = e.target.closest('.pb.more');
|
|
954
1135
|
if (more) { toggleProducts(more); return; }
|
|
@@ -1094,7 +1275,7 @@ ${c.views ? VIEW_FUNCS : ''}${c.docs ? DOC_FUNCS : ''} stage.addEventListener('
|
|
|
1094
1275
|
if (active) active.querySelectorAll('.node.anchor').forEach(function (x) { x.classList.remove('anchor'); });
|
|
1095
1276
|
renderCrumbs(trailItems(id));
|
|
1096
1277
|
syncFlowBtn();
|
|
1097
|
-
fit('smart');
|
|
1278
|
+
${c.sequences ? ' syncSeqBar(id);\n' : ''} fit('smart');
|
|
1098
1279
|
runSearch(false);
|
|
1099
1280
|
}
|
|
1100
1281
|
|
|
@@ -1474,7 +1655,7 @@ ${c.views ? VIEW_FUNCS : ''}${c.docs ? DOC_FUNCS : ''} stage.addEventListener('
|
|
|
1474
1655
|
function drawPair(memberIds, title) {
|
|
1475
1656
|
closeDrawer(false);
|
|
1476
1657
|
sections.forEach(function (s) { s.hidden = true; });
|
|
1477
|
-
clearFocus();
|
|
1658
|
+
${c.sequences ? ' seqLeave();\n' : ''} clearFocus();
|
|
1478
1659
|
pair.hidden = false;
|
|
1479
1660
|
pair.textContent = '';
|
|
1480
1661
|
pair._cards = null;
|
|
@@ -1606,7 +1787,7 @@ ${c.views ? VIEW_FUNCS : ''}${c.docs ? DOC_FUNCS : ''} stage.addEventListener('
|
|
|
1606
1787
|
});
|
|
1607
1788
|
var cards = cardMap(src);
|
|
1608
1789
|
src.hidden = true;
|
|
1609
|
-
focusSec.textContent = '';
|
|
1790
|
+
${c.sequences ? ' seqLeave();\n' : ''} focusSec.textContent = '';
|
|
1610
1791
|
focusSec._cards = null;
|
|
1611
1792
|
focusSec._links = null;
|
|
1612
1793
|
focusSec.setAttribute('data-focus-level', levelId);
|
|
@@ -1815,7 +1996,7 @@ ${c.views ? VIEW_POP : ''} // 흐름 단추는 서비스 아래 레벨에서만
|
|
|
1815
1996
|
});
|
|
1816
1997
|
window.addEventListener('resize', function () {
|
|
1817
1998
|
pops.forEach(function (p) { if (!p.pop.hidden) placePop(p.btn, p.pop); });
|
|
1818
|
-
});
|
|
1999
|
+
${c.sequences ? ' seqPlaceSteps();\n' : ''} });
|
|
1819
2000
|
function goToNode(id) {
|
|
1820
2001
|
if (!id) return;
|
|
1821
2002
|
if (active && cardMap(active)[id]) { focusCard(id); return; }
|
|
@@ -1841,7 +2022,7 @@ ${c.views ? VIEW_POP : ''} // 흐름 단추는 서비스 아래 레벨에서만
|
|
|
1841
2022
|
|
|
1842
2023
|
doc.addEventListener('keydown', function (e) {
|
|
1843
2024
|
if (e.key === 'Escape') {
|
|
1844
|
-
if (!productMenu.hidden) { closeProducts(true); return; }
|
|
2025
|
+
${c.sequences ? ' seqStop();\n' : ''} if (!productMenu.hidden) { closeProducts(true); return; }
|
|
1845
2026
|
if (anyPop()) { closePops(true); return; }
|
|
1846
2027
|
if (drawerOpen()) { closeDrawer(true); return; }
|
|
1847
2028
|
releaseFocus();
|
|
@@ -1850,7 +2031,7 @@ ${c.views ? VIEW_POP : ''} // 흐름 단추는 서비스 아래 레벨에서만
|
|
|
1850
2031
|
var t = e.target;
|
|
1851
2032
|
if (t && (t.tagName === 'INPUT' || t.tagName === 'TEXTAREA' || t.isContentEditable)) return;
|
|
1852
2033
|
if (e.metaKey || e.ctrlKey || e.altKey) return;
|
|
1853
|
-
if (e.key === '/') { e.preventDefault(); search.focus(); search.select(); }
|
|
2034
|
+
${c.sequences ? SEQ_KEYS : ''} if (e.key === '/') { e.preventDefault(); search.focus(); search.select(); }
|
|
1854
2035
|
else if (e.key === '+' || e.key === '=') zoomBy(1.25);
|
|
1855
2036
|
else if (e.key === '-' || e.key === '_') zoomBy(0.8);
|
|
1856
2037
|
else if (e.key === '0') fit('full');
|
|
@@ -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":"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;AAmCrE,sHAAsH;AACtH,sEAAsE;AACtE,MAAM,eAAe,GAAG,kEAAkE,CAAC;AAC3F,MAAM,cAAc,GAAG,+CAA+C,CAAC;AACvE,MAAM,UAAU,GAAG,6EAA6E,CAAC;AAEjG,2EAA2E;AAC3E,MAAM,UAAU,GACd,+EAA+E,CAAC;AAClF,MAAM,gBAAgB,GACpB,yFAAyF,CAAC;AAC5F,MAAM,UAAU,GAAG;8FAC2E,CAAC;AAE/F,kFAAkF;AAClF,MAAM,OAAO,GACX,kGAAkG,CAAC;AAErG,wDAAwD;AACxD,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iEA2H+C,OAAO;;;;CAIvE,CAAC;AAEF,6BAA6B;AAC7B,MAAM,UAAU,GAAG;;KAEd,CAAC;AACN,MAAM,QAAQ,GAAG;;KAEZ,CAAC;AACN,yCAAyC;AACzC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,MAAM,cAAc,GAAG,8BAA8B,CAAC;AACtD,MAAM,SAAS,GAAG,CAAC,SAAkB,EAAU,EAAE,CAAC;;;;;;;;;;;;oCAYd,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B1E,CAAC;AACF,MAAM,QAAQ,GAAG;;;CAGhB,CAAC;AAEF,+BAA+B;AAC/B,2EAA2E;AAC3E,qDAAqD;AACrD,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgKjB,CAAC;AACF,MAAM,OAAO,GAAG;;;sBAGM,CAAC;AACvB,0EAA0E;AAC1E,uCAAuC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;CAOvB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AAC9D,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAErD,+CAA+C;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG;;oCAEG,iBAAiB;;;MAG/C,CAAC;AAEP;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAkB;IACnD,OAAO;;;;;qBAKY,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;qBAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC5B,SAAS;sBACP,WAAW,mBAAmB,WAAW,oBAAoB,YAAY,uBAAuB,eAAe;yBAC5G,cAAc;;;oBAGnB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;qBACzB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;wBACxB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;qBACjC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;qBAC5B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;2BACrB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;yBAClC,cAAc;gBACvB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;wBACvB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;wBAC9B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;2BAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;2BAChC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;;;;;;;;mBAQxC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;;qBAEvE,iBAAiB;oBAClB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8DlC,YAAY;;;yCAG2B,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CAkTlC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA4CjD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkEnD,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;eAW5B,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,2CAA2C,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiN3G,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;MAU5F,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;MAqBzB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmH3B,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEAoI2B,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qFA8HpB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;+FAkBtB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwG7H,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoItC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kFA0D0C,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wDAiDhE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2D3E,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;;;;;2CAMkB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCxE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;EA0B3C,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;EASvC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyG5B,CAAC;AACF,CAAC"}
|
|
@@ -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;AA6BnG,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAgCrB,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;AA+ED,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;AA06CD;;;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"}
|