Per-column styling, keyed by column name. The viewer treats the
values as opaque — their shape is defined by the ACTIVE plugin,
so a config written for one plugin may carry keys another
ignores. Query the live shape with the get_style_schema agent
tool, or the plugin's column_config_schema().
Optionalfilter_Optionalgroup_Name of the visualization plugin, from the set registered on the
page (the list_plugins agent tool, or the plugin picker). This
also decides what the view fields MEAN visually: columns is
positional and each plugin reads the positions differently, and
group_by/split_by draw different things per plugin.
Plugin-wide settings (as opposed to the per-column
[Self::columns_config]). Opaque to the viewer and defined by
the active plugin; see get_style_schema.
Name of the Table this panel renders, as hosted on the panel's
Client. Every placed panel has a table binding (creation
requires one by type — [ViewerConfigInitial]), so the saved
config carries it unconditionally.
Selected theme NAME (e.g. "Pro Dark") — not a CSS value. Valid
names are the Perspective themes loaded on the page, which
resetThemes() re-scans. None selects the first available.
Panel title, shown in its tab. None renders the default title.
The @perspective-dev/viewer version that wrote this config,
stamped on save and used to migrate older tokens. Callers do not
set it.
Optionalwindows
The state of an entire
custom_elements::PerspectiveViewerElementcomponent and itsPlugin: the element-levelsettingsflag plus the per-panel [PanelViewerConfig]. The split exists so the whole-element config format can serialize panel entries without asettingskey (it is element-level state there, carried by the top-levelactivefield instead), while the single-panel format flattens back to the legacy shape.