@principal-ai/subsystems-react 0.17.0 → 0.19.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 (108) hide show
  1. package/README.md +11 -85
  2. package/dist/index.d.ts +7 -44
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +6 -32
  5. package/dist/index.js.map +1 -1
  6. package/dist/subsystem/SubsystemCarousel.d.ts +36 -0
  7. package/dist/subsystem/SubsystemCarousel.d.ts.map +1 -0
  8. package/dist/subsystem/SubsystemCarousel.js +163 -0
  9. package/dist/subsystem/SubsystemCarousel.js.map +1 -0
  10. package/dist/subsystem/SubsystemComponentGraph.d.ts +25 -0
  11. package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -1
  12. package/dist/subsystem/SubsystemComponentGraph.js +329 -68
  13. package/dist/subsystem/SubsystemComponentGraph.js.map +1 -1
  14. package/package.json +4 -4
  15. package/src/index.ts +9 -199
  16. package/src/subsystem/SubsystemComponentGraph.tsx +396 -50
  17. package/src/components/ConfigurationSelector.tsx +0 -133
  18. package/src/components/GraphRenderer.tsx +0 -3195
  19. package/src/components/MultiCanvasRenderer.tsx +0 -295
  20. package/src/components/NodeTooltip.tsx +0 -279
  21. package/src/components/PendingChanges.test.tsx +0 -375
  22. package/src/components/SelectionSidebar.tsx +0 -352
  23. package/src/components/SequenceDiagramRenderer.tsx +0 -1156
  24. package/src/components/WorkflowSequenceDiagram.tsx +0 -270
  25. package/src/components/dashboard/DashboardRenderer.tsx +0 -317
  26. package/src/components/dashboard/MetricPanel.tsx +0 -254
  27. package/src/components/dashboard/MockDataProvider.ts +0 -330
  28. package/src/components/dashboard/components/BarChart.tsx +0 -299
  29. package/src/components/dashboard/components/LineChart.tsx +0 -279
  30. package/src/components/dashboard/components/MetricCard.tsx +0 -270
  31. package/src/components/dashboard/components/SourceLink.tsx +0 -63
  32. package/src/components/dashboard/components/TimeRangeSelector.tsx +0 -280
  33. package/src/components/dashboard/components/index.ts +0 -5
  34. package/src/components/dashboard/index.ts +0 -47
  35. package/src/components/dashboard/types.ts +0 -126
  36. package/src/components/state-view/PipelineView.tsx +0 -347
  37. package/src/components/state-view/index.ts +0 -14
  38. package/src/components/state-view/types.ts +0 -261
  39. package/src/components/state-view/useStateView.ts +0 -205
  40. package/src/contexts/GraphEditContext.tsx +0 -27
  41. package/src/contexts/TooltipPortalContext.ts +0 -8
  42. package/src/edges/CustomEdge.tsx +0 -402
  43. package/src/edges/GenericEdge.tsx +0 -36
  44. package/src/hooks/usePathBasedEvents.ts +0 -192
  45. package/src/hooks/useSequenceLayout.ts +0 -543
  46. package/src/hooks/useUndoRedo.ts +0 -144
  47. package/src/nodes/CustomNode.tsx +0 -1231
  48. package/src/nodes/GenericNode.tsx +0 -55
  49. package/src/nodes/otel/OtelBoundaryNode.tsx +0 -224
  50. package/src/nodes/otel/OtelEventNode.tsx +0 -225
  51. package/src/nodes/otel/OtelResourceNode.tsx +0 -251
  52. package/src/nodes/otel/OtelScopeNode.tsx +0 -221
  53. package/src/nodes/otel/OtelSpanConventionNode.tsx +0 -295
  54. package/src/nodes/otel/index.ts +0 -23
  55. package/src/nodes/otel/shared/NodeBadges.tsx +0 -295
  56. package/src/nodes/otel/shared/NodeContent.tsx +0 -204
  57. package/src/nodes/otel/shared/index.ts +0 -8
  58. package/src/nodes/otel/shared/types.ts +0 -138
  59. package/src/nodes/otel/shared/useNodeBehavior.ts +0 -114
  60. package/src/stories/Audit/BoundaryNodes.stories.tsx +0 -385
  61. package/src/stories/Audit/CanvasEdgeTypes.stories.tsx +0 -1448
  62. package/src/stories/Audit/CanvasNodeTypes.stories.tsx +0 -1049
  63. package/src/stories/Audit/ColorPriority.stories.tsx +0 -895
  64. package/src/stories/Audit/DiamondBadges.stories.tsx +0 -629
  65. package/src/stories/Audit/NodeDimensionsTesting.stories.tsx +0 -724
  66. package/src/stories/Audit/NodeFieldsAudit.stories.tsx +0 -996
  67. package/src/stories/Audit/NodeFontSizeTesting.stories.tsx +0 -715
  68. package/src/stories/Audit/NodeShapes.stories.tsx +0 -1208
  69. package/src/stories/Audit/WideNodesTesting.stories.tsx +0 -1045
  70. package/src/stories/Components/DashboardRenderer.stories.tsx +0 -263
  71. package/src/stories/Components/GraphRenderer.stories.tsx +0 -3236
  72. package/src/stories/Components/MultiCanvasRenderer.stories.tsx +0 -370
  73. package/src/stories/Components/SequenceDiagram.stories.tsx +0 -255
  74. package/src/stories/Components/StateView.stories.tsx +0 -417
  75. package/src/stories/Components/TraceViewer.stories.tsx +0 -442
  76. package/src/stories/Components/WorkflowSequenceDiagram.stories.tsx +0 -802
  77. package/src/stories/Features/AnimationWorkshop.stories.tsx +0 -727
  78. package/src/stories/Features/ChangeTypeVisual.stories.tsx +0 -67
  79. package/src/stories/Features/EventDrivenAnimations.stories.tsx +0 -513
  80. package/src/stories/Features/MultiConfig.stories.tsx +0 -539
  81. package/src/stories/Layout/ElkEdgeRouting.stories.tsx +0 -539
  82. package/src/stories/Layout/GraphOrientation.stories.tsx +0 -500
  83. package/src/stories/Layout/MultiDirectionalConnections.stories.tsx +0 -352
  84. package/src/stories/Nodes/NodeDefinitionComparison.stories.tsx +0 -560
  85. package/src/stories/Nodes/NodeNameFallbacks.stories.tsx +0 -491
  86. package/src/stories/Nodes/NumericColors.stories.tsx +0 -440
  87. package/src/stories/OTEL/EventNameDisplay.stories.tsx +0 -694
  88. package/src/stories/OTEL/EventNameFallback.stories.tsx +0 -578
  89. package/src/stories/OTEL/OtelComponents.stories.tsx +0 -422
  90. package/src/stories/OTEL/OtelNodeTypesPrototype.stories.tsx +0 -806
  91. package/src/stories/OTEL/RawEventCards.stories.tsx +0 -57
  92. package/src/stories/OTEL/SpanBadges.stories.tsx +0 -840
  93. package/src/stories/OTEL/ValidationEventsCanvas.stories.tsx +0 -209
  94. package/src/stories/RealWorld/BacklogMdCanvases.stories.tsx +0 -721
  95. package/src/stories/RealWorld/FileCitySequence.stories.tsx +0 -516
  96. package/src/stories/RealWorld/RealCanvasFiles.stories.tsx +0 -336
  97. package/src/stories/__traces__/test-run.canvas.json +0 -241
  98. package/src/stories/data/activity-feed-analytics.dashboard.json +0 -300
  99. package/src/stories/data/file-city-images-transformed.otel.canvas.json +0 -295
  100. package/src/stories/data/file-city-workflows.json +0 -269
  101. package/src/stories/data/graph-converter-test-execution.json +0 -443
  102. package/src/stories/data/graph-converter-test.workflow.json +0 -105
  103. package/src/stories/data/graph-converter-validated-execution.json +0 -58
  104. package/src/utils/animationMapping.ts +0 -166
  105. package/src/utils/canvasBounds.ts +0 -146
  106. package/src/utils/graphConverter.ts +0 -148
  107. package/src/utils/iconResolver.tsx +0 -53
  108. package/src/utils/orientationUtils.ts +0 -73
