---
url: /reference/typescript/wow-view-engine/symbols.md
description: Every name @ahoo-wang/wow-view-engine exports, generated from its TSDoc.
---

# @ahoo-wang/wow-view-engine symbol index

Every name `@ahoo-wang/wow-view-engine` exports — 850 — with its kind and the first sentence of its TSDoc, generated from the built declarations. 43 of them are described by hand in the curated pages, linked in the last column; the rest are read from their source through the signature in the [API report](https://github.com/Ahoo-Wang/Wow/blob/main/typescript/wow-view-engine/test/api/root.api.md). This index is English only.

::: v-pre

| Symbol | Kind | Summary | Covered in |
|---|---|---|---|
| `ALWAYS_VISIBLE` | const | A host that never hides, which is what Node and a test both are. | — |
| `ANALYSIS_AUTO_RUN_MEMBERS` | const | The members that make up the *question*, which runs again on its own a moment after it changes (「改了就跑」, D20): what is counted, by what, kept by what, in what order and how many. | — |
| `ANALYSIS_DATE_DIFF_UNITS` | const | Every unit a time between two moments is measured in (`DATE_DIFF`), in the order a choice among them is offered: the hour first, since 「付款到 发货几小时」 is the question it answers most, then the day, the minute and the second. | — |
| `ANALYSIS_DATE_PARTS` | const | Every calendar part Wow groups by (`DATE_PART`), in the order a choice among them is offered: the weekly and daily cycles first, since 「哪天几点」 is the question they answer, then the month's and the year's. | — |
| `ANALYSIS_DATE_UNITS` | const | Every date unit Wow buckets by, coarsest first — the order a choice among them is offered in. | — |
| `ANALYSIS_PRESENTATION_MEMBERS` | const | How the result is looked at is not part of the question (D20): the layout and the chart are drawn from the rows that ran, whichever they are, so changing them redraws without asking the source again and counts as no pending edit. | — |
| `AbsoluteDateTimeValue` | interface | ISO 8601 instants or dates; `to` is omitted for an open upper bound. | — |
| `ActionConfirm` | interface | The question an action asks before it runs. | [Host Wiring](./host#api-actions) |
| `ActionContext` | interface | What an action's rules are asked with: the time they are asked at — the engine's clock, a harness's own in a test — and, where one is known, the input the command would run with (a choice's option, a filled form). | — |
| `ActionForm` | type | An action's form, by field name: what `run` receives as its input. | — |
| `ActionFormField` | interface | One field of an action's form, drawn by the condition editor's own value controls (`FilterValueEditor`): a list of options, a number, a yes/no or a line of text. | [Host Wiring](./host#api-actions) |
| `ActionInput` | type | What a form (or a choice) gave, by field name. | — |
| `ActionPlace` | type | Where a declared action is offered. | — |
| `ActionRefusal` | interface | One record the command will not be sent to, and why. | — |
| `ActionRow` | type | A record as an action is handed it: its key and its data. | — |
| `ActionTone` | type | How much an action costs: `danger` draws it (and its confirmation) red. | — |
| `AggregationFieldCapability` | interface | How one field may be aggregated; shared by root and element fields. | — |
| `AnalysisCapability` | interface | — | — |
| `AnalysisColumn` | interface | One column of the result table. | — |
| `AnalysisColumnView` | interface | A column of the result table; groups come first, then metrics. | — |
| `AnalysisDateDiffUnit` | type | — | — |
| `AnalysisDatePart` | type | — | — |
| `AnalysisDateUnit` | type | — | — |
| `AnalysisDerivedExpression` | type | — | — |
| `AnalysisElement` | interface | Expansion of an array path; its filter is scoped to the element fields. | — |
| `AnalysisElementCapability` | interface | How an element's fields may be aggregated. | — |
| `AnalysisExpression` | type | Isomorphic to Wow's `AggregationExpression`. | — |
| `AnalysisExpressionOperator` | type | — | — |
| `AnalysisFunction` | type | — | — |
| `AnalysisGroup` | type | Isomorphic to Wow's `AggregationGroup`: fields are validated against the definition and enums are stored as literals. | — |
| `AnalysisGroupType` | type | The Wow aggregation enums as the string literals a config stores. | — |
| `AnalysisHavingExpression` | type | Wow's having/derived trees only reference aliases and numbers. | — |
| `AnalysisLayout` | type | — | — |
| `AnalysisLimitBounds` | interface | The range 「前 N 组」 may take, and the N it stands for when nobody said one. | — |
| `AnalysisLimits` | interface | — | — |
| `AnalysisMetric` | type | Isomorphic to Wow's `AggregationMetric`. | — |
| `AnalysisNamed` | interface | What a dimension or a metric is called on screen (D20 显示名), when the analyst gave it a name: the column header, the legend and the reading say this instead of what the field and the summary would compose. | — |
| `AnalysisProjection` | interface | — | — |
| `AnalysisScope` | interface | What an analysis may name, and where. | — |
| `AnalysisScopeElement` | interface | One expanded level of the chain. | — |
| `AnalysisSort` | interface | — | — |
| `AnalysisSpec` | interface | The analyses a host offers, narrowed from what the model grants. | — |
| `AnalysisTableSpec` | interface | — | — |
| `AnalysisViewConfig` | interface | Table and chart are stored together, like the two record layouts. | — |
| `AnyViewRuntime` | type | What opening an instance returns; narrow it by `runtime.kind`. | — |
| `ArrangeStep` | type | One keyboard command: a step of one grid cell, or a size one cell bigger or smaller. | — |
| `ArrayFilterValue` | type | What one entry of an array field may be. | — |
| `Availability` | type | `true`, or why not — a key (`text(…)`) or words, said where shown. | — |
| `AxisSpec` | interface | — | — |
| `BUILTIN_FIELD_KINDS` | const | The kinds this package ships, in the order `FieldKindId` lists them. | [Definitions and Field Kinds](./definitions#api-FieldKindRegistry) |
| `BUILTIN_FIELD_KIND_IDS` | const | — | — |
| `BoardClick` | type | A click that opens another board (D23 Q17). | — |
| `BoardOrigin` | interface | The board a view was opened from (D26 Q33): what 「返回〈仪表盘〉」 names, and where it goes — the board on the tab and under the filters it was left on. | — |
| `BoardValueSource` | type | Where one of another board's filters takes its value from, when a press opens that board (D23 Q17): - `dimension` — the group pressed, on this panel's dimension over that field (「这一组的〈维度〉」); - `filter` — this board's filter of that name, as the reader has it at the press (「这块板的〈筛选〉」, approved 2026-09-23): its value, which is its default until a reader sets another; one left blank sends nothing. | — |
| `BooleanFilterValue` | type | — | — |
| `BoxplotBox` | interface | One box: a group and its five numbers, lowest first. | — |
| `BoxplotData` | interface | — | — |
| `BoxplotSpec` | interface | A boxplot: how a number is spread within each group — its lowest and highest value, its lower and upper quartile and its median, one box per value of one dimension. | — |
| `BucketChange` | interface | How one bucket's number moved from the bucket right before it: the difference, and that difference as a share of the earlier number — `null` where the earlier number is 0, which no share can be taken of. | — |
| `BucketRange` | interface | The instant a bucket starts, and the instant the next one does. | — |
| `BuiltinFieldKindId` | type | — | — |
| `CARTESIAN_MISSING` | const | The two readings of a missing point, the default first. | — |
| `CHART_COLOR_SLOTS` | const | How many categorical colours the theme holds: `--chart-1` to `--chart-8` in `styles.css`, the same eight hues in both modes, in a fixed order. | — |
| `CHART_FAMILIES` | const | Every family's traits. | — |
| `CHART_FAMILY` | const | Which sub-object each chart type requires. | — |
| `CHART_PICKER_ORDER` | const | Every type, in the order the picker lays them out. | — |
| `CHART_TYPES` | const | Every type, in the order the picker lays them out: the everyday ones first, each new one beside the one it is read against — the gauge after the metric card, whose number it places on a scale; the boxplot, the radar and the parallel axes after the scatter, the other charts of several metrics per group; the sunburst and the tree after the treemap, the other parts of a whole, and the sankey beside them; the calendar after the heatmap, whose cells it lays out as days, and the theme river after the area, whose stack it lets flow; the candlestick after the boxplot, the other chart that draws several numbers of one field as one mark. | — |
| `CLICK_GO_KINDS` | const | — | — |
| `CODE_REVISION` | const | Revision of a system view that ships with the definition. | — |
| `CSV_BOM` | const | The byte order mark Excel needs to read a UTF-8 CSV as UTF-8. | — |
| `CURRENCY_CODE_PATTERN` | const | An ISO 4217 currency code: three letters. | — |
| `CalendarData` | interface | — | — |
| `CalendarDay` | interface | One day of a calendar: its bucket, its date in the zone, its number. | — |
| `CalendarSpec` | interface | A calendar heatmap: a number a day, laid out as the calendar lays the days out — weeks across, weekdays down, a year a block — so a season, a weekday rhythm and a single odd day are seen at once. | — |
| `Candle` | interface | One candle: a period and its four numbers. | — |
| `CandlestickData` | interface | — | — |
| `CandlestickSpec` | interface | A candlestick (K 线): how one number moved within each period — where it opened and closed, and how high and low it went — one candle per bucket of one time dimension. | — |
| `CartesianData` | interface | — | — |
| `CartesianGap` | type | Something the spec asked the chart to draw that the kernel left out, and why: a derived line (`DerivedGap`), or a statistic reference line over a split or over no measured value. | — |
| `CartesianMissing` | type | — | — |
| `CartesianSeries` | interface | — | — |
| `CartesianSpec` | interface | — | — |
| `ChartData` | type | What a renderer receives. | — |
| `ChartFamily` | type | The families a chart type belongs to, each the name of the sub-object of`ChartSpec` its types share: four cartesian types draw one kind of spec, every other type is a family of its own. | — |
| `ChartFamilyTraits` | interface | — | — |
| `ChartFit` | interface | — | — |
| `ChartPickerGroups` | interface | The picker's two groups of tiles (D33 Q54): the types that fit, and the rest — greyed where they cannot draw, pickable where they draw but are not offered as fitting (`aside`). | — |
| `ChartProfile` | interface | A group's profile: its value on each of several metrics, in the order the spec lists them — one shape of a radar, one line of parallel axes. | — |
| `ChartShape` | interface | The shape a chart is fitted to: what there is to draw. | — |
| `ChartSpec` | interface | Charts are stored per family: the sub-object of the current `type` is required and the others are kept, so switching families loses nothing. | — |
| `ChartType` | type | — | — |
| `ChartUnfit` | type | Why a chart type cannot draw the shape on hand, as a catalogue key. | — |
| `ClickChoice` | type | The three things a press can do: the follow-up menu, a filter, a destination. | — |
| `ClickDraft` | interface | Everything 「点击时…」 holds, each choice's own part kept while another is picked. | — |
| `ClickGoKind` | type | Where a destination goes: a saved view, another board, a page. | — |
| `ColumnCurrency` | interface | How a metric column of money in a currency each record holds is read, row by row: the companions telling each row's currency (`CurrencyCompanion`) — its own, or a derived metric's operands' — and whether its number is written in that currency. | — |
| `ColumnEdge` | type | Which edge the table holds a column against. | — |
| `ConfigOfKind` | type | Narrows a config union member by its kind. | — |
| `ConflictChoice` | type | — | — |
| `ConflictingState` | interface | What the server holds, said by which of the two it is. | — |
| `ContentPanelKind` | type | — | — |
| `CreateInput` | interface | What `ViewEngine.create` makes a view from: nothing is saved until `save`. | [Engine and Resources](./engine#api-OpenOptions) |
| `CrossFilterOutcome` | type | What a press that sets a filter did (D22 I). | — |
| `CsvOptions` | interface | How a CSV is written. | — |
| `CurrencyReading` | type | What currency an amount — one record's, or an aggregate over several — is in, for money whose currency each record holds (`RowMoneyNumeric`): | — |
| `CursorPaging` | interface | A cursor result: the one way on, when there is one. | — |
| `DASHBOARD_FILTER_KINDS` | const | The field kinds of each filter type, the first being what a new one is. | — |
| `DASHBOARD_FILTER_TYPES` | const | The six types, in the order a choice among them is offered. | — |
| `DASHBOARD_GRID_COLUMNS` | const | Columns of the dashboard grid. | — |
| `DASHBOARD_PRESENTATION_MEMBERS` | const | A dashboard config has no presentation-only member of its own: every one of `fields` and `panels` reaches the panels' queries or what they draw from them (`PRESENTATION_MEMBERS` in `config.ts`). | — |
| `DASHBOARD_WIDTHS` | const | The widths a board may be laid out at, in the order they are offered. | — |
| `DATE_PART_DOMAINS` | const | The keys a calendar part groups into, first and last: an ISO weekday runs 1 (Monday) to 7 (Sunday), an hour 0 to 23 on the group's wall clock, a day of the month 1 to 31 and a month 1 to 12. | — |
| `DATE_SUMMARY_FUNCTIONS` | const | The summaries a column of moments may carry. | — |
| `DATE_TIME_PRESETS` | const | — | — |
| `DEFAULT_APPROXIMATE_METRICS` | const | What a source estimates when nobody said otherwise: percentiles, which Wow computes approximately on every store it ships with. | — |
| `DEFAULT_MISSING_KEY` | const | The bucket key records with no value of the dimension land in. | — |
| `DEFAULT_PERCENTILE` | const | The percentile a new percentile metric asks for. | — |
| `DEFAULT_RUNTIME_LIMITS` | const | — | — |
| `DEFAULT_SEARCH_MODE` | const | — | — |
| `DEFAULT_STRING_COMPARISON` | const | — | — |
| `DEFAULT_TEMPORAL` | const | What a time field that declares nothing is: epoch milliseconds. | — |
| `DELETION_STATES` | const | The three readings Wow's `DELETION` filter admits, in the order offered. | — |
| `DERIVED_FORMAT_STYLES` | const | The three ways a derived number reads, in the order a picker offers them. | — |
| `DERIVED_KINDS` | const | What a derived series computes: the least-squares line through the measured points (`trend`), the mean of each point and the ones before it (`moving-average`, over `window` points), the running total (`cumulative`, a metric that adds up only), and the running total as a share of the whole (`cumulative-share`, 累计占比). | — |
| `DURATION_COMPARISONS` | const | The comparisons a time since another moment may make, in the order offered. | — |
| `DashboardContentPanel` | type | Content panels are static: no query, no global filter, no child runtime. | — |
| `DashboardDefinition` | interface | Dashboards own no data; the definition is their catalogue entry. | — |
| `DashboardEditing` | interface | Building the board (D22 A–E, batch B1). | — |
| `DashboardField` | interface | A board's filter (D22 F): one chip on the filter bar, wired to a field of each panel it narrows. | — |
| `DashboardFilterEditing` | interface | Setting up the board's filters (D22 G), through the draft like every other edit of the board: each goes into the draft and onto the screen at once, and is saved with the board. | — |
| `DashboardFilterType` | type | The six kinds of board filter (D22 F), each a family of the field kinds it can be wired to: a date filter reaches a `date` or a `datetime`, a text one a `string` or an `enum`, an id one a `reference`, a number and a yes-or-no their own, and a search one a record view's search box — a`search` field, whose `searchFields` say where it looks. | — |
| `DashboardFilters` | interface | What a board's filters hold right now: the reader's, never the config's (D22 F「筛选值写进地址，不写进配置」). | — |
| `DashboardLink` | interface | — | — |
| `DashboardPanel` | type | — | — |
| `DashboardPanelBase` | interface | — | — |
| `DashboardPanelState` | interface | One panel as the grid renders it. | — |
| `DashboardRuntime` | interface | The public face of a dashboard runtime: a view runtime whose snapshot also carries the panels. | — |
| `DashboardRuntimeState` | interface | — | — |
| `DashboardTab` | interface | One tab of a board: panels are grouped under it, and the global filter sits above them all. | — |
| `DashboardTarget` | interface | A dashboard, opened with `filters` as its reader's values — the host hands them to `DashboardWorkbench`'s `initialFilters` (or`OpenOptions.filters`), never into the board's config. | — |
| `DashboardTimeGrouping` | interface | The board's time grouping (D22 F, 整板 按日／周／月): one choice among`units` that sets the date unit of every panel's time dimension, where the panel's definition allows that unit. | — |
| `DashboardViewConfig` | interface | — | — |
| `DashboardViewPanel` | type | Data panel: shows a record or analysis view and is filtered by the board. | — |
| `DashboardViewPanelBase` | interface | What a data panel holds whichever view it shows; see `DashboardViewPanel`. | — |
| `DashboardWidth` | type | How wide a board is laid out (D31): its 24 columns spread across whatever holds it (`full`), or held to a fixed width and centred (`fixed`), as Metabase's 「固定宽度／全宽」 is the dashboard's own setting. | — |
| `DataPanelSource` | interface | What of a data panel says which view it shows: the saved one it points at, or the one it owns — all a panel being added has yet, before it has an id or a place, and all that finding its fields reads. | — |
| `DataViewConfig` | type | The two kinds that ask a question of their own (`DataViewConfigBase`) and that a `ViewRuntime` executes; a dashboard owns child runtimes. | — |
| `DataViewConfigBase` | interface | What a view that asks one question of its own — a record view, an analysis — stores besides: its conditions, and the editor mode they are shown in. | — |
| `DataViewDefinition` | interface | — | — |
| `DateInstant` | interface | The instant a value of this kind names, and what kind of value said it. | — |
| `DatePartOffer` | interface | What `datePartsOf` reads: a capability, or the editor's option of one. | — |
| `DateTemporal` | interface | — | — |
| `DateTimeFilterValue` | type | — | — |
| `DateTimePreset` | type | Named calendar windows, in three directions. | — |
| `DecimalNumeric` | interface | — | — |
| `DefineViewOptions` | interface | What `defineView` needs beyond the snapshot and the host's choices: the field kinds the host registers (`ViewEngineOptions.kinds`) — the snapshot's comparisons are written on a field of a host's own kind only when its kind is known here, since it is built before any engine is. | [Definitions and Field Kinds](./definitions#api-DefineViewOptions) |
| `DefineViewSpec` | interface | One data definition's choices over its descriptor. | [Definitions and Field Kinds](./definitions#api-DefineViewSpec) |
| `DefinitionDescribed` | interface | What `defineView` found; see `DataViewDefinition.described`. | — |
| `DefinitionFor` | type | The definition a config belongs to. | — |
| `DefinitionLookup` | type | How a board's admission reads a definition, by id. | — |
| `DefinitionNarrowing` | interface | What one narrowing found; see `DataViewDefinition.narrowing`. | — |
| `DerivedFormat` | type | How a derived metric's number reads (D38), as a base metric's reads off its field: a ratio as a percent — the value is the ratio, 0.259 reads 25.9%, never multiplied by a hundred first — money in a currency, or a number with so many decimals. | — |
| `DerivedGap` | type | Why a derived series cannot be computed over this result (D33 Q53). | — |
| `DerivedKind` | type | — | — |
| `DerivedLine` | interface | One computed line, as the drawing takes it: a value per point or none. | — |
| `DerivedSeries` | interface | — | — |
| `DestinationBoard` | type | Another board as a click reads it: the instance, its config a board's. | — |
| `DetailSection` | interface | One titled part of a record's detail: the fields a group gathers. | — |
| `DrillContext` | interface | — | — |
| `DrilledGroup` | interface | One dimension of a pressed row, and the conditions that select it. | — |
| `Dropped` | interface | What a step of the chain took out of the question. | — |
| `DurationComparison` | type | — | — |
| `DurationFilterValue` | interface | A time since another moment (N3): the leaf's field is the later moment,`from` the earlier one, and the condition compares the time between them — 「发货时间 距 付款时间 > 48 小时」 — in `unit`, a day being 24 hours. | — |
| `EDITOR_INPUTS` | const | Every input shape the engine can draw, as values and not as a type alone. | [Definitions and Field Kinds](./definitions#api-EditorDescriptor) |
| `EPOCH_TIME_UNITS` | const | — | — |
| `EXPRESSION_OPERATORS` | const | — | — |
| `EditCommand` | type | The edits building a board is made of, by the command that makes each —`DashboardEditing` and `DashboardFilterEditing` less the undoing itself. | — |
| `EditHistoryState` | interface | What the history offers now: the step an undo would take back, and a redo. | — |
| `EditStep` | interface | One step of the board's history: the command, and what it was about — a panel's id, a tab's id or a filter's name; `null` for the time grouping, the fixed scope and the board's width. | — |
| `EditorDescriptor` | interface | Shape of the input an editor should render; never a component name. | [Definitions and Field Kinds](./definitions#api-EditorDescriptor) |
| `EditorInput` | type | — | — |
| `ElementTitleView` | interface | The element field an array of objects is read by, one element at a time (`FieldDefinition.elementTitle`), resolved to what reading it takes: where it sits within an element, and how it reads. | — |
| `EngineResources` | class | The half of the engine that is what the host registered (host-integration.md 4): each definition's source, by the key its definitions name it by, and the words its keys are checked against (`EngineText`, D2). | — |
| `EnumFilterValue` | type | — | — |
| `EpochTemporal` | interface | — | — |
| `EpochTimeUnit` | type | The units of `TimeUnit` an epoch time is kept in, as Wow spells them. | — |
| `ExportCancelledError` | class | What a cancelled export rejects with. | — |
| `ExportColumn` | interface | The least an export needs of a column: where to read it, what to call it. | — |
| `ExportFormat` | type | How one value is written. | — |
| `ExportRowsOptions` | interface | — | — |
| `ExportedRows` | interface | — | — |
| `FIELDLESS_FIELD_KIND_IDS` | const | Kinds whose `name` is a handle for the editor and the label rather than a path into a document. | — |
| `FIELD_CELL_IDS` | const | — | — |
| `FIELD_METRIC_TYPES` | const | The metric types that measure one field, in the order a field offers them (D20 汇总方式): a function of its values, how many distinct values it holds, a percentile of them, its value on the earliest or the latest record (期初值／期末值), or any one of them. | — |
| `FIELD_TONES` | const | — | — |
| `FILTER_GROUP_OPERATORS` | const | The three, in the order a group's select offers them. | — |
| `FILTER_TYPE_OPERATOR` | const | The operator a filter of each of the six types is asked with: a date filter a window (`BETWEEN`, which reads a relative window, a range, a day or a named period alike), a yes-or-no `EQ`, text, ids and numbers `IN` — one value or several, so the same condition reaches a `string`, an `enum` and a `reference` field without being translated on the way — and a search`SEARCH`, the text a record view's search box looks for. | — |
| `FIRST_PAGE` | const | The first page of either paging mode; Wow numbers pages from 1. | — |
| `FieldAnalysisSpec` | interface | How one field analyses, as a host narrows it (`defineView`): each member given is a subset of what the path offers, each left out is whatever the source grants. | — |
| `FieldCellId` | type | How a cell reads. | — |
| `FieldDefinition` | interface | One queryable field of a definition. | — |
| `FieldGroup` | interface | One group of a picker: its label, or none for the fields outside any. | — |
| `FieldGroupDefinition` | interface | One group of a field picker: a stable id, a label, and its fields in order. | — |
| `FieldKind` | interface | Everything the engine needs to know about one field type. | [Definitions and Field Kinds](./definitions#api-FieldKind) |
| `FieldKindBlankContext` | interface | — | — |
| `FieldKindCompileContext` | interface | — | — |
| `FieldKindDescribeContext` | interface | — | — |
| `FieldKindDescription` | interface | What a `FieldKind` says about one applied condition. | — |
| `FieldKindId` | type | Identifies a `FieldKind`: the package registers the built-in ones and an application may register its own, so this stays an open string union. | — |
| `FieldKindRegistry` | type | Kinds available to the kernels, keyed by id. | [Definitions and Field Kinds](./definitions#api-FieldKindRegistry) |
| `FieldKindValidateContext` | interface | — | — |
| `FieldMetricType` | type | — | — |
| `FieldNumeric` | type | What a number field's value is, beyond a number — Wow's numeric`QuerySemanticType` (#3552), named as the engine names things: how many digits it is kept to, and for an amount of money, whose money it is. | — |
| `FieldOption` | interface | A selectable value: static for `enum`, resolved for `reference`. | — |
| `FieldSpec` | interface | One field: what the host says of it, over what its path is. | [Definitions and Field Kinds](./definitions#api-FieldSpec) |
| `FieldTemporal` | type | How a time field keeps its time, which is how a condition on it has to write one — Wow's own `QuerySemanticType` for time, named as Wow names it. | — |
| `FieldTone` | type | What a badge says about the value it wraps, beyond naming it. | — |
| `FilterCompileContext` | interface | When a filter is evaluated, and in which zone. | — |
| `FilterGroup` | interface | — | — |
| `FilterGroupOperator` | type | How a group combines its children, as the same three Wow spells `AND`,`OR` and `NOR`. | — |
| `FilterLeaf` | interface | — | — |
| `FilterMode` | type | `simple` mode only admits a single AND group whose children are all leaves. | — |
| `FilterNode` | type | — | — |
| `FilterOperatorName` | type | Operator name as stored in a configuration: the same values as Wow's`FilterOperator`, as string literals, so a config stays plain JSON. | — |
| `FilterPath` | type | Where a node sits: child indexes from the root outwards, so `[1, 0]` is the first child of the second child. | — |
| `FilterReach` | type | What one filter does to one data panel: wired, through which field, and whether auto-connect made the wire; or not wired, and why — its view has no field of the filter's type (「没有可接的字段」), or it has one nobody chose (`unwired`). | — |
| `FilterSummaryItem` | interface | One applied condition, for the summary bar above a result. | — |
| `FilterSummaryRelation` | type | A relation a kind reads its operator as, where the operator's own word would mislead. | — |
| `FilterSummaryValue` | type | What a condition compares against, as its kind read it. | — |
| `FilterTree` | type | The scope of a view, shared by all three kinds. | — |
| `FilterValue` | type | The semantic value of a leaf. | — |
| `FixedMoneyNumeric` | interface | — | — |
| `FunnelData` | interface | — | — |
| `FunnelSpec` | interface | A funnel: its stages in the business's order. | — |
| `FunnelStage` | interface | — | — |
| `FunnelStages` | type | — | — |
| `GaugeData` | interface | — | — |
| `GaugeSpec` | interface | A gauge: one number placed on a scale, and how far it is from a target — 「离目标多远」 on a wall screen. | — |
| `GroupCondition` | interface | One condition of a group: what it says, where it sits, and how. | — |
| `GroupFacts` | interface | What building a dimension needs to know of its field, and nothing more — so a declared field read with its capability (a fresh config, a split) and the editor's `AnalysisFieldOption` (a field picked on the tray) are the same input to the one builder. | — |
| `GroupNaming` | interface | What a name 「{subject} · {group}」 claims (D20 追问): the conditions that select the group, and what the view is without them. | — |
| `HAVING_OPERATORS` | const | — | — |
| `HandOver` | interface | What a view takes with it when it leaves a board (D26 Q30), in its own field names — the same two parts through every way off it: 「在工作台中打开」, a click's view destination, the follow-up menu and a board's own analysis. | — |
| `HavingOperator` | type | The comparisons one row may make: the model's, never listed again. | — |
| `HavingRow` | interface | One row of the editor: keep the groups whose metric compares so. | — |
| `HeatmapData` | interface | — | — |
| `HeatmapSpec` | interface | — | — |
| `HeldFilters` | interface | What a host holds of a board's filters (`DashboardRuntime.holdFilters`): each filter named, at the value given — `null` for its default — and, with `unit` present, the time grouping at that unit (`null` for its default). | — |
| `HierarchyData` | interface | — | — |
| `HierarchyNode` | interface | One part of a hierarchy: a value of its level's dimension, its number — a leaf's own row's, a parent's the sum of its parts — and the group values from the outermost level down to it. | — |
| `HierarchySpec` | interface | A sunburst or a tree: a whole broken down level by level, one dimension a level, outermost first — 品类 → 子类. | — |
| `InstancePermissions` | interface | — | [Persistence Port](./store#api-ViewPermissions) |
| `InstantRange` | interface | Resolving a relative or preset value happens at compile time against the injected moment: the kernel never reads the system clock, and the same config run tomorrow produces a different window on purpose. | — |
| `Issue` | interface | A validation finding. | [Issue Codes](./issues#api-Issue) |
| `IssuePath` | type | — | [Issue Codes](./issues#api-Issue) |
| `IssueSeverity` | type | `error` blocks apply and save; `warning` is reported without blocking — something is wrong, or the answer could be misread; `note` is something true about the answer a reader should know, and nothing is wrong: the groups a view's own limit left out, when every row shown is whole. | [Issue Codes](./issues#api-Issue) |
| `JsonValue` | type | Any value a saved configuration may hold: configs are plain JSON. | — |
| `LiteralEnums` | type | Replaces enum members with their string values and leaves everything else untouched, so a Wow protocol type can be reused in a configuration without dragging its enums into stored data. | — |
| `LocalStorageSnapshotOptions` | interface | Where a `localStorageSnapshot` reads and writes. | — |
| `MAX_CHART_LEVELS` | const | The most levels a hierarchy or a flow draws: past four, rings and columns are slivers. | — |
| `MAX_DASHBOARD_FILTERS` | const | Filters one board may hold. | — |
| `MAX_DASHBOARD_TABS` | const | Tabs one dashboard may hold. | — |
| `MAX_DERIVED_DECIMALS` | const | The most digits after the point a derived number is written with. | — |
| `MAX_HEADING_LENGTH` | const | Characters one heading panel may hold: a section title, one line. | — |
| `MAX_MARKDOWN_LENGTH` | const | Characters one markdown panel may hold; a config arrives from a store. | — |
| `MAX_MOVING_WINDOW` | const | The widest window a moving average takes: a year of days. | — |
| `MAX_NUMERIC_SCALE` | const | The most fraction digits Intl writes, which `scale` is held under. | — |
| `MAX_PANEL_LINKS` | const | Links one links panel may hold. | — |
| `MAX_RELATIVE_DATE_AMOUNT` | const | How far a relative window may reach, in any unit. | — |
| `MAX_TIMER_DELAY_MS` | const | Longest timer delay a 32-bit millisecond counter holds. | — |
| `MAX_VIEW_CONFIG_BYTES` | const | The largest config a saved view may store, in UTF-8 bytes of its JSON: the server's `ViewConfigs.MAX_CONFIG_BYTES`, mirrored as the title's limit is — below the 256 KB request body a WebFlux server buffers by default, so the server's refusal is the one a larger config meets. | — |
| `MAX_VIEW_TITLE_LENGTH` | const | The longest title a saved view may have, counted in UTF-16 code units after trimming. | — |
| `METADATA_FIELD_KINDS` | const | — | — |
| `METADATA_FIELD_KIND_IDS` | const | — | — |
| `METRIC_HEADLINES` | const | The two readings of a trend card's headline, the default first. | — |
| `MalformedVisit` | interface | A place in the tree holding something that is not a node: `null`, a number, an object with neither `children` nor `field`. | — |
| `MapData` | interface | — | — |
| `MapRegion` | interface | One region of a map: a value of the region dimension and its number. | — |
| `MapSpec` | interface | A map: a number per region, each region shaded by it — 按地区看. | — |
| `MappingSources` | interface | What a mapping can draw on: the panel's dimensions and this board's filters. | — |
| `MemorySnapshot` | interface | Where a `MemoryViewStore` keeps its state between page loads: the whole state, read and written as one document, synchronously. | [Persistence Port](./store#api-localStorageSnapshot) |
| `MemoryState` | interface | — | — |
| `MemoryViewStore` | class | The one implementation this package ships: a synchronous map behind the port, for tests, examples and query-only use. | [Persistence Port](./store#api-MemoryViewStore) |
| `MemoryViewStoreOptions` | interface | — | [Persistence Port](./store#api-MemoryViewStore) |
| `MetadataFieldKindId` | type | Kinds backed by Wow's metadata filters rather than by a document field. | — |
| `MetricCardData` | interface | — | — |
| `MetricCardSpec` | interface | — | — |
| `MetricCondition` | interface | What a metric's own condition (D20 屏 H, 「只算满足条件的记录」) does to the way the metric reads. | — |
| `MetricFacts` | interface | What a field offers to be measured by: its capability, or the editor's option of it. | — |
| `MetricFunction` | type | Which summary a metric is, in one token. | — |
| `MetricHeadline` | type | — | — |
| `MetricMove` | interface | A metric moved in the list, as far as the rule lets it go. | — |
| `MetricMoveStop` | interface | Why a metric could not go as far as it was asked: the metric it reads, which it must stay after (`after`), or the derived metric that reads it, which it must stay before (`before`). | — |
| `MetricPeriod` | interface | The period a trend card's headline is, as its bucket key — a key the card prints the way its column does. | — |
| `MetricTrend` | interface | The time dimension a metric card draws as its sparkline, and how it reads. | — |
| `NUMERIC_TYPES` | const | — | — |
| `NestedTree` | interface | A tree held inside a leaf's value, and the fields it is written against. | — |
| `NewContentPanel` | type | A content panel as it is added: what it holds, and optionally a title. | — |
| `NewFilter` | interface | A filter as it is added: its type and its name on the bar. | — |
| `NewPanel` | type | — | — |
| `NewPanelPlacement` | interface | Where a new panel goes; every member has a default. | — |
| `NewViewPanel` | type | A data panel as it is added: a saved view, or one the board owns. | — |
| `NumberFilterValue` | type | — | — |
| `NumberFormat` | type | Formatting shared by cells, summaries and chart axes. | — |
| `NumberRange` | type | Inclusive bounds of a `BETWEEN`. | — |
| `ONE_DAY_PRESETS` | const | The named periods a one-day filter (`DashboardField.oneDay`) offers: the days that have come, by name. | — |
| `OPERATOR_SIGN` | const | The sign an operator prints as, in every language. | — |
| `OpenCapabilities` | interface | What a `defineView` definition leaves to its source; see `DefinitionDescribed.open`. | — |
| `OpenOptions` | interface | How `ViewEngine.open` opens a view, beyond which one. | [Engine and Resources](./engine#api-OpenOptions) |
| `OptionSource` | interface | Remote candidates of a `reference` field: a paged search, and a lookup by id for the values a saved config already holds. | — |
| `OptionSpec` | type | One value of a category: its words, or its words and tone; `false` hides it. | — |
| `OptionsTab` | type | The three pages a chart's options are laid out on. | — |
| `OrderStep` | type | One step along the one-column reading: before the panel read before it, or after the one read after it. | — |
| `OwnedView` | interface | An analysis view that lives only in this dashboard (D22 C): saved, deleted and shared with the board, never listed among the definition's views. | — |
| `PANEL_PRESENTATION_MEMBERS` | const | Every member a presentation override may set. | — |
| `PEAKS_ONLY_FROM` | const | From this many categories a bar chart left to its default writes only its peak and trough (`peaksOnlyLabels`): about the count where a number over every bar has to be turned on its side to fit, and the row of upright numbers is noise rather than a reading (2026-09-26 review P1-6). | — |
| `PRESENCE_OPERATORS` | const | Operators that ask about presence rather than about a value. | — |
| `PagedPaging` | interface | Where a paged result stands, as the pager reads it: every number the bar shows and every step it offers, worked out once from what **ran**. | — |
| `PagingMode` | type | Which paging protocol the source offers; declared by the definition. | — |
| `PanelBinding` | interface | Wires a board filter to a field of the panel's view: the filter narrows the panel through that field. | — |
| `PanelClick` | type | What a press on one group of an analysis panel does, set by the board's author (D22 I, 「点击时…」). | — |
| `PanelDefinition` | interface | The definition a panel's view is of, and what its bindings may name. | — |
| `PanelFields` | type | The fields of the view a data panel shows that a board filter can be wired to (`boardFieldsOf` in `boardFields.ts`), once it is known; `null` for a panel whose view has not loaded, or cannot be — nothing is said about it. | — |
| `PanelGrouping` | type | What the board's time grouping does to one panel: its time dimension took the unit (`taken`), or the panel has one that cannot — its definition does not group that field by that unit — and keeps its own (`kept`); `null` for a panel with no time dimension, or a board without a time grouping. | — |
| `PanelLayout` | interface | Grid geometry; coordinates are non-negative and sizes positive integers. | — |
| `PanelPresentation` | interface | How a panel looks at its view, over what the view itself says (D22 D): the layout, the chart and the table's totals row — the members of a view that draw the result rather than ask for it. | — |
| `PanelReference` | interface | What a panel refers to, once the engine has loaded it. | — |
| `PanelReferences` | type | References by instance id. | — |
| `ParallelData` | interface | — | — |
| `ParallelSpec` | interface | Parallel coordinates: several metrics per group as one line across as many upright axes, each on its own scale — where a group stands on each, and which move together. | — |
| `Picked` | type | What the panel shows as chosen: a chart type, or the table. | — |
| `PieData` | interface | — | — |
| `PieSlice` | interface | — | — |
| `PieSpec` | interface | — | — |
| `PlacedLine` | interface | A reference line where the kernel placed it: a constant as written, a statistic at the number it came to. | — |
| `PlacedPanel` | interface | A panel's geometry under its id: what `placePanel` reads and returns. | — |
| `PresetDateTimeValue` | interface | A named calendar window, resolved against the evaluation moment. | — |
| `PressDestination` | type | Where a press on a custom destination goes, or why it goes nowhere. | — |
| `PressableGroup` | interface | One dimension of a panel's view, as a press reads it: a field bucketed so. | — |
| `ProjectedAnalysis` | interface | — | — |
| `ProjectedBase` | interface | What both kinds carry besides their view: what is wrong with *these numbers*, as opposed to what is wrong with the config. | — |
| `ProjectedRecord` | interface | — | — |
| `ProjectedView` | type | What one execution produced, already shaped by its kernel. | — |
| `QueryStatus` | type | — | — |
| `RECORD_PRESENTATION_MEMBERS` | const | The record members that only draw the result, on top of the base's (`PRESENTATION_MEMBERS` in `config.ts` joins the two). | — |
| `REFERENCE_STATISTICS` | const | Where a statistic reference line stands: the mean, or the middle value. | — |
| `RELATIVE_DATE_UNITS` | const | — | — |
| `RadarData` | interface | — | — |
| `RadarSpec` | interface | A radar: several metrics per group as one closed shape, an axis per metric each on its own scale — the outline of each group against the others. | — |
| `RangeEdge` | type | Which side of a range a bound stands on. | — |
| `RecordAction` | interface | One declared command on a record. | [Host Wiring](./host#api-actions) |
| `RecordActions` | type | A binding's declared actions, as `actions()` hands them back. | — |
| `RecordCapability` | interface | — | [Definitions and Field Kinds](./definitions#api-RecordCapability) |
| `RecordCardField` | interface | One field of a card. | — |
| `RecordCardSpec` | interface | — | — |
| `RecordCardView` | interface | The card layout of the result, resolved against the definition. | — |
| `RecordColumn` | interface | One column of the table layout. | — |
| `RecordColumnView` | interface | A column as the table should render it, with its semantics resolved. | — |
| `RecordData` | type | One row as returned by the business query source. | — |
| `RecordKey` | type | The value of a row's `rowKey` field. | — |
| `RecordLayout` | type | — | — |
| `RecordPageTarget` | type | Where to read from. | — |
| `RecordPaging` | type | — | — |
| `RecordProjection` | interface | — | — |
| `RecordRow` | interface | — | — |
| `RecordSort` | interface | — | — |
| `RecordSummary` | interface | — | — |
| `RecordTableSpec` | interface | — | — |
| `RecordViewConfig` | interface | Both layouts are stored together, so switching between table and card keeps the other one's settings; `layout` only records the current choice. | — |
| `RecordViewRuntime` | interface | Paging and selection belong to Record alone. | — |
| `ReferenceBand` | interface | A stretch of one value axis, `from` below `to`, shaded behind the marks. | — |
| `ReferenceFilterValue` | interface | — | — |
| `ReferenceItem` | interface | — | — |
| `ReferenceLine` | interface | A horizontal rule across the plot: at a constant `value`, or at a`statistic` of one drawn metric's measured values — its average or its median over the points drawn, a filled-in 0 left out (D33 batch B). | — |
| `ReferenceStatistic` | type | — | — |
| `RefreshConfig` | interface | Auto-refresh interval in seconds, or `null` when off. | — |
| `RefusalGroup` | interface | The refused, by reason, the commonest first; ties keep their order. | — |
| `RelativeDateDirection` | type | — | — |
| `RelativeDateTimeValue` | interface | A window measured from the evaluation moment: "the last 7 days", or "the next 7 days". | — |
| `RelativeDateUnit` | type | — | — |
| `Rescoped` | interface | The config re-scoped to a chain, and what the step took away. | — |
| `ResourceHost` | interface | What the engine's resources are read from; see `ViewEngineOptions`. | — |
| `RiverStream` | interface | One stream of a theme river: a split value, or the folded rest. | — |
| `RowMoneyNumeric` | interface | — | — |
| `RuntimeEnvironment` | interface | The only interface between a runtime and its host. | [Engine and Resources](./engine#api-RuntimeEnvironment) |
| `RuntimeFor` | type | Keeps the narrow type through `create`, which knows its config statically — and, for a config whose kind only the value knows (a union), is what`open` hands back (`AnyViewRuntime`), so no caller has to say it again. | — |
| `RuntimeLimits` | interface | Admission and scheduling budgets. | — |
| `SEARCH_MODES` | const | — | — |
| `STACKED_COLUMNS` | const | How many columns the narrow reading lays panels in: a pair of cards shares a row. | — |
| `STRING_COMPARISONS` | const | — | — |
| `SUMMARY_FUNCTIONS` | const | — | — |
| `SYSTEM_INSTANCE_ID_PREFIX` | const | Instance ids of code-declared system views start with this segment. | — |
| `SYSTEM_INSTANCE_ID_SEPARATOR` | const | Separator of the composed `system:<definition>:<view>` instance id. | — |
| `SankeyData` | interface | — | — |
| `SankeyLink` | interface | One band of a sankey, between two nodes of neighbouring levels. | — |
| `SankeyNode` | interface | One node of a sankey: a value of one level's dimension. | — |
| `SankeySpec` | interface | A sankey: how an amount flows from one dimension's values to the next's — 渠道 → 支付方式 — each band as wide as the metric over the rows of that pair. | — |
| `SavedViewTarget` | interface | A saved record or analysis view, opened on its own conditions with`filter` added to them — so it opens 「已修改」 and 「还原」 takes them back off — under `scopeFilter` as its scope. | — |
| `ScatterData` | interface | — | — |
| `ScatterSpec` | interface | — | — |
| `SearchModeName` | type | Wow's `SearchMode`, as the literal a definition writes. | — |
| `SeriesExtremes` | type | Each series' highest and lowest measured value, as point indexes. | — |
| `SeriesMark` | type | The mark a cartesian series is drawn as. | — |
| `ShapeContext` | interface | What shaping reads besides the config and the rows. | — |
| `ShapeFacts` | interface | The facts of a result's shape a family's fit reads. | — |
| `SortDirection` | type | Sort direction as stored in a config: Wow's `SortDirection` values. | — |
| `StringComparisonName` | type | Wow's `StringComparison`, as the literal a definition writes. | — |
| `StringFilterValue` | type | — | — |
| `SummaryCell` | interface | — | — |
| `SummaryChoice` | type | How a metric summarises its field, as one choice: a function for a numeric metric, the metric's own type for the other types that measure a field (`FIELD_METRIC_TYPES`). | — |
| `SummaryFunction` | type | Row-level aggregations a record view may show under a column. | — |
| `SummaryRow` | interface | — | — |
| `SummarySource` | type | Where the numbers come from; a page total never needs a round trip. | — |
| `SystemView` | interface | A baseline view shipped with the definition. | [Definitions and Field Kinds](./definitions#api-SystemView) |
| `TEMPORAL_FIELD_KIND_IDS` | const | The kinds whose conditions write a time, and so may declare `temporal`. | — |
| `TEMPORAL_TYPES` | const | — | — |
| `TIME_PRECISIONS` | const | — | — |
| `Text` | type | A key standing where a label goes; a string, so it goes anywhere one does. | [Definitions and Field Kinds](./definitions#api-text) |
| `TextResolver` | type | How a host says a key in the language in force; `undefined` for none. | — |
| `TextWords` | type | The words keys are said in: a resolver, or a catalogue by key. | — |
| `ThemeRiverData` | interface | — | — |
| `ThemeRiverSpec` | interface | A theme river: a stacked stream over time, one stream per value of a second dimension, each as wide as its number — how a whole's make-up flows. | — |
| `TimePrecision` | type | How finely a table cell writes a time of day (`FieldDefinition.timePrecision`). | — |
| `TreeVisit` | interface | — | — |
| `TreemapData` | interface | — | — |
| `TreemapSpec` | interface | A treemap: a whole cut into tiles whose areas are the groups' shares of it — the reading for a composition of more categories than the palette has colours (D33 Q56), since every tile carries its own name. | — |
| `TreemapTile` | interface | One tile: a group value and its number. | — |
| `UnsavedViewTarget` | interface | A view nobody saved: a follow-up on a group — its records, the same question split by another dimension or of the group alone (D22 H) — or an analysis the board owns. | — |
| `VALUE_CANDIDATE_LIMIT` | const | How many of a field's values a condition is offered, most frequent first: enough that a field with a few dozen values (a processor, an error code) lists every one, few enough that the list is read rather than scrolled. | — |
| `VALUE_CANDIDATE_OPERATORS` | const | The operators whose value is one of the field's own values: equal to it, not equal to it, among them, not among them. | — |
| `VIEW_AUDIENCES` | const | The two, in the order every list of views shows them in: personal above shared. | — |
| `VIEW_KINDS` | const | — | — |
| `VIEW_SCOPES` | const | — | — |
| `VIEW_STORE_ERROR_CODES` | const | — | [Persistence Port](./store#api-ViewStoreError) |
| `ValidateAnalysisOptions` | interface | — | — |
| `ValidateDashboardOptions` | interface | — | — |
| `ValidateDefinitionOptions` | interface | — | — |
| `ValidateFilterOptions` | interface | — | — |
| `ValidateRecordOptions` | interface | — | — |
| `ValueCandidate` | interface | One value the data holds, and how many records hold it. | — |
| `ValueCandidateSource` | interface | The values a condition on one field may be picked from, counted from the data (`valueCandidatesConfig`). | — |
| `ValueCandidates` | interface | What one candidate query answered. | — |
| `ValueFormat` | type | — | — |
| `ValueMetric` | type | A metric whose value is one record's value (`VALUE_METRIC_TYPES`). | — |
| `ViewAudience` | type | Who a view is for. | — |
| `ViewChange` | interface | What a confirmed write changed about one definition's list of views. | — |
| `ViewChangeKind` | type | The write that changed a list — **not** the kind of the view it changed. | — |
| `ViewChangeListener` | type | — | — |
| `ViewCommandError` | class | A command the engine refused before dispatching it: a missing definition, an empty title, a permission the user does not hold, a config that still has an error. | — |
| `ViewConfig` | type | What a user saves: the way of observing, never a data snapshot. | — |
| `ViewConfigBase` | interface | What every view kind stores. | — |
| `ViewDefinition` | type | What a dataset offers. | — |
| `ViewEngine` | class | The registry and the command entry point: definitions in, runtimes and writes out. | [Engine and Resources](./engine#api-ViewEngine) |
| `ViewEngineOptions` | interface | — | [Engine and Resources](./engine#api-ViewEngineOptions) |
| `ViewErrorContext` | interface | Where a failure happened. | — |
| `ViewErrorEvent` | interface | One failure, as `RuntimeEnvironment.onError` is told of it. | — |
| `ViewErrorKind` | type | What failed, by the part of the engine it failed in (D40). | — |
| `ViewHandOver` | type | The two a workbench opens (`DataWorkbench`'s `handOver`). | — |
| `ViewInstance` | interface | A saved config plus its identity. | — |
| `ViewInstanceSummary` | interface | What a list returns: enough to render the sidebar, without the config. | — |
| `ViewKind` | type | — | — |
| `ViewListing` | interface | What a definition's list is right now: every view that could be read, and the reason the rest could not. | [Engine and Resources](./engine#api-ViewListing) |
| `ViewNavigation` | type | Where a way off the board goes, for the host's route. | — |
| `ViewPermissions` | interface | What the current user may do with one definition's views. | [Persistence Port](./store#api-ViewPermissions) |
| `ViewPreferences` | interface | One user's ordering and default view for one definition. | — |
| `ViewQueryState` | interface | — | — |
| `ViewResource` | interface | One thing a host registers (host-integration.md 4): a definition, and where its data comes from. | [Engine and Resources](./engine#api-ViewResource) |
| `ViewResult` | interface | — | — |
| `ViewRuntime` | interface | One open view. | — |
| `ViewRuntimeState` | interface | — | — |
| `ViewScope` | type | Who configured a view, who sees it and who may change it. | — |
| `ViewSource` | interface | Where a definition's data comes from. | [Engine and Resources](./engine#api-ViewSource) |
| `ViewStore` | interface | The only port a backend must satisfy. | [Persistence Port](./store#api-ViewStore) |
| `ViewStoreError` | class | The single failure type of the persistence port. | [Persistence Port](./store#api-ViewStoreError) |
| `ViewStoreErrorCode` | type | — | [Persistence Port](./store#api-ViewStoreError) |
| `ViewWriteError` | class | How every write command rejects. | — |
| `VisibilitySource` | interface | — | — |
| `WaterfallData` | interface | — | — |
| `WaterfallSpec` | interface | A waterfall: how a total is built up step by step. | — |
| `WaterfallStep` | interface | One step of a waterfall: its group, its change, and where it floats. | — |
| `WriteAction` | type | — | — |
| `WriteContext` | interface | One logical write. | [Persistence Port](./store#api-ViewStore) |
| `WriteHandle` | interface | Addresses a write that no open runtime owns, such as renaming a view from the list. | — |
| `WritePayload` | type | The body of a write, kept as it was sent. | — |
| `WriteState` | type | An outcome that is not success. | — |
| `WriteTarget` | type | What a write command is addressed to: an open view, or a handle. | — |
| `actions` | function | A binding's actions, checked: every one has an id no other has, a label and a `run`. | [Host Wiring](./host#api-actions) |
| `addFilter` | function | The board with one more filter, last on the bar, and its name — the first`filter-n` not taken — or `null` when the board holds as many as it may. | — |
| `addPanel` | function | The board with one more panel and its id, or `null` when it holds as many as it may. | — |
| `addTab` | function | A board with one more tab, last, and that tab's id — or `null` when the title is blank or the board holds as many tabs as it may. | — |
| `admitFilters` | function | The filters a board holds as asked — a host's address, a reader's pick — admitted: a value of a filter the board lacks, or one its filter refuses, is left out and said in `refused`; a required filter left blank holds its default, since it never runs empty; a unit the time grouping does not offer is its default. | — |
| `aggregationFunctionsOf` | function | The aggregate functions a field really offers an analysis: what its capability declares, less what its own values cannot answer — the analysis side of `summaryFunctionsOf`, read by the analysis scope, so admission, the tray's summary select and a fresh config's first metric all stop at the same place. | — |
| `aliasOf` | function | Alias derived from a field path, kept to the single segment Wow allows. | — |
| `analysisProbeLimit` | function | The row count the grouped query asks for: one more than the configured limit (D20 Ⅷ). | — |
| `analysisScope` | function | — | — |
| `approximateMetrics` | function | The metric types a capability says its source estimates. | — |
| `arrangePanel` | function | Where one keyboard command puts the panel, as the layout to hand `place`, or `null` when it would change nothing the reader could see. | — |
| `arrayFieldKind` | const | A field holding several values at once: tags, categories, labels. | — |
| `asksForWhole` | function | Whether a config asks for its whole — the ungrouped answer — beside its groups: when its table draws a totals row, or when its chart is a metric card over a trend read as the whole (`MetricTrend.headline: 'whole'`). | — |
| `audienceOf` | function | The audience a scope puts a view in: `system` answers `shared`. | — |
| `autoBindings` | function | The wires auto-connect gives a panel about to be added (D22 G: 以后新加的 面板同样自动接): for each filter it has no wire for, a field of its view with the name the filter is already wired through elsewhere — the most wired name first — or the filter's own name, and of the filter's type; for a search filter, the view's search box (`autoField`). | — |
| `autoRunMembers` | function | Which members of one kind's config run again on their own a moment after they change (「改了就跑」, D20) — declared beside the type each is a member of, like `presentationMembers`, so the runtime carries no rule of any one kind and a kind that runs nothing on its own declares nothing. | — |
| `bindPanel` | function | The board with one panel wired by hand to `panelField` for a filter, and every other data panel not yet wired to it connected on its own where its view has a field of that very name and of the filter's type — on any tab, over any data (D22 G). | — |
| `bindingsOf` | function | A panel's bindings, read as the untrusted thing a stored config is. | — |
| `boardCondition` | function | The condition every data panel of a board runs under before its filters, in the board's own field names: its fixed scope (`fixed`, D26 Q31) — the board's only condition of its own, since a board has no `filter` (D27). | — |
| `boardFilterChoices` | function | This board's filters another board's filter can take its value from (「这块板的〈筛选〉」, D23 Q17): each of the same filter type (`sameFilterType`), so the value it holds is one the target reads. | — |
| `boardValueChoices` | function | The dimensions of a panel another board's filter can take its value from (「这一组的〈维度〉」, D23 Q17): each one bucketed in a way the filter takes (`takesGroup`) over a field of the filter's type (`sameFilterType`), once per field. | — |
| `boardValueSources` | function | Every source one of another board's filters can take its value from, this panel's dimensions first (`boardValueChoices`), then this board's filters (`boardFilterChoices`). | — |
| `boardWidth` | function | The width a config lays its board out at. | — |
| `booleanFieldKind` | const | — | — |
| `bottomOf` | function | The first row below every panel: where a board ends. | — |
| `bucketChange` | function | The change of series `key` at point `index` from the point before it, on a time axis whose points are consecutive buckets (`CartesianData.timeline`) — the tooltip's 「较上一期」 (docs/design/decisions.md D33, Q59). | — |
| `bucketRange` | function | The bucket a date-histogram key names: `[from, to)` in epoch milliseconds, where `to` is the next bucket's start in `timeZone`. | — |
| `builtinFieldKinds` | const | Ready-to-use registry; extend it with `withFieldKinds`. | [Definitions and Field Kinds](./definitions#api-FieldKindRegistry) |
| `cardField` | function | A declared field as a value of it reads outside a table — on a card, and in the detail of one record (`detailSections`), which is a card holding every field. | — |
| `chartMarks` | function | The marks a chart draws its series as, once each series: a waterfall's steps are bars; none for any other family that has no series. | — |
| `chartPickerGroups` | function | The picker's tiles in its two groups: what can draw this result first — the table last among them, since it draws anything — and every other type under 「其他图型」, still a tile, still saying what it lacks (D33 Q54). | — |
| `chartUnfit` | function | Why the config's chart cannot draw its own shape, or null when it can — or when its type is none this package has, which `validateChart` names. | — |
| `clampPage` | function | A page the pager may ask for: at least 1, and no later than the last it can reach — past the end, the reader wants the end. | — |
| `clearFilter` | function | Drops every condition while keeping the tree's shape valid. | — |
| `clickDraftGaps` | function | What a destination still lacks, said at its field once 完成 was pressed without it: no view picked, a URL no board may open, no board picked. | — |
| `clickDraftOf` | function | The form as it opens on a panel's stored click. | — |
| `clickOf` | function | A panel's click as stored, or `null` for the follow-up menu: none set, or one this reading cannot make out — admission says which (`validatePanelClick`), and a press falls back to the menu meanwhile. | — |
| `clicksFilter` | function | Whether a click sets this filter: what unwiring the filter takes with it. | — |
| `columnHidden` | function | Whether a stored column is switched off. | — |
| `columnPinned` | function | Whether a stored column is held against the table's left edge. | — |
| `comboAxis` | function | The axis a combo gives `metric` when nobody has chosen one: the first series' side (`leadSide`) when it measures the same kind of thing as the first series (`lead`), the other side when it does not. | — |
| `comboMark` | function | The mark a combo gives the series at `index` when nobody has chosen one: the first metric as bars, every other as a line — Metabase's combo, and the only reading of 「组合图」 that is not a bar chart under another name. | — |
| `compactLayout` | function | The panels floated up: each, in reading order, rises as far as it can without touching one already settled, and one that overlaps a settled panel (a stored config may hold two on one cell) drops below it instead. | — |
| `compactTab` | function | The panels of one tab floated up, holes and all gone. | — |
| `compileAnalysis` | function | Compilation is a mapping, not a translation: the configuration is isomorphic to the Wow aggregation protocol and differs only in storing enum values as literals and filters as trees. | — |
| `compileAnalysisTotals` | function | Totals run their own ungrouped query. | — |
| `compileFilter` | function | Compiles an admitted tree into a Wow filter expression. | — |
| `compilePresence` | function | — | — |
| `compileRecord` | function | Compiles the applied config into the query its source understands. | — |
| `compileSummaries` | function | Totals over the whole filtered range, as one ungrouped aggregation. | — |
| `conditionOf` | function | The condition a node asks: the leaf itself, or the one inside a negation.`null` for anything that is not one condition — a group of several, an empty one, a malformed entry. | — |
| `conditions` | function | The children of a group that each read as one condition, in order, with the leaf's path and whether it is negated. | — |
| `configBytes` | function | The size a config is stored at: the UTF-8 bytes of its JSON. | — |
| `countLeaves` | function | — | — |
| `coversScope` | function | Whether an instance is visible wherever the dashboard is. | — |
| `createFieldKindRegistry` | function | — | [Definitions and Field Kinds](./definitions#api-FieldKindRegistry) |
| `crossFilterChoices` | function | The board filters a press on this panel can set (「更新仪表盘筛选」): each wired to it through a field one of `groups` buckets in a way the filter takes (`takesGroup`), with the field it is wired through. | — |
| `currencyPathOf` | function | Where the currency of this field's values is held, for money whose currency is per record: the sibling `currencyField` beside the field's own name — `price.currency` for `price.amount`, `currency` for `amount`.`undefined` for every other field, the author's own `numberFormat` included: a field formatted by its author reads as the author said.`path` is where the field is named from, when that is not its own name — an element's field as an analysis spells it from the root. | — |
| `cursorPaging` | function | The cursor result's facts: there is a next page when there is a cursor. | — |
| `dateDiffUnitsOf` | function | The units a capability measures a time between two moments in (`AnalysisCapability.dateDiffUnits`): the declared ones in the offered order, every one when it declares none, and none where it offers no computed expressions at all. | — |
| `dateFieldKind` | const | A calendar day, without a time of day. | — |
| `datePartsOf` | function | The calendar parts a field's capability offers a `DATE_PART` dimension, in the order a choice among them reads (`ANALYSIS_DATE_PARTS`): the declared ones, every one when it declares none (`AggregationFieldCapability.dateParts`), and none when it offers no `DATE_PART` at all. | — |
| `dateTimeFieldKind` | const | An instant, with a time of day. | — |
| `defaultAnalysisConfig` | function | A complete starting config. | — |
| `defaultFilters` | function | What a board's filters hold before anyone set them: every default, and the time grouping's default unit. | — |
| `defaultPanelSize` | function | How big a new panel starts, in cells of the 24-column grid (D22 A): a metric card a quarter, a chart half, a table the full width; a heading a full-width line, a note or a picture beside a chart. | — |
| `defaultRecordConfig` | function | A complete starting config, because `create` takes a config rather than inventing one: a definition that `validateDefinition` accepted always has a layout and a row key to build from. | — |
| `defaultRuntimeEnvironment` | function | The default host: the ambient clock and timers, the ambient zone, and a page that is always visible. | — |
| `defineView` | function | A data definition built from its source's descriptor (host-integration.md 3, D67): the descriptor gives the facts — which paths there are, what each is, what it sorts and feeds — as an upper bound, and `spec` picks, names and narrows within it. | [Definitions and Field Kinds](./definitions#api-defineView) |
| `deletionFieldKind` | const | Whether soft-deleted records are shown: Wow's `DELETION` filter, as a dimension a definition declares (D4) rather than one every view carries. | — |
| `derivedMetric` | function | A derived metric's first shape: the first metric divided by the second. | — |
| `derivedText` | function | A derived metric as its author would say it, naming each metric it reads. | — |
| `describeFilter` | function | The conditions in force, one item per child of the root, so the summary keeps the tree's logic: a group under the root is one item that reads out its own conditions joined by its own operator, with a group inside it in parentheses. | — |
| `describePresence` | function | — | — |
| `describePresenceParts` | function | A presence question as one summary item: the operator is the whole condition, so the value says there is nothing beside it to read. | — |
| `detailSections` | function | How a record's detail is laid out: every field the definition declares, under the groups it declares, in their order — the order the field pickers list them in, so the detail reads like the author arranged the record — and the fields no group gathers after them, in declaration order. | — |
| `draftedClick` | function | The click a draft makes: `null` for the follow-up menu, `undefined` while the choice picked still lacks what it needs — no filter, no view, no board read yet (`board` is the destination board's config once read), or a URL no board may open. | — |
| `drillConditions` | function | The conditions that select the records behind one row of an analysis result, or `null` when no condition can say it. | — |
| `drillFilter` | function | The filter a drilled view opens under: the analysis view's own conditions with the row's added, flattened into one "all of" group when the analysis filter was one — so the record view opens in simple mode wherever the analysis view was in it — and nested under it otherwise. | — |
| `drillGroups` | function | The groups of one pressed row, dimension by dimension, in the config's order: what a menu names the group pressed by, where one dimension may read better as its value than as its conditions — a month is 「2026年9月」, not the two instants that bound it. | — |
| `duplicatePanel` | function | The board with a copy of one panel beside it and the copy's id, or `null` when there is no such panel or no room for one more. | — |
| `durationFrom` | function | The earlier moment a time since another moment (N3) names, if it is one. | — |
| `durationMetric` | function | A time between two moments measured as a metric (N3): the average hours from `from` to `to` across the group, which the card can change to a lowest, a highest, a total or a percentile. | — |
| `editContent` | function | A content panel with what it holds changed — a note's text, a picture, a list of links. | — |
| `elementFields` | function | The fields of one element, named as a condition names them. | — |
| `elementFilterFields` | function | The fields element `i`'s own gate filter may name: the ones that element holds, under the config's spelling. | — |
| `elementMatchFieldKind` | const | — | — |
| `emptyDashboardConfig` | function | A complete starting config, the dashboard counterpart of the two`default*Config` functions. | — |
| `emptyFilter` | function | An empty tree. | — |
| `emptyPreferences` | function | An empty preference record, which is what an untouched definition has. | — |
| `enumFieldKind` | const | A closed set of values declared by the definition. | — |
| `epochUnitOf` | function | The unit this field's epoch numbers count in, where it is not the default milliseconds — `undefined` for milliseconds and for a field that keeps no epoch at all. | — |
| `expressionFieldsOf` | function | Every field an expression reads, in the order it reads them. | — |
| `expressionText` | function | A formula as its author would say it — 「金额 − 成本」 — for a column header, a legend and the reading, naming each field as the definition labels it. | — |
| `familyOf` | function | The traits of the family a chart type belongs to. | — |
| `fieldAliasSegment` | function | A field path as one alias segment, injectively. | — |
| `fieldGroups` | function | Fields as a picker lists them: the ones no group lists first, in the field list's order, then each declared group in the definition's order, each in its own `fields` order. | — |
| `fillUrl` | function | A URL template with each `{{name}}` replaced by its value, encoded as one component — a value never adds a path, a query or a scheme — and a name with no value replaced by nothing. | — |
| `filterCondition` | function | The condition a filter's value stands for, on the filter's own name, or`null` while it is blank — a blank filter narrows nothing. | — |
| `filterControlValue` | function | A stored value as its control holds it: a filter that takes one value is stored as a one-entry list (`IN`, so it reaches any field of its type) and edited as that one value; a blank one starts at what its control starts at. | — |
| `filterEditor` | function | The control a filter's value is edited with (D22 F: the condition editor's value controls, never new ones): a date filter the date control its kind asks for, a yes-or-no the yes/no select, an id filter ids from the host's source or its list; a text or number filter with a list of its own the select over it, as over the list its wired fields declare (`wired`, an enum's options); otherwise text picked from the wired fields' values or a number — one value or several as the filter takes. | — |
| `filterFields` | function | Every field the tree mentions, in first-seen order. | — |
| `filterIndexes` | function | The node a path addresses, as the tree's own addressing: an issue path interleaves the `children` key with each index (`['children', 1]`), and a`FilterPath` is the indexes alone (`[1]`). | — |
| `filterOperatorOf` | function | The operator a filter's condition is asked with: its type's (`FILTER_TYPE_OPERATOR`), or — for a kind outside the six — the way its kind asks by default. | — |
| `filterReach` | function | What every filter of the board does to one panel, by filter name; an empty record for a content panel. | — |
| `filterStoredValue` | function | What a control handed back is stored as — the mirror of`filterControlValue` — or `null` for nothing picked. | — |
| `filterTypeOf` | function | The filter type a field kind belongs to, or `null` for a kind outside the six — an array, a metadata handle, one a host added. | — |
| `filterValueIssues` | function | — | — |
| `filtersOf` | function | The well-formed filters of a config: a stored `fields` is untrusted. | — |
| `filtersOnTab` | function | The filters that reach at least one panel on a tab (`null`: a board without tabs). | — |
| `firstMetric` | function | The first metric a set of aggregation capabilities can express, in a fixed order: the count, then the first field that can be summed, counted distinctly, taken a percentile of, or sampled. | — |
| `fitChartSlots` | function | The chart, with the family its `type` asks for filled in from the groups and metrics the analysis actually has. | — |
| `fitCharts` | function | Which chart types can draw a result of this shape, and which one it reads best as (K3). | — |
| `fitsGrid` | function | Whether a layout is one admission accepts: `x` and `y` non-negative integers, `w` and `h` positive ones, and `x + w` inside the grid. | — |
| `focusOn` | function | The two follow-up questions that stay analyses (D20 追问): "only this group" narrows the range to the row, "split by" narrows it and asks the same question by another dimension. | — |
| `formulaFormat` | function | The format a formula's per-record number shares with the fields it is computed from, or none. | — |
| `formulaMetric` | function | A formula's first shape: the first two measurable fields, subtracted, summed. | — |
| `freeAlias` | function | A name no group or metric is using: `base`'s stem plus the first free number. | — |
| `freeSpot` | function | The first place a new panel of this size can go: free, at rest (the compaction a later placement runs would not lift it), and at or below`fromRow` — the first row the reader has on screen, so what they add lands where they are looking (D22 A). | — |
| `groupFacts` | function | The facts of a declared field. | — |
| `groupFieldsOf` | function | The fields a dimension reads: its one field, or every field of the expression a band of a computed number is cut from (N3). | — |
| `groupFor` | function | The dimension a field becomes when a group is split by it: the first way the definition offers to group it, as the tray's 「添加维度」 takes it — the order a definition lists its group types in is its author saying how the field is first looked at, and a follow-up has no better reason to look at it otherwise. | — |
| `groupJoinWord` | function | How a group's own operator reads between its conditions. | — |
| `groupKeyText` | function | A group value as text: the one spelling of a category or a split value wherever a string has to name it — the key of `ChartSpec.colors` (see its contract in `model/chart.ts`), a pivot series' legend label, a React key. | — |
| `groupOfType` | function | The one builder of a dimension: `type` on a field, whole rather than as a patch. | — |
| `groupableFields` | function | The fields a dimension may still be added on: the groupable ones `groups` does not already cut by. | — |
| `grownLayout` | function | The layout read with some panels taller than saved (`heights`, rows by panel id): each grows to the height asked for, never shorter than it was saved, and whatever stood under it moves down with it. | — |
| `hasAsked` | function | Whether this view has put a question to its source: a result came back, one is on its way, or the last one failed. | — |
| `hasResult` | function | Whether this view ever got a result, even one that is now out of date. | — |
| `havingRows` | function | The rows a having expression is made of, or `null` when it is a shape the rows cannot say: a range, a set, a null check, an OR anywhere. | — |
| `impliedDeletion` | function | The deletion reading in force that nobody wrote (D17-2). | — |
| `innermostElement` | function | The level the counting unit is: the last one expanded, or none at all. | — |
| `insertAt` | function | Appends a node to the group at `parent`; `[]` is the root group. | — |
| `isAdditiveMetric` | function | Metrics the projection may add up across rows: a pie's "other" slice and a metric card's trend headline are both sums of queried buckets, which only means something for a metric that adds. | — |
| `isApproximate` | function | Whether a result column is estimated: what the projection said (`approximate`), else whether its function is one of the defaults. | — |
| `isBlankFilter` | function | True when the tree says nothing: it has no condition, or every condition it has is still waiting to be filled in. | — |
| `isBlankFilterValue` | function | Whether a filter's value says nothing yet: nothing picked, nothing typed. | — |
| `isBlankLeafValue` | function | Whether a leaf is still waiting to be filled in. | — |
| `isChartColor` | function | Whether a saved colour is one the renderer may pass on. | — |
| `isContentPanel` | function | A static panel: no query, no global filter, no child runtime. | — |
| `isDateCell` | function | Whether cells under this reading are moments rather than numbers or words. | — |
| `isDateTimeFilterValue` | function | — | — |
| `isDeletionState` | function | — | — |
| `isDuration` | function | Whether a metric measures a time between two moments: the duration card's. | — |
| `isDurationFilterValue` | function | Whether a stored value reads as a whole `DurationFilterValue`. | — |
| `isEmptyFilter` | function | Whether a tree asks nothing: well-formed groups all the way down and not one leaf. | — |
| `isExecutableFilter` | function | True when every leaf of the tree is usable as it stands. | — |
| `isExportCancelledError` | function | By name, as every guard of the engine's errors (`isViewStoreError`). | — |
| `isFieldName` | function | — | — |
| `isFieldlessKind` | function | Whether a kind's `name` is a handle rather than a path into a document. | — |
| `isFilterGroup` | function | Asks what the node actually is rather than whether a property happens to be present: a leaf carrying a stray `children` of the wrong shape would otherwise be walked as a group. | — |
| `isFilterGroupOperator` | function | Whether a value is one of the three. | — |
| `isFilterLeaf` | function | — | — |
| `isFilterNode` | function | Whether a value is a node at all. | — |
| `isFormula` | function | Whether a metric is one the tray's formula card edits: one operation over two operands. | — |
| `isGroupItem` | function | Whether this item is a group rather than one condition. | — |
| `isKnownEditorInput` | function | Whether a kind named an input the engine has a control for. | — |
| `isNegation` | function | A group that says "not this": `nor` over exactly one condition. | — |
| `isNumberRange` | function | The shape of a `BETWEEN` value: two finite numbers, in whichever order they were typed. | — |
| `isOneDayValue` | function | Whether a date value is one day, whatever the clock says: one of`ONE_DAY_PRESETS`, or a calendar day from its start to its end (`to` the same day, or left out). | — |
| `isOrderedRange` | function | Whether a range's lower bound really is the lower one. | — |
| `isOwnedPanel` | function | A data panel showing a view the board owns (`owned`) rather than a saved one. | — |
| `isPercentStacked` | function | Whether the chart draws its stacks as shares: stacked, and asked to. | — |
| `isPresenceOperator` | function | — | — |
| `isPresentationMember` | function | Whether a key is one a panel's override of how it looks may set. | — |
| `isRecordRuntime` | function | Whether a data view's runtime is a Record view's, with its rows' commands: a dashboard panel's runtime (`DashboardPanelState.runtime`) is either kind. | — |
| `isReferenceFilterValue` | function | — | — |
| `isRootFilterIssue` | function | Whether a finding is about the config's own filter tree rather than a nested one. | — |
| `isSafeContentUrl` | function | Whether a content panel's URL may be rendered. | — |
| `isSimpleTree` | function | `simple` mode shows one AND group of conditions, each on its own or negated. | — |
| `isSingleStringField` | function | Whether one record holds at most one string in this field. | — |
| `isSmooth` | function | — | — |
| `isStacked` | function | Whether every series that can stack is stacked; a lone series is not "stacked", and neither is a chart with nothing that stacks. | — |
| `isSystemInstanceId` | function | True for any id in the namespace a `ViewStore` must not issue. | — |
| `isSystemScope` | function | Whether the view was configured for everyone rather than by a user. | — |
| `isValidTimeZone` | function | Whether a runtime can resolve this zone; an unknown one makes dayjs throw. | — |
| `isValueMetric` | function | Whether a metric is one record's value (`VALUE_METRIC_TYPES`). | — |
| `isViewCommandError` | function | By name, as every guard of the engine's errors (`isViewStoreError`). | — |
| `isViewPanel` | function | A panel backed by a referenced instance, and so by a child runtime. | — |
| `isViewStoreError` | function | Structural, so an error raised by a second copy of this package, or by a store that builds the shape itself, is still recognised: an `Error` named`ViewStoreError` with one of the port's codes. | [Persistence Port](./store#api-ViewStoreError) |
| `isViewWriteError` | function | By name, as every guard of the engine's errors (`isViewStoreError`). | — |
| `issue` | function | — | — |
| `lastPageInWindow` | function | The last page a source with this window serves at this size: the page `p` with `p × size` still inside it. | — |
| `leadMetric` | function | The metric a chart is about: the one its first mark measures. | — |
| `levelLabel` | function | What the level at `index` is called: its array's label, else its path. | — |
| `limitBounds` | function | — | — |
| `localStorageSnapshot` | function | A `MemoryViewStore` snapshot kept in `localStorage` under `key`: the whole store as one JSON document, `{ instances, preferences }`. | [Persistence Port](./store#api-localStorageSnapshot) |
| `mapGlobalFilter` | function | Rewrites a dashboard's global filter onto one panel's fields. | — |
| `mappedValues` | function | What a press takes to the board (D23 Q17), from what the author chose: each of the board's filters mapped to a source that can still give it a value — a dimension of this panel, or a filter of this board's, of a type it takes. | — |
| `maxSortFields` | function | How many fields this definition may be sorted on at once. | — |
| `measureColumns` | function | What each metric column's number is a quantity of (`metricMeasure`), by alias: `metricMeasures` read off the result rather than the definition, from the summary a column says it is and the format it prints in — so the options panel and the redraw put a series on the axis the kernel would. | — |
| `mergeFilters` | function | ANDs several trees into one, dropping the empty ones. | — |
| `mergeGlobalFilter` | function | The panel's own applied filter ANDed with the mapped global filter. | — |
| `metricCondition` | function | The condition a metric counts under, or `undefined` when it counts every record: no filter, a derived metric (which reads no records), or a filter that says nothing yet — every condition in it blank, which never reaches the query as a condition and is refused before it runs. | — |
| `metricFieldOf` | function | The one field a metric summarises, when it has one: a value metric (`ANY`, `FIRST`, `LAST`) names it, and the three expression-carrying kinds through a `FIELD` expression. | — |
| `metricFormat` | function | How a metric's number prints, which is *not* how its field's own values print. | — |
| `metricFunctionOf` | function | — | — |
| `metricMeasure` | function | What a metric's number is a quantity of, as one token: two metrics with the same token can share a scale, two with different ones cannot — a count of orders drawn on the scale of their amount lies flat along zero. | — |
| `metricMeasures` | function | `metricMeasure` of every metric, by alias, from the definition: each metric's format as `metricFormat` reads it off its one field. | — |
| `metricOfSummary` | function | The one builder of a metric over a field: `choice` on it, whole — a card that changes the summary replaces the metric rather than patching it, and a fresh config's first metric is built the same way. | — |
| `metricReferenceText` | function | How a derived metric's text names another metric it refers to. | — |
| `metricWithCondition` | function | A second card of the same metric, for a condition of its own (D20 屏 H 「复制并加条件」): a free alias, no display name — two cards called the same thing is the ambiguity a name exists to resolve — the summary kept, and no condition yet. | — |
| `momentColumns` | function | The metric columns of a result that are moments — the earliest, the latest of a date — by alias: those the projection gave a date's reading. | — |
| `momentMetrics` | function | The metrics whose value is a moment — the earliest, the latest, a percentile or any one of a date field — by alias. | — |
| `moveFilter` | function | A filter moved to `index` on the bar. | — |
| `movePanelToTab` | function | A panel moved onto another tab, at the first free place there, and the tab it left compacted. | — |
| `moveTab` | function | A tab moved to `index` in the bar (clamped to it); the same board when it stays. | — |
| `narrowValueCandidates` | function | The candidates in hand narrowed to those holding `query`, the way the source would narrow them: ignoring case unless the field says its case carries meaning, by substring or by prefix as `valueCandidateNarrowing` picks — by substring where the source cannot narrow at all. | — |
| `narrowsTo` | function | Whether `filter` still narrows to the group `drillFilter` added: every one of `conditions` is a conjunct of it — a child of its root "all of", or of an "all of" inside that, which is where `drillFilter` puts them however many times it has been over the tree. | — |
| `nearestPageSize` | function | The rung of a ladder nearest a page size, for a layout switch that moves a view from one ladder to the other (`RuntimeLimits.cardPageSizes`). | — |
| `negateAt` | function | The tree with the condition at `path` negated — or, when it already sits alone in a `nor` group, that group replaced by the condition itself.`path` is the leaf's, inside its wrapper when it has one, which is the path the pill holds either way. | — |
| `nextExpansion` | function | The next level the capability declares beyond what is expanded, or none: the chain is one line, so there is at most one thing to expand into. | — |
| `nextLevel` | function | The next step of the declared chain, named, or none. | — |
| `nodeAt` | function | The node at a path, or `null` when the path leads nowhere. | — |
| `numberFieldKind` | const | — | — |
| `numberFormatOf` | function | How a number of this field is written: the author's `numberFormat` when the field declares one, otherwise what its `numeric` says — `scale` fraction digits, and for money in one fixed currency, that currency. | — |
| `offersPercentStack` | function | Whether the display page offers 「百分比堆叠」 for this chart: a bar or an area chart — a combo's lines would be drawn against a scale of shares — whose every series adds up (`additive`: a share is a part of a sum, and an average has no whole to be part of), with something to stack — a split, or two series or more. | — |
| `offersStacking` | function | Whether the display page offers stacking for this type at all: a line chart's every series is a line, so there is nothing that could stack. | — |
| `operatorsOf` | function | Operators a field actually offers: its own list narrows its kind's. | — |
| `optionTabs` | function | Which pages this chart has. | — |
| `outOfScopeNames` | function | Names that exist somewhere in this view but not in the domain given. | — |
| `overlaps` | function | Whether two boxes share at least one cell. | — |
| `pageAfterShrink` | function | Where a page that came back empty belongs instead: the last page there now is, when the rows it counted left the result under it — a refresh after a command took rows out, on the last page of a shrinking result.`null` when the page is where the reader belongs: it holds rows, it is the first, or the pages are not counted. | — |
| `pageSummaries` | function | The same cells read over the rows on screen. | — |
| `pageWindow` | function | The window a paged source serves: the definition's own `maxWindow` where it declares one below the runtime's `maxPageWindow`, which is what a Wow server's HTTP guard admits at its defaults (D42). | — |
| `pagedPaging` | function | The paging facts of one paged result. | — |
| `panelFilterTree` | function | The board's filters as the condition one panel is narrowed by, in its own field names: each filter wired to it (`bindings`) that holds a value, ANDed. | — |
| `panelTab` | function | The tab a panel is read as sitting on: its own when the board has that tab, the first otherwise, and `null` on a board without tabs. | — |
| `panelsOf` | function | The panels a config holds, read as the untrusted thing a stored config is. | — |
| `parseSystemInstanceId` | function | Reads back a composed id, or `null` when the id belongs to a store. | — |
| `peaksOnlyLabels` | function | Whether a cartesian chart's bars, left to their default, write only their highest and lowest value — as the extremes are marked — rather than a number over every bar: `labels` unset and `PEAKS_ONLY_FROM` categories or more. | — |
| `periodOf` | function | Which period of the calendar in `timeZone` a range is exactly, if any: the one a date bucket names (`bucketRange`), written as a closed range — its first instant to the last millisecond before the next period starts. | — |
| `periodRollover` | function | How long after the question was asked a trend card's headline stops being its last period, in milliseconds — or undefined when it never will: no trend, a card read as the whole, or no bucket under way. | — |
| `placePanel` | function | The panels after one of them is put at `layout`, or `null` when the placement is not one the grid admits or names no panel. | — |
| `placePanelIn` | function | A config with one panel placed and the rest of its tab compacted around it, or the same config when the placement changes nothing or cannot be made. | — |
| `presentationMembers` | function | Which members of one kind's config are presentation only — declared beside the type each is a member of rather than string-compared where they are read, so a `satisfies` refuses a member the config does not have (A6). | — |
| `presentationMembersOf` | function | The members a data panel's override of how it looks sets (D22 D), read as untrusted: none for a content panel, an override that is no object, or one that names only what no view has. | — |
| `pressableGroups` | function | The dimensions of a view a press can name: an analysis's groups, read as untrusted; none for a record view, and none for an analysis over expanded elements — its groups are an element's, which no root condition selects. | — |
| `projectAnalysis` | function | Turns aggregation rows into table columns plus whatever the chart family needs. | — |
| `projectRecord` | function | Turns a page of rows into what a table or a card list renders. | — |
| `projectSummaries` | function | Page summaries are derived from the rows on screen; range summaries are read back from the aggregation by alias. | — |
| `qualify` | function | An element field's full path, from the scope it sits in and its own name. | — |
| `rangeSpan` | function | The span the applied range pins on `field`, in milliseconds, or null when it pins none. | — |
| `readInstant` | function | The instant one of this kind's values names, or `undefined` when it names none. | — |
| `readValue` | function | Reads an admitted leaf value as the shape its kind defined. | — |
| `readValueCandidates` | function | The rows a candidate query answered, as candidates. | — |
| `readingOrder` | function | The panels in reading order: rows top to bottom, each left to right — the order a reader counts them in and the grid draws them in, whatever order the config lists them. | — |
| `readsAsItsField` | function | Whether a metric's value is one of its field's own values, on the field's own scale — its smallest, its largest, a percentile of it, any one of it — and so reads as the field reads a value: a date as a date, a code as the label the definition gave it. | — |
| `recommendDateUnit` | function | The coarsest offered unit that cuts `span` milliseconds into at least a handful of buckets, or the finest offered one when nothing does, or the first offered one when there is no span to read. | — |
| `recordCapabilityOf` | function | — | — |
| `recordProjection` | function | The fields a page of this view asks its source for: what the view shows, and what reads a row besides. | — |
| `recordValue` | function | The value of `field` in a record. | — |
| `referToSaved` | function | A data panel pointing at a saved view that is the very view it showed: its own analysis just saved as a view (「另存为视图」, D22 C), or the personal view it stood on just copied for the board's audience (「复制为共享视图并替换」, D22 B). | — |
| `referenceFieldKind` | const | Points at rows of another dataset. | — |
| `referencedInstance` | function | The saved view a data panel points at, or `undefined` for one the board owns or one whose `instanceId` is no string. | — |
| `relativeFields` | function | The same fields, named as the scope they are compiled in names them. | — |
| `relativeName` | function | One name, relative to the scope it is sent in. | — |
| `relativeTree` | function | The same tree, with every field name relative to the scope it is compiled in — the leaves' own, and the ones inside a predicate a leaf holds. | — |
| `removeAt` | function | Removes the node at a path. | — |
| `removeConditionAt` | function | The tree without the condition at `path`, and without the negation around it when it has one: an editor holds a negated condition by its leaf's path, so removing it takes the wrapper along rather than leaving an empty`nor` group behind that says nothing and cannot be edited. | — |
| `removeFilter` | function | The board without a filter, and without every wire to it. | — |
| `removeFixedScope` | function | The board without its fixed scope (D23 Q16, D26 Q31): the condition a board saved before its filters could not hold, taken out whole by its author — never a reader's to take — and the empty tree left in its place, so the member stays and the board is never read as pre-C again. | — |
| `removePanel` | function | The board without one panel, its tab compacted where the panel stood. | — |
| `removeTab` | function | A board without one of its tabs and the panels on it; the same board for a tab it lacks or its last tab. | — |
| `renameFilter` | function | A filter's name on the bar; a blank one is not taken. | — |
| `renamePanel` | function | A panel's title set, or taken off for a blank one so it is named by what it shows. | — |
| `renameTab` | function | A tab renamed; the same board for a blank title or a tab it lacks. | — |
| `reorderPanel` | function | The panels after one of them trades places with its neighbour in reading order — the one-column reading's 「上移」／「下移」 (D22 J) written back onto the grid — or `null` when there is no neighbour that way, or no such panel. | — |
| `reorderPanelIn` | function | A config with one panel moved to place `to` (from 0) along the reading order of its tab, or the same config when it is already there or `to` is no place on the tab. | — |
| `replacePanelView` | function | A data panel showing another saved view (D22 D, 「替换视图」). | — |
| `resolveDateTimeBound` | function | One instant of a value, for the operators that take a single bound: `GTE` asks for the start edge, `LTE` for the end. | — |
| `resolveDateTimeRange` | function | The range a value names: `from` on its start edge, `to` on its end edge, so a date-only `to` reaches the end of that day. | — |
| `resultSpan` | function | The span a result already cut on `field`, from its first bucket's start to its last bucket's end, or null when the result has no time dimension on the field or no rows. | — |
| `retypeFilter` | function | A filter of another type. | — |
| `rootSearch` | function | The search a view keeps on hand: the text of the search condition on the tree's root, which is where a search box reads and writes it. | — |
| `rowCurrency` | function | What one row of a result says about a column's currency: the one its records are in, several, or nothing known (`companionsReading`). | — |
| `sameFilterNode` | function | Whether two nodes say the same thing *at their own level*: a leaf by its field, operator and value, a group by its operator alone. | — |
| `sameFilterTree` | function | Whether two trees — or two nodes — are the same, children and all. | — |
| `sameFilterType` | function | Whether a filter of one kind can be wired to a field of another: the same filter type, or — outside the six — the very same kind. | — |
| `say` | function | `value` with every key in it said in `words` (D2): what a label reads as where it is shown or leaves the engine. | — |
| `scopePrefix` | function | The prefix a name in `absolute` position loses on its way to Wow. | — |
| `searchFieldKind` | const | Full-text search: the box at the top of a list page. | — |
| `searchFieldOf` | function | The definition's search field — the first, where it declares several — that still searches: one narrowed to no operator (its source offers no search it can use, capabilities.md 4.2, G15) draws no search box. | — |
| `serializeCsv` | function | The rows as a CSV, RFC 4180 with a BOM in front. | — |
| `seriesMark` | function | The mark one series of a chart of this type is drawn as: a combo's names its own and is a bar where it names none; every other cartesian type draws all its series alike. | — |
| `setBoardWidth` | function | The board laid out at another width (D31). | — |
| `setFilterDefault` | function | What a filter starts at; `null` takes the default off. | — |
| `setFilterMultiple` | function | Whether a filter takes several values. | — |
| `setFilterOneDay` | function | Whether a date filter holds one day and nothing else (`DashboardField.oneDay`). | — |
| `setFilterOptions` | function | Where a filter's choices come from (D22 G, 「值从哪来」): a list of its own, or — `null` — the values of the fields it is wired to. | — |
| `setFilterRequired` | function | Whether a filter always has a value (and so must have a default). | — |
| `setPanelClick` | function | A data panel's click (「点击时…」), or its click taken off (`null`) — back to the follow-up menu. | — |
| `setPresentation` | function | A data panel's override of how it looks (D22 D), or its override taken off (`null`, or one setting nothing): 「恢复为视图的样子」. | — |
| `setTimeGrouping` | function | The board's time grouping set, or taken off with `null`. | — |
| `shapeChart` | function | `totals` is the one row of the ungrouped totals query, when it ran. | — |
| `splitBy` | function | — | — |
| `stackedLayout` | function | The layout read as one column, for a screen too narrow for the grid: each panel the full width of the column and as tall as it was saved, stacked in reading order — except that two cards next to each other in reading order (`paired`, the metric cards) share a row, half the width each, as tall as the taller of them. | — |
| `stacks` | function | Whether a series of a chart of this type stacks: a bar or an area does, a line never. | — |
| `stageValues` | function | The values of a group as the result lists them, once each and in the order the rows came — the order the stages of a funnel are offered in before the analyst puts them in business order. | — |
| `stringFieldKind` | const | — | — |
| `summaryAlias` | function | Alias of one summary cell; the projection reads the result back by it. | — |
| `summaryChoices` | function | The choices a field offers, in the order `FIELD_METRIC_TYPES` lists them. | — |
| `summaryFunctionsOf` | function | The summaries a field really offers: what it declares, less what its own values cannot answer. | — |
| `summaryOf` | function | The choice a metric was built from, or `null` for one that measures no field. | — |
| `switchChartType` | function | The chart as `type` draws it, measuring what the chart being left measured. | — |
| `systemInstanceId` | function | Instance id of a code-declared system view. | — |
| `tabsOf` | function | The well-formed tabs of a stored config, in the order of its bar: admission reports the rest (`validateTabs`), and a bar or a menu naming tabs must not be the second place to find out. | — |
| `takesGroup` | function | Whether a press on a group of this dimension has a value for a filter of this type (D22 I): a date filter takes a date bucket — the window it spans — and a text, id, number or yes-or-no filter takes one value of a`TERMS` dimension. | — |
| `temporalOf` | function | How this field keeps its time: its declaration, or the default. | — |
| `text` | function | The key `key`, to stand where a label goes. | [Definitions and Field Kinds](./definitions#api-text) |
| `textKeyOf` | function | The key a label stands for, or `null` for a label that is words already. | — |
| `titleProblem` | function | What is wrong with a view's title, if anything: blank once trimmed, or longer than `MAX_VIEW_TITLE_LENGTH`. | — |
| `toSummary` | function | What a list shows: an instance without the config it holds. | — |
| `unbindPanels` | function | The board with these panels no longer wired to a filter. | — |
| `unknownOrOutside` | function | Which finding a name no aggregation capability covers deserves. | — |
| `unmarkedErrors` | function | The errors a condition editor is not already marking. | — |
| `updateAt` | function | Replaces the node at a path, or removes it when `update` returns `null`. | — |
| `urlFillable` | function | Whether a URL template fills into a URL a board may open whatever its placeholders hold (`fillUrl`). | — |
| `urlPlaceholders` | function | The names a URL template's `{{…}}` hold, in order, each once. | — |
| `validateAnalysis` | function | Admits an analysis config against its definition. | — |
| `validateBoardClick` | function | What a click that opens another board says (D23 Q17), each finding a warning. | — |
| `validateChart` | function | Charts reference aliases, so their rules are about what the query actually produces. | — |
| `validateDashboard` | function | Admits a dashboard config. | — |
| `validateDataConfigBase` | function | The part both data views share (`DataViewConfigBase`): the view's own conditions and the editor mode they are shown in, then the part every kind shares. | — |
| `validateDefinition` | function | Admits a definition. | — |
| `validateFilter` | function | Admits a tree that arrived from a store. | — |
| `validateFilterFields` | function | A board's filters as the config declares them (D22 F): each named once in Wow's field syntax, and able to start where it says — a default its own kind reads, one value where it takes one, and a default at all where it is required, since a required filter never runs empty. | — |
| `validateLayout` | function | What is wrong with one panel's geometry. | — |
| `validatePanelClick` | function | What admission says about a panel's click (D22 I). | — |
| `validateRecord` | function | Admits a record config against its definition. | — |
| `validateTabs` | function | The tabs as admission reads them. | — |
| `validateTimeGrouping` | function | The board's time grouping (D22 F): at least one unit to offer, each a date unit Wow buckets by and offered once, and a default among them. | — |
| `validateViewConfigBase` | function | The part every view kind shares: how often it refreshes. | — |
| `valueCandidateField` | function | The field a condition's values can be offered for from the data, or`null` when they cannot. | — |
| `valueCandidateLimit` | function | The number of values one candidate query asks for, under every ceiling. | — |
| `valueCandidateNarrowing` | function | How a typed fragment narrows the candidates at the source, or `null` when the field lets no condition do it and the list is narrowed where it is. | — |
| `valueCandidatesConfig` | function | The candidates of `field` as an analysis: records counted by the field's value, the most frequent first, the first `valueCandidateLimit` of them — narrowed to the values holding `query` where the field allows it. | — |
| `valueLabelsOn` | function | Whether a chart writes the values on its marks — or, given a `mark`, on the series drawn as that mark: what the spec says, and its family's default for the mark where it says nothing. | — |
| `valueSourceKey` | function | One source as a key: `dimension:<field>` or `filter:<name>`. | — |
| `variantGroups` | function | The groups a predicate's field picker lists an element's fields under when its elements differ by variant (#3519): one per variant, in the order the discriminator's options give (else by value), each naming the fields only that variant has, by the names `elementFields` gives them. | — |
| `walkFilter` | function | Walks the nodes of the tree, skipping whatever is not one. | — |
| `walkFilterShape` | function | Walks the tree iteratively, malformed entries included. | — |
| `wallClockAt` | function | What a clock in `timeZone` shows at `ms`, as the instant that wall-clock time is at UTC — the axis a wall-clock bucket key (`2026-09-18`) is read on. | — |
| `wireableFields` | function | The fields of a panel a filter can be wired to: its view's fields of the filter's type, in the definition's order. | — |
| `wiredOptions` | function | The fixed list the fields a filter is wired to offer, merged — what a category filter picks from when it has no list of its own (D22 G, 「值从哪来：接上的字段」, as Metabase's category filter does): every option of every wired field that declares some (an `enum`'s), the same code once, under the label it first comes with. | — |
| `withBoard` | function | Another board picked for the destination: nothing mapped for the board it replaces carries over by name, since its filters are other filters. | — |
| `withElements` | function | The config re-scoped to a new expansion chain (D20 屏 G). | — |
| `withFieldKinds` | function | Adds or replaces kinds, so an application extends the built-in set without mutating it. | [Definitions and Field Kinds](./definitions#api-FieldKindRegistry) |
| `withHavingRows` | function | The expression the rows say: one condition on its own, several under one AND, none at all as no having. | — |
| `withLayouts` | function | A config with these boxes written into the panels they name, or the same config when none of them moves. | — |
| `withLevel` | function | The chain one level deeper: the declared next step, with no gate yet. | — |
| `withMovedTo` | function | The list with the item at `from` taken out and put back at `to`, or as it was when either place is not one this list has. | — |
| `withOutOfScope` | function | The fields of `domain`, plus the ones outside it, for a filter's admission. | — |
| `withPercentStack` | function | 「百分比堆叠」 on or off. | — |
| `withRootSearch` | function | The tree with its root search set to `text`: the condition's value replaced where it is, added at the end where there was none, and taken out when the text is blank — an empty search is no condition, and a pill left behind for it would be one the reader never added. | — |
| `withSlot` | function | An alias put in one slot, taken out of the other if it was there: a chart that split by the axis it plots along is `chart.splitBy.same-as-x`, so choosing for one slot what the other holds swaps them rather than doubling up. | — |
| `withSmooth` | function | — | — |
| `withStacked` | function | Stacking is one choice for the whole chart — series stacked in twos and threes is a spec the panel does not offer — so every series that can stack joins the one stack or leaves it. | — |
| `withStageOrder` | function | — | — |
| `withStagesFrom` | function | A funnel whose stages are a group's values needs their order, which is business knowledge the kernel does not have (`fitChartSlots` leaves it empty). | — |
| `withText` | function | `value` with every key in it said by `resolve`, and the same object where it holds none. | — |
| `withoutLevelsFrom` | function | The chain cut at `index`: that level and every level inside it leave. | — |
| `wordReferences` | function | A derived metric's text with every reference `metricReferenceText` wrote in it replaced by what `word` makes of its summary, its name and the condition it counts under, when it has one. | — |
| `writeValue` | function | Stores a value a kind produced, the mirror of `readValue`. | — |

:::
