# silverpoint 0.8.0: the agent catalog > silverpoint 0.8.0 draws 60 charts and 38 UI components as metal point on prepared paper, for React, Vue, Angular and Reflex (Python, through reflex-silverpoint-react), from one framework-free engine, on the silverpoint and cyanotype grounds with 6 palette presets; accessible and server-renderable. Generated from https://silverpointweb.vercel.app/agent-catalog.json, the catalog `@silverpoint/mcp@0.8.0` ships (schema 1). Reflex: `reflex-silverpoint-react` 0.7.1, wrapping silverpoint 0.7.0. Its Reflex names are those of that release, which wraps silverpoint 0.7.0. React, Vue and Angular share each prop's name (Vue templates may write it in kebab-case); Reflex spells it in snake_case. The MCP server at https://silverpointweb.vercel.app/mcp answers from the same catalog. ## Stylesheets - always: `@silverpoint/fonts/fonts.css`, `@silverpoint/grounds/styles.css` - ui: `@silverpoint/grounds/ui.css` - timeline: `@knight-lab/timelinejs/dist/css/timeline.css`, `@silverpoint/grounds/timeline.css` ## Common props ### Every chart | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `data` | `data` | `readonly Datum[]` | | Rows to draw. If omitted, the demo dataset is rendered (REQ-093): accessor props (`…Key`, `keys`, `names`, `levels`, `axis`, `dimensions`, `period`, `nodes`) are ignored, every other prop applies. | | `ground` | `ground` | `GroundRef` | `'silverpoint'` | Style ground. Defaults to the app provider's, or `silverpoint`. | | `substrate` | `substrate` | `SubstrateName` | `'cream'` | Prepared substrate within the ground (REQ-046). | | `mode` | `mode` | `InkMode` | `'ink'` | `ink` by default; `precision` disables inking (REQ-021). | | `palette` | `palette` | `Palette` | | Colours over the ground's, field by field, written on the root's `style` (REQ-461). Merged over the dashboard's and the provider's (REQ-462); presets are on `@silverpoint/core/palettes`. | | `seed` | `seed` | `Seed` | | Seed. If omitted, it is derived from `id` stably (REQ-003). | | `id` | `id` | `string` | | Stable identifier. If omitted, it is generated deterministically. | | `height` | `height` | `number` | `160` | Height of the drawing area in px. Width is the container's unless pinned. | | `width` | `width` | `number` | | | | `chrome` | `chrome` | `'card' \| 'bare'` | `'card'` | `card` draws the full frame; `bare` only the drawing area (REQ-095). | | `hatchFill` | `hatch_fill` | `'tile' \| 'per-shape'` | `'tile'` | How areas are filled (REQ-029). | | `title` | `title` | `string` | | | | `badge` | `badge` | `string` | | | | `value` | `value` | `string \| number` | | | | `unit` | `unit` | `string` | | | | `footerLeft` | `footer_left` | `string` | | | | `footerRight` | `footer_right` | `string` | | | | `label` | `label` | `string` | | Accessible name. If omitted, it is derived from `title` (REQ-120). | | `description` | `description` | `string` | | Long description for screen readers (REQ-120). | | `dataTable` | `data_table` | `'visible' \| 'hidden' \| 'none'` | `'hidden'` | Tabular alternative; `hidden` leaves it for assistive technology only (REQ-121). | | `locale` | `locale` | `string` | | | | `numberFormat` | `number_format` | `Intl.NumberFormatOptions` | | | | `className` | `class_name` | `string` | | | ### Every UI component | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `id` | — | `string` | | The frame variant and every related id derive from it (REQ-307, REQ-329). | | `seed` | `seed` | `Seed` | | Overrides `id` for the frame variant only. | | `ground` | `ground` | `GroundRef` | `'silverpoint'` | Style ground. Defaults to the dashboard's, then the app provider's, or `silverpoint` (REQ-311). | | `substrate` | `substrate` | `SubstrateName` | `'cream'` | Prepared substrate within the ground (REQ-046). | | `mode` | `mode` | `InkMode` | `'ink'` | `ink` by default; `precision` disables inking (REQ-021, REQ-306). | | `palette` | `palette` | `Palette` | | Colours over the ground's, merged over the dashboard's and the provider's (REQ-461, REQ-462). | | `size` | `size` | `UiSize` | `'md'` | Default `'md'`. | | `className` | — | `string` | | Added to the component's root element, after its own classes. | ## Charts: Lines ### LineChart `line-chart`: Spline with an optional dotted baseline series. | Framework | Name | Import | |---|---|---| | React | `LineChart` | `@silverpoint/react/line-chart` | | Vue | `SpLineChart` | `@silverpoint/vue/line-chart` | | Angular | `sp-line-chart` | `@silverpoint/angular/line-chart` | | Reflex | `line_chart` | `reflex_silverpoint_react` | - Data shape: `series`; fields: x → `xKey` (string), value → `valueKey` (number), secondary → `secondaryKey` (number, optional) - Intents: trend, change, compare - Demo dataset: `LINE_CHART_DEMO` - Demo rows: `[{"hour": "00", "hits": 18, "baseline": 22}, {"hour": "02", "hits": 14, "baseline": 18}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `secondaryKey` | `secondary_key` | `Accessor` | | Ignored without `data`. | | `curve` | `curve` | `LineCurve` | `'monotone'` | | | `series` | `series` | `'all' \| 'primary'` | `'all'` | `all` draws the secondary series when there is one; `primary` omits it. | | `connectNulls` | `connect_nulls` | `boolean` | `false` | Whether a gap left by a missing value is bridged (REQ-008). | ### StepChart `step-chart`: A series drawn as steps. | Framework | Name | Import | |---|---|---| | React | `StepChart` | `@silverpoint/react/step-chart` | | Vue | `SpStepChart` | `@silverpoint/vue/step-chart` | | Angular | `sp-step-chart` | `@silverpoint/angular/step-chart` | | Reflex | `step_chart` | `reflex_silverpoint_react` | - Data shape: `series`; fields: x → `xKey` (string), value → `valueKey` (number) - Intents: trend, change - Demo dataset: `STEP_CHART_DEMO` - Demo rows: `[{"x": "Jan", "value": 12}, {"x": "Feb", "value": 12}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `step` | `step` | `'after' \| 'before' \| 'middle'` | `'after'` | Where the step sits between two points; `after` by default. | ### SparklineRows `sparkline-rows`: One row per series — name, sparkline, readout. | Framework | Name | Import | |---|---|---| | React | `SparklineRows` | `@silverpoint/react/sparkline-rows` | | Vue | `SpSparklineRows` | `@silverpoint/vue/sparkline-rows` | | Angular | `sp-sparkline-rows` | `@silverpoint/angular/sparkline-rows` | | Reflex | `sparkline_rows` | `reflex_silverpoint_react` | - Data shape: `series`; fields: name → `nameKey` (string), points → `seriesKey` (array), point → `pointKey` (number, optional), readout → `readoutKey` (string, optional) - Intents: trend, compare, kpi - Demo dataset: `SPARKLINE_ROWS_DEMO` - Demo rows: `[{"name": "API", "readout": "99.9%", "points": [98, 99, 99, 97, 99, 100, 99, 100]}, {"name": "Queue", "points": [12, 18, 15, 22, 19, 25, 21, 17]}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `rows` | `rows` | `number` | | Rows shown, from the first; all by default. | | `nameKey` | `name_key` | `Accessor` | `'name'` | Ignored without `data`. | | `readoutKey` | `readout_key` | `Accessor` | `'readout'` | The printed readout; the last value of the series by default. Ignored without `data`. | | `seriesKey` | `series_key` | `Accessor` | `'points'` | The row's points: an array. Ignored without `data`. | | `pointKey` | `point_key` | `Accessor` | | The value of one point; the point itself when it is a number, else its `value`. Ignored without `data`. | ### KpiCard `kpi-card`: A metric, its delta, and an area sparkline of the series. | Framework | Name | Import | |---|---|---| | React | `KpiCard` | `@silverpoint/react/kpi-card` | | Vue | `SpKpiCard` | `@silverpoint/vue/kpi-card` | | Angular | `sp-kpi-card` | `@silverpoint/angular/kpi-card` | | Reflex | `kpi_card` | `reflex_silverpoint_react` | - Data shape: `single`; fields: value → `valueKey` (number) - Intents: kpi, change - Demo dataset: `KPI_CARD_DEMO` - Demo rows: `[{"value": 118}, {"value": 124}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `metric` | `metric` | `string` | | The metric's name, printed under the figure. | | `delta` | `delta` | `number` | | Signed change, printed with its sign and a direction mark. | | `deltaTone` | `delta_tone` | `'up' \| 'down' \| 'flat'` | `delta` | Direction of the mark; from the sign of `delta` by default. | ## Charts: Bars ### BulletChart `bullet-chart`: One bar per target, with a marker at the target. Values in 0-100. | Framework | Name | Import | |---|---|---| | React | `BulletChart` | `@silverpoint/react/bullet-chart` | | Vue | `SpBulletChart` | `@silverpoint/vue/bullet-chart` | | Angular | `sp-bullet-chart` | `@silverpoint/angular/bullet-chart` | | Reflex | `bullet_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: title → `titleKey` (string), actual → `actualKey` (number), target → `targetKey` (number) - Intents: progress, kpi, compare - Demo dataset: `BULLET_CHART_DEMO` - Demo rows: `[{"title": "Revenue", "actual": 72, "target": 80}, {"title": "Profit", "actual": 58, "target": 65}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `titleKey` | `title_key` | `Accessor` | `'title'` | Ignored without `data`. | | `actualKey` | `actual_key` | `Accessor` | `'actual'` | Ignored without `data`. | | `targetKey` | `target_key` | `Accessor` | `'target'` | Ignored without `data`. | ### PyramidChart `pyramid-chart`: Stacked tiers whose width encodes the value (0-100). | Framework | Name | Import | |---|---|---| | React | `PyramidChart` | `@silverpoint/react/pyramid-chart` | | Vue | `SpPyramidChart` | `@silverpoint/vue/pyramid-chart` | | Angular | `sp-pyramid-chart` | `@silverpoint/angular/pyramid-chart` | | Reflex | `pyramid_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: label → `labelKey` (string), width → `widthKey` (number), tone → `toneKey` (number, optional) - Intents: rank, compare - Demo dataset: `PYRAMID_CHART_DEMO` - Demo rows: `[{"label": "Leads", "width": 18}, {"label": "Managers", "width": 42}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `labelKey` | `label_key` | `Accessor` | `'label'` | Ignored without `data`. | | `widthKey` | `width_key` | `Accessor` | `'width'` | Ignored without `data`. | | `toneKey` | `tone_key` | `Accessor` | | Ignored without `data`. | ### BarChart `bar-chart`: Pill bars, as columns or rows, with an optional second series. | Framework | Name | Import | |---|---|---| | React | `BarChart` | `@silverpoint/react/bar-chart` | | Vue | `SpBarChart` | `@silverpoint/vue/bar-chart` | | Angular | `sp-bar-chart` | `@silverpoint/angular/bar-chart` | | Reflex | `bar_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: x → `xKey` (string), value → `valueKey` (number), secondary → `secondaryKey` (number, optional) - Intents: compare, rank - Demo dataset: `BAR_CHART_DEMO` - Demo rows: `[{"x": "Q1", "value": 42, "previous": 35}, {"x": "Q2", "value": 58, "previous": 44}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `secondaryKey` | `secondary_key` | `Accessor` | | Ignored without `data`. | | `orientation` | `orientation` | `'columns' \| 'rows'` | | | ### StackedBarChart `stacked-bar-chart`: One stacked segment per key. | Framework | Name | Import | |---|---|---| | React | `StackedBarChart` | `@silverpoint/react/stacked-bar-chart` | | Vue | `SpStackedBarChart` | `@silverpoint/vue/stacked-bar-chart` | | Angular | `sp-stacked-bar-chart` | `@silverpoint/angular/stacked-bar-chart` | | Reflex | `stacked_bar_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: x → `xKey` (string), values → `keys` (number) - Intents: compare, part-to-whole - Demo dataset: `STACKED_BAR_CHART_DEMO` - Demo rows: `[{"x": "Jan", "free": 40, "pro": 18, "team": 6}, {"x": "Feb", "free": 46, "pro": 21, "team": 9}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `keys` | `keys` | `readonly string[]` | | Ignored without `data`. | | `names` | `names` | `readonly string[]` | | Display names of the keys, in order; the keys themselves by default. Ignored without `data`. | ### ComposedChart `composed-chart`: Columns and a spline on one value scale. | Framework | Name | Import | |---|---|---| | React | `ComposedChart` | `@silverpoint/react/composed-chart` | | Vue | `SpComposedChart` | `@silverpoint/vue/composed-chart` | | Angular | `sp-composed-chart` | `@silverpoint/angular/composed-chart` | | Reflex | `composed_chart` | `reflex_silverpoint_react` | - Data shape: `series`; fields: x → `xKey` (string), bar → `barKey` (number), line → `lineKey` (number, optional) - Intents: compare, trend - Demo dataset: `COMPOSED_CHART_DEMO` - Demo rows: `[{"x": "Jan", "revenue": 42, "margin": 18}, {"x": "Feb", "revenue": 48, "margin": 21}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `barKey` | `bar_key` | `Accessor` | `'bar'` | Ignored without `data`. | | `lineKey` | `line_key` | `Accessor` | `'line'` | Ignored without `data`. | | `showLine` | `show_line` | `boolean` | `true` | | ### WaterfallChart `waterfall-chart`: Totals from zero and floating deltas from the running total. | Framework | Name | Import | |---|---|---| | React | `WaterfallChart` | `@silverpoint/react/waterfall-chart` | | Vue | `SpWaterfallChart` | `@silverpoint/vue/waterfall-chart` | | Angular | `sp-waterfall-chart` | `@silverpoint/angular/waterfall-chart` | | Reflex | `waterfall_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: step → `stepKey` (string), base → `baseKey` (number, optional), delta → `deltaKey` (number, optional) - Intents: change, part-to-whole - Demo dataset: `WATERFALL_CHART_DEMO` - Demo rows: `[{"step": "Opening", "base": 120}, {"step": "Sales", "delta": 64}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `stepKey` | `step_key` | `Accessor` | `'step'` | Ignored without `data`. | | `baseKey` | `base_key` | `Accessor` | `'base'` | An absolute total: the bar starts at zero and resets the running total. Ignored without `data`. | | `deltaKey` | `delta_key` | `Accessor` | `'delta'` | A change from the running total. Ignored without `data`. | ### FunnelChart `funnel-chart`: Horizontal, centred stages. | Framework | Name | Import | |---|---|---| | React | `FunnelChart` | `@silverpoint/react/funnel-chart` | | Vue | `SpFunnelChart` | `@silverpoint/vue/funnel-chart` | | Angular | `sp-funnel-chart` | `@silverpoint/angular/funnel-chart` | | Reflex | `funnel_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: stage → `stageKey` (string), value → `valueKey` (number) - Intents: progress, compare - Demo dataset: `FUNNEL_CHART_DEMO` - Demo rows: `[{"stage": "Visits", "value": 12400}, {"stage": "Product", "value": 6800}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `stageKey` | `stage_key` | `Accessor` | `'stage'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | ### CandlestickChart `candlestick-chart`: OHLC bodies and wicks. | Framework | Name | Import | |---|---|---| | React | `CandlestickChart` | `@silverpoint/react/candlestick-chart` | | Vue | `SpCandlestickChart` | `@silverpoint/vue/candlestick-chart` | | Angular | `sp-candlestick-chart` | `@silverpoint/angular/candlestick-chart` | | Reflex | `candlestick_chart` | `reflex_silverpoint_react` | - Data shape: `intervals`; fields: time → `timeKey` (string), open → `openKey` (number), high → `highKey` (number), low → `lowKey` (number), close → `closeKey` (number) - Intents: change, trend - Demo dataset: `CANDLESTICK_CHART_DEMO` - Demo rows: `[{"time": "Mon", "open": 102, "high": 108, "low": 99, "close": 106}, {"time": "Tue", "open": 106, "high": 109, "low": 101, "close": 103}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `timeKey` | `time_key` | `Accessor` | `'time'` | Ignored without `data`. | | `openKey` | `open_key` | `Accessor` | `'open'` | Ignored without `data`. | | `highKey` | `high_key` | `Accessor` | `'high'` | Ignored without `data`. | | `lowKey` | `low_key` | `Accessor` | `'low'` | Ignored without `data`. | | `closeKey` | `close_key` | `Accessor` | `'close'` | Ignored without `data`. | | `bounds` | `bounds` | `readonly [number, number]` | | Price bounds of the scale; derived from the data when omitted (REQ-097). | ## Charts: Areas ### AreaChart `area-chart`: A curved, toned area under its line. | Framework | Name | Import | |---|---|---| | React | `AreaChart` | `@silverpoint/react/area-chart` | | Vue | `SpAreaChart` | `@silverpoint/vue/area-chart` | | Angular | `sp-area-chart` | `@silverpoint/angular/area-chart` | | Reflex | `area_chart` | `reflex_silverpoint_react` | - Data shape: `series`; fields: x → `xKey` (string), value → `valueKey` (number) - Intents: trend, change - Demo dataset: `AREA_CHART_DEMO` - Demo rows: `[{"x": "Mon", "value": 32}, {"x": "Tue", "value": 45}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `curve` | `curve` | `LineCurve` | `'monotone'` | | ### RangeBandChart `range-band-chart`: The band between a low and a high series. | Framework | Name | Import | |---|---|---| | React | `RangeBandChart` | `@silverpoint/react/range-band-chart` | | Vue | `SpRangeBandChart` | `@silverpoint/vue/range-band-chart` | | Angular | `sp-range-band-chart` | `@silverpoint/angular/range-band-chart` | | Reflex | `range_band_chart` | `reflex_silverpoint_react` | - Data shape: `intervals`; fields: x → `xKey` (string), low → `lowKey` (number), high → `highKey` (number) - Intents: uncertainty, trend - Demo dataset: `RANGE_BAND_CHART_DEMO` - Demo rows: `[{"x": "Mon", "low": 11, "high": 19}, {"x": "Tue", "low": 12, "high": 22}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `lowKey` | `low_key` | `Accessor` | `'low'` | Ignored without `data`. | | `highKey` | `high_key` | `Accessor` | `'high'` | Ignored without `data`. | ### StreamChart `stream-chart`: Two waves, overlaid or stacked. | Framework | Name | Import | |---|---|---| | React | `StreamChart` | `@silverpoint/react/stream-chart` | | Vue | `SpStreamChart` | `@silverpoint/vue/stream-chart` | | Angular | `sp-stream-chart` | `@silverpoint/angular/stream-chart` | | Reflex | `stream_chart` | `reflex_silverpoint_react` | - Data shape: `series`; fields: x → `xKey` (string), values → `keys` (number) - Intents: trend, part-to-whole, compare - Demo dataset: `STREAM_CHART_DEMO` - Demo rows: `[{"x": "Mon", "organic": 22, "paid": 14}, {"x": "Tue", "organic": 28, "paid": 18}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `keys` | `keys` | `readonly string[]` | | Ignored without `data`. | | `stacked` | `stacked` | `boolean` | `false` | | ## Charts: Points & grids ### HeatmapChart `heatmap-chart`: Labelled rows of values, normalised against `scaleMax`. | Framework | Name | Import | |---|---|---| | React | `HeatmapChart` | `@silverpoint/react/heatmap-chart` | | Vue | `SpHeatmapChart` | `@silverpoint/vue/heatmap-chart` | | Angular | `sp-heatmap-chart` | `@silverpoint/angular/heatmap-chart` | | Reflex | `heatmap_chart` | `reflex_silverpoint_react` | - Data shape: `matrix`; fields: label → `labelKey` (string), values → `valuesKey` (array) - Intents: compare, distribution - Demo dataset: `HEATMAP_CHART_DEMO` - Demo rows: `[{"label": "Mon", "values": [12, 34, 58, 71, 66, 40]}, {"label": "Tue", "values": [18, 42, 77, 88, 70, 35]}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `labelKey` | `label_key` | `Accessor` | `'label'` | Ignored without `data`. | | `valuesKey` | `values_key` | `Accessor` | `'values'` | Ignored without `data`. | | `scaleMax` | `scale_max` | `number` | `100` | Value that maps to the darkest tone; 100 by default. | | `columnLabels` | `column_labels` | `readonly string[]` | | Names of the columns, in order; missing ones fall back to `#k` (delta-006). | ### TreemapChart `treemap-chart`: Tiles of `cols × rows` cells placed in a `columns × rows` grid. | Framework | Name | Import | |---|---|---| | React | `TreemapChart` | `@silverpoint/react/treemap-chart` | | Vue | `SpTreemapChart` | `@silverpoint/vue/treemap-chart` | | Angular | `sp-treemap-chart` | `@silverpoint/angular/treemap-chart` | | Reflex | `treemap_chart` | `reflex_silverpoint_react` | - Data shape: `parts`; fields: label → `labelKey` (string), share → `shareKey` (number) - Intents: part-to-whole - Demo dataset: `TREEMAP_CHART_DEMO` - Demo rows: `[{"label": "Search", "share": 48, "cols": 3, "rows": 4}, {"label": "Direct", "share": 26, "cols": 3, "rows": 2}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `labelKey` | `label_key` | `Accessor` | `'label'` | Ignored without `data`. | | `shareKey` | `share_key` | `Accessor` | `'share'` | Ignored without `data`. | | `columns` | `columns` | `number` | | | | `rows` | `rows` | `number` | | | ### ActivityGrid `activity-grid`: One cell per day, a column per week. | Framework | Name | Import | |---|---|---| | React | `ActivityGrid` | `@silverpoint/react/activity-grid` | | Vue | `SpActivityGrid` | `@silverpoint/vue/activity-grid` | | Angular | `sp-activity-grid` | `@silverpoint/angular/activity-grid` | | Reflex | `activity_grid` | `reflex_silverpoint_react` | - Data shape: `events`; fields: date → `dateKey` (date), count → `countKey` (number, optional), level → `levelKey` (number, optional) - Intents: schedule, trend - Demo dataset: `ACTIVITY_GRID_DEMO` - Demo rows: `[{"date": "2025-12-31", "count": 1, "level": 1}, {"date": "2026-01-01", "count": 0, "level": 0}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `dateKey` | `date_key` | `Accessor` | `'date'` | Ignored without `data`. | | `countKey` | `count_key` | `Accessor` | `'count'` | Ignored without `data`. | | `levelKey` | `level_key` | `Accessor` | `'level'` | Ignored without `data`. | | `weeks` | `weeks` | `number` | `26` | Weeks shown, the most recent last; 26 by default. | ### ScatterChart `scatter-chart`: Points on two linear scales, optionally sized. | Framework | Name | Import | |---|---|---| | React | `ScatterChart` | `@silverpoint/react/scatter-chart` | | Vue | `SpScatterChart` | `@silverpoint/vue/scatter-chart` | | Angular | `sp-scatter-chart` | `@silverpoint/angular/scatter-chart` | | Reflex | `scatter_chart` | `reflex_silverpoint_react` | - Data shape: `points`; fields: x → `xKey` (number), y → `yKey` (number), size → `sizeKey` (number, optional) - Intents: correlation, distribution - Demo dataset: `SCATTER_CHART_DEMO` - Demo rows: `[{"x": 152, "y": 51, "size": 2}, {"x": 158, "y": 56, "size": 4}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | | Ignored without `data`. | | `yKey` | `y_key` | `Accessor` | | Ignored without `data`. | | `sizeKey` | `size_key` | `Accessor` | | Ignored without `data`. | | `sizeRange` | `size_range` | `readonly [number, number]` | `[60, 240]` | Marker area in px², smallest to largest; `[60, 240]` by default. | ### BubbleChart `bubble-chart`: Circles whose area encodes `sizeKey`. | Framework | Name | Import | |---|---|---| | React | `BubbleChart` | `@silverpoint/react/bubble-chart` | | Vue | `SpBubbleChart` | `@silverpoint/vue/bubble-chart` | | Angular | `sp-bubble-chart` | `@silverpoint/angular/bubble-chart` | | Reflex | `bubble_chart` | `reflex_silverpoint_react` | - Data shape: `points`; fields: x → `xKey` (number), y → `yKey` (number), size → `sizeKey` (number) - Intents: correlation, compare - Demo dataset: `BUBBLE_CHART_DEMO` - Demo rows: `[{"x": 2, "y": 18, "size": 40}, {"x": 5, "y": 24, "size": 120}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | | Ignored without `data`. | | `yKey` | `y_key` | `Accessor` | | Ignored without `data`. | | `sizeKey` | `size_key` | `Accessor` | | Ignored without `data`. | | `sizeRange` | `size_range` | `readonly [number, number]` | `[100, 500]` | Circle area in px², smallest to largest; `[100, 500]` by default. | ## Charts: Flows ### SankeyChart `sankey-chart`: Flow bands between layered nodes. | Framework | Name | Import | |---|---|---| | React | `SankeyChart` | `@silverpoint/react/sankey-chart` | | Vue | `SpSankeyChart` | `@silverpoint/vue/sankey-chart` | | Angular | `sp-sankey-chart` | `@silverpoint/angular/sankey-chart` | | Reflex | `sankey_chart` | `reflex_silverpoint_react` | - Data shape: `links`; fields: source → `sourceKey` (string), target → `targetKey` (string), value → `valueKey` (number) - Intents: flow, part-to-whole - Demo dataset: `SANKEY_CHART_DEMO` - Demo rows: `[{"source": "Search", "target": "Visit", "value": 48}, {"source": "Social", "target": "Visit", "value": 27}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `sourceKey` | `source_key` | `Accessor` | `'source'` | Ignored without `data`. | | `targetKey` | `target_key` | `Accessor` | `'target'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | ### ChordRing `chord-ring`: Directed flows between categories around a circle. | Framework | Name | Import | |---|---|---| | React | `ChordRing` | `@silverpoint/react/chord-ring` | | Vue | `SpChordRing` | `@silverpoint/vue/chord-ring` | | Angular | `sp-chord-ring` | `@silverpoint/angular/chord-ring` | | Reflex | `chord_ring` | `reflex_silverpoint_react` | - Data shape: `links`; fields: source → `sourceKey` (string), target → `targetKey` (string), value → `valueKey` (number) - Intents: flow, network - Demo dataset: `CHORD_RING_DEMO` - Demo rows: `[{"source": "Home", "target": "Shop", "value": 42}, {"source": "Home", "target": "Blog", "value": 28}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `sourceKey` | `source_key` | `Accessor` | `'source'` | Ignored without `data`. | | `targetKey` | `target_key` | `Accessor` | `'target'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `maxCategories` | `max_categories` | `number` | `12` | Categories drawn; past it the smallest merge into "Other" (`SP010`). 12 by default. | ## Charts: Radial ### DonutChart `donut-chart`: Sectors ∝ value around a central readout. | Framework | Name | Import | |---|---|---| | React | `DonutChart` | `@silverpoint/react/donut-chart` | | Vue | `SpDonutChart` | `@silverpoint/vue/donut-chart` | | Angular | `sp-donut-chart` | `@silverpoint/angular/donut-chart` | | Reflex | `donut_chart` | `reflex_silverpoint_react` | - Data shape: `parts`; fields: name → `nameKey` (string), value → `valueKey` (number) - Intents: part-to-whole - Demo dataset: `DONUT_CHART_DEMO` - Demo rows: `[{"name": "Rent", "value": 38}, {"name": "Food", "value": 22}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `nameKey` | `name_key` | `Accessor` | `'name'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `centerValue` | `center_value` | `string \| number` | | Printed in the centre; the total by default. | | `centerLabel` | `center_label` | `string` | | A line under the centre value. | | `legend` | `legend` | `boolean` | `true` | Names every sector with its share beside the ring; `true` by default. | ### RadarChart `radar-chart`: One spoke per subject, a closed polygon of values. | Framework | Name | Import | |---|---|---| | React | `RadarChart` | `@silverpoint/react/radar-chart` | | Vue | `SpRadarChart` | `@silverpoint/vue/radar-chart` | | Angular | `sp-radar-chart` | `@silverpoint/angular/radar-chart` | | Reflex | `radar_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: subject → `subjectKey` (string), value → `valueKey` (number) - Intents: compare - Demo dataset: `RADAR_CHART_DEMO` - Demo rows: `[{"subject": "Speed", "value": 8}, {"subject": "Range", "value": 6}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `subjectKey` | `subject_key` | `Accessor` | `'subject'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `domain` | `domain` | `readonly [number, number]` | | The value range along a spoke; `[0, the largest value]`, niced, by default. | ### PolarBarChart `polar-bar-chart`: 360° bars out from a hole, length ∝ value. | Framework | Name | Import | |---|---|---| | React | `PolarBarChart` | `@silverpoint/react/polar-bar-chart` | | Vue | `SpPolarBarChart` | `@silverpoint/vue/polar-bar-chart` | | Angular | `sp-polar-bar-chart` | `@silverpoint/angular/polar-bar-chart` | | Reflex | `polar_bar_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: name → `nameKey` (string), value → `valueKey` (number) - Intents: compare, rank - Demo dataset: `POLAR_BAR_CHART_DEMO` - Demo rows: `[{"name": "Jan", "value": 32}, {"name": "Feb", "value": 28}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `nameKey` | `name_key` | `Accessor` | `'name'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | ### RadialArcGroup `radial-arc-group`: Concentric 180° tracks, sweep ∝ value / the largest. | Framework | Name | Import | |---|---|---| | React | `RadialArcGroup` | `@silverpoint/react/radial-arc-group` | | Vue | `SpRadialArcGroup` | `@silverpoint/vue/radial-arc-group` | | Angular | `sp-radial-arc-group` | `@silverpoint/angular/radial-arc-group` | | Reflex | `radial_arc_group` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: name → `nameKey` (string), value → `valueKey` (number) - Intents: compare, progress - Demo dataset: `RADIAL_ARC_GROUP_DEMO` - Demo rows: `[{"name": "Direct", "value": 84}, {"name": "Partners", "value": 62}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `nameKey` | `name_key` | `Accessor` | | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | | Ignored without `data`. | ### RadialRings `radial-rings`: Concentric progress rings, sweep ∝ value in 0-100. | Framework | Name | Import | |---|---|---| | React | `RadialRings` | `@silverpoint/react/radial-rings` | | Vue | `SpRadialRings` | `@silverpoint/vue/radial-rings` | | Angular | `sp-radial-rings` | `@silverpoint/angular/radial-rings` | | Reflex | `radial_rings` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: name → `nameKey` (string), value → `valueKey` (number) - Intents: progress - Demo dataset: `RADIAL_RINGS_DEMO` - Demo rows: `[{"name": "Move", "value": 82}, {"name": "Exercise", "value": 64}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `nameKey` | `name_key` | `Accessor` | | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | | Ignored without `data`. | ### GaugeArc `gauge-arc`: A 240° arc swept to a percent. | Framework | Name | Import | |---|---|---| | React | `GaugeArc` | `@silverpoint/react/gauge-arc` | | Vue | `SpGaugeArc` | `@silverpoint/vue/gauge-arc` | | Angular | `sp-gauge-arc` | `@silverpoint/angular/gauge-arc` | | Reflex | `gauge_arc` | `reflex_silverpoint_react` | - Data shape: `single`; fields: none - Intents: kpi, progress | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `percent` | `percent` | `number` | | 0 to 100; saturated at the ends outside it. | | `caption` | `caption` | `string` | | Names the measure under the readout. | | `readout` | `readout` | `string` | | Printed in place of the percent. | ### MeterChart `meter-chart`: A semicircular meter with a needle at a percent. | Framework | Name | Import | |---|---|---| | React | `MeterChart` | `@silverpoint/react/meter-chart` | | Vue | `SpMeterChart` | `@silverpoint/vue/meter-chart` | | Angular | `sp-meter-chart` | `@silverpoint/angular/meter-chart` | | Reflex | `meter_chart` | `reflex_silverpoint_react` | - Data shape: `single`; fields: none - Intents: kpi, progress | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `percent` | `percent` | `number` | | 0 to 100; saturated at the ends outside it. | | `caption` | `caption` | `string` | | Names the measure under the readout. | | `readout` | `readout` | `string` | | Printed in place of the percent. | ### CoxcombChart `coxcomb-chart`: Equal angles, sector area ∝ value. | Framework | Name | Import | |---|---|---| | React | `CoxcombChart` | `@silverpoint/react/coxcomb-chart` | | Vue | `SpCoxcombChart` | `@silverpoint/vue/coxcomb-chart` | | Angular | `sp-coxcomb-chart` | `@silverpoint/angular/coxcomb-chart` | | Reflex | `coxcomb_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: name → `nameKey` (string), value → `valueKey` (number) - Intents: compare, part-to-whole - Demo dataset: `COXCOMB_CHART_DEMO` - Demo rows: `[{"name": "Mon", "value": 42}, {"name": "Tue", "value": 35}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `nameKey` | `name_key` | `Accessor` | `'name'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `startAngle` | `start_angle` | `number` | `0` | Where the first sector starts, in degrees clockwise from 12 o'clock; 0 by default. | ### WindRose `wind-rose`: Observations of (bearing, speed) binned by compass sector and speed. | Framework | Name | Import | |---|---|---| | React | `WindRose` | `@silverpoint/react/wind-rose` | | Vue | `SpWindRose` | `@silverpoint/vue/wind-rose` | | Angular | `sp-wind-rose` | `@silverpoint/angular/wind-rose` | | Reflex | `wind_rose` | `reflex_silverpoint_react` | - Data shape: `distribution`; fields: bearing → `bearingKey` (number), value → `valueKey` (number) - Intents: distribution - Demo dataset: `WIND_ROSE_DEMO` - Demo rows: `[{"bearing": 180, "speed": 11}, {"bearing": 170, "speed": 11}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `bearingKey` | `bearing_key` | `Accessor` | `'bearing'` | Where the wind blows from, in degrees clockwise from north. Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'speed'` | The wind speed; 0 is a calm, which has no direction. Ignored without `data`. | | `sectors` | `sectors` | `number` | `16` | Compass sectors: 4, 8, 16 or 32; 16 by default. | | `bins` | `bins` | `readonly number[]` | `[5, 10, 15, 20]` | Ascending speed thresholds that split each sector; `[5, 10, 15, 20]` by default. | ### VolvelleChart `volvelle-chart`: Concentric categorical rings read against one index. | Framework | Name | Import | |---|---|---| | React | `VolvelleChart` | `@silverpoint/react/volvelle-chart` | | Vue | `SpVolvelleChart` | `@silverpoint/vue/volvelle-chart` | | Angular | `sp-volvelle-chart` | `@silverpoint/angular/volvelle-chart` | | Reflex | `volvelle_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: none - Intents: schedule, compare - Demo dataset: `VOLVELLE_CHART_DEMO` - Demo rows: `[{"label": "Day", "segments": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]}, {"label": "Shift", "segments": ["Early", "Late", "Night"]}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `rings` | `rings` | `number` | | Rings shown, from the inside out; all by default. | | `indexRing` | `index_ring` | `number` | `0` | The ring whose segment is brought under the index, 0-based; 0 by default. Without `data`, it addresses the demo’s rings: `Day`, `Shift`, `Team`. | | `indexValue` | `index_value` | `string` | | The segment of `indexRing` under the index; its first segment by default. Without `data`, it addresses the demo’s rings: `Day`, `Shift`, `Team`. | ### OrbitChart `orbit-chart`: Nested elliptical orbits with markers along them. | Framework | Name | Import | |---|---|---| | React | `OrbitChart` | `@silverpoint/react/orbit-chart` | | Vue | `SpOrbitChart` | `@silverpoint/vue/orbit-chart` | | Angular | `sp-orbit-chart` | `@silverpoint/angular/orbit-chart` | | Reflex | `orbit_chart` | `reflex_silverpoint_react` | - Data shape: `events`; fields: markers → `markerKey` (array), period → `periodKey` (number) - Intents: schedule - Demo dataset: `ORBIT_CHART_DEMO` - Demo rows: `[{"label": "2023", "markers": [{"period": 0.08, "value": 12}, {"period": 0.33, "value": 30}, {"period": 0.61, "value": 18}, {"period": 0.9, "value": 24}]}, {"label": "2024", "markers": [{"period": 0.12, "value": 20}, {"period": 0.4, "value": 42}, {"period": 0.66, "value": 15}, {"period": 0.87, "value": 33}]}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `orbits` | `orbits` | `number` | | Orbits shown, from the inside out; all by default. | | `markerKey` | `marker_key` | `Accessor` | `'markers'` | A row's markers; `'markers'` by default. Ignored without `data`. | | `periodKey` | `period_key` | `Accessor` | `'period'` | A marker's period, 0-1 over the cycle; `'period'` by default. Ignored without `data`. | ## Charts: Distributions & comparisons ### HistogramChart `histogram-chart`: Raw observations binned in the core. | Framework | Name | Import | |---|---|---| | React | `HistogramChart` | `@silverpoint/react/histogram-chart` | | Vue | `SpHistogramChart` | `@silverpoint/vue/histogram-chart` | | Angular | `sp-histogram-chart` | `@silverpoint/angular/histogram-chart` | | Reflex | `histogram_chart` | `reflex_silverpoint_react` | - Data shape: `distribution`; fields: value → `valueKey` (number) - Intents: distribution - Demo dataset: `HISTOGRAM_CHART_DEMO` - Demo rows: `[{"reader": "R001", "device": "desktop", "minutes": 4}, {"reader": "R002", "device": "phone", "minutes": 17}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `bins` | `bins` | `number \| readonly number[]` | | A number asks for that many equal-width bins over the niced extent; an array gives the thresholds, increasing. Freedman–Diaconis by default, Sturges when the IQR is 0 (REQ-432). | | `cumulative` | `cumulative` | `boolean` | | Turns the counts into a running total. | | `orientation` | `orientation` | `ChartOrientation` | | | ### EcdfChart `ecdf-chart`: The empirical cumulative distribution as a step function. | Framework | Name | Import | |---|---|---| | React | `EcdfChart` | `@silverpoint/react/ecdf-chart` | | Vue | `SpEcdfChart` | `@silverpoint/vue/ecdf-chart` | | Angular | `sp-ecdf-chart` | `@silverpoint/angular/ecdf-chart` | | Reflex | `ecdf_chart` | `reflex_silverpoint_react` | - Data shape: `distribution`; fields: value → `valueKey` (number), group → `groupKey` (string, optional) - Intents: distribution, compare - Demo dataset: `ECDF_CHART_DEMO` - Demo rows: `[{"reader": "R001", "device": "desktop", "minutes": 4}, {"reader": "R002", "device": "phone", "minutes": 17}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `groupKey` | `group_key` | `Accessor` | | Two groups at most are drawn. Ignored without `data`. | | `markers` | `markers` | `readonly number[]` | | Quantiles, in 0-1, drawn as rules. | ### BoxPlotChart `box-plot-chart`: Quartiles, median, Tukey whiskers and outliers per group. | Framework | Name | Import | |---|---|---| | React | `BoxPlotChart` | `@silverpoint/react/box-plot-chart` | | Vue | `SpBoxPlotChart` | `@silverpoint/vue/box-plot-chart` | | Angular | `sp-box-plot-chart` | `@silverpoint/angular/box-plot-chart` | | Reflex | `box_plot_chart` | `reflex_silverpoint_react` | - Data shape: `distribution`; fields: value → `valueKey` (number), group → `groupKey` (string, optional) - Intents: distribution, compare - Demo dataset: `BOX_PLOT_CHART_DEMO` - Demo rows: `[{"service": "Search", "ms": 220}, {"service": "Search", "ms": 177}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `valueKey` | `value_key` | `Accessor` | | Ignored without `data`. | | `groupKey` | `group_key` | `Accessor` | | Ignored without `data`. | | `whisker` | `whisker` | `number` | `1.5` | Whisker reach as a multiple of the IQR; 1.5 by default (REQ-432). | | `outliers` | `outliers` | `boolean` | `true` | Draws the observations past the whiskers; `true` by default. | | `orientation` | `orientation` | `ChartOrientation` | | | ### ViolinChart `violin-chart`: A mirrored kernel density per group. | Framework | Name | Import | |---|---|---| | React | `ViolinChart` | `@silverpoint/react/violin-chart` | | Vue | `SpViolinChart` | `@silverpoint/vue/violin-chart` | | Angular | `sp-violin-chart` | `@silverpoint/angular/violin-chart` | | Reflex | `violin_chart` | `reflex_silverpoint_react` | - Data shape: `distribution`; fields: value → `valueKey` (number), group → `groupKey` (string, optional) - Intents: distribution, compare - Demo dataset: `VIOLIN_CHART_DEMO` - Demo rows: `[{"service": "Search", "ms": 220}, {"service": "Search", "ms": 177}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `valueKey` | `value_key` | `Accessor` | | Ignored without `data`. | | `groupKey` | `group_key` | `Accessor` | | Ignored without `data`. | | `bandwidth` | `bandwidth` | `number` | | Kernel bandwidth in data units, shared by every group; Silverman's rule by default. | | `quartiles` | `quartiles` | `boolean` | `true` | Marks the quartiles inside each violin; `true` by default. | | `orientation` | `orientation` | `ChartOrientation` | | | ### RidgelineChart `ridgeline-chart`: A kernel density per group on overlapping baselines. | Framework | Name | Import | |---|---|---| | React | `RidgelineChart` | `@silverpoint/react/ridgeline-chart` | | Vue | `SpRidgelineChart` | `@silverpoint/vue/ridgeline-chart` | | Angular | `sp-ridgeline-chart` | `@silverpoint/angular/ridgeline-chart` | | Reflex | `ridgeline_chart` | `reflex_silverpoint_react` | - Data shape: `distribution`; fields: value → `valueKey` (number), group → `groupKey` (string) - Intents: distribution, compare, change - Demo dataset: `RIDGELINE_CHART_DEMO` - Demo rows: `[{"service": "Search", "ms": 220}, {"service": "Search", "ms": 177}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `valueKey` | `value_key` | `Accessor` | | Ignored without `data`. | | `groupKey` | `group_key` | `Accessor` | | The group of an observation; one ridge per group. Ignored without `data`. Required. | | `bandwidth` | `bandwidth` | `number` | | Kernel bandwidth in data units, shared by every group; Silverman's rule by default. | | `overlap` | `overlap` | `number` | `0.5` | How far a ridge reaches into the one behind it, 0-1; 0.5 by default. | ### BeeswarmChart `beeswarm-chart`: One point per observation, packed without overlap. | Framework | Name | Import | |---|---|---| | React | `BeeswarmChart` | `@silverpoint/react/beeswarm-chart` | | Vue | `SpBeeswarmChart` | `@silverpoint/vue/beeswarm-chart` | | Angular | `sp-beeswarm-chart` | `@silverpoint/angular/beeswarm-chart` | | Reflex | `beeswarm_chart` | `reflex_silverpoint_react` | - Data shape: `distribution`; fields: value → `valueKey` (number), group → `groupKey` (string, optional), label → `labelKey` (string, optional) - Intents: distribution - Demo dataset: `BEESWARM_CHART_DEMO` - Demo rows: `[{"reader": "R001", "device": "desktop", "minutes": 4}, {"reader": "R002", "device": "phone", "minutes": 17}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `groupKey` | `group_key` | `Accessor` | | Ignored without `data`. | | `labelKey` | `label_key` | `Accessor` | | Names the point in the readout and the table. Ignored without `data`. | | `radius` | `radius` | `number` | `3` | Point radius in px; 3 by default. | ### LollipopChart `lollipop-chart`: A stem from the baseline and a head at the value. | Framework | Name | Import | |---|---|---| | React | `LollipopChart` | `@silverpoint/react/lollipop-chart` | | Vue | `SpLollipopChart` | `@silverpoint/vue/lollipop-chart` | | Angular | `sp-lollipop-chart` | `@silverpoint/angular/lollipop-chart` | | Reflex | `lollipop_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: x → `xKey` (string), value → `valueKey` (number) - Intents: compare, rank - Demo dataset: `LOLLIPOP_CHART_DEMO` - Demo rows: `[{"branch": "Northgate", "loans": 2969}, {"branch": "Riverside Commons", "loans": 2695}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `orientation` | `orientation` | `ChartOrientation` | | | | `sort` | `sort` | `'none' \| 'ascending' \| 'descending'` | | Order of the categories; `none` keeps the data order. | ### DumbbellChart `dumbbell-chart`: Two values per category joined by a segment. | Framework | Name | Import | |---|---|---| | React | `DumbbellChart` | `@silverpoint/react/dumbbell-chart` | | Vue | `SpDumbbellChart` | `@silverpoint/vue/dumbbell-chart` | | Angular | `sp-dumbbell-chart` | `@silverpoint/angular/dumbbell-chart` | | Reflex | `dumbbell_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: label → `labelKey` (string), start → `startKey` (number), end → `endKey` (number) - Intents: change, compare - Demo dataset: `DUMBBELL_CHART_DEMO` - Demo rows: `[{"clinic": "Ashford", "y2024": 59, "y2025": 66}, {"clinic": "Brook Lane", "y2024": 24, "y2025": 30}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `labelKey` | `label_key` | `Accessor` | `'label'` | Ignored without `data`. | | `startKey` | `start_key` | `Accessor` | `'start'` | Ignored without `data`. | | `endKey` | `end_key` | `Accessor` | `'end'` | Ignored without `data`. | | `names` | `names` | `readonly [string, string]` | `['start', 'end']` | Titles of the two values; `['start', 'end']` by default. Ignored without `data`. | | `endMarker` | `end_marker` | `'dot' \| 'arrow'` | | `arrow` encodes the direction from the first value to the second. | | `orientation` | `orientation` | `ChartOrientation` | `rows` | `rows` by default: long category names read across. | ### SlopeChart `slope-chart`: Two period axes, one segment per category. | Framework | Name | Import | |---|---|---| | React | `SlopeChart` | `@silverpoint/react/slope-chart` | | Vue | `SpSlopeChart` | `@silverpoint/vue/slope-chart` | | Angular | `sp-slope-chart` | `@silverpoint/angular/slope-chart` | | Reflex | `slope_chart` | `reflex_silverpoint_react` | - Data shape: `categories`; fields: label → `labelKey` (string), start → `startKey` (number), end → `endKey` (number) - Intents: change, rank - Demo dataset: `SLOPE_CHART_DEMO` - Demo rows: `[{"clinic": "Ashford", "y2024": 59, "y2025": 66}, {"clinic": "Brook Lane", "y2024": 24, "y2025": 30}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `labelKey` | `label_key` | `Accessor` | `'label'` | Ignored without `data`. | | `startKey` | `start_key` | `Accessor` | `'start'` | Ignored without `data`. | | `endKey` | `end_key` | `Accessor` | `'end'` | Ignored without `data`. | | `names` | `names` | `readonly [string, string]` | `['start', 'end']` | Titles of the two periods; `['start', 'end']` by default. Ignored without `data`. | ### BumpChart `bump-chart`: The rank of each series at each x. | Framework | Name | Import | |---|---|---| | React | `BumpChart` | `@silverpoint/react/bump-chart` | | Vue | `SpBumpChart` | `@silverpoint/vue/bump-chart` | | Angular | `sp-bump-chart` | `@silverpoint/angular/bump-chart` | | Reflex | `bump_chart` | `reflex_silverpoint_react` | - Data shape: `series`; fields: x → `xKey` (string), series → `seriesKey` (string), value → `valueKey` (number) - Intents: rank, change - Demo dataset: `BUMP_CHART_DEMO` - Demo rows: `[{"season": 2018, "team": "Kestrel", "points": 57}, {"season": 2018, "team": "Otter", "points": 53}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `seriesKey` | `series_key` | `Accessor` | `'series'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `order` | `order` | `'descending' \| 'ascending'` | `'descending'` | `descending` gives rank 1 to the highest value (the default). | | `series` | `series` | `number` | | Series drawn, the best-ranked first; all by default. | ### ErrorBarChart `error-bar-chart`: A point estimate with its interval per category. | Framework | Name | Import | |---|---|---| | React | `ErrorBarChart` | `@silverpoint/react/error-bar-chart` | | Vue | `SpErrorBarChart` | `@silverpoint/vue/error-bar-chart` | | Angular | `sp-error-bar-chart` | `@silverpoint/angular/error-bar-chart` | | Reflex | `error_bar_chart` | `reflex_silverpoint_react` | - Data shape: `intervals`; fields: label → `labelKey` (string), estimate → `estimateKey` (number), low → `lowKey` (number), high → `highKey` (number) - Intents: uncertainty, compare - Demo dataset: `ERROR_BAR_CHART_DEMO` - Demo rows: `[{"arm": "Arm A", "effect": 1.61, "low": 1.01, "high": 2.07}, {"arm": "Arm B", "effect": 0.2, "low": -0.16, "high": 1.04}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `labelKey` | `label_key` | `Accessor` | `'label'` | Ignored without `data`. | | `estimateKey` | `estimate_key` | `Accessor` | `'estimate'` | Ignored without `data`. | | `lowKey` | `low_key` | `Accessor` | `'low'` | Ignored without `data`. | | `highKey` | `high_key` | `Accessor` | `'high'` | Ignored without `data`. | | `reference` | `reference` | `number` | | A reference value drawn as a dotted rule. | | `orientation` | `orientation` | `ChartOrientation` | `rows` | `rows` by default, as a forest plot reads. | ### IntervalChart `interval-chart`: Floating bars from start to end on lanes. | Framework | Name | Import | |---|---|---| | React | `IntervalChart` | `@silverpoint/react/interval-chart` | | Vue | `SpIntervalChart` | `@silverpoint/vue/interval-chart` | | Angular | `sp-interval-chart` | `@silverpoint/angular/interval-chart` | | Reflex | `interval_chart` | `reflex_silverpoint_react` | - Data shape: `intervals`; fields: lane → `laneKey` (string), start → `startKey` (number), end → `endKey` (number), label → `labelKey` (string, optional) - Intents: schedule - Demo dataset: `INTERVAL_CHART_DEMO` - Demo rows: `[{"crew": "North crew", "task": "Signage", "from": "2026-03-15", "to": "2026-03-21"}, {"crew": "North crew", "task": "Grading", "from": "2026-02-17", "to": "2026-03-07"}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `laneKey` | `lane_key` | `Accessor` | `'lane'` | Ignored without `data`. | | `startKey` | `start_key` | `Accessor` | `'start'` | Ignored without `data`. | | `endKey` | `end_key` | `Accessor` | `'end'` | Ignored without `data`. | | `labelKey` | `label_key` | `Accessor` | | Ignored without `data`. | | `axis` | `axis` | `'number' \| 'date'` | `'number'` | `date` reads ISO `YYYY-MM-DD` days in UTC; `number` by default. Ignored without `data`. | ### DivergingBarChart `diverging-bar-chart`: Ordered levels stacked on both sides of a neutral centre. | Framework | Name | Import | |---|---|---| | React | `DivergingBarChart` | `@silverpoint/react/diverging-bar-chart` | | Vue | `SpDivergingBarChart` | `@silverpoint/vue/diverging-bar-chart` | | Angular | `sp-diverging-bar-chart` | `@silverpoint/angular/diverging-bar-chart` | | Reflex | `diverging_bar_chart` | `reflex_silverpoint_react` | - Data shape: `parts`; fields: label → `labelKey` (string), levels → `levels` (number) - Intents: part-to-whole, compare - Demo dataset: `DIVERGING_BAR_CHART_DEMO` - Demo rows: `[{"question": "The site is easy to use", "Strongly disagree": 43, "Disagree": 53, "Neutral": 50, "Agree": 24, "Strongly agree": 29}, {"question": "Prices are fair", "Strongly disagree": 38, "Disagree": 36, "Neutral": 62, "Agree": 42, "Strongly agree": 21}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `labelKey` | `label_key` | `Accessor` | `'label'` | Ignored without `data`. | | `levels` | `levels` | `readonly string[]` | | The level columns, most negative first. Ignored without `data`. Required. | | `neutral` | `neutral` | `number \| null` | | Index of the neutral level, split across the centre; `null` for none. The middle one by default. | | `percent` | `percent` | `boolean` | `true` | Normalises each row to 100 %; `true` by default. | ### ConnectedScatterChart `connected-scatter-chart`: An ordered path through x-y points. | Framework | Name | Import | |---|---|---| | React | `ConnectedScatterChart` | `@silverpoint/react/connected-scatter-chart` | | Vue | `SpConnectedScatterChart` | `@silverpoint/vue/connected-scatter-chart` | | Angular | `sp-connected-scatter-chart` | `@silverpoint/angular/connected-scatter-chart` | | Reflex | `connected_scatter_chart` | `reflex_silverpoint_react` | - Data shape: `points`; fields: x → `xKey` (number), y → `yKey` (number), label → `labelKey` (string, optional) - Intents: correlation, change - Demo dataset: `CONNECTED_SCATTER_CHART_DEMO` - Demo rows: `[{"year": 2012, "fare": 1.5, "riders": 39.8}, {"year": 2013, "fare": 1.62, "riders": 41.8}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `yKey` | `y_key` | `Accessor` | `'y'` | Ignored without `data`. | | `labelKey` | `label_key` | `Accessor` | | Ignored without `data`. | | `arrows` | `arrows` | `boolean` | `true` | Draws direction marks along the path; `true` by default. | ## Charts: Hierarchies & dimensions ### WaffleChart `waffle-chart`: A unit grid filled in reading order by category. | Framework | Name | Import | |---|---|---| | React | `WaffleChart` | `@silverpoint/react/waffle-chart` | | Vue | `SpWaffleChart` | `@silverpoint/vue/waffle-chart` | | Angular | `sp-waffle-chart` | `@silverpoint/angular/waffle-chart` | | Reflex | `waffle_chart` | `reflex_silverpoint_react` | - Data shape: `parts`; fields: name → `nameKey` (string), value → `valueKey` (number) - Intents: part-to-whole, progress - Demo dataset: `WAFFLE_CHART_DEMO` - Demo rows: `[{"use": "Heating", "kwh": 412}, {"use": "Water heating", "kwh": 263}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `nameKey` | `name_key` | `Accessor` | `'name'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | | `cells` | `cells` | `number` | `100` | Cells in the grid; 100 by default. | | `columns` | `columns` | `number` | `10` | Cells per row; 10 by default. | ### MarimekkoChart `marimekko-chart`: Column width by total, segment height by share. | Framework | Name | Import | |---|---|---| | React | `MarimekkoChart` | `@silverpoint/react/marimekko-chart` | | Vue | `SpMarimekkoChart` | `@silverpoint/vue/marimekko-chart` | | Angular | `sp-marimekko-chart` | `@silverpoint/angular/marimekko-chart` | | Reflex | `marimekko_chart` | `reflex_silverpoint_react` | - Data shape: `matrix`; fields: column → `columnKey` (string), segment → `segmentKey` (string), value → `valueKey` (number) - Intents: part-to-whole, compare - Demo dataset: `MARIMEKKO_CHART_DEMO` - Demo rows: `[{"region": "North", "channel": "Retail", "sales": 115}, {"region": "North", "channel": "Online", "sales": 80}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `columnKey` | `column_key` | `Accessor` | `'column'` | Ignored without `data`. | | `segmentKey` | `segment_key` | `Accessor` | `'segment'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Ignored without `data`. | ### SquarifiedTreemap `squarified-treemap`: Nested rectangles, area by value, drillable through `rootId` and `onRootChange`. | Framework | Name | Import | |---|---|---| | React | `SquarifiedTreemap` | `@silverpoint/react/squarified-treemap` | | Vue | `SpSquarifiedTreemap` | `@silverpoint/vue/squarified-treemap` | | Angular | `sp-squarified-treemap` | `@silverpoint/angular/squarified-treemap` | | Reflex | `squarified_treemap` | `reflex_silverpoint_react` | - Data shape: `hierarchy`; fields: id → `idKey` (string), parent → `parentKey` (string), label → `labelKey` (string, optional), value → `valueKey` (number) - Intents: hierarchy, part-to-whole - Drillable: `rootId` + `onRootChange` - Demo dataset: `SQUARIFIED_TREEMAP_DEMO` - Demo rows: `[{"id": "budget", "parent": null, "name": "City budget"}, {"id": "works", "parent": "budget", "name": "Public works"}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `idKey` | `id_key` | `Accessor` | `'id'` | Ignored without `data`. | | `parentKey` | `parent_key` | `Accessor` | `'parent'` | `null` for the root. Ignored without `data`. | | `labelKey` | `label_key` | `Accessor` | | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Read on leaves; an internal node is the sum of its children. Ignored without `data`. | | `depth` | `depth` | `number` | | Levels drawn below the root; all by default. | | `rootId` | `root_id` | `string \| null` | | The node drawn as root, controlled (REQ-439); the data root by default. | ### SunburstChart `sunburst-chart`: A hierarchy as rings of arcs, drillable through `rootId` and `onRootChange`. | Framework | Name | Import | |---|---|---| | React | `SunburstChart` | `@silverpoint/react/sunburst-chart` | | Vue | `SpSunburstChart` | `@silverpoint/vue/sunburst-chart` | | Angular | `sp-sunburst-chart` | `@silverpoint/angular/sunburst-chart` | | Reflex | `sunburst_chart` | `reflex_silverpoint_react` | - Data shape: `hierarchy`; fields: id → `idKey` (string), parent → `parentKey` (string), label → `labelKey` (string, optional), value → `valueKey` (number) - Intents: hierarchy, part-to-whole - Drillable: `rootId` + `onRootChange` - Demo dataset: `SUNBURST_CHART_DEMO` - Demo rows: `[{"id": "budget", "parent": null, "name": "City budget"}, {"id": "works", "parent": "budget", "name": "Public works"}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `idKey` | `id_key` | `Accessor` | `'id'` | Ignored without `data`. | | `parentKey` | `parent_key` | `Accessor` | `'parent'` | `null` for the root. Ignored without `data`. | | `labelKey` | `label_key` | `Accessor` | | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | Read on leaves; an internal node is the sum of its children. Ignored without `data`. | | `depth` | `depth` | `number` | | Rings drawn below the root; all by default. | | `rootId` | `root_id` | `string \| null` | | The node drawn as root, controlled (REQ-439); the data root by default. | ### TreeChart `tree-chart`: A tidy node-link tree. | Framework | Name | Import | |---|---|---| | React | `TreeChart` | `@silverpoint/react/tree-chart` | | Vue | `SpTreeChart` | `@silverpoint/vue/tree-chart` | | Angular | `sp-tree-chart` | `@silverpoint/angular/tree-chart` | | Reflex | `tree_chart` | `reflex_silverpoint_react` | - Data shape: `hierarchy`; fields: id → `idKey` (string), parent → `parentKey` (string), label → `labelKey` (string, optional), value → `valueKey` (number, optional) - Intents: hierarchy - Demo dataset: `TREE_CHART_DEMO` - Demo rows: `[{"id": "budget", "parent": null, "name": "City budget"}, {"id": "works", "parent": "budget", "name": "Public works"}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `idKey` | `id_key` | `Accessor` | `'id'` | Ignored without `data`. | | `parentKey` | `parent_key` | `Accessor` | `'parent'` | `null` for the root. Ignored without `data`. | | `labelKey` | `label_key` | `Accessor` | | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | | Ignored without `data`. | | `orientation` | `orientation` | `'horizontal' \| 'vertical'` | | | ### ParallelCoordinatesChart `parallel-coordinates-chart`: One polyline per row across parallel axes. | Framework | Name | Import | |---|---|---| | React | `ParallelCoordinatesChart` | `@silverpoint/react/parallel-coordinates-chart` | | Vue | `SpParallelCoordinatesChart` | `@silverpoint/vue/parallel-coordinates-chart` | | Angular | `sp-parallel-coordinates-chart` | `@silverpoint/angular/parallel-coordinates-chart` | | Reflex | `parallel_coordinates_chart` | `reflex_silverpoint_react` | - Data shape: `matrix`; fields: label → `labelKey` (string, optional), dimensions → `dimensions` (number) - Intents: correlation, compare - Demo dataset: `PARALLEL_COORDINATES_CHART_DEMO` - Demo rows: `[{"model": "Model 01", "mass": 13.9, "gears": 15, "price": 3434, "range": 125, "rating": 1.5}, {"model": "Model 02", "mass": 8.6, "gears": 22, "price": 3897, "range": 29, "rating": 3.8}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `labelKey` | `label_key` | `Accessor` | | Ignored without `data`. | | `dimensions` | `dimensions` | `readonly string[]` | | The dimension columns, in axis order. Ignored without `data`. Required. | | `domains` | `domains` | `Readonly>` | | Axis domains by dimension; derived from the data when omitted (REQ-097). | ### PolarLineChart `polar-line-chart`: A line over angle and radius. | Framework | Name | Import | |---|---|---| | React | `PolarLineChart` | `@silverpoint/react/polar-line-chart` | | Vue | `SpPolarLineChart` | `@silverpoint/vue/polar-line-chart` | | Angular | `sp-polar-line-chart` | `@silverpoint/angular/polar-line-chart` | | Reflex | `polar_line_chart` | `reflex_silverpoint_react` | - Data shape: `series`; fields: angle → `angleKey` (number), value → `valueKey` (number) - Intents: trend, compare - Demo dataset: `POLAR_LINE_CHART_DEMO` - Demo rows: `[{"month": 0, "rain": 82}, {"month": 1, "rain": 62}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `angleKey` | `angle_key` | `Accessor` | `'angle'` | In the units of `period`. Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | The radius, `≥ 0`. Ignored without `data`. | | `period` | `period` | `number` | | One turn, in the units of the angle; when set, the line closes. Ignored without `data`. | | `startAngle` | `start_angle` | `number` | `0` | Where the angle 0 sits, in degrees clockwise from 12 o'clock; 0 by default. | ### PolarScatterChart `polar-scatter-chart`: Points over angle and radius. | Framework | Name | Import | |---|---|---| | React | `PolarScatterChart` | `@silverpoint/react/polar-scatter-chart` | | Vue | `SpPolarScatterChart` | `@silverpoint/vue/polar-scatter-chart` | | Angular | `sp-polar-scatter-chart` | `@silverpoint/angular/polar-scatter-chart` | | Reflex | `polar_scatter_chart` | `reflex_silverpoint_react` | - Data shape: `points`; fields: angle → `angleKey` (number), radius → `radiusKey` (number), size → `sizeKey` (number, optional) - Intents: distribution, correlation - Demo dataset: `POLAR_SCATTER_CHART_DEMO` - Demo rows: `[{"bearing": 28, "distance": 2.5}, {"bearing": 149.6, "distance": 1.4}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `angleKey` | `angle_key` | `Accessor` | `'angle'` | In the units of `period`. Ignored without `data`. | | `radiusKey` | `radius_key` | `Accessor` | `'radius'` | The radius, `≥ 0`. Ignored without `data`. | | `sizeKey` | `size_key` | `Accessor` | | Ignored without `data`. | | `period` | `period` | `number` | `360` | One turn, in the units of the angle; 360 by default. Ignored without `data`. | ## Charts: Fields & networks ### DensityBinChart `density-bin-chart`: X-y points counted in two-dimensional bins. | Framework | Name | Import | |---|---|---| | React | `DensityBinChart` | `@silverpoint/react/density-bin-chart` | | Vue | `SpDensityBinChart` | `@silverpoint/vue/density-bin-chart` | | Angular | `sp-density-bin-chart` | `@silverpoint/angular/density-bin-chart` | | Reflex | `density_bin_chart` | `reflex_silverpoint_react` | - Data shape: `points`; fields: x → `xKey` (number), y → `yKey` (number) - Intents: distribution, correlation - Demo dataset: `DENSITY_BIN_CHART_DEMO` - Demo rows: `[{"x": 18.48, "y": 44.44}, {"x": 38.26, "y": 64.71}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `yKey` | `y_key` | `Accessor` | `'y'` | Ignored without `data`. | | `binShape` | `bin_shape` | `'hexagon' \| 'rect'` | | | | `binSize` | `bin_size` | `number` | `14` | Bin size in px; 14 by default. | ### ContourChart `contour-chart`: Iso-lines and filled bands of a density or a grid. | Framework | Name | Import | |---|---|---| | React | `ContourChart` | `@silverpoint/react/contour-chart` | | Vue | `SpContourChart` | `@silverpoint/vue/contour-chart` | | Angular | `sp-contour-chart` | `@silverpoint/angular/contour-chart` | | Reflex | `contour_chart` | `reflex_silverpoint_react` | - Data shape: `points`; fields: x → `xKey` (number), y → `yKey` (number), value → `valueKey` (number, optional) - Intents: distribution, correlation - Demo dataset: `CONTOUR_CHART_DEMO` - Demo rows: `[{"x": 18.48, "y": 44.44}, {"x": 38.26, "y": 64.71}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `source` | `source` | `'points' \| 'grid'` | | `points` estimates a density from a point cloud; `grid` reads a regular grid of values. | | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `yKey` | `y_key` | `Accessor` | `'y'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `'value'` | The grid value (`source: 'grid'`). Ignored without `data`. | | `levels` | `levels` | `number \| readonly number[]` | | A count of levels, or the thresholds, increasing: in the grid's values, or as shares of the density's peak. Ignored without `data`. | | `filled` | `filled` | `boolean` | `true` | Fills the bands between levels; `true` by default. | ### DelaunayChart `delaunay-chart`: The triangulation of x-y points, or its Voronoi cells. | Framework | Name | Import | |---|---|---| | React | `DelaunayChart` | `@silverpoint/react/delaunay-chart` | | Vue | `SpDelaunayChart` | `@silverpoint/vue/delaunay-chart` | | Angular | `sp-delaunay-chart` | `@silverpoint/angular/delaunay-chart` | | Reflex | `delaunay_chart` | `reflex_silverpoint_react` | - Data shape: `points`; fields: x → `xKey` (number), y → `yKey` (number), label → `labelKey` (string, optional) - Intents: network, distribution - Demo dataset: `DELAUNAY_CHART_DEMO` - Demo rows: `[{"label": "P01", "x": 45, "y": 27.3}, {"label": "P02", "x": 37.4, "y": 55.6}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `yKey` | `y_key` | `Accessor` | `'y'` | Ignored without `data`. | | `labelKey` | `label_key` | `Accessor` | | Ignored without `data`. | | `mesh` | `mesh` | `'delaunay' \| 'voronoi'` | | | ### VectorFieldChart `vector-field-chart`: An arrow per grid point. | Framework | Name | Import | |---|---|---| | React | `VectorFieldChart` | `@silverpoint/react/vector-field-chart` | | Vue | `SpVectorFieldChart` | `@silverpoint/vue/vector-field-chart` | | Angular | `sp-vector-field-chart` | `@silverpoint/angular/vector-field-chart` | | Reflex | `vector_field_chart` | `reflex_silverpoint_react` | - Data shape: `field`; fields: x → `xKey` (number), y → `yKey` (number), u → `uKey` (number), v → `vKey` (number) - Intents: flow - Demo dataset: `VECTOR_FIELD_CHART_DEMO` - Demo rows: `[{"x": 0, "y": 0, "u": 0.852, "v": -1.246}, {"x": 1, "y": 0, "u": 0.967, "v": -1.264}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `xKey` | `x_key` | `Accessor` | `'x'` | Ignored without `data`. | | `yKey` | `y_key` | `Accessor` | `'y'` | Ignored without `data`. | | `uKey` | `u_key` | `Accessor` | `'u'` | Ignored without `data`. | | `vKey` | `v_key` | `Accessor` | `'v'` | Ignored without `data`. | | `scale` | `scale` | `number` | | Arrow length per unit of magnitude; fitted to the grid by default. | ### NetworkChart `network-chart`: A node-link graph. | Framework | Name | Import | |---|---|---| | React | `NetworkChart` | `@silverpoint/react/network-chart` | | Vue | `SpNetworkChart` | `@silverpoint/vue/network-chart` | | Angular | `sp-network-chart` | `@silverpoint/angular/network-chart` | | Reflex | `network_chart` | `reflex_silverpoint_react` | - Data shape: `links`; fields: source → `sourceKey` (string), target → `targetKey` (string), value → `valueKey` (number, optional) - Intents: network, flow - Demo dataset: `NETWORK_CHART_DEMO` - Demo rows: `[{"source": "s05", "target": "s02", "weight": 5}, {"source": "p10", "target": "a06", "weight": 1}]` | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `sourceKey` | `source_key` | `Accessor` | `'source'` | Ignored without `data`. | | `targetKey` | `target_key` | `Accessor` | `'target'` | Ignored without `data`. | | `valueKey` | `value_key` | `Accessor` | `1` | 1 by default. Ignored without `data`. | | `nodes` | `nodes` | `readonly NetworkNode[]` | | The nodes, as data; the distinct ends of the links by default. Ignored without `data`. | | `iterations` | `iterations` | `number` | `300` | Layout iterations; 300 by default. | ## UI components ### SpButton `button` (ui, actions): A button or a link styled as one; `primary` and `danger` variants. | Framework | Name | Import | |---|---|---| | React | `SpButton` | `@silverpoint/react/ui/button` | | Vue | `SpButton` | `@silverpoint/vue/ui/button` | | Angular | `button[spButton]` | `@silverpoint/angular/ui/button` | | Reflex | `sp_button` | `reflex_silverpoint_react` | - Events: React `onClick`; Vue `click`; Angular none - Slots: React `children`; Vue `default`; Angular `content` - States: default, primary, danger, disabled | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `variant` | `variant` | `UiVariant` | `'default'` | Default `'default'`; `danger` also draws the exact ✕ glyph (REQ-310). | | `type` | `type` | `'button' \| 'submit' \| 'reset'` | `'button'` | Default `'button'`. | | `disabled` | `disabled` | `boolean` | | Not focusable, not submitted; drawn with the disabled tone. | | `label` | `label` | `string` | | Accessible name of an icon-only button (REQ-319). | | `block` | `block` | `boolean` | | Fills the width of its container. | | `href` | `href` | `string` | | Renders an ``. | ### SpInput `input` (ui, data-entry): A labelled text field with an optional message and an invalid state. | Framework | Name | Import | |---|---|---| | React | `SpInput` | `@silverpoint/react/ui/input` | | Vue | `SpInput` | `@silverpoint/vue/ui/input` | | Angular | `sp-input` | `@silverpoint/angular/ui/input` | | Reflex | `sp_input` | `reflex_silverpoint_react` | - Binds `value`: React `value + onChange`; Vue `v-model`; Angular `[(value)]` - Events: React `onChange`; Vue `change`; Angular none - Slots: React `prefix`, `suffix`; Vue `prefix`, `suffix`; Angular `spPrefix`, `spSuffix` - States: empty, filled, invalid, disabled | Prop (React, Vue, Angular) | Reflex | Type | Default | Description | |---|---|---|---|---| | `type` | `type` | `'text' \| 'search' \| 'email' \| 'url' \| 'tel' \| 'password' \| 'number'` | `'text'` | Native input type. Default `'text'`. | | `placeholder` | `placeholder` | `string` | | Hint shown while empty; not a substitute for the accessible name. | | `name` | `name` | `string` | | Form field name; the native input submits under it (REQ-323). | | `disabled` | `disabled` | `boolean` | | Not focusable and not submitted. | | `readOnly` | `read_only` | `boolean` | | Focusable and submitted, but not editable. | | `invalid` | `invalid` | `boolean` | | Sets `aria-invalid` and draws the exact ⚠ glyph (REQ-334). | | `message` | `message` | `string` | | Help or error text under the control, referenced by `aria-describedby` (REQ-334). | | `label` | `label` | `string` | | Accessible name, when no `