@principal-ai/subsystems-react 0.18.0 → 0.19.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/README.md CHANGED
@@ -1,93 +1,19 @@
1
- # @principal-ai/visual-validation-react
1
+ # @principal-ai/subsystems-react
2
2
 
3
- React UI **component library** for the Visual Validation Framework.
3
+ React UI for **Subsystem Models**: component graphs, Pierre code views, graphify helpers, and session-event feeds used by Subsystems Studio.
4
4
 
5
- This library provides **building blocks** for creating graph visualization applications. The actual "panel" application should be built separately using these components.
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/visual-validation-react
22
- # or
23
- bun add @principal-ai/visual-validation-react
8
+ npm install @principal-ai/subsystems-react
24
9
  ```
25
10
 
26
- ## Peer Dependencies
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
- ## License
13
+ ## Main exports
92
14
 
93
- MIT
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;AAUzE,+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,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,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;AAu7CD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,+BAsC1E"}
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;AAmzDD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,+BAsC1E"}