@tienne/gestalt 0.88.0 → 0.89.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.
Files changed (197) hide show
  1. package/CLAUDE.md +6 -2
  2. package/README.ko.md +2 -1
  3. package/README.md +3 -1
  4. package/dist/package.json +2 -1
  5. package/dist/plugin/skills/_shared/proactive-routing.md +1 -0
  6. package/dist/plugin/skills/architecture/SKILL.md +913 -0
  7. package/dist/schemas/architecture-ir.schema.json +596 -0
  8. package/dist/src/architecture/canvas-geometry.d.ts +40 -0
  9. package/dist/src/architecture/canvas-geometry.d.ts.map +1 -0
  10. package/dist/src/architecture/canvas-geometry.js +212 -0
  11. package/dist/src/architecture/canvas-geometry.js.map +1 -0
  12. package/dist/src/architecture/codeowners.d.ts +16 -0
  13. package/dist/src/architecture/codeowners.d.ts.map +1 -0
  14. package/dist/src/architecture/codeowners.js +58 -0
  15. package/dist/src/architecture/codeowners.js.map +1 -0
  16. package/dist/src/architecture/compare-layout.d.ts +27 -0
  17. package/dist/src/architecture/compare-layout.d.ts.map +1 -0
  18. package/dist/src/architecture/compare-layout.js +72 -0
  19. package/dist/src/architecture/compare-layout.js.map +1 -0
  20. package/dist/src/architecture/dataflow-layout.d.ts +29 -0
  21. package/dist/src/architecture/dataflow-layout.d.ts.map +1 -0
  22. package/dist/src/architecture/dataflow-layout.js +229 -0
  23. package/dist/src/architecture/dataflow-layout.js.map +1 -0
  24. package/dist/src/architecture/doc-fresh.d.ts +31 -0
  25. package/dist/src/architecture/doc-fresh.d.ts.map +1 -0
  26. package/dist/src/architecture/doc-fresh.js +84 -0
  27. package/dist/src/architecture/doc-fresh.js.map +1 -0
  28. package/dist/src/architecture/doc-link.d.ts +84 -0
  29. package/dist/src/architecture/doc-link.d.ts.map +1 -0
  30. package/dist/src/architecture/doc-link.js +396 -0
  31. package/dist/src/architecture/doc-link.js.map +1 -0
  32. package/dist/src/architecture/doc-routes.d.ts +39 -0
  33. package/dist/src/architecture/doc-routes.d.ts.map +1 -0
  34. package/dist/src/architecture/doc-routes.js +123 -0
  35. package/dist/src/architecture/doc-routes.js.map +1 -0
  36. package/dist/src/architecture/doc-scan.d.ts +107 -0
  37. package/dist/src/architecture/doc-scan.d.ts.map +1 -0
  38. package/dist/src/architecture/doc-scan.js +617 -0
  39. package/dist/src/architecture/doc-scan.js.map +1 -0
  40. package/dist/src/architecture/doc-stale.d.ts +32 -0
  41. package/dist/src/architecture/doc-stale.d.ts.map +1 -0
  42. package/dist/src/architecture/doc-stale.js +60 -0
  43. package/dist/src/architecture/doc-stale.js.map +1 -0
  44. package/dist/src/architecture/drilldown.d.ts +51 -0
  45. package/dist/src/architecture/drilldown.d.ts.map +1 -0
  46. package/dist/src/architecture/drilldown.js +1160 -0
  47. package/dist/src/architecture/drilldown.js.map +1 -0
  48. package/dist/src/architecture/endpoint-match.d.ts +43 -0
  49. package/dist/src/architecture/endpoint-match.d.ts.map +1 -0
  50. package/dist/src/architecture/endpoint-match.js +133 -0
  51. package/dist/src/architecture/endpoint-match.js.map +1 -0
  52. package/dist/src/architecture/flow-layout.d.ts +79 -0
  53. package/dist/src/architecture/flow-layout.d.ts.map +1 -0
  54. package/dist/src/architecture/flow-layout.js +519 -0
  55. package/dist/src/architecture/flow-layout.js.map +1 -0
  56. package/dist/src/architecture/focus.d.ts +14 -0
  57. package/dist/src/architecture/focus.d.ts.map +1 -0
  58. package/dist/src/architecture/focus.js +107 -0
  59. package/dist/src/architecture/focus.js.map +1 -0
  60. package/dist/src/architecture/global-context.d.ts +23 -0
  61. package/dist/src/architecture/global-context.d.ts.map +1 -0
  62. package/dist/src/architecture/global-context.js +67 -0
  63. package/dist/src/architecture/global-context.js.map +1 -0
  64. package/dist/src/architecture/html-client.d.ts +35 -0
  65. package/dist/src/architecture/html-client.d.ts.map +1 -0
  66. package/dist/src/architecture/html-client.js +1852 -0
  67. package/dist/src/architecture/html-client.js.map +1 -0
  68. package/dist/src/architecture/html-renderer.d.ts +22 -0
  69. package/dist/src/architecture/html-renderer.d.ts.map +1 -0
  70. package/dist/src/architecture/html-renderer.js +1290 -0
  71. package/dist/src/architecture/html-renderer.js.map +1 -0
  72. package/dist/src/architecture/html-theme.d.ts +25 -0
  73. package/dist/src/architecture/html-theme.d.ts.map +1 -0
  74. package/dist/src/architecture/html-theme.js +681 -0
  75. package/dist/src/architecture/html-theme.js.map +1 -0
  76. package/dist/src/architecture/index.d.ts +9 -0
  77. package/dist/src/architecture/index.d.ts.map +1 -0
  78. package/dist/src/architecture/index.js +9 -0
  79. package/dist/src/architecture/index.js.map +1 -0
  80. package/dist/src/architecture/ir-schema.d.ts +1832 -0
  81. package/dist/src/architecture/ir-schema.d.ts.map +1 -0
  82. package/dist/src/architecture/ir-schema.js +343 -0
  83. package/dist/src/architecture/ir-schema.js.map +1 -0
  84. package/dist/src/architecture/kind-text.d.ts +21 -0
  85. package/dist/src/architecture/kind-text.d.ts.map +1 -0
  86. package/dist/src/architecture/kind-text.js +42 -0
  87. package/dist/src/architecture/kind-text.js.map +1 -0
  88. package/dist/src/architecture/layout.d.ts +227 -0
  89. package/dist/src/architecture/layout.d.ts.map +1 -0
  90. package/dist/src/architecture/layout.js +627 -0
  91. package/dist/src/architecture/layout.js.map +1 -0
  92. package/dist/src/architecture/mcp-tool-match.d.ts +49 -0
  93. package/dist/src/architecture/mcp-tool-match.d.ts.map +1 -0
  94. package/dist/src/architecture/mcp-tool-match.js +53 -0
  95. package/dist/src/architecture/mcp-tool-match.js.map +1 -0
  96. package/dist/src/architecture/merge.d.ts +54 -0
  97. package/dist/src/architecture/merge.d.ts.map +1 -0
  98. package/dist/src/architecture/merge.js +681 -0
  99. package/dist/src/architecture/merge.js.map +1 -0
  100. package/dist/src/architecture/micro-app.d.ts +20 -0
  101. package/dist/src/architecture/micro-app.d.ts.map +1 -0
  102. package/dist/src/architecture/micro-app.js +41 -0
  103. package/dist/src/architecture/micro-app.js.map +1 -0
  104. package/dist/src/architecture/name-ref-match.d.ts +43 -0
  105. package/dist/src/architecture/name-ref-match.d.ts.map +1 -0
  106. package/dist/src/architecture/name-ref-match.js +127 -0
  107. package/dist/src/architecture/name-ref-match.js.map +1 -0
  108. package/dist/src/architecture/packs/data.d.ts +109 -0
  109. package/dist/src/architecture/packs/data.d.ts.map +1 -0
  110. package/dist/src/architecture/packs/data.js +64 -0
  111. package/dist/src/architecture/packs/data.js.map +1 -0
  112. package/dist/src/architecture/packs/generic.d.ts +47 -0
  113. package/dist/src/architecture/packs/generic.d.ts.map +1 -0
  114. package/dist/src/architecture/packs/generic.js +35 -0
  115. package/dist/src/architecture/packs/generic.js.map +1 -0
  116. package/dist/src/architecture/packs/harness.d.ts +96 -0
  117. package/dist/src/architecture/packs/harness.d.ts.map +1 -0
  118. package/dist/src/architecture/packs/harness.js +66 -0
  119. package/dist/src/architecture/packs/harness.js.map +1 -0
  120. package/dist/src/architecture/packs/index.d.ts +840 -0
  121. package/dist/src/architecture/packs/index.d.ts.map +1 -0
  122. package/dist/src/architecture/packs/index.js +87 -0
  123. package/dist/src/architecture/packs/index.js.map +1 -0
  124. package/dist/src/architecture/packs/infra.d.ts +91 -0
  125. package/dist/src/architecture/packs/infra.d.ts.map +1 -0
  126. package/dist/src/architecture/packs/infra.js +57 -0
  127. package/dist/src/architecture/packs/infra.js.map +1 -0
  128. package/dist/src/architecture/packs/knowledge.d.ts +72 -0
  129. package/dist/src/architecture/packs/knowledge.d.ts.map +1 -0
  130. package/dist/src/architecture/packs/knowledge.js +58 -0
  131. package/dist/src/architecture/packs/knowledge.js.map +1 -0
  132. package/dist/src/architecture/packs/process.d.ts +87 -0
  133. package/dist/src/architecture/packs/process.d.ts.map +1 -0
  134. package/dist/src/architecture/packs/process.js +52 -0
  135. package/dist/src/architecture/packs/process.js.map +1 -0
  136. package/dist/src/architecture/packs/render-classes.d.ts +11 -0
  137. package/dist/src/architecture/packs/render-classes.d.ts.map +1 -0
  138. package/dist/src/architecture/packs/render-classes.js +92 -0
  139. package/dist/src/architecture/packs/render-classes.js.map +1 -0
  140. package/dist/src/architecture/packs/types.d.ts +66 -0
  141. package/dist/src/architecture/packs/types.d.ts.map +1 -0
  142. package/dist/src/architecture/packs/types.js +18 -0
  143. package/dist/src/architecture/packs/types.js.map +1 -0
  144. package/dist/src/architecture/packs/web-product.d.ts +348 -0
  145. package/dist/src/architecture/packs/web-product.d.ts.map +1 -0
  146. package/dist/src/architecture/packs/web-product.js +226 -0
  147. package/dist/src/architecture/packs/web-product.js.map +1 -0
  148. package/dist/src/architecture/sequence-layout.d.ts +50 -0
  149. package/dist/src/architecture/sequence-layout.d.ts.map +1 -0
  150. package/dist/src/architecture/sequence-layout.js +140 -0
  151. package/dist/src/architecture/sequence-layout.js.map +1 -0
  152. package/dist/src/architecture/service-facts.d.ts +30 -0
  153. package/dist/src/architecture/service-facts.d.ts.map +1 -0
  154. package/dist/src/architecture/service-facts.js +88 -0
  155. package/dist/src/architecture/service-facts.js.map +1 -0
  156. package/dist/src/architecture/store.d.ts +50 -0
  157. package/dist/src/architecture/store.d.ts.map +1 -0
  158. package/dist/src/architecture/store.js +320 -0
  159. package/dist/src/architecture/store.js.map +1 -0
  160. package/dist/src/architecture/types.d.ts +400 -0
  161. package/dist/src/architecture/types.d.ts.map +1 -0
  162. package/dist/src/architecture/types.js +75 -0
  163. package/dist/src/architecture/types.js.map +1 -0
  164. package/dist/src/architecture/validator.d.ts +65 -0
  165. package/dist/src/architecture/validator.d.ts.map +1 -0
  166. package/dist/src/architecture/validator.js +1249 -0
  167. package/dist/src/architecture/validator.js.map +1 -0
  168. package/dist/src/core/errors.d.ts +4 -0
  169. package/dist/src/core/errors.d.ts.map +1 -1
  170. package/dist/src/core/errors.js +8 -0
  171. package/dist/src/core/errors.js.map +1 -1
  172. package/dist/src/mcp/schemas.d.ts +317 -0
  173. package/dist/src/mcp/schemas.d.ts.map +1 -1
  174. package/dist/src/mcp/schemas.js +151 -0
  175. package/dist/src/mcp/schemas.js.map +1 -1
  176. package/dist/src/mcp/server.d.ts.map +1 -1
  177. package/dist/src/mcp/server.js +7 -1
  178. package/dist/src/mcp/server.js.map +1 -1
  179. package/dist/src/mcp/tools/architecture-passthrough.d.ts +9 -0
  180. package/dist/src/mcp/tools/architecture-passthrough.d.ts.map +1 -0
  181. package/dist/src/mcp/tools/architecture-passthrough.js +587 -0
  182. package/dist/src/mcp/tools/architecture-passthrough.js.map +1 -0
  183. package/dist/src/utils/claude-projects.d.ts +19 -0
  184. package/dist/src/utils/claude-projects.d.ts.map +1 -0
  185. package/dist/src/utils/claude-projects.js +157 -0
  186. package/dist/src/utils/claude-projects.js.map +1 -0
  187. package/dist/src/utils/read-only-tools.d.ts +19 -0
  188. package/dist/src/utils/read-only-tools.d.ts.map +1 -0
  189. package/dist/src/utils/read-only-tools.js +132 -0
  190. package/dist/src/utils/read-only-tools.js.map +1 -0
  191. package/package.json +2 -1
  192. package/plugin/.codex-plugin/plugin.json +1 -1
  193. package/plugin/.mcp.json +1 -1
  194. package/plugin/mcp.json +1 -1
  195. package/plugin/skills/_shared/proactive-routing.md +1 -0
  196. package/plugin/skills/architecture/SKILL.md +913 -0
  197. package/schemas/architecture-ir.schema.json +596 -0
