@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,996 @@
1
+ import React from 'react';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { GraphRenderer } from '../../components/GraphRenderer';
4
+ import type { ExtendedCanvas } from '@principal-ai/subsystems-core';
5
+ import { ThemeProvider, defaultEditorTheme } from '@principal-ade/industry-theme';
6
+
7
+ const meta = {
8
+ title: 'Audit/NodeFieldsAudit',
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 showing all visual variations of node fields
28
+ */
29
+ const fieldVariationsCanvas: ExtendedCanvas = {
30
+ nodes: [
31
+ // Row 1: Shape variations
32
+ {
33
+ id: 'shape-rect',
34
+ type: 'text',
35
+ x: 80,
36
+ y: 80,
37
+ width: 120,
38
+ height: 80,
39
+ text: '# Rectangle\n\nDefault shape',
40
+ color: '#6366f1',
41
+ pv: {
42
+ nodeType: 'shape-rect',
43
+ shape: 'rectangle',
44
+ icon: 'Square',
45
+ fill: '#6366f1',
46
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
47
+ },
48
+ },
49
+ {
50
+ id: 'shape-circle',
51
+ type: 'text',
52
+ x: 260,
53
+ y: 80,
54
+ width: 100,
55
+ height: 100,
56
+ text: '# Circle\n\nRound shape',
57
+ color: '#8b5cf6',
58
+ pv: {
59
+ nodeType: 'shape-circle',
60
+ shape: 'circle',
61
+ icon: 'Circle',
62
+ fill: '#8b5cf6',
63
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
64
+ },
65
+ },
66
+ {
67
+ id: 'shape-hexagon',
68
+ type: 'text',
69
+ x: 420,
70
+ y: 80,
71
+ width: 120,
72
+ height: 120,
73
+ text: '# Hexagon\n\n6-sided polygon',
74
+ color: '#06b6d4',
75
+ pv: {
76
+ nodeType: 'shape-hexagon',
77
+ shape: 'hexagon',
78
+ icon: 'Hexagon',
79
+ fill: '#06b6d4',
80
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
81
+ },
82
+ },
83
+ {
84
+ id: 'shape-diamond',
85
+ type: 'text',
86
+ x: 600,
87
+ y: 80,
88
+ width: 90,
89
+ height: 90,
90
+ text: '# Diamond\n\nRotated square',
91
+ color: '#f59e0b',
92
+ pv: {
93
+ nodeType: 'shape-diamond',
94
+ shape: 'diamond',
95
+ icon: 'Diamond',
96
+ fill: '#f59e0b',
97
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
98
+ },
99
+ },
100
+
101
+ // Row 2: State variations (same node type, different states)
102
+ {
103
+ id: 'state-idle',
104
+ type: 'text',
105
+ x: 80,
106
+ y: 260,
107
+ width: 120,
108
+ height: 80,
109
+ text: 'Idle State',
110
+ color: '#94a3b8',
111
+ pv: {
112
+ nodeType: 'stateful-idle',
113
+ shape: 'rectangle',
114
+ icon: 'Pause',
115
+ fill: '#94a3b8',
116
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
117
+ states: {
118
+ idle: { color: '#94a3b8', icon: 'Pause', label: 'Idle' },
119
+ },
120
+ },
121
+ },
122
+ {
123
+ id: 'state-active',
124
+ type: 'text',
125
+ x: 260,
126
+ y: 260,
127
+ width: 120,
128
+ height: 80,
129
+ text: 'Active State',
130
+ color: '#22c55e',
131
+ pv: {
132
+ nodeType: 'stateful-active',
133
+ shape: 'rectangle',
134
+ icon: 'Play',
135
+ fill: '#22c55e',
136
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
137
+ states: {
138
+ active: { color: '#22c55e', icon: 'Play', label: 'Active' },
139
+ },
140
+ },
141
+ },
142
+ {
143
+ id: 'state-warning',
144
+ type: 'text',
145
+ x: 440,
146
+ y: 260,
147
+ width: 120,
148
+ height: 80,
149
+ text: 'Warning State',
150
+ color: '#f59e0b',
151
+ pv: {
152
+ nodeType: 'stateful-warning',
153
+ shape: 'rectangle',
154
+ icon: 'AlertTriangle',
155
+ fill: '#f59e0b',
156
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
157
+ states: {
158
+ warning: { color: '#f59e0b', icon: 'AlertTriangle', label: 'Warning' },
159
+ },
160
+ },
161
+ },
162
+ {
163
+ id: 'state-error',
164
+ type: 'text',
165
+ x: 620,
166
+ y: 260,
167
+ width: 120,
168
+ height: 80,
169
+ text: 'Error State',
170
+ color: '#ef4444',
171
+ pv: {
172
+ nodeType: 'stateful-error',
173
+ shape: 'rectangle',
174
+ icon: 'XCircle',
175
+ fill: '#ef4444',
176
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
177
+ states: {
178
+ error: { color: '#ef4444', icon: 'XCircle', label: 'Error' },
179
+ },
180
+ },
181
+ },
182
+
183
+ // Row 3: With and without icon/state
184
+ {
185
+ id: 'with-icon-state',
186
+ type: 'text',
187
+ x: 80,
188
+ y: 420,
189
+ width: 140,
190
+ height: 100,
191
+ text: 'With Icon & State',
192
+ color: '#3b82f6',
193
+ pv: {
194
+ nodeType: 'full-featured',
195
+ shape: 'rectangle',
196
+ icon: 'Server',
197
+ fill: '#3b82f6',
198
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
199
+ states: {
200
+ online: { color: '#22c55e', icon: 'CheckCircle', label: 'Online' },
201
+ },
202
+ },
203
+ },
204
+ {
205
+ id: 'with-icon-no-state',
206
+ type: 'text',
207
+ x: 280,
208
+ y: 420,
209
+ width: 140,
210
+ height: 100,
211
+ text: 'Icon, No State',
212
+ color: '#8b5cf6',
213
+ pv: {
214
+ nodeType: 'icon-only',
215
+ shape: 'rectangle',
216
+ icon: 'Database',
217
+ fill: '#8b5cf6',
218
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
219
+ },
220
+ },
221
+ {
222
+ id: 'no-icon-with-state',
223
+ type: 'text',
224
+ x: 480,
225
+ y: 420,
226
+ width: 140,
227
+ height: 100,
228
+ text: 'State, No Icon',
229
+ color: '#06b6d4',
230
+ pv: {
231
+ nodeType: 'state-only',
232
+ shape: 'rectangle',
233
+ fill: '#06b6d4',
234
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
235
+ states: {
236
+ pending: { color: '#f59e0b', label: 'Pending' },
237
+ },
238
+ },
239
+ },
240
+ {
241
+ id: 'minimal',
242
+ type: 'text',
243
+ x: 680,
244
+ y: 420,
245
+ width: 140,
246
+ height: 100,
247
+ text: 'Minimal (Label Only)',
248
+ color: '#64748b',
249
+ pv: {
250
+ nodeType: 'minimal',
251
+ shape: 'rectangle',
252
+ fill: '#64748b',
253
+ dataSchema: { name: { type: 'string', displayInLabel: true } },
254
+ },
255
+ },
256
+ ],
257
+ edges: [],
258
+ pv: {
259
+ version: '1.0.0',
260
+ name: 'Field Variations',
261
+ description: 'All combinations of node fields',
262
+ edgeTypes: {},
263
+ },
264
+ };
265
+
266
+ /**
267
+ * Interactive field reference with documentation
268
+ */
269
+ const FieldReferenceTemplate = () => {
270
+ return (
271
+ <div style={{ padding: 20, fontFamily: 'system-ui' }}>
272
+ <h2 style={{ marginBottom: 20 }}>Node Card Field Reference</h2>
273
+
274
+ <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 30 }}>
275
+ {/* Left: Visual Reference */}
276
+ <div>
277
+ <h3 style={{ marginBottom: 16, color: '#374151' }}>Visual Structure</h3>
278
+ <div
279
+ style={{
280
+ border: '3px solid #6366f1',
281
+ borderRadius: 8,
282
+ padding: 16,
283
+ backgroundColor: 'white',
284
+ width: 180,
285
+ textAlign: 'center',
286
+ position: 'relative',
287
+ }}
288
+ >
289
+ {/* Stroke/Border annotation */}
290
+ <div
291
+ style={{
292
+ position: 'absolute',
293
+ top: -30,
294
+ left: '50%',
295
+ transform: 'translateX(-50%)',
296
+ fontSize: 10,
297
+ color: '#6366f1',
298
+ fontWeight: 'bold',
299
+ }}
300
+ >
301
+ stroke/border color
302
+ </div>
303
+
304
+ {/* Icon */}
305
+ <div
306
+ style={{
307
+ marginBottom: 8,
308
+ padding: 4,
309
+ border: '2px dashed #f97316',
310
+ borderRadius: 4,
311
+ }}
312
+ >
313
+ <div style={{ fontSize: 10, color: '#f97316', marginBottom: 4 }}>ICON</div>
314
+ <span style={{ fontSize: 24 }}>S</span>
315
+ </div>
316
+
317
+ {/* Label */}
318
+ <div
319
+ style={{
320
+ marginBottom: 8,
321
+ padding: 4,
322
+ border: '2px dashed #22c55e',
323
+ borderRadius: 4,
324
+ }}
325
+ >
326
+ <div style={{ fontSize: 10, color: '#22c55e', marginBottom: 4 }}>
327
+ LABEL (displayInLabel)
328
+ </div>
329
+ <div style={{ fontWeight: 500 }}>Node Name</div>
330
+ </div>
331
+
332
+ {/* State Badge */}
333
+ <div
334
+ style={{
335
+ padding: 4,
336
+ border: '2px dashed #3b82f6',
337
+ borderRadius: 4,
338
+ }}
339
+ >
340
+ <div style={{ fontSize: 10, color: '#3b82f6', marginBottom: 4 }}>STATE BADGE</div>
341
+ <span
342
+ style={{
343
+ backgroundColor: '#22c55e',
344
+ color: 'white',
345
+ padding: '2px 8px',
346
+ borderRadius: 4,
347
+ fontSize: 11,
348
+ }}
349
+ >
350
+ Active
351
+ </span>
352
+ </div>
353
+
354
+ {/* Shape annotation */}
355
+ <div
356
+ style={{
357
+ position: 'absolute',
358
+ bottom: -30,
359
+ left: '50%',
360
+ transform: 'translateX(-50%)',
361
+ fontSize: 10,
362
+ color: '#6366f1',
363
+ fontWeight: 'bold',
364
+ }}
365
+ >
366
+ shape: rectangle
367
+ </div>
368
+ </div>
369
+ </div>
370
+
371
+ {/* Right: Field Documentation */}
372
+ <div>
373
+ <h3 style={{ marginBottom: 16, color: '#374151' }}>Field Descriptions</h3>
374
+ <table style={{ width: '100%', borderCollapse: 'collapse', fontSize: 13 }}>
375
+ <thead>
376
+ <tr style={{ backgroundColor: '#f3f4f6' }}>
377
+ <th style={{ padding: 8, textAlign: 'left', borderBottom: '2px solid #e5e7eb' }}>
378
+ Field
379
+ </th>
380
+ <th style={{ padding: 8, textAlign: 'left', borderBottom: '2px solid #e5e7eb' }}>
381
+ Source
382
+ </th>
383
+ <th style={{ padding: 8, textAlign: 'left', borderBottom: '2px solid #e5e7eb' }}>
384
+ Description
385
+ </th>
386
+ </tr>
387
+ </thead>
388
+ <tbody>
389
+ <tr>
390
+ <td
391
+ style={{
392
+ padding: 8,
393
+ borderBottom: '1px solid #e5e7eb',
394
+ fontWeight: 'bold',
395
+ color: '#f97316',
396
+ }}
397
+ >
398
+ icon
399
+ </td>
400
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
401
+ <code>vv.icon</code> or <code>states[state].icon</code>
402
+ </td>
403
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
404
+ Lucide icon name displayed at top
405
+ </td>
406
+ </tr>
407
+ <tr>
408
+ <td
409
+ style={{
410
+ padding: 8,
411
+ borderBottom: '1px solid #e5e7eb',
412
+ fontWeight: 'bold',
413
+ color: '#22c55e',
414
+ }}
415
+ >
416
+ label
417
+ </td>
418
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
419
+ <code>dataSchema[field].displayInLabel</code>
420
+ </td>
421
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
422
+ Main text from data field with displayInLabel=true
423
+ </td>
424
+ </tr>
425
+ <tr>
426
+ <td
427
+ style={{
428
+ padding: 8,
429
+ borderBottom: '1px solid #e5e7eb',
430
+ fontWeight: 'bold',
431
+ color: '#3b82f6',
432
+ }}
433
+ >
434
+ state
435
+ </td>
436
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
437
+ <code>states[currentState]</code>
438
+ </td>
439
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
440
+ Badge showing current state with color and label
441
+ </td>
442
+ </tr>
443
+ <tr>
444
+ <td
445
+ style={{
446
+ padding: 8,
447
+ borderBottom: '1px solid #e5e7eb',
448
+ fontWeight: 'bold',
449
+ color: '#6366f1',
450
+ }}
451
+ >
452
+ color
453
+ </td>
454
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
455
+ <code>vv.color</code> or <code>states[state].color</code>
456
+ </td>
457
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
458
+ Primary node color (state overrides base)
459
+ </td>
460
+ </tr>
461
+ <tr>
462
+ <td
463
+ style={{
464
+ padding: 8,
465
+ borderBottom: '1px solid #e5e7eb',
466
+ fontWeight: 'bold',
467
+ color: '#6366f1',
468
+ }}
469
+ >
470
+ stroke
471
+ </td>
472
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
473
+ <code>vv.stroke</code>
474
+ </td>
475
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
476
+ Border color (defaults to color if not set)
477
+ </td>
478
+ </tr>
479
+ <tr>
480
+ <td
481
+ style={{
482
+ padding: 8,
483
+ borderBottom: '1px solid #e5e7eb',
484
+ fontWeight: 'bold',
485
+ color: '#6366f1',
486
+ }}
487
+ >
488
+ shape
489
+ </td>
490
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
491
+ <code>vv.shape</code>
492
+ </td>
493
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
494
+ rectangle | circle | hexagon | diamond | custom
495
+ </td>
496
+ </tr>
497
+ <tr>
498
+ <td
499
+ style={{
500
+ padding: 8,
501
+ borderBottom: '1px solid #e5e7eb',
502
+ fontWeight: 'bold',
503
+ color: '#6366f1',
504
+ }}
505
+ >
506
+ size
507
+ </td>
508
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
509
+ <code>vv.size</code>
510
+ </td>
511
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
512
+ {'{width, height}'} for node dimensions
513
+ </td>
514
+ </tr>
515
+ <tr>
516
+ <td style={{ padding: 8, fontWeight: 'bold', color: '#ef4444' }}>hasViolations</td>
517
+ <td style={{ padding: 8 }}>
518
+ <code>computed</code>
519
+ </td>
520
+ <td style={{ padding: 8 }}>Shows warning indicator when true</td>
521
+ </tr>
522
+ </tbody>
523
+ </table>
524
+ </div>
525
+ </div>
526
+
527
+ <h3 style={{ marginTop: 30, marginBottom: 16, color: '#374151' }}>Live Examples</h3>
528
+ <GraphRenderer canvas={fieldVariationsCanvas} width={850} height={600} />
529
+ </div>
530
+ );
531
+ };
532
+
533
+ export const FieldReference: Story = {
534
+ render: () => <FieldReferenceTemplate />,
535
+ parameters: {
536
+ docs: {
537
+ description: {
538
+ story: `
539
+ **Node Card Field Reference**
540
+
541
+ This story provides a comprehensive visual guide to all fields displayed on node cards:
542
+
543
+ **Visual Fields:**
544
+ - **icon** - Lucide icon displayed above the label
545
+ - **label** - Main text from dataSchema field with \`displayInLabel: true\`
546
+ - **state** - Badge showing current state with color and label
547
+ - **color** - Primary node color (can be overridden by state)
548
+ - **stroke** - Border color (defaults to color)
549
+ - **shape** - rectangle, circle, hexagon, diamond, or custom
550
+ - **size** - Node dimensions {width, height}
551
+ - **hasViolations** - Warning indicator for validation errors
552
+ `,
553
+ },
554
+ },
555
+ },
556
+ };
557
+
558
+ export const AllShapes: Story = {
559
+ args: {
560
+ canvas: fieldVariationsCanvas,
561
+ width: 850,
562
+ height: 600,
563
+ },
564
+ parameters: {
565
+ docs: {
566
+ description: {
567
+ story: `
568
+ Shows all node shape variations with different field combinations:
569
+ - **Row 1**: Shape types (rectangle, circle, hexagon, diamond)
570
+ - **Row 2**: State variations (idle, active, warning, error)
571
+ - **Row 3**: Feature combinations (with/without icon and state)
572
+ `,
573
+ },
574
+ },
575
+ },
576
+ };
577
+
578
+ /**
579
+ * Interactive popup panel reference
580
+ */
581
+ const PopupReferenceTemplate = () => {
582
+ return (
583
+ <div style={{ padding: 20, fontFamily: 'system-ui' }}>
584
+ <h2 style={{ marginBottom: 20 }}>Node Info Panel (Popup) Field Reference</h2>
585
+
586
+ <div style={{ display: 'grid', gridTemplateColumns: '300px 1fr', gap: 30 }}>
587
+ {/* Left: Mock Panel */}
588
+ <div
589
+ style={{
590
+ backgroundColor: 'white',
591
+ borderRadius: 8,
592
+ boxShadow: '0 4px 12px rgba(0,0,0,0.15)',
593
+ padding: 16,
594
+ }}
595
+ >
596
+ {/* Header */}
597
+ <div
598
+ style={{
599
+ display: 'flex',
600
+ justifyContent: 'space-between',
601
+ alignItems: 'center',
602
+ marginBottom: 12,
603
+ paddingBottom: 8,
604
+ borderBottom: '2px solid #6366f1',
605
+ }}
606
+ >
607
+ <div style={{ fontWeight: 'bold', fontSize: 14 }}>Node Information</div>
608
+ <span style={{ color: '#666', fontSize: 18, cursor: 'pointer' }}>x</span>
609
+ </div>
610
+
611
+ {/* Icon Field */}
612
+ <div style={{ marginBottom: 12, position: 'relative' }}>
613
+ <div
614
+ style={{
615
+ position: 'absolute',
616
+ right: -80,
617
+ top: 0,
618
+ fontSize: 10,
619
+ color: '#f97316',
620
+ fontWeight: 'bold',
621
+ }}
622
+ >
623
+ 1. ICON
624
+ </div>
625
+ <div style={{ fontSize: 10, color: '#666', marginBottom: 4 }}>Icon</div>
626
+ <div
627
+ style={{
628
+ display: 'flex',
629
+ alignItems: 'center',
630
+ gap: 8,
631
+ padding: '6px 10px',
632
+ backgroundColor: '#f5f5f5',
633
+ border: '1px dashed #ccc',
634
+ borderRadius: 4,
635
+ }}
636
+ >
637
+ <span>S</span>
638
+ <span style={{ fontSize: 12 }}>Server</span>
639
+ <span style={{ marginLeft: 'auto', color: '#999', fontSize: 10 }}>edit</span>
640
+ </div>
641
+ </div>
642
+
643
+ {/* Type Field */}
644
+ <div style={{ marginBottom: 12, position: 'relative' }}>
645
+ <div
646
+ style={{
647
+ position: 'absolute',
648
+ right: -80,
649
+ top: 0,
650
+ fontSize: 10,
651
+ color: '#22c55e',
652
+ fontWeight: 'bold',
653
+ }}
654
+ >
655
+ 2. TYPE
656
+ </div>
657
+ <div style={{ fontSize: 10, color: '#666', marginBottom: 4 }}>Type</div>
658
+ <div
659
+ style={{
660
+ fontSize: 12,
661
+ padding: '4px 8px',
662
+ backgroundColor: '#6366f1',
663
+ color: 'white',
664
+ borderRadius: 4,
665
+ display: 'inline-block',
666
+ }}
667
+ >
668
+ server (rectangle)
669
+ </div>
670
+ </div>
671
+
672
+ {/* State Field */}
673
+ <div style={{ marginBottom: 12, position: 'relative' }}>
674
+ <div
675
+ style={{
676
+ position: 'absolute',
677
+ right: -80,
678
+ top: 0,
679
+ fontSize: 10,
680
+ color: '#3b82f6',
681
+ fontWeight: 'bold',
682
+ }}
683
+ >
684
+ 3. STATE
685
+ </div>
686
+ <div style={{ fontSize: 10, color: '#666', marginBottom: 4 }}>State</div>
687
+ <div
688
+ style={{
689
+ fontSize: 12,
690
+ padding: '4px 8px',
691
+ backgroundColor: '#22c55e',
692
+ color: 'white',
693
+ borderRadius: 4,
694
+ display: 'inline-block',
695
+ }}
696
+ >
697
+ Online
698
+ </div>
699
+ </div>
700
+
701
+ {/* Name Field */}
702
+ <div style={{ marginBottom: 12, position: 'relative' }}>
703
+ <div
704
+ style={{
705
+ position: 'absolute',
706
+ right: -80,
707
+ top: 0,
708
+ fontSize: 10,
709
+ color: '#8b5cf6',
710
+ fontWeight: 'bold',
711
+ }}
712
+ >
713
+ 4. NAME
714
+ </div>
715
+ <div style={{ fontSize: 10, color: '#666', marginBottom: 4 }}>Name</div>
716
+ <div
717
+ style={{
718
+ fontSize: 12,
719
+ padding: '4px 8px',
720
+ backgroundColor: '#f5f5f5',
721
+ borderRadius: 4,
722
+ border: '1px dashed #ccc',
723
+ }}
724
+ >
725
+ API Gateway
726
+ <span style={{ marginLeft: 8, color: '#999', fontSize: 10 }}>edit</span>
727
+ </div>
728
+ </div>
729
+
730
+ {/* Properties */}
731
+ <div style={{ marginBottom: 12, position: 'relative' }}>
732
+ <div
733
+ style={{
734
+ position: 'absolute',
735
+ right: -100,
736
+ top: 0,
737
+ fontSize: 10,
738
+ color: '#06b6d4',
739
+ fontWeight: 'bold',
740
+ }}
741
+ >
742
+ 5. PROPERTIES
743
+ </div>
744
+ <div style={{ fontSize: 10, color: '#666', marginBottom: 8, fontWeight: 'bold' }}>
745
+ Properties
746
+ </div>
747
+ <div style={{ marginBottom: 8 }}>
748
+ <div style={{ fontSize: 10, color: '#666', marginBottom: 2 }}>description</div>
749
+ <div style={{ fontSize: 12, color: '#333' }}>Main entry point for API</div>
750
+ </div>
751
+ <div>
752
+ <div style={{ fontSize: 10, color: '#666', marginBottom: 2 }}>port</div>
753
+ <div style={{ fontSize: 12, color: '#333' }}>8080</div>
754
+ </div>
755
+ </div>
756
+
757
+ {/* ID */}
758
+ <div
759
+ style={{
760
+ fontSize: 10,
761
+ color: '#999',
762
+ marginTop: 12,
763
+ paddingTop: 8,
764
+ borderTop: '1px solid #eee',
765
+ position: 'relative',
766
+ }}
767
+ >
768
+ <div
769
+ style={{
770
+ position: 'absolute',
771
+ right: -60,
772
+ top: 8,
773
+ fontSize: 10,
774
+ color: '#64748b',
775
+ fontWeight: 'bold',
776
+ }}
777
+ >
778
+ 6. ID
779
+ </div>
780
+ ID: api-gateway-1
781
+ </div>
782
+
783
+ {/* Delete Button */}
784
+ <div style={{ position: 'relative' }}>
785
+ <div
786
+ style={{
787
+ position: 'absolute',
788
+ right: -80,
789
+ top: 12,
790
+ fontSize: 10,
791
+ color: '#ef4444',
792
+ fontWeight: 'bold',
793
+ }}
794
+ >
795
+ 7. DELETE
796
+ </div>
797
+ <button
798
+ style={{
799
+ marginTop: 12,
800
+ width: '100%',
801
+ padding: '8px 12px',
802
+ backgroundColor: '#dc3545',
803
+ color: 'white',
804
+ border: 'none',
805
+ borderRadius: 4,
806
+ cursor: 'pointer',
807
+ fontSize: 12,
808
+ fontWeight: 'bold',
809
+ }}
810
+ >
811
+ Delete Node
812
+ </button>
813
+ </div>
814
+ </div>
815
+
816
+ {/* Right: Field Documentation */}
817
+ <div>
818
+ <h3 style={{ marginBottom: 16, color: '#374151' }}>Panel Fields</h3>
819
+ <table style={{ width: '100%', borderCollapse: 'collapse', fontSize: 13 }}>
820
+ <thead>
821
+ <tr style={{ backgroundColor: '#f3f4f6' }}>
822
+ <th style={{ padding: 8, textAlign: 'left', borderBottom: '2px solid #e5e7eb' }}>
823
+ #
824
+ </th>
825
+ <th style={{ padding: 8, textAlign: 'left', borderBottom: '2px solid #e5e7eb' }}>
826
+ Field
827
+ </th>
828
+ <th style={{ padding: 8, textAlign: 'left', borderBottom: '2px solid #e5e7eb' }}>
829
+ Editable?
830
+ </th>
831
+ <th style={{ padding: 8, textAlign: 'left', borderBottom: '2px solid #e5e7eb' }}>
832
+ Description
833
+ </th>
834
+ </tr>
835
+ </thead>
836
+ <tbody>
837
+ <tr>
838
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>1</td>
839
+ <td
840
+ style={{
841
+ padding: 8,
842
+ borderBottom: '1px solid #e5e7eb',
843
+ fontWeight: 'bold',
844
+ color: '#f97316',
845
+ }}
846
+ >
847
+ Icon
848
+ </td>
849
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>Yes (picker)</td>
850
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
851
+ Icon selector with 48 common Lucide icons
852
+ </td>
853
+ </tr>
854
+ <tr>
855
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>2</td>
856
+ <td
857
+ style={{
858
+ padding: 8,
859
+ borderBottom: '1px solid #e5e7eb',
860
+ fontWeight: 'bold',
861
+ color: '#22c55e',
862
+ }}
863
+ >
864
+ Type
865
+ </td>
866
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>Yes (dropdown)</td>
867
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
868
+ Node type selector from availableNodeTypes
869
+ </td>
870
+ </tr>
871
+ <tr>
872
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>3</td>
873
+ <td
874
+ style={{
875
+ padding: 8,
876
+ borderBottom: '1px solid #e5e7eb',
877
+ fontWeight: 'bold',
878
+ color: '#3b82f6',
879
+ }}
880
+ >
881
+ State
882
+ </td>
883
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>No</td>
884
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
885
+ Current state badge (from node.state)
886
+ </td>
887
+ </tr>
888
+ <tr>
889
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>4</td>
890
+ <td
891
+ style={{
892
+ padding: 8,
893
+ borderBottom: '1px solid #e5e7eb',
894
+ fontWeight: 'bold',
895
+ color: '#8b5cf6',
896
+ }}
897
+ >
898
+ Name
899
+ </td>
900
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>Yes (inline)</td>
901
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
902
+ Field with displayInLabel from dataSchema
903
+ </td>
904
+ </tr>
905
+ <tr>
906
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>5</td>
907
+ <td
908
+ style={{
909
+ padding: 8,
910
+ borderBottom: '1px solid #e5e7eb',
911
+ fontWeight: 'bold',
912
+ color: '#06b6d4',
913
+ }}
914
+ >
915
+ Properties
916
+ </td>
917
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>No</td>
918
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
919
+ Other dataSchema fields or all node.data
920
+ </td>
921
+ </tr>
922
+ <tr>
923
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>6</td>
924
+ <td
925
+ style={{
926
+ padding: 8,
927
+ borderBottom: '1px solid #e5e7eb',
928
+ fontWeight: 'bold',
929
+ color: '#64748b',
930
+ }}
931
+ >
932
+ ID
933
+ </td>
934
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>No</td>
935
+ <td style={{ padding: 8, borderBottom: '1px solid #e5e7eb' }}>
936
+ Read-only node identifier
937
+ </td>
938
+ </tr>
939
+ <tr>
940
+ <td style={{ padding: 8 }}>7</td>
941
+ <td style={{ padding: 8, fontWeight: 'bold', color: '#ef4444' }}>Delete</td>
942
+ <td style={{ padding: 8 }}>Action</td>
943
+ <td style={{ padding: 8 }}>Shown only when onDelete prop provided</td>
944
+ </tr>
945
+ </tbody>
946
+ </table>
947
+
948
+ <h4 style={{ marginTop: 24, marginBottom: 12, color: '#374151' }}>Edit Mode Notes</h4>
949
+ <ul style={{ fontSize: 13, lineHeight: 1.8, margin: 0, paddingLeft: 20 }}>
950
+ <li>
951
+ <strong>Icon:</strong> Clicking opens a 6x8 grid picker of common icons
952
+ </li>
953
+ <li>
954
+ <strong>Type:</strong> Dropdown only shown if availableNodeTypes has multiple types
955
+ </li>
956
+ <li>
957
+ <strong>Name:</strong> Click to edit inline, press Enter to save, Escape to cancel
958
+ </li>
959
+ <li>
960
+ <strong>Delete:</strong> Only shown if onDelete callback is provided
961
+ </li>
962
+ </ul>
963
+ </div>
964
+ </div>
965
+
966
+ <h3 style={{ marginTop: 30, marginBottom: 16, color: '#374151' }}>
967
+ Try It: Click a node to see the info panel
968
+ </h3>
969
+ <GraphRenderer canvas={fieldVariationsCanvas} width={850} height={600} editable={true} />
970
+ </div>
971
+ );
972
+ };
973
+
974
+ export const PopupReference: Story = {
975
+ render: () => <PopupReferenceTemplate />,
976
+ parameters: {
977
+ docs: {
978
+ description: {
979
+ story: `
980
+ **Node Info Panel (Popup) Reference**
981
+
982
+ When a node is clicked, the NodeInfoPanel displays:
983
+ 1. **Icon** - Editable with icon picker (48 common Lucide icons)
984
+ 2. **Type** - Node type with selector dropdown (if multiple types available)
985
+ 3. **State** - Current state badge with color
986
+ 4. **Name** - Editable name field (from dataSchema displayInLabel field)
987
+ 5. **Properties** - Other schema fields or all node data
988
+ 6. **ID** - Read-only node identifier
989
+ 7. **Delete Button** - Only shown in edit mode
990
+
991
+ Click a node in the interactive example below to see the panel.
992
+ `,
993
+ },
994
+ },
995
+ },
996
+ };