@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,840 @@
1
+ import React, { useState } from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { GraphRenderer } from '../../components/GraphRenderer';
4
+ import type { ExtendedCanvas, WorkflowChip } from '@principal-ai/subsystems-core';
5
+ import { ThemeProvider, defaultEditorTheme } from '@principal-ade/industry-theme';
6
+
7
+ const meta = {
8
+ title: 'OTEL/SpanBadges',
9
+ component: GraphRenderer,
10
+ parameters: {
11
+ layout: 'centered',
12
+ },
13
+ tags: ['autodocs'],
14
+ decorators: [
15
+ (Story) => (
16
+ <ThemeProvider theme={defaultEditorTheme}>
17
+ <Story />
18
+ </ThemeProvider>
19
+ ),
20
+ ],
21
+ } satisfies Meta<typeof GraphRenderer>;
22
+
23
+ export default meta;
24
+ type Story = StoryObj<typeof meta>;
25
+
26
+ /**
27
+ * Canvas demonstrating all badge types on span convention nodes (hexagons)
28
+ */
29
+ const spanBadgesCanvas: ExtendedCanvas = {
30
+ nodes: [
31
+ // Status: Draft (gray D badge)
32
+ {
33
+ id: 'span-draft',
34
+ type: 'text',
35
+ x: 50,
36
+ y: 50,
37
+ width: 180,
38
+ height: 100,
39
+ text: 'Draft Span',
40
+ color: 0, // gray
41
+ pv: {
42
+ nodeType: 'otel-span-convention',
43
+ name: 'Draft Span',
44
+ description: 'Status: draft - shows gray "D" badge at top-left',
45
+ shape: 'hexagon',
46
+ icon: 'GitCommit',
47
+ status: 'draft',
48
+ otel: {
49
+ spanPattern: 'feature.design',
50
+ spanKind: 'INTERNAL',
51
+ },
52
+ },
53
+ },
54
+ // Status: Approved (blue A badge)
55
+ {
56
+ id: 'span-approved',
57
+ type: 'text',
58
+ x: 280,
59
+ y: 50,
60
+ width: 180,
61
+ height: 100,
62
+ text: 'Approved Span',
63
+ color: 5, // cyan
64
+ pv: {
65
+ nodeType: 'otel-span-convention',
66
+ name: 'Approved Span',
67
+ description: 'Status: approved - shows blue "A" badge at top-left',
68
+ shape: 'hexagon',
69
+ icon: 'GitCommit',
70
+ status: 'approved',
71
+ otel: {
72
+ spanPattern: 'feature.approved',
73
+ spanKind: 'INTERNAL',
74
+ },
75
+ },
76
+ },
77
+ // Status: Implemented (green I badge)
78
+ {
79
+ id: 'span-implemented',
80
+ type: 'text',
81
+ x: 510,
82
+ y: 50,
83
+ width: 180,
84
+ height: 100,
85
+ text: 'Implemented Span',
86
+ color: 4, // green
87
+ pv: {
88
+ nodeType: 'otel-span-convention',
89
+ name: 'Implemented Span',
90
+ description: 'Status: implemented - shows green "I" badge at top-left',
91
+ shape: 'hexagon',
92
+ icon: 'GitCommit',
93
+ status: 'implemented',
94
+ otel: {
95
+ spanPattern: 'feature.implemented',
96
+ spanKind: 'INTERNAL',
97
+ },
98
+ },
99
+ },
100
+ // Implemented + Sources (I + S badges)
101
+ {
102
+ id: 'span-with-sources',
103
+ type: 'text',
104
+ x: 50,
105
+ y: 200,
106
+ width: 180,
107
+ height: 100,
108
+ text: 'With Sources',
109
+ color: 4, // green
110
+ pv: {
111
+ nodeType: 'otel-span-convention',
112
+ name: 'With Sources',
113
+ description: 'Implemented with source files - shows "I" badge at top-left and green "S" badge at top-right. Hover to see file paths.',
114
+ shape: 'hexagon',
115
+ icon: 'FileCode',
116
+ status: 'implemented',
117
+ otel: {
118
+ spanPattern: 'feature.process',
119
+ spanKind: 'INTERNAL',
120
+ files: ['src/features/process.ts', 'src/features/handler.ts'],
121
+ },
122
+ },
123
+ },
124
+ // Approved + References (A + R badges)
125
+ {
126
+ id: 'span-with-refs',
127
+ type: 'text',
128
+ x: 280,
129
+ y: 200,
130
+ width: 180,
131
+ height: 100,
132
+ text: 'With References',
133
+ color: 6, // purple
134
+ pv: {
135
+ nodeType: 'otel-span-convention',
136
+ name: 'With References',
137
+ description: 'Approved with references - shows "A" badge at top-left and purple "R" badge at bottom-left. Hover to see reference URLs.',
138
+ shape: 'hexagon',
139
+ icon: 'ExternalLink',
140
+ status: 'approved',
141
+ references: ['https://opentelemetry.io/docs/specs/otel/trace/api/', '@opentelemetry/api'],
142
+ otel: {
143
+ spanPattern: 'http.client.request',
144
+ spanKind: 'CLIENT',
145
+ },
146
+ },
147
+ },
148
+ // All badges: I + S + R
149
+ {
150
+ id: 'span-all-badges',
151
+ type: 'text',
152
+ x: 510,
153
+ y: 200,
154
+ width: 180,
155
+ height: 100,
156
+ text: 'All Badges',
157
+ color: 2, // orange
158
+ pv: {
159
+ nodeType: 'otel-span-convention',
160
+ name: 'All Badges',
161
+ description: 'Implemented with sources and references - shows all three badges: "I" (top-left), "S" (top-right), "R" (bottom-left)',
162
+ shape: 'hexagon',
163
+ icon: 'Layers',
164
+ status: 'implemented',
165
+ references: ['https://docs.example.com/api'],
166
+ otel: {
167
+ spanPattern: 'api.handler',
168
+ spanKind: 'SERVER',
169
+ files: ['src/api/handler.ts'],
170
+ },
171
+ },
172
+ },
173
+ // Boundary: Outbound (arrow badge pointing up-right)
174
+ {
175
+ id: 'boundary-outbound',
176
+ type: 'text',
177
+ x: 50,
178
+ y: 350,
179
+ width: 180,
180
+ height: 100,
181
+ text: 'Outbound Boundary',
182
+ color: 5, // cyan
183
+ pv: {
184
+ nodeType: 'otel-boundary',
185
+ name: 'Outbound Boundary',
186
+ description: 'Outbound boundary span - shows cyan arrow badge pointing up-right on the right edge, indicating calls TO external systems',
187
+ shape: 'hexagon',
188
+ icon: 'ArrowUpRight',
189
+ status: 'implemented',
190
+ boundary: {
191
+ direction: 'outbound',
192
+ node: { 'pv.event.name': 'external.api.response' },
193
+ },
194
+ otel: {
195
+ spanPattern: 'http.client.request',
196
+ spanKind: 'CLIENT',
197
+ },
198
+ },
199
+ },
200
+ // Boundary: Inbound (arrow badge pointing down-left)
201
+ {
202
+ id: 'boundary-inbound',
203
+ type: 'text',
204
+ x: 280,
205
+ y: 350,
206
+ width: 180,
207
+ height: 100,
208
+ text: 'Inbound Boundary',
209
+ color: 5, // cyan
210
+ pv: {
211
+ nodeType: 'otel-boundary',
212
+ name: 'Inbound Boundary',
213
+ description: 'Inbound boundary span - shows cyan arrow badge pointing down-left on the left edge, indicating calls FROM external systems',
214
+ shape: 'hexagon',
215
+ icon: 'ArrowDownLeft',
216
+ status: 'approved',
217
+ boundary: {
218
+ direction: 'inbound',
219
+ node: { 'pv.event.name': 'webhook.payload' },
220
+ },
221
+ otel: {
222
+ spanPattern: 'http.server.request',
223
+ spanKind: 'SERVER',
224
+ },
225
+ },
226
+ },
227
+ // Draft with references only (D + R)
228
+ {
229
+ id: 'span-draft-with-refs',
230
+ type: 'text',
231
+ x: 510,
232
+ y: 350,
233
+ width: 180,
234
+ height: 100,
235
+ text: 'Draft + Refs',
236
+ color: 0, // gray
237
+ pv: {
238
+ nodeType: 'otel-span-convention',
239
+ name: 'Draft + Refs',
240
+ description: 'Draft span with references - shows "D" badge and "R" badge but no "S" badge since not yet implemented',
241
+ shape: 'hexagon',
242
+ icon: 'BookOpen',
243
+ status: 'draft',
244
+ references: ['https://opentelemetry.io/docs/specs/semconv/database/'],
245
+ otel: {
246
+ spanPattern: 'db.query',
247
+ spanKind: 'CLIENT',
248
+ },
249
+ },
250
+ },
251
+ ],
252
+ edges: [],
253
+ pv: {
254
+ version: '1.0.0',
255
+ name: 'Span Badges Demo',
256
+ description: 'Demonstrates badge types on span convention nodes',
257
+ edgeTypes: {},
258
+ },
259
+ };
260
+
261
+ export const AllBadgeTypes: Story = {
262
+ args: {
263
+ canvas: spanBadgesCanvas,
264
+ width: 750,
265
+ height: 520,
266
+ },
267
+ parameters: {
268
+ docs: {
269
+ description: {
270
+ story: `
271
+ **Span Badges Overview**
272
+
273
+ Badges provide at-a-glance status information on span convention nodes:
274
+
275
+ | Position | Badge | Color | Meaning |
276
+ |----------|-------|-------|---------|
277
+ | Top-Left | **D** | Gray | Draft - being designed |
278
+ | Top-Left | **A** | Blue | Approved - ready to implement |
279
+ | Top-Left | **I** | Green | Implemented - code exists |
280
+ | Top-Right | **S** | Green | Has source files linked |
281
+ | Bottom-Left | **R** | Purple | Has external references |
282
+ | Right Edge | **↗** | Cyan | Outbound boundary |
283
+ | Left Edge | **↙** | Cyan | Inbound boundary |
284
+
285
+ **Row 1**: Status badges only (D, A, I)
286
+ **Row 2**: Status + metadata badges (I+S, A+R, I+S+R)
287
+ **Row 3**: Boundary badges and combinations
288
+ `,
289
+ },
290
+ },
291
+ },
292
+ };
293
+
294
+ /**
295
+ * Canvas showing implementation lifecycle progression
296
+ */
297
+ const lifecycleCanvas: ExtendedCanvas = {
298
+ nodes: [
299
+ {
300
+ id: 'lifecycle-draft',
301
+ type: 'text',
302
+ x: 50,
303
+ y: 100,
304
+ width: 160,
305
+ height: 90,
306
+ text: 'Planning',
307
+ color: 0,
308
+ pv: {
309
+ nodeType: 'otel-span-convention',
310
+ name: 'Planning',
311
+ description: 'Step 1: Span is being designed',
312
+ shape: 'hexagon',
313
+ icon: 'PenTool',
314
+ status: 'draft',
315
+ otel: {
316
+ spanPattern: 'user.action',
317
+ spanKind: 'INTERNAL',
318
+ },
319
+ },
320
+ },
321
+ {
322
+ id: 'lifecycle-approved',
323
+ type: 'text',
324
+ x: 260,
325
+ y: 100,
326
+ width: 160,
327
+ height: 90,
328
+ text: 'Approved',
329
+ color: 5,
330
+ pv: {
331
+ nodeType: 'otel-span-convention',
332
+ name: 'Approved',
333
+ description: 'Step 2: Design reviewed and approved',
334
+ shape: 'hexagon',
335
+ icon: 'CheckCircle',
336
+ status: 'approved',
337
+ references: ['https://otel.spec/trace'],
338
+ otel: {
339
+ spanPattern: 'user.action',
340
+ spanKind: 'INTERNAL',
341
+ },
342
+ },
343
+ },
344
+ {
345
+ id: 'lifecycle-implemented',
346
+ type: 'text',
347
+ x: 470,
348
+ y: 100,
349
+ width: 160,
350
+ height: 90,
351
+ text: 'Implemented',
352
+ color: 4,
353
+ pv: {
354
+ nodeType: 'otel-span-convention',
355
+ name: 'Implemented',
356
+ description: 'Step 3: Code written and linked',
357
+ shape: 'hexagon',
358
+ icon: 'Code',
359
+ status: 'implemented',
360
+ references: ['https://otel.spec/trace'],
361
+ otel: {
362
+ spanPattern: 'user.action',
363
+ spanKind: 'INTERNAL',
364
+ files: ['src/handlers/user.ts'],
365
+ },
366
+ },
367
+ },
368
+ ],
369
+ edges: [
370
+ {
371
+ id: 'e1',
372
+ fromNode: 'lifecycle-draft',
373
+ toNode: 'lifecycle-approved',
374
+ fromSide: 'right',
375
+ toSide: 'left',
376
+ label: 'review',
377
+ },
378
+ {
379
+ id: 'e2',
380
+ fromNode: 'lifecycle-approved',
381
+ toNode: 'lifecycle-implemented',
382
+ fromSide: 'right',
383
+ toSide: 'left',
384
+ label: 'implement',
385
+ },
386
+ ],
387
+ pv: {
388
+ version: '1.0.0',
389
+ name: 'Implementation Lifecycle',
390
+ description: 'Shows badge progression through implementation phases',
391
+ edgeTypes: {
392
+ default: {
393
+ style: 'solid',
394
+ color: '#888',
395
+ directed: true,
396
+ },
397
+ },
398
+ },
399
+ };
400
+
401
+ export const ImplementationLifecycle: Story = {
402
+ args: {
403
+ canvas: lifecycleCanvas,
404
+ width: 700,
405
+ height: 280,
406
+ },
407
+ parameters: {
408
+ docs: {
409
+ description: {
410
+ story: `
411
+ **Implementation Lifecycle**
412
+
413
+ Shows how badges evolve as a span moves through the implementation process:
414
+
415
+ 1. **Planning** (D badge) - Span convention is being designed
416
+ 2. **Approved** (A + R badges) - Design reviewed, references added
417
+ 3. **Implemented** (I + S + R badges) - Code written, source files linked
418
+
419
+ The badges provide immediate visual feedback on implementation progress.
420
+ `,
421
+ },
422
+ },
423
+ },
424
+ };
425
+
426
+ /**
427
+ * Canvas showing boundary spans in a system context
428
+ */
429
+ const boundaryCanvas: ExtendedCanvas = {
430
+ nodes: [
431
+ {
432
+ id: 'internal-service',
433
+ type: 'text',
434
+ x: 250,
435
+ y: 120,
436
+ width: 180,
437
+ height: 90,
438
+ text: 'Internal Service',
439
+ color: 4,
440
+ pv: {
441
+ nodeType: 'otel-span-convention',
442
+ name: 'Internal Service',
443
+ description: 'Internal service span - no boundary badges',
444
+ shape: 'hexagon',
445
+ icon: 'Server',
446
+ status: 'implemented',
447
+ otel: {
448
+ spanPattern: 'service.process',
449
+ spanKind: 'INTERNAL',
450
+ files: ['src/service.ts'],
451
+ },
452
+ },
453
+ },
454
+ {
455
+ id: 'outbound-api',
456
+ type: 'text',
457
+ x: 500,
458
+ y: 50,
459
+ width: 180,
460
+ height: 90,
461
+ text: 'External API',
462
+ color: 5,
463
+ pv: {
464
+ nodeType: 'otel-boundary',
465
+ name: 'External API',
466
+ description: 'Outbound call to external API',
467
+ shape: 'hexagon',
468
+ icon: 'Cloud',
469
+ status: 'implemented',
470
+ boundary: {
471
+ direction: 'outbound',
472
+ node: { 'pv.event.name': 'api.response' },
473
+ },
474
+ otel: {
475
+ spanPattern: 'http.client',
476
+ spanKind: 'CLIENT',
477
+ files: ['src/api/client.ts'],
478
+ },
479
+ },
480
+ },
481
+ {
482
+ id: 'outbound-db',
483
+ type: 'text',
484
+ x: 500,
485
+ y: 190,
486
+ width: 180,
487
+ height: 90,
488
+ text: 'Database',
489
+ color: 5,
490
+ pv: {
491
+ nodeType: 'otel-boundary',
492
+ name: 'Database',
493
+ description: 'Outbound call to database',
494
+ shape: 'hexagon',
495
+ icon: 'Database',
496
+ status: 'implemented',
497
+ boundary: {
498
+ direction: 'outbound',
499
+ node: { 'pv.event.name': 'db.result' },
500
+ },
501
+ otel: {
502
+ spanPattern: 'db.query',
503
+ spanKind: 'CLIENT',
504
+ files: ['src/db/client.ts'],
505
+ },
506
+ },
507
+ },
508
+ {
509
+ id: 'inbound-webhook',
510
+ type: 'text',
511
+ x: 0,
512
+ y: 120,
513
+ width: 180,
514
+ height: 90,
515
+ text: 'Webhook Handler',
516
+ color: 5,
517
+ pv: {
518
+ nodeType: 'otel-boundary',
519
+ name: 'Webhook Handler',
520
+ description: 'Inbound webhook from external system',
521
+ shape: 'hexagon',
522
+ icon: 'Webhook',
523
+ status: 'approved',
524
+ boundary: {
525
+ direction: 'inbound',
526
+ node: { 'pv.event.name': 'webhook.received' },
527
+ },
528
+ otel: {
529
+ spanPattern: 'http.server',
530
+ spanKind: 'SERVER',
531
+ },
532
+ },
533
+ },
534
+ ],
535
+ edges: [
536
+ {
537
+ id: 'e1',
538
+ fromNode: 'inbound-webhook',
539
+ toNode: 'internal-service',
540
+ fromSide: 'right',
541
+ toSide: 'left',
542
+ },
543
+ {
544
+ id: 'e2',
545
+ fromNode: 'internal-service',
546
+ toNode: 'outbound-api',
547
+ fromSide: 'right',
548
+ toSide: 'left',
549
+ },
550
+ {
551
+ id: 'e3',
552
+ fromNode: 'internal-service',
553
+ toNode: 'outbound-db',
554
+ fromSide: 'right',
555
+ toSide: 'left',
556
+ },
557
+ ],
558
+ pv: {
559
+ version: '1.0.0',
560
+ name: 'Boundary Spans',
561
+ description: 'Shows boundary badges for system edge spans',
562
+ edgeTypes: {
563
+ default: {
564
+ style: 'dashed',
565
+ color: '#06b6d4',
566
+ directed: true,
567
+ },
568
+ },
569
+ },
570
+ };
571
+
572
+ export const BoundarySpans: Story = {
573
+ args: {
574
+ canvas: boundaryCanvas,
575
+ width: 750,
576
+ height: 350,
577
+ },
578
+ parameters: {
579
+ docs: {
580
+ description: {
581
+ story: `
582
+ **Boundary Span Badges**
583
+
584
+ Boundary spans mark where your system interacts with external systems:
585
+
586
+ - **↗ Outbound** (right edge): Calls TO external systems (APIs, databases)
587
+ - **↙ Inbound** (left edge): Calls FROM external systems (webhooks, events)
588
+
589
+ Boundary badges **replace** the source badge position since the direction indicator is more important for understanding system topology.
590
+
591
+ Use boundary spans to identify integration points that need:
592
+ - Contract tests
593
+ - Timeout handling
594
+ - Circuit breakers
595
+ - Error recovery strategies
596
+ `,
597
+ },
598
+ },
599
+ },
600
+ };
601
+
602
+ /**
603
+ * Canvas demonstrating workflow chips - showing which workflow.json scenarios
604
+ * reference each span convention
605
+ */
606
+ const workflowChipsCanvas = {
607
+ nodes: [
608
+ // Span with multiple workflow associations
609
+ {
610
+ id: 'user-login',
611
+ type: 'otel-span-convention' as const,
612
+ x: 50,
613
+ y: 50,
614
+ width: 200,
615
+ height: 120,
616
+ color: '#8b5cf6',
617
+ label: 'User Login',
618
+ otel: {
619
+ status: 'implemented' as const,
620
+ spanPattern: 'auth.login',
621
+ spanKind: 'SERVER' as const,
622
+ files: ['src/auth/login.ts'],
623
+ },
624
+ workflowChips: [
625
+ { id: 'happy-path', label: 'Happy Path', color: '#22c55e' },
626
+ { id: 'error-handling', label: 'Error Handling', color: '#ef4444' },
627
+ { id: 'rate-limiting', label: 'Rate Limiting', color: '#f97316' },
628
+ ],
629
+ },
630
+ // Span with single workflow
631
+ {
632
+ id: 'token-validate',
633
+ type: 'otel-span-convention' as const,
634
+ x: 300,
635
+ y: 50,
636
+ width: 200,
637
+ height: 120,
638
+ color: '#3b82f6',
639
+ label: 'Token Validation',
640
+ otel: {
641
+ status: 'implemented' as const,
642
+ spanPattern: 'auth.token.validate',
643
+ spanKind: 'INTERNAL' as const,
644
+ files: ['src/auth/token.ts'],
645
+ },
646
+ workflowChips: [
647
+ { id: 'happy-path', label: 'Happy Path', color: '#22c55e' },
648
+ ],
649
+ },
650
+ // Span with many workflows (shows +N more)
651
+ {
652
+ id: 'api-request',
653
+ type: 'otel-span-convention' as const,
654
+ x: 550,
655
+ y: 50,
656
+ width: 200,
657
+ height: 120,
658
+ color: '#06b6d4',
659
+ label: 'API Request',
660
+ otel: {
661
+ status: 'implemented' as const,
662
+ spanPattern: 'http.server.request',
663
+ spanKind: 'SERVER' as const,
664
+ files: ['src/api/handler.ts'],
665
+ },
666
+ workflowChips: [
667
+ { id: 'crud-create', label: 'Create', color: '#22c55e' },
668
+ { id: 'crud-read', label: 'Read', color: '#3b82f6' },
669
+ { id: 'crud-update', label: 'Update', color: '#f97316' },
670
+ { id: 'crud-delete', label: 'Delete', color: '#ef4444' },
671
+ { id: 'batch-ops', label: 'Batch Operations', color: '#8b5cf6' },
672
+ ],
673
+ },
674
+ // Span with no workflow associations
675
+ {
676
+ id: 'db-query',
677
+ type: 'otel-span-convention' as const,
678
+ x: 50,
679
+ y: 220,
680
+ width: 200,
681
+ height: 100,
682
+ color: '#6b7280',
683
+ label: 'Database Query',
684
+ otel: {
685
+ status: 'draft' as const,
686
+ spanPattern: 'db.query',
687
+ spanKind: 'CLIENT' as const,
688
+ },
689
+ // No workflowChips - this span isn't referenced by any workflow yet
690
+ },
691
+ // Span with default colored chips (no color specified)
692
+ {
693
+ id: 'cache-lookup',
694
+ type: 'otel-span-convention' as const,
695
+ x: 300,
696
+ y: 220,
697
+ width: 200,
698
+ height: 100,
699
+ color: '#10b981',
700
+ label: 'Cache Lookup',
701
+ otel: {
702
+ status: 'implemented' as const,
703
+ spanPattern: 'cache.get',
704
+ spanKind: 'INTERNAL' as const,
705
+ files: ['src/cache/client.ts'],
706
+ },
707
+ workflowChips: [
708
+ { id: 'perf-test', label: 'Perf Testing' },
709
+ { id: 'cache-miss', label: 'Cache Miss' },
710
+ ],
711
+ },
712
+ ],
713
+ edges: [
714
+ {
715
+ id: 'e1',
716
+ fromNode: 'user-login',
717
+ toNode: 'token-validate',
718
+ fromSide: 'right',
719
+ toSide: 'left',
720
+ },
721
+ {
722
+ id: 'e2',
723
+ fromNode: 'token-validate',
724
+ toNode: 'api-request',
725
+ fromSide: 'right',
726
+ toSide: 'left',
727
+ },
728
+ {
729
+ id: 'e3',
730
+ fromNode: 'api-request',
731
+ toNode: 'db-query',
732
+ fromSide: 'bottom',
733
+ toSide: 'right',
734
+ },
735
+ {
736
+ id: 'e4',
737
+ fromNode: 'api-request',
738
+ toNode: 'cache-lookup',
739
+ fromSide: 'bottom',
740
+ toSide: 'top',
741
+ },
742
+ ],
743
+ pv: {
744
+ version: '1.0.0',
745
+ name: 'Workflow Chips Demo',
746
+ description: 'Demonstrates workflow.json associations on span convention nodes',
747
+ edgeTypes: {
748
+ default: {
749
+ style: 'solid',
750
+ color: '#888',
751
+ directed: true,
752
+ },
753
+ },
754
+ },
755
+ };
756
+
757
+ /**
758
+ * Interactive story showing workflow chip selection
759
+ */
760
+ const WorkflowChipsInteractive = () => {
761
+ const [selectedWorkflow, setSelectedWorkflow] = useState<string | null>(null);
762
+
763
+ // Create canvas with click handlers and selection state
764
+ const canvasWithHandlers: ExtendedCanvas = {
765
+ ...workflowChipsCanvas,
766
+ nodes: workflowChipsCanvas.nodes.map((node) => ({
767
+ ...node,
768
+ onWorkflowChipClick: (chipId: string) => {
769
+ setSelectedWorkflow(selectedWorkflow === chipId ? null : chipId);
770
+ },
771
+ selectedWorkflowId: selectedWorkflow,
772
+ })),
773
+ };
774
+
775
+ return (
776
+ <div>
777
+ <div style={{ marginBottom: '12px', padding: '8px', backgroundColor: '#f3f4f6', borderRadius: '6px' }}>
778
+ <strong>Selected workflow:</strong>{' '}
779
+ {selectedWorkflow ? (
780
+ <span style={{ color: '#3b82f6' }}>{selectedWorkflow}</span>
781
+ ) : (
782
+ <span style={{ color: '#9ca3af' }}>Click a chip to select</span>
783
+ )}
784
+ </div>
785
+ <GraphRenderer
786
+ canvas={canvasWithHandlers}
787
+ width={800}
788
+ height={400}
789
+ />
790
+ </div>
791
+ );
792
+ };
793
+
794
+ export const WorkflowChips: Story = {
795
+ args: {
796
+ canvas: workflowChipsCanvas as unknown as ExtendedCanvas,
797
+ width: 800,
798
+ height: 400,
799
+ },
800
+ parameters: {
801
+ docs: {
802
+ description: {
803
+ story: `
804
+ **Workflow Chips - Associating Spans with Scenarios**
805
+
806
+ Workflow chips show which \`workflow.json\` scenarios reference each span convention.
807
+ This creates a visual link between your span architecture (\`.spans.canvas\`) and
808
+ your workflow scenarios (\`.workflow.json\`).
809
+
810
+ **Features:**
811
+ - Colored chips indicate different workflow scenarios
812
+ - Max 3 chips shown, with "+N more" for additional workflows
813
+ - Chips can be clicked to filter/highlight related spans
814
+ - Spans with no workflows appear without chips
815
+
816
+ **Use cases:**
817
+ - See at-a-glance which spans are covered by scenarios
818
+ - Identify orphan spans not covered by any workflow
819
+ - Navigate between span definitions and their usage
820
+ `,
821
+ },
822
+ },
823
+ },
824
+ };
825
+
826
+ export const WorkflowChipsInteractiveStory: StoryObj = {
827
+ render: () => <WorkflowChipsInteractive />,
828
+ parameters: {
829
+ docs: {
830
+ description: {
831
+ story: `
832
+ **Interactive Workflow Selection**
833
+
834
+ Click on workflow chips to select them. This demonstrates the selection state
835
+ that can be used to filter or highlight spans belonging to a specific workflow.
836
+ `,
837
+ },
838
+ },
839
+ },
840
+ };