@@ -0,0 +1,227 @@
1
+ import type { ArchitectureIr, ArchitectureNode, DisplayKind, EdgeKind, NodeKind, Platform, WebHosting } from './types.js';
2
+ import { type PackLaneId } from './packs/index.js';
3
+ export interface LayoutNode {
4
+ id: string;
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ }
10
+ export interface LayoutPoint {
11
+ x: number;
12
+ y: number;
13
+ }
14
+ export interface LayoutEdge {
15
+ id: string;
16
+ points: LayoutPoint[];
17
+ }
18
+ /** 레인 한 칸. 같은 레인 노드들의 좌우 끝에 여백을 붙인 범위다. 구간이 있으면 레인 하나가 구간 하나다 */
19
+ export interface LayoutLane {
20
+ /** 종류 레인이면 LaneId, 구간이면 `stage:<순번>` */
21
+ id: string;
22
+ title: string;
23
+ x: number;
24
+ width: number;
25
+ count: number;
26
+ }
27
+ export interface LayoutResult {
28
+ width: number;
29
+ height: number;
30
+ nodes: LayoutNode[];
31
+ edges: LayoutEdge[];
32
+ /** 왼쪽부터 x 순. 노드가 없는 레인은 아예 없다 */
33
+ lanes: LayoutLane[];
34
+ /** elk 배치 뒤 자리를 옮긴 노드. 이 노드에 붙은 elk 경로는 경유점으로 쓰지 않는다 */
35
+ movedNodeIds?: string[];
36
+ /** 제품 띠. 여러 제품을 합친 그림을 띠로 나눠 쌓았을 때만 있다 */
37
+ regions?: LayoutRegions;
38
+ /** 머리 카드와 그 아래 멤버 카드를 두르는 테두리. 마이크로 프론트엔드 서비스를 앱 묶음으로 보일 때만 있다 */
39
+ frames?: LayoutFrame[];
40
+ }
41
+ /** 노드 좌표와 같은 기준의 사각형 */
42
+ export interface LayoutRect {
43
+ x: number;
44
+ y: number;
45
+ width: number;
46
+ height: number;
47
+ }
48
+ export interface LayoutFrame extends LayoutRect {
49
+ /** 머리 카드 id */
50
+ id: string;
51
+ }
52
+ /** 가로 띠 한 줄. y는 띠 머리(구분선과 이름이 들어가는 줄)부터다 */
53
+ export interface LayoutBand {
54
+ /** 0은 같이 쓰는 띠, i+1은 groups[i] 전용 띠 */
55
+ band: number;
56
+ y: number;
57
+ height: number;
58
+ }
59
+ export interface LayoutRegions {
60
+ /** 그룹 순서 그대로다. 제품 색도 이 순서로 정한다 */
61
+ groups: Array<{
62
+ id: string;
63
+ name: string;
64
+ }>;
65
+ /** 위에서부터. 카드가 없는 띠는 없다 */
66
+ bands: LayoutBand[];
67
+ /** 노드 id → 띠 번호. 포커스 화면이 이걸로 다시 쌓는다 */
68
+ bandOf: Record<string, number>;
69
+ /** 둘 이상의 제품이 같이 쓰는 노드 id → 쓰는 제품 번호. 바로 이어진 전용 카드가 많은 제품부터다. 카드 위 제품 브릭이 이 순서로 그린다 */
70
+ productsOf: Record<string, number[]>;
71
+ }
72
+ /**
73
+ * 화면에 세로 띠로 그리는 칸. 레벨마다 같은 kind도 다른 레인에 설 수 있어서 kind와 따로 둔다.
74
+ * unit은 서비스 레벨의 기능 영역 칸, external은 서버를 거쳐서만 닿는 칸이다
75
+ */
76
+ export declare const LANE_IDS: PackLaneId[];
77
+ export type LaneId = PackLaneId;
78
+ /** 평면 그림의 레인. rank가 같은 kind는 같은 레인에 둬야 띠가 겹치지 않는다 */
79
+ export declare const KIND_LANE: Record<NodeKind, LaneId>;
80
+ /** 노드가 기본으로 서는 레인. MCP 도구는 endpoint와 같은 열이지만 레인 이름이 달라야 API로 안 읽힌다 */
81
+ export declare function laneOfNode(node: Pick<ArchitectureNode, 'kind' | 'protocol'>): LaneId;
82
+ export declare const PARTITION_RANK: Record<NodeKind, number>;
83
+ /** 평면 그림에서 레인 순서가 화살표 반대라 오른쪽에서 왼쪽으로 그리는 엣지 */
84
+ export declare const FLAT_BACKWARD_EDGE_KINDS: ReadonlySet<EdgeKind>;
85
+ /** 환경 정렬 순위. 정한 환경이 앞이고 그 밖의 환경, 환경 없음 순이다 */
86
+ export declare function environmentRank(env: string | undefined): number;
87
+ /** 환경 순서로 비교하고 같은 순위면 환경 이름, 그다음 tie로 가른다 */
88
+ export declare function compareEnvironment(a: string | undefined, b: string | undefined, tie?: number): number;
89
+ /** 레이아웃 입력 노드. rank가 작을수록 왼쪽 열에 선다 */
90
+ export interface GraphLayoutNode {
91
+ id: string;
92
+ label: string;
93
+ displayName?: string;
94
+ displayNameInferred?: boolean;
95
+ rank: number;
96
+ lane: LaneId;
97
+ /** 구간 순번. 구간이 있는 그림에서는 rank보다 앞서 열 순서를 정한다 */
98
+ stage?: number;
99
+ kind?: DisplayKind;
100
+ /** 칩에 kind 표 대신 찍을 글자. component의 displayKind다 */
101
+ chip?: string;
102
+ /** 같은 레이어 안에서 위에서부터 설 순서. 준 노드끼리만 지켜진다 */
103
+ order?: number;
104
+ /** 둘째 줄 끝 플랫폼 칩 */
105
+ platforms?: readonly Platform[];
106
+ /** 웹 칩 글자를 정하는 서빙 방식 */
107
+ webHosting?: WebHosting;
108
+ /** 둘째 줄 글자. 없으면 displayName이 있을 때 label이 둘째 줄이다 */
109
+ secondLine?: string;
110
+ /** 이 서비스에 달린 흐름 수. 첫 줄 끝에 흐름 배지가 붙는다 */
111
+ flows?: number;
112
+ }
113
+ export interface GraphLayoutEdge {
114
+ id: string;
115
+ from: string;
116
+ to: string;
117
+ /** 레인 순서가 화살표 반대인 엣지. elk에는 뒤집어 넘겨 왼쪽에서 오른쪽으로 놓이게 한다 */
118
+ backward?: boolean;
119
+ }
120
+ export declare const NODE_HEIGHT_TWO_LINES = 60;
121
+ /** "추정" 배지가 첫 줄에서 차지하는 폭. 앞 여백과 알약 테두리, 한글 두 자 */
122
+ export declare const INFERRED_BADGE_UNITS = 5;
123
+ /** 카드 왼쪽 색 띠와 안쪽 여백. 종류 칩은 이 뒤에서 시작한다 */
124
+ export declare const NODE_TEXT_LEFT = 12;
125
+ /** 글자 뒤 여백. 들어갈 레벨 표시(›)가 오른쪽 아래에 앉을 자리를 포함한다 */
126
+ export declare const NODE_TEXT_RIGHT = 20;
127
+ /** 흐름 배지가 첫 줄에서 차지하는 폭(px) */
128
+ export declare function flowBadgeWidth(count: number | undefined): number;
129
+ /** 플랫폼 칩들이 둘째 줄에서 차지하는 폭(px) */
130
+ export declare function platformChipsWidth(platforms: readonly Platform[] | undefined, webHosting?: WebHosting): number;
131
+ /** 종류 칩이 첫 줄에서 차지하는 폭(px) */
132
+ export declare function chipWidth(kind: DisplayKind | undefined, chip?: string): number;
133
+ export declare const NARROW_CHAR_WIDTH = 8;
134
+ export declare function textUnits(text: string): number;
135
+ export interface MeasureExtras {
136
+ chip?: string;
137
+ platforms?: readonly Platform[];
138
+ webHosting?: WebHosting;
139
+ secondLine?: string;
140
+ flows?: number;
141
+ }
142
+ /**
143
+ * 첫 줄은 종류 칩과 이름, 둘째 줄은 secondLine이 있으면 그것, 없고 표시 이름이 있으면 기술 이름이다.
144
+ * 플랫폼 칩은 둘째 줄 끝에 붙는다. 첫 줄에 두면 칩 몫만큼 이름이 먼저 잘린다.
145
+ * 폭은 두 줄 중 긴 쪽을 따른다
146
+ */
147
+ export declare function measureNode(label: string, displayName?: string, displayNameInferred?: boolean, kind?: DisplayKind, extras?: MeasureExtras): {
148
+ width: number;
149
+ height: number;
150
+ };
151
+ /** 어느 구간에도 안 맞은 노드를 모으는 맨 끝 구간 이름 */
152
+ export declare const UNSTAGED_LABEL = "\uADF8 \uBC16";
153
+ export interface StageAssignment {
154
+ /** 노드 id → 구간 순번 */
155
+ indexOf: Map<string, number>;
156
+ /** 순번 순 구간 이름. 안 맞은 노드가 있으면 끝에 UNSTAGED_LABEL이 붙는다 */
157
+ labels: string[];
158
+ unstaged: number;
159
+ }
160
+ /** 노드마다 구간을 정한다. 이름으로 올린 구간이 먼저다. 그다음은 kinds와 repos가 맞는 첫 구간이다 */
161
+ export declare function assignStages(ir: ArchitectureIr): StageAssignment | undefined;
162
+ export declare function computeLayout(ir: ArchitectureIr, drawableNodeIds: ReadonlySet<string>, drawableEdgeIds: ReadonlySet<string>): Promise<LayoutResult>;
163
+ /**
164
+ * IR과 무관한 노드와 엣지 목록으로 elkjs 좌표를 낸다. 드릴다운 레벨의 묶음 엣지처럼 IR에 없는 엣지도 받는다.
165
+ * 같은 입력이면 같은 좌표가 나오게 입력과 출력을 id 순으로 정렬한다.
166
+ */
167
+ export declare function computeGraphLayout(nodeList: readonly GraphLayoutNode[], edgeList: readonly GraphLayoutEdge[], stageLabels?: readonly string[]): Promise<LayoutResult>;
168
+ /**
169
+ * 노드 하나를 제 열 맨 위로 올린다. 그 위에 있던 카드는 올린 카드 높이만큼 내려 원래 자리에 들어간다.
170
+ * 자리가 바뀐 카드에 붙은 elk 경로는 버린다. 옛 좌표 기준이라 경유점으로 쓰면 엉뚱한 데서 꺾인다
171
+ */
172
+ export declare function pinToColumnTop(layout: LayoutResult, nodeId: string): LayoutResult;
173
+ /** 열을 나눠 세운 나무. 열(x)은 elk가 정한 그대로 두고 위아래 자리만 나무 순서로 다시 잡는다 */
174
+ export interface TreeStack {
175
+ root: string;
176
+ /** 노드 id → 자식 id. 이 순서대로 위에서부터 쌓는다 */
177
+ children: ReadonlyMap<string, readonly string[]>;
178
+ }
179
+ /**
180
+ * 나무를 위에서부터 깊이 우선으로 쌓는다. 잎은 차례로 한 칸씩 내려가고 부모는 첫 자식과 같은 높이에 선다.
181
+ * 형제 하위 나무끼리 세로 구간이 안 겹쳐서 어느 화면이 어느 앱 것인지 블록으로 읽힌다. elk는 교차만 줄여서 앱끼리 섞어 놓는다
182
+ */
183
+ export declare function stackTree(layout: LayoutResult, tree: TreeStack): LayoutResult;
184
+ /**
185
+ * ids로만 이뤄진 열을 통째로 올리거나 내려 그 열 맨 위 카드가 기준 카드와 같은 높이에 서게 한다.
186
+ * 맨 위로 올린 소유자 카드와 그 서빙 사슬이 한 줄로 읽혀야 하는데, elk는 사슬을 소유자의 원래 자리 옆에 두기 때문이다
187
+ */
188
+ export declare function alignColumnsTo(layout: LayoutResult, anchorId: string, nodeIds: readonly string[]): LayoutResult;
189
+ /**
190
+ * 노드를 제 열 맨 아래로 내려 받은 순서대로 쌓는다. 그 열의 나머지 카드는 elk가 정한 위아래 순서대로 위에서부터 다시 잇는다.
191
+ * 기능 영역과 같은 열에 서는 앱 카드가 기능 영역 사이에 끼면 어느 카드가 한 단계 아래 앱인지 안 읽혀서 쓴다
192
+ */
193
+ export declare function sinkToColumnBottom(layout: LayoutResult, nodeIds: readonly string[]): LayoutResult;
194
+ /** 테두리로 묶을 카드. 머리 카드 바로 아래에 멤버를 순서대로 잇는다 */
195
+ export interface FrameGroup {
196
+ head: string;
197
+ members: readonly string[];
198
+ }
199
+ export declare const FRAME_PAD = 8;
200
+ /**
201
+ * 멤버 카드를 머리 카드 열로 옮겨 머리 바로 아래에 잇는다. 그 열의 나머지 카드는 elk가 정한 위아래 순서를 지키며 아래로 민다.
202
+ * 멤버가 다른 열에 있었으면 그 열은 빈자리를 그대로 둔다. 다른 카드 자리를 건드리면 elk 경로가 더 많이 틀어진다
203
+ */
204
+ export declare function stackFrames(layout: LayoutResult, frames: readonly FrameGroup[]): LayoutResult;
205
+ /** 쌓기가 다 끝난 좌표에서 테두리를 낸다. 띠로 다시 쌓으면 카드가 움직이므로 맨 마지막에 부른다 */
206
+ export declare function frameRects(layout: LayoutResult, frames: readonly FrameGroup[]): LayoutResult;
207
+ /** 띠로 나눌 제품 하나. members는 그 제품 분석에서 온 노드 id다 */
208
+ export interface BandGroup {
209
+ id: string;
210
+ name: string;
211
+ members: ReadonlySet<string>;
212
+ }
213
+ export declare function bandGroupsOf(ir: ArchitectureIr): BandGroup[];
214
+ export declare const BAND_HEAD = 40;
215
+ export declare const BAND_TAIL = 14;
216
+ /**
217
+ * 여러 제품을 합친 그림을 가로 띠로 다시 쌓는다. 맨 위가 둘 이상의 제품이 같이 쓰는 띠이고 그 아래로 그룹 순서대로 제품마다 전용 띠가 이어진다.
218
+ * 어느 그룹에도 없는 노드는 같이 쓰는 띠에 둔다. 한 제품 몫이라고 말할 근거가 없어서다.
219
+ * 열(x)은 elk가 정한 그대로 둔다. 같이 쓰는 띠 안에서는 쓰는 제품이 많은 카드가 위로 가고 그 밖에는 elk의 위아래 순서를 지킨다.
220
+ * 띠 높이는 모든 열에서 같게 맞춰야 구분선 한 줄로 띠가 갈린다. 카드가 있는 띠가 하나뿐이면 나눠 보일 게 없어 그대로 돌려준다.
221
+ * 같이 쓰는 카드의 제품 순서는 그 카드와 바로 이어진 그 제품 전용 카드가 많은 순이다. 게이트웨이라면 그 제품 API로 가는 선이 많은 쪽이 앞에 온다. 같으면 그룹 순서다
222
+ */
223
+ export declare function stackBands(layout: LayoutResult, groups: readonly BandGroup[], links?: ReadonlyArray<{
224
+ from: string;
225
+ to: string;
226
+ }>): LayoutResult;
227
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/architecture/layout.ts"],"names":[],"mappings":"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"}