@principal-ai/subsystems-react 0.17.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 (496) hide show
  1. package/README.md +93 -0
  2. package/dist/components/ConfigurationSelector.d.ts +35 -0
  3. package/dist/components/ConfigurationSelector.d.ts.map +1 -0
  4. package/dist/components/ConfigurationSelector.js +63 -0
  5. package/dist/components/ConfigurationSelector.js.map +1 -0
  6. package/dist/components/GraphRenderer.d.ts +295 -0
  7. package/dist/components/GraphRenderer.d.ts.map +1 -0
  8. package/dist/components/GraphRenderer.js +2008 -0
  9. package/dist/components/GraphRenderer.js.map +1 -0
  10. package/dist/components/MultiCanvasRenderer.d.ts +75 -0
  11. package/dist/components/MultiCanvasRenderer.d.ts.map +1 -0
  12. package/dist/components/MultiCanvasRenderer.js +203 -0
  13. package/dist/components/MultiCanvasRenderer.js.map +1 -0
  14. package/dist/components/NodeTooltip.d.ts +24 -0
  15. package/dist/components/NodeTooltip.d.ts.map +1 -0
  16. package/dist/components/NodeTooltip.js +160 -0
  17. package/dist/components/NodeTooltip.js.map +1 -0
  18. package/dist/components/SelectionSidebar.d.ts +18 -0
  19. package/dist/components/SelectionSidebar.d.ts.map +1 -0
  20. package/dist/components/SelectionSidebar.js +190 -0
  21. package/dist/components/SelectionSidebar.js.map +1 -0
  22. package/dist/components/SequenceDiagramRenderer.d.ts +77 -0
  23. package/dist/components/SequenceDiagramRenderer.d.ts.map +1 -0
  24. package/dist/components/SequenceDiagramRenderer.js +604 -0
  25. package/dist/components/SequenceDiagramRenderer.js.map +1 -0
  26. package/dist/components/WorkflowSequenceDiagram.d.ts +63 -0
  27. package/dist/components/WorkflowSequenceDiagram.d.ts.map +1 -0
  28. package/dist/components/WorkflowSequenceDiagram.js +147 -0
  29. package/dist/components/WorkflowSequenceDiagram.js.map +1 -0
  30. package/dist/components/dashboard/DashboardRenderer.d.ts +10 -0
  31. package/dist/components/dashboard/DashboardRenderer.d.ts.map +1 -0
  32. package/dist/components/dashboard/DashboardRenderer.js +179 -0
  33. package/dist/components/dashboard/DashboardRenderer.js.map +1 -0
  34. package/dist/components/dashboard/MetricPanel.d.ts +10 -0
  35. package/dist/components/dashboard/MetricPanel.d.ts.map +1 -0
  36. package/dist/components/dashboard/MetricPanel.js +103 -0
  37. package/dist/components/dashboard/MetricPanel.js.map +1 -0
  38. package/dist/components/dashboard/MockDataProvider.d.ts +30 -0
  39. package/dist/components/dashboard/MockDataProvider.d.ts.map +1 -0
  40. package/dist/components/dashboard/MockDataProvider.js +270 -0
  41. package/dist/components/dashboard/MockDataProvider.js.map +1 -0
  42. package/dist/components/dashboard/components/BarChart.d.ts +10 -0
  43. package/dist/components/dashboard/components/BarChart.d.ts.map +1 -0
  44. package/dist/components/dashboard/components/BarChart.js +167 -0
  45. package/dist/components/dashboard/components/BarChart.js.map +1 -0
  46. package/dist/components/dashboard/components/LineChart.d.ts +10 -0
  47. package/dist/components/dashboard/components/LineChart.d.ts.map +1 -0
  48. package/dist/components/dashboard/components/LineChart.js +141 -0
  49. package/dist/components/dashboard/components/LineChart.js.map +1 -0
  50. package/dist/components/dashboard/components/MetricCard.d.ts +9 -0
  51. package/dist/components/dashboard/components/MetricCard.d.ts.map +1 -0
  52. package/dist/components/dashboard/components/MetricCard.js +163 -0
  53. package/dist/components/dashboard/components/MetricCard.js.map +1 -0
  54. package/dist/components/dashboard/components/SourceLink.d.ts +9 -0
  55. package/dist/components/dashboard/components/SourceLink.d.ts.map +1 -0
  56. package/dist/components/dashboard/components/SourceLink.js +39 -0
  57. package/dist/components/dashboard/components/SourceLink.js.map +1 -0
  58. package/dist/components/dashboard/components/TimeRangeSelector.d.ts +9 -0
  59. package/dist/components/dashboard/components/TimeRangeSelector.d.ts.map +1 -0
  60. package/dist/components/dashboard/components/TimeRangeSelector.js +167 -0
  61. package/dist/components/dashboard/components/TimeRangeSelector.js.map +1 -0
  62. package/dist/components/dashboard/components/index.d.ts +6 -0
  63. package/dist/components/dashboard/components/index.d.ts.map +1 -0
  64. package/dist/components/dashboard/components/index.js +6 -0
  65. package/dist/components/dashboard/components/index.js.map +1 -0
  66. package/dist/components/dashboard/index.d.ts +6 -0
  67. package/dist/components/dashboard/index.d.ts.map +1 -0
  68. package/dist/components/dashboard/index.js +8 -0
  69. package/dist/components/dashboard/index.js.map +1 -0
  70. package/dist/components/dashboard/types.d.ts +74 -0
  71. package/dist/components/dashboard/types.d.ts.map +1 -0
  72. package/dist/components/dashboard/types.js +8 -0
  73. package/dist/components/dashboard/types.js.map +1 -0
  74. package/dist/components/session-events/SessionEventFeed.d.ts +34 -0
  75. package/dist/components/session-events/SessionEventFeed.d.ts.map +1 -0
  76. package/dist/components/session-events/SessionEventFeed.js +1196 -0
  77. package/dist/components/session-events/SessionEventFeed.js.map +1 -0
  78. package/dist/components/session-events/index.d.ts +7 -0
  79. package/dist/components/session-events/index.d.ts.map +1 -0
  80. package/dist/components/session-events/index.js +6 -0
  81. package/dist/components/session-events/index.js.map +1 -0
  82. package/dist/components/state-view/PipelineView.d.ts +14 -0
  83. package/dist/components/state-view/PipelineView.d.ts.map +1 -0
  84. package/dist/components/state-view/PipelineView.js +195 -0
  85. package/dist/components/state-view/PipelineView.js.map +1 -0
  86. package/dist/components/state-view/index.d.ts +14 -0
  87. package/dist/components/state-view/index.d.ts.map +1 -0
  88. package/dist/components/state-view/index.js +12 -0
  89. package/dist/components/state-view/index.js.map +1 -0
  90. package/dist/components/state-view/types.d.ts +188 -0
  91. package/dist/components/state-view/types.d.ts.map +1 -0
  92. package/dist/components/state-view/types.js +10 -0
  93. package/dist/components/state-view/types.js.map +1 -0
  94. package/dist/components/state-view/useStateView.d.ts +32 -0
  95. package/dist/components/state-view/useStateView.d.ts.map +1 -0
  96. package/dist/components/state-view/useStateView.js +129 -0
  97. package/dist/components/state-view/useStateView.js.map +1 -0
  98. package/dist/contexts/GraphEditContext.d.ts +20 -0
  99. package/dist/contexts/GraphEditContext.d.ts.map +1 -0
  100. package/dist/contexts/GraphEditContext.js +8 -0
  101. package/dist/contexts/GraphEditContext.js.map +1 -0
  102. package/dist/contexts/TooltipPortalContext.d.ts +8 -0
  103. package/dist/contexts/TooltipPortalContext.d.ts.map +1 -0
  104. package/dist/contexts/TooltipPortalContext.js +8 -0
  105. package/dist/contexts/TooltipPortalContext.js.map +1 -0
  106. package/dist/edges/CustomEdge.d.ts +24 -0
  107. package/dist/edges/CustomEdge.d.ts.map +1 -0
  108. package/dist/edges/CustomEdge.js +222 -0
  109. package/dist/edges/CustomEdge.js.map +1 -0
  110. package/dist/edges/GenericEdge.d.ts +18 -0
  111. package/dist/edges/GenericEdge.d.ts.map +1 -0
  112. package/dist/edges/GenericEdge.js +10 -0
  113. package/dist/edges/GenericEdge.js.map +1 -0
  114. package/dist/graphify/anchor.d.ts +28 -0
  115. package/dist/graphify/anchor.d.ts.map +1 -0
  116. package/dist/graphify/anchor.js +132 -0
  117. package/dist/graphify/anchor.js.map +1 -0
  118. package/dist/graphify/consolidated.d.ts +210 -0
  119. package/dist/graphify/consolidated.d.ts.map +1 -0
  120. package/dist/graphify/consolidated.js +11 -0
  121. package/dist/graphify/consolidated.js.map +1 -0
  122. package/dist/graphify/ids.d.ts +19 -0
  123. package/dist/graphify/ids.d.ts.map +1 -0
  124. package/dist/graphify/ids.js +46 -0
  125. package/dist/graphify/ids.js.map +1 -0
  126. package/dist/graphify/index.d.ts +18 -0
  127. package/dist/graphify/index.d.ts.map +1 -0
  128. package/dist/graphify/index.js +12 -0
  129. package/dist/graphify/index.js.map +1 -0
  130. package/dist/graphify/kind.d.ts +23 -0
  131. package/dist/graphify/kind.d.ts.map +1 -0
  132. package/dist/graphify/kind.js +77 -0
  133. package/dist/graphify/kind.js.map +1 -0
  134. package/dist/graphify/resolve.d.ts +48 -0
  135. package/dist/graphify/resolve.d.ts.map +1 -0
  136. package/dist/graphify/resolve.js +83 -0
  137. package/dist/graphify/resolve.js.map +1 -0
  138. package/dist/graphify/signature.d.ts +87 -0
  139. package/dist/graphify/signature.d.ts.map +1 -0
  140. package/dist/graphify/signature.js +276 -0
  141. package/dist/graphify/signature.js.map +1 -0
  142. package/dist/graphify/types.d.ts +141 -0
  143. package/dist/graphify/types.d.ts.map +1 -0
  144. package/dist/graphify/types.js +8 -0
  145. package/dist/graphify/types.js.map +1 -0
  146. package/dist/hooks/useElkLayout.d.ts +66 -0
  147. package/dist/hooks/useElkLayout.d.ts.map +1 -0
  148. package/dist/hooks/useElkLayout.js +136 -0
  149. package/dist/hooks/useElkLayout.js.map +1 -0
  150. package/dist/hooks/usePathBasedEvents.d.ts +42 -0
  151. package/dist/hooks/usePathBasedEvents.d.ts.map +1 -0
  152. package/dist/hooks/usePathBasedEvents.js +119 -0
  153. package/dist/hooks/usePathBasedEvents.js.map +1 -0
  154. package/dist/hooks/useSequenceLayout.d.ts +186 -0
  155. package/dist/hooks/useSequenceLayout.d.ts.map +1 -0
  156. package/dist/hooks/useSequenceLayout.js +327 -0
  157. package/dist/hooks/useSequenceLayout.js.map +1 -0
  158. package/dist/hooks/useUndoRedo.d.ts +80 -0
  159. package/dist/hooks/useUndoRedo.d.ts.map +1 -0
  160. package/dist/hooks/useUndoRedo.js +70 -0
  161. package/dist/hooks/useUndoRedo.js.map +1 -0
  162. package/dist/index.d.ts +73 -0
  163. package/dist/index.d.ts.map +1 -0
  164. package/dist/index.js +51 -0
  165. package/dist/index.js.map +1 -0
  166. package/dist/nodes/CustomNode.d.ts +28 -0
  167. package/dist/nodes/CustomNode.d.ts.map +1 -0
  168. package/dist/nodes/CustomNode.js +820 -0
  169. package/dist/nodes/CustomNode.js.map +1 -0
  170. package/dist/nodes/GenericNode.d.ts +20 -0
  171. package/dist/nodes/GenericNode.d.ts.map +1 -0
  172. package/dist/nodes/GenericNode.js +20 -0
  173. package/dist/nodes/GenericNode.js.map +1 -0
  174. package/dist/nodes/otel/OtelBoundaryNode.d.ts +55 -0
  175. package/dist/nodes/otel/OtelBoundaryNode.d.ts.map +1 -0
  176. package/dist/nodes/otel/OtelBoundaryNode.js +81 -0
  177. package/dist/nodes/otel/OtelBoundaryNode.js.map +1 -0
  178. package/dist/nodes/otel/OtelEventNode.d.ts +59 -0
  179. package/dist/nodes/otel/OtelEventNode.d.ts.map +1 -0
  180. package/dist/nodes/otel/OtelEventNode.js +82 -0
  181. package/dist/nodes/otel/OtelEventNode.js.map +1 -0
  182. package/dist/nodes/otel/OtelResourceNode.d.ts +53 -0
  183. package/dist/nodes/otel/OtelResourceNode.d.ts.map +1 -0
  184. package/dist/nodes/otel/OtelResourceNode.js +105 -0
  185. package/dist/nodes/otel/OtelResourceNode.js.map +1 -0
  186. package/dist/nodes/otel/OtelScopeNode.d.ts +53 -0
  187. package/dist/nodes/otel/OtelScopeNode.d.ts.map +1 -0
  188. package/dist/nodes/otel/OtelScopeNode.js +81 -0
  189. package/dist/nodes/otel/OtelScopeNode.js.map +1 -0
  190. package/dist/nodes/otel/OtelSpanConventionNode.d.ts +61 -0
  191. package/dist/nodes/otel/OtelSpanConventionNode.d.ts.map +1 -0
  192. package/dist/nodes/otel/OtelSpanConventionNode.js +131 -0
  193. package/dist/nodes/otel/OtelSpanConventionNode.js.map +1 -0
  194. package/dist/nodes/otel/index.d.ts +17 -0
  195. package/dist/nodes/otel/index.d.ts.map +1 -0
  196. package/dist/nodes/otel/index.js +13 -0
  197. package/dist/nodes/otel/index.js.map +1 -0
  198. package/dist/nodes/otel/shared/NodeBadges.d.ts +10 -0
  199. package/dist/nodes/otel/shared/NodeBadges.d.ts.map +1 -0
  200. package/dist/nodes/otel/shared/NodeBadges.js +178 -0
  201. package/dist/nodes/otel/shared/NodeBadges.js.map +1 -0
  202. package/dist/nodes/otel/shared/NodeContent.d.ts +10 -0
  203. package/dist/nodes/otel/shared/NodeContent.d.ts.map +1 -0
  204. package/dist/nodes/otel/shared/NodeContent.js +96 -0
  205. package/dist/nodes/otel/shared/NodeContent.js.map +1 -0
  206. package/dist/nodes/otel/shared/index.d.ts +8 -0
  207. package/dist/nodes/otel/shared/index.d.ts.map +1 -0
  208. package/dist/nodes/otel/shared/index.js +8 -0
  209. package/dist/nodes/otel/shared/index.js.map +1 -0
  210. package/dist/nodes/otel/shared/types.d.ts +129 -0
  211. package/dist/nodes/otel/shared/types.d.ts.map +1 -0
  212. package/dist/nodes/otel/shared/types.js +5 -0
  213. package/dist/nodes/otel/shared/types.js.map +1 -0
  214. package/dist/nodes/otel/shared/useNodeBehavior.d.ts +42 -0
  215. package/dist/nodes/otel/shared/useNodeBehavior.d.ts.map +1 -0
  216. package/dist/nodes/otel/shared/useNodeBehavior.js +61 -0
  217. package/dist/nodes/otel/shared/useNodeBehavior.js.map +1 -0
  218. package/dist/pierre/PierreFileView.d.ts +17 -0
  219. package/dist/pierre/PierreFileView.d.ts.map +1 -0
  220. package/dist/pierre/PierreFileView.js +46 -0
  221. package/dist/pierre/PierreFileView.js.map +1 -0
  222. package/dist/pierre/PierreSnippetView.d.ts +28 -0
  223. package/dist/pierre/PierreSnippetView.d.ts.map +1 -0
  224. package/dist/pierre/PierreSnippetView.js +105 -0
  225. package/dist/pierre/PierreSnippetView.js.map +1 -0
  226. package/dist/pierre/PierreThroughlineCodeView.d.ts +22 -0
  227. package/dist/pierre/PierreThroughlineCodeView.d.ts.map +1 -0
  228. package/dist/pierre/PierreThroughlineCodeView.js +206 -0
  229. package/dist/pierre/PierreThroughlineCodeView.js.map +1 -0
  230. package/dist/pierre/constructColors.d.ts +24 -0
  231. package/dist/pierre/constructColors.d.ts.map +1 -0
  232. package/dist/pierre/constructColors.js +91 -0
  233. package/dist/pierre/constructColors.js.map +1 -0
  234. package/dist/pierre/index.d.ts +12 -0
  235. package/dist/pierre/index.d.ts.map +1 -0
  236. package/dist/pierre/index.js +7 -0
  237. package/dist/pierre/index.js.map +1 -0
  238. package/dist/pierre/pierreBackground.d.ts +15 -0
  239. package/dist/pierre/pierreBackground.d.ts.map +1 -0
  240. package/dist/pierre/pierreBackground.js +31 -0
  241. package/dist/pierre/pierreBackground.js.map +1 -0
  242. package/dist/pierre/pierreFileLang.d.ts +27 -0
  243. package/dist/pierre/pierreFileLang.d.ts.map +1 -0
  244. package/dist/pierre/pierreFileLang.js +52 -0
  245. package/dist/pierre/pierreFileLang.js.map +1 -0
  246. package/dist/pierre/pierreSyntaxTheme.d.ts +11 -0
  247. package/dist/pierre/pierreSyntaxTheme.d.ts.map +1 -0
  248. package/dist/pierre/pierreSyntaxTheme.js +20 -0
  249. package/dist/pierre/pierreSyntaxTheme.js.map +1 -0
  250. package/dist/pierre/scrollAnchor.d.ts +5 -0
  251. package/dist/pierre/scrollAnchor.d.ts.map +1 -0
  252. package/dist/pierre/scrollAnchor.js +9 -0
  253. package/dist/pierre/scrollAnchor.js.map +1 -0
  254. package/dist/pierre/sliceSnippet.d.ts +10 -0
  255. package/dist/pierre/sliceSnippet.d.ts.map +1 -0
  256. package/dist/pierre/sliceSnippet.js +16 -0
  257. package/dist/pierre/sliceSnippet.js.map +1 -0
  258. package/dist/pierre/syntaxTokens.d.ts +11 -0
  259. package/dist/pierre/syntaxTokens.d.ts.map +1 -0
  260. package/dist/pierre/syntaxTokens.js +51 -0
  261. package/dist/pierre/syntaxTokens.js.map +1 -0
  262. package/dist/stories/Subsystem/ComponentGraph/fixtures.d.ts +8 -0
  263. package/dist/stories/Subsystem/ComponentGraph/fixtures.d.ts.map +1 -0
  264. package/dist/stories/Subsystem/ComponentGraph/fixtures.js +116 -0
  265. package/dist/stories/Subsystem/ComponentGraph/fixtures.js.map +1 -0
  266. package/dist/subsystem/ComponentDeclaration.d.ts +87 -0
  267. package/dist/subsystem/ComponentDeclaration.d.ts.map +1 -0
  268. package/dist/subsystem/ComponentDeclaration.js +374 -0
  269. package/dist/subsystem/ComponentDeclaration.js.map +1 -0
  270. package/dist/subsystem/FileDrawer.d.ts +17 -0
  271. package/dist/subsystem/FileDrawer.d.ts.map +1 -0
  272. package/dist/subsystem/FileDrawer.js +72 -0
  273. package/dist/subsystem/FileDrawer.js.map +1 -0
  274. package/dist/subsystem/GraphLayoutCover.d.ts +20 -0
  275. package/dist/subsystem/GraphLayoutCover.d.ts.map +1 -0
  276. package/dist/subsystem/GraphLayoutCover.js +42 -0
  277. package/dist/subsystem/GraphLayoutCover.js.map +1 -0
  278. package/dist/subsystem/SubsystemComponentGraph.d.ts +96 -0
  279. package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -0
  280. package/dist/subsystem/SubsystemComponentGraph.js +1059 -0
  281. package/dist/subsystem/SubsystemComponentGraph.js.map +1 -0
  282. package/dist/subsystem/SubsystemFileTree.d.ts +24 -0
  283. package/dist/subsystem/SubsystemFileTree.d.ts.map +1 -0
  284. package/dist/subsystem/SubsystemFileTree.js +150 -0
  285. package/dist/subsystem/SubsystemFileTree.js.map +1 -0
  286. package/dist/subsystem/declarationRef.d.ts +39 -0
  287. package/dist/subsystem/declarationRef.d.ts.map +1 -0
  288. package/dist/subsystem/declarationRef.js +32 -0
  289. package/dist/subsystem/declarationRef.js.map +1 -0
  290. package/dist/subsystem/formatDeclaration.d.ts +11 -0
  291. package/dist/subsystem/formatDeclaration.d.ts.map +1 -0
  292. package/dist/subsystem/formatDeclaration.js +146 -0
  293. package/dist/subsystem/formatDeclaration.js.map +1 -0
  294. package/dist/subsystem/model.d.ts +353 -0
  295. package/dist/subsystem/model.d.ts.map +1 -0
  296. package/dist/subsystem/model.js +503 -0
  297. package/dist/subsystem/model.js.map +1 -0
  298. package/dist/subsystem/nodes.d.ts +69 -0
  299. package/dist/subsystem/nodes.d.ts.map +1 -0
  300. package/dist/subsystem/nodes.js +289 -0
  301. package/dist/subsystem/nodes.js.map +1 -0
  302. package/dist/subsystem/paths.d.ts +63 -0
  303. package/dist/subsystem/paths.d.ts.map +1 -0
  304. package/dist/subsystem/paths.js +86 -0
  305. package/dist/subsystem/paths.js.map +1 -0
  306. package/dist/subsystem/tokenizeComponent.d.ts +20 -0
  307. package/dist/subsystem/tokenizeComponent.d.ts.map +1 -0
  308. package/dist/subsystem/tokenizeComponent.js +56 -0
  309. package/dist/subsystem/tokenizeComponent.js.map +1 -0
  310. package/dist/subsystem/tokenizeFormatted.d.ts +12 -0
  311. package/dist/subsystem/tokenizeFormatted.d.ts.map +1 -0
  312. package/dist/subsystem/tokenizeFormatted.js +13 -0
  313. package/dist/subsystem/tokenizeFormatted.js.map +1 -0
  314. package/dist/utils/animationMapping.d.ts +53 -0
  315. package/dist/utils/animationMapping.d.ts.map +1 -0
  316. package/dist/utils/animationMapping.js +126 -0
  317. package/dist/utils/animationMapping.js.map +1 -0
  318. package/dist/utils/canvasBounds.d.ts +50 -0
  319. package/dist/utils/canvasBounds.d.ts.map +1 -0
  320. package/dist/utils/canvasBounds.js +88 -0
  321. package/dist/utils/canvasBounds.js.map +1 -0
  322. package/dist/utils/elkLayout.d.ts +137 -0
  323. package/dist/utils/elkLayout.d.ts.map +1 -0
  324. package/dist/utils/elkLayout.js +596 -0
  325. package/dist/utils/elkLayout.js.map +1 -0
  326. package/dist/utils/graphConverter.d.ts +18 -0
  327. package/dist/utils/graphConverter.d.ts.map +1 -0
  328. package/dist/utils/graphConverter.js +114 -0
  329. package/dist/utils/graphConverter.js.map +1 -0
  330. package/dist/utils/iconResolver.d.ts +29 -0
  331. package/dist/utils/iconResolver.d.ts.map +1 -0
  332. package/dist/utils/iconResolver.js +30 -0
  333. package/dist/utils/iconResolver.js.map +1 -0
  334. package/dist/utils/orientationUtils.d.ts +19 -0
  335. package/dist/utils/orientationUtils.d.ts.map +1 -0
  336. package/dist/utils/orientationUtils.js +62 -0
  337. package/dist/utils/orientationUtils.js.map +1 -0
  338. package/package.json +80 -0
  339. package/src/components/ConfigurationSelector.tsx +133 -0
  340. package/src/components/GraphRenderer.tsx +3195 -0
  341. package/src/components/MultiCanvasRenderer.tsx +295 -0
  342. package/src/components/NodeTooltip.tsx +279 -0
  343. package/src/components/PendingChanges.test.tsx +375 -0
  344. package/src/components/SelectionSidebar.tsx +352 -0
  345. package/src/components/SequenceDiagramRenderer.tsx +1156 -0
  346. package/src/components/WorkflowSequenceDiagram.tsx +270 -0
  347. package/src/components/dashboard/DashboardRenderer.tsx +317 -0
  348. package/src/components/dashboard/MetricPanel.tsx +254 -0
  349. package/src/components/dashboard/MockDataProvider.ts +330 -0
  350. package/src/components/dashboard/components/BarChart.tsx +299 -0
  351. package/src/components/dashboard/components/LineChart.tsx +279 -0
  352. package/src/components/dashboard/components/MetricCard.tsx +270 -0
  353. package/src/components/dashboard/components/SourceLink.tsx +63 -0
  354. package/src/components/dashboard/components/TimeRangeSelector.tsx +280 -0
  355. package/src/components/dashboard/components/index.ts +5 -0
  356. package/src/components/dashboard/index.ts +47 -0
  357. package/src/components/dashboard/types.ts +126 -0
  358. package/src/components/session-events/SessionEventFeed.tsx +1797 -0
  359. package/src/components/session-events/index.ts +13 -0
  360. package/src/components/state-view/PipelineView.tsx +347 -0
  361. package/src/components/state-view/index.ts +14 -0
  362. package/src/components/state-view/types.ts +261 -0
  363. package/src/components/state-view/useStateView.ts +205 -0
  364. package/src/contexts/GraphEditContext.tsx +27 -0
  365. package/src/contexts/TooltipPortalContext.ts +8 -0
  366. package/src/edges/CustomEdge.tsx +402 -0
  367. package/src/edges/GenericEdge.tsx +36 -0
  368. package/src/graphify/anchor.test.ts +124 -0
  369. package/src/graphify/anchor.ts +160 -0
  370. package/src/graphify/consolidated.ts +246 -0
  371. package/src/graphify/ids.ts +48 -0
  372. package/src/graphify/index.ts +72 -0
  373. package/src/graphify/kind.test.ts +108 -0
  374. package/src/graphify/kind.ts +120 -0
  375. package/src/graphify/resolve.test.ts +89 -0
  376. package/src/graphify/resolve.ts +115 -0
  377. package/src/graphify/signature.test.ts +278 -0
  378. package/src/graphify/signature.ts +354 -0
  379. package/src/graphify/types.ts +164 -0
  380. package/src/hooks/useElkLayout.test.ts +134 -0
  381. package/src/hooks/useElkLayout.ts +191 -0
  382. package/src/hooks/usePathBasedEvents.ts +192 -0
  383. package/src/hooks/useSequenceLayout.ts +543 -0
  384. package/src/hooks/useUndoRedo.ts +144 -0
  385. package/src/index.ts +341 -0
  386. package/src/nodes/CustomNode.tsx +1231 -0
  387. package/src/nodes/GenericNode.tsx +55 -0
  388. package/src/nodes/otel/OtelBoundaryNode.tsx +224 -0
  389. package/src/nodes/otel/OtelEventNode.tsx +225 -0
  390. package/src/nodes/otel/OtelResourceNode.tsx +251 -0
  391. package/src/nodes/otel/OtelScopeNode.tsx +221 -0
  392. package/src/nodes/otel/OtelSpanConventionNode.tsx +295 -0
  393. package/src/nodes/otel/index.ts +23 -0
  394. package/src/nodes/otel/shared/NodeBadges.tsx +295 -0
  395. package/src/nodes/otel/shared/NodeContent.tsx +204 -0
  396. package/src/nodes/otel/shared/index.ts +8 -0
  397. package/src/nodes/otel/shared/types.ts +138 -0
  398. package/src/nodes/otel/shared/useNodeBehavior.ts +114 -0
  399. package/src/pierre/PierreFileView.tsx +81 -0
  400. package/src/pierre/PierreSnippetView.tsx +184 -0
  401. package/src/pierre/PierreThroughlineCodeView.tsx +304 -0
  402. package/src/pierre/constructColors.test.ts +52 -0
  403. package/src/pierre/constructColors.ts +112 -0
  404. package/src/pierre/index.ts +18 -0
  405. package/src/pierre/pierreBackground.ts +33 -0
  406. package/src/pierre/pierreFileLang.test.ts +26 -0
  407. package/src/pierre/pierreFileLang.ts +55 -0
  408. package/src/pierre/pierreSyntaxTheme.ts +23 -0
  409. package/src/pierre/scrollAnchor.test.ts +13 -0
  410. package/src/pierre/scrollAnchor.ts +11 -0
  411. package/src/pierre/sliceSnippet.test.ts +21 -0
  412. package/src/pierre/sliceSnippet.ts +31 -0
  413. package/src/pierre/syntaxTokens.test.ts +35 -0
  414. package/src/pierre/syntaxTokens.ts +60 -0
  415. package/src/stories/Audit/BoundaryNodes.stories.tsx +385 -0
  416. package/src/stories/Audit/CanvasEdgeTypes.stories.tsx +1448 -0
  417. package/src/stories/Audit/CanvasNodeTypes.stories.tsx +1049 -0
  418. package/src/stories/Audit/ColorPriority.stories.tsx +895 -0
  419. package/src/stories/Audit/DiamondBadges.stories.tsx +629 -0
  420. package/src/stories/Audit/NodeDimensionsTesting.stories.tsx +724 -0
  421. package/src/stories/Audit/NodeFieldsAudit.stories.tsx +996 -0
  422. package/src/stories/Audit/NodeFontSizeTesting.stories.tsx +715 -0
  423. package/src/stories/Audit/NodeShapes.stories.tsx +1208 -0
  424. package/src/stories/Audit/WideNodesTesting.stories.tsx +1045 -0
  425. package/src/stories/Components/DashboardRenderer.stories.tsx +263 -0
  426. package/src/stories/Components/GraphRenderer.stories.tsx +3236 -0
  427. package/src/stories/Components/MultiCanvasRenderer.stories.tsx +370 -0
  428. package/src/stories/Components/SequenceDiagram.stories.tsx +255 -0
  429. package/src/stories/Components/StateView.stories.tsx +417 -0
  430. package/src/stories/Components/TraceViewer.stories.tsx +442 -0
  431. package/src/stories/Components/WorkflowSequenceDiagram.stories.tsx +802 -0
  432. package/src/stories/Features/AnimationWorkshop.stories.tsx +727 -0
  433. package/src/stories/Features/ChangeTypeVisual.stories.tsx +67 -0
  434. package/src/stories/Features/EventDrivenAnimations.stories.tsx +513 -0
  435. package/src/stories/Features/MultiConfig.stories.tsx +539 -0
  436. package/src/stories/Introduction.mdx +34 -0
  437. package/src/stories/Layout/ElkEdgeRouting.stories.tsx +539 -0
  438. package/src/stories/Layout/GraphOrientation.stories.tsx +500 -0
  439. package/src/stories/Layout/MultiDirectionalConnections.stories.tsx +352 -0
  440. package/src/stories/Nodes/NodeDefinitionComparison.stories.tsx +560 -0
  441. package/src/stories/Nodes/NodeNameFallbacks.stories.tsx +491 -0
  442. package/src/stories/Nodes/NumericColors.stories.tsx +440 -0
  443. package/src/stories/OTEL/EventNameDisplay.stories.tsx +694 -0
  444. package/src/stories/OTEL/EventNameFallback.stories.tsx +578 -0
  445. package/src/stories/OTEL/OtelComponents.stories.tsx +422 -0
  446. package/src/stories/OTEL/OtelNodeTypesPrototype.stories.tsx +806 -0
  447. package/src/stories/OTEL/RawEventCards.stories.tsx +57 -0
  448. package/src/stories/OTEL/SpanBadges.stories.tsx +840 -0
  449. package/src/stories/OTEL/ValidationEventsCanvas.stories.tsx +209 -0
  450. package/src/stories/Pierre/CodeView.stories.tsx +219 -0
  451. package/src/stories/RealWorld/BacklogMdCanvases.stories.tsx +721 -0
  452. package/src/stories/RealWorld/FileCitySequence.stories.tsx +516 -0
  453. package/src/stories/RealWorld/RealCanvasFiles.stories.tsx +336 -0
  454. package/src/stories/Subsystem/ComponentDeclarationAudit.stories.tsx +321 -0
  455. package/src/stories/Subsystem/ComponentGraph/Appearance.stories.tsx +365 -0
  456. package/src/stories/Subsystem/ComponentGraph/Basics.stories.tsx +137 -0
  457. package/src/stories/Subsystem/ComponentGraph/Captures.stories.tsx +238 -0
  458. package/src/stories/Subsystem/ComponentGraph/DetailPanel.stories.tsx +315 -0
  459. package/src/stories/Subsystem/ComponentGraph/Flows.stories.tsx +239 -0
  460. package/src/stories/Subsystem/ComponentGraph/FrameworkStereotype.stories.tsx +216 -0
  461. package/src/stories/Subsystem/ComponentGraph/GraphTitle.stories.tsx +70 -0
  462. package/src/stories/Subsystem/ComponentGraph/Processes.stories.tsx +68 -0
  463. package/src/stories/Subsystem/ComponentGraph/Scenarios.stories.tsx +959 -0
  464. package/src/stories/Subsystem/ComponentGraph/Spotlights.stories.tsx +681 -0
  465. package/src/stories/Subsystem/ComponentGraph/fixtures.ts +129 -0
  466. package/src/stories/__traces__/test-run.canvas.json +241 -0
  467. package/src/stories/data/activity-feed-analytics.dashboard.json +300 -0
  468. package/src/stories/data/file-city-images-transformed.otel.canvas.json +295 -0
  469. package/src/stories/data/file-city-workflows.json +269 -0
  470. package/src/stories/data/graph-converter-test-execution.json +443 -0
  471. package/src/stories/data/graph-converter-test.workflow.json +105 -0
  472. package/src/stories/data/graph-converter-validated-execution.json +58 -0
  473. package/src/stories/data/opencode-session-raw-events.json +273396 -0
  474. package/src/subsystem/ComponentDeclaration.tsx +643 -0
  475. package/src/subsystem/FileDrawer.tsx +106 -0
  476. package/src/subsystem/GraphLayoutCover.tsx +69 -0
  477. package/src/subsystem/SubsystemComponentGraph.tsx +1644 -0
  478. package/src/subsystem/SubsystemFileTree.tsx +190 -0
  479. package/src/subsystem/declarationRef.test.ts +33 -0
  480. package/src/subsystem/declarationRef.ts +63 -0
  481. package/src/subsystem/formatDeclaration.ts +174 -0
  482. package/src/subsystem/model.test.ts +244 -0
  483. package/src/subsystem/model.ts +850 -0
  484. package/src/subsystem/nodes.test.ts +56 -0
  485. package/src/subsystem/nodes.tsx +443 -0
  486. package/src/subsystem/paths.test.ts +123 -0
  487. package/src/subsystem/paths.ts +127 -0
  488. package/src/subsystem/tokenizeComponent.ts +70 -0
  489. package/src/subsystem/tokenizeFormatted.ts +19 -0
  490. package/src/utils/animationMapping.ts +166 -0
  491. package/src/utils/canvasBounds.ts +146 -0
  492. package/src/utils/elkLayout.test.ts +240 -0
  493. package/src/utils/elkLayout.ts +779 -0
  494. package/src/utils/graphConverter.ts +148 -0
  495. package/src/utils/iconResolver.tsx +53 -0
  496. package/src/utils/orientationUtils.ts +73 -0
