Skip to content

Insight API ​

js
import {
  Insight,
  version,
} from '@chartbuddy.io/embed';

Constructor ​

js
const insight = new Insight(target, options?);

target ​

CSS selector string or HTMLElement.

options ​

OptionTypeDefaultDescription
chartDataobject–Partial or full chart config (schema)
instanceIdstringrandom UUIDStable id for getInsights(). Must be unique on the page – duplicates throw. Several charts: Single vs multi mounts.
editablebooleanfalseStart in editor mode
allowEditbooleantrueWhen false, hide Edit on the view ball and no-op enterEditMode(). Download / Drag still work. Ignored when locked.
editSession'toggle' | 'locked''toggle''locked' = always edit (no Done / morph chrome). Implies edit boot.
hostobject–Host chrome hooks – see Host overrides
assetBasestring–Only for multi-file loader; ignore with single-file

Instance ​

MemberDescription
readyPromise – resolves when mounted
mode'view' | 'edit'
editSession'toggle' | 'locked'
allowEditboolean – whether Edit is offered
chartEngine chart instance
instanceIdStable id for this mount
setChartData(cd)Merge a full or partial config and redraw (chartType optional)
setData(seriesData)Refresh only the data grid – keeps type and formatting
update(patch?)Partial patch + redraw; no argument = redraw only
getChartData()Full cd snapshot
on(event, handler)Subscribe to ready | mode | change (returns unsubscribe)
off(event, handler)Remove a handler
isDirty()true when the chart changed since boot / last Done
getRevision()Monotonic edit counter
toPngBlob() / toPngBase64()PNG bytes/base64 without a Save dialog
downloadPng()Download PNG (human Save dialog)
exportConfig()Download current chartData as JSON
enterEditMode()View → edit (no-op when locked or allowEdit: false)
exitEditMode()Edit → view (no-op when locked)
focus()Focus the insight
destroy()Tear down

Host overrides ​

Optional options.host hooks for embedding inside your own chrome:

HookDescription
getToolbarPlacement()Where the formatting toolbar lives: 'widget' (default embed edit – morph rail), 'float', or 'dock'.
getToolbarContainer()Mount point for the toolbar (selector or element). Ignored when placement is 'widget' (modules mount in the morph).
positionToolbar(toolbar, target)Float-only XY override. Ignored for 'dock' / 'widget'.
getPopupContainer()Where portaled menus mount (selector or element). Default: document.body. Use your dialog root when the editor sits in a high-z overlay.
startDragging(event)Forward chart-background drag to host window chrome.
js
new Insight('#chart', {
  editable: true,
  editSession: 'locked',
  host: {
    getToolbarPlacement: () => ({ mode: 'dock', side: 'right' }),
    getToolbarContainer: () => '#my-toolbar-rail',
    getPopupContainer: () => '#my-dialog',
  },
});

Partial updates ​

js
await insight.ready;

// Data only – 2D seriesData grid
insight.setData([
  ['', 'Q1', 'Q2'],
  ['Revenue', 100, 120],
]);

// Any partial patch
insight.update({ title: { text: 'FY26' } });

// Redraw without changing config
insight.update();

// setChartData also accepts partials – chartType is not required
insight.setChartData({ seriesData: [/* … */] });

Events ​

js
insight.on('ready', () => { /* booted */ });
insight.on('mode', (mode) => { /* 'view' | 'edit' */ });
insight.on('change', (cd) => { /* after meaningful edits */ });

insight.isDirty();     // since boot / last Done checkpoint
insight.getRevision(); // increments on every meaningful change

change fires after programmatic setChartData / setData / update, live edits in edit mode, and Done.

Validation ​

new Insight({ chartData }), setChartData, setData, and update validate input at the API boundary:

InputBehaviour
Unknown chartType (e.g. bubbleChart3D)Throws (with a did-you-mean hint)
Wrong field type / enum / rangeThrows (lists every path)
Foreign option bag (pie + bar: {…})Throws
Ragged seriesData (unequal row lengths)Warns, still accepts
Duplicate instanceId on the pageThrows
Unknown keysAlways allowed (forward-compatible)

Throws are ChartDataValidationError, which carries the problems as structured data – and the same checks are callable directly, so you can validate before you mount. See Validation.

js
import { validateChartData } from '@chartbuddy.io/embed';

const { valid, errors } = validateChartData(candidate);
if (!valid) console.log(errors[0].path, errors[0].code, errors[0].suggestion);

PNG / export ​

js
await insight.ready;
const png = await insight.toPngBase64(); // default background #ffffff
await insight.downloadPng();
insight.exportConfig();

PNG download and drag-to-slide are also available from the view-mode hover ball.

Developer documentation for Chartbuddy Embed · Not the end-user Help Center · Help Center