@principal-ai/subsystems-react 0.18.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -85
- package/dist/subsystem/SubsystemCarousel.d.ts +36 -0
- package/dist/subsystem/SubsystemCarousel.d.ts.map +1 -0
- package/dist/subsystem/SubsystemCarousel.js +163 -0
- package/dist/subsystem/SubsystemCarousel.js.map +1 -0
- package/dist/subsystem/SubsystemComponentGraph.d.ts +25 -0
- package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -1
- package/dist/subsystem/SubsystemComponentGraph.js +329 -68
- package/dist/subsystem/SubsystemComponentGraph.js.map +1 -1
- package/package.json +3 -3
- package/src/subsystem/SubsystemComponentGraph.tsx +396 -50
package/README.md
CHANGED
|
@@ -1,93 +1,19 @@
|
|
|
1
|
-
# @principal-ai/
|
|
1
|
+
# @principal-ai/subsystems-react
|
|
2
2
|
|
|
3
|
-
React UI **component
|
|
3
|
+
React UI for **Subsystem Models**: component graphs, Pierre code views, graphify helpers, and session-event feeds used by Subsystems Studio.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## Features
|
|
8
|
-
|
|
9
|
-
- 🎨 `GraphRenderer` - Interactive graph visualization with @xyflow/react
|
|
10
|
-
- Custom node shapes (circle, rectangle, hexagon, diamond)
|
|
11
|
-
- State-based node styling
|
|
12
|
-
- Animated and styled edges
|
|
13
|
-
- Auto-layout algorithms (hierarchical, circular)
|
|
14
|
-
- Zoom, pan, drag interactions
|
|
15
|
-
- Minimap and controls
|
|
16
|
-
- 🎭 `CustomNode` / `CustomEdge` - Configurable xyflow renderers
|
|
17
|
-
|
|
18
|
-
## Installation
|
|
5
|
+
## Install
|
|
19
6
|
|
|
20
7
|
```bash
|
|
21
|
-
npm install @principal-ai/
|
|
22
|
-
# or
|
|
23
|
-
bun add @principal-ai/visual-validation-react
|
|
8
|
+
npm install @principal-ai/subsystems-react
|
|
24
9
|
```
|
|
25
10
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
```json
|
|
29
|
-
{
|
|
30
|
-
"react": "^18.0.0 || ^19.0.0",
|
|
31
|
-
"react-dom": "^18.0.0 || ^19.0.0"
|
|
32
|
-
}
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Usage
|
|
36
|
-
|
|
37
|
-
These are **building block components**. You compose them to build your panel application:
|
|
38
|
-
|
|
39
|
-
```typescript
|
|
40
|
-
import { GraphRenderer } from '@principal-ai/visual-validation-react';
|
|
41
|
-
import type { ExtendedCanvas } from '@principal-ai/subsystems-core';
|
|
42
|
-
|
|
43
|
-
const canvas: ExtendedCanvas = {
|
|
44
|
-
// ... your canvas data
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
function MyPanel() {
|
|
48
|
-
return (
|
|
49
|
-
<GraphRenderer
|
|
50
|
-
canvas={canvas}
|
|
51
|
-
width="100%"
|
|
52
|
-
height="600px"
|
|
53
|
-
/>
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
**Building a Complete Panel:**
|
|
59
|
-
For a complete panel application with all features (playback controls, filters, etc.), you should create a separate project using a panel starter template and compose these components together.
|
|
60
|
-
|
|
61
|
-
## Documentation
|
|
62
|
-
|
|
63
|
-
Comprehensive guides with Mermaid diagrams:
|
|
64
|
-
|
|
65
|
-
- **[Configuration Guide](../../docs/CONFIGURATION.md)** - Define your graph structure, node/edge types, and validation rules
|
|
66
|
-
- **[Event System Guide](../../docs/EVENT_SYSTEM.md)** - Stream events to update your graph in real-time
|
|
67
|
-
- **[Usage Guide](../../docs/USAGE.md)** - Build complete panels with React components
|
|
68
|
-
|
|
69
|
-
Or browse the [full documentation index](../../docs/README.md).
|
|
70
|
-
|
|
71
|
-
## Storybook
|
|
72
|
-
|
|
73
|
-
Interactive component examples:
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
bun run storybook
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Status
|
|
80
|
-
|
|
81
|
-
**Alpha** - Core placeholder implemented. Full visualization features coming soon.
|
|
82
|
-
|
|
83
|
-
### TODO
|
|
84
|
-
|
|
85
|
-
- ✅ Integrate xyflow for graph visualization
|
|
86
|
-
- ✅ Implement node renderers with shapes and states
|
|
87
|
-
- ✅ Implement edge renderers with styles and animations
|
|
88
|
-
- ✅ Add auto-layout algorithms
|
|
89
|
-
- ✅ Add Storybook stories
|
|
11
|
+
Peer dependency: `@principal-ai/subsystems-core` (>= 0.29.0), plus React 18/19.
|
|
90
12
|
|
|
91
|
-
##
|
|
13
|
+
## Main exports
|
|
92
14
|
|
|
93
|
-
|
|
15
|
+
- `SubsystemComponentGraph` — interactive subsystem model graph
|
|
16
|
+
- Pierre wrappers — `PierreFileView`, `PierreSnippetView`, `PierreThroughlineCodeView`
|
|
17
|
+
- Graphify helpers — anchor/signature/kind utilities
|
|
18
|
+
- `SessionEventFeed` / `SessionEventFeedGrouped` — agent session event feeds
|
|
19
|
+
- ELK layout helpers — `computeElkLayout`, `useElkLayout`
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SubsystemCarousel — prototype gallery for flipping through subsystem models.
|
|
3
|
+
*
|
|
4
|
+
* Stage shows one live `SubsystemComponentGraph` at a time (prev/next). A
|
|
5
|
+
* browse button opens a grid overlay of all items so users can jump directly.
|
|
6
|
+
* Hosts pass items explicitly so site showcase cases and package Storybook
|
|
7
|
+
* fixtures can both drive the same component.
|
|
8
|
+
*/
|
|
9
|
+
/// <reference types="react" />
|
|
10
|
+
import type { SubsystemComponent, SubsystemComponentEdge, SubsystemThroughline } from './model';
|
|
11
|
+
export interface SubsystemCarouselItem {
|
|
12
|
+
id: string;
|
|
13
|
+
/** Card / stage title. */
|
|
14
|
+
title: string;
|
|
15
|
+
/** One-line blurb on the card. */
|
|
16
|
+
description?: string;
|
|
17
|
+
/** Stack chip (e.g. TypeScript, Python, Rust). */
|
|
18
|
+
stack?: string;
|
|
19
|
+
complexity?: 'low' | 'medium' | 'high';
|
|
20
|
+
components: SubsystemComponent[];
|
|
21
|
+
edges: SubsystemComponentEdge[];
|
|
22
|
+
throughlines?: SubsystemThroughline[];
|
|
23
|
+
}
|
|
24
|
+
export interface SubsystemCarouselProps {
|
|
25
|
+
items: SubsystemCarouselItem[];
|
|
26
|
+
/** Controlled selection; falls back to first item when omitted. */
|
|
27
|
+
selectedId?: string;
|
|
28
|
+
/** Fires when the user picks a card or uses prev/next. */
|
|
29
|
+
onSelect?: (id: string) => void;
|
|
30
|
+
/** Show the live graph for the selected item. @default true */
|
|
31
|
+
showGraph?: boolean;
|
|
32
|
+
/** Stage height (CSS). @default '70vh' */
|
|
33
|
+
stageHeight?: string | number;
|
|
34
|
+
}
|
|
35
|
+
export declare function SubsystemCarousel({ items, selectedId: controlledId, onSelect, showGraph, stageHeight, }: SubsystemCarouselProps): import("react").JSX.Element;
|
|
36
|
+
//# sourceMappingURL=SubsystemCarousel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubsystemCarousel.d.ts","sourceRoot":"","sources":["../../src/subsystem/SubsystemCarousel.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;;AAOH,OAAO,KAAK,EACV,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC/B,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAOD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,UAAU,EAAE,YAAY,EACxB,QAAQ,EACR,SAAgB,EAChB,WAAoB,GACrB,EAAE,sBAAsB,+BAiRxB"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* SubsystemCarousel — prototype gallery for flipping through subsystem models.
|
|
4
|
+
*
|
|
5
|
+
* Stage shows one live `SubsystemComponentGraph` at a time (prev/next). A
|
|
6
|
+
* browse button opens a grid overlay of all items so users can jump directly.
|
|
7
|
+
* Hosts pass items explicitly so site showcase cases and package Storybook
|
|
8
|
+
* fixtures can both drive the same component.
|
|
9
|
+
*/
|
|
10
|
+
import { useCallback, useEffect, useId, useState } from 'react';
|
|
11
|
+
import { ChevronLeft, ChevronRight, LayoutGrid, X } from 'lucide-react';
|
|
12
|
+
import { useTheme } from '@principal-ade/industry-theme';
|
|
13
|
+
import { SubsystemComponentGraph } from './SubsystemComponentGraph';
|
|
14
|
+
function clampIndex(i, len) {
|
|
15
|
+
if (len <= 0)
|
|
16
|
+
return 0;
|
|
17
|
+
return ((i % len) + len) % len;
|
|
18
|
+
}
|
|
19
|
+
export function SubsystemCarousel({ items, selectedId: controlledId, onSelect, showGraph = true, stageHeight = '70vh', }) {
|
|
20
|
+
const { theme } = useTheme();
|
|
21
|
+
const titleId = useId();
|
|
22
|
+
const [gridOpen, setGridOpen] = useState(false);
|
|
23
|
+
const [uncontrolledId, setUncontrolledId] = useState(items[0]?.id ?? '');
|
|
24
|
+
const selectedId = controlledId ?? uncontrolledId;
|
|
25
|
+
const selectedIndex = Math.max(0, items.findIndex((it) => it.id === selectedId));
|
|
26
|
+
const selected = items[selectedIndex] ?? items[0];
|
|
27
|
+
const selectAt = useCallback((index) => {
|
|
28
|
+
const next = items[clampIndex(index, items.length)];
|
|
29
|
+
if (!next)
|
|
30
|
+
return;
|
|
31
|
+
if (controlledId === undefined)
|
|
32
|
+
setUncontrolledId(next.id);
|
|
33
|
+
onSelect?.(next.id);
|
|
34
|
+
}, [controlledId, items, onSelect]);
|
|
35
|
+
const selectId = useCallback((id) => {
|
|
36
|
+
const idx = items.findIndex((it) => it.id === id);
|
|
37
|
+
if (idx >= 0)
|
|
38
|
+
selectAt(idx);
|
|
39
|
+
}, [items, selectAt]);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (controlledId !== undefined)
|
|
42
|
+
return;
|
|
43
|
+
if (!items.some((it) => it.id === uncontrolledId) && items[0]) {
|
|
44
|
+
setUncontrolledId(items[0].id);
|
|
45
|
+
}
|
|
46
|
+
}, [controlledId, items, uncontrolledId]);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (!gridOpen)
|
|
49
|
+
return;
|
|
50
|
+
const onKey = (e) => {
|
|
51
|
+
if (e.key === 'Escape')
|
|
52
|
+
setGridOpen(false);
|
|
53
|
+
};
|
|
54
|
+
window.addEventListener('keydown', onKey);
|
|
55
|
+
return () => window.removeEventListener('keydown', onKey);
|
|
56
|
+
}, [gridOpen]);
|
|
57
|
+
const onStageKeyDown = (e) => {
|
|
58
|
+
if (gridOpen)
|
|
59
|
+
return;
|
|
60
|
+
if (e.key === 'ArrowRight') {
|
|
61
|
+
e.preventDefault();
|
|
62
|
+
selectAt(selectedIndex + 1);
|
|
63
|
+
}
|
|
64
|
+
else if (e.key === 'ArrowLeft') {
|
|
65
|
+
e.preventDefault();
|
|
66
|
+
selectAt(selectedIndex - 1);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
if (!items.length || !selected) {
|
|
70
|
+
return (_jsx("div", { style: { padding: 24, color: theme.colors.textMuted ?? theme.colors.textSecondary }, children: "No subsystem examples." }));
|
|
71
|
+
}
|
|
72
|
+
const muted = theme.colors.textMuted ?? theme.colors.textSecondary;
|
|
73
|
+
const border = theme.colors.border ?? 'rgba(127,127,127,0.3)';
|
|
74
|
+
return (_jsxs("div", { role: "region", "aria-labelledby": titleId, tabIndex: 0, onKeyDown: onStageKeyDown, style: {
|
|
75
|
+
display: 'flex',
|
|
76
|
+
flexDirection: 'column',
|
|
77
|
+
width: '100%',
|
|
78
|
+
height: '100%',
|
|
79
|
+
minHeight: 0,
|
|
80
|
+
position: 'relative',
|
|
81
|
+
background: theme.colors.background,
|
|
82
|
+
color: theme.colors.text,
|
|
83
|
+
fontFamily: theme.fonts.body,
|
|
84
|
+
outline: 'none',
|
|
85
|
+
}, children: [_jsxs("div", { style: {
|
|
86
|
+
display: 'flex',
|
|
87
|
+
alignItems: 'center',
|
|
88
|
+
justifyContent: 'space-between',
|
|
89
|
+
gap: 12,
|
|
90
|
+
padding: '10px 16px',
|
|
91
|
+
borderBottom: `1px solid ${border}`,
|
|
92
|
+
}, children: [_jsx("button", { type: "button", "aria-label": "Previous example", onClick: () => selectAt(selectedIndex - 1), style: navBtnStyle(theme), children: _jsx(ChevronLeft, { size: 18 }) }), _jsxs("div", { style: { textAlign: 'center', minWidth: 0, flex: 1 }, children: [_jsx("div", { id: titleId, style: { fontWeight: 600, fontSize: 16 }, children: selected.title }), selected.description && (_jsx("div", { style: { fontSize: 13, color: muted, marginTop: 2 }, children: selected.description })), _jsxs("div", { style: { fontSize: 11, color: muted, marginTop: 4, opacity: 0.8 }, children: [selectedIndex + 1, " / ", items.length, selected.stack ? ` · ${selected.stack}` : ''] })] }), _jsxs("div", { style: { display: 'flex', gap: 8, alignItems: 'center' }, children: [_jsxs("button", { type: "button", "aria-label": "Browse all examples", "aria-expanded": gridOpen, onClick: () => setGridOpen(true), style: {
|
|
93
|
+
...navBtnStyle(theme),
|
|
94
|
+
width: 'auto',
|
|
95
|
+
padding: '0 12px',
|
|
96
|
+
gap: 6,
|
|
97
|
+
fontSize: 13,
|
|
98
|
+
}, children: [_jsx(LayoutGrid, { size: 16 }), "All"] }), _jsx("button", { type: "button", "aria-label": "Next example", onClick: () => selectAt(selectedIndex + 1), style: navBtnStyle(theme), children: _jsx(ChevronRight, { size: 18 }) })] })] }), showGraph && (_jsx("div", { style: { flex: 1, minHeight: stageHeight, position: 'relative' }, children: _jsx(SubsystemComponentGraph, { components: selected.components, edges: selected.edges, throughlines: selected.throughlines, title: selected.title, description: selected.description, hideSidebar: true, graphTitle: selected.title, showEdgeLabels: true }, selected.id) })), gridOpen && (_jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": "All subsystem examples", style: {
|
|
99
|
+
position: 'absolute',
|
|
100
|
+
inset: 0,
|
|
101
|
+
zIndex: 40,
|
|
102
|
+
background: theme.colors.background,
|
|
103
|
+
display: 'flex',
|
|
104
|
+
flexDirection: 'column',
|
|
105
|
+
minHeight: 0,
|
|
106
|
+
}, children: [_jsxs("div", { style: {
|
|
107
|
+
display: 'flex',
|
|
108
|
+
alignItems: 'center',
|
|
109
|
+
justifyContent: 'space-between',
|
|
110
|
+
padding: '12px 16px',
|
|
111
|
+
borderBottom: `1px solid ${border}`,
|
|
112
|
+
}, children: [_jsx("div", { style: { fontWeight: 600, fontSize: 16 }, children: "All examples" }), _jsx("button", { type: "button", "aria-label": "Close browse grid", onClick: () => setGridOpen(false), style: navBtnStyle(theme), children: _jsx(X, { size: 18 }) })] }), _jsx("div", { style: {
|
|
113
|
+
flex: 1,
|
|
114
|
+
overflow: 'auto',
|
|
115
|
+
padding: 16,
|
|
116
|
+
display: 'grid',
|
|
117
|
+
gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 1fr))',
|
|
118
|
+
gap: 12,
|
|
119
|
+
alignContent: 'start',
|
|
120
|
+
}, children: items.map((item) => {
|
|
121
|
+
const active = item.id === selected.id;
|
|
122
|
+
return (_jsxs("button", { type: "button", onClick: () => {
|
|
123
|
+
selectId(item.id);
|
|
124
|
+
setGridOpen(false);
|
|
125
|
+
}, style: {
|
|
126
|
+
textAlign: 'left',
|
|
127
|
+
padding: '14px 16px',
|
|
128
|
+
borderRadius: 10,
|
|
129
|
+
border: `1px solid ${active ? (theme.colors.accent ?? theme.colors.primary) : border}`,
|
|
130
|
+
background: active
|
|
131
|
+
? (theme.colors.backgroundSecondary ?? theme.colors.surface)
|
|
132
|
+
: (theme.colors.surface ?? theme.colors.background),
|
|
133
|
+
color: theme.colors.text,
|
|
134
|
+
cursor: 'pointer',
|
|
135
|
+
display: 'flex',
|
|
136
|
+
flexDirection: 'column',
|
|
137
|
+
gap: 6,
|
|
138
|
+
minHeight: 110,
|
|
139
|
+
}, children: [_jsxs("div", { style: { display: 'flex', gap: 8, flexWrap: 'wrap', alignItems: 'center' }, children: [item.stack && (_jsx("span", { style: {
|
|
140
|
+
fontSize: 11,
|
|
141
|
+
fontFamily: theme.fonts.monospace,
|
|
142
|
+
padding: '2px 6px',
|
|
143
|
+
borderRadius: 4,
|
|
144
|
+
background: theme.colors.backgroundSecondary ?? theme.colors.surface,
|
|
145
|
+
color: muted,
|
|
146
|
+
}, children: item.stack })), item.complexity && (_jsx("span", { style: { fontSize: 11, color: muted }, children: item.complexity }))] }), _jsx("div", { style: { fontSize: 15, fontWeight: 600, lineHeight: 1.3 }, children: item.title }), item.description && (_jsx("div", { style: { fontSize: 12, lineHeight: 1.4, color: muted }, children: item.description }))] }, item.id));
|
|
147
|
+
}) })] }))] }));
|
|
148
|
+
}
|
|
149
|
+
function navBtnStyle(theme) {
|
|
150
|
+
return {
|
|
151
|
+
display: 'inline-flex',
|
|
152
|
+
alignItems: 'center',
|
|
153
|
+
justifyContent: 'center',
|
|
154
|
+
width: 36,
|
|
155
|
+
height: 36,
|
|
156
|
+
borderRadius: 8,
|
|
157
|
+
border: `1px solid ${theme.colors.border ?? 'rgba(127,127,127,0.3)'}`,
|
|
158
|
+
background: theme.colors.surface ?? 'transparent',
|
|
159
|
+
color: theme.colors.text,
|
|
160
|
+
cursor: 'pointer',
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=SubsystemCarousel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubsystemCarousel.js","sourceRoot":"","sources":["../../src/subsystem/SubsystemCarousel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -50,12 +50,37 @@ export interface SubsystemComponentGraphProps {
|
|
|
50
50
|
* subsystem name visible as an overlay on the canvas.
|
|
51
51
|
*/
|
|
52
52
|
hideSidebar?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* How throughline step highlighting behaves on the canvas.
|
|
55
|
+
* - `focus` (default): zoom to the step, hide non-participants, open drawer
|
|
56
|
+
* - `dim`: keep the full graph, dim non-participants (same as hovering a step)
|
|
57
|
+
*/
|
|
58
|
+
throughlineStepMode?: 'focus' | 'dim';
|
|
59
|
+
/**
|
|
60
|
+
* When true, cycles throughline steps automatically using `dim` highlighting
|
|
61
|
+
* (no zoom, no drawer). Loops across all throughlines that have steps.
|
|
62
|
+
* Useful for graph-only embeds (`hideSidebar`).
|
|
63
|
+
*/
|
|
64
|
+
autoPlayThroughlines?: boolean;
|
|
65
|
+
/** Pause between autoplay steps in ms. @default 2500 */
|
|
66
|
+
throughlineAutoPlayIntervalMs?: number;
|
|
67
|
+
/**
|
|
68
|
+
* When false, focusing a throughline/step does not call `fitView`.
|
|
69
|
+
* @default true
|
|
70
|
+
*/
|
|
71
|
+
zoomOnThroughlineFocus?: boolean;
|
|
53
72
|
/**
|
|
54
73
|
* Subsystem title rendered as a non-interactive overlay chip on the graph
|
|
55
74
|
* canvas (top-center). Does not trigger the sidebar — for graph-only
|
|
56
75
|
* embeds that still need to name what they show.
|
|
57
76
|
*/
|
|
58
77
|
graphTitle?: string;
|
|
78
|
+
/**
|
|
79
|
+
* When true, shows the active throughline's title as a non-interactive
|
|
80
|
+
* overlay chip on the canvas (under `graphTitle` when both are set).
|
|
81
|
+
* Uses the focused or hover-highlighted throughline.
|
|
82
|
+
*/
|
|
83
|
+
showThroughlineTitle?: boolean;
|
|
59
84
|
/** Markdown description rendered in the sidebar. */
|
|
60
85
|
description?: string;
|
|
61
86
|
/** Rendered over the graph canvas only (not the title/legend sidebar). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubsystemComponentGraph.d.ts","sourceRoot":"","sources":["../../src/subsystem/SubsystemComponentGraph.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAiC,SAAS,EAAE,MAAM,OAAO,CAAC;AAqBtE,OAAO,EAKL,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EAEvB,KAAK,oBAAoB,EAC1B,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAKjE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"SubsystemComponentGraph.d.ts","sourceRoot":"","sources":["../../src/subsystem/SubsystemComponentGraph.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAiC,SAAS,EAAE,MAAM,OAAO,CAAC;AAqBtE,OAAO,EAKL,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EAEvB,KAAK,oBAAoB,EAC1B,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAKjE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAYzE,+EAA+E;AAC/E,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,oBAAoB,CAAC;IAClC,0EAA0E;IAC1E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAMD,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACtC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,6EAA6E;IAC7E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtD;kFAC8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACtC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wDAAwD;IACxD,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,6DAA6D;IAC7D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,gFAAgF;IAChF,uBAAuB,CAAC,EAAE,SAAS,CAAC;IACpC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,wBAAwB,KAAK,SAAS,CAAC;IAChF;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,wBAAwB,KAAK,SAAS,CAAC;IACvE;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,kBAAkB,KAAK,SAAS,CAAC;IAC9D;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,2DAA2D;IAC3D,qBAAqB,CAAC,EAAE,0BAA0B,GAAG,IAAI,CAAC;CAC3D;AAsvDD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,+BAsC1E"}
|