@@ -0,0 +1,365 @@
1
+ import React, { useState } from 'react';
2
+ import '@xyflow/react/dist/style.css';
3
+ import type { Meta, StoryObj } from '@storybook/react';
4
+ import { ThemeProvider, defaultEditorTheme } from '@principal-ade/industry-theme';
5
+ import { SubsystemComponentGraph } from '../../../subsystem/SubsystemComponentGraph';
6
+ import type { SubsystemComponent, SubsystemComponentEdge } from '../../../subsystem/model';
7
+ import type { GraphifyComponentDetail } from '../../../graphify';
8
+ import { investigateOnlyComponents, investigateOnlyEdges } from './fixtures';
9
+
10
+ const meta = {
11
+ title: 'Subsystem/ComponentGraph/Appearance',
12
+ component: SubsystemComponentGraph,
13
+ parameters: {
14
+ layout: 'fullscreen',
15
+ },
16
+ tags: ['autodocs'],
17
+ decorators: [
18
+ (Story) => (
19
+ <ThemeProvider theme={defaultEditorTheme}>
20
+ <Story />
21
+ </ThemeProvider>
22
+ ),
23
+ ],
24
+ } satisfies Meta<typeof SubsystemComponentGraph>;
25
+
26
+ export default meta;
27
+ type Story = StoryObj<typeof meta>;
28
+
29
+ /** Same pipeline as Captures/InvestigateOnly with a narrower `maxNodeWidth` (140) — long names wrap. */
30
+ export const NarrowMaxWidth: Story = {
31
+ render: () => (
32
+ <div style={{ width: '100%', height: '100vh', display: 'flex', flexDirection: 'column' }}>
33
+ <SubsystemComponentGraph
34
+ components={investigateOnlyComponents}
35
+ edges={investigateOnlyEdges}
36
+ maxNodeWidth={140}
37
+ />
38
+ </div>
39
+ ),
40
+ };
41
+
42
+ // ---------------------------------------------------------------------------
43
+ // Naming-convention wrap check — one node per common symbol convention.
44
+ // ---------------------------------------------------------------------------
45
+ const namingConventionComponents: SubsystemComponent[] = [
46
+ {
47
+ id: 'camel',
48
+ name: 'accumulateToAgentSessionEvents',
49
+ construct: 'function',
50
+ file: 'src/event-processing/accumulator.ts',
51
+ purl: 'pkg:github/principal-ai/agent-monitoring',
52
+ symbol: 'accumulateToAgentSessionEvents',
53
+ },
54
+ {
55
+ id: 'snake',
56
+ name: 'repo_normalized_universal_event',
57
+ construct: 'interface',
58
+ file: 'src/event-processing/repo_normalized.ts',
59
+ purl: 'pkg:github/principal-ai/agent-monitoring',
60
+ symbol: 'repo_normalized_universal_event',
61
+ },
62
+ {
63
+ id: 'pascal',
64
+ name: 'RepoNormalizedUniversalAgentSessionEvent',
65
+ construct: 'class',
66
+ file: 'src/event-processing/RepoNormalized.ts',
67
+ purl: 'pkg:github/principal-ai/agent-monitoring',
68
+ symbol: 'RepoNormalizedUniversalAgentSessionEvent',
69
+ },
70
+ {
71
+ id: 'acronym',
72
+ name: 'ProcessSSEStreamForEventToken',
73
+ construct: 'function',
74
+ file: 'src/event-processing/sse.ts',
75
+ purl: 'pkg:github/principal-ai/agent-monitoring',
76
+ symbol: 'ProcessSSEStreamForEventToken',
77
+ },
78
+ {
79
+ id: 'method',
80
+ name: 'normalize',
81
+ construct: 'function',
82
+ file: 'src/session/SessionReader.ts',
83
+ purl: 'pkg:github/principal-ai/agent-monitoring',
84
+ symbol: 'SessionReader.normalize',
85
+ },
86
+ {
87
+ id: 'pkg',
88
+ name: 'principal-studio',
89
+ construct: 'external',
90
+ file: '',
91
+ purl: 'pkg:npm/@principal-ai/subsystems-studio',
92
+ symbol: '',
93
+ },
94
+ ];
95
+
96
+ const namingConventionEdges: SubsystemComponentEdge[] = [];
97
+
98
+ /** Nodes with compact `maxNodeWidth` so the different conventions visibly wrap
99
+ * at their word boundaries (camelCase, snake_case, PascalCase, acronyms). */
100
+ export const NamingConventions: Story = {
101
+ render: () => (
102
+ <div style={{ width: '100%', height: '100vh', display: 'flex', flexDirection: 'column' }}>
103
+ <SubsystemComponentGraph
104
+ components={namingConventionComponents}
105
+ edges={namingConventionEdges}
106
+ maxNodeWidth={180}
107
+ />
108
+ </div>
109
+ ),
110
+ };
111
+
112
+ // ---------------------------------------------------------------------------
113
+ // Kind variations — one column per kind (class / function / type / module /
114
+ // external), rows going bare → detailed. Click a node to see its declaration
115
+ // panel; type names inside it are clickable when they match another node here.
116
+ // ---------------------------------------------------------------------------
117
+ const variationPurl = 'pkg:github/principal-ai/agent-monitoring';
118
+
119
+ const kindVariationComponents: SubsystemComponent[] = [
120
+ // --- class: bare → members only → relationships only
121
+ {
122
+ id: 'cls-bare',
123
+ name: 'SessionStore',
124
+ construct: 'class',
125
+ file: 'src/session/SessionStore.ts',
126
+ purl: variationPurl,
127
+ purpose: 'no drill-down — renders a plain `class SessionStore`',
128
+ symbol: 'SessionStore',
129
+ layer: 1,
130
+ },
131
+ {
132
+ id: 'cls-members',
133
+ name: 'Transcoder',
134
+ construct: 'class',
135
+ file: 'src/session/Transcoder.ts',
136
+ purl: variationPurl,
137
+ purpose: 'members only — methods with typed params + returns, a typed field',
138
+ symbol: 'Transcoder',
139
+ layer: 1,
140
+ detail: {
141
+ kind: 'class',
142
+ methods: [
143
+ { nodeId: 'tm1', name: 'encode', parameters: [{ type: 'RawFrame' }], returnType: 'Uint8Array' },
144
+ { nodeId: 'tm2', name: 'decode', parameters: [{ type: 'Uint8Array' }], returnType: 'RawFrame' },
145
+ { nodeId: 'tm3', name: 'reset' },
146
+ ],
147
+ properties: [{ name: 'bufferSize', type: 'number' }],
148
+ extends: [],
149
+ implements: [],
150
+ instantiations: [],
151
+ references: [],
152
+ } satisfies GraphifyComponentDetail,
153
+ },
154
+ {
155
+ id: 'cls-relations',
156
+ name: 'HttpTransport',
157
+ construct: 'class',
158
+ file: 'src/transport/HttpTransport.ts',
159
+ purl: variationPurl,
160
+ purpose: 'relationships only — extends + implements, constructed-by comment; empty body elides the braces',
161
+ symbol: 'HttpTransport',
162
+ layer: 1,
163
+ detail: {
164
+ kind: 'class',
165
+ methods: [],
166
+ properties: [],
167
+ extends: ['BaseTransport'],
168
+ implements: ['Transport'],
169
+ instantiations: [{ nodeId: 'x1', name: 'main' }],
170
+ references: [],
171
+ } satisfies GraphifyComponentDetail,
172
+ },
173
+
174
+ // --- function: bare → signature only → signature + call relationships
175
+ {
176
+ id: 'fn-bare',
177
+ name: 'bootstrap',
178
+ construct: 'function',
179
+ file: 'src/bootstrap.ts',
180
+ purl: variationPurl,
181
+ purpose: 'no drill-down — renders a plain `function bootstrap()`',
182
+ symbol: 'bootstrap',
183
+ layer: 2,
184
+ },
185
+ {
186
+ id: 'fn-signature',
187
+ name: 'normalizeSession',
188
+ construct: 'function',
189
+ file: 'src/event-processing/normalize.ts',
190
+ purl: variationPurl,
191
+ purpose: 'signature only — named + positional (type-only) params, array return; no callers/callees comments',
192
+ symbol: 'normalizeSession',
193
+ layer: 2,
194
+ detail: {
195
+ kind: 'function',
196
+ parameters: [
197
+ { name: 'session', type: 'SessionRecord' },
198
+ { type: 'NormalizeOptions' },
199
+ ],
200
+ returnType: 'SessionEvent[]',
201
+ callers: [],
202
+ callees: [],
203
+ } satisfies GraphifyComponentDetail,
204
+ },
205
+ {
206
+ id: 'fn-calls',
207
+ name: 'mergeSessions',
208
+ construct: 'function',
209
+ file: 'src/session/merge.ts',
210
+ purl: variationPurl,
211
+ purpose: 'signature + call relationships — union-typed param, generic return, called-by / calls trailing comments',
212
+ symbol: 'mergeSessions',
213
+ layer: 2,
214
+ detail: {
215
+ kind: 'function',
216
+ parameters: [
217
+ { name: 'sessions', type: 'SessionRecord[]' },
218
+ { name: 'strategy', type: `'append' | 'replace'` },
219
+ ],
220
+ returnType: 'Promise<SessionEvent[]>',
221
+ callers: [{ nodeId: 'c1', name: 'capture-session', source_location: 'L88' }],
222
+ callees: [{ nodeId: 'c2', name: 'toUniversalEvents', source_location: 'L64' }],
223
+ } satisfies GraphifyComponentDetail,
224
+ },
225
+
226
+ // --- type: bare → fields only → fields + implementors + used-by
227
+ {
228
+ id: 'ty-bare',
229
+ name: 'RawFrame',
230
+ construct: 'interface',
231
+ file: 'src/session/RawFrame.ts',
232
+ purl: variationPurl,
233
+ purpose: 'no drill-down — renders a plain `interface RawFrame`',
234
+ symbol: 'RawFrame',
235
+ layer: 3,
236
+ },
237
+ {
238
+ id: 'ty-fields',
239
+ name: 'SessionRecord',
240
+ construct: 'interface',
241
+ file: 'src/session/transcript.ts',
242
+ purl: variationPurl,
243
+ purpose: 'fields only — typed interface body, nothing else',
244
+ symbol: 'SessionRecord',
245
+ layer: 3,
246
+ detail: {
247
+ kind: 'type',
248
+ properties: [
249
+ { name: 'id', type: 'string' },
250
+ { name: 'admittedSeq', type: 'number' },
251
+ ],
252
+ usedBy: [],
253
+ implementors: [],
254
+ } satisfies GraphifyComponentDetail,
255
+ },
256
+ {
257
+ id: 'ty-full',
258
+ name: 'Transport',
259
+ construct: 'interface',
260
+ file: 'src/transport/Transport.ts',
261
+ purl: variationPurl,
262
+ purpose: 'full — fields + implemented-by (clicks through to HttpTransport) + used-by comments',
263
+ symbol: 'Transport',
264
+ layer: 3,
265
+ detail: {
266
+ kind: 'type',
267
+ properties: [{ name: 'name', type: 'string' }],
268
+ usedBy: [{ nodeId: 'u1', name: 'main', context: 'parameter_type' }],
269
+ implementors: ['HttpTransport'],
270
+ } satisfies GraphifyComponentDetail,
271
+ },
272
+
273
+ // --- module: bare → exports only → exports + imports
274
+ {
275
+ id: 'mod-bare',
276
+ name: 'transcript',
277
+ construct: 'module',
278
+ file: 'src/session/transcript.ts',
279
+ purl: variationPurl,
280
+ purpose: 'no drill-down — symbol-less module named from its file basename',
281
+ symbol: '',
282
+ layer: 4,
283
+ },
284
+ {
285
+ id: 'mod-exports',
286
+ name: 'paths',
287
+ construct: 'module',
288
+ file: 'src/session/paths.ts',
289
+ purl: variationPurl,
290
+ purpose: 'exports only — export statement + defines comment',
291
+ symbol: '',
292
+ layer: 4,
293
+ detail: {
294
+ kind: 'module',
295
+ exports: ['extractToolName', 'extractFilePath'],
296
+ imports: [],
297
+ symbols: ['extractToolName', 'extractFilePath'],
298
+ } satisfies GraphifyComponentDetail,
299
+ },
300
+ {
301
+ id: 'mod-full',
302
+ name: 'index',
303
+ construct: 'module',
304
+ file: 'src/index.ts',
305
+ purl: variationPurl,
306
+ purpose: 'full — import statements + re-export statement + defines comment',
307
+ symbol: '',
308
+ layer: 4,
309
+ detail: {
310
+ kind: 'module',
311
+ exports: ['SessionReader', 'SessionStore'],
312
+ imports: [{ nodeId: 'i1', name: 'transcript', relation: 'imports_from' }],
313
+ symbols: ['SessionReader', 'SessionStore'],
314
+ } satisfies GraphifyComponentDetail,
315
+ },
316
+
317
+ // --- external: bare → labeled
318
+ {
319
+ id: 'ext-bare',
320
+ name: 'left-pad',
321
+ construct: 'external',
322
+ file: '',
323
+ purl: 'pkg:npm/left-pad',
324
+ purpose: 'no drill-down — renders a plain `external left-pad`',
325
+ symbol: '',
326
+ layer: 5,
327
+ },
328
+ {
329
+ id: 'ext-label',
330
+ name: 'principal-studio',
331
+ construct: 'external',
332
+ file: '',
333
+ purl: 'pkg:npm/@principal-ai/subsystems-studio',
334
+ purpose: 'labeled — the full purl as a quoted string literal',
335
+ symbol: '',
336
+ layer: 5,
337
+ detail: {
338
+ kind: 'external',
339
+ label: 'pkg:npm/@principal-ai/subsystems-studio',
340
+ } satisfies GraphifyComponentDetail,
341
+ },
342
+ ];
343
+
344
+ const kindVariationEdges: SubsystemComponentEdge[] = [];
345
+
346
+ function KindVariationsDemo() {
347
+ const [selected, setSelected] = useState<string | null>(null);
348
+ return (
349
+ <div style={{ width: '100%', height: '100vh', display: 'flex', flexDirection: 'column' }}>
350
+ <SubsystemComponentGraph
351
+ components={kindVariationComponents}
352
+ edges={kindVariationEdges}
353
+ onSelect={(id) => setSelected(id)}
354
+ />
355
+ <div style={{ marginTop: 8, fontFamily: 'monospace', fontSize: 12, color: '#aaa' }}>
356
+ columns: class · function · type · module · external — each goes bare → detailed
357
+ {selected ? ` · selected: ${selected}` : ''}
358
+ </div>
359
+ </div>
360
+ );
361
+ }
362
+
363
+ export const KindVariations: Story = {
364
+ render: () => <KindVariationsDemo />,
365
+ };
@@ -0,0 +1,137 @@
1
+ import React, { useState } from 'react';
2
+ import '@xyflow/react/dist/style.css';
3
+ import type { Meta, StoryObj } from '@storybook/react';
4
+ import { ThemeProvider, defaultEditorTheme } from '@principal-ade/industry-theme';
5
+ import { SubsystemComponentGraph } from '../../../subsystem/SubsystemComponentGraph';
6
+ import type { SubsystemComponent, SubsystemComponentEdge } from '../../../subsystem/model';
7
+ import { components, edges } from './fixtures';
8
+
9
+ const meta = {
10
+ title: 'Subsystem/ComponentGraph/Basics',
11
+ component: SubsystemComponentGraph,
12
+ parameters: {
13
+ layout: 'fullscreen',
14
+ },
15
+ tags: ['autodocs'],
16
+ decorators: [
17
+ (Story) => (
18
+ <ThemeProvider theme={defaultEditorTheme}>
19
+ <Story />
20
+ </ThemeProvider>
21
+ ),
22
+ ],
23
+ } satisfies Meta<typeof SubsystemComponentGraph>;
24
+
25
+ export default meta;
26
+ type Story = StoryObj<typeof meta>;
27
+
28
+ // ---------------------------------------------------------------------------
29
+ // Minimal: two nodes, one edge — the simplest possible label layout test.
30
+ // ---------------------------------------------------------------------------
31
+ const twoNodeComponents = components([
32
+ ['src', 'TranscriptParser', 'class', 'transcript.ts', 'pkg:github/principal-ai/agent-monitoring', 'parses session records'],
33
+ ['dst', 'SessionReader', 'class', 'SessionReader.ts', 'pkg:github/principal-ai/agent-monitoring', 'normalizes sessions into events'],
34
+ ]);
35
+
36
+ const twoNodeEdges = edges([
37
+ ['src', 'dst', 'imports'],
38
+ ]);
39
+
40
+ function TwoNodeDemo({ showEdgeLabels = true }: { showEdgeLabels?: boolean }) {
41
+ const [selected, setSelected] = useState<string | null>(null);
42
+ const [selectedEdge, setSelectedEdge] = useState<SubsystemComponentEdge | null>(null);
43
+ return (
44
+ <div style={{ width: '100%', height: '100vh', display: 'flex', flexDirection: 'column' }}>
45
+ <SubsystemComponentGraph
46
+ components={twoNodeComponents}
47
+ edges={twoNodeEdges}
48
+ onSelect={(id) => setSelected(id)}
49
+ onEdgeSelect={(e) => setSelectedEdge(e)}
50
+ showEdgeLabels={showEdgeLabels}
51
+ />
52
+ <div style={{ marginTop: 8, fontFamily: 'monospace', fontSize: 12, color: '#aaa' }}>
53
+ {selectedEdge
54
+ ? `edge: ${selectedEdge.from} --${selectedEdge.mechanism}--> ${selectedEdge.to}`
55
+ : selected
56
+ ? `selected: ${selected}`
57
+ : 'click a component or edge to select it'}
58
+ </div>
59
+ </div>
60
+ );
61
+ }
62
+
63
+ export const TwoNodeSingleEdge: Story = {
64
+ render: () => <TwoNodeDemo />,
65
+ };
66
+
67
+ export const TwoNodeNoLabels: Story = {
68
+ render: () => <TwoNodeDemo showEdgeLabels={false} />,
69
+ };
70
+
71
+ // ---------------------------------------------------------------------------
72
+ // Playground: control the number of nodes in left and right layers.
73
+ // All left nodes connect to all right nodes (fan-in / fan-out).
74
+ // ---------------------------------------------------------------------------
75
+ function PlaygroundDemo({ leftCount, rightCount, showEdgeLabels }: { leftCount: number; rightCount: number; showEdgeLabels: boolean }) {
76
+ const comps: SubsystemComponent[] = [];
77
+ const edgeList: SubsystemComponentEdge[] = [];
78
+
79
+ for (let i = 0; i < leftCount; i++) {
80
+ comps.push({
81
+ id: `l${i}`,
82
+ name: `Left${i}`,
83
+ construct: 'class',
84
+ file: `left${i}.ts`,
85
+ purl: 'pkg:github/principal-ai/playground',
86
+ purpose: `left layer node ${i}`,
87
+ });
88
+ }
89
+ for (let i = 0; i < rightCount; i++) {
90
+ comps.push({
91
+ id: `r${i}`,
92
+ name: `Right${i}`,
93
+ construct: 'class',
94
+ file: `right${i}.ts`,
95
+ purl: 'pkg:github/principal-ai/playground',
96
+ purpose: `right layer node ${i}`,
97
+ });
98
+ }
99
+
100
+ let ei = 0;
101
+ for (let i = 0; i < leftCount; i++) {
102
+ for (let j = 0; j < rightCount; j++) {
103
+ edgeList.push({ id: `e${ei++}`, from: `l${i}`, to: `r${j}`, mechanism: 'imports' });
104
+ }
105
+ }
106
+
107
+ return (
108
+ <div style={{ width: '100%', height: '100vh', display: 'flex', flexDirection: 'column' }}>
109
+ <SubsystemComponentGraph components={comps} edges={edgeList} showEdgeLabels={showEdgeLabels} />
110
+ </div>
111
+ );
112
+ }
113
+
114
+ export const Playground: Story = {
115
+ render: (args) => <PlaygroundDemo {...args} />,
116
+ args: {
117
+ leftCount: 1,
118
+ rightCount: 1,
119
+ showEdgeLabels: true,
120
+ },
121
+ argTypes: {
122
+ leftCount: { control: { type: 'number', min: 0, max: 6, step: 1 } },
123
+ rightCount: { control: { type: 'number', min: 0, max: 6, step: 1 } },
124
+ showEdgeLabels: { control: 'boolean' },
125
+ },
126
+ };
127
+
128
+ // ---------------------------------------------------------------------------
129
+ // Empty state
130
+ // ---------------------------------------------------------------------------
131
+ export const Empty: Story = {
132
+ render: () => (
133
+ <div style={{ width: '100%', height: '100vh', display: 'flex', flexDirection: 'column' }}>
134
+ <SubsystemComponentGraph components={[]} edges={[]} />
135
+ </div>
136
+ ),
137
+ };