@principal-ai/principal-view-react 0.7.15 → 0.7.17

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 (138) hide show
  1. package/README.md +9 -24
  2. package/dist/components/ConfigurationSelector.d.ts +1 -1
  3. package/dist/components/ConfigurationSelector.d.ts.map +1 -1
  4. package/dist/components/ConfigurationSelector.js +6 -10
  5. package/dist/components/ConfigurationSelector.js.map +1 -1
  6. package/dist/components/EdgeInfoPanel.d.ts +1 -1
  7. package/dist/components/EdgeInfoPanel.d.ts.map +1 -1
  8. package/dist/components/EdgeInfoPanel.js +14 -18
  9. package/dist/components/EdgeInfoPanel.js.map +1 -1
  10. package/dist/components/GraphRenderer.d.ts +1 -1
  11. package/dist/components/GraphRenderer.d.ts.map +1 -1
  12. package/dist/components/GraphRenderer.js +89 -92
  13. package/dist/components/GraphRenderer.js.map +1 -1
  14. package/dist/components/NarrativeRenderer.d.ts +19 -0
  15. package/dist/components/NarrativeRenderer.d.ts.map +1 -0
  16. package/dist/components/NarrativeRenderer.js +103 -0
  17. package/dist/components/NarrativeRenderer.js.map +1 -0
  18. package/dist/components/NodeInfoPanel.d.ts +1 -1
  19. package/dist/components/NodeInfoPanel.d.ts.map +1 -1
  20. package/dist/components/NodeInfoPanel.js +33 -37
  21. package/dist/components/NodeInfoPanel.js.map +1 -1
  22. package/dist/components/NodeTooltip.js +15 -19
  23. package/dist/components/NodeTooltip.js.map +1 -1
  24. package/dist/components/SelectionSidebar.d.ts +1 -1
  25. package/dist/components/SelectionSidebar.d.ts.map +1 -1
  26. package/dist/components/SelectionSidebar.js +26 -30
  27. package/dist/components/SelectionSidebar.js.map +1 -1
  28. package/dist/components/TestEventPanel.d.ts +6 -0
  29. package/dist/components/TestEventPanel.d.ts.map +1 -1
  30. package/dist/components/TestEventPanel.js +157 -161
  31. package/dist/components/TestEventPanel.js.map +1 -1
  32. package/dist/edges/CustomEdge.d.ts +1 -1
  33. package/dist/edges/CustomEdge.d.ts.map +1 -1
  34. package/dist/edges/CustomEdge.js +18 -22
  35. package/dist/edges/CustomEdge.js.map +1 -1
  36. package/dist/edges/GenericEdge.d.ts +1 -1
  37. package/dist/edges/GenericEdge.d.ts.map +1 -1
  38. package/dist/edges/GenericEdge.js +3 -7
  39. package/dist/edges/GenericEdge.js.map +1 -1
  40. package/dist/hooks/usePathBasedEvents.d.ts +1 -1
  41. package/dist/hooks/usePathBasedEvents.d.ts.map +1 -1
  42. package/dist/hooks/usePathBasedEvents.js +14 -18
  43. package/dist/hooks/usePathBasedEvents.js.map +1 -1
  44. package/dist/index.d.ts +1 -5
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +12 -33
  47. package/dist/index.js.map +1 -1
  48. package/dist/nodes/CustomNode.d.ts +1 -1
  49. package/dist/nodes/CustomNode.d.ts.map +1 -1
  50. package/dist/nodes/CustomNode.js +22 -26
  51. package/dist/nodes/CustomNode.js.map +1 -1
  52. package/dist/nodes/GenericNode.d.ts +1 -1
  53. package/dist/nodes/GenericNode.d.ts.map +1 -1
  54. package/dist/nodes/GenericNode.js +4 -8
  55. package/dist/nodes/GenericNode.js.map +1 -1
  56. package/dist/utils/animationMapping.d.ts +1 -1
  57. package/dist/utils/animationMapping.d.ts.map +1 -1
  58. package/dist/utils/animationMapping.js +6 -13
  59. package/dist/utils/animationMapping.js.map +1 -1
  60. package/dist/utils/graphConverter.d.ts +1 -1
  61. package/dist/utils/graphConverter.d.ts.map +1 -1
  62. package/dist/utils/graphConverter.js +4 -8
  63. package/dist/utils/graphConverter.js.map +1 -1
  64. package/dist/utils/iconResolver.js +7 -45
  65. package/dist/utils/iconResolver.js.map +1 -1
  66. package/dist/utils/narrative-converter.d.ts +45 -0
  67. package/dist/utils/narrative-converter.d.ts.map +1 -0
  68. package/dist/utils/narrative-converter.js +113 -0
  69. package/dist/utils/narrative-converter.js.map +1 -0
  70. package/dist/utils/narrative-loader.d.ts +53 -0
  71. package/dist/utils/narrative-loader.d.ts.map +1 -0
  72. package/dist/utils/narrative-loader.js +163 -0
  73. package/dist/utils/narrative-loader.js.map +1 -0
  74. package/package.json +22 -25
  75. package/src/components/ConfigurationSelector.tsx +1 -1
  76. package/src/components/EdgeInfoPanel.tsx +1 -1
  77. package/src/components/GraphRenderer.test.tsx +1 -1
  78. package/src/components/GraphRenderer.tsx +2 -2
  79. package/src/components/NarrativeRenderer.tsx +171 -0
  80. package/src/components/NodeInfoPanel.tsx +1 -1
  81. package/src/components/NodeTooltip.tsx +3 -3
  82. package/src/components/PendingChanges.test.tsx +1 -1
  83. package/src/components/SelectionSidebar.tsx +1 -1
  84. package/src/components/TestEventPanel.tsx +140 -117
  85. package/src/edges/CustomEdge.tsx +1 -1
  86. package/src/edges/GenericEdge.tsx +1 -1
  87. package/src/hooks/usePathBasedEvents.ts +1 -1
  88. package/src/index.ts +1 -7
  89. package/src/nodes/CustomNode.tsx +1 -1
  90. package/src/nodes/GenericNode.tsx +1 -1
  91. package/src/stories/AnimationWorkshop.stories.tsx +1 -1
  92. package/src/stories/CanvasEdgeTypes.stories.tsx +1 -1
  93. package/src/stories/CanvasNodeTypes.stories.tsx +1 -1
  94. package/src/stories/ColorPriority.stories.tsx +1 -1
  95. package/src/stories/EventDrivenAnimations.stories.tsx +1 -1
  96. package/src/stories/GraphRenderer.stories.tsx +1 -1
  97. package/src/stories/Introduction.mdx +4 -21
  98. package/src/stories/MultiConfig.stories.tsx +1 -1
  99. package/src/stories/MultiDirectionalConnections.stories.tsx +1 -1
  100. package/src/stories/NodeFieldsAudit.stories.tsx +1 -1
  101. package/src/stories/NodeShapes.stories.tsx +1 -1
  102. package/src/stories/OtelComponents.stories.tsx +1 -1
  103. package/src/stories/RealTestExecution.stories.tsx +111 -1
  104. package/src/stories/TraceViewer.stories.tsx +1 -1
  105. package/src/stories/ValidatedExecution.stories.tsx +1 -1
  106. package/src/stories/data/graph-converter-test-execution.json +204 -326
  107. package/src/stories/data/graph-converter-test.narrative.json +106 -0
  108. package/src/stories/data/graph-converter-validated-execution.json +6 -6
  109. package/src/utils/animationMapping.ts +1 -1
  110. package/src/utils/graphConverter.ts +1 -1
  111. package/src/utils/narrative-converter.ts +147 -0
  112. package/src/utils/narrative-loader.ts +172 -0
  113. package/dist/components/EventLog.d.ts +0 -20
  114. package/dist/components/EventLog.d.ts.map +0 -1
  115. package/dist/components/EventLog.js +0 -13
  116. package/dist/components/EventLog.js.map +0 -1
  117. package/dist/components/EventLog.test.d.ts +0 -2
  118. package/dist/components/EventLog.test.d.ts.map +0 -1
  119. package/dist/components/EventLog.test.js +0 -73
  120. package/dist/components/EventLog.test.js.map +0 -1
  121. package/dist/components/GraphRenderer.test.d.ts +0 -2
  122. package/dist/components/GraphRenderer.test.d.ts.map +0 -1
  123. package/dist/components/GraphRenderer.test.js +0 -88
  124. package/dist/components/GraphRenderer.test.js.map +0 -1
  125. package/dist/components/LayerPanel.d.ts +0 -31
  126. package/dist/components/LayerPanel.d.ts.map +0 -1
  127. package/dist/components/LayerPanel.js +0 -207
  128. package/dist/components/LayerPanel.js.map +0 -1
  129. package/dist/components/MetricsDashboard.d.ts +0 -14
  130. package/dist/components/MetricsDashboard.d.ts.map +0 -1
  131. package/dist/components/MetricsDashboard.js +0 -13
  132. package/dist/components/MetricsDashboard.js.map +0 -1
  133. package/src/components/EventLog.test.tsx +0 -85
  134. package/src/components/EventLog.tsx +0 -51
  135. package/src/components/MetricsDashboard.tsx +0 -40
  136. package/src/stories/EventLog.stories.tsx +0 -161
  137. package/src/stories/IndustryThemes.stories.tsx +0 -483
  138. package/src/stories/MetricsDashboard.stories.tsx +0 -227
