@schlessera/brain-ui-react 0.6.3 → 0.7.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/components/graph/graph-canvas.d.ts +20 -0
- package/dist/components/graph/graph-canvas.d.ts.map +1 -0
- package/dist/components/graph/graph-canvas.js +387 -0
- package/dist/components/graph/graph-canvas.js.map +1 -0
- package/dist/components/graph/graph-controls.d.ts +8 -0
- package/dist/components/graph/graph-controls.d.ts.map +1 -0
- package/dist/components/graph/graph-controls.js +132 -0
- package/dist/components/graph/graph-controls.js.map +1 -0
- package/dist/components/graph/graph-empty-state.d.ts +15 -0
- package/dist/components/graph/graph-empty-state.d.ts.map +1 -0
- package/dist/components/graph/graph-empty-state.js +21 -0
- package/dist/components/graph/graph-empty-state.js.map +1 -0
- package/dist/components/graph/graph-page.d.ts +7 -0
- package/dist/components/graph/graph-page.d.ts.map +1 -0
- package/dist/components/graph/graph-page.js +400 -0
- package/dist/components/graph/graph-page.js.map +1 -0
- package/dist/components/graph/lib/graph-helpers.d.ts +98 -0
- package/dist/components/graph/lib/graph-helpers.d.ts.map +1 -0
- package/dist/components/graph/lib/graph-helpers.js +240 -0
- package/dist/components/graph/lib/graph-helpers.js.map +1 -0
- package/dist/components/graph/node-popover.d.ts +11 -0
- package/dist/components/graph/node-popover.d.ts.map +1 -0
- package/dist/components/graph/node-popover.js +39 -0
- package/dist/components/graph/node-popover.js.map +1 -0
- package/dist/components/graph/use-graph-theme.d.ts +19 -0
- package/dist/components/graph/use-graph-theme.d.ts.map +1 -0
- package/dist/components/graph/use-graph-theme.js +38 -0
- package/dist/components/graph/use-graph-theme.js.map +1 -0
- package/dist/components/layout/mobile-tab-bar.d.ts.map +1 -1
- package/dist/components/layout/mobile-tab-bar.js +16 -5
- package/dist/components/layout/mobile-tab-bar.js.map +1 -1
- package/dist/components/layout/side-rail.d.ts.map +1 -1
- package/dist/components/layout/side-rail.js +14 -4
- package/dist/components/layout/side-rail.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/stores/graph-store.d.ts +85 -0
- package/dist/stores/graph-store.d.ts.map +1 -0
- package/dist/stores/graph-store.js +236 -0
- package/dist/stores/graph-store.js.map +1 -0
- package/dist/stores/ui-store.d.ts +5 -0
- package/dist/stores/ui-store.d.ts.map +1 -1
- package/dist/stores/ui-store.js +2 -0
- package/dist/stores/ui-store.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +5 -2
- package/src/components/graph/graph-canvas.tsx +450 -0
- package/src/components/graph/graph-controls.tsx +436 -0
- package/src/components/graph/graph-empty-state.tsx +45 -0
- package/src/components/graph/graph-page.tsx +1045 -0
- package/src/components/graph/lib/graph-helpers.ts +311 -0
- package/src/components/graph/node-popover.tsx +135 -0
- package/src/components/graph/use-graph-theme.ts +51 -0
- package/src/components/layout/mobile-tab-bar.tsx +26 -3
- package/src/components/layout/side-rail.tsx +28 -4
- package/src/index.ts +3 -1
- package/src/stores/graph-store.ts +345 -0
- package/src/stores/ui-store.ts +8 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { GraphMetaResponse, GraphSubgraphResponse, GraphMaintenanceResponse } from "@schlessera/brain-ui-sdk/protocol";
|
|
2
|
+
export type GraphMode = "clusters" | "discovery" | "local" | "maintenance";
|
|
3
|
+
export type LocalDirection = "in" | "out" | "both";
|
|
4
|
+
/**
|
|
5
|
+
* How a fetch failed. "unavailable" carries the server's gating reason
|
|
6
|
+
* (schema too old / not yet computed); "unsupported" means the server predates
|
|
7
|
+
* the graph API entirely (404 on /graph/meta).
|
|
8
|
+
*/
|
|
9
|
+
export type GraphErrorKind = "unavailable" | "unsupported" | "network";
|
|
10
|
+
interface GraphError {
|
|
11
|
+
kind: GraphErrorKind;
|
|
12
|
+
reason?: "schema" | "not_computed";
|
|
13
|
+
message: string;
|
|
14
|
+
}
|
|
15
|
+
export interface LocalParams {
|
|
16
|
+
center: string | null;
|
|
17
|
+
depth: 1 | 2 | 3;
|
|
18
|
+
direction: LocalDirection;
|
|
19
|
+
}
|
|
20
|
+
export interface DiscoveryParams {
|
|
21
|
+
/** null = the precomputed default root (direction is fixed there). */
|
|
22
|
+
root: string | null;
|
|
23
|
+
maxDepth: number;
|
|
24
|
+
}
|
|
25
|
+
export interface ClustersParams {
|
|
26
|
+
/** null = all communities. */
|
|
27
|
+
community: number | null;
|
|
28
|
+
isolates: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface MaintenanceParams {
|
|
31
|
+
staleDays: number;
|
|
32
|
+
}
|
|
33
|
+
export type SizeBy = "degree" | "pagerank";
|
|
34
|
+
export type DiscoveryColorBy = "distance" | "folder";
|
|
35
|
+
/** Which finding sections are visible — a client-side filter, no refetch. */
|
|
36
|
+
export interface MaintenanceFilters {
|
|
37
|
+
orphans: boolean;
|
|
38
|
+
unreachable: boolean;
|
|
39
|
+
broken: boolean;
|
|
40
|
+
stale: boolean;
|
|
41
|
+
}
|
|
42
|
+
type FetchState = "idle" | "loading" | "done" | "error";
|
|
43
|
+
interface GraphState {
|
|
44
|
+
mode: GraphMode;
|
|
45
|
+
meta: GraphMetaResponse | null;
|
|
46
|
+
metaState: FetchState;
|
|
47
|
+
local: LocalParams;
|
|
48
|
+
discovery: DiscoveryParams;
|
|
49
|
+
clusters: ClustersParams;
|
|
50
|
+
maintenance: MaintenanceParams;
|
|
51
|
+
/** Scene for the current mode (subgraph modes). */
|
|
52
|
+
subgraph: GraphSubgraphResponse | null;
|
|
53
|
+
findings: GraphMaintenanceResponse | null;
|
|
54
|
+
dataState: FetchState;
|
|
55
|
+
error: GraphError | null;
|
|
56
|
+
/** In-scene search query — highlights matching nodes, does not refetch. */
|
|
57
|
+
sceneQuery: string;
|
|
58
|
+
clustersSizeBy: SizeBy;
|
|
59
|
+
discoveryColorBy: DiscoveryColorBy;
|
|
60
|
+
maintenanceFilters: MaintenanceFilters;
|
|
61
|
+
selectedId: number | null;
|
|
62
|
+
hoveredId: number | null;
|
|
63
|
+
setMode: (mode: GraphMode) => void;
|
|
64
|
+
setLocalParams: (params: Partial<LocalParams>) => void;
|
|
65
|
+
setDiscoveryParams: (params: Partial<DiscoveryParams>) => void;
|
|
66
|
+
setClustersParams: (params: Partial<ClustersParams>) => void;
|
|
67
|
+
setMaintenanceParams: (params: Partial<MaintenanceParams>) => void;
|
|
68
|
+
setClustersSizeBy: (sizeBy: SizeBy) => void;
|
|
69
|
+
setDiscoveryColorBy: (colorBy: DiscoveryColorBy) => void;
|
|
70
|
+
setMaintenanceFilters: (filters: Partial<MaintenanceFilters>) => void;
|
|
71
|
+
setSceneQuery: (q: string) => void;
|
|
72
|
+
select: (id: number | null) => void;
|
|
73
|
+
hover: (id: number | null) => void;
|
|
74
|
+
fetchMeta: (force?: boolean) => Promise<void>;
|
|
75
|
+
/** Fetch the scene for the current mode + params (cached per query + computedAt). */
|
|
76
|
+
fetchScene: () => Promise<void>;
|
|
77
|
+
/** Local mode: pull the depth-1 ego of a node and merge it into the scene. */
|
|
78
|
+
expandNode: (path: string) => Promise<void>;
|
|
79
|
+
reset: () => void;
|
|
80
|
+
}
|
|
81
|
+
/** Test/dev hook: drop every cached scene. */
|
|
82
|
+
export declare function clearGraphSceneCache(): void;
|
|
83
|
+
export declare const useGraphStore: import("zustand").UseBoundStore<import("zustand").StoreApi<GraphState>>;
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=graph-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-store.d.ts","sourceRoot":"","sources":["../../src/stores/graph-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { create } from "zustand";
|
|
2
|
+
import { API_BASE } from "../lib/backend.js";
|
|
3
|
+
import { buildQuery, mergeSubgraphs } from "../components/graph/lib/graph-helpers.js";
|
|
4
|
+
/** Cache of scene responses, keyed by `${endpoint}?${query}|${computedAt}`. */
|
|
5
|
+
const sceneCache = new Map();
|
|
6
|
+
const SCENE_CACHE_MAX = 40;
|
|
7
|
+
/** Test/dev hook: drop every cached scene. */
|
|
8
|
+
export function clearGraphSceneCache() {
|
|
9
|
+
sceneCache.clear();
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Monotonic tokens for scene and meta fetches. Every call claims a new
|
|
13
|
+
* token; only the holder of the latest token may write results (success OR
|
|
14
|
+
* error), so a slow older response can never overwrite newer state. Meta
|
|
15
|
+
* needs this too: forced mount-time refetches can overlap when the view is
|
|
16
|
+
* toggled quickly, and an older /meta response landing last would restore a
|
|
17
|
+
* stale computedAt — which is the key every scene-cache lookup hangs off.
|
|
18
|
+
*/
|
|
19
|
+
let sceneRequestToken = 0;
|
|
20
|
+
let metaRequestToken = 0;
|
|
21
|
+
function cachePut(key, value) {
|
|
22
|
+
if (sceneCache.size >= SCENE_CACHE_MAX) {
|
|
23
|
+
const oldest = sceneCache.keys().next().value;
|
|
24
|
+
if (oldest !== undefined)
|
|
25
|
+
sceneCache.delete(oldest);
|
|
26
|
+
}
|
|
27
|
+
sceneCache.set(key, value);
|
|
28
|
+
}
|
|
29
|
+
async function fetchGraphJson(pathAndQuery) {
|
|
30
|
+
const res = await fetch(`${API_BASE}/graph${pathAndQuery}`);
|
|
31
|
+
if (!res.ok) {
|
|
32
|
+
const body = await res.json().catch(() => ({}));
|
|
33
|
+
const err = new Error(body.error || `HTTP ${res.status}`);
|
|
34
|
+
err.status = res.status;
|
|
35
|
+
err.reason = body.reason;
|
|
36
|
+
throw err;
|
|
37
|
+
}
|
|
38
|
+
return res.json();
|
|
39
|
+
}
|
|
40
|
+
function toGraphError(err) {
|
|
41
|
+
const e = err;
|
|
42
|
+
if (e.status === 404) {
|
|
43
|
+
return {
|
|
44
|
+
kind: "unsupported",
|
|
45
|
+
message: "This server does not know the graph API yet.",
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (e.status === 503) {
|
|
49
|
+
return {
|
|
50
|
+
kind: "unavailable",
|
|
51
|
+
reason: e.reason === "schema" ? "schema" : "not_computed",
|
|
52
|
+
message: e.message || "graph_unavailable",
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return { kind: "network", message: e.message || "Request failed" };
|
|
56
|
+
}
|
|
57
|
+
function sceneRequest(state) {
|
|
58
|
+
switch (state.mode) {
|
|
59
|
+
case "clusters":
|
|
60
|
+
return {
|
|
61
|
+
endpoint: "/clusters",
|
|
62
|
+
query: buildQuery({
|
|
63
|
+
community: state.clusters.community,
|
|
64
|
+
isolates: state.clusters.isolates ? 1 : null,
|
|
65
|
+
}),
|
|
66
|
+
};
|
|
67
|
+
case "discovery":
|
|
68
|
+
return {
|
|
69
|
+
endpoint: "/discovery",
|
|
70
|
+
query: buildQuery({
|
|
71
|
+
root: state.discovery.root,
|
|
72
|
+
maxDepth: state.discovery.maxDepth,
|
|
73
|
+
}),
|
|
74
|
+
};
|
|
75
|
+
case "local":
|
|
76
|
+
if (!state.local.center)
|
|
77
|
+
return null;
|
|
78
|
+
return {
|
|
79
|
+
endpoint: "/neighborhood",
|
|
80
|
+
query: buildQuery({
|
|
81
|
+
center: state.local.center,
|
|
82
|
+
depth: state.local.depth,
|
|
83
|
+
direction: state.local.direction,
|
|
84
|
+
}),
|
|
85
|
+
};
|
|
86
|
+
case "maintenance":
|
|
87
|
+
return {
|
|
88
|
+
endpoint: "/maintenance",
|
|
89
|
+
query: buildQuery({ staleDays: state.maintenance.staleDays }),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export const useGraphStore = create((set, get) => ({
|
|
94
|
+
mode: "local",
|
|
95
|
+
meta: null,
|
|
96
|
+
metaState: "idle",
|
|
97
|
+
local: { center: null, depth: 1, direction: "both" },
|
|
98
|
+
discovery: { root: null, maxDepth: 8 },
|
|
99
|
+
clusters: { community: null, isolates: false },
|
|
100
|
+
maintenance: { staleDays: 180 },
|
|
101
|
+
subgraph: null,
|
|
102
|
+
findings: null,
|
|
103
|
+
dataState: "idle",
|
|
104
|
+
error: null,
|
|
105
|
+
sceneQuery: "",
|
|
106
|
+
clustersSizeBy: "degree",
|
|
107
|
+
discoveryColorBy: "distance",
|
|
108
|
+
maintenanceFilters: { orphans: true, unreachable: true, broken: true, stale: true },
|
|
109
|
+
selectedId: null,
|
|
110
|
+
hoveredId: null,
|
|
111
|
+
setMode: (mode) => {
|
|
112
|
+
if (mode === get().mode)
|
|
113
|
+
return;
|
|
114
|
+
set({ mode, subgraph: null, findings: null, dataState: "idle", error: null, selectedId: null, hoveredId: null, sceneQuery: "" });
|
|
115
|
+
void get().fetchScene();
|
|
116
|
+
},
|
|
117
|
+
setLocalParams: (params) => {
|
|
118
|
+
set((s) => ({ local: { ...s.local, ...params }, selectedId: null }));
|
|
119
|
+
if (get().mode === "local")
|
|
120
|
+
void get().fetchScene();
|
|
121
|
+
},
|
|
122
|
+
setDiscoveryParams: (params) => {
|
|
123
|
+
set((s) => ({ discovery: { ...s.discovery, ...params }, selectedId: null }));
|
|
124
|
+
if (get().mode === "discovery")
|
|
125
|
+
void get().fetchScene();
|
|
126
|
+
},
|
|
127
|
+
setClustersParams: (params) => {
|
|
128
|
+
set((s) => ({ clusters: { ...s.clusters, ...params }, selectedId: null }));
|
|
129
|
+
if (get().mode === "clusters")
|
|
130
|
+
void get().fetchScene();
|
|
131
|
+
},
|
|
132
|
+
setMaintenanceParams: (params) => {
|
|
133
|
+
set((s) => ({ maintenance: { ...s.maintenance, ...params } }));
|
|
134
|
+
if (get().mode === "maintenance")
|
|
135
|
+
void get().fetchScene();
|
|
136
|
+
},
|
|
137
|
+
setClustersSizeBy: (sizeBy) => set({ clustersSizeBy: sizeBy }),
|
|
138
|
+
setDiscoveryColorBy: (colorBy) => set({ discoveryColorBy: colorBy }),
|
|
139
|
+
setMaintenanceFilters: (filters) => set((s) => ({ maintenanceFilters: { ...s.maintenanceFilters, ...filters } })),
|
|
140
|
+
setSceneQuery: (q) => set({ sceneQuery: q }),
|
|
141
|
+
select: (id) => set({ selectedId: id }),
|
|
142
|
+
hover: (id) => set({ hoveredId: id }),
|
|
143
|
+
fetchMeta: async (force) => {
|
|
144
|
+
const { metaState } = get();
|
|
145
|
+
if (!force && (metaState === "loading" || metaState === "done"))
|
|
146
|
+
return;
|
|
147
|
+
const token = ++metaRequestToken;
|
|
148
|
+
set({ metaState: "loading" });
|
|
149
|
+
try {
|
|
150
|
+
const meta = await fetchGraphJson("/meta");
|
|
151
|
+
if (token !== metaRequestToken)
|
|
152
|
+
return;
|
|
153
|
+
set({ meta, metaState: "done" });
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
if (token !== metaRequestToken)
|
|
157
|
+
return;
|
|
158
|
+
set({ metaState: "error", error: toGraphError(err) });
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
fetchScene: async () => {
|
|
162
|
+
const state = get();
|
|
163
|
+
const token = ++sceneRequestToken;
|
|
164
|
+
const req = sceneRequest(state);
|
|
165
|
+
if (!req) {
|
|
166
|
+
// Local mode without a center: nothing to fetch, the page shows the picker.
|
|
167
|
+
set({ subgraph: null, findings: null, dataState: "idle", error: null });
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const cacheKey = `${req.endpoint}?${req.query}|${state.meta?.computedAt ?? ""}`;
|
|
171
|
+
const cached = sceneCache.get(cacheKey);
|
|
172
|
+
if (cached) {
|
|
173
|
+
if (state.mode === "maintenance") {
|
|
174
|
+
set({ findings: cached, subgraph: null, dataState: "done", error: null });
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
set({ subgraph: cached, findings: null, dataState: "done", error: null });
|
|
178
|
+
}
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
set({ dataState: "loading", error: null });
|
|
182
|
+
const requestedMode = state.mode;
|
|
183
|
+
try {
|
|
184
|
+
const data = await fetchGraphJson(`${req.endpoint}${req.query ? `?${req.query}` : ""}`);
|
|
185
|
+
// The cache is always safe to fill; the visible scene belongs to the
|
|
186
|
+
// latest request only (rapid param changes race their responses).
|
|
187
|
+
cachePut(cacheKey, data);
|
|
188
|
+
if (token !== sceneRequestToken)
|
|
189
|
+
return;
|
|
190
|
+
if (requestedMode === "maintenance") {
|
|
191
|
+
set({ findings: data, subgraph: null, dataState: "done" });
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
set({ subgraph: data, findings: null, dataState: "done" });
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
if (token !== sceneRequestToken)
|
|
199
|
+
return;
|
|
200
|
+
set({ dataState: "error", error: toGraphError(err) });
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
expandNode: async (path) => {
|
|
204
|
+
const state = get();
|
|
205
|
+
if (state.mode !== "local" || !state.subgraph)
|
|
206
|
+
return;
|
|
207
|
+
try {
|
|
208
|
+
const ego = await fetchGraphJson(`/neighborhood?${buildQuery({ center: path, depth: 1, direction: "both" })}`);
|
|
209
|
+
const current = get();
|
|
210
|
+
if (current.mode !== "local" || !current.subgraph)
|
|
211
|
+
return;
|
|
212
|
+
set({ subgraph: mergeSubgraphs(current.subgraph, ego) });
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Expansion is additive sugar — a failure leaves the scene as-is.
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
reset: () => set({
|
|
219
|
+
subgraph: null,
|
|
220
|
+
findings: null,
|
|
221
|
+
dataState: "idle",
|
|
222
|
+
error: null,
|
|
223
|
+
selectedId: null,
|
|
224
|
+
hoveredId: null,
|
|
225
|
+
sceneQuery: "",
|
|
226
|
+
}),
|
|
227
|
+
}));
|
|
228
|
+
// Dev-only handle for exercising the view with injected fixtures (the
|
|
229
|
+
// window.__chatStore precedent). The env read is defensive: outside a Vite
|
|
230
|
+
// build `import.meta.env` does not exist.
|
|
231
|
+
const devEnv = import.meta.env;
|
|
232
|
+
if (typeof window !== "undefined" && devEnv?.DEV) {
|
|
233
|
+
window.__graphStore =
|
|
234
|
+
useGraphStore;
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=graph-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-store.js","sourceRoot":"","sources":["../../src/stores/graph-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAMjC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAqGtF,+EAA+E;AAC/E,MAAM,UAAU,GAAG,IAAI,GAAG,EAA4D,CAAC;AACvF,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,8CAA8C;AAC9C,MAAM,UAAU,oBAAoB;IAClC,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED;;;;;;;GAOG;AACH,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAC1B,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB,SAAS,QAAQ,CAAC,GAAW,EAAE,KAAuD;IACpF,IAAI,UAAU,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC9C,IAAI,MAAM,KAAK,SAAS;YAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IACD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,cAAc,CAAI,YAAoB;IACnD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,SAAS,YAAY,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAA4B,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,IAAI,KAAK,CAClB,IAA2B,CAAC,KAAK,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CACZ,CAAC;QACjD,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACxB,GAAG,CAAC,MAAM,GAAI,IAA4B,CAAC,MAAM,CAAC;QAClD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;AAClC,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,MAAM,CAAC,GAAG,GAAmD,CAAC;IAC9D,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,8CAA8C;SACxD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc;YACzD,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,mBAAmB;SAC1C,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,gBAAgB,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,UAAU;YACb,OAAO;gBACL,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,UAAU,CAAC;oBAChB,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;oBACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;iBAC7C,CAAC;aACH,CAAC;QACJ,KAAK,WAAW;YACd,OAAO;gBACL,QAAQ,EAAE,YAAY;gBACtB,KAAK,EAAE,UAAU,CAAC;oBAChB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;oBAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ;iBACnC,CAAC;aACH,CAAC;QACJ,KAAK,OAAO;YACV,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACrC,OAAO;gBACL,QAAQ,EAAE,eAAe;gBACzB,KAAK,EAAE,UAAU,CAAC;oBAChB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;oBAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;oBACxB,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;iBACjC,CAAC;aACH,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO;gBACL,QAAQ,EAAE,cAAc;gBACxB,KAAK,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;aAC9D,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAa,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7D,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,MAAM;IAEjB,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;IACpD,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE;IACtC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC9C,WAAW,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE;IAE/B,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,MAAM;IACjB,KAAK,EAAE,IAAI;IAEX,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,QAAQ;IACxB,gBAAgB,EAAE,UAAU;IAC5B,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;IACnF,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IAEf,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI;YAAE,OAAO;QAChC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACjI,KAAK,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;IACD,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE;QACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACrE,IAAI,GAAG,EAAE,CAAC,IAAI,KAAK,OAAO;YAAE,KAAK,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACtD,CAAC;IACD,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,GAAG,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7E,IAAI,GAAG,EAAE,CAAC,IAAI,KAAK,WAAW;YAAE,KAAK,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAC1D,CAAC;IACD,iBAAiB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3E,IAAI,GAAG,EAAE,CAAC,IAAI,KAAK,UAAU;YAAE,KAAK,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACzD,CAAC;IACD,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,GAAG,EAAE,CAAC,IAAI,KAAK,aAAa;YAAE,KAAK,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAC5D,CAAC;IACD,iBAAiB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IAC9D,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;IACpE,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE,CACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC,kBAAkB,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/E,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAC5C,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACvC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAErC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,MAAM,CAAC;YAAE,OAAO;QACxE,MAAM,KAAK,GAAG,EAAE,gBAAgB,CAAC;QACjC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAoB,OAAO,CAAC,CAAC;YAC9D,IAAI,KAAK,KAAK,gBAAgB;gBAAE,OAAO;YACvC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,KAAK,gBAAgB;gBAAE,OAAO;YACvC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,UAAU,EAAE,KAAK,IAAI,EAAE;QACrB,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,EAAE,iBAAiB,CAAC;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,4EAA4E;YAC5E,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;QAChF,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACjC,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAkC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxG,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,EAAE,QAAQ,EAAE,MAA+B,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACrG,CAAC;YACD,OAAO;QACT,CAAC;QACD,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACrD,CAAC;YACF,qEAAqE;YACrE,kEAAkE;YAClE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACzB,IAAI,KAAK,KAAK,iBAAiB;gBAAE,OAAO;YACxC,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;gBACpC,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAgC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YACzF,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,EAAE,QAAQ,EAAE,IAA6B,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,KAAK,iBAAiB;gBAAE,OAAO;YACxC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,OAAO;QACtD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,cAAc,CAC9B,iBAAiB,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,CAC7E,CAAC;YACF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;YACtB,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,OAAO;YAC1D,GAAG,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;IACH,CAAC;IAED,KAAK,EAAE,GAAG,EAAE,CACV,GAAG,CAAC;QACF,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,EAAE;KACf,CAAC;CACL,CAAC,CAAC,CAAC;AAEJ,sEAAsE;AACtE,2EAA2E;AAC3E,0CAA0C;AAC1C,MAAM,MAAM,GAAI,MAAM,CAAC,IAA0C,CAAC,GAAG,CAAC;AACtE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC;IAChD,MAA6D,CAAC,YAAY;QACzE,aAAa,CAAC;AAClB,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/** Which tab the settings panel opens on. */
|
|
2
2
|
export type SettingsTab = "models" | "security";
|
|
3
|
+
/** Full-screen surface currently shown inside the AppShell. */
|
|
4
|
+
export type ActiveView = "chat" | "graph";
|
|
3
5
|
interface UIState {
|
|
6
|
+
activeView: ActiveView;
|
|
4
7
|
sessionPanelOpen: boolean;
|
|
5
8
|
syncPanelOpen: boolean;
|
|
6
9
|
whatsupPanelOpen: boolean;
|
|
@@ -9,6 +12,8 @@ interface UIState {
|
|
|
9
12
|
filePanelOpen: boolean;
|
|
10
13
|
settingsPanelOpen: boolean;
|
|
11
14
|
settingsTab: SettingsTab;
|
|
15
|
+
/** Switch the full-screen view; closes any open panel so the new view starts clean. */
|
|
16
|
+
setActiveView: (view: ActiveView) => void;
|
|
12
17
|
toggleSessionPanel: () => void;
|
|
13
18
|
toggleSyncPanel: () => void;
|
|
14
19
|
toggleWhatsupPanel: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-store.d.ts","sourceRoot":"","sources":["../../src/stores/ui-store.ts"],"names":[],"mappings":"AAEA,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhD,UAAU,OAAO;IACf,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,oEAAoE;IACpE,YAAY,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5C;AAYD,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"ui-store.d.ts","sourceRoot":"","sources":["../../src/stores/ui-store.ts"],"names":[],"mappings":"AAEA,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEhD,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAE1C,UAAU,OAAO;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,uFAAuF;IACvF,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,oEAAoE;IACpE,YAAY,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CAC5C;AAYD,eAAO,MAAM,UAAU,sEA8BpB,CAAC"}
|
package/dist/stores/ui-store.js
CHANGED
|
@@ -10,7 +10,9 @@ const CLOSED = {
|
|
|
10
10
|
};
|
|
11
11
|
export const useUIStore = create((set) => ({
|
|
12
12
|
...CLOSED,
|
|
13
|
+
activeView: "chat",
|
|
13
14
|
settingsTab: "models",
|
|
15
|
+
setActiveView: (view) => set({ ...CLOSED, activeView: view }),
|
|
14
16
|
toggleSessionPanel: () => set((s) => ({ ...CLOSED, sessionPanelOpen: !s.sessionPanelOpen })),
|
|
15
17
|
toggleSyncPanel: () => set((s) => ({ ...CLOSED, syncPanelOpen: !s.syncPanelOpen })),
|
|
16
18
|
toggleWhatsupPanel: () => set((s) => ({ ...CLOSED, whatsupPanelOpen: !s.whatsupPanelOpen })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-store.js","sourceRoot":"","sources":["../../src/stores/ui-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-store.js","sourceRoot":"","sources":["../../src/stores/ui-store.ts"],"names":[],"mappings":"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"}
|