Report
Report protocol schemas
Report Type Enum
Source: packages/spec/src/ui/report.zod.ts
TypeScript Usage
import { JoinedReportBlockSchema, ReportSchema, ReportChartSchema, ReportSortSchema, ReportType } from '@objectstack/spec/ui';
import type { JoinedReportBlock, Report, ReportChart, ReportSort, ReportType } from '@objectstack/spec/ui';
// Validate data
const result = JoinedReportBlockSchema.parse(data);JoinedReportBlock
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| name | string | ✅ | Snake case identifier (lowercase with underscores only) |
| label | string | Record<string, string> | optional | Display label — the default-language string, or an inline locale map ({ en, "zh-CN" }) resolved at render time |
| description | string | Record<string, string> | optional | Display label — the default-language string, or an inline locale map ({ en, "zh-CN" }) resolved at render time |
| type | Enum<'tabular' | 'summary' | 'matrix'> | ✅ | |
| chart | { type: Enum<'bar' | 'horizontal-bar' | 'column' | 'line' | 'area' | 'pie' | 'donut' | … +13 more>; title?: string | Record<string, string>; subtitle?: string | Record<string, string>; description?: string | Record<string, string>; … } | optional | |
| dataset | string | optional | Dataset name to bind (ADR-0021) |
| rows | string[] | optional | Dimension names down (dataset-bound) |
| columns | string[] | optional | Dimension names across (matrix, dataset-bound) |
| values | string[] | optional | Measure names to show (dataset-bound) |
| runtimeFilter | any | optional | Render-time scope filter (dataset-bound) |
| order | { by: string; direction: Enum<'asc' | 'desc'> }[] | optional | Result ordering, most significant key first |
Report
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| name | string | ✅ | Report unique name |
| label | string | Record<string, string> | ✅ | Report label |
| description | string | Record<string, string> | optional | Display label — the default-language string, or an inline locale map ({ en, "zh-CN" }) resolved at render time |
| type | Enum<'tabular' | 'summary' | 'matrix' | 'joined'> | ✅ | Report format type |
| dataset | string | optional | Dataset name to bind (ADR-0021) |
| rows | string[] | optional | Dimension names down |
| columns | string[] | optional | Dimension names across (matrix) |
| values | string[] | optional | Measure names to show |
| runtimeFilter | any | optional | Render-time scope filter |
| order | { by: string; direction: Enum<'asc' | 'desc'> }[] | optional | Result ordering, most significant key first |
| drilldown | boolean | ✅ | Click-through to underlying records |
| chart | { type: Enum<'bar' | 'horizontal-bar' | 'column' | 'line' | 'area' | 'pie' | 'donut' | … +13 more>; title?: string | Record<string, string>; subtitle?: string | Record<string, string>; description?: string | Record<string, string>; … } | optional | Embedded chart configuration |
| blocks | { name: string; label?: string | Record<string, string>; description?: string | Record<string, string>; type: Enum<'tabular' | 'summary' | 'matrix'>; … }[] | optional | Sub-reports for type=joined |
| protection | { lock: Enum<'none' | 'no-overlay' | 'no-delete' | 'full'>; reason: string; docsUrl?: string } | optional | Package author protection block — lock policy for this report. |
| _lock | Enum<'none' | 'no-overlay' | 'no-delete' | 'full'> | optional | Item-level lock — controls overlay & delete (ADR-0010). |
| _lockReason | string | optional | Human-readable reason shown when a write is refused by _lock. |
| _lockSource | Enum<'artifact' | 'package' | 'env-forced'> | optional | Layer that set _lock (artifact | package | env-forced). |
| _provenance | Enum<'package' | 'org' | 'env-forced'> | optional | Origin of the item (package | org | env-forced). |
| _packageId | string | optional | Owning package machine id. |
| _packageVersion | string | optional | Owning package version. |
| _lockDocsUrl | string | optional | Optional documentation link surfaced next to _lockReason. |
ReportChart
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| type | Enum<'bar' | 'horizontal-bar' | 'column' | 'line' | 'area' | 'pie' | 'donut' | 'funnel' | 'scatter' | 'treemap' | 'sankey' | 'combo' | 'gauge' | 'solid-gauge' | … +6 more> | ✅ | |
| title | string | Record<string, string> | optional | Chart title |
| subtitle | string | Record<string, string> | optional | Chart subtitle |
| description | string | Record<string, string> | optional | Accessibility description — announced to screen readers as the chart’s label |
| xAxis | string | ✅ | Dataset dimension name for the X-axis (bound-dataset dimension, not a raw field) |
| yAxis | string | ✅ | Dataset measure name for the Y-axis (bound-dataset measure, not a raw field) |
| series | { name: string; label?: string | Record<string, string>; type?: Enum<'bar' | 'horizontal-bar' | 'column' | 'line' | 'area' | 'pie' | 'donut' | … +13 more>; color?: string; … }[] | optional | Defined series configuration |
| colors | string[] | Record<string, string> | optional | Color palette (string[]) or value→color map ({ value: color }) |
| height | number | optional | Fixed plot height in pixels (overrides the container default) |
| showLegend | boolean | ✅ | Display legend |
| showDataLabels | boolean | ✅ | Display data labels |
| annotations | { type: Enum<'line' | 'region'>; axis: Enum<'x' | 'y'>; value: number | string; endValue?: number | string; … }[] | optional | Reference lines/bands drawn over the plot: { type: "line" | "region", axis: "x" | "y", value, endValue?, color?, label?, style? } |
| interaction | { tooltips: boolean; brush: boolean } | optional | Interaction toggles: { tooltips?, brush? } |
| aria | { ariaLabel?: string | Record<string, string>; ariaDescribedBy?: string; role?: string } | optional | ARIA accessibility attributes |
Allowed Values: ReportChart.type
barhorizontal-barcolumnlineareapiedonutfunnelscattertreemapsankeycombogaugesolid-gaugemetrickpibulletradartablepivot
ReportSort
Properties
| Property | Type | Required | Description |
|---|---|---|---|
| by | string | ✅ | Dimension or measure name to order by (must be selected by this report) |
| direction | Enum<'asc' | 'desc'> | ✅ | Sort direction (default ascending) |
ReportType
Allowed Values
tabularsummarymatrixjoined