@@ -1,207 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LayerPanel = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const industry_theme_1 = require("@principal-ade/industry-theme");
7
- const iconResolver_1 = require("../utils/iconResolver");
8
- /**
9
- * Panel that displays and controls layer visibility and organization
10
- */
11
- const LayerPanel = ({ layers, onToggleLayer, onFocusLayer, showNarrativeMode = false, narrativeMode = false, onToggleNarrativeMode, position = 'left', }) => {
12
- const { theme } = (0, industry_theme_1.useTheme)();
13
- const [isCollapsed, setIsCollapsed] = (0, react_1.useState)(false);
14
- const [expandedLayers, setExpandedLayers] = (0, react_1.useState)(new Set());
15
- const toggleLayerExpanded = (layerId) => {
16
- const newExpanded = new Set(expandedLayers);
17
- if (newExpanded.has(layerId)) {
18
- newExpanded.delete(layerId);
19
- }
20
- else {
21
- newExpanded.add(layerId);
22
- }
23
- setExpandedLayers(newExpanded);
24
- };
25
- const sortedLayers = [...layers].sort((a, b) => a.order - b.order);
26
- if (isCollapsed) {
27
- return ((0, jsx_runtime_1.jsx)("div", { style: {
28
- position: 'absolute',
29
- top: '60px',
30
- [position]: '20px',
31
- backgroundColor: theme.colors.background,
32
- borderRadius: '8px',
33
- boxShadow: '0 4px 12px rgba(0,0,0,0.15)',
34
- border: `1px solid ${theme.colors.border}`,
35
- zIndex: 900,
36
- }, children: (0, jsx_runtime_1.jsx)("button", { onClick: () => setIsCollapsed(false), style: {
37
- padding: '12px',
38
- border: 'none',
39
- background: 'none',
40
- cursor: 'pointer',
41
- display: 'flex',
42
- alignItems: 'center',
43
- justifyContent: 'center',
44
- color: theme.colors.text,
45
- }, title: "Expand Layers Panel", children: (0, iconResolver_1.resolveIcon)('Layers', 20) }) }));
46
- }
47
- return ((0, jsx_runtime_1.jsxs)("div", { style: {
48
- position: 'absolute',
49
- top: '60px',
50
- [position]: '20px',
51
- backgroundColor: theme.colors.background,
52
- color: theme.colors.text,
53
- borderRadius: '8px',
54
- boxShadow: '0 4px 12px rgba(0,0,0,0.15)',
55
- padding: '16px',
56
- minWidth: '280px',
57
- maxWidth: '320px',
58
- maxHeight: 'calc(100vh - 120px)',
59
- overflowY: 'auto',
60
- zIndex: 900,
61
- border: `1px solid ${theme.colors.border}`,
62
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
63
- display: 'flex',
64
- justifyContent: 'space-between',
65
- alignItems: 'center',
66
- marginBottom: '16px',
67
- paddingBottom: '12px',
68
- borderBottom: `2px solid ${theme.colors.primary}`,
69
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
70
- display: 'flex',
71
- alignItems: 'center',
72
- gap: '8px',
73
- fontWeight: 'bold',
74
- fontSize: '14px',
75
- }, children: [(0, iconResolver_1.resolveIcon)('Layers', 18), (0, jsx_runtime_1.jsx)("span", { children: "Layers" })] }), (0, jsx_runtime_1.jsx)("button", { onClick: () => setIsCollapsed(true), style: {
76
- border: 'none',
77
- background: 'none',
78
- cursor: 'pointer',
79
- fontSize: '16px',
80
- color: theme.colors.textSecondary,
81
- padding: '0',
82
- width: '24px',
83
- height: '24px',
84
- display: 'flex',
85
- alignItems: 'center',
86
- justifyContent: 'center',
87
- }, title: "Collapse Panel", children: "\u2039" })] }), showNarrativeMode && ((0, jsx_runtime_1.jsxs)("div", { style: {
88
- marginBottom: '16px',
89
- padding: '10px',
90
- backgroundColor: narrativeMode ? theme.colors.highlight : theme.colors.surface,
91
- borderRadius: '6px',
92
- border: narrativeMode
93
- ? `2px solid ${theme.colors.primary}`
94
- : `1px solid ${theme.colors.border}`,
95
- cursor: 'pointer',
96
- transition: 'all 0.2s',
97
- }, onClick: () => onToggleNarrativeMode?.(!narrativeMode), children: [(0, jsx_runtime_1.jsxs)("div", { style: {
98
- display: 'flex',
99
- alignItems: 'center',
100
- justifyContent: 'space-between',
101
- marginBottom: '6px',
102
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', gap: '6px', fontSize: '12px' }, children: [(0, iconResolver_1.resolveIcon)('GitBranch', 14), (0, jsx_runtime_1.jsx)("span", { style: { fontWeight: '600' }, children: "Narrative Mode" })] }), (0, jsx_runtime_1.jsx)("div", { style: {
103
- width: '40px',
104
- height: '20px',
105
- borderRadius: '10px',
106
- backgroundColor: narrativeMode ? theme.colors.primary : theme.colors.border,
107
- position: 'relative',
108
- transition: 'background-color 0.2s',
109
- }, children: (0, jsx_runtime_1.jsx)("div", { style: {
110
- position: 'absolute',
111
- top: '2px',
112
- left: narrativeMode ? '22px' : '2px',
113
- width: '16px',
114
- height: '16px',
115
- borderRadius: '50%',
116
- backgroundColor: theme.colors.background,
117
- transition: 'left 0.2s',
118
- } }) })] }), (0, jsx_runtime_1.jsx)("div", { style: { fontSize: '10px', color: theme.colors.textSecondary }, children: narrativeMode ? 'Show request flow through layers' : 'View all layers normally' })] })), (0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: sortedLayers.map((layer) => {
119
- const isExpanded = expandedLayers.has(layer.id);
120
- const isVisible = layer.visible ?? true;
121
- return ((0, jsx_runtime_1.jsxs)("div", { style: {
122
- backgroundColor: theme.colors.surface,
123
- borderRadius: '6px',
124
- border: `1px solid ${theme.colors.border}`,
125
- overflow: 'hidden',
126
- transition: 'all 0.2s',
127
- }, onMouseEnter: (e) => {
128
- e.currentTarget.style.borderColor = layer.color || theme.colors.primary;
129
- }, onMouseLeave: (e) => {
130
- e.currentTarget.style.borderColor = theme.colors.border;
131
- }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
132
- padding: '10px 12px',
133
- display: 'flex',
134
- alignItems: 'center',
135
- gap: '8px',
136
- cursor: 'pointer',
137
- borderLeft: `4px solid ${layer.color || theme.colors.primary}`,
138
- }, onClick: () => onFocusLayer?.(layer.id), children: [(0, jsx_runtime_1.jsx)("button", { onClick: (e) => {
139
- e.stopPropagation();
140
- onToggleLayer?.(layer.id, !isVisible);
141
- }, style: {
142
- border: 'none',
143
- background: 'none',
144
- cursor: 'pointer',
145
- padding: '2px',
146
- display: 'flex',
147
- alignItems: 'center',
148
- color: isVisible ? theme.colors.text : theme.colors.textMuted,
149
- opacity: isVisible ? 1 : 0.4,
150
- }, title: isVisible ? 'Hide layer' : 'Show layer', children: (0, iconResolver_1.resolveIcon)(isVisible ? 'Eye' : 'EyeOff', 16) }), (0, jsx_runtime_1.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
151
- fontSize: '12px',
152
- fontWeight: '600',
153
- color: theme.colors.text,
154
- marginBottom: '2px',
155
- overflow: 'hidden',
156
- textOverflow: 'ellipsis',
157
- whiteSpace: 'nowrap',
158
- }, children: layer.label }), layer.nodeCount !== undefined && ((0, jsx_runtime_1.jsxs)("div", { style: { fontSize: '10px', color: theme.colors.textSecondary }, children: [layer.nodeCount, " ", layer.nodeCount === 1 ? 'node' : 'nodes'] }))] }), (layer.description || layer.narrative) && ((0, jsx_runtime_1.jsx)("button", { onClick: (e) => {
159
- e.stopPropagation();
160
- toggleLayerExpanded(layer.id);
161
- }, style: {
162
- border: 'none',
163
- background: 'none',
164
- cursor: 'pointer',
165
- padding: '2px',
166
- display: 'flex',
167
- alignItems: 'center',
168
- color: theme.colors.textSecondary,
169
- transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',
170
- transition: 'transform 0.2s',
171
- }, children: (0, iconResolver_1.resolveIcon)('ChevronDown', 14) }))] }), isExpanded && ((0, jsx_runtime_1.jsxs)("div", { style: {
172
- padding: '12px',
173
- paddingTop: '8px',
174
- backgroundColor: theme.colors.background,
175
- borderTop: `1px solid ${theme.colors.border}`,
176
- }, children: [layer.description && ((0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: layer.narrative ? '10px' : '0' }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
177
- fontSize: '9px',
178
- color: theme.colors.textMuted,
179
- textTransform: 'uppercase',
180
- marginBottom: '4px',
181
- fontWeight: '600',
182
- }, children: "Description" }), (0, jsx_runtime_1.jsx)("div", { style: { fontSize: '11px', color: theme.colors.textSecondary }, children: layer.description })] })), layer.narrative && ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { style: {
183
- fontSize: '9px',
184
- color: theme.colors.textMuted,
185
- textTransform: 'uppercase',
186
- marginBottom: '4px',
187
- fontWeight: '600',
188
- }, children: "Narrative" }), (0, jsx_runtime_1.jsx)("div", { style: {
189
- fontSize: '11px',
190
- color: theme.colors.text,
191
- fontStyle: 'italic',
192
- padding: '8px',
193
- backgroundColor: theme.colors.surface,
194
- borderRadius: '4px',
195
- borderLeft: `2px solid ${layer.color || theme.colors.primary}`,
196
- }, children: layer.narrative })] }))] }))] }, layer.id));
197
- }) }), (0, jsx_runtime_1.jsxs)("div", { style: {
198
- marginTop: '16px',
199
- paddingTop: '12px',
200
- borderTop: `1px solid ${theme.colors.border}`,
201
- fontSize: '10px',
202
- color: theme.colors.textMuted,
203
- textAlign: 'center',
204
- }, children: [sortedLayers.filter((l) => l.visible !== false).length, " of ", sortedLayers.length, " visible"] })] }));
205
- };
206
- exports.LayerPanel = LayerPanel;
207
- //# sourceMappingURL=LayerPanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LayerPanel.js","sourceRoot":"","sources":["../../src/components/LayerPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import React from 'react';
2
- import type { GraphMetrics } from '@principal-ai/principal-view-core';
3
- export interface MetricsDashboardProps {
4
- /** Current metrics */
5
- metrics: GraphMetrics;
6
- /** Optional class name */
7
- className?: string;
8
- }
9
- /**
10
- * Metrics dashboard component for displaying graph statistics
11
- * TODO: Implement full metrics visualization
12
- */
13
- export declare const MetricsDashboard: React.FC<MetricsDashboardProps>;
14
- //# sourceMappingURL=MetricsDashboard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MetricsDashboard.d.ts","sourceRoot":"","sources":["../../src/components/MetricsDashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,WAAW,qBAAqB;IACpC,sBAAsB;IACtB,OAAO,EAAE,YAAY,CAAC;IAEtB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAwB5D,CAAC"}
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MetricsDashboard = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- /**
6
- * Metrics dashboard component for displaying graph statistics
7
- * TODO: Implement full metrics visualization
8
- */
9
- const MetricsDashboard = ({ metrics, className }) => {
10
- return ((0, jsx_runtime_1.jsxs)("div", { className: className, style: { padding: '20px', border: '1px solid #ccc' }, children: [(0, jsx_runtime_1.jsx)("h3", { children: "Metrics Dashboard (TODO)" }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("p", { children: ["Total Nodes: ", metrics.nodes.total] }), (0, jsx_runtime_1.jsxs)("p", { children: ["Total Edges: ", metrics.edges.total] }), (0, jsx_runtime_1.jsxs)("p", { children: ["Total Events: ", metrics.events.total] }), (0, jsx_runtime_1.jsxs)("p", { children: ["Violations: ", metrics.validation.violations] }), (0, jsx_runtime_1.jsxs)("p", { children: ["Health Score: ", metrics.validation.healthScore] })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "TODO:" }), (0, jsx_runtime_1.jsxs)("ul", { children: [(0, jsx_runtime_1.jsx)("li", { children: "Add visual charts/graphs" }), (0, jsx_runtime_1.jsx)("li", { children: "Show breakdown by node type" }), (0, jsx_runtime_1.jsx)("li", { children: "Show breakdown by edge type" }), (0, jsx_runtime_1.jsx)("li", { children: "Show event rate over time" }), (0, jsx_runtime_1.jsx)("li", { children: "Add health score indicator" }), (0, jsx_runtime_1.jsx)("li", { children: "Add performance metrics" })] })] })] }));
11
- };
12
- exports.MetricsDashboard = MetricsDashboard;
13
- //# sourceMappingURL=MetricsDashboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MetricsDashboard.js","sourceRoot":"","sources":["../../src/components/MetricsDashboard.tsx"],"names":[],"mappings":";;;;AAWA;;;GAGG;AACI,MAAM,gBAAgB,GAAoC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;IAC1F,OAAO,CACL,iCAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,aAC7E,sEAAiC,EACjC,4CACE,2DAAiB,OAAO,CAAC,KAAK,CAAC,KAAK,IAAK,EACzC,2DAAiB,OAAO,CAAC,KAAK,CAAC,KAAK,IAAK,EACzC,4DAAkB,OAAO,CAAC,MAAM,CAAC,KAAK,IAAK,EAC3C,0DAAgB,OAAO,CAAC,UAAU,CAAC,UAAU,IAAK,EAClD,4DAAkB,OAAO,CAAC,UAAU,CAAC,WAAW,IAAK,IACjD,EACN,4CACE,uDAAsB,EACtB,2CACE,sEAAiC,EACjC,yEAAoC,EACpC,yEAAoC,EACpC,uEAAkC,EAClC,wEAAmC,EACnC,qEAAgC,IAC7B,IACD,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAxBW,QAAA,gBAAgB,oBAwB3B"}
@@ -1,85 +0,0 @@
1
- import React from 'react';
2
- import { render, screen } from '@testing-library/react';
3
- import { EventLog } from './EventLog';
4
- import type { GraphEvent, Violation } from '@principal-ai/principal-view-core';
5
-
6
- describe('EventLog', () => {
7
- const testEvents: GraphEvent[] = [
8
- {
9
- id: 'evt-1',
10
- type: 'node_created',
11
- timestamp: Date.now(),
12
- category: 'node',
13
- operation: 'create',
14
- payload: {
15
- operation: 'create',
16
- nodeId: 'user-1',
17
- nodeType: 'user',
18
- data: { userId: 'alice' },
19
- },
20
- expected: true,
21
- },
22
- {
23
- id: 'evt-2',
24
- type: 'edge_created',
25
- timestamp: Date.now(),
26
- category: 'edge',
27
- operation: 'create',
28
- payload: {
29
- operation: 'create',
30
- edgeId: 'conn-1',
31
- edgeType: 'connection',
32
- from: 'user-1',
33
- to: 'user-2',
34
- },
35
- expected: true,
36
- },
37
- ];
38
-
39
- const testViolations: Violation[] = [
40
- {
41
- id: 'violation-1',
42
- severity: 'error',
43
- type: 'connection',
44
- description: 'Invalid connection',
45
- },
46
- ];
47
-
48
- it('should render without crashing', () => {
49
- render(<EventLog events={testEvents} />);
50
-
51
- expect(screen.getByText(/Event Log/i)).toBeDefined();
52
- });
53
-
54
- it('should display event count', () => {
55
- render(<EventLog events={testEvents} />);
56
-
57
- expect(screen.getByText(/Events: 2/i)).toBeDefined();
58
- });
59
-
60
- it('should display violation count', () => {
61
- render(<EventLog events={testEvents} violations={testViolations} />);
62
-
63
- expect(screen.getByText(/Violations: 1/i)).toBeDefined();
64
- });
65
-
66
- it('should render with empty events', () => {
67
- render(<EventLog events={[]} />);
68
-
69
- expect(screen.getByText(/Events: 0/i)).toBeDefined();
70
- });
71
-
72
- it('should apply custom className', () => {
73
- const { container } = render(<EventLog events={testEvents} className="custom-log" />);
74
-
75
- const element = container.querySelector('.custom-log');
76
- expect(element).toBeDefined();
77
- });
78
-
79
- it('should apply custom maxHeight', () => {
80
- const { container } = render(<EventLog events={testEvents} maxHeight="300px" />);
81
-
82
- const element = container.querySelector('div');
83
- expect(element?.style.maxHeight).toBe('300px');
84
- });
85
- });
@@ -1,51 +0,0 @@
1
- import React from 'react';
2
- import type { GraphEvent, Violation } from '@principal-ai/principal-view-core';
3
-
4
- export interface EventLogProps {
5
- /** List of events to display */
6
- events: GraphEvent[];
7
-
8
- /** Optional violations to highlight */
9
- violations?: Violation[];
10
-
11
- /** Callback when an event is clicked */
12
- onEventClick?: (event: GraphEvent) => void;
13
-
14
- /** Optional class name */
15
- className?: string;
16
-
17
- /** Optional max height */
18
- maxHeight?: number | string;
19
- }
20
-
21
- /**
22
- * Event log component for displaying graph events
23
- * TODO: Implement filtering, search, and severity indicators
24
- */
25
- export const EventLog: React.FC<EventLogProps> = ({
26
- events,
27
- violations = [],
28
- className,
29
- maxHeight = '400px',
30
- }) => {
31
- return (
32
- <div className={className} style={{ maxHeight, overflowY: 'auto', border: '1px solid #ccc' }}>
33
- <div style={{ padding: '10px' }}>
34
- <h3>Event Log (TODO)</h3>
35
- <p>Events: {events.length}</p>
36
- <p>Violations: {violations.length}</p>
37
- <div>
38
- <strong>TODO:</strong>
39
- <ul>
40
- <li>Display events in chronological order</li>
41
- <li>Show event type, category, operation</li>
42
- <li>Highlight violations with color coding</li>
43
- <li>Add filtering by category, type, severity</li>
44
- <li>Add text search</li>
45
- <li>Add timestamp formatting</li>
46
- </ul>
47
- </div>
48
- </div>
49
- </div>
50
- );
51
- };
@@ -1,40 +0,0 @@
1
- import React from 'react';
2
- import type { GraphMetrics } from '@principal-ai/principal-view-core';
3
-
4
- export interface MetricsDashboardProps {
5
- /** Current metrics */
6
- metrics: GraphMetrics;
7
-
8
- /** Optional class name */
9
- className?: string;
10
- }
11
-
12
- /**
13
- * Metrics dashboard component for displaying graph statistics
14
- * TODO: Implement full metrics visualization
15
- */
16
- export const MetricsDashboard: React.FC<MetricsDashboardProps> = ({ metrics, className }) => {
17
- return (
18
- <div className={className} style={{ padding: '20px', border: '1px solid #ccc' }}>
19
- <h3>Metrics Dashboard (TODO)</h3>
20
- <div>
21
- <p>Total Nodes: {metrics.nodes.total}</p>
22
- <p>Total Edges: {metrics.edges.total}</p>
23
- <p>Total Events: {metrics.events.total}</p>
24
- <p>Violations: {metrics.validation.violations}</p>
25
- <p>Health Score: {metrics.validation.healthScore}</p>
26
- </div>
27
- <div>
28
- <strong>TODO:</strong>
29
- <ul>
30
- <li>Add visual charts/graphs</li>
31
- <li>Show breakdown by node type</li>
32
- <li>Show breakdown by edge type</li>
33
- <li>Show event rate over time</li>
34
- <li>Add health score indicator</li>
35
- <li>Add performance metrics</li>
36
- </ul>
37
- </div>
38
- </div>
39
- );
40
- };
@@ -1,161 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { EventLog } from '../components/EventLog';
3
- import type { GraphEvent, Violation } from '@principal-ai/principal-view-core';
4
-
5
- const meta = {
6
- title: 'Components/EventLog',
7
- component: EventLog,
8
- parameters: {
9
- layout: 'centered',
10
- },
11
- tags: ['autodocs'],
12
- } satisfies Meta<typeof EventLog>;
13
-
14
- export default meta;
15
- type Story = StoryObj<typeof meta>;
16
-
17
- // Sample events
18
- const sampleEvents: GraphEvent[] = [
19
- {
20
- id: 'evt-1',
21
- timestamp: Date.now() - 5000,
22
- type: 'node_added',
23
- category: 'node',
24
- operation: 'create',
25
- data: {
26
- nodeId: 'node-1',
27
- nodeType: 'process',
28
- },
29
- metadata: {},
30
- },
31
- {
32
- id: 'evt-2',
33
- timestamp: Date.now() - 4000,
34
- type: 'node_added',
35
- category: 'node',
36
- operation: 'create',
37
- data: {
38
- nodeId: 'node-2',
39
- nodeType: 'data',
40
- },
41
- metadata: {},
42
- },
43
- {
44
- id: 'evt-3',
45
- timestamp: Date.now() - 3000,
46
- type: 'edge_added',
47
- category: 'edge',
48
- operation: 'create',
49
- data: {
50
- edgeId: 'edge-1',
51
- source: 'node-1',
52
- target: 'node-2',
53
- },
54
- metadata: {},
55
- },
56
- {
57
- id: 'evt-4',
58
- timestamp: Date.now() - 2000,
59
- type: 'node_updated',
60
- category: 'node',
61
- operation: 'update',
62
- data: {
63
- nodeId: 'node-1',
64
- changes: { label: 'Updated Processor' },
65
- },
66
- metadata: {},
67
- },
68
- {
69
- id: 'evt-5',
70
- timestamp: Date.now() - 1000,
71
- type: 'validation_run',
72
- category: 'validation',
73
- operation: 'read',
74
- data: {
75
- violations: 2,
76
- warnings: 1,
77
- },
78
- metadata: {},
79
- },
80
- ];
81
-
82
- // Sample violations
83
- const sampleViolations: Violation[] = [
84
- {
85
- id: 'viol-1',
86
- type: 'connection',
87
- severity: 'error',
88
- message: 'Invalid connection between incompatible node types',
89
- context: {
90
- nodeId: 'node-1',
91
- edgeId: 'edge-1',
92
- },
93
- ruleId: 'conn-rule-1',
94
- timestamp: Date.now() - 1000,
95
- },
96
- {
97
- id: 'viol-2',
98
- type: 'structure',
99
- severity: 'warning',
100
- message: 'Node exceeds maximum connection limit',
101
- context: {
102
- nodeId: 'node-2',
103
- },
104
- ruleId: 'struct-rule-1',
105
- timestamp: Date.now() - 500,
106
- },
107
- ];
108
-
109
- export const Default: Story = {
110
- args: {
111
- events: sampleEvents,
112
- violations: sampleViolations,
113
- },
114
- };
115
-
116
- export const EventsOnly: Story = {
117
- args: {
118
- events: sampleEvents,
119
- violations: [],
120
- },
121
- };
122
-
123
- export const EmptyLog: Story = {
124
- args: {
125
- events: [],
126
- violations: [],
127
- },
128
- };
129
-
130
- export const ManyEvents: Story = {
131
- args: {
132
- events: [
133
- ...sampleEvents,
134
- ...Array.from({ length: 20 }, (_, i) => ({
135
- id: `evt-gen-${i}`,
136
- timestamp: Date.now() - i * 500,
137
- type: 'node_updated',
138
- category: 'node' as const,
139
- operation: 'update' as const,
140
- data: {
141
- nodeId: `node-${i}`,
142
- changes: {},
143
- },
144
- metadata: {},
145
- })),
146
- ],
147
- violations: sampleViolations,
148
- maxHeight: '500px',
149
- },
150
- };
151
-
152
- export const WithClickHandler: Story = {
153
- args: {
154
- events: sampleEvents,
155
- violations: sampleViolations,
156
- onEventClick: (event) => {
157
- console.log('Event clicked:', event);
158
- alert(`Event clicked: ${event.type}`);
159
- },
160
- },
161
- };