@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,74 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { validateTargetState } from '../validate.js';
3
+
4
+ function valid(): Record<string, unknown> {
5
+ return {
6
+ notation: 'target-state',
7
+ id: 'TARGET_STATE-EU-LIVE-1',
8
+ name: 'EU operations live — three markets, localised CRM and payments',
9
+ description: 'The structural end-state in which Acme operates in three EU markets.',
10
+ capabilities: ['CAPABILITY-V1', 'CAPABILITY-V1.2', 'CAPABILITY-V2'],
11
+ processes: ['PROCESS-CUST-ONBOARD-1', 'PROCESS-ORD-FULFILL-1'],
12
+ applications: ['APPLICATION-CRM-1', 'APPLICATION-OMS-1'],
13
+ zone: 'canon',
14
+ admitted_at: '2026-05-31',
15
+ admitted_by: 'v.korobeinikov',
16
+ gate_checks: { uniqueness: 'pass', consistency: 'pass', completeness: 'pass' },
17
+ valid_from: '2026-05-31',
18
+ valid_to: null,
19
+ };
20
+ }
21
+
22
+ const codes = (input: unknown): string[] => validateTargetState(input).errors.map(e => e.code);
23
+
24
+ describe('validateTargetState — positive', () => {
25
+ it('accepts the worked-example TARGET_STATE-EU-LIVE-1', () => {
26
+ const r = validateTargetState(valid());
27
+ expect(r.valid, JSON.stringify(r.errors)).toBe(true);
28
+ expect(r.errors).toHaveLength(0);
29
+ });
30
+
31
+ it('accepts a minimal target state (name + envelope only)', () => {
32
+ const r = valid();
33
+ delete r.capabilities;
34
+ delete r.processes;
35
+ delete r.applications;
36
+ expect(validateTargetState(r).valid).toBe(true);
37
+ });
38
+ });
39
+
40
+ describe('validateTargetState — TARGET_STATE-001 (envelope / shape)', () => {
41
+ it('flags a non-object', () => {
42
+ expect(codes(null)).toEqual(['TARGET_STATE-001']);
43
+ });
44
+
45
+ it('flags a wrong notation tag', () => {
46
+ expect(codes({ ...valid(), notation: 'plateau' })).toContain('TARGET_STATE-001');
47
+ });
48
+
49
+ it('flags an id with the wrong TYPE prefix', () => {
50
+ expect(codes({ ...valid(), id: 'SCENARIO-EU-LIVE-1' })).toContain('TARGET_STATE-001');
51
+ });
52
+
53
+ it('flags an inline goals field (it belongs on a REL)', () => {
54
+ expect(codes({ ...valid(), goals: ['GOAL-EU-1'] })).toContain('TARGET_STATE-001');
55
+ });
56
+ });
57
+
58
+ describe('validateTargetState — TARGET_STATE-002 (composition refs)', () => {
59
+ it('flags a non-CAPABILITY id in capabilities', () => {
60
+ expect(codes({ ...valid(), capabilities: ['PROCESS-X-1'] })).toContain('TARGET_STATE-002');
61
+ });
62
+
63
+ it('flags a non-PROCESS id in processes', () => {
64
+ expect(codes({ ...valid(), processes: ['CAPABILITY-V1'] })).toContain('TARGET_STATE-002');
65
+ });
66
+
67
+ it('flags a non-APPLICATION id in applications', () => {
68
+ expect(codes({ ...valid(), applications: ['PRODUCT-X-1'] })).toContain('TARGET_STATE-002');
69
+ });
70
+
71
+ it('flags a composition field that is not an array', () => {
72
+ expect(codes({ ...valid(), capabilities: 'CAPABILITY-V1' })).toContain('TARGET_STATE-002');
73
+ });
74
+ });
@@ -0,0 +1,2 @@
1
+ export type { TargetState } from './types.js';
2
+ export { validateTargetState } from './validate.js';
@@ -0,0 +1,28 @@
1
+ // TARGET_STATE — implementation-layer plateau primitive (ArchiMate Plateau).
2
+ // Schema: methodology notations/ELEMENT_PRIMITIVES.md §7.17 + envelope §3.
3
+ //
4
+ // The id TYPE prefix is `TARGET_STATE` (underscore — uppercase identifier in
5
+ // IDS_AND_REFERENCES.md §3.1). The notation tag is the lowercased hyphenated
6
+ // short name `target-state` (per ELEMENT_PRIMITIVES.md §4).
7
+
8
+ import type { GateChecks } from '../requirement/types.js';
9
+
10
+ export interface TargetState {
11
+ notation: 'target-state';
12
+ id: string;
13
+ name: string;
14
+ /** Composition lists are inline; they are timeless on the element file. */
15
+ capabilities?: string[];
16
+ processes?: string[];
17
+ applications?: string[];
18
+ description?: string;
19
+ link?: string;
20
+
21
+ zone: 'canon';
22
+ admitted_at: string;
23
+ admitted_by: string;
24
+ gate_checks: GateChecks;
25
+
26
+ valid_from: string;
27
+ valid_to: string | null;
28
+ }
@@ -0,0 +1,67 @@
1
+ // TARGET_STATE validator — methodology notations/ELEMENT_PRIMITIVES.md §7.17.
2
+ //
3
+ // Implements TARGET_STATE-001..002. Goal-satisfaction lives on the
4
+ // `target_state_satisfies_goal` REL kind (elements/17-relations.md §3) and is
5
+ // never inline here; a `goals:` field on a TARGET_STATE is flagged.
6
+
7
+ import type { ValidationError, ValidationResult, ValidationWarning } from '../validation-types.js';
8
+ import { typeOfId } from '../typed-id.js';
9
+ import { validateElementEnvelope } from '../element-envelope.js';
10
+
11
+ /** Composition fields and the TYPE each entry must carry. */
12
+ const COMPOSITION_TYPES = {
13
+ capabilities: 'CAPABILITY',
14
+ processes: 'PROCESS',
15
+ applications: 'APPLICATION',
16
+ } as const;
17
+
18
+ export function validateTargetState(input: unknown): ValidationResult {
19
+ const errors: ValidationError[] = [];
20
+ const warnings: ValidationWarning[] = [];
21
+
22
+ const { record, errors: envErrors } = validateElementEnvelope(input, {
23
+ notation: 'target-state',
24
+ idType: 'TARGET_STATE',
25
+ code: 'TARGET_STATE-001',
26
+ });
27
+ errors.push(...envErrors);
28
+ if (!record) return { valid: false, errors, warnings };
29
+
30
+ // TARGET_STATE-002 — composition entries must carry the right TYPE prefix.
31
+ for (const [field, expectedType] of Object.entries(COMPOSITION_TYPES)) {
32
+ const value = record[field];
33
+ if (value === undefined) continue;
34
+ if (!Array.isArray(value)) {
35
+ errors.push({
36
+ code: 'TARGET_STATE-002',
37
+ message: `${field} must be a list of ${expectedType} typed IDs.`,
38
+ path: field,
39
+ });
40
+ continue;
41
+ }
42
+ value.forEach((ref, i) => {
43
+ // CAPABILITY uses a V/H terminal (e.g. CAPABILITY-V1.2) rather than a
44
+ // plain integer; the prefix-TYPE gate is what this validator enforces,
45
+ // and the V/H grammar is owned by the capability-map module.
46
+ if (typeOfId(ref) !== expectedType) {
47
+ errors.push({
48
+ code: 'TARGET_STATE-002',
49
+ message: `${field}[${i}] "${String(ref)}" must be a ${expectedType} typed ID.`,
50
+ path: `${field}[${i}]`,
51
+ });
52
+ }
53
+ });
54
+ }
55
+
56
+ // TARGET_STATE-001 — `goals:` is not an inline field on this element. Goal
57
+ // satisfaction is a target_state_satisfies_goal REL (§7.17).
58
+ if ('goals' in record) {
59
+ errors.push({
60
+ code: 'TARGET_STATE-001',
61
+ message: 'goals is not an inline field on TARGET_STATE — use a target_state_satisfies_goal REL.',
62
+ path: 'goals',
63
+ });
64
+ }
65
+
66
+ return { valid: errors.length === 0, errors, warnings };
67
+ }
@@ -0,0 +1,4 @@
1
+ export type { AdaptiveTokens } from './tokens.js';
2
+ export { BRAND, FUNCTIONAL, LAYER_COLORS, LEVEL_COLORS, MATURITY_COLORS, STRUCTURAL, TYPOGRAPHY, CSS_VAR, getBaseResetCss } from './tokens.js';
3
+ export type { ThemeId } from './themes.js';
4
+ export { generateWebviewCss, generateSvgEmbedCss } from './themes.js';
@@ -0,0 +1,237 @@
1
+ import {
2
+ LAYER_COLORS,
3
+ LEVEL_COLORS,
4
+ MATURITY_COLORS,
5
+ STRUCTURAL,
6
+ TYPOGRAPHY,
7
+ CSS_VAR,
8
+ getBaseResetCss,
9
+ type AdaptiveTokens,
10
+ } from './tokens.js';
11
+
12
+ export type ThemeId = 'transitrix' | 'transitrix-dark' | 'vscode-adaptive';
13
+
14
+ const TRANSITRIX_LIGHT: AdaptiveTokens = {
15
+ bg: '#ffffff',
16
+ bgSurface: '#f8fafc',
17
+ bgElevated: '#f1f5f9',
18
+ text: '#0f172a',
19
+ textMuted: '#64748b',
20
+ textInverse: '#ffffff',
21
+ border: '#e2e8f0',
22
+ divider: '#cbd5e1',
23
+ statusSuccessBg: '#d1fae5',
24
+ statusSuccessFg: '#065f46',
25
+ statusWarningBg: '#fef9c3',
26
+ statusWarningFg: '#854d0e',
27
+ statusInfoBg: '#e0f2fe',
28
+ statusInfoFg: '#0c4a6e',
29
+ statusErrorBg: '#fee2e2',
30
+ statusErrorFg: '#991b1b',
31
+ };
32
+
33
+ const TRANSITRIX_DARK: AdaptiveTokens = {
34
+ bg: '#0a1628',
35
+ bgSurface: '#0f1f3d',
36
+ bgElevated: '#162544',
37
+ text: '#f1f5f9',
38
+ textMuted: '#94a3b8',
39
+ textInverse: '#0f172a',
40
+ border: '#1e3a5f',
41
+ divider: '#1a3050',
42
+ statusSuccessBg: '#022c22',
43
+ statusSuccessFg: '#6ee7b7',
44
+ statusWarningBg: '#1e1500',
45
+ statusWarningFg: '#fcd34d',
46
+ statusInfoBg: '#071e2e',
47
+ statusInfoFg: '#7dd3fc',
48
+ statusErrorBg: '#2c0a0a',
49
+ statusErrorFg: '#fca5a5',
50
+ };
51
+
52
+ function adaptiveVars(t: AdaptiveTokens): string {
53
+ return [
54
+ `${CSS_VAR.bg}:${t.bg}`,
55
+ `${CSS_VAR.bgSurface}:${t.bgSurface}`,
56
+ `${CSS_VAR.bgElevated}:${t.bgElevated}`,
57
+ `${CSS_VAR.text}:${t.text}`,
58
+ `${CSS_VAR.textMuted}:${t.textMuted}`,
59
+ `${CSS_VAR.textInverse}:${t.textInverse}`,
60
+ `${CSS_VAR.border}:${t.border}`,
61
+ `${CSS_VAR.divider}:${t.divider}`,
62
+ `${CSS_VAR.statusSuccessBg}:${t.statusSuccessBg}`,
63
+ `${CSS_VAR.statusSuccessFg}:${t.statusSuccessFg}`,
64
+ `${CSS_VAR.statusWarningBg}:${t.statusWarningBg}`,
65
+ `${CSS_VAR.statusWarningFg}:${t.statusWarningFg}`,
66
+ `${CSS_VAR.statusInfoBg}:${t.statusInfoBg}`,
67
+ `${CSS_VAR.statusInfoFg}:${t.statusInfoFg}`,
68
+ `${CSS_VAR.statusErrorBg}:${t.statusErrorBg}`,
69
+ `${CSS_VAR.statusErrorFg}:${t.statusErrorFg}`,
70
+ ].join(';') + ';';
71
+ }
72
+
73
+ function diagramVars(variant: 'light' | 'dark' | 'hc'): string {
74
+ const lc = LAYER_COLORS;
75
+ const sc = STRUCTURAL;
76
+ const lv = LEVEL_COLORS[variant];
77
+ const mat = MATURITY_COLORS[variant];
78
+ const levelVars = lv.map((c, i) => `--ts-level-${i}:${c}`).join(';') + ';';
79
+ return [
80
+ `${CSS_VAR.layerFactor}:${lc.factor[variant]}`,
81
+ `${CSS_VAR.layerGoal}:${lc.goal[variant]}`,
82
+ `${CSS_VAR.layerChange}:${lc.change[variant]}`,
83
+ `${CSS_VAR.layerActivity}:${lc.activity[variant]}`,
84
+ `${CSS_VAR.nodeStroke}:${sc.nodeStroke[variant]}`,
85
+ `${CSS_VAR.edgeStroke}:${sc.edgeStroke[variant]}`,
86
+ `${CSS_VAR.textPrimary}:${sc.textPrimary[variant]}`,
87
+ `${CSS_VAR.textSecondary}:${sc.textSecondary[variant]}`,
88
+ `${CSS_VAR.headerText}:${sc.headerText[variant]}`,
89
+ `${CSS_VAR.maturity1}:${mat[0]}`,
90
+ `${CSS_VAR.maturity2}:${mat[1]}`,
91
+ `${CSS_VAR.maturity3}:${mat[2]}`,
92
+ `${CSS_VAR.maturity4}:${mat[3]}`,
93
+ `${CSS_VAR.maturity5}:${mat[4]}`,
94
+ ].join(';') + ';' + levelVars;
95
+ }
96
+
97
+ /** CSS for the webview shell (toolbar, canvas). */
98
+ function shellCss(): string {
99
+ const cv = CSS_VAR;
100
+ const t = TYPOGRAPHY;
101
+ // Full-height flex chain lifted from blocks-preview / activities-preview
102
+ // into the shared shell (per strategy hub #35). Body is a flex column
103
+ // sized to the iframe; #canvas takes the remaining height with its own
104
+ // scroll region. Without this, #canvas was content-height and any
105
+ // overflow-x scrollbar landed mid-panel with empty space below it — the
106
+ // "two-page" split flagged on goals, activities, and others.
107
+ //
108
+ // html bg + min-height are set per-theme in generateWebviewCss (literal
109
+ // hex / VS Code var) so they don't depend on `--ts-bg` resolving on html —
110
+ // CSS custom properties only cascade DOWN, and `--ts-bg` is defined on the
111
+ // body[data-theme] selector, so html itself can't read it. Without that
112
+ // explicit html bg, the iframe's underlying VS Code editor background
113
+ // showed through any uncovered area below short diagrams.
114
+ return `html,body{height:100%;}
115
+ body{background:var(${cv.bg});color:var(${cv.text});display:flex;flex-direction:column;}
116
+ #toolbar{position:sticky;top:0;z-index:10;padding:6px 12px;border-bottom:1px solid var(${cv.border});font-family:${t.fontFamily};font-size:${t.sizes.secondary}px;color:var(${cv.textMuted});background:var(${cv.bg});flex-shrink:0;}
117
+ #canvas{flex:1;min-height:0;padding:16px;overflow:auto;}
118
+ svg{display:block;}`;
119
+ }
120
+
121
+ /** CSS for SVG diagram classes — all consume --ts-* variables. */
122
+ function diagramClassCss(): string {
123
+ const cv = CSS_VAR;
124
+ const t = TYPOGRAPHY;
125
+ const levelCount = LEVEL_COLORS.light.length;
126
+ const levelRules = Array.from({ length: levelCount }, (_, i) =>
127
+ `.level-${i}{fill:var(--ts-level-${i});}`
128
+ ).join('');
129
+ // Typography: every <text> in a preview SVG resolves font-family, size and
130
+ // weight from these classes instead of inline attributes. That is the
131
+ // contract every notation preview honours so the catalogue reads as one
132
+ // visual family.
133
+ return `.diagram-node{stroke:var(${cv.nodeStroke});stroke-width:1;}
134
+ .layer-factor{fill:var(${cv.layerFactor});}
135
+ .layer-goal{fill:var(${cv.layerGoal});}
136
+ .layer-change{fill:var(${cv.layerChange});}
137
+ .layer-activity{fill:var(${cv.layerActivity});}
138
+ ${levelRules}
139
+ .diagram-edge{stroke:var(${cv.edgeStroke});stroke-width:1.5;fill:none;}
140
+ .arrow-fill{fill:var(${cv.edgeStroke});}
141
+ .text-header{fill:var(${cv.headerText});font-family:${t.fontFamily};font-size:${t.sizes.header}px;font-weight:${t.weights.header};}
142
+ .text-primary{fill:var(${cv.textPrimary});font-family:${t.fontFamily};font-size:${t.sizes.primary}px;font-weight:${t.weights.primary};}
143
+ .text-secondary{fill:var(${cv.textSecondary});font-family:${t.fontFamily};font-size:${t.sizes.secondary}px;font-weight:${t.weights.secondary};}
144
+ .text-id{fill:var(${cv.textSecondary});font-family:${t.fontFamily};font-size:${t.sizes.id}px;font-weight:${t.weights.id};}
145
+ .text-pill{fill:var(${cv.textPrimary});font-family:${t.fontFamily};font-size:${t.sizes.pill}px;font-weight:${t.weights.pill};}
146
+ .maturity-1{fill:var(${cv.maturity1});}
147
+ .maturity-2{fill:var(${cv.maturity2});}
148
+ .maturity-3{fill:var(${cv.maturity3});}
149
+ .maturity-4{fill:var(${cv.maturity4});}
150
+ .maturity-5{fill:var(${cv.maturity5});}
151
+ .compliance-gap{fill:var(${cv.statusWarningBg});stroke:var(${cv.statusWarningFg});}
152
+ .compliance-gap text{fill:var(${cv.statusWarningFg});}
153
+ .compliance-deadline{fill:var(${cv.statusErrorBg});stroke:var(${cv.statusErrorFg});}
154
+ .compliance-deadline text{fill:var(${cv.statusErrorFg});}
155
+ .compliance-badge{fill:var(${cv.statusErrorFg});}
156
+ .compliance-badge-text{fill:var(${cv.textInverse});font-family:${t.fontFamily};font-size:8px;font-weight:700;}`;
157
+ }
158
+
159
+ /**
160
+ * Generates a self-contained CSS block for embedding inside a standalone SVG file.
161
+ * Defines all --ts-* custom properties on :root so diagram classes resolve correctly
162
+ * when the SVG is opened outside of VS Code.
163
+ * vscode-adaptive falls back to the light palette (runtime VS Code variables are unavailable).
164
+ */
165
+ export function generateSvgEmbedCss(themeId: ThemeId): string {
166
+ const variant = themeId === 'transitrix-dark' ? 'dark' : 'light';
167
+ const adaptive = themeId === 'transitrix-dark' ? TRANSITRIX_DARK : TRANSITRIX_LIGHT;
168
+ return `:root{${adaptiveVars(adaptive)}${diagramVars(variant)}}${diagramClassCss()}`;
169
+ }
170
+
171
+ /**
172
+ * Generates complete CSS for a static SVG diagram webview.
173
+ *
174
+ * For transitrix/transitrix-dark: sets --ts-* vars with fixed brand colors.
175
+ * For vscode-adaptive: maps --ts-* vars to --vscode-* CSS vars, with
176
+ * body.vscode-dark / body.vscode-high-contrast overrides for diagram colors.
177
+ */
178
+ export function generateWebviewCss(themeId: ThemeId): string {
179
+ const base = getBaseResetCss();
180
+ const shell = shellCss();
181
+ const classes = diagramClassCss();
182
+
183
+ if (themeId === 'transitrix') {
184
+ return `${base}
185
+ html{background:${TRANSITRIX_LIGHT.bg};min-height:100vh;}
186
+ body[data-theme="transitrix"]{${adaptiveVars(TRANSITRIX_LIGHT)}${diagramVars('light')}}
187
+ ${shell}
188
+ ${classes}`;
189
+ }
190
+
191
+ if (themeId === 'transitrix-dark') {
192
+ return `${base}
193
+ html{background:${TRANSITRIX_DARK.bg};min-height:100vh;}
194
+ body[data-theme="transitrix-dark"]{${adaptiveVars(TRANSITRIX_DARK)}${diagramVars('dark')}}
195
+ ${shell}
196
+ ${classes}`;
197
+ }
198
+
199
+ // vscode-adaptive: map --ts-shell vars to --vscode-* CSS variables;
200
+ // layer/level/structural colors follow the VS Code theme body class.
201
+ const cv = CSS_VAR;
202
+ return `${base}
203
+ html{background:var(--vscode-editor-background,${TRANSITRIX_LIGHT.bg});min-height:100vh;}
204
+ body[data-theme="vscode-adaptive"]{
205
+ ${cv.bg}:var(--vscode-editor-background);
206
+ ${cv.bgSurface}:var(--vscode-sideBar-background,var(--vscode-editor-background));
207
+ ${cv.bgElevated}:var(--vscode-editorHoverWidget-background,var(--vscode-editor-background));
208
+ ${cv.text}:var(--vscode-foreground);
209
+ ${cv.textMuted}:var(--vscode-descriptionForeground);
210
+ ${cv.textInverse}:var(--vscode-editor-background);
211
+ ${cv.border}:var(--vscode-panel-border);
212
+ ${cv.divider}:var(--vscode-panel-border);
213
+ ${cv.statusSuccessBg}:${TRANSITRIX_LIGHT.statusSuccessBg};
214
+ ${cv.statusSuccessFg}:${TRANSITRIX_LIGHT.statusSuccessFg};
215
+ ${cv.statusWarningBg}:${TRANSITRIX_LIGHT.statusWarningBg};
216
+ ${cv.statusWarningFg}:${TRANSITRIX_LIGHT.statusWarningFg};
217
+ ${cv.statusInfoBg}:${TRANSITRIX_LIGHT.statusInfoBg};
218
+ ${cv.statusInfoFg}:${TRANSITRIX_LIGHT.statusInfoFg};
219
+ ${cv.statusErrorBg}:${TRANSITRIX_LIGHT.statusErrorBg};
220
+ ${cv.statusErrorFg}:${TRANSITRIX_LIGHT.statusErrorFg};
221
+ ${diagramVars('light')}
222
+ }
223
+ body[data-theme="vscode-adaptive"].vscode-dark{
224
+ ${cv.statusSuccessBg}:${TRANSITRIX_DARK.statusSuccessBg};
225
+ ${cv.statusSuccessFg}:${TRANSITRIX_DARK.statusSuccessFg};
226
+ ${cv.statusWarningBg}:${TRANSITRIX_DARK.statusWarningBg};
227
+ ${cv.statusWarningFg}:${TRANSITRIX_DARK.statusWarningFg};
228
+ ${cv.statusInfoBg}:${TRANSITRIX_DARK.statusInfoBg};
229
+ ${cv.statusInfoFg}:${TRANSITRIX_DARK.statusInfoFg};
230
+ ${cv.statusErrorBg}:${TRANSITRIX_DARK.statusErrorBg};
231
+ ${cv.statusErrorFg}:${TRANSITRIX_DARK.statusErrorFg};
232
+ ${diagramVars('dark')}
233
+ }
234
+ body[data-theme="vscode-adaptive"].vscode-high-contrast{${diagramVars('hc')}}
235
+ ${shell}
236
+ ${classes}`;
237
+ }
@@ -0,0 +1,133 @@
1
+ /** Transitrix brand palette. */
2
+ export const BRAND = {
3
+ petrol: '#004d67',
4
+ amber: '#ffaf00',
5
+ orange: '#ff4d00',
6
+ } as const;
7
+
8
+ /** Functional status colors. */
9
+ export const FUNCTIONAL = {
10
+ success: '#1a7f5c',
11
+ warning: '#c07030',
12
+ error: '#b91c1c',
13
+ info: '#1d6fa8',
14
+ } as const;
15
+
16
+ /** Fill colors for FGCA notation columns. */
17
+ export const LAYER_COLORS = {
18
+ factor: { light: '#fef3c7', dark: '#292108', hc: '#f59e0b' },
19
+ goal: { light: '#e0e7ff', dark: '#1e1b4b', hc: '#818cf8' },
20
+ change: { light: '#dbeafe', dark: '#0c2042', hc: '#60a5fa' },
21
+ activity: { light: '#d4edda', dark: '#0a2414', hc: '#4ade80' },
22
+ } as const;
23
+
24
+ /** Level fill colors for Goals tree nodes — 8 slots, cycled by level index. */
25
+ export const LEVEL_COLORS = {
26
+ light: ['#dbeafe', '#e0e7ff', '#d4edda', '#fef3c7', '#fce7f3', '#e0f2fe', '#f3e8ff', '#fef9c3'],
27
+ dark: ['#0c2042', '#1e1b4b', '#0a2414', '#292108', '#2a0c1f', '#071e2e', '#1a0c33', '#2a2107'],
28
+ hc: ['#60a5fa', '#818cf8', '#4ade80', '#f59e0b', '#f472b6', '#38bdf8', '#a78bfa', '#facc15'],
29
+ } as const;
30
+
31
+ /** Structural diagram colors (nodes, edges, text). */
32
+ export const STRUCTURAL = {
33
+ nodeStroke: { light: '#94a3b8', dark: '#475569', hc: '#e2e8f0' },
34
+ edgeStroke: { light: '#94a3b8', dark: '#475569', hc: '#e2e8f0' },
35
+ textPrimary: { light: '#1e293b', dark: '#f1f5f9', hc: '#ffffff' },
36
+ textSecondary: { light: '#64748b', dark: '#94a3b8', hc: '#cbd5e1' },
37
+ headerText: { light: '#374151', dark: '#e5e7eb', hc: '#ffffff' },
38
+ } as const;
39
+
40
+ /**
41
+ * Maturity scale fill colors — Likert 1..5, danger→success.
42
+ * Used by Capability Map and any future maturity-based notation.
43
+ */
44
+ export const MATURITY_COLORS = {
45
+ light: ['#b91c1c', '#d97706', '#ca8a04', '#65a30d', '#15803d'],
46
+ dark: ['#7f1d1d', '#92400e', '#854d0e', '#3f6212', '#14532d'],
47
+ hc: ['#f87171', '#fb923c', '#facc15', '#a3e635', '#4ade80'],
48
+ } as const;
49
+
50
+ /**
51
+ * Typography hierarchy. All previews resolve text styling from these roles
52
+ * — never from inline font-* attributes on individual <text> elements.
53
+ *
54
+ * fontFamily threads through the VS Code font setting so the preview reads
55
+ * as part of the editor; size + weight encode the visual hierarchy.
56
+ */
57
+ export const TYPOGRAPHY = {
58
+ fontFamily: 'var(--vscode-font-family, system-ui, -apple-system, sans-serif)',
59
+ sizes: {
60
+ header: 13, // stage/column headers, diagram captions
61
+ primary: 12, // primary node/cell labels
62
+ secondary: 11, // annotations, secondary lines, meta
63
+ id: 10, // compact id/code chips
64
+ pill: 11, // pill labels (process-blueprint aspects, badges)
65
+ caption: 11, // figcaption under the canvas
66
+ },
67
+ weights: {
68
+ header: 700,
69
+ primary: 600,
70
+ secondary: 400,
71
+ id: 600,
72
+ pill: 500,
73
+ caption: 400,
74
+ },
75
+ } as const;
76
+
77
+ /** Adaptive shell tokens (background, text, border, status). */
78
+ export interface AdaptiveTokens {
79
+ bg: string;
80
+ bgSurface: string;
81
+ bgElevated: string;
82
+ text: string;
83
+ textMuted: string;
84
+ textInverse: string;
85
+ border: string;
86
+ divider: string;
87
+ statusSuccessBg: string;
88
+ statusSuccessFg: string;
89
+ statusWarningBg: string;
90
+ statusWarningFg: string;
91
+ statusInfoBg: string;
92
+ statusInfoFg: string;
93
+ statusErrorBg: string;
94
+ statusErrorFg: string;
95
+ }
96
+
97
+ /** CSS custom property names for --ts-* variables. */
98
+ export const CSS_VAR = {
99
+ bg: '--ts-bg',
100
+ bgSurface: '--ts-bg-surface',
101
+ bgElevated: '--ts-bg-elevated',
102
+ text: '--ts-text',
103
+ textMuted: '--ts-text-muted',
104
+ textInverse: '--ts-text-inverse',
105
+ border: '--ts-border',
106
+ divider: '--ts-divider',
107
+ statusSuccessBg: '--ts-status-success-bg',
108
+ statusSuccessFg: '--ts-status-success-fg',
109
+ statusWarningBg: '--ts-status-warning-bg',
110
+ statusWarningFg: '--ts-status-warning-fg',
111
+ statusInfoBg: '--ts-status-info-bg',
112
+ statusInfoFg: '--ts-status-info-fg',
113
+ statusErrorBg: '--ts-status-error-bg',
114
+ statusErrorFg: '--ts-status-error-fg',
115
+ layerFactor: '--ts-layer-factor',
116
+ layerGoal: '--ts-layer-goal',
117
+ layerChange: '--ts-layer-change',
118
+ layerActivity: '--ts-layer-activity',
119
+ nodeStroke: '--ts-node-stroke',
120
+ edgeStroke: '--ts-edge-stroke',
121
+ textPrimary: '--ts-text-primary',
122
+ textSecondary: '--ts-text-secondary',
123
+ headerText: '--ts-header-text',
124
+ maturity1: '--ts-maturity-1',
125
+ maturity2: '--ts-maturity-2',
126
+ maturity3: '--ts-maturity-3',
127
+ maturity4: '--ts-maturity-4',
128
+ maturity5: '--ts-maturity-5',
129
+ } as const;
130
+
131
+ export function getBaseResetCss(): string {
132
+ return `*,*:before,*:after{box-sizing:border-box;}html,body{margin:0;padding:0;}`;
133
+ }
@@ -0,0 +1,56 @@
1
+ // Canonical typed-ID grammar + cross-reference resolution catalogue.
2
+ //
3
+ // Every element ID and cross-reference in the Transitrix canon follows the
4
+ // grammar in methodology `notations/IDS_AND_REFERENCES.md` §1:
5
+ //
6
+ // <TYPE>-[<middle segment(s)>-]<INTEGER>
7
+ //
8
+ // - TYPE: uppercase, starts with a letter, may contain digits and `_`
9
+ // (multi-word TYPEs like INTERNAL_STANDARD / PROCESS_BLUEPRINT).
10
+ // - middle: optional, notation-specific segments.
11
+ // - INTEGER: terminal positive integer, no leading zeros.
12
+ //
13
+ // CAPABILITY is the one exception (§2): its terminal is a V/H diagram address
14
+ // (CAPABILITY-V1.2) rather than a plain integer. Compliance artefacts only
15
+ // *resolve* capability ids (they never own one), so the catalogue handles
16
+ // them; the strict integer-terminal grammar below is used only for an
17
+ // artefact's own id (REQUIREMENT-… / ASSERTION-…).
18
+
19
+ /** TYPE prefix of a typed id — the segment before the first hyphen. */
20
+ const TYPE_PREFIX_RE = /^([A-Z][A-Z0-9_]*)-/;
21
+
22
+ /** Full integer-terminal canonical id. Middle segments may be mixed-case
23
+ * (real canon ids such as INTERNAL_STANDARD-coding-conventions-1 exist). */
24
+ const CANONICAL_ID_RE = /^[A-Z][A-Z0-9_]*(?:-[A-Za-z0-9]+)*-[1-9][0-9]*$/;
25
+
26
+ /** Extracts the TYPE prefix of a typed id, or null when `id` is not a typed
27
+ * reference (`PRODUCT-MOBILE-1` → `PRODUCT`, `CAPABILITY-V2` → `CAPABILITY`). */
28
+ export function typeOfId(id: unknown): string | null {
29
+ if (typeof id !== 'string') return null;
30
+ const m = TYPE_PREFIX_RE.exec(id);
31
+ return m ? m[1] : null;
32
+ }
33
+
34
+ /** True when `id` is a well-formed integer-terminal canonical id. */
35
+ export function isCanonicalId(id: unknown): id is string {
36
+ return typeof id === 'string' && CANONICAL_ID_RE.test(id);
37
+ }
38
+
39
+ /** True when `id` is a well-formed canonical id whose TYPE is exactly `type`. */
40
+ export function isCanonicalIdOfType(id: unknown, type: string): boolean {
41
+ return isCanonicalId(id) && typeOfId(id) === type;
42
+ }
43
+
44
+ /**
45
+ * A read-only view of an organisation's admitted canon, used to resolve typed
46
+ * cross-references during validation. Phase 1 validators accept it optionally:
47
+ * with no catalogue they perform shape + prefix-TYPE checks only; given one,
48
+ * they additionally enforce the resolution rules (REQ-002, ASSERT-002/004/005…)
49
+ * that depend on whether a referenced artefact actually exists.
50
+ *
51
+ * The compliance previews (Phase 2+) build a catalogue by scanning the repo.
52
+ */
53
+ export interface CanonCatalog {
54
+ /** TYPE of an admitted artefact with this id, or undefined if not admitted. */
55
+ typeOf(id: string): string | undefined;
56
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Shared validation result shape across every notation module in this
3
+ * package.
4
+ *
5
+ * Before this file existed, each notation declared its own
6
+ * `ValidationError` / `ValidationWarning` / `ValidationResult` triple inside
7
+ * its own `validate.ts`. The shapes happened to agree (or almost agree —
8
+ * some had an optional `path` field, others didn't), but having N parallel
9
+ * declarations made it easy to accidentally drift one of them, and made the
10
+ * "what does our validator return?" answer fuzzier than it should be.
11
+ *
12
+ * The pre-release code review on 2026-05-21 called this out as a
13
+ * `should-fix` cross-module concern; this is the canonical shape.
14
+ *
15
+ * Notations that historically exported PREFIXED type names — `FGCA…` and
16
+ * `Activity…` — keep those names as type aliases re-exported from their own
17
+ * modules, so existing consumers continue to compile.
18
+ */
19
+ export interface ValidationError {
20
+ code: string;
21
+ message: string;
22
+ /** Optional JSON-path-ish locator inside the source document. */
23
+ path?: string;
24
+ }
25
+
26
+ export interface ValidationWarning {
27
+ code: string;
28
+ message: string;
29
+ path?: string;
30
+ }
31
+
32
+ export interface ValidationResult {
33
+ valid: boolean;
34
+ errors: ValidationError[];
35
+ warnings: ValidationWarning[];
36
+ }