@principal-ai/subsystems-react 0.55.3 → 0.56.1
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.
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/pierre/PierreFileView.js +3 -3
- package/dist/pierre/PierreFileView.js.map +1 -1
- package/dist/pierre/PierreTrailCodeView.d.ts +4 -9
- package/dist/pierre/PierreTrailCodeView.d.ts.map +1 -1
- package/dist/pierre/PierreTrailCodeView.js +28 -25
- package/dist/pierre/PierreTrailCodeView.js.map +1 -1
- package/dist/pierre/fileAvailability.d.ts +4 -7
- package/dist/pierre/fileAvailability.d.ts.map +1 -1
- package/dist/pierre/fileAvailability.js +5 -10
- package/dist/pierre/fileAvailability.js.map +1 -1
- package/dist/pierre/trailSnippet.d.ts +10 -0
- package/dist/pierre/trailSnippet.d.ts.map +1 -0
- package/dist/pierre/trailSnippet.js +22 -0
- package/dist/pierre/trailSnippet.js.map +1 -0
- package/dist/subsystem/C4Graph.d.ts.map +1 -1
- package/dist/subsystem/C4Graph.js +1 -1
- package/dist/subsystem/C4Graph.js.map +1 -1
- package/dist/subsystem/FileDrawer.d.ts +3 -1
- package/dist/subsystem/FileDrawer.d.ts.map +1 -1
- package/dist/subsystem/FileDrawer.js +2 -2
- package/dist/subsystem/FileDrawer.js.map +1 -1
- package/dist/subsystem/IssueList.d.ts.map +1 -1
- package/dist/subsystem/IssueList.js +26 -0
- package/dist/subsystem/IssueList.js.map +1 -1
- package/dist/subsystem/SubsystemComponentGraph.d.ts +9 -5
- package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -1
- package/dist/subsystem/SubsystemComponentGraph.js +37 -47
- package/dist/subsystem/SubsystemComponentGraph.js.map +1 -1
- package/dist/subsystem/TrailStackBreadcrumb.d.ts +21 -0
- package/dist/subsystem/TrailStackBreadcrumb.d.ts.map +1 -0
- package/dist/subsystem/TrailStackBreadcrumb.js +77 -0
- package/dist/subsystem/TrailStackBreadcrumb.js.map +1 -0
- package/dist/subsystem/TrailStepsNav.d.ts +4 -3
- package/dist/subsystem/TrailStepsNav.d.ts.map +1 -1
- package/dist/subsystem/TrailStepsNav.js +13 -16
- package/dist/subsystem/TrailStepsNav.js.map +1 -1
- package/dist/subsystem/TrailsPanel.d.ts +9 -7
- package/dist/subsystem/TrailsPanel.d.ts.map +1 -1
- package/dist/subsystem/TrailsPanel.js +126 -76
- package/dist/subsystem/TrailsPanel.js.map +1 -1
- package/dist/subsystem/model.d.ts +5 -18
- package/dist/subsystem/model.d.ts.map +1 -1
- package/dist/subsystem/model.js +3 -11
- package/dist/subsystem/model.js.map +1 -1
- package/dist/subsystem/nodes.d.ts.map +1 -1
- package/dist/subsystem/nodes.js +17 -24
- package/dist/subsystem/nodes.js.map +1 -1
- package/dist/subsystem/stepEmphasis.d.ts +78 -0
- package/dist/subsystem/stepEmphasis.d.ts.map +1 -0
- package/dist/subsystem/stepEmphasis.js +89 -0
- package/dist/subsystem/stepEmphasis.js.map +1 -0
- package/dist/subsystem/trailBrief.d.ts.map +1 -1
- package/dist/subsystem/trailBrief.js +20 -0
- package/dist/subsystem/trailBrief.js.map +1 -1
- package/dist/subsystem/trailStack.d.ts +53 -0
- package/dist/subsystem/trailStack.d.ts.map +1 -0
- package/dist/subsystem/trailStack.js +154 -0
- package/dist/subsystem/trailStack.js.map +1 -0
- package/dist/subsystem/trailStepDisplay.d.ts +38 -0
- package/dist/subsystem/trailStepDisplay.d.ts.map +1 -0
- package/dist/subsystem/trailStepDisplay.js +41 -0
- package/dist/subsystem/trailStepDisplay.js.map +1 -0
- package/package.json +3 -3
- package/src/index.ts +10 -1
- package/src/pierre/PierreFileView.tsx +3 -3
- package/src/pierre/PierreTrailCodeView.tsx +24 -36
- package/src/pierre/fileAvailability.test.ts +0 -6
- package/src/pierre/fileAvailability.ts +5 -13
- package/src/pierre/trailSnippet.test.ts +74 -0
- package/src/pierre/trailSnippet.ts +35 -0
- package/src/stories/Canvases/Subsystem/Deprecated.stories.tsx +3 -17
- package/src/stories/Canvases/Subsystem/NodeAnatomy.stories.tsx +3 -31
- package/src/stories/Canvases/Subsystem/Trails.stories.tsx +0 -187
- package/src/subsystem/C4Graph.tsx +0 -1
- package/src/subsystem/FileDrawer.tsx +6 -0
- package/src/subsystem/IssueList.tsx +26 -0
- package/src/subsystem/SubsystemComponentGraph.tsx +68 -65
- package/src/subsystem/TrailStackBreadcrumb.test.tsx +109 -0
- package/src/subsystem/TrailStackBreadcrumb.tsx +172 -0
- package/src/subsystem/TrailStepsNav.test.tsx +35 -0
- package/src/subsystem/TrailStepsNav.tsx +18 -19
- package/src/subsystem/TrailsPanel.test.tsx +149 -0
- package/src/subsystem/TrailsPanel.tsx +165 -39
- package/src/subsystem/model.test.ts +7 -22
- package/src/subsystem/model.ts +6 -20
- package/src/subsystem/nodes.tsx +19 -28
- package/src/subsystem/stepEmphasis.ts +151 -0
- package/src/subsystem/trailBrief.test.ts +29 -0
- package/src/subsystem/trailBrief.ts +20 -0
- package/src/subsystem/trailStack.test.ts +133 -0
- package/src/subsystem/trailStack.ts +229 -0
- package/src/subsystem/trailStepDisplay.ts +68 -0
- package/src/stories/Canvases/Subsystem/Proposed.stories.tsx +0 -256
- package/src/stories/Canvases/Subsystem/ProposedTrails.stories.tsx +0 -184
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubsystemComponentGraph.d.ts","sourceRoot":"","sources":["../../src/subsystem/SubsystemComponentGraph.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAiC,SAAS,EAAE,MAAM,OAAO,CAAC;AAkBtE,OAAO,EAYL,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EAEvB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAG9B,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,iDAAiD,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAOL,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AAKrB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"SubsystemComponentGraph.d.ts","sourceRoot":"","sources":["../../src/subsystem/SubsystemComponentGraph.tsx"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,7 @@ import { FileDrawer, FILE_DRAWER_HEIGHT_MS } from './FileDrawer';
|
|
|
35
35
|
import { GraphWithSidebar } from './GraphWithSidebar';
|
|
36
36
|
import { buildRepoGroups, repoAvatarUrl } from './paths';
|
|
37
37
|
import { TrailsPanel, TRAIL_PLAY_PAUSE_MS } from './TrailsPanel';
|
|
38
|
+
import { TrailStackBreadcrumb } from './TrailStackBreadcrumb';
|
|
38
39
|
import { EDGE_LABEL_WIDTH, EDGE_LABEL_HEIGHT, EDGE_LABEL_FONT_SIZE, EDGE_LABEL_CLOUD_PATH, EDGE_LABEL_CLOUD_EXTRA_TOP, } from '../utils/edgeLabel';
|
|
39
40
|
/** Identifiers a token could match to name this component as a construct. */
|
|
40
41
|
function constructIdentifiers(comp) {
|
|
@@ -117,18 +118,17 @@ function FileOverlayCloseButton({ onClose }) {
|
|
|
117
118
|
transition: 'background 120ms ease, color 120ms ease',
|
|
118
119
|
}, children: _jsx(X, { size: 14 }) }));
|
|
119
120
|
}
|
|
120
|
-
const TrailDrawerContent = memo(function TrailDrawerContent({ render, trail, stepIndex, onOpenFile,
|
|
121
|
+
const TrailDrawerContent = memo(function TrailDrawerContent({ render, trail, stepIndex, onOpenFile, resolveSymbol, onSymbolClick, onVisibleStepChange, }) {
|
|
121
122
|
return (_jsx(_Fragment, { children: render({
|
|
122
123
|
trail,
|
|
123
124
|
stepIndex,
|
|
124
125
|
onOpenFile,
|
|
125
|
-
proposedAliases,
|
|
126
126
|
resolveSymbol,
|
|
127
127
|
onSymbolClick,
|
|
128
128
|
onVisibleStepChange,
|
|
129
129
|
}) }));
|
|
130
130
|
});
|
|
131
|
-
function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirection: layoutDirectionProp, defaultLayoutDirection = 'horizontal', onLayoutDirectionChange, hideLayoutToggle = false, refocusOnLayoutFlip = true, initialTrailId, onTrailSelect, onTrailStepHover, onReorderTrails, onSelect, onEdgeSelect, measured: _measured, maxNodeWidth, showEdgeLabels, showSingletonFrames = true, moduleNesting, edgeView, title, hideSidebar, trailStepMode = 'focus', autoPlayTrails = false, trailAutoPlayIntervalMs = TRAIL_PLAY_PAUSE_MS, zoomOnTrailFocus = true, trailFocusDurationMs = 300, graphTitle, showTrailTitle = false, description, canvasOverlay, sidebarExtra, sidebarAfterDescription, diagnostic, issues, showIssues, focusIssueCategory, laneStatus, onSelectIssue, onApplyIssueFix, onHoverIssue, renderFileViewer, renderTrailViewer, onFileSelect, componentVerification, onInspectSymbol, boundaryColors, codeProcessKeys, hideDrawer = false, persistKey, liveEvents, agentsPanel }) {
|
|
131
|
+
function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirection: layoutDirectionProp, defaultLayoutDirection = 'horizontal', onLayoutDirectionChange, hideLayoutToggle = false, refocusOnLayoutFlip = true, initialTrailId, onTrailSelect, onTrailStepHover, onReorderTrails, stepEmphasis, onRemoveStepEmphasis, onSelect, onEdgeSelect, measured: _measured, maxNodeWidth, showEdgeLabels, showSingletonFrames = true, moduleNesting, edgeView, title, hideSidebar, trailStepMode = 'focus', autoPlayTrails = false, trailAutoPlayIntervalMs = TRAIL_PLAY_PAUSE_MS, zoomOnTrailFocus = true, trailFocusDurationMs = 300, graphTitle, showTrailTitle = false, description, canvasOverlay, sidebarExtra, sidebarAfterDescription, diagnostic, issues, showIssues, focusIssueCategory, laneStatus, onSelectIssue, onApplyIssueFix, onHoverIssue, renderFileViewer, renderTrailViewer, onFileSelect, componentVerification, onInspectSymbol, boundaryColors, codeProcessKeys, hideDrawer = false, persistKey, liveEvents, agentsPanel }) {
|
|
132
132
|
const { theme } = useTheme();
|
|
133
133
|
const { fitView, fitBounds, screenToFlowPosition } = useReactFlow();
|
|
134
134
|
const viewport = useViewport();
|
|
@@ -892,15 +892,25 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
892
892
|
}, [issues]);
|
|
893
893
|
// Per-edge step verification badge: maps edge IDs to step verification status.
|
|
894
894
|
// Keyed by the React Flow edge id (from → mechanism → to). An edge can have
|
|
895
|
-
// multiple steps with issues; we show the worst status
|
|
895
|
+
// multiple steps with issues; we show the worst status.
|
|
896
896
|
const stepIssueBadgeByEdgeId = useMemo(() => {
|
|
897
|
+
// Unconfirmed is the hard failure; a miscategorized `calls` edge is the
|
|
898
|
+
// next most actionable (it changes what the edge means); drift is last.
|
|
899
|
+
const rank = {
|
|
900
|
+
step_span_unconfirmed: 3,
|
|
901
|
+
step_site_outside_from: 2,
|
|
902
|
+
step_span_stale: 1,
|
|
903
|
+
};
|
|
897
904
|
const map = new Map();
|
|
898
905
|
if (!issues?.length || !trails?.length) {
|
|
899
906
|
return map;
|
|
900
907
|
}
|
|
901
908
|
for (const issue of issues) {
|
|
902
|
-
if (issue.kind !== 'step_span_unconfirmed' &&
|
|
909
|
+
if (issue.kind !== 'step_span_unconfirmed' &&
|
|
910
|
+
issue.kind !== 'step_span_stale' &&
|
|
911
|
+
issue.kind !== 'step_site_outside_from') {
|
|
903
912
|
continue;
|
|
913
|
+
}
|
|
904
914
|
const stepInfo = issueStep(issue);
|
|
905
915
|
if (!stepInfo)
|
|
906
916
|
continue;
|
|
@@ -908,33 +918,18 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
908
918
|
if (!step)
|
|
909
919
|
continue;
|
|
910
920
|
const edgeId = trailStepGraphEdgeId(step);
|
|
921
|
+
const kind = issue.kind;
|
|
911
922
|
const prev = map.get(edgeId);
|
|
912
|
-
|
|
913
|
-
const
|
|
923
|
+
const isWorse = !prev || rank[kind] > rank[prev.kind];
|
|
924
|
+
const nextKind = isWorse ? kind : prev.kind;
|
|
914
925
|
map.set(edgeId, {
|
|
915
|
-
kind:
|
|
926
|
+
kind: nextKind,
|
|
916
927
|
severity: prev?.severity === 'error' || issue.severity === 'error' ? 'error' : 'info',
|
|
917
928
|
count: (prev?.count ?? 0) + 1,
|
|
918
929
|
});
|
|
919
930
|
}
|
|
920
931
|
return map;
|
|
921
932
|
}, [issues, trails, issueStep]);
|
|
922
|
-
// Edges backed by a step that ITSELF declares `proposed` — a planned seam
|
|
923
|
-
// between otherwise-real components. Distinct from a proposed ENDPOINT
|
|
924
|
-
// (the node is the placeholder there, and draws its own dashed border):
|
|
925
|
-
// here the seam is the claim that is not real yet, so the edge label draws
|
|
926
|
-
// dashed. Proposed steps are never verified, so this never competes with
|
|
927
|
-
// the step-issue badge.
|
|
928
|
-
const proposedEdgeIds = useMemo(() => {
|
|
929
|
-
const set = new Set();
|
|
930
|
-
for (const trail of trails ?? []) {
|
|
931
|
-
for (const step of trail.steps) {
|
|
932
|
-
if (step.proposed)
|
|
933
|
-
set.add(trailStepGraphEdgeId(step));
|
|
934
|
-
}
|
|
935
|
-
}
|
|
936
|
-
return set;
|
|
937
|
-
}, [trails]);
|
|
938
933
|
// Expanded verification layers in the diagnostics list. When any layer with
|
|
939
934
|
// findings is expanded, the canvas dims everything that layer does not
|
|
940
935
|
// implicate (see `issueFocus`). The list publishes this through
|
|
@@ -1252,11 +1247,6 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
1252
1247
|
}, [xyflowNodesBase, openFile, selected, focusNodeIds, openedNodeIds, brightNodeIds, previewNodeIds, issueFocusNodeIds, issueBadgeByAlias, regionIssueByNodeId, boundaryColors]);
|
|
1253
1248
|
const baseNodesKey = useMemo(() => nodes.map((n) => n.id).sort().join(','), [nodes]);
|
|
1254
1249
|
const baseEdgesKey = useMemo(() => convertedEdges.map((e) => e.id).sort().join(','), [convertedEdges]);
|
|
1255
|
-
// Stamp `proposedStep` onto edge data so the SVG edge itself (not just its
|
|
1256
|
-
// label) draws dashed when a backing trail step declares itself proposed.
|
|
1257
|
-
const proposedStampedEdges = useMemo(() => baseEdges.map((e) => proposedEdgeIds.has(e.id)
|
|
1258
|
-
? { ...e, data: { ...e.data, proposedStep: true } }
|
|
1259
|
-
: e), [baseEdges, proposedEdgeIds]);
|
|
1260
1250
|
const dispEdges = useMemo(() => {
|
|
1261
1251
|
const paint = (e, dimmed) => {
|
|
1262
1252
|
const markerEnd = e.markerEnd;
|
|
@@ -1281,7 +1271,7 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
1281
1271
|
return isTrailMechanism(mechanism);
|
|
1282
1272
|
};
|
|
1283
1273
|
if (openedEdgeIds || focusEdgeIds || previewEdgeIds || issueFocusEdgeIds) {
|
|
1284
|
-
return
|
|
1274
|
+
return baseEdges.map((e) => {
|
|
1285
1275
|
const vis = flowElementVisibility({
|
|
1286
1276
|
inOpened: openedEdgeIds?.has(e.id) === true,
|
|
1287
1277
|
inSelected: focusEdgeIds?.has(e.id) === true,
|
|
@@ -1295,13 +1285,13 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
1295
1285
|
});
|
|
1296
1286
|
}
|
|
1297
1287
|
if (selectedEdgeId) {
|
|
1298
|
-
return
|
|
1288
|
+
return baseEdges.map((e) => ({
|
|
1299
1289
|
...paint(e, e.id !== selectedEdgeId),
|
|
1300
1290
|
hidden: !edgeInView(e),
|
|
1301
1291
|
}));
|
|
1302
1292
|
}
|
|
1303
|
-
return
|
|
1304
|
-
}, [
|
|
1293
|
+
return baseEdges.map((e) => ({ ...e, hidden: !edgeInView(e) }));
|
|
1294
|
+
}, [baseEdges, selectedEdgeId, openedEdgeIds, focusEdgeIds, previewEdgeIds, issueFocusEdgeIds, resolvedEdgeView]);
|
|
1305
1295
|
// Gated on layoutReady so the pre-reveal Pass 1 swap never flashes a count.
|
|
1306
1296
|
const unroutedIds = useMemo(() => (layoutReady ? unroutedEdgeIds(dispEdges) : []), [dispEdges, layoutReady]);
|
|
1307
1297
|
const onNodesChange = useCallback((changes) => {
|
|
@@ -1369,9 +1359,9 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
1369
1359
|
// own owner-avatar header. Clicking a header collapses that repo's tree.
|
|
1370
1360
|
const repoGroups = useMemo(() => buildRepoGroups(components), [components]);
|
|
1371
1361
|
const hasTrails = useMemo(() => (trails?.length ?? 0) > 0, [trails]);
|
|
1372
|
-
//
|
|
1373
|
-
// (and
|
|
1374
|
-
const
|
|
1362
|
+
// Alias → component, so the Trails panel can show human hop names instead
|
|
1363
|
+
// of model-local aliases (and the site/`via` distinction can read).
|
|
1364
|
+
const componentByAlias = useMemo(() => new Map(components.map((c) => [c.alias, c])), [components]);
|
|
1375
1365
|
// Diagnostics view in the sidebar. Uncontrolled unless the host pins
|
|
1376
1366
|
// `showIssues`: the title-row chip toggles it, seeded from issues presence.
|
|
1377
1367
|
const [diagnosticsOpen, setDiagnosticsOpen] = useState(showIssues ?? (issues?.length ?? 0) > 0);
|
|
@@ -2138,7 +2128,6 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
2138
2128
|
.map((e) => {
|
|
2139
2129
|
const d = e.data;
|
|
2140
2130
|
const stepIssue = stepIssueBadgeByEdgeId.get(e.id);
|
|
2141
|
-
const proposed = proposedEdgeIds.has(e.id);
|
|
2142
2131
|
return {
|
|
2143
2132
|
id: e.id,
|
|
2144
2133
|
mechanism: d?.mechanism ?? 'uses',
|
|
@@ -2149,11 +2138,10 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
2149
2138
|
pathLength: d?.pathLength ?? 0,
|
|
2150
2139
|
stepNos: selectedFlowStepNos?.get(e.id),
|
|
2151
2140
|
stepIssue,
|
|
2152
|
-
proposed,
|
|
2153
2141
|
};
|
|
2154
2142
|
});
|
|
2155
2143
|
return labels;
|
|
2156
|
-
}, [dispEdges, selectedFlowStepNos, stepIssueBadgeByEdgeId
|
|
2144
|
+
}, [dispEdges, selectedFlowStepNos, stepIssueBadgeByEdgeId]);
|
|
2157
2145
|
// Unique source files across components → sidebar file trees.
|
|
2158
2146
|
const treeFilePaths = treeFiles;
|
|
2159
2147
|
// The hovered node's file (null when not hovering / file-less component).
|
|
@@ -2245,7 +2233,7 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
2245
2233
|
}, onLeaveStep: () => {
|
|
2246
2234
|
setHoveredTrailStep(null);
|
|
2247
2235
|
onTrailStepHover?.(null);
|
|
2248
|
-
}, onReorder: onReorderTrails,
|
|
2236
|
+
}, onReorder: onReorderTrails, componentByAlias: componentByAlias, stepEmphasis: stepEmphasis, onRemoveStepEmphasis: onRemoveStepEmphasis, layoutFocusedTrailId: layoutTrailId, onFocusLayout: toggleLayoutFocus })) : treeFilePaths.length > 0 ? (_jsx(_Fragment, { children: repoGroups.groups.map((group, i) => {
|
|
2249
2237
|
const groupKey = group.repoKey ?? '__no-repo__';
|
|
2250
2238
|
const collapsed = collapsedRepos.has(groupKey);
|
|
2251
2239
|
return (_jsxs("div", { style: {
|
|
@@ -2319,9 +2307,7 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
2319
2307
|
position: 'absolute',
|
|
2320
2308
|
inset: 0,
|
|
2321
2309
|
borderRadius: 4,
|
|
2322
|
-
border:
|
|
2323
|
-
? `1.5px dashed ${color}`
|
|
2324
|
-
: `0.5px solid ${color}`,
|
|
2310
|
+
border: `0.5px solid ${color}`,
|
|
2325
2311
|
background: theme.colors.backgroundSecondary ?? theme.colors.background,
|
|
2326
2312
|
pointerEvents: 'none',
|
|
2327
2313
|
} })) : (_jsx("svg", { "aria-hidden": true, width: EDGE_LABEL_WIDTH, height: EDGE_LABEL_HEIGHT + EDGE_LABEL_CLOUD_EXTRA_TOP, viewBox: `0 0 ${EDGE_LABEL_WIDTH} ${EDGE_LABEL_HEIGHT + EDGE_LABEL_CLOUD_EXTRA_TOP}`, style: {
|
|
@@ -2329,7 +2315,7 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
2329
2315
|
left: 0,
|
|
2330
2316
|
top: -EDGE_LABEL_CLOUD_EXTRA_TOP,
|
|
2331
2317
|
pointerEvents: 'none',
|
|
2332
|
-
}, children: _jsx("path", { d: EDGE_LABEL_CLOUD_PATH, fill: theme.colors.backgroundSecondary ?? theme.colors.background, stroke: hexWithAlpha(color, 0.75), strokeWidth: 1.2, strokeLinejoin: "round"
|
|
2318
|
+
}, children: _jsx("path", { d: EDGE_LABEL_CLOUD_PATH, fill: theme.colors.backgroundSecondary ?? theme.colors.background, stroke: hexWithAlpha(color, 0.75), strokeWidth: 1.2, strokeLinejoin: "round" }) })), _jsx("span", { style: {
|
|
2333
2319
|
position: 'relative',
|
|
2334
2320
|
display: 'block',
|
|
2335
2321
|
maxWidth: '100%',
|
|
@@ -2350,7 +2336,9 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
2350
2336
|
const badgeBg = theme.colors.backgroundSecondary ?? theme.colors.background;
|
|
2351
2337
|
return (_jsxs("span", { "aria-hidden": true, title: lbl.stepIssue.kind === 'step_span_stale'
|
|
2352
2338
|
? 'Call site changed since verification'
|
|
2353
|
-
:
|
|
2339
|
+
: lbl.stepIssue.kind === 'step_site_outside_from'
|
|
2340
|
+
? 'Calls site is outside its source component'
|
|
2341
|
+
: 'Call site not yet verified', style: {
|
|
2354
2342
|
position: 'absolute',
|
|
2355
2343
|
right: -7,
|
|
2356
2344
|
bottom: -6,
|
|
@@ -2527,9 +2515,11 @@ function Inner({ components, trails, graphifyRelations, orderByLine, layoutDirec
|
|
|
2527
2515
|
drawerTarget.startLine != null &&
|
|
2528
2516
|
!!selected.file &&
|
|
2529
2517
|
selected.file === drawerTarget.file &&
|
|
2530
|
-
selected.declarationSpan?.startLine === drawerTarget.startLine }) }))] }), _jsx(FileDrawer, { title: drawerTitle, onClose: closeDrawer, fillHeight: drawerFillHeight, suppressEscape: fileOverlayOpen, hidden: hideDrawer, progress: drawerProgress,
|
|
2518
|
+
selected.declarationSpan?.startLine === drawerTarget.startLine }) }))] }), _jsx(FileDrawer, { title: drawerTitle, onClose: closeDrawer, fillHeight: drawerFillHeight, suppressEscape: fileOverlayOpen, hidden: hideDrawer, progress: drawerProgress, subheader: drawerTarget?.kind === 'trail' &&
|
|
2519
|
+
focusedTrail &&
|
|
2520
|
+
drawerTarget.stepIndex != null ? (_jsx(TrailStackBreadcrumb, { trail: focusedTrail, stepIndex: drawerTarget.stepIndex, componentByAlias: componentByAlias, onFocusStep: (index) => focusTrailStep(focusedTrail, index) })) : null, children: drawerTarget?.kind === 'trail' &&
|
|
2531
2521
|
focusedTrail &&
|
|
2532
|
-
renderTrailViewer ? (_jsx(TrailDrawerContent, { render: renderTrailDrawerContent, trail: focusedTrail, stepIndex: drawerTarget.stepIndex, onOpenFile: onOpenFileFromTrail,
|
|
2522
|
+
renderTrailViewer ? (_jsx(TrailDrawerContent, { render: renderTrailDrawerContent, trail: focusedTrail, stepIndex: drawerTarget.stepIndex, onOpenFile: onOpenFileFromTrail, resolveSymbol: resolveTrailSymbol, onSymbolClick: openConstructDeclaration, onVisibleStepChange: setVisibleStepIndex })) : drawerTarget?.kind === 'file' ? (_jsx(FileDrawerContent, { render: renderDrawerContent, file: drawerTarget.file, startLine: drawerTarget.startLine, endLine: drawerTarget.endLine })) : null }), fileOverlay && (_jsxs("div", { style: {
|
|
2533
2523
|
position: 'absolute',
|
|
2534
2524
|
inset: 0,
|
|
2535
2525
|
zIndex: 8,
|