@principal-ai/principal-view-react 0.16.34 → 0.16.36
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/graphify/consolidated.d.ts +17 -3
- package/dist/graphify/consolidated.d.ts.map +1 -1
- package/dist/graphify/index.d.ts +2 -0
- package/dist/graphify/index.d.ts.map +1 -1
- package/dist/graphify/index.js +1 -1
- package/dist/graphify/index.js.map +1 -1
- package/dist/graphify/resolve.d.ts +48 -0
- package/dist/graphify/resolve.d.ts.map +1 -0
- package/dist/graphify/resolve.js +83 -0
- package/dist/graphify/resolve.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/subsystem/ComponentDetail.d.ts +21 -0
- package/dist/subsystem/ComponentDetail.d.ts.map +1 -0
- package/dist/subsystem/ComponentDetail.js +137 -0
- package/dist/subsystem/ComponentDetail.js.map +1 -0
- package/dist/subsystem/EdgeLegendModal.d.ts +18 -0
- package/dist/subsystem/EdgeLegendModal.d.ts.map +1 -0
- package/dist/subsystem/EdgeLegendModal.js +98 -0
- package/dist/subsystem/EdgeLegendModal.js.map +1 -0
- package/dist/subsystem/FileDrawer.d.ts +16 -0
- package/dist/subsystem/FileDrawer.d.ts.map +1 -0
- package/dist/subsystem/FileDrawer.js +72 -0
- package/dist/subsystem/FileDrawer.js.map +1 -0
- package/dist/subsystem/SubsystemComponentGraph.d.ts +0 -3
- package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -1
- package/dist/subsystem/SubsystemComponentGraph.js +57 -191
- package/dist/subsystem/SubsystemComponentGraph.js.map +1 -1
- package/dist/subsystem/model.d.ts +14 -3
- package/dist/subsystem/model.d.ts.map +1 -1
- package/dist/subsystem/model.js +26 -1
- package/dist/subsystem/model.js.map +1 -1
- package/dist/subsystem/nodes.d.ts +2 -2
- package/dist/subsystem/nodes.d.ts.map +1 -1
- package/dist/subsystem/nodes.js +3 -21
- package/dist/subsystem/nodes.js.map +1 -1
- package/package.json +1 -1
- package/src/graphify/consolidated.ts +17 -3
- package/src/graphify/index.ts +9 -0
- package/src/graphify/resolve.test.ts +89 -0
- package/src/graphify/resolve.ts +115 -0
- package/src/index.ts +10 -0
- package/src/stories/SubsystemComponentGraph.stories.tsx +333 -13
- package/src/subsystem/ComponentDetail.tsx +386 -0
- package/src/subsystem/EdgeLegendModal.tsx +146 -0
- package/src/subsystem/FileDrawer.tsx +105 -0
- package/src/subsystem/SubsystemComponentGraph.tsx +93 -328
- package/src/subsystem/model.test.ts +11 -0
- package/src/subsystem/model.ts +25 -4
- package/src/subsystem/nodes.tsx +2 -29
|
@@ -43,10 +43,12 @@ export interface GraphifyMethodInfo {
|
|
|
43
43
|
nodeId: string;
|
|
44
44
|
/** Display name from the label (`.get()` → `get`). */
|
|
45
45
|
name: string;
|
|
46
|
-
/**
|
|
47
|
-
parameters?:
|
|
46
|
+
/** Typed parameters from `references` edges with context `parameter_type`. */
|
|
47
|
+
parameters?: GraphifyParamInfo[];
|
|
48
48
|
/** Return type from a `references` edge with context `return_type`. */
|
|
49
49
|
returnType?: string;
|
|
50
|
+
/** Backing edge target for `returnType`, when the graph had one. */
|
|
51
|
+
returnTypeRef?: GraphifyReferenceInfo;
|
|
50
52
|
}
|
|
51
53
|
/** A property/field on a class- or type-like node. */
|
|
52
54
|
export interface GraphifyPropertyInfo {
|
|
@@ -54,15 +56,25 @@ export interface GraphifyPropertyInfo {
|
|
|
54
56
|
name: string;
|
|
55
57
|
/** Field type from a `references` edge with context `field`. */
|
|
56
58
|
type?: string;
|
|
59
|
+
/** Backing edge target for `type`, when the graph had one. */
|
|
60
|
+
typeRef?: GraphifyReferenceInfo;
|
|
57
61
|
/** The field's own node id when it exists (e.g. C++ `defines` nodes). */
|
|
58
62
|
nodeId?: string;
|
|
59
63
|
}
|
|
60
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* A single typed parameter of a function (`references` context `parameter_type`).
|
|
66
|
+
*
|
|
67
|
+
* `ref.nodeId` is the resolvable half: it targets the type's definition node
|
|
68
|
+
* when graphify resolved the reference, or a sourceless stub node when the
|
|
69
|
+
* name was ambiguous / external (see `resolveGraphifyTypeRef`).
|
|
70
|
+
*/
|
|
61
71
|
export interface GraphifyParamInfo {
|
|
62
72
|
/** Parameter name — not captured by graphify; left undefined. */
|
|
63
73
|
name?: string;
|
|
64
74
|
/** Parameter type. */
|
|
65
75
|
type: string;
|
|
76
|
+
/** Backing `references[parameter_type|generic_arg]` edge target. */
|
|
77
|
+
ref?: GraphifyReferenceInfo;
|
|
66
78
|
}
|
|
67
79
|
/** One call relationship, in either direction. */
|
|
68
80
|
export interface GraphifyCallInfo {
|
|
@@ -118,6 +130,8 @@ export interface GraphifyFunctionDetail {
|
|
|
118
130
|
parameters: GraphifyParamInfo[];
|
|
119
131
|
/** Return type from `references` context `return_type`. */
|
|
120
132
|
returnType?: string;
|
|
133
|
+
/** Backing edge target for `returnType`, when the graph had one. */
|
|
134
|
+
returnTypeRef?: GraphifyReferenceInfo;
|
|
121
135
|
/** Incoming `calls` edges. */
|
|
122
136
|
callers: GraphifyCallInfo[];
|
|
123
137
|
/** Outgoing `calls` edges. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consolidated.d.ts","sourceRoot":"","sources":["../../src/graphify/consolidated.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,6DAA6D;AAC7D,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;AAEvF;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,UAAU,EAAE,wBAAwB,CAAC;IACrC,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,SAAS,EAAE,gBAAgB,CAAC;IAC5B,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,sCAAsC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"consolidated.d.ts","sourceRoot":"","sources":["../../src/graphify/consolidated.ts"],"names":[],"mappings":"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"}
|
package/dist/graphify/index.d.ts
CHANGED
|
@@ -6,4 +6,6 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export type { JsonValue, GraphifyFileType, GraphifyConfidence, GraphifyNodeType, GraphifyRelation, GraphifyNode, GraphifyEdge, GraphifyHyperedge, GraphifyGraphMetadata, GraphifyGraph, } from './types';
|
|
8
8
|
export type { GraphifyAnchorResolution, SubsystemGraphifyAnchor, GraphifyMethodInfo, GraphifyPropertyInfo, GraphifyParamInfo, GraphifyCallInfo, GraphifyReferenceInfo, GraphifyImportInfo, GraphifyClassDetail, GraphifyFunctionDetail, GraphifyTypeDetail, GraphifyModuleDetail, GraphifyExternalDetail, GraphifyComponentDetail, GraphifyEdgeRef, } from './consolidated';
|
|
9
|
+
export type { GraphifyTypeRefStatus, GraphifyTypeRefResolution, } from './resolve';
|
|
10
|
+
export { normalizeGraphifyLabel, createGraphifyTypeResolver, resolveGraphifyTypeRef, } from './resolve';
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graphify/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,GAChB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graphify/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,WAAW,CAAC"}
|
package/dist/graphify/index.js
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* Type-compatible view of graphify's graph.json data model for consuming
|
|
5
5
|
* graphify output (nodes, links, hyperedges) inside this library.
|
|
6
6
|
*/
|
|
7
|
-
export {};
|
|
7
|
+
export { normalizeGraphifyLabel, createGraphifyTypeResolver, resolveGraphifyTypeRef, } from './resolve';
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graphify/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graphify/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmCH,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve graphify type-name references to their defining nodes.
|
|
3
|
+
*
|
|
4
|
+
* A `references` edge (`parameter_type`, `return_type`, `field`,
|
|
5
|
+
* `generic_arg`) targets either the type's real definition node or a
|
|
6
|
+
* *sourceless stub* graphify left behind when the name could not be uniquely
|
|
7
|
+
* resolved at extraction time (mirrors `_rewire_unique_stub_nodes` there:
|
|
8
|
+
* ambiguous same-label definitions and never-defined names stay stubs).
|
|
9
|
+
*
|
|
10
|
+
* This module applies the same conservative matching from the consumer side so
|
|
11
|
+
* UI click targets can distinguish "jump to definition" from "N candidates"
|
|
12
|
+
* from "not in this corpus".
|
|
13
|
+
*/
|
|
14
|
+
import type { GraphifyNode } from './types';
|
|
15
|
+
import type { GraphifyReferenceInfo } from './consolidated';
|
|
16
|
+
/** Outcome of resolving one type reference. */
|
|
17
|
+
export type GraphifyTypeRefStatus =
|
|
18
|
+
/** Target node is a real definition — jump to its `source_file`. */
|
|
19
|
+
'resolved'
|
|
20
|
+
/** Target was a stub and multiple same-label definitions exist. */
|
|
21
|
+
| 'ambiguous'
|
|
22
|
+
/** Target was a stub and nothing in the corpus defines the name. */
|
|
23
|
+
| 'unresolved'
|
|
24
|
+
/** No nodeId on the ref, or the id is not in the graph. */
|
|
25
|
+
| 'missing';
|
|
26
|
+
export interface GraphifyTypeRefResolution {
|
|
27
|
+
status: GraphifyTypeRefStatus;
|
|
28
|
+
/** The definition node when resolved; the stub itself otherwise. */
|
|
29
|
+
node: GraphifyNode | null;
|
|
30
|
+
/** Same-label definitions when the target was an unresolved stub. */
|
|
31
|
+
candidates: GraphifyNode[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Mirror graphify's `normalise_callable_label`: trim, strip surrounding
|
|
35
|
+
* parens/leading dots, lowercase. `SessionReader()` and `sessionreader`
|
|
36
|
+
* collapse to the same key.
|
|
37
|
+
*/
|
|
38
|
+
export declare function normalizeGraphifyLabel(label: string): string;
|
|
39
|
+
/** Prebuilt lookup state — build once per graph, resolve many refs. */
|
|
40
|
+
export interface GraphifyTypeResolver {
|
|
41
|
+
resolve(nodeId: string | undefined, fallbackLabel?: string): GraphifyTypeRefResolution;
|
|
42
|
+
}
|
|
43
|
+
export declare function createGraphifyTypeResolver(nodes: readonly GraphifyNode[]): GraphifyTypeResolver;
|
|
44
|
+
/** One-shot convenience over {@link createGraphifyTypeResolver}. */
|
|
45
|
+
export declare function resolveGraphifyTypeRef(nodes: readonly GraphifyNode[], ref: Pick<GraphifyReferenceInfo, 'nodeId'> | {
|
|
46
|
+
nodeId?: string;
|
|
47
|
+
} | undefined, fallbackLabel?: string): GraphifyTypeRefResolution;
|
|
48
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/graphify/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,+CAA+C;AAC/C,MAAM,MAAM,qBAAqB;AAC/B,oEAAoE;AAClE,UAAU;AACZ,mEAAmE;GACjE,WAAW;AACb,oEAAoE;GAClE,YAAY;AACd,2DAA2D;GACzD,SAAS,CAAC;AAEd,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,oEAAoE;IACpE,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,qEAAqE;IACrE,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM5D;AAaD,uEAAuE;AACvE,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAAC;CACxF;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,oBAAoB,CAwC/F;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,GAAG,EAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EAC5E,aAAa,CAAC,EAAE,MAAM,GACrB,yBAAyB,CAE3B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve graphify type-name references to their defining nodes.
|
|
3
|
+
*
|
|
4
|
+
* A `references` edge (`parameter_type`, `return_type`, `field`,
|
|
5
|
+
* `generic_arg`) targets either the type's real definition node or a
|
|
6
|
+
* *sourceless stub* graphify left behind when the name could not be uniquely
|
|
7
|
+
* resolved at extraction time (mirrors `_rewire_unique_stub_nodes` there:
|
|
8
|
+
* ambiguous same-label definitions and never-defined names stay stubs).
|
|
9
|
+
*
|
|
10
|
+
* This module applies the same conservative matching from the consumer side so
|
|
11
|
+
* UI click targets can distinguish "jump to definition" from "N candidates"
|
|
12
|
+
* from "not in this corpus".
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Mirror graphify's `normalise_callable_label`: trim, strip surrounding
|
|
16
|
+
* parens/leading dots, lowercase. `SessionReader()` and `sessionreader`
|
|
17
|
+
* collapse to the same key.
|
|
18
|
+
*/
|
|
19
|
+
export function normalizeGraphifyLabel(label) {
|
|
20
|
+
return label
|
|
21
|
+
.trim()
|
|
22
|
+
.replace(/^[()]+|[()]+$/g, '')
|
|
23
|
+
.replace(/^\.+/, '')
|
|
24
|
+
.toLowerCase();
|
|
25
|
+
}
|
|
26
|
+
const FILE_SUFFIX_RE = /\.(py|js|jsx|ts|tsx|mjs|cjs|java|go|rs|rb|php|cs|cpp|cc|c|h|hpp|pas|pp|dpr|swift|kt|scala|dart|lua|pl|pm|ex|exs|zig|vue|svelte)$/i;
|
|
27
|
+
function isDefinition(node) {
|
|
28
|
+
if (node.file_type !== 'code')
|
|
29
|
+
return false;
|
|
30
|
+
const file = typeof node.source_file === 'string' ? node.source_file : '';
|
|
31
|
+
if (!file)
|
|
32
|
+
return false;
|
|
33
|
+
const label = typeof node.label === 'string' ? node.label.trim() : '';
|
|
34
|
+
return !!label && !FILE_SUFFIX_RE.test(label);
|
|
35
|
+
}
|
|
36
|
+
export function createGraphifyTypeResolver(nodes) {
|
|
37
|
+
const byId = new Map();
|
|
38
|
+
const defsByExactLabel = new Map();
|
|
39
|
+
const defsByFoldedLabel = new Map();
|
|
40
|
+
for (const node of nodes) {
|
|
41
|
+
byId.set(String(node.id), node);
|
|
42
|
+
if (!isDefinition(node))
|
|
43
|
+
continue;
|
|
44
|
+
const label = String(node.label).trim();
|
|
45
|
+
(defsByExactLabel.get(label) ?? defsByExactLabel.set(label, []).get(label)).push(node);
|
|
46
|
+
const folded = normalizeGraphifyLabel(label);
|
|
47
|
+
if (!folded)
|
|
48
|
+
continue;
|
|
49
|
+
(defsByFoldedLabel.get(folded) ?? defsByFoldedLabel.set(folded, []).get(folded)).push(node);
|
|
50
|
+
}
|
|
51
|
+
function resolve(nodeId, fallbackLabel) {
|
|
52
|
+
if (!nodeId)
|
|
53
|
+
return { status: 'missing', node: null, candidates: [] };
|
|
54
|
+
const target = byId.get(nodeId);
|
|
55
|
+
if (!target)
|
|
56
|
+
return { status: 'missing', node: null, candidates: [] };
|
|
57
|
+
// Real definition (graphify rewired the reference onto it, or it lived in
|
|
58
|
+
// the referencing file all along).
|
|
59
|
+
if (isDefinition(target))
|
|
60
|
+
return { status: 'resolved', node: target, candidates: [] };
|
|
61
|
+
// Sourceless stub — try the rewire tiers: exact label, then folded.
|
|
62
|
+
const label = typeof target.label === 'string' && target.label.trim() ? target.label.trim() : (fallbackLabel ?? '');
|
|
63
|
+
let candidates = defsByExactLabel.get(label) ?? [];
|
|
64
|
+
if (candidates.length !== 1) {
|
|
65
|
+
const folded = normalizeGraphifyLabel(label);
|
|
66
|
+
candidates = folded ? (defsByFoldedLabel.get(folded) ?? []) : [];
|
|
67
|
+
}
|
|
68
|
+
if (candidates.length === 1) {
|
|
69
|
+
// Unique match — same fold `_rewire_unique_stub_nodes` performs at
|
|
70
|
+
// extraction time; graphs built before that pass land here instead.
|
|
71
|
+
return { status: 'resolved', node: candidates[0], candidates };
|
|
72
|
+
}
|
|
73
|
+
if (candidates.length > 1)
|
|
74
|
+
return { status: 'ambiguous', node: target, candidates };
|
|
75
|
+
return { status: 'unresolved', node: target, candidates: [] };
|
|
76
|
+
}
|
|
77
|
+
return { resolve };
|
|
78
|
+
}
|
|
79
|
+
/** One-shot convenience over {@link createGraphifyTypeResolver}. */
|
|
80
|
+
export function resolveGraphifyTypeRef(nodes, ref, fallbackLabel) {
|
|
81
|
+
return createGraphifyTypeResolver(nodes).resolve(ref?.nodeId, fallbackLabel);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/graphify/resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -49,8 +49,11 @@ export { SessionEventFeed, SessionEventFeedGrouped, } from './components/session
|
|
|
49
49
|
export type { SessionEventFeedProps, SessionEventFeedGroupedProps, SessionEventFeedRow, } from './components/session-events';
|
|
50
50
|
export type { JsonValue, GraphifyFileType, GraphifyConfidence, GraphifyNodeType, GraphifyRelation, GraphifyNode, GraphifyEdge, GraphifyHyperedge, GraphifyGraphMetadata, GraphifyGraph, } from './graphify';
|
|
51
51
|
export type { GraphifyAnchorResolution, SubsystemGraphifyAnchor, GraphifyMethodInfo, GraphifyPropertyInfo, GraphifyParamInfo, GraphifyCallInfo, GraphifyReferenceInfo, GraphifyImportInfo, GraphifyClassDetail, GraphifyFunctionDetail, GraphifyTypeDetail, GraphifyModuleDetail, GraphifyExternalDetail, GraphifyComponentDetail, GraphifyEdgeRef, } from './graphify';
|
|
52
|
+
export type { GraphifyTypeRefStatus, GraphifyTypeRefResolution, } from './graphify';
|
|
53
|
+
export { normalizeGraphifyLabel, createGraphifyTypeResolver, resolveGraphifyTypeRef, } from './graphify';
|
|
52
54
|
export { SubsystemComponentGraph } from './subsystem/SubsystemComponentGraph';
|
|
53
55
|
export type { SubsystemComponentGraphProps } from './subsystem/SubsystemComponentGraph';
|
|
56
|
+
export { MECHANISM_COLOR, KIND_COLOR, MECHANISM_STYLE } from './subsystem/model';
|
|
54
57
|
export { SubsystemFileTree } from './subsystem/SubsystemFileTree';
|
|
55
58
|
export type { SubsystemFileTreeProps } from './subsystem/SubsystemFileTree';
|
|
56
59
|
export { GraphLayoutCover } from './subsystem/GraphLayoutCover';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -35,8 +35,10 @@ export { DashboardRenderer, MetricPanel, MetricCard, LineChart, BarChart, Source
|
|
|
35
35
|
export { PipelineView, useStateView } from './components/state-view';
|
|
36
36
|
// Session event diagnostic feed (raw → repo-normalized → accumulated)
|
|
37
37
|
export { SessionEventFeed, SessionEventFeedGrouped, } from './components/session-events';
|
|
38
|
+
export { normalizeGraphifyLabel, createGraphifyTypeResolver, resolveGraphifyTypeRef, } from './graphify';
|
|
38
39
|
// Subsystem component graph
|
|
39
40
|
export { SubsystemComponentGraph } from './subsystem/SubsystemComponentGraph';
|
|
41
|
+
export { MECHANISM_COLOR, KIND_COLOR, MECHANISM_STYLE } from './subsystem/model';
|
|
40
42
|
export { SubsystemFileTree } from './subsystem/SubsystemFileTree';
|
|
41
43
|
export { GraphLayoutCover } from './subsystem/GraphLayoutCover';
|
|
42
44
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsBH,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAQ3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAG/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAG/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAS9D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAOnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,8BAA8B;AAC9B,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,2BAA2B;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,mBAAmB;AACnB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGvG,4DAA4D;AAC5D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG1E,6EAA6E;AAC7E,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAsChC,6DAA6D;AAC7D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAmCrE,sEAAsE;AACtE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsBH,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAQ3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAG/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAG/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAS9D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAOnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,8BAA8B;AAC9B,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAUtB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,2BAA2B;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,mBAAmB;AACnB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGvG,4DAA4D;AAC5D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG1E,6EAA6E;AAC7E,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAsChC,6DAA6D;AAC7D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAmCrE,sEAAsE;AACtE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAyCrC,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,4BAA4B;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ComponentDetail — selection detail panel for a subsystem component, rendered
|
|
3
|
+
* as it would appear in code: a file-path comment + doc comment, then the kind's
|
|
4
|
+
* declaration (`class X extends Y { ... }`, `function f(): T`, ...) with its
|
|
5
|
+
* members as signatures. Graphify relationship drill-downs appear as trailing
|
|
6
|
+
* comments. File content lives in the bottom FileDrawer, not here.
|
|
7
|
+
*/
|
|
8
|
+
import { type SubsystemComponent } from './model';
|
|
9
|
+
/** Panel props. The two callbacks are wired by the graph; standalone usage
|
|
10
|
+
* without them renders the same panel with nothing clickable. */
|
|
11
|
+
export interface ComponentDetailProps {
|
|
12
|
+
component: SubsystemComponent;
|
|
13
|
+
/** File-path click → open that file in the bottom drawer. */
|
|
14
|
+
onOpenFile?: (file: string) => void;
|
|
15
|
+
/** Related-name click (types, callers/callees, implementors, …) → select
|
|
16
|
+
* that component if one matches; unmatched refs no-op. */
|
|
17
|
+
onRelatedSelect?: (ref: string) => void;
|
|
18
|
+
}
|
|
19
|
+
/** Detail panel for the selected component — its declaration, code-style. */
|
|
20
|
+
export declare function ComponentDetail({ component, onOpenFile, onRelatedSelect }: ComponentDetailProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=ComponentDetail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentDetail.d.ts","sourceRoot":"","sources":["../../src/subsystem/ComponentDetail.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,SAAS,CAAC;AA+BjB;kEACkE;AAClE,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,6DAA6D;IAC7D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;+DAC2D;IAC3D,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,oBAAoB,2CAuU/F"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* ComponentDetail — selection detail panel for a subsystem component, rendered
|
|
4
|
+
* as it would appear in code: a file-path comment + doc comment, then the kind's
|
|
5
|
+
* declaration (`class X extends Y { ... }`, `function f(): T`, ...) with its
|
|
6
|
+
* members as signatures. Graphify relationship drill-downs appear as trailing
|
|
7
|
+
* comments. File content lives in the bottom FileDrawer, not here.
|
|
8
|
+
*/
|
|
9
|
+
import { Fragment } from 'react';
|
|
10
|
+
import { useTheme } from '@principal-ade/industry-theme';
|
|
11
|
+
import { KIND_COLOR, deriveNameFromSymbol, formatPurl, } from './model';
|
|
12
|
+
/** Shared affordance for clickable text pieces. */
|
|
13
|
+
const clickableStyle = {
|
|
14
|
+
cursor: 'pointer',
|
|
15
|
+
textDecorationLine: 'underline',
|
|
16
|
+
textDecorationStyle: 'dotted',
|
|
17
|
+
textUnderlineOffset: 2,
|
|
18
|
+
};
|
|
19
|
+
/** Clickable detail-panel piece — dotted underline signals interactivity. */
|
|
20
|
+
function DetailLink({ children, onClick }) {
|
|
21
|
+
if (!onClick)
|
|
22
|
+
return _jsx(_Fragment, { children: children });
|
|
23
|
+
return (_jsx("span", { onClick: (e) => {
|
|
24
|
+
e.stopPropagation();
|
|
25
|
+
onClick();
|
|
26
|
+
}, style: {
|
|
27
|
+
cursor: 'pointer',
|
|
28
|
+
textDecorationLine: 'underline',
|
|
29
|
+
textDecorationStyle: 'dotted',
|
|
30
|
+
textUnderlineOffset: 2,
|
|
31
|
+
}, children: children }));
|
|
32
|
+
}
|
|
33
|
+
/** Detail panel for the selected component — its declaration, code-style. */
|
|
34
|
+
export function ComponentDetail({ component, onOpenFile, onRelatedSelect }) {
|
|
35
|
+
const { theme } = useTheme();
|
|
36
|
+
const muted = theme.colors.textMuted ?? theme.colors.textSecondary;
|
|
37
|
+
const color = KIND_COLOR[component.kind] ?? '#888';
|
|
38
|
+
const displayName = deriveNameFromSymbol(component.symbol, component.kind, component.name, component.file);
|
|
39
|
+
// Token styles — keyword / name / member / type / string / punctuation.
|
|
40
|
+
const kw = (text) => _jsx("span", { style: { color: theme.colors.secondary }, children: text });
|
|
41
|
+
const nm = (text) => _jsx("span", { style: { color }, children: text });
|
|
42
|
+
const mb = (text) => _jsx("span", { style: { color: theme.colors.info }, children: text });
|
|
43
|
+
// Type tokens are links into the graph (other components often own them).
|
|
44
|
+
const ty = (text) => (_jsx(DetailLink, { onClick: onRelatedSelect ? () => onRelatedSelect(text) : undefined, children: _jsx("span", { style: { color: theme.colors.accent }, children: text }) }));
|
|
45
|
+
const str = (text) => _jsx("span", { style: { color: theme.colors.success }, children: text });
|
|
46
|
+
const pn = (text) => _jsx("span", { style: { color: muted }, children: text });
|
|
47
|
+
const line = (children, key, indent) => (_jsx("div", { style: indent ? { paddingLeft: 16 } : undefined, children: children }, key));
|
|
48
|
+
const commentStyle = { color: muted, fontStyle: 'italic' };
|
|
49
|
+
const commentLine = (text, key, indent, onClick) => line(_jsx(DetailLink, { onClick: onClick, children: _jsx("span", { style: { ...commentStyle, ...(onClick ? clickableStyle : undefined) }, children: text }) }), key, indent);
|
|
50
|
+
// Trailing relationship comments whose names are individually clickable.
|
|
51
|
+
const commentListLine = (prefix, names, key) => line(_jsxs(_Fragment, { children: [_jsx("span", { style: commentStyle, children: prefix }), list(names.map((n, i) => (_jsx(Fragment, { children: _jsx(DetailLink, { onClick: onRelatedSelect ? () => onRelatedSelect(n) : undefined, children: _jsx("span", { style: { ...commentStyle, ...(onRelatedSelect ? clickableStyle : undefined) }, children: n }) }) }, i))))] }), key);
|
|
52
|
+
// Comma-join rendered tokens without raw-array key churn.
|
|
53
|
+
const list = (items) => items.map((item, i) => (_jsxs(Fragment, { children: [i > 0 ? ', ' : null, item] }, i)));
|
|
54
|
+
const lines = [];
|
|
55
|
+
if (component.purl)
|
|
56
|
+
lines.push(commentLine(`// ${formatPurl(component.purl)}`, 'purl'));
|
|
57
|
+
if (component.file)
|
|
58
|
+
lines.push(commentLine(`// ${component.file}`, 'file', false, onOpenFile ? () => onOpenFile(component.file) : undefined));
|
|
59
|
+
if (component.purpose)
|
|
60
|
+
lines.push(commentLine(`/** ${component.purpose} */`, 'purpose'));
|
|
61
|
+
const detail = component.detail;
|
|
62
|
+
switch (detail?.kind ?? component.kind) {
|
|
63
|
+
case 'class': {
|
|
64
|
+
const members = [];
|
|
65
|
+
if (detail?.kind === 'class') {
|
|
66
|
+
detail.methods.forEach((m, i) => members.push(line(_jsxs(_Fragment, { children: [mb(m.name), pn('('), (m.parameters ?? []).length > 0 &&
|
|
67
|
+
list((m.parameters ?? []).map((p, j) => (_jsxs(Fragment, { children: [p.name ? (_jsxs(_Fragment, { children: [mb(p.name), pn(': ')] })) : null, ty(p.type)] }, j)))), pn(')'), m.returnType ? (_jsxs(_Fragment, { children: [pn(': '), ty(m.returnType)] })) : null] }), `m${i}`, true)));
|
|
68
|
+
detail.properties.forEach((prop, i) => members.push(line(_jsxs(_Fragment, { children: [mb(prop.name), prop.type ? (_jsxs(_Fragment, { children: [pn(': '), ty(prop.type)] })) : null] }), `p${i}`, true)));
|
|
69
|
+
}
|
|
70
|
+
const cls = detail?.kind === 'class' ? detail : undefined;
|
|
71
|
+
const hasBody = members.length > 0;
|
|
72
|
+
lines.push(line(_jsxs(_Fragment, { children: [kw('class'), ' ', nm(displayName), cls && cls.extends.length > 0 && (_jsxs(_Fragment, { children: [' ', kw('extends'), ' ', list(cls.extends.map((e, i) => _jsx(Fragment, { children: ty(e) }, i)))] })), cls && cls.implements.length > 0 && (_jsxs(_Fragment, { children: [' ', kw('implements'), ' ', list(cls.implements.map((e, i) => _jsx(Fragment, { children: ty(e) }, i)))] })), hasBody ? pn(' {') : null] }), 'decl'));
|
|
73
|
+
lines.push(...members);
|
|
74
|
+
if (hasBody)
|
|
75
|
+
lines.push(line(pn('}'), 'end'));
|
|
76
|
+
if (cls && cls.instantiations.length > 0)
|
|
77
|
+
lines.push(commentListLine('// constructed by: ', cls.instantiations.map((c) => c.name), 'insts'));
|
|
78
|
+
if (cls && cls.references.length > 0)
|
|
79
|
+
lines.push(commentListLine('// referenced by: ', cls.references.map((r) => r.name), 'refs'));
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case 'function': {
|
|
83
|
+
const fn = detail?.kind === 'function' ? detail : undefined;
|
|
84
|
+
const params = fn?.parameters ?? [];
|
|
85
|
+
lines.push(line(_jsxs(_Fragment, { children: [kw('function'), ' ', nm(displayName), pn('('), params.length > 0 &&
|
|
86
|
+
list(params.map((param, i) => (_jsxs(Fragment, { children: [param.name ? (_jsxs(_Fragment, { children: [mb(param.name), pn(': ')] })) : null, ty(param.type)] }, i)))), pn(')'), fn?.returnType ? (_jsxs(_Fragment, { children: [pn(': '), ty(fn.returnType)] })) : null, pn(';')] }), 'decl'));
|
|
87
|
+
if (fn && fn.callers.length > 0)
|
|
88
|
+
lines.push(commentListLine('// called by: ', fn.callers.map((c) => c.name), 'callers'));
|
|
89
|
+
if (fn && fn.callees.length > 0)
|
|
90
|
+
lines.push(commentListLine('// calls: ', fn.callees.map((c) => c.name), 'callees'));
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case 'type': {
|
|
94
|
+
const tpe = detail?.kind === 'type' ? detail : undefined;
|
|
95
|
+
const hasBody = (tpe?.properties.length ?? 0) > 0;
|
|
96
|
+
lines.push(line(_jsxs(_Fragment, { children: [kw('interface'), ' ', nm(displayName), hasBody ? pn(' {') : null] }), 'decl'));
|
|
97
|
+
if (tpe) {
|
|
98
|
+
tpe.properties.forEach((prop, i) => lines.push(line(_jsxs(_Fragment, { children: [mb(prop.name), prop.type ? (_jsxs(_Fragment, { children: [pn(': '), ty(prop.type)] })) : null, pn(';')] }), `p${i}`, true)));
|
|
99
|
+
}
|
|
100
|
+
if (hasBody)
|
|
101
|
+
lines.push(line(pn('}'), 'end'));
|
|
102
|
+
if (tpe && tpe.implementors.length > 0)
|
|
103
|
+
lines.push(commentListLine('// implemented by: ', tpe.implementors, 'impl'));
|
|
104
|
+
if (tpe && tpe.usedBy.length > 0)
|
|
105
|
+
lines.push(commentListLine('// used by: ', tpe.usedBy.map((u) => u.name), 'usedBy'));
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case 'module': {
|
|
109
|
+
const mod = detail?.kind === 'module' ? detail : undefined;
|
|
110
|
+
if (mod) {
|
|
111
|
+
mod.imports.forEach((imp, i) => lines.push(line(_jsxs(_Fragment, { children: [kw('import'), ' ', pn("'"), str(imp.name), pn("';")] }), `imp${i}`)));
|
|
112
|
+
if (mod.exports.length > 0)
|
|
113
|
+
lines.push(line(_jsxs(_Fragment, { children: [kw('export'), ' ', pn('{ '), list(mod.exports.map((e, i) => _jsx(Fragment, { children: mb(e) }, i))), pn(' }'), pn(';')] }), 'exports'));
|
|
114
|
+
if (mod.symbols.length > 0)
|
|
115
|
+
lines.push(commentLine(`// defines: ${mod.symbols.join(', ')}`, 'symbols'));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
lines.push(line(_jsxs(_Fragment, { children: [kw('module'), ' ', nm(displayName)] }), 'decl'));
|
|
119
|
+
}
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case 'external': {
|
|
123
|
+
lines.push(line(_jsxs(_Fragment, { children: [kw('external'), ' ', detail?.kind === 'external' ? (_jsxs(_Fragment, { children: [pn("'"), str(detail.label), pn("'")] })) : (nm(displayName))] }), 'decl'));
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return (_jsx("div", { style: {
|
|
128
|
+
borderTop: `1px solid ${theme.colors.border}`,
|
|
129
|
+
background: theme.colors.backgroundSecondary,
|
|
130
|
+
padding: '10px 12px',
|
|
131
|
+
fontFamily: theme.fonts.monospace,
|
|
132
|
+
fontSize: theme.fontSizes[0],
|
|
133
|
+
lineHeight: 1.7,
|
|
134
|
+
wordBreak: 'break-word',
|
|
135
|
+
}, children: lines }));
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=ComponentDetail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentDetail.js","sourceRoot":"","sources":["../../src/subsystem/ComponentDetail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EdgeLegendModal — modal over the graph area showing the edge-mechanism
|
|
3
|
+
* legend (moved out of the sidebar), plus the canonical mechanism
|
|
4
|
+
* descriptions table shared with the canvas's edge-label overlay.
|
|
5
|
+
*/
|
|
6
|
+
import { type SubsystemEdgeMechanism } from './model';
|
|
7
|
+
/** Mechanism → [description, verifiable-with-graphify]. Drives the legend
|
|
8
|
+
* modal and the "not directly verifiable" styling of edge labels. */
|
|
9
|
+
export declare const MECHANISM_DESCRIPTIONS: [SubsystemEdgeMechanism, string, boolean][];
|
|
10
|
+
/** Modal over the graph area showing the edge-mechanism legend (moved out of
|
|
11
|
+
* the sidebar). Closes on backdrop click or Escape; renders nothing when
|
|
12
|
+
* closed. */
|
|
13
|
+
export declare function EdgeLegendModal({ open, mechanisms, onClose, }: {
|
|
14
|
+
open: boolean;
|
|
15
|
+
mechanisms: Set<string>;
|
|
16
|
+
onClose: () => void;
|
|
17
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
18
|
+
//# sourceMappingURL=EdgeLegendModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EdgeLegendModal.d.ts","sourceRoot":"","sources":["../../src/subsystem/EdgeLegendModal.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEvE;sEACsE;AACtE,eAAO,MAAM,sBAAsB,EAAE,CAAC,sBAAsB,EAAE,MAAM,EAAE,OAAO,CAAC,EAiB7E,CAAC;AAEF;;cAEc;AACd,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,UAAU,EACV,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,kDAsGA"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* EdgeLegendModal — modal over the graph area showing the edge-mechanism
|
|
4
|
+
* legend (moved out of the sidebar), plus the canonical mechanism
|
|
5
|
+
* descriptions table shared with the canvas's edge-label overlay.
|
|
6
|
+
*/
|
|
7
|
+
import { useEffect } from 'react';
|
|
8
|
+
import { useTheme } from '@principal-ade/industry-theme';
|
|
9
|
+
import { X } from 'lucide-react';
|
|
10
|
+
import { MECHANISM_COLOR } from './model';
|
|
11
|
+
/** Mechanism → [description, verifiable-with-graphify]. Drives the legend
|
|
12
|
+
* modal and the "not directly verifiable" styling of edge labels. */
|
|
13
|
+
export const MECHANISM_DESCRIPTIONS = [
|
|
14
|
+
['imports', 'import statement (code-level dependency)', true],
|
|
15
|
+
['imports_from', 'imported by (reverse dependency)', true],
|
|
16
|
+
['re_exports', 're-exports symbols from', true],
|
|
17
|
+
['defines', 'defines / declares symbol', true],
|
|
18
|
+
['calls', 'function/method call (call graph edge)', true],
|
|
19
|
+
['extends', 'class inheritance', true],
|
|
20
|
+
['inherits', 'class inheritance', true],
|
|
21
|
+
['implements', 'implements interface / protocol', true],
|
|
22
|
+
['mixes_in', 'applies mixin', true],
|
|
23
|
+
['uses', 'general dependency (import, call, or reference)', false],
|
|
24
|
+
['method', 'structural: has method / member', true],
|
|
25
|
+
['references', 'type / symbol reference (not a call)', true],
|
|
26
|
+
['contains', 'structural: contains / encapsulates', true],
|
|
27
|
+
['feeds', 'data flow: output feeds into input', false],
|
|
28
|
+
['produces', 'data flow: produces / outputs', false],
|
|
29
|
+
['registers-into', 'registration pattern', false],
|
|
30
|
+
];
|
|
31
|
+
/** Modal over the graph area showing the edge-mechanism legend (moved out of
|
|
32
|
+
* the sidebar). Closes on backdrop click or Escape; renders nothing when
|
|
33
|
+
* closed. */
|
|
34
|
+
export function EdgeLegendModal({ open, mechanisms, onClose, }) {
|
|
35
|
+
const { theme } = useTheme();
|
|
36
|
+
const muted = theme.colors.textMuted ?? theme.colors.textSecondary;
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (!open)
|
|
39
|
+
return;
|
|
40
|
+
const onKey = (e) => {
|
|
41
|
+
if (e.key === 'Escape')
|
|
42
|
+
onClose();
|
|
43
|
+
};
|
|
44
|
+
window.addEventListener('keydown', onKey);
|
|
45
|
+
return () => window.removeEventListener('keydown', onKey);
|
|
46
|
+
}, [open, onClose]);
|
|
47
|
+
if (!open)
|
|
48
|
+
return null;
|
|
49
|
+
return (_jsx("div", { onClick: onClose, style: {
|
|
50
|
+
position: 'absolute',
|
|
51
|
+
inset: 0,
|
|
52
|
+
zIndex: 20,
|
|
53
|
+
display: 'flex',
|
|
54
|
+
alignItems: 'center',
|
|
55
|
+
justifyContent: 'center',
|
|
56
|
+
background: 'rgba(0,0,0,0.5)',
|
|
57
|
+
}, children: _jsxs("div", { onClick: (e) => e.stopPropagation(), style: {
|
|
58
|
+
background: theme.colors.background,
|
|
59
|
+
border: `1px solid ${theme.colors.border}`,
|
|
60
|
+
borderRadius: 8,
|
|
61
|
+
boxShadow: '0 8px 32px rgba(0,0,0,0.4)',
|
|
62
|
+
padding: '16px',
|
|
63
|
+
width: 420,
|
|
64
|
+
maxWidth: '90%',
|
|
65
|
+
maxHeight: '80%',
|
|
66
|
+
overflowY: 'auto',
|
|
67
|
+
fontFamily: theme.fonts.body,
|
|
68
|
+
}, children: [_jsxs("div", { style: {
|
|
69
|
+
display: 'flex',
|
|
70
|
+
alignItems: 'center',
|
|
71
|
+
justifyContent: 'space-between',
|
|
72
|
+
marginBottom: 12,
|
|
73
|
+
}, children: [_jsx("span", { style: {
|
|
74
|
+
fontSize: theme.fontSizes[1],
|
|
75
|
+
fontWeight: 600,
|
|
76
|
+
color: theme.colors.text,
|
|
77
|
+
}, children: "Edge Legend" }), _jsx("button", { type: "button", onClick: onClose, "aria-label": "Close legend", style: {
|
|
78
|
+
display: 'inline-flex',
|
|
79
|
+
alignItems: 'center',
|
|
80
|
+
justifyContent: 'center',
|
|
81
|
+
width: 22,
|
|
82
|
+
height: 22,
|
|
83
|
+
padding: 0,
|
|
84
|
+
border: 'none',
|
|
85
|
+
borderRadius: 4,
|
|
86
|
+
background: 'transparent',
|
|
87
|
+
color: theme.colors.text,
|
|
88
|
+
cursor: 'pointer',
|
|
89
|
+
}, children: _jsx(X, { size: 14 }) })] }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 8 }, children: MECHANISM_DESCRIPTIONS.filter(([m]) => mechanisms.has(m)).map(([mechanism, desc, verifiable]) => (_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8, fontSize: theme.fontSizes[0] }, children: [_jsx("span", { style: {
|
|
90
|
+
width: 10,
|
|
91
|
+
height: 10,
|
|
92
|
+
borderRadius: verifiable ? '50%' : '30% 70% 70% 30% / 30% 30% 70% 70%',
|
|
93
|
+
background: MECHANISM_COLOR[mechanism],
|
|
94
|
+
border: verifiable ? 'none' : `1px dashed ${MECHANISM_COLOR[mechanism]}`,
|
|
95
|
+
flexShrink: 0,
|
|
96
|
+
} }), _jsx("span", { style: { fontFamily: theme.fonts.monospace, color: MECHANISM_COLOR[mechanism], fontWeight: 500 }, children: mechanism }), _jsx("span", { style: { color: muted }, children: desc })] }, mechanism))) })] }) }));
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=EdgeLegendModal.js.map
|