@@ -1,336 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react';
3
- import '@xyflow/react/dist/style.css';
4
- import { GraphRenderer } from '../../components/GraphRenderer';
5
- import type { ExtendedCanvas } from '@principal-ai/subsystems-core';
6
- import { ThemeProvider, defaultEditorTheme } from '@principal-ade/industry-theme';
7
-
8
- // Import canvas files as URLs
9
- import scopesCanvasUrl from '../../../../../.principal-views/architecture.scopes.canvas?url';
10
- import spansCanvasUrl from '../../../../../.principal-views/architecture.spans.canvas?url';
11
- import resourcesCanvasUrl from '../../../../../.principal-views/resources.canvas?url';
12
- import matchingLogicCanvasUrl from '../../../../../.principal-views/matching-logic-current-state.canvas?url';
13
- import validationCanvasUrl from '../../../../../.principal-views/validation/validation.otel.canvas?url';
14
-
15
- // Helper to load canvas from URL
16
- async function loadCanvas(url: string): Promise<ExtendedCanvas> {
17
- const response = await fetch(url);
18
- return await response.json();
19
- }
20
-
21
- // Wrapper component that loads canvas data
22
- function CanvasLoader({ url, children }: { url: string; children: (canvas: ExtendedCanvas) => React.ReactNode }) {
23
- const [canvas, setCanvas] = useState<ExtendedCanvas | null>(null);
24
- const [error, setError] = useState<string | null>(null);
25
-
26
- useEffect(() => {
27
- loadCanvas(url)
28
- .then(setCanvas)
29
- .catch((err) => setError(err.message));
30
- }, [url]);
31
-
32
- if (error) {
33
- return <div style={{ padding: 20, color: 'red' }}>Error loading canvas: {error}</div>;
34
- }
35
-
36
- if (!canvas) {
37
- return <div style={{ padding: 20 }}>Loading canvas...</div>;
38
- }
39
-
40
- return (
41
- <div style={{ width: '100%', height: '100vh' }}>
42
- {children(canvas)}
43
- </div>
44
- );
45
- }
46
-
47
- const meta = {
48
- title: 'RealWorld/RealCanvasFiles',
49
- component: GraphRenderer,
50
- parameters: {
51
- layout: 'fullscreen',
52
- },
53
- tags: ['autodocs'],
54
- decorators: [
55
- (Story) => (
56
- <ThemeProvider theme={defaultEditorTheme}>
57
- <div style={{ width: '100vw', height: '100vh' }}>
58
- <Story />
59
- </div>
60
- </ThemeProvider>
61
- ),
62
- ],
63
- } satisfies Meta<typeof GraphRenderer>;
64
-
65
- export default meta;
66
- type Story = StoryObj<typeof meta>;
67
-
68
- // ============================================================================
69
- // Architecture Canvas Files
70
- // ============================================================================
71
-
72
- /**
73
- * Scopes Canvas - Documents instrumentation scopes
74
- *
75
- * File: .principal-views/architecture.scopes.canvas
76
- * Type: otel-scope nodes
77
- * Purpose: Shows OpenTelemetry instrumentation scopes (getTracer calls)
78
- */
79
- export const ScopesCanvas: Story = {
80
- render: () => (
81
- <CanvasLoader url={scopesCanvasUrl}>
82
- {(canvas) => <GraphRenderer canvas={canvas} />}
83
- </CanvasLoader>
84
- ),
85
- parameters: {
86
- docs: {
87
- description: {
88
- story: `
89
- Renders the actual **architecture.scopes.canvas** file from the project.
90
-
91
- This canvas documents instrumentation scopes using \`otel-scope\` nodes with:
92
- - Top-level \`type: "otel-scope"\`
93
- - \`label\` for display name
94
- - \`otel.scope\` for the scope identifier
95
- - Circular node shape
96
-
97
- **Use this to:**
98
- - Preview how scope architecture canvases render
99
- - Verify visual changes to scope nodes
100
- - Test new features on real project files
101
- `,
102
- },
103
- },
104
- },
105
- };
106
-
107
- /**
108
- * Spans Canvas - Defines span naming conventions
109
- *
110
- * File: .principal-views/architecture.spans.canvas
111
- * Type: otel-span-convention nodes
112
- * Purpose: Documents span patterns and valid parent-child relationships
113
- */
114
- export const SpansCanvas: Story = {
115
- render: () => (
116
- <CanvasLoader url={spansCanvasUrl}>
117
- {(canvas) => <GraphRenderer canvas={canvas} />}
118
- </CanvasLoader>
119
- ),
120
- parameters: {
121
- docs: {
122
- description: {
123
- story: `
124
- Renders the actual **architecture.spans.canvas** file from the project.
125
-
126
- This canvas defines span naming conventions using \`otel-span-convention\` nodes with:
127
- - Top-level \`type: "otel-span-convention"\`
128
- - \`label\` for display name
129
- - \`otel.spanPattern\` for matching pattern
130
- - \`otel.spanKind\` for span kind
131
- - Hexagon shape
132
-
133
- **Use this to:**
134
- - Preview how span convention canvases render
135
- - Verify workflow chips display
136
- - Test edge relationships between spans
137
- `,
138
- },
139
- },
140
- },
141
- };
142
-
143
- /**
144
- * Resources Canvas - Documents OTEL resources
145
- *
146
- * File: .principal-views/resources.canvas
147
- * Type: Mixed (text nodes and otel-resource nodes)
148
- * Purpose: Shows service resources and their instrumentation scopes
149
- */
150
- export const ResourcesCanvas: Story = {
151
- render: () => (
152
- <CanvasLoader url={resourcesCanvasUrl}>
153
- {(canvas) => <GraphRenderer canvas={canvas} />}
154
- </CanvasLoader>
155
- ),
156
- parameters: {
157
- docs: {
158
- description: {
159
- story: `
160
- Renders the actual **resources.canvas** file from the project.
161
-
162
- This canvas documents OTEL resources (service.name) and how they map to instrumentation scopes.
163
-
164
- **Use this to:**
165
- - Preview resource topology visualization
166
- - Test resource node rendering
167
- - Verify resource → scope relationships
168
- `,
169
- },
170
- },
171
- },
172
- };
173
-
174
- // ============================================================================
175
- // Workflow/Event Canvas Files
176
- // ============================================================================
177
-
178
- /**
179
- * Validation Workflow Canvas - Event-driven workflow
180
- *
181
- * File: .principal-views/validation/validation.otel.canvas
182
- * Type: otel-event nodes
183
- * Purpose: Documents validation pipeline events and transitions
184
- */
185
- export const ValidationOtelCanvas: Story = {
186
- render: () => (
187
- <CanvasLoader url={validationCanvasUrl}>
188
- {(canvas) => <GraphRenderer canvas={canvas} />}
189
- </CanvasLoader>
190
- ),
191
- parameters: {
192
- docs: {
193
- description: {
194
- story: `
195
- Renders the actual **validation.otel.canvas** file from the project.
196
-
197
- This canvas shows the validation pipeline workflow using \`otel-event\` nodes with:
198
- - Top-level \`type: "otel-event"\`
199
- - \`label\` for display name
200
- - \`event.name\` for the event identifier
201
- - \`event.attributes\` for event schema
202
- - Rectangle/rounded shapes
203
-
204
- **Use this to:**
205
- - Preview workflow event canvases
206
- - Test event node rendering
207
- - Verify event schema tooltips
208
- `,
209
- },
210
- },
211
- },
212
- };
213
-
214
- // ============================================================================
215
- // General Canvas Files
216
- // ============================================================================
217
-
218
- /**
219
- * Matching Logic Canvas - Planning/documentation canvas
220
- *
221
- * File: .principal-views/matching-logic-current-state.canvas
222
- * Type: Regular canvas (text nodes with pv extensions)
223
- * Purpose: Documents implementation status and architecture planning
224
- */
225
- export const MatchingLogicCanvas: Story = {
226
- render: () => (
227
- <CanvasLoader url={matchingLogicCanvasUrl}>
228
- {(canvas) => <GraphRenderer canvas={canvas} />}
229
- </CanvasLoader>
230
- ),
231
- parameters: {
232
- docs: {
233
- description: {
234
- story: `
235
- Renders the actual **matching-logic-current-state.canvas** file from the project.
236
-
237
- This is a regular \`.canvas\` file used for architecture planning and implementation tracking.
238
- Uses standard JSON Canvas \`text\` nodes with \`pv\` extensions for:
239
- - Custom node types (\`pv.nodeType\`)
240
- - Visual styling (\`pv.shape\`, \`pv.fill\`, \`pv.stroke\`)
241
- - References to code files (\`pv.references\`)
242
-
243
- **Use this to:**
244
- - Preview general-purpose canvas files
245
- - Test pv extension rendering
246
- - Verify backward compatibility with old format
247
- `,
248
- },
249
- },
250
- },
251
- };
252
-
253
- // ============================================================================
254
- // Combined View - All Canvas Files Side by Side
255
- // ============================================================================
256
-
257
- /**
258
- * All Canvas Files - Side by side comparison
259
- */
260
- export const AllCanvasTypes: Story = {
261
- render: () => {
262
- const [canvases, setCanvases] = useState<{
263
- scopes?: ExtendedCanvas;
264
- spans?: ExtendedCanvas;
265
- resources?: ExtendedCanvas;
266
- validation?: ExtendedCanvas;
267
- matching?: ExtendedCanvas;
268
- }>({});
269
-
270
- useEffect(() => {
271
- Promise.all([
272
- loadCanvas(scopesCanvasUrl),
273
- loadCanvas(spansCanvasUrl),
274
- loadCanvas(resourcesCanvasUrl),
275
- loadCanvas(validationCanvasUrl),
276
- loadCanvas(matchingLogicCanvasUrl),
277
- ]).then(([scopes, spans, resources, validation, matching]) => {
278
- setCanvases({ scopes, spans, resources, validation, matching });
279
- });
280
- }, []);
281
-
282
- if (!canvases.scopes) {
283
- return <div style={{ padding: 20 }}>Loading all canvases...</div>;
284
- }
285
-
286
- return (
287
- <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '20px', padding: '20px' }}>
288
- <div>
289
- <h3 style={{ marginTop: 0 }}>Scopes Canvas</h3>
290
- <div style={{ height: '300px', border: '1px solid #ccc' }}>
291
- <GraphRenderer canvas={canvases.scopes} />
292
- </div>
293
- </div>
294
- <div>
295
- <h3 style={{ marginTop: 0 }}>Spans Canvas</h3>
296
- <div style={{ height: '300px', border: '1px solid #ccc' }}>
297
- {canvases.spans && <GraphRenderer canvas={canvases.spans} />}
298
- </div>
299
- </div>
300
- <div>
301
- <h3 style={{ marginTop: 0 }}>Resources Canvas</h3>
302
- <div style={{ height: '300px', border: '1px solid #ccc' }}>
303
- {canvases.resources && <GraphRenderer canvas={canvases.resources} />}
304
- </div>
305
- </div>
306
- <div>
307
- <h3 style={{ marginTop: 0 }}>Validation (OTEL Events)</h3>
308
- <div style={{ height: '300px', border: '1px solid #ccc' }}>
309
- {canvases.validation && <GraphRenderer canvas={canvases.validation} />}
310
- </div>
311
- </div>
312
- <div style={{ gridColumn: '1 / -1' }}>
313
- <h3 style={{ marginTop: 0 }}>Matching Logic (Regular Canvas)</h3>
314
- <div style={{ height: '400px', border: '1px solid #ccc' }}>
315
- {canvases.matching && <GraphRenderer canvas={canvases.matching} />}
316
- </div>
317
- </div>
318
- </div>
319
- );
320
- },
321
- parameters: {
322
- docs: {
323
- description: {
324
- story: `
325
- Shows all canvas file types rendered side by side for comparison.
326
-
327
- This view helps:
328
- - Compare visual styling across different canvas types
329
- - Test layout consistency
330
- - Verify theme application
331
- - Spot visual regressions quickly
332
- `,
333
- },
334
- },
335
- },
336
- };
@@ -1,241 +0,0 @@
1
- {
2
- "name": "Trace: principal-view-core-tests",
3
- "description": "Exported at 2025-12-26T01:11:11.110Z",
4
- "nodeTypes": {
5
- "span": {
6
- "description": "OpenTelemetry span from trace",
7
- "shape": "rectangle"
8
- },
9
- "service": {
10
- "description": "Service grouping",
11
- "icon": "server",
12
- "shape": "rectangle"
13
- }
14
- },
15
- "edgeTypes": {
16
- "span-child": {
17
- "label": "Child span",
18
- "directed": true
19
- }
20
- },
21
- "display": {
22
- "layout": "manual",
23
- "animations": {
24
- "enabled": true,
25
- "speed": 1
26
- }
27
- },
28
- "nodes": [
29
- {
30
- "id": "service-principal-view-core-tests",
31
- "type": "group",
32
- "x": -20,
33
- "y": -50,
34
- "width": 1490,
35
- "height": 130,
36
- "label": "principal-view-core-tests",
37
- "pv": {
38
- "nodeType": "service",
39
- "name": "principal-view-core-tests",
40
- "icon": "server"
41
- }
42
- },
43
- {
44
- "id": "ac239f825108da25",
45
- "type": "text",
46
- "x": 0,
47
- "y": 0,
48
- "width": 200,
49
- "height": 60,
50
- "text": "test:basic-traced",
51
- "pv": {
52
- "nodeType": "span",
53
- "name": "test:basic-traced",
54
- "description": "11.75ms",
55
- "shape": "circle",
56
- "fill": "#6b7280",
57
- "states": {
58
- "OK": {
59
- "color": "#22c55e",
60
- "label": "OK"
61
- }
62
- },
63
- "otel": {
64
- "kind": "instance",
65
- "category": "span"
66
- },
67
- "dataSchema": {
68
- "test.type": {
69
- "type": "string",
70
- "required": false
71
- }
72
- }
73
- }
74
- },
75
- {
76
- "id": "a2ec37169e76db0a",
77
- "type": "text",
78
- "x": 250,
79
- "y": 0,
80
- "width": 200,
81
- "height": 60,
82
- "text": "operation:validate",
83
- "pv": {
84
- "nodeType": "span",
85
- "name": "operation:validate",
86
- "description": "5.63ms",
87
- "shape": "circle",
88
- "fill": "#6b7280",
89
- "states": {
90
- "OK": {
91
- "color": "#22c55e",
92
- "label": "OK"
93
- }
94
- },
95
- "otel": {
96
- "kind": "instance",
97
- "category": "span"
98
- },
99
- "dataSchema": {
100
- "operation.type": {
101
- "type": "string",
102
- "required": false
103
- }
104
- }
105
- }
106
- },
107
- {
108
- "id": "4cc98464bf2a78b6",
109
- "type": "text",
110
- "x": 500,
111
- "y": 0,
112
- "width": 200,
113
- "height": 60,
114
- "text": "operation:process",
115
- "pv": {
116
- "nodeType": "span",
117
- "name": "operation:process",
118
- "description": "5.78ms",
119
- "shape": "circle",
120
- "fill": "#6b7280",
121
- "states": {
122
- "OK": {
123
- "color": "#22c55e",
124
- "label": "OK"
125
- }
126
- },
127
- "otel": {
128
- "kind": "instance",
129
- "category": "span"
130
- },
131
- "dataSchema": {
132
- "operation.type": {
133
- "type": "string",
134
- "required": false
135
- },
136
- "input": {
137
- "type": "string",
138
- "required": false
139
- }
140
- }
141
- }
142
- },
143
- {
144
- "id": "c6354fc184a8d56a",
145
- "type": "text",
146
- "x": 750,
147
- "y": 0,
148
- "width": 200,
149
- "height": 60,
150
- "text": "test:nested-spans",
151
- "pv": {
152
- "nodeType": "span",
153
- "name": "test:nested-spans",
154
- "description": "11.60ms",
155
- "shape": "circle",
156
- "fill": "#6b7280",
157
- "states": {
158
- "OK": {
159
- "color": "#22c55e",
160
- "label": "OK"
161
- }
162
- },
163
- "otel": {
164
- "kind": "instance",
165
- "category": "span"
166
- },
167
- "dataSchema": {
168
- "test.type": {
169
- "type": "string",
170
- "required": false
171
- }
172
- }
173
- }
174
- },
175
- {
176
- "id": "3884b9ed9e60a5c9",
177
- "type": "text",
178
- "x": 1000,
179
- "y": 0,
180
- "width": 200,
181
- "height": 60,
182
- "text": "child:computation",
183
- "pv": {
184
- "nodeType": "span",
185
- "name": "child:computation",
186
- "description": "5.55ms",
187
- "shape": "circle",
188
- "fill": "#6b7280",
189
- "states": {
190
- "UNSET": {
191
- "color": "#6b7280",
192
- "label": "UNSET"
193
- }
194
- },
195
- "otel": {
196
- "kind": "instance",
197
- "category": "span"
198
- },
199
- "dataSchema": {
200
- "computation.type": {
201
- "type": "string",
202
- "required": false
203
- }
204
- }
205
- }
206
- },
207
- {
208
- "id": "ffede854df0d18bc",
209
- "type": "text",
210
- "x": 1250,
211
- "y": 0,
212
- "width": 200,
213
- "height": 60,
214
- "text": "test:manual-span",
215
- "pv": {
216
- "nodeType": "span",
217
- "name": "test:manual-span",
218
- "description": "5.64ms",
219
- "shape": "circle",
220
- "fill": "#6b7280",
221
- "states": {
222
- "UNSET": {
223
- "color": "#6b7280",
224
- "label": "UNSET"
225
- }
226
- },
227
- "otel": {
228
- "kind": "instance",
229
- "category": "span"
230
- },
231
- "dataSchema": {
232
- "manual": {
233
- "type": "boolean",
234
- "required": false
235
- }
236
- }
237
- }
238
- }
239
- ],
240
- "edges": []
241
- }