@transitrix/diagrams 1.0.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 (541) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/__tests__/edge-path.test.d.ts +1 -0
  4. package/dist/__tests__/edge-path.test.js +39 -0
  5. package/dist/__tests__/scope.test.d.ts +1 -0
  6. package/dist/__tests__/scope.test.js +23 -0
  7. package/dist/__tests__/yaml-normalize.test.d.ts +1 -0
  8. package/dist/__tests__/yaml-normalize.test.js +148 -0
  9. package/dist/activities/__tests__/cpm.test.d.ts +1 -0
  10. package/dist/activities/__tests__/cpm.test.js +146 -0
  11. package/dist/activities/__tests__/gantt.test.d.ts +1 -0
  12. package/dist/activities/__tests__/gantt.test.js +224 -0
  13. package/dist/activities/__tests__/layout.test.d.ts +1 -0
  14. package/dist/activities/__tests__/layout.test.js +98 -0
  15. package/dist/activities/__tests__/validate.test.d.ts +1 -0
  16. package/dist/activities/__tests__/validate.test.js +363 -0
  17. package/dist/activities/cpm.d.ts +2 -0
  18. package/dist/activities/cpm.js +86 -0
  19. package/dist/activities/gantt.d.ts +6 -0
  20. package/dist/activities/gantt.js +250 -0
  21. package/dist/activities/index.d.ts +5 -0
  22. package/dist/activities/index.js +4 -0
  23. package/dist/activities/layout.d.ts +2 -0
  24. package/dist/activities/layout.js +103 -0
  25. package/dist/activities/types.d.ts +125 -0
  26. package/dist/activities/types.js +1 -0
  27. package/dist/activities/validate.d.ts +2 -0
  28. package/dist/activities/validate.js +326 -0
  29. package/dist/activity-card/__tests__/example.test.d.ts +1 -0
  30. package/dist/activity-card/__tests__/example.test.js +56 -0
  31. package/dist/activity-card/__tests__/layout.test.d.ts +1 -0
  32. package/dist/activity-card/__tests__/layout.test.js +57 -0
  33. package/dist/activity-card/__tests__/resolver.test.d.ts +1 -0
  34. package/dist/activity-card/__tests__/resolver.test.js +146 -0
  35. package/dist/activity-card/__tests__/validate.test.d.ts +1 -0
  36. package/dist/activity-card/__tests__/validate.test.js +116 -0
  37. package/dist/activity-card/index.d.ts +5 -0
  38. package/dist/activity-card/index.js +3 -0
  39. package/dist/activity-card/layout.d.ts +7 -0
  40. package/dist/activity-card/layout.js +167 -0
  41. package/dist/activity-card/resolver.d.ts +7 -0
  42. package/dist/activity-card/resolver.js +310 -0
  43. package/dist/activity-card/types.d.ts +175 -0
  44. package/dist/activity-card/types.js +20 -0
  45. package/dist/activity-card/validate.d.ts +3 -0
  46. package/dist/activity-card/validate.js +145 -0
  47. package/dist/actor/__tests__/validate.test.d.ts +1 -0
  48. package/dist/actor/__tests__/validate.test.js +57 -0
  49. package/dist/actor/index.d.ts +3 -0
  50. package/dist/actor/index.js +2 -0
  51. package/dist/actor/types.d.ts +20 -0
  52. package/dist/actor/types.js +4 -0
  53. package/dist/actor/validate.d.ts +2 -0
  54. package/dist/actor/validate.js +34 -0
  55. package/dist/applications/__tests__/validate.test.d.ts +1 -0
  56. package/dist/applications/__tests__/validate.test.js +223 -0
  57. package/dist/applications/index.d.ts +2 -0
  58. package/dist/applications/index.js +1 -0
  59. package/dist/applications/types.d.ts +39 -0
  60. package/dist/applications/types.js +1 -0
  61. package/dist/applications/validate.d.ts +3 -0
  62. package/dist/applications/validate.js +109 -0
  63. package/dist/assertion/__tests__/example.test.d.ts +1 -0
  64. package/dist/assertion/__tests__/example.test.js +32 -0
  65. package/dist/assertion/__tests__/validate.test.d.ts +1 -0
  66. package/dist/assertion/__tests__/validate.test.js +130 -0
  67. package/dist/assertion/index.d.ts +4 -0
  68. package/dist/assertion/index.js +2 -0
  69. package/dist/assertion/types.d.ts +43 -0
  70. package/dist/assertion/types.js +7 -0
  71. package/dist/assertion/validate.d.ts +9 -0
  72. package/dist/assertion/validate.js +137 -0
  73. package/dist/blocks/__tests__/layout.test.d.ts +1 -0
  74. package/dist/blocks/__tests__/layout.test.js +153 -0
  75. package/dist/blocks/__tests__/validate.test.d.ts +1 -0
  76. package/dist/blocks/__tests__/validate.test.js +235 -0
  77. package/dist/blocks/index.d.ts +4 -0
  78. package/dist/blocks/index.js +2 -0
  79. package/dist/blocks/layout.d.ts +4 -0
  80. package/dist/blocks/layout.js +145 -0
  81. package/dist/blocks/types.d.ts +56 -0
  82. package/dist/blocks/types.js +1 -0
  83. package/dist/blocks/validate.d.ts +9 -0
  84. package/dist/blocks/validate.js +186 -0
  85. package/dist/capability-map/__tests__/validate.test.d.ts +1 -0
  86. package/dist/capability-map/__tests__/validate.test.js +212 -0
  87. package/dist/capability-map/index.d.ts +2 -0
  88. package/dist/capability-map/index.js +1 -0
  89. package/dist/capability-map/types.d.ts +26 -0
  90. package/dist/capability-map/types.js +1 -0
  91. package/dist/capability-map/validate.d.ts +3 -0
  92. package/dist/capability-map/validate.js +103 -0
  93. package/dist/change/__tests__/validate.test.d.ts +1 -0
  94. package/dist/change/__tests__/validate.test.js +73 -0
  95. package/dist/change/index.d.ts +2 -0
  96. package/dist/change/index.js +1 -0
  97. package/dist/change/types.d.ts +17 -0
  98. package/dist/change/types.js +3 -0
  99. package/dist/change/validate.d.ts +2 -0
  100. package/dist/change/validate.js +57 -0
  101. package/dist/compliance/__tests__/classify.test.d.ts +1 -0
  102. package/dist/compliance/__tests__/classify.test.js +24 -0
  103. package/dist/compliance/__tests__/confidence.test.d.ts +1 -0
  104. package/dist/compliance/__tests__/confidence.test.js +78 -0
  105. package/dist/compliance/__tests__/coverage-metric.test.d.ts +1 -0
  106. package/dist/compliance/__tests__/coverage-metric.test.js +164 -0
  107. package/dist/compliance/__tests__/demo-scenario.test.d.ts +1 -0
  108. package/dist/compliance/__tests__/demo-scenario.test.js +226 -0
  109. package/dist/compliance/__tests__/example.test.d.ts +1 -0
  110. package/dist/compliance/__tests__/example.test.js +51 -0
  111. package/dist/compliance/__tests__/gap-report.test.d.ts +1 -0
  112. package/dist/compliance/__tests__/gap-report.test.js +113 -0
  113. package/dist/compliance/__tests__/html.test.d.ts +1 -0
  114. package/dist/compliance/__tests__/html.test.js +122 -0
  115. package/dist/compliance/__tests__/impact.test.d.ts +1 -0
  116. package/dist/compliance/__tests__/impact.test.js +410 -0
  117. package/dist/compliance/__tests__/markdown.test.d.ts +1 -0
  118. package/dist/compliance/__tests__/markdown.test.js +85 -0
  119. package/dist/compliance/__tests__/views.test.d.ts +1 -0
  120. package/dist/compliance/__tests__/views.test.js +59 -0
  121. package/dist/compliance/classify.d.ts +27 -0
  122. package/dist/compliance/classify.js +60 -0
  123. package/dist/compliance/confidence.d.ts +27 -0
  124. package/dist/compliance/confidence.js +43 -0
  125. package/dist/compliance/coverage-metric.d.ts +74 -0
  126. package/dist/compliance/coverage-metric.js +181 -0
  127. package/dist/compliance/gap-report.d.ts +20 -0
  128. package/dist/compliance/gap-report.js +64 -0
  129. package/dist/compliance/html.d.ts +22 -0
  130. package/dist/compliance/html.js +256 -0
  131. package/dist/compliance/impact.d.ts +251 -0
  132. package/dist/compliance/impact.js +464 -0
  133. package/dist/compliance/index.d.ts +16 -0
  134. package/dist/compliance/index.js +9 -0
  135. package/dist/compliance/markdown.d.ts +18 -0
  136. package/dist/compliance/markdown.js +129 -0
  137. package/dist/compliance/reverse-index.d.ts +8 -0
  138. package/dist/compliance/reverse-index.js +30 -0
  139. package/dist/compliance/types.d.ts +98 -0
  140. package/dist/compliance/types.js +5 -0
  141. package/dist/compliance/views.d.ts +14 -0
  142. package/dist/compliance/views.js +35 -0
  143. package/dist/compliance-matrix/__tests__/build.test.d.ts +1 -0
  144. package/dist/compliance-matrix/__tests__/build.test.js +183 -0
  145. package/dist/compliance-matrix/__tests__/example.test.d.ts +1 -0
  146. package/dist/compliance-matrix/__tests__/example.test.js +49 -0
  147. package/dist/compliance-matrix/build.d.ts +18 -0
  148. package/dist/compliance-matrix/build.js +0 -0
  149. package/dist/compliance-matrix/index.d.ts +2 -0
  150. package/dist/compliance-matrix/index.js +1 -0
  151. package/dist/compliance-matrix/types.d.ts +86 -0
  152. package/dist/compliance-matrix/types.js +8 -0
  153. package/dist/confidence/__tests__/score.test.d.ts +1 -0
  154. package/dist/confidence/__tests__/score.test.js +188 -0
  155. package/dist/confidence/index.d.ts +2 -0
  156. package/dist/confidence/index.js +1 -0
  157. package/dist/confidence/score.d.ts +62 -0
  158. package/dist/confidence/score.js +215 -0
  159. package/dist/confidence/types.d.ts +79 -0
  160. package/dist/confidence/types.js +6 -0
  161. package/dist/edge-path.d.ts +18 -0
  162. package/dist/edge-path.js +35 -0
  163. package/dist/element-envelope.d.ts +15 -0
  164. package/dist/element-envelope.js +55 -0
  165. package/dist/factor/__tests__/validate.test.d.ts +1 -0
  166. package/dist/factor/__tests__/validate.test.js +83 -0
  167. package/dist/factor/index.d.ts +3 -0
  168. package/dist/factor/index.js +2 -0
  169. package/dist/factor/types.d.ts +23 -0
  170. package/dist/factor/types.js +6 -0
  171. package/dist/factor/validate.d.ts +2 -0
  172. package/dist/factor/validate.js +69 -0
  173. package/dist/fgca/__tests__/chain-table.test.d.ts +1 -0
  174. package/dist/fgca/__tests__/chain-table.test.js +158 -0
  175. package/dist/fgca/__tests__/layout.test.d.ts +1 -0
  176. package/dist/fgca/__tests__/layout.test.js +140 -0
  177. package/dist/fgca/__tests__/parse-canonical.test.d.ts +1 -0
  178. package/dist/fgca/__tests__/parse-canonical.test.js +224 -0
  179. package/dist/fgca/__tests__/preview-layout.test.d.ts +1 -0
  180. package/dist/fgca/__tests__/preview-layout.test.js +106 -0
  181. package/dist/fgca/__tests__/validate.test.d.ts +1 -0
  182. package/dist/fgca/__tests__/validate.test.js +125 -0
  183. package/dist/fgca/chain-table.d.ts +36 -0
  184. package/dist/fgca/chain-table.js +177 -0
  185. package/dist/fgca/index.d.ts +16 -0
  186. package/dist/fgca/index.js +11 -0
  187. package/dist/fgca/layout.d.ts +27 -0
  188. package/dist/fgca/layout.js +156 -0
  189. package/dist/fgca/nodeTypes.d.ts +6 -0
  190. package/dist/fgca/nodeTypes.js +10 -0
  191. package/dist/fgca/nodes/FGCAActivityNode.d.ts +13 -0
  192. package/dist/fgca/nodes/FGCAActivityNode.js +35 -0
  193. package/dist/fgca/nodes/FGCAChangeNode.d.ts +12 -0
  194. package/dist/fgca/nodes/FGCAChangeNode.js +35 -0
  195. package/dist/fgca/nodes/FGCAFactorNode.d.ts +12 -0
  196. package/dist/fgca/nodes/FGCAFactorNode.js +35 -0
  197. package/dist/fgca/nodes/FGCAGoalNode.d.ts +14 -0
  198. package/dist/fgca/nodes/FGCAGoalNode.js +40 -0
  199. package/dist/fgca/parse-canonical.d.ts +58 -0
  200. package/dist/fgca/parse-canonical.js +339 -0
  201. package/dist/fgca/preview-layout.d.ts +87 -0
  202. package/dist/fgca/preview-layout.js +122 -0
  203. package/dist/fgca/types.d.ts +39 -0
  204. package/dist/fgca/types.js +7 -0
  205. package/dist/fgca/validate.d.ts +14 -0
  206. package/dist/fgca/validate.js +108 -0
  207. package/dist/geometry.d.ts +7 -0
  208. package/dist/geometry.js +2 -0
  209. package/dist/goals/__tests__/layout.test.d.ts +1 -0
  210. package/dist/goals/__tests__/layout.test.js +153 -0
  211. package/dist/goals/__tests__/mutations.test.d.ts +1 -0
  212. package/dist/goals/__tests__/mutations.test.js +95 -0
  213. package/dist/goals/__tests__/parse-canonical.test.d.ts +1 -0
  214. package/dist/goals/__tests__/parse-canonical.test.js +129 -0
  215. package/dist/goals/__tests__/validate.test.d.ts +1 -0
  216. package/dist/goals/__tests__/validate.test.js +183 -0
  217. package/dist/goals/index.d.ts +6 -0
  218. package/dist/goals/index.js +4 -0
  219. package/dist/goals/layout.d.ts +11 -0
  220. package/dist/goals/layout.js +147 -0
  221. package/dist/goals/mutations.d.ts +6 -0
  222. package/dist/goals/mutations.js +116 -0
  223. package/dist/goals/parse-canonical.d.ts +29 -0
  224. package/dist/goals/parse-canonical.js +257 -0
  225. package/dist/goals/types.d.ts +71 -0
  226. package/dist/goals/types.js +1 -0
  227. package/dist/goals/validate.d.ts +2 -0
  228. package/dist/goals/validate.js +122 -0
  229. package/dist/index.d.ts +23 -0
  230. package/dist/index.js +23 -0
  231. package/dist/issues/__tests__/layout.test.d.ts +1 -0
  232. package/dist/issues/__tests__/layout.test.js +62 -0
  233. package/dist/issues/__tests__/validate.test.d.ts +1 -0
  234. package/dist/issues/__tests__/validate.test.js +82 -0
  235. package/dist/issues/index.d.ts +4 -0
  236. package/dist/issues/index.js +2 -0
  237. package/dist/issues/layout.d.ts +10 -0
  238. package/dist/issues/layout.js +82 -0
  239. package/dist/issues/types.d.ts +61 -0
  240. package/dist/issues/types.js +6 -0
  241. package/dist/issues/validate.d.ts +3 -0
  242. package/dist/issues/validate.js +143 -0
  243. package/dist/process-blueprint/__tests__/compliance-lane.test.d.ts +1 -0
  244. package/dist/process-blueprint/__tests__/compliance-lane.test.js +272 -0
  245. package/dist/process-blueprint/__tests__/layout.test.d.ts +1 -0
  246. package/dist/process-blueprint/__tests__/layout.test.js +159 -0
  247. package/dist/process-blueprint/__tests__/validate.test.d.ts +1 -0
  248. package/dist/process-blueprint/__tests__/validate.test.js +280 -0
  249. package/dist/process-blueprint/index.d.ts +4 -0
  250. package/dist/process-blueprint/index.js +2 -0
  251. package/dist/process-blueprint/layout.d.ts +2 -0
  252. package/dist/process-blueprint/layout.js +416 -0
  253. package/dist/process-blueprint/types.d.ts +220 -0
  254. package/dist/process-blueprint/types.js +1 -0
  255. package/dist/process-blueprint/validate.d.ts +3 -0
  256. package/dist/process-blueprint/validate.js +165 -0
  257. package/dist/process-map/__tests__/validate.test.d.ts +1 -0
  258. package/dist/process-map/__tests__/validate.test.js +199 -0
  259. package/dist/process-map/index.d.ts +2 -0
  260. package/dist/process-map/index.js +1 -0
  261. package/dist/process-map/types.d.ts +32 -0
  262. package/dist/process-map/types.js +1 -0
  263. package/dist/process-map/validate.d.ts +3 -0
  264. package/dist/process-map/validate.js +115 -0
  265. package/dist/products/__tests__/validate.test.d.ts +1 -0
  266. package/dist/products/__tests__/validate.test.js +210 -0
  267. package/dist/products/index.d.ts +2 -0
  268. package/dist/products/index.js +1 -0
  269. package/dist/products/types.d.ts +28 -0
  270. package/dist/products/types.js +1 -0
  271. package/dist/products/validate.d.ts +3 -0
  272. package/dist/products/validate.js +93 -0
  273. package/dist/repo-validate/__tests__/validate-repo.test.d.ts +1 -0
  274. package/dist/repo-validate/__tests__/validate-repo.test.js +132 -0
  275. package/dist/repo-validate/index.d.ts +2 -0
  276. package/dist/repo-validate/index.js +1 -0
  277. package/dist/repo-validate/types.d.ts +34 -0
  278. package/dist/repo-validate/types.js +14 -0
  279. package/dist/repo-validate/validate-repo.d.ts +8 -0
  280. package/dist/repo-validate/validate-repo.js +189 -0
  281. package/dist/requirement/__tests__/example.test.d.ts +1 -0
  282. package/dist/requirement/__tests__/example.test.js +21 -0
  283. package/dist/requirement/__tests__/validate.test.d.ts +1 -0
  284. package/dist/requirement/__tests__/validate.test.js +80 -0
  285. package/dist/requirement/index.d.ts +4 -0
  286. package/dist/requirement/index.js +2 -0
  287. package/dist/requirement/types.d.ts +25 -0
  288. package/dist/requirement/types.js +4 -0
  289. package/dist/requirement/validate.d.ts +7 -0
  290. package/dist/requirement/validate.js +81 -0
  291. package/dist/scenarios/__tests__/validate.test.d.ts +1 -0
  292. package/dist/scenarios/__tests__/validate.test.js +183 -0
  293. package/dist/scenarios/index.d.ts +2 -0
  294. package/dist/scenarios/index.js +1 -0
  295. package/dist/scenarios/types.d.ts +45 -0
  296. package/dist/scenarios/types.js +1 -0
  297. package/dist/scenarios/validate.d.ts +3 -0
  298. package/dist/scenarios/validate.js +110 -0
  299. package/dist/schema-version.d.ts +16 -0
  300. package/dist/schema-version.js +16 -0
  301. package/dist/scope.d.ts +23 -0
  302. package/dist/scope.js +38 -0
  303. package/dist/stakeholder/__tests__/validate.test.d.ts +1 -0
  304. package/dist/stakeholder/__tests__/validate.test.js +86 -0
  305. package/dist/stakeholder/index.d.ts +3 -0
  306. package/dist/stakeholder/index.js +2 -0
  307. package/dist/stakeholder/types.d.ts +24 -0
  308. package/dist/stakeholder/types.js +5 -0
  309. package/dist/stakeholder/validate.d.ts +2 -0
  310. package/dist/stakeholder/validate.js +58 -0
  311. package/dist/target-state/__tests__/validate.test.d.ts +1 -0
  312. package/dist/target-state/__tests__/validate.test.js +62 -0
  313. package/dist/target-state/index.d.ts +2 -0
  314. package/dist/target-state/index.js +1 -0
  315. package/dist/target-state/types.d.ts +18 -0
  316. package/dist/target-state/types.js +7 -0
  317. package/dist/target-state/validate.d.ts +2 -0
  318. package/dist/target-state/validate.js +61 -0
  319. package/dist/theme/index.d.ts +4 -0
  320. package/dist/theme/index.js +2 -0
  321. package/dist/theme/themes.d.ts +16 -0
  322. package/dist/theme/themes.js +213 -0
  323. package/dist/theme/tokens.d.ts +158 -0
  324. package/dist/theme/tokens.js +105 -0
  325. package/dist/typed-id.d.ts +20 -0
  326. package/dist/typed-id.js +38 -0
  327. package/dist/validation-types.d.ts +34 -0
  328. package/dist/validation-types.js +1 -0
  329. package/dist/webview/__tests__/entry-notations.test.d.ts +1 -0
  330. package/dist/webview/__tests__/entry-notations.test.js +62 -0
  331. package/dist/webview/__tests__/entry.test.d.ts +1 -0
  332. package/dist/webview/__tests__/entry.test.js +56 -0
  333. package/dist/webview/__tests__/render-goals.test.d.ts +1 -0
  334. package/dist/webview/__tests__/render-goals.test.js +65 -0
  335. package/dist/webview/entry.d.ts +38 -0
  336. package/dist/webview/entry.js +182 -0
  337. package/dist/webview/render-activities.d.ts +24 -0
  338. package/dist/webview/render-activities.js +127 -0
  339. package/dist/webview/render-activity-card.d.ts +5 -0
  340. package/dist/webview/render-activity-card.js +168 -0
  341. package/dist/webview/render-applications.d.ts +11 -0
  342. package/dist/webview/render-applications.js +105 -0
  343. package/dist/webview/render-blocks.d.ts +5 -0
  344. package/dist/webview/render-blocks.js +71 -0
  345. package/dist/webview/render-capability-map.d.ts +7 -0
  346. package/dist/webview/render-capability-map.js +88 -0
  347. package/dist/webview/render-fgca.d.ts +8 -0
  348. package/dist/webview/render-fgca.js +94 -0
  349. package/dist/webview/render-goals.d.ts +6 -0
  350. package/dist/webview/render-goals.js +92 -0
  351. package/dist/webview/render-process-blueprint.d.ts +5 -0
  352. package/dist/webview/render-process-blueprint.js +135 -0
  353. package/dist/webview/render-process-map.d.ts +7 -0
  354. package/dist/webview/render-process-map.js +82 -0
  355. package/dist/webview/render-products.d.ts +7 -0
  356. package/dist/webview/render-products.js +81 -0
  357. package/dist/webview/render-scenarios.d.ts +7 -0
  358. package/dist/webview/render-scenarios.js +75 -0
  359. package/dist/webview/render-util.d.ts +16 -0
  360. package/dist/webview/render-util.js +31 -0
  361. package/dist/webview/transitrix-render.css +323 -0
  362. package/dist/webview/transitrix-render.js +6452 -0
  363. package/dist/webview/transitrix-render.js.map +7 -0
  364. package/dist/yaml-normalize.d.ts +20 -0
  365. package/dist/yaml-normalize.js +57 -0
  366. package/package.json +40 -0
  367. package/src/__tests__/edge-path.test.ts +46 -0
  368. package/src/__tests__/scope.test.ts +27 -0
  369. package/src/__tests__/yaml-normalize.test.ts +158 -0
  370. package/src/activities/__tests__/cpm.test.ts +164 -0
  371. package/src/activities/__tests__/gantt.test.ts +245 -0
  372. package/src/activities/__tests__/layout.test.ts +112 -0
  373. package/src/activities/__tests__/validate.test.ts +409 -0
  374. package/src/activities/cpm.ts +95 -0
  375. package/src/activities/gantt.ts +276 -0
  376. package/src/activities/index.ts +28 -0
  377. package/src/activities/layout.ts +112 -0
  378. package/src/activities/types.ts +148 -0
  379. package/src/activities/validate.ts +357 -0
  380. package/src/activity-card/__tests__/example.test.ts +66 -0
  381. package/src/activity-card/__tests__/layout.test.ts +63 -0
  382. package/src/activity-card/__tests__/resolver.test.ts +161 -0
  383. package/src/activity-card/__tests__/validate.test.ts +131 -0
  384. package/src/activity-card/index.ts +32 -0
  385. package/src/activity-card/layout.ts +194 -0
  386. package/src/activity-card/resolver.ts +337 -0
  387. package/src/activity-card/types.ts +237 -0
  388. package/src/activity-card/validate.ts +158 -0
  389. package/src/actor/__tests__/validate.test.ts +67 -0
  390. package/src/actor/index.ts +3 -0
  391. package/src/actor/types.ts +29 -0
  392. package/src/actor/validate.ts +38 -0
  393. package/src/applications/__tests__/validate.test.ts +256 -0
  394. package/src/applications/index.ts +11 -0
  395. package/src/applications/types.ts +43 -0
  396. package/src/applications/validate.ts +131 -0
  397. package/src/assertion/__tests__/example.test.ts +37 -0
  398. package/src/assertion/__tests__/validate.test.ts +142 -0
  399. package/src/assertion/index.ts +12 -0
  400. package/src/assertion/types.ts +58 -0
  401. package/src/assertion/validate.ts +145 -0
  402. package/src/blocks/__tests__/layout.test.ts +169 -0
  403. package/src/blocks/__tests__/validate.test.ts +260 -0
  404. package/src/blocks/index.ts +17 -0
  405. package/src/blocks/layout.ts +186 -0
  406. package/src/blocks/types.ts +62 -0
  407. package/src/blocks/validate.ts +206 -0
  408. package/src/capability-map/__tests__/validate.test.ts +238 -0
  409. package/src/capability-map/index.ts +8 -0
  410. package/src/capability-map/types.ts +29 -0
  411. package/src/capability-map/validate.ts +127 -0
  412. package/src/change/__tests__/validate.test.ts +88 -0
  413. package/src/change/index.ts +2 -0
  414. package/src/change/types.ts +23 -0
  415. package/src/change/validate.ts +61 -0
  416. package/src/compliance/__tests__/classify.test.ts +27 -0
  417. package/src/compliance/__tests__/confidence.test.ts +98 -0
  418. package/src/compliance/__tests__/coverage-metric.test.ts +188 -0
  419. package/src/compliance/__tests__/demo-scenario.test.ts +273 -0
  420. package/src/compliance/__tests__/example.test.ts +57 -0
  421. package/src/compliance/__tests__/gap-report.test.ts +129 -0
  422. package/src/compliance/__tests__/html.test.ts +142 -0
  423. package/src/compliance/__tests__/impact.test.ts +482 -0
  424. package/src/compliance/__tests__/markdown.test.ts +95 -0
  425. package/src/compliance/__tests__/views.test.ts +64 -0
  426. package/src/compliance/classify.ts +84 -0
  427. package/src/compliance/confidence.ts +69 -0
  428. package/src/compliance/coverage-metric.ts +263 -0
  429. package/src/compliance/gap-report.ts +94 -0
  430. package/src/compliance/html.ts +295 -0
  431. package/src/compliance/impact.ts +677 -0
  432. package/src/compliance/index.ts +56 -0
  433. package/src/compliance/markdown.ts +135 -0
  434. package/src/compliance/reverse-index.ts +33 -0
  435. package/src/compliance/types.ts +120 -0
  436. package/src/compliance/views.ts +46 -0
  437. package/src/compliance-matrix/__tests__/build.test.ts +200 -0
  438. package/src/compliance-matrix/__tests__/example.test.ts +57 -0
  439. package/src/compliance-matrix/build.ts +0 -0
  440. package/src/compliance-matrix/index.ts +11 -0
  441. package/src/compliance-matrix/types.ts +102 -0
  442. package/src/confidence/__tests__/score.test.ts +254 -0
  443. package/src/confidence/index.ts +21 -0
  444. package/src/confidence/score.ts +243 -0
  445. package/src/confidence/types.ts +96 -0
  446. package/src/edge-path.ts +44 -0
  447. package/src/element-envelope.ts +76 -0
  448. package/src/factor/__tests__/validate.test.ts +98 -0
  449. package/src/factor/index.ts +8 -0
  450. package/src/factor/types.ts +41 -0
  451. package/src/factor/validate.ts +74 -0
  452. package/src/fgca/__tests__/chain-table.test.ts +172 -0
  453. package/src/fgca/__tests__/layout.test.ts +179 -0
  454. package/src/fgca/__tests__/parse-canonical.test.ts +248 -0
  455. package/src/fgca/__tests__/preview-layout.test.ts +124 -0
  456. package/src/fgca/__tests__/validate.test.ts +142 -0
  457. package/src/fgca/chain-table.ts +225 -0
  458. package/src/fgca/index.ts +45 -0
  459. package/src/fgca/layout.ts +204 -0
  460. package/src/fgca/nodeTypes.ts +11 -0
  461. package/src/fgca/nodes/FGCAActivityNode.tsx +65 -0
  462. package/src/fgca/nodes/FGCAChangeNode.tsx +64 -0
  463. package/src/fgca/nodes/FGCAFactorNode.tsx +64 -0
  464. package/src/fgca/nodes/FGCAGoalNode.tsx +72 -0
  465. package/src/fgca/parse-canonical.ts +400 -0
  466. package/src/fgca/preview-layout.ts +217 -0
  467. package/src/fgca/types.ts +50 -0
  468. package/src/fgca/validate.ts +126 -0
  469. package/src/geometry.ts +9 -0
  470. package/src/goals/__tests__/layout.test.ts +175 -0
  471. package/src/goals/__tests__/mutations.test.ts +111 -0
  472. package/src/goals/__tests__/parse-canonical.test.ts +145 -0
  473. package/src/goals/__tests__/validate.test.ts +202 -0
  474. package/src/goals/index.ts +21 -0
  475. package/src/goals/layout.ts +172 -0
  476. package/src/goals/mutations.ts +123 -0
  477. package/src/goals/parse-canonical.ts +286 -0
  478. package/src/goals/types.ts +85 -0
  479. package/src/goals/validate.ts +136 -0
  480. package/src/index.ts +23 -0
  481. package/src/process-blueprint/__tests__/compliance-lane.test.ts +320 -0
  482. package/src/process-blueprint/__tests__/layout.test.ts +195 -0
  483. package/src/process-blueprint/__tests__/validate.test.ts +310 -0
  484. package/src/process-blueprint/index.ts +31 -0
  485. package/src/process-blueprint/layout.ts +531 -0
  486. package/src/process-blueprint/types.ts +242 -0
  487. package/src/process-blueprint/validate.ts +181 -0
  488. package/src/process-map/__tests__/validate.test.ts +223 -0
  489. package/src/process-map/index.ts +10 -0
  490. package/src/process-map/types.ts +36 -0
  491. package/src/process-map/validate.ts +135 -0
  492. package/src/products/__tests__/validate.test.ts +239 -0
  493. package/src/products/index.ts +9 -0
  494. package/src/products/types.ts +31 -0
  495. package/src/products/validate.ts +112 -0
  496. package/src/repo-validate/__tests__/validate-repo.test.ts +149 -0
  497. package/src/repo-validate/index.ts +2 -0
  498. package/src/repo-validate/types.ts +50 -0
  499. package/src/repo-validate/validate-repo.ts +196 -0
  500. package/src/requirement/__tests__/example.test.ts +24 -0
  501. package/src/requirement/__tests__/validate.test.ts +96 -0
  502. package/src/requirement/index.ts +4 -0
  503. package/src/requirement/types.ts +35 -0
  504. package/src/requirement/validate.ts +92 -0
  505. package/src/scenarios/__tests__/validate.test.ts +209 -0
  506. package/src/scenarios/index.ts +15 -0
  507. package/src/scenarios/types.ts +37 -0
  508. package/src/scenarios/validate.ts +122 -0
  509. package/src/schema-version.ts +16 -0
  510. package/src/scope.ts +46 -0
  511. package/src/stakeholder/__tests__/validate.test.ts +101 -0
  512. package/src/stakeholder/index.ts +3 -0
  513. package/src/stakeholder/types.ts +33 -0
  514. package/src/stakeholder/validate.ts +63 -0
  515. package/src/target-state/__tests__/validate.test.ts +74 -0
  516. package/src/target-state/index.ts +2 -0
  517. package/src/target-state/types.ts +28 -0
  518. package/src/target-state/validate.ts +67 -0
  519. package/src/theme/index.ts +4 -0
  520. package/src/theme/themes.ts +237 -0
  521. package/src/theme/tokens.ts +133 -0
  522. package/src/typed-id.ts +56 -0
  523. package/src/validation-types.ts +36 -0
  524. package/src/webview/__tests__/entry-notations.test.ts +77 -0
  525. package/src/webview/__tests__/entry.test.ts +64 -0
  526. package/src/webview/__tests__/render-goals.test.ts +72 -0
  527. package/src/webview/entry.ts +292 -0
  528. package/src/webview/render-activities.ts +156 -0
  529. package/src/webview/render-activity-card.ts +234 -0
  530. package/src/webview/render-applications.ts +123 -0
  531. package/src/webview/render-blocks.ts +91 -0
  532. package/src/webview/render-capability-map.ts +98 -0
  533. package/src/webview/render-fgca.ts +122 -0
  534. package/src/webview/render-goals.ts +110 -0
  535. package/src/webview/render-process-blueprint.ts +207 -0
  536. package/src/webview/render-process-map.ts +93 -0
  537. package/src/webview/render-products.ts +91 -0
  538. package/src/webview/render-scenarios.ts +90 -0
  539. package/src/webview/render-util.ts +34 -0
  540. package/src/webview/styles.css +323 -0
  541. package/src/yaml-normalize.ts +56 -0
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Browser-safe SVG renderer for the canonical Goals notation.
3
+ *
4
+ * Step 3 of the IntelliJ epic (ADR 0001): the webview bundle must turn a
5
+ * validated GoalTree into renderable SVG so JCEF can drop it into the preview
6
+ * panel. The VS Code path lives in `extension/src/goals-preview.ts` and pulls
7
+ * in VS Code-specific concerns (themes, title block, save dialogs); this
8
+ * module is the host-neutral subset — pure layout → SVG with no VS Code APIs,
9
+ * no `node:fs`, no `node:path`.
10
+ *
11
+ * Step 4 will follow the same shape for the remaining ten notations.
12
+ */
13
+ import { layoutGoalTree } from '../goals/layout.js';
14
+ import { horizontalCubicEdgePath, DEFAULT_EDGE_CURVATURE } from '../edge-path.js';
15
+ import { generateSvgEmbedCss } from '../theme/index.js';
16
+ const NODE_W = 250;
17
+ const NODE_H = 60;
18
+ const RANK_SEP = 100;
19
+ const NODE_SEP = 24;
20
+ const PAD = 24;
21
+ const LABEL_MAX = 36;
22
+ const LABEL_TRIM = 34;
23
+ function escXml(s) {
24
+ return s
25
+ .replace(/&/g, '&')
26
+ .replace(/</g, '&lt;')
27
+ .replace(/>/g, '&gt;')
28
+ .replace(/"/g, '&quot;');
29
+ }
30
+ export function renderGoalsSvg(tree, options = {}) {
31
+ const { treeName = '', curvature = DEFAULT_EDGE_CURVATURE } = options;
32
+ const layout = layoutGoalTree(tree, {
33
+ nodeWidth: NODE_W,
34
+ nodeHeight: NODE_H,
35
+ rankSep: RANK_SEP,
36
+ nodeSep: NODE_SEP,
37
+ });
38
+ if (layout.nodes.length === 0) {
39
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" viewBox="0 0 0 0"></svg>`;
40
+ }
41
+ const w = layout.bounds.width + PAD * 2;
42
+ const h = layout.bounds.height + PAD * 2;
43
+ const ox = -layout.bounds.x + PAD;
44
+ const oy = -layout.bounds.y + PAD;
45
+ const nodeMap = new Map(layout.nodes.map((n) => [n.id, n]));
46
+ function edgePath(e) {
47
+ const s = nodeMap.get(e.source);
48
+ const t = nodeMap.get(e.target);
49
+ if (!s || !t)
50
+ return '';
51
+ const sx = s.x + ox + s.width;
52
+ const sy = s.y + oy + s.height / 2;
53
+ const tx = t.x + ox;
54
+ const ty = t.y + oy + t.height / 2;
55
+ return horizontalCubicEdgePath(sx, sy, tx, ty, curvature);
56
+ }
57
+ const edgeSvg = layout.edges
58
+ .map((e) => `<path d="${edgePath(e)}" class="diagram-edge" marker-end="url(#arrow)"/>`)
59
+ .join('\n');
60
+ const nodeSvg = layout.nodes
61
+ .map((n) => {
62
+ const x = n.x + ox;
63
+ const y = n.y + oy;
64
+ const level = n.data.level % 8;
65
+ const labelText = n.data.name ?? String(n.id);
66
+ const label = labelText.length > LABEL_MAX ? labelText.slice(0, LABEL_TRIM) + '…' : labelText;
67
+ return `<g>
68
+ <rect class="diagram-node level-${level}" x="${x}" y="${y}" width="${n.width}" height="${n.height}" rx="8"/>
69
+ <text class="text-primary" x="${x + n.width / 2}" y="${y + n.height / 2}" text-anchor="middle" dominant-baseline="central">${escXml(label)}</text>
70
+ </g>`;
71
+ })
72
+ .join('\n');
73
+ const titleSvg = treeName
74
+ ? `<text class="text-header" x="${PAD}" y="${PAD - 6}">${escXml(`Goal tree — ${treeName}`)}</text>`
75
+ : '';
76
+ // Embed the shared theme CSS inside the SVG so the rendered output is
77
+ // self-contained — the JCEF host page only needs to drop the SVG into the
78
+ // DOM and styling resolves without any cooperation from the host stylesheet.
79
+ // Matches what the VS Code path produces via `prepareSvgForExport`.
80
+ const embedCss = generateSvgEmbedCss('transitrix');
81
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${w}" height="${h}" viewBox="0 0 ${w} ${h}">
82
+ <style>${embedCss}</style>
83
+ <defs>
84
+ <marker id="arrow" markerWidth="8" markerHeight="8" refX="8" refY="3" orient="auto">
85
+ <path d="M0,0 L0,6 L8,3 z" class="arrow-fill"/>
86
+ </marker>
87
+ </defs>
88
+ ${titleSvg}
89
+ ${nodeSvg}
90
+ ${edgeSvg}
91
+ </svg>`;
92
+ }
@@ -0,0 +1,5 @@
1
+ import type { ProcessBlueprintFile } from '../process-blueprint/types.js';
2
+ export interface RenderProcessBlueprintOptions {
3
+ title?: string;
4
+ }
5
+ export declare function renderProcessBlueprintSvg(doc: ProcessBlueprintFile, options?: RenderProcessBlueprintOptions): string;
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Host-neutral SVG renderer for the Process Blueprint notation.
3
+ *
4
+ * Step 4 of the IntelliJ epic (ADR 0001): ported from the pure SVG core of
5
+ * `extension/src/process-blueprint-preview.ts` (`layoutToSvg`). The VS Code
6
+ * title block (`svg-title-block.ts`) is intentionally dropped — JCEF has no
7
+ * VS Code APIs — and replaced with `render-goals.ts`' simple optional
8
+ * `<text class="text-header">` heading. No `vscode`, no `node:*`, no host APIs;
9
+ * the shared theme CSS is embedded inside the `<svg>` so the output is
10
+ * self-contained.
11
+ */
12
+ import { layoutProcessBlueprint } from '../process-blueprint/layout.js';
13
+ import { generateSvgEmbedCss } from '../theme/index.js';
14
+ import { escXml } from './render-util.js';
15
+ const PAD = 24;
16
+ function truncate(text, maxChars) {
17
+ if (text.length <= maxChars)
18
+ return text;
19
+ return text.slice(0, Math.max(0, maxChars - 1)) + '…';
20
+ }
21
+ /**
22
+ * Render a left-anchored, vertically centred multi-line text cell. `lines` are
23
+ * pre-wrapped by the layout; the block is centred within the cell height.
24
+ */
25
+ function textCellSvg(lines, cls, x, cellTop, cellHeight, lineHeight) {
26
+ const ls = lines.length > 0 ? lines : [''];
27
+ const first = cellTop + cellHeight / 2 - ((ls.length - 1) / 2) * lineHeight;
28
+ const tspans = ls
29
+ .map((ln, i) => `<tspan x="${x}" y="${first + i * lineHeight}">${escXml(ln)}</tspan>`)
30
+ .join('');
31
+ return `<text class="${cls}" dominant-baseline="central">${tspans}</text>`;
32
+ }
33
+ /**
34
+ * Render a single compliance law chip.
35
+ *
36
+ * Three orthogonal decorations are expressed as SVG overrides:
37
+ * - `new` — dashed stroke border (`stroke-dasharray="4 2"`)
38
+ * - `gap` — warning-level fill (`class="…compliance-gap"`)
39
+ * - `deadline` — urgent fill override (`class="…compliance-deadline"`) + a small
40
+ * badge circle in the top-right corner
41
+ */
42
+ function complianceChipSvg(chip, ox, oy) {
43
+ const { x, y, width, height, lawId, decorations } = chip;
44
+ const ax = x + ox;
45
+ const ay = y + oy;
46
+ const rx = 6;
47
+ const hasNew = decorations.includes('new');
48
+ const hasGap = decorations.includes('gap');
49
+ const hasDeadline = decorations.includes('deadline');
50
+ let rectClass = 'diagram-node level-5 compliance-chip';
51
+ if (hasDeadline)
52
+ rectClass += ' compliance-deadline';
53
+ else if (hasGap)
54
+ rectClass += ' compliance-gap';
55
+ const strokeDash = hasNew ? ' stroke-dasharray="4 2"' : '';
56
+ const parts = [];
57
+ parts.push(`<rect class="${rectClass}" x="${ax}" y="${ay}" width="${width}" height="${height}" rx="${rx}"${strokeDash}/>`);
58
+ parts.push(`<text class="text-pill" x="${ax + width / 2}" y="${ay + height / 2}" text-anchor="middle" dominant-baseline="central">${escXml(truncate(lawId, Math.floor(width / 8)))}</text>`);
59
+ if (hasDeadline) {
60
+ const br = 5;
61
+ const bx = ax + width - br - 3;
62
+ const by = ay + br + 3;
63
+ parts.push(`<circle class="compliance-badge" cx="${bx}" cy="${by}" r="${br}"/>`);
64
+ parts.push(`<text class="compliance-badge-text" x="${bx}" y="${by}" text-anchor="middle" dominant-baseline="central">!</text>`);
65
+ }
66
+ return parts.join('\n');
67
+ }
68
+ export function renderProcessBlueprintSvg(doc, options = {}) {
69
+ const { title = '' } = options;
70
+ const layout = layoutProcessBlueprint(doc);
71
+ if (layout.bounds.width === 0 || layout.bounds.height === 0) {
72
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0" viewBox="0 0 0 0"></svg>`;
73
+ }
74
+ const titleH = title ? PAD : 0;
75
+ const w = layout.bounds.width + PAD * 2;
76
+ const h = layout.bounds.height + PAD * 2 + titleH;
77
+ const ox = PAD;
78
+ const oy = PAD + titleH;
79
+ const parts = [];
80
+ parts.push(`<rect class="diagram-node level-0" x="${ox}" y="${oy}" width="${layout.bounds.width}" height="${layout.bounds.height}" rx="6"/>`);
81
+ for (const s of layout.stageHeaders) {
82
+ parts.push(`<rect class="diagram-node level-1" x="${s.x + ox}" y="${s.y + oy}" width="${s.width}" height="${s.height}"/>`);
83
+ parts.push(`<text class="text-header" x="${s.x + ox + s.width / 2}" y="${s.y + oy + s.height / 2}" text-anchor="middle" dominant-baseline="central">${escXml(truncate(s.name, 28))}</text>`);
84
+ }
85
+ for (const l of layout.legend) {
86
+ parts.push(`<rect class="diagram-node level-2" x="${ox}" y="${l.y + oy}" width="${layout.legendColumnWidth}" height="${l.height}"/>`);
87
+ parts.push(`<text class="text-primary" x="${ox + 12}" y="${l.y + oy + l.height / 2}" dominant-baseline="central">${escXml(l.label)}</text>`);
88
+ }
89
+ const textX = layout.cellTextPadX;
90
+ for (const c of layout.goalCells) {
91
+ parts.push(`<rect class="diagram-node level-3" x="${c.x + ox}" y="${c.y + oy}" width="${c.width}" height="${c.height}"/>`);
92
+ parts.push(textCellSvg(c.lines, 'text-secondary', c.x + ox + textX, c.y + oy, c.height, layout.textLineHeight));
93
+ }
94
+ for (const c of layout.resultCells) {
95
+ parts.push(`<rect class="diagram-node level-4" x="${c.x + ox}" y="${c.y + oy}" width="${c.width}" height="${c.height}"/>`);
96
+ parts.push(textCellSvg(c.lines, 'text-secondary', c.x + ox + textX, c.y + oy, c.height, layout.textLineHeight));
97
+ }
98
+ for (let r = 0; r < layout.aspectRows.length; r++) {
99
+ const row = layout.aspectRows[r];
100
+ const level = 5 + (r % 3);
101
+ parts.push(`<rect class="diagram-node level-${level}" x="${layout.legendColumnWidth + ox}" y="${row.y + oy}" width="${layout.bounds.width - layout.legendColumnWidth}" height="${row.height}" opacity="0.15"/>`);
102
+ for (let i = 1; i < layout.stageHeaders.length; i++) {
103
+ const x = layout.legendColumnWidth + i * layout.stageColumnWidth + ox;
104
+ parts.push(`<line class="diagram-edge" x1="${x}" y1="${row.y + oy}" x2="${x}" y2="${row.y + row.height + oy}" opacity="0.3"/>`);
105
+ }
106
+ for (const p of row.pills) {
107
+ parts.push(`<rect class="diagram-node level-${level}" x="${p.x + ox}" y="${p.y + oy}" width="${p.width}" height="${p.height}" rx="6"/>`);
108
+ const label = p.id ? `${p.name} · ${p.id}` : p.name;
109
+ parts.push(`<text class="text-pill" x="${p.x + ox + p.width / 2}" y="${p.y + oy + p.height / 2}" text-anchor="middle" dominant-baseline="central">${escXml(truncate(label, Math.floor(p.width / 8)))}</text>`);
110
+ }
111
+ }
112
+ // Compliance row (optional).
113
+ if (layout.complianceRow) {
114
+ const row = layout.complianceRow;
115
+ parts.push(`<rect class="diagram-node level-5" x="${layout.legendColumnWidth + ox}" y="${row.y + oy}" width="${layout.bounds.width - layout.legendColumnWidth}" height="${row.height}" opacity="0.10"/>`);
116
+ for (let i = 1; i < layout.stageHeaders.length; i++) {
117
+ const x = layout.legendColumnWidth + i * layout.stageColumnWidth + ox;
118
+ parts.push(`<line class="diagram-edge" x1="${x}" y1="${row.y + oy}" x2="${x}" y2="${row.y + row.height + oy}" opacity="0.3"/>`);
119
+ }
120
+ for (const chip of row.chips) {
121
+ parts.push(complianceChipSvg(chip, ox, oy));
122
+ }
123
+ }
124
+ const titleSvg = title
125
+ ? `<text class="text-header" x="${PAD}" y="${PAD - 6}">${escXml(title)}</text>`
126
+ : '';
127
+ // Embed the shared theme CSS inside the SVG so the rendered output is
128
+ // self-contained for the JCEF host — matches render-goals.ts.
129
+ const embedCss = generateSvgEmbedCss('transitrix');
130
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${w}" height="${h}" viewBox="0 0 ${w} ${h}">
131
+ <style>${embedCss}</style>
132
+ ${titleSvg}
133
+ ${parts.join('\n')}
134
+ </svg>`;
135
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Host-neutral renderer for the Process Map notation.
3
+ * Mirrors `extension/src/process-map-preview.ts`; emits a self-contained HTML
4
+ * fragment for the JCEF host (Step 4 of ADR 0001).
5
+ */
6
+ import type { ProcessMapHeader } from '../process-map/types.js';
7
+ export declare function renderProcessMapHtml(map: ProcessMapHeader): string;
@@ -0,0 +1,82 @@
1
+ import { escHtml } from './render-util.js';
2
+ const STATUS_BADGE = {
3
+ Active: 'badge-active',
4
+ Draft: 'badge-draft',
5
+ Deprecated: 'badge-deprecated',
6
+ };
7
+ const GROUP_LABEL = {
8
+ operating: 'Operating',
9
+ supporting: 'Supporting',
10
+ management: 'Management',
11
+ };
12
+ function maturityDots(m) {
13
+ if (m === undefined)
14
+ return '<span class="cell-empty">—</span>';
15
+ const filled = '●'.repeat(Math.max(0, Math.min(5, m)));
16
+ const empty = '○'.repeat(5 - Math.max(0, Math.min(5, m)));
17
+ return `<span class="maturity-dots">${filled}${empty}</span>`;
18
+ }
19
+ function renderProcessRow(p) {
20
+ return `<tr>
21
+ <td class="col-name">
22
+ <div class="catalogue-name">${escHtml(p.name)}</div>
23
+ <div class="catalogue-id">${escHtml(p.process_id)}</div>
24
+ ${p.description ? `<div class="catalogue-desc">${escHtml(p.description)}</div>` : ''}
25
+ </td>
26
+ <td class="col-status"><span class="tx-badge ${escHtml(STATUS_BADGE[p.status] ?? '')}">${escHtml(p.status)}</span></td>
27
+ <td class="col-maturity">${maturityDots(p.maturity)}</td>
28
+ <td class="col-owner">${p.owner_role ? escHtml(p.owner_role) : '<span class="cell-empty">—</span>'}</td>
29
+ <td class="col-capability">${p.capability ? `<span class="cap-tag">${escHtml(p.capability)}</span>` : '<span class="cell-empty">—</span>'}</td>
30
+ <td class="col-bpmn">${p.bpmn_file ? `<span class="bpmn-link" title="${escHtml(p.bpmn_file)}">📄 BPMN</span>` : '<span class="cell-empty">—</span>'}</td>
31
+ </tr>`;
32
+ }
33
+ function renderGroup(g) {
34
+ const processes = g.processes ?? [];
35
+ const rows = processes.length === 0
36
+ ? `<tr><td colspan="6" class="empty-group">No processes in this group.</td></tr>`
37
+ : processes.map(renderProcessRow).join('\n');
38
+ const typeKey = String(g.type ?? '');
39
+ return `<section class="group-section group-${escHtml(typeKey)}">
40
+ <header class="group-header">
41
+ <div class="group-meta">
42
+ <span class="group-tag group-tag-${escHtml(typeKey)}">${escHtml(GROUP_LABEL[typeKey] ?? typeKey)}</span>
43
+ <span class="group-id">${escHtml(g.id)}</span>
44
+ </div>
45
+ <h2 class="group-title">${escHtml(g.name)}</h2>
46
+ ${g.description ? `<p class="group-desc">${escHtml(g.description)}</p>` : ''}
47
+ </header>
48
+ <table class="catalogue-table">
49
+ <thead>
50
+ <tr>
51
+ <th>Process</th>
52
+ <th>Status</th>
53
+ <th>Maturity</th>
54
+ <th>Owner</th>
55
+ <th>Capability</th>
56
+ <th>BPMN</th>
57
+ </tr>
58
+ </thead>
59
+ <tbody>
60
+ ${rows}
61
+ </tbody>
62
+ </table>
63
+ </section>`;
64
+ }
65
+ export function renderProcessMapHtml(map) {
66
+ const header = `<header class="catalogue-header">
67
+ <div class="catalogue-title">${escHtml(map.name)}</div>
68
+ <div class="catalogue-meta">
69
+ <span class="catalogue-id-tag">${escHtml(map.id)}</span>
70
+ <span class="catalogue-updated">Updated ${escHtml(map.updated_at)}</span>
71
+ ${map.version ? `<span class="catalogue-version">v${escHtml(map.version)}</span>` : ''}
72
+ </div>
73
+ ${map.description ? `<div class="catalogue-subtitle">${escHtml(map.description)}</div>` : ''}
74
+ </header>`;
75
+ const body = map.groups.length === 0
76
+ ? '<div class="empty-map">No groups defined.</div>'
77
+ : map.groups.map(renderGroup).join('\n');
78
+ return `<section class="tx-catalogue tx-process-map">
79
+ ${header}
80
+ ${body}
81
+ </section>`;
82
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Host-neutral renderer for the Products catalogue notation.
3
+ * Mirrors `extension/src/products-preview.ts`; emits a self-contained HTML
4
+ * fragment for the JCEF host (Step 4 of ADR 0001).
5
+ */
6
+ import type { ProductsCatalogueHeader } from '../products/types.js';
7
+ export declare function renderProductsHtml(catalogue: ProductsCatalogueHeader): string;
@@ -0,0 +1,81 @@
1
+ import { escHtml } from './render-util.js';
2
+ const TYPE_LABEL = {
3
+ digital_product: 'Digital Product',
4
+ service: 'Service',
5
+ platform: 'Platform',
6
+ bundle: 'Bundle',
7
+ };
8
+ const STATUS_BADGE = {
9
+ Active: 'badge-active',
10
+ Draft: 'badge-draft',
11
+ Deprecated: 'badge-deprecated',
12
+ };
13
+ function maturityDots(m) {
14
+ if (m === undefined)
15
+ return '<span class="cell-empty">—</span>';
16
+ const filled = '●'.repeat(Math.max(0, Math.min(5, m)));
17
+ const empty = '○'.repeat(5 - Math.max(0, Math.min(5, m)));
18
+ return `<span class="maturity-dots">${filled}${empty}</span>`;
19
+ }
20
+ function disclosureList(label, items) {
21
+ if (!items || items.length === 0)
22
+ return '';
23
+ const lis = items.map((i) => `<li>${escHtml(i)}</li>`).join('');
24
+ return `<details><summary>${escHtml(label)} (${items.length})</summary><ul>${lis}</ul></details>`;
25
+ }
26
+ function renderRow(p) {
27
+ const extras = [
28
+ disclosureList('Capabilities', p.capabilities),
29
+ disclosureList('Processes', p.processes),
30
+ disclosureList('Apps', p.supporting_apps),
31
+ ]
32
+ .filter(Boolean)
33
+ .join('');
34
+ return `<tr>
35
+ <td class="col-name">
36
+ <div class="catalogue-name">${escHtml(p.name)}</div>
37
+ <div class="catalogue-id">${escHtml(p.product_id)}</div>
38
+ ${p.description ? `<div class="catalogue-desc">${escHtml(p.description)}</div>` : ''}
39
+ ${extras}
40
+ </td>
41
+ <td class="col-type"><span class="type-tag">${escHtml(TYPE_LABEL[p.type] ?? p.type)}</span></td>
42
+ <td class="col-status"><span class="tx-badge ${escHtml(STATUS_BADGE[p.status] ?? '')}">${escHtml(p.status)}</span></td>
43
+ <td class="col-maturity">${maturityDots(p.maturity)}</td>
44
+ <td class="col-domain">${p.domain ? escHtml(p.domain) : '<span class="cell-empty">—</span>'}</td>
45
+ <td class="col-owner">${p.owner_role ? escHtml(p.owner_role) : '<span class="cell-empty">—</span>'}</td>
46
+ </tr>`;
47
+ }
48
+ export function renderProductsHtml(catalogue) {
49
+ const rows = catalogue.products.map(renderRow).join('\n');
50
+ const emptyRow = catalogue.products.length === 0
51
+ ? `<tr><td colspan="6" class="empty-catalogue">No products defined.</td></tr>`
52
+ : '';
53
+ const header = `<header class="catalogue-header">
54
+ <div class="catalogue-title">${escHtml(catalogue.name)}</div>
55
+ <div class="catalogue-meta">
56
+ <span class="catalogue-id-tag">${escHtml(catalogue.id)}</span>
57
+ <span class="catalogue-updated">Updated ${escHtml(catalogue.updated_at)}</span>
58
+ ${catalogue.version ? `<span class="catalogue-version">v${escHtml(catalogue.version)}</span>` : ''}
59
+ </div>
60
+ ${catalogue.description ? `<div class="catalogue-subtitle">${escHtml(catalogue.description)}</div>` : ''}
61
+ </header>`;
62
+ return `<section class="tx-catalogue tx-products">
63
+ ${header}
64
+ <table class="catalogue-table">
65
+ <thead>
66
+ <tr>
67
+ <th>Name / ID</th>
68
+ <th>Type</th>
69
+ <th>Status</th>
70
+ <th>Maturity</th>
71
+ <th>Domain</th>
72
+ <th>Owner Role</th>
73
+ </tr>
74
+ </thead>
75
+ <tbody>
76
+ ${rows}
77
+ ${emptyRow}
78
+ </tbody>
79
+ </table>
80
+ </section>`;
81
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Host-neutral renderer for the Scenarios notation.
3
+ * Mirrors `extension/src/scenarios-preview.ts`; emits a self-contained HTML
4
+ * fragment for the JCEF host (Step 4 of ADR 0001).
5
+ */
6
+ import type { ScenarioHeader } from '../scenarios/types.js';
7
+ export declare function renderScenarioHtml(scn: ScenarioHeader): string;
@@ -0,0 +1,75 @@
1
+ import { escHtml } from './render-util.js';
2
+ const STATUS_BADGE = {
3
+ Active: 'badge-active',
4
+ Draft: 'badge-draft',
5
+ Archived: 'badge-archived',
6
+ };
7
+ const RELEVANCE_BADGE = {
8
+ High: 'badge-high',
9
+ Medium: 'badge-medium',
10
+ Low: 'badge-low',
11
+ };
12
+ function buildFactorsTable(factors) {
13
+ if (!factors || factors.length === 0)
14
+ return '';
15
+ const rows = factors
16
+ .map((f) => `<tr>
17
+ <td class="col-factor-id">${escHtml(f.factor_id)}</td>
18
+ <td class="col-relevance">${f.relevance
19
+ ? `<span class="tx-badge ${escHtml(RELEVANCE_BADGE[f.relevance] ?? '')}">${escHtml(f.relevance)}</span>`
20
+ : '<span class="cell-empty">—</span>'}</td>
21
+ <td class="col-impact">${f.impact ? escHtml(f.impact) : '<span class="cell-empty">—</span>'}</td>
22
+ </tr>`)
23
+ .join('\n');
24
+ return `<section class="scn-section">
25
+ <h2 class="scn-section-title">Factors view <span class="scn-count">${factors.length}</span></h2>
26
+ <table class="catalogue-table">
27
+ <thead><tr><th>Factor ID</th><th>Relevance</th><th>Impact</th></tr></thead>
28
+ <tbody>${rows}</tbody>
29
+ </table>
30
+ </section>`;
31
+ }
32
+ function buildRefSection(label, items) {
33
+ if (items.length === 0)
34
+ return '';
35
+ const lis = items.map((id) => `<li><code>${escHtml(id)}</code></li>`).join('');
36
+ return `<section class="scn-section">
37
+ <h2 class="scn-section-title">${escHtml(label)} <span class="scn-count">${items.length}</span></h2>
38
+ <ul class="scn-ref-list">${lis}</ul>
39
+ </section>`;
40
+ }
41
+ function extractIds(list, key) {
42
+ return (list ?? []).map((x) => String(x[key] ?? ''));
43
+ }
44
+ export function renderScenarioHtml(scn) {
45
+ const blocks = [];
46
+ if (scn.vision) {
47
+ blocks.push(`<section class="scn-section scn-vision">
48
+ <h2 class="scn-section-title">Vision</h2>
49
+ <p class="scn-vision-text">${escHtml(scn.vision)}</p>
50
+ </section>`);
51
+ }
52
+ blocks.push(buildFactorsTable(scn.factors_view));
53
+ blocks.push(buildRefSection('Goals', extractIds(scn.goals, 'goal_id')));
54
+ blocks.push(buildRefSection('Capabilities', extractIds(scn.capabilities, 'capability_id')));
55
+ blocks.push(buildRefSection('Activities', extractIds(scn.activities, 'activity_id')));
56
+ blocks.push(buildRefSection('Products', extractIds(scn.products, 'product_id')));
57
+ blocks.push(buildRefSection('Processes', extractIds(scn.processes, 'process_id')));
58
+ blocks.push(buildRefSection('Applications', extractIds(scn.applications, 'app_id')));
59
+ const content = blocks.filter(Boolean).join('\n');
60
+ const statusBadge = `<span class="tx-badge ${escHtml(STATUS_BADGE[scn.status] ?? '')}">${escHtml(scn.status)}</span>`;
61
+ const header = `<header class="catalogue-header">
62
+ <div class="catalogue-title">${escHtml(scn.name)}</div>
63
+ <div class="catalogue-meta">
64
+ ${statusBadge}
65
+ <span class="catalogue-id-tag">${escHtml(scn.id)}</span>
66
+ ${scn.created_at ? `<span class="catalogue-updated">Created ${escHtml(scn.created_at)}</span>` : ''}
67
+ </div>
68
+ ${scn.description ? `<div class="catalogue-subtitle">${escHtml(scn.description)}</div>` : ''}
69
+ </header>`;
70
+ const body = content || '<div class="empty-scenario">Scenario has no content yet (no vision, factors, or references).</div>';
71
+ return `<section class="tx-catalogue tx-scenarios">
72
+ ${header}
73
+ ${body}
74
+ </section>`;
75
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Small set of host-neutral helpers shared by the `render-*.ts` modules.
3
+ *
4
+ * The webview bundle (ADR 0001) runs inside JCEF without access to any host
5
+ * APIs, so all string/markup utilities must stay framework-free here.
6
+ */
7
+ export declare function escXml(s: string): string;
8
+ /** Same encoding as `escXml`; aliased so HTML-table renderers read clearly. */
9
+ export declare const escHtml: typeof escXml;
10
+ /** Pull common frontmatter for the optional preview heading. */
11
+ export declare function readDocHeader(doc: unknown): {
12
+ title?: string;
13
+ subtitle?: string;
14
+ version?: string;
15
+ date?: string;
16
+ };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Small set of host-neutral helpers shared by the `render-*.ts` modules.
3
+ *
4
+ * The webview bundle (ADR 0001) runs inside JCEF without access to any host
5
+ * APIs, so all string/markup utilities must stay framework-free here.
6
+ */
7
+ export function escXml(s) {
8
+ return s
9
+ .replace(/&/g, '&amp;')
10
+ .replace(/</g, '&lt;')
11
+ .replace(/>/g, '&gt;')
12
+ .replace(/"/g, '&quot;');
13
+ }
14
+ /** Same encoding as `escXml`; aliased so HTML-table renderers read clearly. */
15
+ export const escHtml = escXml;
16
+ /** Pull common frontmatter for the optional preview heading. */
17
+ export function readDocHeader(doc) {
18
+ if (!doc || typeof doc !== 'object')
19
+ return {};
20
+ const raw = doc;
21
+ const out = {};
22
+ if (typeof raw['title'] === 'string')
23
+ out.title = raw['title'];
24
+ if (typeof raw['description'] === 'string')
25
+ out.subtitle = raw['description'];
26
+ if (raw['version'] !== undefined)
27
+ out.version = String(raw['version']);
28
+ if (typeof raw['date'] === 'string')
29
+ out.date = raw['date'];
30
+ return out;
31
+ }