import type { Filter } from "./Filter.js"; import type { Layout } from "./Layout.js"; import type { PanelViewerConfig } from "./PanelViewerConfig.js"; /** * The whole-element config format (`{version, active?, layout, panels}`) — * the multi-panel counterpart of the single-panel [`ViewerConfig`] — as * emitted by [`PerspectiveViewerElement::save`]. * * - `panels` entries are [`PanelViewerConfig`]s: per-panel state only, no * `settings` key (element-level state). * - `active` names the panel targeted by the *open* settings sidebar; it is * omitted when the sidebar is closed. */ export type WorkspaceConfig = { version: string; active?: string; layout: Layout | null; /** * `BTreeMap` (not `HashMap`) so `save()` serializes panels in a * DETERMINISTIC (sorted) key order — a fresh `HashMap` per call * iterates in a per-instance random order, which made consecutive * `save()` outputs byte-unstable. */ panels: { [key in string]?: PanelViewerConfig; }; /** * The element-level global (master/detail cross-) filters. A transient * overlay on every detail panel's view — persisted here, never in a * per-panel entry. Omitted when empty. */ global_filters?: Array; /** * The MASTER (filter-source) panels' ids, referencing `panels` keys. * Roles are layout state (like the panel arrangement), so they persist; * which master contributed which clause does not — restored * `global_filters` are one unattributed bucket. Omitted when empty. */ masters?: Array; };