UNPKG

@fusedashlabs/ui9000-workspace

Version:

UI9000 workspace MCP. One tool, show_workspace, draws a chart from your table. Set TYPESAFE_API_KEY to let Jev choose the chart.

44 lines (43 loc) • 1.79 kB
import { chartRole } from '../../catalog/chart-roles.js'; import { bindFieldMap } from './bind-fields.js'; import { barChartPayload } from './bar-chart.js'; import { chartTypeForComponent } from './chart-type.js'; import { histogramChartPayload } from './histogram-chart.js'; import { kpiWidgetPayload } from './kpi-widget.js'; import { hostedChartPayload } from './hosted-chart.js'; import { statusGaugeWidgetPayload } from './status-gauge-widget.js'; import { mapChartPayload } from './map-chart.js'; import { networkGraphPayload } from './network-graph.js'; import { asRowObjects } from './rows.js'; /** Components with a chart object. Anything else keeps the raw table rows. */ const PAYLOAD_BY_COMPONENT = { 'bar-chart': barChartPayload, 'histogram-chart': histogramChartPayload, 'map-chart': mapChartPayload, 'network-graph': networkGraphPayload, 'kpi-widget': (chartType, fields, rows, columns) => { void chartType; return kpiWidgetPayload(fields, rows, columns); }, 'status-gauge-widget': (chartType, fields, rows) => { void chartType; return statusGaugeWidgetPayload(fields, rows); }, }; function builderFor(component) { const known = PAYLOAD_BY_COMPONENT[component]; if (known) return known; if (!chartRole(component)) return undefined; return (chartType, fields, rows) => hostedChartPayload(component, chartType, fields, rows); } export function workspaceWidgetPayload(component, chartType, binds, payload, columns) { const rows = asRowObjects(payload); if (!rows) return payload; const build = builderFor(component); if (!build) return payload; return build(chartType ?? chartTypeForComponent(component), bindFieldMap(binds), rows, columns); }