@dlh.io/bideux 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +90 -0
- package/dist/all.d.ts +14 -0
- package/dist/all.js +15 -0
- package/dist/all.js.map +1 -0
- package/dist/chunk-62IQGXLW.js +11470 -0
- package/dist/chunk-62IQGXLW.js.map +1 -0
- package/dist/chunk-75CRTQK7.js +315 -0
- package/dist/chunk-75CRTQK7.js.map +1 -0
- package/dist/chunk-FVO6E22Z.js +225 -0
- package/dist/chunk-FVO6E22Z.js.map +1 -0
- package/dist/chunk-GRITOB4M.js +337 -0
- package/dist/chunk-GRITOB4M.js.map +1 -0
- package/dist/chunk-HPFHIZWO.js +40 -0
- package/dist/chunk-HPFHIZWO.js.map +1 -0
- package/dist/chunk-IMNUQGHE.js +2864 -0
- package/dist/chunk-IMNUQGHE.js.map +1 -0
- package/dist/chunk-LHD445PJ.js +571 -0
- package/dist/chunk-LHD445PJ.js.map +1 -0
- package/dist/chunk-LPLBBHOW.js +386 -0
- package/dist/chunk-LPLBBHOW.js.map +1 -0
- package/dist/chunk-NGM5R3LW.js +881 -0
- package/dist/chunk-NGM5R3LW.js.map +1 -0
- package/dist/chunk-OMPR32AR.js +1320 -0
- package/dist/chunk-OMPR32AR.js.map +1 -0
- package/dist/chunk-QDQ5VVTC.js +255 -0
- package/dist/chunk-QDQ5VVTC.js.map +1 -0
- package/dist/chunk-RRWZKNDZ.js +1004 -0
- package/dist/chunk-RRWZKNDZ.js.map +1 -0
- package/dist/chunk-SRWIBMEB.js +178 -0
- package/dist/chunk-SRWIBMEB.js.map +1 -0
- package/dist/element/chunk-AOKCBPMV.js +1646 -0
- package/dist/element/chunk-AOKCBPMV.js.map +1 -0
- package/dist/element/chunk-B67SYRQP.js +281 -0
- package/dist/element/chunk-B67SYRQP.js.map +1 -0
- package/dist/element/chunk-FNRVFA2C.js +55 -0
- package/dist/element/chunk-FNRVFA2C.js.map +1 -0
- package/dist/element/chunk-G3C722QP.js +4707 -0
- package/dist/element/chunk-G3C722QP.js.map +1 -0
- package/dist/element/chunk-H5IFOSQP.js +346 -0
- package/dist/element/chunk-H5IFOSQP.js.map +1 -0
- package/dist/element/chunk-LXR3CLCN.js +30 -0
- package/dist/element/chunk-LXR3CLCN.js.map +1 -0
- package/dist/element/chunk-TFV4CJR4.js +183 -0
- package/dist/element/chunk-TFV4CJR4.js.map +1 -0
- package/dist/element/chunk-TXSK3CIN.js +859 -0
- package/dist/element/chunk-TXSK3CIN.js.map +1 -0
- package/dist/element/chunk-WDTTBY3S.js +45 -0
- package/dist/element/chunk-WDTTBY3S.js.map +1 -0
- package/dist/element/chunk-ZI3RYCAR.js +233 -0
- package/dist/element/chunk-ZI3RYCAR.js.map +1 -0
- package/dist/element/element.d.ts +3044 -0
- package/dist/element/element.js +146554 -0
- package/dist/element/element.js.map +1 -0
- package/dist/element/revo-grid.entry-7FHEBN3O.js +4817 -0
- package/dist/element/revo-grid.entry-7FHEBN3O.js.map +1 -0
- package/dist/element/revogr-attribution_7.entry-LSOFVZRA.js +1328 -0
- package/dist/element/revogr-attribution_7.entry-LSOFVZRA.js.map +1 -0
- package/dist/element/revogr-clipboard_3.entry-V74UIBPJ.js +494 -0
- package/dist/element/revogr-clipboard_3.entry-V74UIBPJ.js.map +1 -0
- package/dist/element/revogr-data_4.entry-2UBOKTFN.js +1041 -0
- package/dist/element/revogr-data_4.entry-2UBOKTFN.js.map +1 -0
- package/dist/element/revogr-filter-panel.entry-B24PLQU4.js +552 -0
- package/dist/element/revogr-filter-panel.entry-B24PLQU4.js.map +1 -0
- package/dist/index.d.ts +1041 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/react.d.ts +1915 -0
- package/dist/react.js +14 -0
- package/dist/react.js.map +1 -0
- package/dist/renderers/echarts.d.ts +44 -0
- package/dist/renderers/echarts.js +6 -0
- package/dist/renderers/echarts.js.map +1 -0
- package/dist/renderers/index.d.ts +48 -0
- package/dist/renderers/index.js +12 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/renderers/revogrid.d.ts +76 -0
- package/dist/renderers/revogrid.js +6 -0
- package/dist/renderers/revogrid.js.map +1 -0
- package/dist/renderers/tabulator.d.ts +37 -0
- package/dist/renderers/tabulator.js +6 -0
- package/dist/renderers/tabulator.js.map +1 -0
- package/dist/result-table-CPls-277.d.ts +1885 -0
- package/dist/schema/dashboard.schema.json +4374 -0
- package/dist/schema/semantic-model.schema.json +1200 -0
- package/dist/schema/widget.schema.json +1793 -0
- package/dist/styles.css +156 -0
- package/dist/theme.css +1789 -0
- package/dist/types-CHFSsU_X.d.ts +1007 -0
- package/package.json +119 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../dashboard-core/src/filter-text.ts","../../dashboard-renderers/src/filter-model.ts","../../dashboard-renderers/src/state.ts","../../dashboard-renderers/src/models.ts","../../dashboard-renderer-web/src/markdown.ts","../../dashboard-renderer-web/src/native-renderer.ts"],"names":["content","record","stringValue","text"],"mappings":"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","file":"chunk-RRWZKNDZ.js","sourcesContent":["/**\n * Printing what a filter is currently set to, inside written content.\n *\n * A heading that says \"Downtown, last 30 days\" is how a reader knows what the\n * numbers beside it are counting. The wording lives in the widget's content as\n * `{{filter:some_filter_id}}`, and this fills it in from the dashboard's filter\n * state, preferring the label the control showed over the raw key it sends.\n */\n\n/** A filter token, as it is written in markdown or text content. */\nconst TOKEN = /\\{\\{\\s*filter:([A-Za-z0-9_.-]+)\\s*\\}\\}/g;\n\n/** What a date range filter sends once both ends are picked. */\ninterface Period {\n start?: string;\n end?: string;\n}\n\nfunction isPeriod(value: unknown): value is Period {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * One filter value as a reader should see it.\n *\n * An unset filter reads as *empty* rather than as nothing at all, because a\n * heading that silently loses a word is harder to understand than one that says\n * the filter is not narrowing anything.\n */\nexport function formatFilterValue(value: unknown, empty = \"All\"): string {\n if (value === undefined || value === null || value === \"\") return empty;\n if (Array.isArray(value)) {\n const parts = value\n .filter((entry) => entry !== null && entry !== undefined && entry !== \"\")\n .map((entry) => String(entry));\n return parts.length > 0 ? parts.join(\", \") : empty;\n }\n if (isPeriod(value)) {\n const period = value as Period;\n if (period.start && period.end && period.start !== period.end) {\n return `${period.start} to ${period.end}`;\n }\n return period.start ?? period.end ?? empty;\n }\n return String(value);\n}\n\n/**\n * Content with every filter token replaced by what that filter is set to.\n *\n * *labels* holds the wording the control itself displayed, which is what a\n * reader recognises: a location filter sends a store key and shows a store name.\n * A token naming a filter this dashboard does not have is left exactly as\n * written, so the mistake is visible rather than silently blank.\n */\nexport function fillFilterTokens(\n content: string,\n filters: Record<string, unknown>,\n labels: Record<string, string> = {},\n): string {\n return content.replace(TOKEN, (whole, id: string) => {\n if (labels[id]) return labels[id];\n if (!(id in filters)) return whole;\n return formatFilterValue(filters[id]);\n });\n}\n\n/** Whether content prints any filter at all, which decides if it has to re-render. */\nexport function mentionsFilter(content: string): boolean {\n TOKEN.lastIndex = 0;\n return TOKEN.test(content);\n}\n","import type { WidgetResult, WidgetSpec } from \"./types.js\";\n\nexport interface FilterOption {\n value: unknown;\n label: string;\n}\n\nexport type FilterControl =\n | \"select\"\n | \"multiselect\"\n | \"radio\"\n | \"date\"\n | \"date_range\"\n | \"input\";\n\nexport interface FilterModel {\n widgetId: string;\n label: string;\n control: FilterControl;\n options: FilterOption[];\n placeholder?: string;\n defaultValue: unknown;\n panelled: boolean;\n labelPosition: \"top\" | \"bottom\";\n /** True when the widget's object header replaces the inline label. */\n showObjectHeader: boolean;\n radioOrientation: \"horizontal\" | \"vertical\";\n /** Relative expressions offered as one click shortcuts on date controls. */\n presets: string[];\n /** Whether a date control shows the calendar trigger next to its input. */\n showIcon: boolean;\n}\n\nfunction record(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction text(value: unknown): string | undefined {\n return typeof value === \"string\" && value !== \"\" ? value : undefined;\n}\n\nexport function filterOptions(\n widget: WidgetSpec,\n result: WidgetResult,\n): FilterOption[] {\n const fromResult = Array.isArray(result.options) ? result.options : null;\n const configured = record(widget.spec.data).options;\n const fromSpec: unknown[] = Array.isArray(configured) ? configured : [];\n return (fromResult ?? fromSpec)\n .map((entry) => record(entry))\n .filter(\n (entry): entry is { value: unknown; label: string } =>\n typeof entry.label === \"string\",\n )\n .map((entry) => ({ value: entry.value, label: entry.label }));\n}\n\nexport function describeFilter(\n value: unknown,\n options: FilterOption[],\n): string {\n const name = (entry: unknown): string =>\n options.find((option) => String(option.value) === String(entry))?.label ??\n String(entry);\n if (Array.isArray(value)) {\n return value.length === 0 ? \"All\" : value.map(name).join(\", \");\n }\n if (typeof value === \"object\" && value !== null) {\n const range = record(value);\n const start = text(range.start) ?? \"Start\";\n const end = text(range.end) ?? \"End\";\n return `${start} to ${end}`;\n }\n return value === \"\" || value === null || value === undefined\n ? \"All\"\n : name(value);\n}\n\nfunction resolveControl(display: Record<string, unknown>): FilterControl {\n const control = text(display.control);\n if (control === \"radio\") return \"radio\";\n if (control === \"date_range\") return \"date_range\";\n if (control === \"date\" || control === \"calendar\") return \"date\";\n if (control === \"input\" || control === \"custom\") return \"input\";\n return display.multi === true ? \"multiselect\" : \"select\";\n}\n\n/** Free text a date filter accepts in place of a calendar date, e.g. `last 7 days`. */\nexport function isRelativeDateExpression(value: string): boolean {\n const normalized = value.trim().toLowerCase();\n const relative =\n /^(today|yesterday|tomorrow|\\d+\\s+(days?|weeks?|months?|years?)\\s+ago\\s+for\\s+\\d+\\s+(days?|weeks?|months?|years?)|\\d+\\s+(days?|weeks?|months?|years?)\\s+(ago|from now)|(last|past|previous|trailing)?\\s*\\d+\\s+(days?|weeks?|months?|years?)|this\\s+(week|month|quarter|year)|last\\s+(week|month|quarter|year)|next\\s+(week|month|quarter|year))$/;\n return (\n relative.test(normalized) ||\n normalized.startsWith(\"before \") ||\n normalized.startsWith(\"after \")\n );\n}\n\nexport function isIsoDate(value: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) return false;\n return !Number.isNaN(Date.parse(value));\n}\n\nexport function buildFilterModel(\n widget: WidgetSpec,\n result: WidgetResult = {},\n): FilterModel {\n const component = widget.spec.component === \"select\" ? \"select\" : \"filter\";\n const display = record(record(widget.spec.display)[component]);\n const options = filterOptions(widget, result);\n const header = record(widget.metadata.header);\n const presets = Array.isArray(display.presets)\n ? display.presets.filter(\n (entry): entry is string => typeof entry === \"string\" && entry !== \"\",\n )\n : [];\n return {\n labelPosition:\n record(display.label).position === \"bottom\" ? \"bottom\" : \"top\",\n showObjectHeader:\n widget.metadata.header !== undefined && header.visible !== false,\n radioOrientation:\n display.radio_orientation === \"horizontal\" ? \"horizontal\" : \"vertical\",\n presets,\n showIcon: display.show_icon !== false,\n widgetId: widget.metadata.id,\n label:\n text(record(display.label).text) ??\n text(display.label) ??\n widget.metadata.name,\n control: resolveControl(display),\n options,\n ...(text(display.placeholder) === undefined\n ? {}\n : { placeholder: text(display.placeholder) as string }),\n defaultValue:\n display.default_value ?? record(widget.spec.data).default_value ?? \"\",\n panelled: display.panel === true || display.panelled === true,\n };\n}\n","import type {\n WidgetRenderResolution,\n WidgetRenderState,\n WidgetResult,\n WidgetSpec,\n} from \"./types.js\";\nimport { record, stringValue } from \"./records.js\";\n\nconst DATA_COMPONENTS = new Set([\n \"kpi\",\n \"echarts\",\n \"table\",\n \"tabulator\",\n \"pivot_table\",\n]);\n\nfunction loadingState(component: string): WidgetRenderState {\n return {\n kind: \"loading\",\n skeleton:\n component === \"kpi\"\n ? \"kpi\"\n : component === \"echarts\"\n ? \"chart\"\n : \"content\",\n message: \"Loading widget\",\n };\n}\n\nfunction missingChartColumns(\n widget: WidgetSpec,\n result: WidgetResult,\n): WidgetRenderState | undefined {\n const rows = Array.isArray(result.rows) ? result.rows : [];\n const returned = new Set(\n Array.isArray(result.columns)\n ? result.columns.filter(\n (column): column is string => typeof column === \"string\",\n )\n : Object.keys(record(rows[0])),\n );\n const mappings = record(widget.spec.mappings);\n const named = [mappings.x, mappings.category, mappings.value].filter(\n (field): field is string => typeof field === \"string\" && field.length > 0,\n );\n const display = record(record(widget.spec.display).echarts);\n const hasSeries = Array.isArray(display.series);\n const missing = named.filter((field) => !returned.has(field));\n if (hasSeries || named.length === 0 || missing.length !== named.length) {\n return undefined;\n }\n return {\n kind: \"notice\",\n message: `Nothing to draw: this chart reads ${missing.join(\", \")}, and the query returned ${[...returned].join(\", \") || \"no columns\"}.`,\n };\n}\n\nfunction missingKpiValue(\n widget: WidgetSpec,\n result: WidgetResult,\n): WidgetRenderState {\n const mapped = stringValue(record(widget.spec.mappings).value);\n const returned = Array.isArray(result.columns)\n ? result.columns.filter(\n (column): column is string => typeof column === \"string\",\n )\n : [];\n const arrived = mapped !== undefined && returned.includes(mapped);\n return {\n kind: \"notice\",\n message:\n mapped === undefined\n ? \"No number to show: pick the column the number comes from.\"\n : arrived\n ? `No number to show: ${mapped} came back empty for the current filters, so there is nothing to add up.`\n : `No number to show: this card reads ${mapped}, which the query did not return${returned.length > 0 ? `. It returned ${returned.join(\", \")}` : \"\"}.`,\n };\n}\n\nexport function resolveWidgetRenderState(\n widget: WidgetSpec,\n result: WidgetResult = {},\n options: {\n loading?: boolean;\n answeredOnce?: boolean;\n retryable?: boolean;\n } = {},\n): WidgetRenderResolution {\n const component = widget.spec.component ?? \"\";\n const isDataComponent = DATA_COMPONENTS.has(component);\n const loading = options.loading === true;\n const hasAnswered =\n isDataComponent && !loading && Object.keys(result).length > 0;\n const answeredOnce = options.answeredOnce === true || hasAnswered;\n\n if (loading && isDataComponent && options.answeredOnce !== true) {\n return { state: loadingState(component), answeredOnce };\n }\n\n if (\n component !== \"filter\" &&\n component !== \"select\" &&\n typeof result.error === \"string\"\n ) {\n const state: WidgetRenderState = {\n kind: \"error\",\n message: result.error,\n retryable: options.retryable === true,\n };\n const hint = stringValue(result.error_hint);\n if (hint !== undefined) state.hint = hint;\n return { state, answeredOnce };\n }\n\n if (isDataComponent && Object.keys(result).length === 0) {\n return {\n state: {\n kind: \"notice\",\n message:\n \"Not loaded yet. Save the layout and this widget will be queried with the rest.\",\n },\n answeredOnce,\n };\n }\n\n if (\n (component === \"echarts\" ||\n component === \"table\" ||\n component === \"tabulator\" ||\n component === \"pivot_table\") &&\n Array.isArray(result.rows) &&\n result.rows.length === 0\n ) {\n return {\n state: {\n kind: \"notice\",\n message: \"The query returned no rows for the current filters.\",\n },\n answeredOnce,\n };\n }\n\n if (component === \"echarts\" && Array.isArray(result.rows)) {\n const missing = missingChartColumns(widget, result);\n if (missing !== undefined) return { state: missing, answeredOnce };\n }\n\n if (\n component === \"kpi\" &&\n (result.value === undefined || result.value === null)\n ) {\n return {\n state: missingKpiValue(widget, result),\n answeredOnce,\n };\n }\n\n return {\n state: {\n kind: \"ready\",\n refreshing: loading && isDataComponent,\n },\n answeredOnce,\n };\n}\n","import { fillFilterTokens } from \"@dlh.io/bideux-dashboard-core\";\n\nimport type {\n BasicRendererModel,\n ExtensionRendererModel,\n KpiDeltaModel,\n KpiRendererModel,\n MarkdownRendererModel,\n RendererContext,\n RendererFrame,\n TextRendererModel,\n WidgetRenderResolution,\n WidgetResult,\n WidgetSpec,\n} from \"./types.js\";\nimport { buildChartRendererModel } from \"./chart-model.js\";\nimport { buildPivotRendererModel } from \"./pivot-model.js\";\nimport {\n displayBlock,\n isRecord,\n numberValue,\n record,\n stringValue,\n} from \"./records.js\";\nimport { resolveWidgetRenderState } from \"./state.js\";\nimport {\n buildTableRendererModel,\n buildTabulatorRendererModel,\n} from \"./table-model.js\";\nimport { rendererFrame } from \"./theme.js\";\nimport { formatValue } from \"./value-format.js\";\n\nfunction deltaTone(value: number): \"up\" | \"down\" | \"flat\" {\n if (value > 0) return \"up\";\n if (value < 0) return \"down\";\n return \"flat\";\n}\n\nfunction deltaIcon(\n value: unknown,\n tone: \"up\" | \"down\" | \"flat\",\n): \"up\" | \"down\" | \"neutral\" | \"none\" {\n if (\n value === \"up\" ||\n value === \"down\" ||\n value === \"neutral\" ||\n value === \"none\"\n ) {\n return value;\n }\n return tone === \"flat\" ? \"neutral\" : tone;\n}\n\nfunction tooltipIcon(\n value: unknown,\n): \"info\" | \"check\" | \"help\" | \"warning\" | undefined {\n return value === \"info\" ||\n value === \"check\" ||\n value === \"help\" ||\n value === \"warning\"\n ? value\n : undefined;\n}\n\nfunction kpiDelta(\n result: WidgetResult,\n display: Record<string, unknown>,\n valueFormat: string,\n valuePrefix: string,\n): KpiDeltaModel | undefined {\n const delta = numberValue(result.delta);\n if (delta === undefined) return undefined;\n const configuration = record(display.delta);\n const tone = deltaTone(delta);\n const format =\n stringValue(configuration.format) ??\n stringValue(result.delta_format) ??\n \"number\";\n const prefix = stringValue(configuration.prefix) ?? \"\";\n const comparedWith =\n typeof result.delta_label === \"string\"\n ? `vs ${result.delta_label}`\n : undefined;\n const model: KpiDeltaModel = {\n value: delta,\n formattedValue:\n format === \"percent\"\n ? new Intl.NumberFormat(\"en-US\", {\n style: \"percent\",\n maximumFractionDigits: 1,\n }).format(delta)\n : formatValue(delta, {\n format,\n prefix,\n compact: configuration.compact === true,\n }),\n tone,\n icon: deltaIcon(configuration.icon, tone),\n };\n if (comparedWith !== undefined) model.comparedWith = comparedWith;\n const tooltip = stringValue(configuration.tooltip) ?? comparedWith;\n if (tooltip !== undefined) model.tooltip = tooltip;\n const icon = tooltipIcon(configuration.tooltip_icon);\n if (icon !== undefined) model.tooltipIcon = icon;\n const color = stringValue(configuration.color);\n if (color !== undefined) model.color = color;\n const reference = numberValue(result.delta_ref);\n if (reference !== undefined) {\n model.reference = {\n value: reference,\n formattedValue: formatValue(reference, {\n format: valueFormat,\n prefix: valuePrefix,\n }),\n };\n }\n return model;\n}\n\nfunction kpiFrame(\n widget: WidgetSpec,\n result: WidgetResult,\n context: RendererContext,\n): RendererFrame {\n const display = displayBlock(widget, \"kpi\");\n const frame = rendererFrame(\n widget,\n \"kpi\",\n context.widgetDefaults,\n context.framed,\n );\n if (!frame.showObjectHeader && frame.label === undefined) {\n const label = stringValue(result.label) ?? widget.metadata.name;\n frame.label = {\n text: label,\n position: display.position === \"bottom\" ? \"bottom\" : \"top\",\n };\n }\n return frame;\n}\n\nexport function buildKpiRendererModel(\n widget: WidgetSpec,\n result: WidgetResult,\n context: RendererContext = {},\n): KpiRendererModel {\n const display = displayBlock(widget, \"kpi\");\n const value = Number(result.value);\n const format =\n stringValue(display.format) ?? stringValue(result.format) ?? \"number\";\n const prefix = stringValue(display.prefix) ?? \"\";\n const suffix = stringValue(display.suffix) ?? \"\";\n const decimals = numberValue(display.decimals);\n const options = {\n format,\n prefix,\n suffix,\n compact: display.compact === true,\n ...(decimals === undefined ? {} : { decimals }),\n };\n const formattedValue = formatValue(value, options);\n const model: KpiRendererModel = {\n kind: \"kpi\",\n frame: kpiFrame(widget, result, context),\n value,\n formattedValue,\n settledValue: formattedValue,\n valueFormat: options,\n };\n const delta = kpiDelta(result, display, format, prefix);\n if (delta !== undefined) model.delta = delta;\n const note = stringValue(result.delta_note);\n if (note !== undefined) model.note = note;\n return model;\n}\n\nfunction content(raw: unknown, context: RendererContext): string {\n return fillFilterTokens(\n stringValue(raw) ?? \"\",\n context.filters ?? {},\n context.filterLabels ?? {},\n );\n}\n\nexport function buildTextRendererModel(\n widget: WidgetSpec,\n context: RendererContext = {},\n): TextRendererModel {\n const display = displayBlock(widget, \"text\");\n const custom = isRecord(display.style)\n ? Object.fromEntries(\n Object.entries(display.style).filter(\n (entry): entry is [string, string | number] =>\n typeof entry[1] === \"string\" || typeof entry[1] === \"number\",\n ),\n )\n : {};\n const model: TextRendererModel = {\n kind: \"text\",\n frame: rendererFrame(\n widget,\n \"text\",\n context.widgetDefaults,\n context.framed,\n ),\n content: content(display.content, context),\n contentFormat: display.markdown === true ? \"markdown\" : \"text\",\n style: {\n textAlign:\n display.text_align === \"center\" ||\n display.text_align === \"right\" ||\n display.text_align === \"justify\"\n ? display.text_align\n : \"left\",\n verticalAlign:\n display.vertical_align === \"middle\" ||\n display.vertical_align === \"bottom\"\n ? display.vertical_align\n : \"top\",\n truncate: display.truncate === true,\n custom,\n },\n };\n const style = model.style;\n const fontSize = display.font_size;\n if (typeof fontSize === \"string\" || typeof fontSize === \"number\") {\n style.fontSize = fontSize;\n }\n const fontWeight = display.font_weight;\n if (typeof fontWeight === \"string\" || typeof fontWeight === \"number\") {\n style.fontWeight = fontWeight;\n }\n const color = stringValue(display.color);\n if (color !== undefined) style.color = color;\n const lineHeight = display.line_height;\n if (typeof lineHeight === \"string\" || typeof lineHeight === \"number\") {\n style.lineHeight = lineHeight;\n }\n const letterSpacing = display.letter_spacing;\n if (typeof letterSpacing === \"string\" || typeof letterSpacing === \"number\") {\n style.letterSpacing = letterSpacing;\n }\n if (\n display.white_space === \"normal\" ||\n display.white_space === \"nowrap\" ||\n display.white_space === \"pre\" ||\n display.white_space === \"pre-wrap\" ||\n display.white_space === \"pre-line\"\n ) {\n style.whiteSpace = display.white_space;\n }\n return model;\n}\n\nexport function buildMarkdownRendererModel(\n widget: WidgetSpec,\n context: RendererContext = {},\n): MarkdownRendererModel {\n const display = displayBlock(widget, \"markdown\");\n return {\n kind: \"markdown\",\n frame: rendererFrame(\n widget,\n \"markdown\",\n context.widgetDefaults,\n context.framed,\n ),\n content: content(display.content, context),\n };\n}\n\nexport function buildImageRendererModel(\n widget: WidgetSpec,\n context: RendererContext = {},\n): BasicRendererModel {\n const display = displayBlock(widget, \"image\");\n return {\n kind: \"image\",\n frame: rendererFrame(\n widget,\n \"image\",\n context.widgetDefaults,\n context.framed,\n ),\n source: stringValue(display.url) ?? null,\n alt: stringValue(display.alt) ?? widget.metadata.name,\n objectFit: display.object_fit === \"cover\" ? \"cover\" : \"contain\",\n };\n}\n\nfunction extensionName(widget: WidgetSpec): string | undefined {\n const component = widget.spec.component;\n if (component !== \"kpi\" && component !== \"echarts\") return undefined;\n return stringValue(displayBlock(widget, component).customRenderer);\n}\n\nfunction extensionModel(\n name: string,\n widget: WidgetSpec,\n result: WidgetResult,\n context: RendererContext,\n): ExtensionRendererModel | undefined {\n const renderer = context.registry?.get(name);\n if (renderer === undefined) return undefined;\n const component = widget.spec.component === \"kpi\" ? \"kpi\" : \"echarts\";\n const frame = rendererFrame(\n widget,\n component,\n context.widgetDefaults,\n context.framed,\n );\n return {\n kind: \"extension\",\n frame,\n name,\n content: renderer({ widget, result, frame, context }),\n };\n}\n\nexport function buildBasicRendererModel(\n widget: WidgetSpec,\n result: WidgetResult = {},\n context: RendererContext = {},\n): BasicRendererModel {\n const extension = extensionName(widget);\n if (extension !== undefined) {\n const model = extensionModel(extension, widget, result, context);\n if (model !== undefined) return model;\n }\n\n switch (widget.spec.component) {\n case \"kpi\":\n return buildKpiRendererModel(widget, result, context);\n case \"echarts\":\n return buildChartRendererModel(widget, result, context);\n case \"table\":\n return buildTableRendererModel(widget, result, context);\n case \"tabulator\":\n return buildTabulatorRendererModel(widget, result, context);\n case \"pivot_table\":\n return buildPivotRendererModel(widget, result, context);\n case \"text\":\n return buildTextRendererModel(widget, context);\n case \"markdown\":\n return buildMarkdownRendererModel(widget, context);\n case \"image\":\n return buildImageRendererModel(widget, context);\n default:\n return {\n kind: \"unknown\",\n frame: {\n widgetId: widget.metadata.id,\n component: widget.spec.component ?? \"\",\n theme: {},\n showObjectHeader: false,\n interactive: false,\n },\n message: \"Unknown widget type\",\n };\n }\n}\n\nexport function buildWidgetRendererModel(\n widget: WidgetSpec,\n result: WidgetResult = {},\n context: RendererContext = {},\n): WidgetRenderResolution {\n const stateOptions = {\n ...(context.loading === undefined ? {} : { loading: context.loading }),\n ...(context.answeredOnce === undefined\n ? {}\n : { answeredOnce: context.answeredOnce }),\n ...(context.retryable === undefined\n ? {}\n : { retryable: context.retryable }),\n };\n const resolution = resolveWidgetRenderState(widget, result, stateOptions);\n if (resolution.state.kind !== \"ready\") return resolution;\n const extension = extensionName(widget);\n if (\n extension !== undefined &&\n context.registry?.get(extension) === undefined\n ) {\n return {\n ...resolution,\n state: { kind: \"notice\", message: `Unknown renderer: ${extension}` },\n };\n }\n return {\n ...resolution,\n model: buildBasicRendererModel(widget, result, context),\n };\n}\n","function safeLink(value: string): string | null {\n if (\n value.startsWith(\"#\") ||\n value.startsWith(\"/\") ||\n /^https?:\\/\\//u.test(value) ||\n /^mailto:/u.test(value)\n ) {\n return value;\n }\n return null;\n}\n\nexport function renderInlineMarkdown(\n document: Document,\n parent: HTMLElement,\n content: string,\n): void {\n const pattern =\n /(\\*\\*[^*]+\\*\\*|~~[^~]+~~|`[^`]+`|\\[[^\\]]+\\]\\([^)]+\\)|\\*[^*]+\\*)/gu;\n let offset = 0;\n for (const match of content.matchAll(pattern)) {\n const index = match.index;\n if (index > offset) {\n parent.append(document.createTextNode(content.slice(offset, index)));\n }\n const token = match[0];\n if (token.startsWith(\"**\")) {\n const strong = document.createElement(\"strong\");\n strong.textContent = token.slice(2, -2);\n parent.append(strong);\n } else if (token.startsWith(\"~~\")) {\n const strike = document.createElement(\"del\");\n strike.textContent = token.slice(2, -2);\n parent.append(strike);\n } else if (token.startsWith(\"`\")) {\n const code = document.createElement(\"code\");\n code.textContent = token.slice(1, -1);\n parent.append(code);\n } else if (token.startsWith(\"[\")) {\n const parts = /^\\[([^\\]]+)\\]\\(([^)]+)\\)$/u.exec(token);\n const href = parts === null ? null : safeLink(parts[2] ?? \"\");\n if (parts === null || href === null) {\n parent.append(document.createTextNode(token));\n } else {\n const link = document.createElement(\"a\");\n link.textContent = parts[1] ?? \"\";\n link.href = href;\n if (/^https?:\\/\\//u.test(href)) {\n link.rel = \"noreferrer\";\n link.target = \"_blank\";\n }\n parent.append(link);\n }\n } else {\n const emphasis = document.createElement(\"em\");\n emphasis.textContent = token.slice(1, -1);\n parent.append(emphasis);\n }\n offset = index + token.length;\n }\n if (offset < content.length) {\n parent.append(document.createTextNode(content.slice(offset)));\n }\n}\n\nexport function renderMarkdown(\n document: Document,\n parent: HTMLElement,\n markdown: string,\n): void {\n const lines = markdown.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n let list: HTMLUListElement | HTMLOListElement | null = null;\n let paragraph: HTMLParagraphElement | null = null;\n let fence: HTMLElement | null = null;\n\n const closeBlocks = (): void => {\n list = null;\n paragraph = null;\n };\n\n for (const line of lines) {\n if (fence !== null) {\n if (/^\\s*```/u.test(line)) {\n fence = null;\n } else {\n fence.textContent = `${fence.textContent ?? \"\"}${line}\\n`;\n }\n continue;\n }\n if (/^\\s*```/u.test(line)) {\n closeBlocks();\n const pre = document.createElement(\"pre\");\n fence = document.createElement(\"code\");\n pre.append(fence);\n parent.append(pre);\n continue;\n }\n const heading = /^(#{1,6})\\s+(.+)$/u.exec(line);\n const bullet = /^\\s*[-*+]\\s+(.+)$/u.exec(line);\n const numbered = /^\\s*\\d+[.)]\\s+(.+)$/u.exec(line);\n const quote = /^\\s*>\\s?(.*)$/u.exec(line);\n const item = bullet ?? numbered;\n if (item !== null) {\n const tag = bullet === null ? \"ol\" : \"ul\";\n if (list === null || list.tagName.toLowerCase() !== tag) {\n list = document.createElement(tag);\n parent.append(list);\n }\n paragraph = null;\n const entry = document.createElement(\"li\");\n renderInlineMarkdown(document, entry, item[1] ?? \"\");\n list.append(entry);\n continue;\n }\n if (/^\\s*([-*_])(\\s*\\1){2,}\\s*$/u.test(line)) {\n closeBlocks();\n parent.append(document.createElement(\"hr\"));\n continue;\n }\n if (line.trim().length === 0) {\n closeBlocks();\n continue;\n }\n if (heading !== null) {\n closeBlocks();\n const block = document.createElement(\n `h${heading[1]?.length ?? 1}` as \"h1\",\n );\n renderInlineMarkdown(document, block, heading[2] ?? \"\");\n parent.append(block);\n continue;\n }\n if (quote !== null) {\n closeBlocks();\n const block = document.createElement(\"blockquote\");\n renderInlineMarkdown(document, block, quote[1] ?? \"\");\n parent.append(block);\n continue;\n }\n list = null;\n if (paragraph === null) {\n paragraph = document.createElement(\"p\");\n parent.append(paragraph);\n } else {\n paragraph.append(document.createTextNode(\" \"));\n }\n renderInlineMarkdown(document, paragraph, line.trim());\n }\n}\n","import {\n getClickInteraction,\n type WidgetInteractionContext,\n} from \"@dlh.io/bideux-dashboard-core\";\nimport {\n buildWidgetRendererModel,\n describeFilter,\n filterOptions,\n type BasicRendererModel,\n type FilterOption,\n type ImageRendererModel,\n type KpiRendererModel,\n type MarkdownRendererModel,\n type TextRendererModel,\n type WidgetSpec,\n} from \"@dlh.io/bideux-dashboard-renderers\";\n\nimport {\n applyWidgetTheme,\n clearElement,\n createLabel,\n createMessage,\n setStyles,\n} from \"./dom.js\";\nimport { renderMarkdown } from \"./markdown.js\";\nimport {\n resolveRendererTheme,\n type BrowserRenderer,\n type NativeWidgetRenderInput,\n type RendererHostCallbacks,\n type RendererExtensionMount,\n type RendererThemeTokens,\n} from \"./types.js\";\n\nfunction record(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction frameContainer(\n element: HTMLElement,\n model: BasicRendererModel,\n tokens: RendererThemeTokens,\n): HTMLElement {\n applyWidgetTheme(element, model.frame, tokens);\n setStyles(element, {\n display: \"flex\",\n \"flex-direction\": \"column\",\n gap: \"8px\",\n overflow: \"auto\",\n });\n const document = element.ownerDocument;\n const body = document.createElement(\"div\");\n body.dataset.bideuxPart = \"body\";\n setStyles(body, { flex: \"1\", \"min-height\": \"0\" });\n if (\n model.frame.label?.position === \"top\" &&\n model.frame.label.text !== undefined\n ) {\n element.append(createLabel(document, model.frame.label.text, tokens));\n }\n element.append(body);\n if (\n model.frame.label?.position === \"bottom\" &&\n model.frame.label.text !== undefined\n ) {\n element.append(createLabel(document, model.frame.label.text, tokens));\n }\n return body;\n}\n\nfunction bindInteraction(\n element: HTMLElement,\n widget: WidgetSpec,\n callbacks: RendererHostCallbacks,\n): void {\n const interaction = getClickInteraction(widget);\n if (interaction === undefined || callbacks.onInteraction === undefined) {\n return;\n }\n const context: WidgetInteractionContext = {\n widgetId: widget.metadata.id,\n };\n const activate = () => callbacks.onInteraction?.(interaction, context);\n element.tabIndex = 0;\n element.setAttribute(\"role\", \"button\");\n element.addEventListener(\"click\", activate);\n element.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n activate();\n }\n });\n}\n\nfunction renderKpi(\n body: HTMLElement,\n model: KpiRendererModel,\n tokens: RendererThemeTokens,\n): void {\n setStyles(body, {\n display: \"flex\",\n \"flex-direction\": \"column\",\n \"justify-content\": \"center\",\n gap: \"8px\",\n });\n const value = body.ownerDocument.createElement(\"strong\");\n value.dataset.bideuxPart = \"kpi-value\";\n value.textContent = model.formattedValue;\n setStyles(value, {\n color: tokens.foreground,\n \"font-size\": \"clamp(2rem, 5vw, 3rem)\",\n \"letter-spacing\": \"-0.04em\",\n });\n body.append(value);\n if (model.delta !== undefined) {\n const delta = body.ownerDocument.createElement(\"span\");\n delta.dataset.tone = model.delta.tone;\n delta.textContent = `${model.delta.icon === \"up\" ? \"↑ \" : model.delta.icon === \"down\" ? \"↓ \" : \"\"}${model.delta.formattedValue}${model.delta.comparedWith === undefined ? \"\" : ` ${model.delta.comparedWith}`}`;\n setStyles(delta, {\n color:\n model.delta.color ??\n (model.delta.tone === \"down\" ? tokens.danger : tokens.primary),\n \"font-weight\": \"700\",\n });\n body.append(delta);\n }\n if (model.note !== undefined) {\n const note = body.ownerDocument.createElement(\"small\");\n note.textContent = model.note;\n note.style.color = tokens.mutedForeground;\n body.append(note);\n }\n}\n\nfunction renderText(body: HTMLElement, model: TextRendererModel): void {\n const content = body.ownerDocument.createElement(\"div\");\n content.textContent = model.content;\n setStyles(content, {\n display: \"flex\",\n height: \"100%\",\n \"align-items\":\n model.style.verticalAlign === \"middle\"\n ? \"center\"\n : model.style.verticalAlign === \"bottom\"\n ? \"flex-end\"\n : \"flex-start\",\n \"text-align\": model.style.textAlign,\n \"font-size\":\n typeof model.style.fontSize === \"number\"\n ? `${model.style.fontSize}px`\n : model.style.fontSize,\n \"font-weight\":\n model.style.fontWeight === undefined\n ? undefined\n : String(model.style.fontWeight),\n color: model.style.color,\n \"line-height\":\n model.style.lineHeight === undefined\n ? undefined\n : String(model.style.lineHeight),\n \"letter-spacing\":\n model.style.letterSpacing === undefined\n ? undefined\n : String(model.style.letterSpacing),\n \"white-space\": model.style.whiteSpace,\n overflow: model.style.truncate ? \"hidden\" : undefined,\n \"text-overflow\": model.style.truncate ? \"ellipsis\" : undefined,\n });\n for (const [property, value] of Object.entries(model.style.custom)) {\n content.style.setProperty(property, String(value));\n }\n if (model.contentFormat === \"markdown\") {\n content.textContent = \"\";\n renderMarkdown(body.ownerDocument, content, model.content);\n }\n body.append(content);\n}\n\nfunction renderMarkdownModel(\n body: HTMLElement,\n model: MarkdownRendererModel,\n): void {\n body.dataset.bideuxPart = \"markdown\";\n renderMarkdown(body.ownerDocument, body, model.content);\n}\n\nfunction renderImage(body: HTMLElement, model: ImageRendererModel): void {\n if (model.source === null) {\n body.append(\n createMessage(\n body.ownerDocument,\n \"No image source\",\n \"notice\",\n resolveRendererTheme(),\n ),\n );\n return;\n }\n const image = body.ownerDocument.createElement(\"img\");\n image.src = model.source;\n image.alt = model.alt;\n setStyles(image, {\n width: \"100%\",\n height: \"100%\",\n \"object-fit\": model.objectFit,\n });\n body.append(image);\n}\n\nfunction renderFilter(\n input: NativeWidgetRenderInput,\n tokens: RendererThemeTokens,\n): void {\n const { element, widget, callbacks = {} } = input;\n const result = input.result ?? {};\n const component = widget.spec.component === \"select\" ? \"select\" : \"filter\";\n const display = record(record(widget.spec.display)[component]);\n const options = filterOptions(widget, result);\n const defaultValue =\n display.default_value ?? record(widget.spec.data).default_value ?? \"\";\n const value = input.filterValue ?? defaultValue;\n const frame = {\n widgetId: widget.metadata.id,\n component,\n theme: record(display.theme),\n showObjectHeader: false,\n interactive: true,\n };\n applyWidgetTheme(element, frame, tokens);\n setStyles(element, {\n display: \"flex\",\n \"flex-direction\": \"column\",\n \"justify-content\": \"center\",\n gap: \"6px\",\n });\n const document = element.ownerDocument;\n const label = document.createElement(\"label\");\n label.textContent =\n stringValue(record(display.label).text) ??\n stringValue(display.label) ??\n widget.metadata.name;\n label.htmlFor = `${widget.metadata.id}-control`;\n setStyles(label, {\n color: tokens.mutedForeground,\n \"font-size\": \"0.78rem\",\n \"font-weight\": \"700\",\n });\n element.append(label);\n\n const control = stringValue(display.control) ?? \"select\";\n if (control === \"radio\") {\n renderRadios(document, element, input, options, value, tokens);\n } else if (control === \"date_range\") {\n renderDateRange(document, element, input, value, tokens);\n } else if (control === \"date\" || control === \"calendar\") {\n const date = document.createElement(\"input\");\n date.id = `${widget.metadata.id}-control`;\n date.type = \"date\";\n date.value = typeof value === \"string\" ? value : \"\";\n styleControl(date, tokens);\n date.addEventListener(\"change\", () => {\n callbacks.onFilterChange?.(widget.metadata.id, date.value);\n callbacks.onFilterLabelChange?.(widget.metadata.id, date.value || \"All\");\n });\n element.append(date);\n } else if (control === \"input\" || control === \"custom\") {\n const text = document.createElement(\"input\");\n text.id = `${widget.metadata.id}-control`;\n text.type = \"text\";\n text.value = value === null || value === undefined ? \"\" : String(value);\n text.placeholder = stringValue(display.placeholder) ?? \"\";\n styleControl(text, tokens);\n text.addEventListener(\"change\", () => {\n callbacks.onFilterChange?.(widget.metadata.id, text.value);\n callbacks.onFilterLabelChange?.(widget.metadata.id, text.value || \"All\");\n });\n element.append(text);\n } else {\n renderSelect(document, element, input, options, value, tokens);\n }\n callbacks.onFilterLabelChange?.(\n widget.metadata.id,\n describeFilter(value, options),\n );\n}\n\nfunction styleControl(\n element: HTMLInputElement | HTMLSelectElement,\n tokens: RendererThemeTokens,\n): void {\n setStyles(element, {\n width: \"100%\",\n padding: \"9px 10px\",\n border: `1px solid ${tokens.border}`,\n \"border-radius\": \"8px\",\n color: tokens.foreground,\n background: tokens.surface,\n \"font-family\": tokens.fontFamily,\n });\n}\n\nfunction renderSelect(\n document: Document,\n element: HTMLElement,\n input: NativeWidgetRenderInput,\n options: FilterOption[],\n value: unknown,\n tokens: RendererThemeTokens,\n): void {\n const select = document.createElement(\"select\");\n select.id = `${input.widget.metadata.id}-control`;\n select.multiple =\n record(\n record(input.widget.spec.display)[\n input.widget.spec.component === \"select\" ? \"select\" : \"filter\"\n ],\n ).multi === true;\n const selected = Array.isArray(value)\n ? value.map(String)\n : [value === null || value === undefined ? \"\" : String(value)];\n for (const option of options) {\n const entry = document.createElement(\"option\");\n entry.value = String(option.value);\n entry.textContent = option.label;\n entry.selected = selected.includes(entry.value);\n select.append(entry);\n }\n styleControl(select, tokens);\n select.addEventListener(\"change\", () => {\n const next = select.multiple\n ? Array.from(select.selectedOptions).map(\n (entry) =>\n options.find((option) => String(option.value) === entry.value)\n ?.value ?? entry.value,\n )\n : (options.find((option) => String(option.value) === select.value)\n ?.value ?? select.value);\n input.callbacks?.onFilterChange?.(input.widget.metadata.id, next);\n input.callbacks?.onFilterLabelChange?.(\n input.widget.metadata.id,\n describeFilter(next, options),\n );\n });\n element.append(select);\n}\n\nfunction renderRadios(\n document: Document,\n element: HTMLElement,\n input: NativeWidgetRenderInput,\n options: FilterOption[],\n value: unknown,\n tokens: RendererThemeTokens,\n): void {\n const group = document.createElement(\"div\");\n group.setAttribute(\"role\", \"radiogroup\");\n group.id = `${input.widget.metadata.id}-control`;\n for (const option of options) {\n const label = document.createElement(\"label\");\n const radio = document.createElement(\"input\");\n radio.type = \"radio\";\n radio.name = `${input.widget.metadata.id}-radio`;\n radio.value = String(option.value);\n radio.checked = String(option.value) === String(value);\n radio.addEventListener(\"change\", () => {\n input.callbacks?.onFilterChange?.(input.widget.metadata.id, option.value);\n input.callbacks?.onFilterLabelChange?.(\n input.widget.metadata.id,\n option.label,\n );\n });\n label.append(radio, document.createTextNode(option.label));\n setStyles(label, {\n display: \"flex\",\n gap: \"6px\",\n color: tokens.foreground,\n });\n group.append(label);\n }\n element.append(group);\n}\n\nfunction renderDateRange(\n document: Document,\n element: HTMLElement,\n input: NativeWidgetRenderInput,\n value: unknown,\n tokens: RendererThemeTokens,\n): void {\n const range = record(value);\n const container = document.createElement(\"div\");\n container.id = `${input.widget.metadata.id}-control`;\n setStyles(container, {\n display: \"grid\",\n \"grid-template-columns\": \"1fr 1fr\",\n gap: \"8px\",\n });\n const start = document.createElement(\"input\");\n const end = document.createElement(\"input\");\n start.type = \"date\";\n end.type = \"date\";\n start.value = stringValue(range.start) ?? \"\";\n end.value = stringValue(range.end) ?? \"\";\n styleControl(start, tokens);\n styleControl(end, tokens);\n const update = () => {\n const next = { start: start.value, end: end.value };\n input.callbacks?.onFilterChange?.(input.widget.metadata.id, next);\n input.callbacks?.onFilterLabelChange?.(\n input.widget.metadata.id,\n `${start.value || \"Start\"} to ${end.value || \"End\"}`,\n );\n };\n start.addEventListener(\"change\", update);\n end.addEventListener(\"change\", update);\n container.append(start, end);\n element.append(container);\n}\n\nfunction renderReadyModel(\n input: NativeWidgetRenderInput,\n model: BasicRendererModel,\n tokens: RendererThemeTokens,\n): BrowserRenderer<RendererExtensionMount> | void {\n const { element, widget, callbacks = {} } = input;\n const body = frameContainer(element, model, tokens);\n bindInteraction(element, widget, callbacks);\n switch (model.kind) {\n case \"kpi\":\n renderKpi(body, model, tokens);\n break;\n case \"text\":\n renderText(body, model);\n break;\n case \"markdown\":\n renderMarkdownModel(body, model);\n break;\n case \"image\":\n renderImage(body, model);\n break;\n case \"extension\":\n return callbacks.renderExtension?.({ element: body, model });\n case \"unknown\":\n body.append(\n createMessage(body.ownerDocument, model.message, \"notice\", tokens),\n );\n break;\n default:\n body.append(\n createMessage(\n body.ownerDocument,\n `Use the ${model.kind} renderer package for this widget.`,\n \"notice\",\n tokens,\n ),\n );\n }\n}\n\nfunction render(\n input: NativeWidgetRenderInput,\n): BrowserRenderer<RendererExtensionMount> | void {\n const { element, widget, callbacks = {} } = input;\n const tokens = resolveRendererTheme(input.theme);\n clearElement(element);\n if (\n widget.spec.component === \"filter\" ||\n widget.spec.component === \"select\"\n ) {\n renderFilter(input, tokens);\n return;\n }\n const resolution = buildWidgetRendererModel(\n widget,\n input.result ?? {},\n input.context ?? {},\n );\n if (resolution.state.kind !== \"ready\") {\n const state = resolution.state;\n element.append(\n createMessage(element.ownerDocument, state.message, state.kind, tokens),\n );\n if (\n state.kind === \"error\" &&\n state.retryable &&\n callbacks.onRetry !== undefined\n ) {\n const retry = element.ownerDocument.createElement(\"button\");\n retry.type = \"button\";\n retry.textContent = \"Try again\";\n retry.addEventListener(\"click\", callbacks.onRetry);\n element.append(retry);\n }\n return;\n }\n if (resolution.model !== undefined) {\n return renderReadyModel(input, resolution.model, tokens);\n }\n}\n\nexport function createNativeWidgetRenderer(\n input: NativeWidgetRenderInput,\n): BrowserRenderer<NativeWidgetRenderInput> {\n let current = input;\n let extension: BrowserRenderer<RendererExtensionMount> | void;\n try {\n extension = render(current);\n } catch (error) {\n const normalized =\n error instanceof Error ? error : new Error(\"Native rendering failed\");\n input.callbacks?.onError?.(normalized);\n throw normalized;\n }\n return {\n update(next) {\n if (next.element !== current.element) {\n throw new Error(\n \"Native renderers cannot move between elements. Create a new renderer.\",\n );\n }\n extension?.destroy();\n current = next;\n extension = render(current);\n },\n resize() {\n extension?.resize();\n },\n destroy() {\n extension?.destroy();\n clearElement(current.element);\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { createNativeWidgetRenderer } from './chunk-RRWZKNDZ.js';
|
|
2
|
+
import { createEChartsRenderer } from './chunk-FVO6E22Z.js';
|
|
3
|
+
import { buildChartRendererModel } from './chunk-OMPR32AR.js';
|
|
4
|
+
import { createTabulatorRenderer } from './chunk-GRITOB4M.js';
|
|
5
|
+
import { createRevoGridRenderer } from './chunk-NGM5R3LW.js';
|
|
6
|
+
import { buildPivotRendererModel } from './chunk-LHD445PJ.js';
|
|
7
|
+
import { buildTabulatorRendererModel } from './chunk-QDQ5VVTC.js';
|
|
8
|
+
import { defaultRendererTheme } from './chunk-75CRTQK7.js';
|
|
9
|
+
|
|
10
|
+
// src/renderers/index.ts
|
|
11
|
+
var CSS_TOKENS = [
|
|
12
|
+
["foreground", "--foreground"],
|
|
13
|
+
["mutedForeground", "--muted-foreground"],
|
|
14
|
+
["border", "--border"],
|
|
15
|
+
["surface", "--popover"],
|
|
16
|
+
["surfaceForeground", "--popover-foreground"],
|
|
17
|
+
["primary", "--primary"],
|
|
18
|
+
["secondary", "--secondary"],
|
|
19
|
+
["danger", "--destructive"]
|
|
20
|
+
];
|
|
21
|
+
function cssVariableTheme(element) {
|
|
22
|
+
const view = element.ownerDocument.defaultView;
|
|
23
|
+
if (view === null) return defaultRendererTheme;
|
|
24
|
+
const style = view.getComputedStyle(element.ownerDocument.documentElement);
|
|
25
|
+
const tokens = { ...defaultRendererTheme };
|
|
26
|
+
for (const [key, name] of CSS_TOKENS) {
|
|
27
|
+
const value = style.getPropertyValue(name).trim();
|
|
28
|
+
if (value.length > 0) {
|
|
29
|
+
tokens[key] = value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const accent = style.getPropertyValue("--accent").trim();
|
|
33
|
+
if (tokens.primary !== defaultRendererTheme.primary) {
|
|
34
|
+
tokens.seriesColors = [
|
|
35
|
+
tokens.primary,
|
|
36
|
+
tokens.secondary,
|
|
37
|
+
...accent.length > 0 ? [accent] : [],
|
|
38
|
+
...defaultRendererTheme.seriesColors
|
|
39
|
+
];
|
|
40
|
+
tokens.heatmapColors = [
|
|
41
|
+
accent.length > 0 ? accent : tokens.border,
|
|
42
|
+
tokens.primary,
|
|
43
|
+
tokens.secondary
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
return tokens;
|
|
47
|
+
}
|
|
48
|
+
function isThemeTokens(value) {
|
|
49
|
+
return value !== void 0 && Object.keys(value).length > 0;
|
|
50
|
+
}
|
|
51
|
+
function resolve(source, input) {
|
|
52
|
+
if (isThemeTokens(input.theme)) return input.theme;
|
|
53
|
+
return typeof source === "function" ? source(input.element) : source;
|
|
54
|
+
}
|
|
55
|
+
function nativeInput(input, theme) {
|
|
56
|
+
return {
|
|
57
|
+
element: input.element,
|
|
58
|
+
widget: input.widget,
|
|
59
|
+
theme,
|
|
60
|
+
...input.result === void 0 ? {} : { result: input.result },
|
|
61
|
+
...input.context === void 0 ? {} : { context: input.context },
|
|
62
|
+
...input.filterValue === void 0 ? {} : { filterValue: input.filterValue },
|
|
63
|
+
...input.callbacks === void 0 ? {} : { callbacks: input.callbacks }
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function nativeFactory(source) {
|
|
67
|
+
return (input) => {
|
|
68
|
+
const renderer = createNativeWidgetRenderer(
|
|
69
|
+
nativeInput(input, resolve(source, input))
|
|
70
|
+
);
|
|
71
|
+
return {
|
|
72
|
+
update: (next) => renderer.update(nativeInput(next, resolve(source, next))),
|
|
73
|
+
resize: () => renderer.resize(),
|
|
74
|
+
destroy: () => renderer.destroy()
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function chartFactory(source) {
|
|
79
|
+
return (input) => {
|
|
80
|
+
const theme = resolve(source, input);
|
|
81
|
+
const chartInput = (next) => ({
|
|
82
|
+
element: next.element,
|
|
83
|
+
theme,
|
|
84
|
+
model: buildChartRendererModel(
|
|
85
|
+
next.widget,
|
|
86
|
+
next.result ?? {},
|
|
87
|
+
next.context ?? {}
|
|
88
|
+
),
|
|
89
|
+
widget: next.widget,
|
|
90
|
+
...next.result === void 0 ? {} : { result: next.result },
|
|
91
|
+
...next.callbacks === void 0 ? {} : { callbacks: next.callbacks }
|
|
92
|
+
});
|
|
93
|
+
const renderer = createEChartsRenderer(chartInput(input));
|
|
94
|
+
return {
|
|
95
|
+
update: (next) => renderer.update(chartInput(next)),
|
|
96
|
+
resize: () => renderer.resize(),
|
|
97
|
+
destroy: () => renderer.destroy()
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function tableFactory(source) {
|
|
102
|
+
return (input) => {
|
|
103
|
+
const theme = resolve(source, input);
|
|
104
|
+
const tableInput = (next) => ({
|
|
105
|
+
element: next.element,
|
|
106
|
+
theme,
|
|
107
|
+
model: buildTabulatorRendererModel(
|
|
108
|
+
next.widget,
|
|
109
|
+
next.result ?? {},
|
|
110
|
+
next.context ?? {}
|
|
111
|
+
),
|
|
112
|
+
widget: next.widget,
|
|
113
|
+
...next.callbacks === void 0 ? {} : { callbacks: next.callbacks }
|
|
114
|
+
});
|
|
115
|
+
const renderer = createTabulatorRenderer(tableInput(input));
|
|
116
|
+
return {
|
|
117
|
+
update: (next) => renderer.update(tableInput(next)),
|
|
118
|
+
resize: () => renderer.resize(),
|
|
119
|
+
destroy: () => renderer.destroy()
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function pivotFactory(source) {
|
|
124
|
+
return async (input) => {
|
|
125
|
+
const theme = resolve(source, input);
|
|
126
|
+
const model = (next) => buildPivotRendererModel(
|
|
127
|
+
next.widget,
|
|
128
|
+
next.result ?? {},
|
|
129
|
+
next.context ?? {}
|
|
130
|
+
);
|
|
131
|
+
const ready = model(input);
|
|
132
|
+
if (ready.status !== "ready") {
|
|
133
|
+
throw new Error(ready.message);
|
|
134
|
+
}
|
|
135
|
+
const renderer = await createRevoGridRenderer({
|
|
136
|
+
element: input.element,
|
|
137
|
+
theme,
|
|
138
|
+
model: ready,
|
|
139
|
+
widget: input.widget,
|
|
140
|
+
...input.callbacks === void 0 ? {} : { callbacks: input.callbacks }
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
update: (next) => {
|
|
144
|
+
const nextModel = model(next);
|
|
145
|
+
if (nextModel.status !== "ready") return;
|
|
146
|
+
renderer.update({
|
|
147
|
+
element: next.element,
|
|
148
|
+
theme,
|
|
149
|
+
model: nextModel,
|
|
150
|
+
widget: next.widget,
|
|
151
|
+
...next.callbacks === void 0 ? {} : { callbacks: next.callbacks }
|
|
152
|
+
});
|
|
153
|
+
},
|
|
154
|
+
resize: () => renderer.resize(),
|
|
155
|
+
destroy: () => renderer.destroy()
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function createDefaultRenderers(options = {}) {
|
|
160
|
+
const theme = options.theme ?? cssVariableTheme;
|
|
161
|
+
const chart = chartFactory(theme);
|
|
162
|
+
const table = tableFactory(theme);
|
|
163
|
+
const pivot = pivotFactory(theme);
|
|
164
|
+
return {
|
|
165
|
+
default: nativeFactory(theme),
|
|
166
|
+
echarts: chart,
|
|
167
|
+
chart,
|
|
168
|
+
table,
|
|
169
|
+
tabulator: table,
|
|
170
|
+
pivot_table: pivot,
|
|
171
|
+
pivot,
|
|
172
|
+
...options.overrides
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export { createDefaultRenderers, cssVariableTheme };
|
|
177
|
+
//# sourceMappingURL=chunk-SRWIBMEB.js.map
|
|
178
|
+
//# sourceMappingURL=chunk-SRWIBMEB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/renderers/index.ts"],"names":[],"mappings":";;;;;;;;;;AAsEA,IAAM,UAAA,GAAyD;AAAA,EAC7D,CAAC,cAAc,cAAc,CAAA;AAAA,EAC7B,CAAC,mBAAmB,oBAAoB,CAAA;AAAA,EACxC,CAAC,UAAU,UAAU,CAAA;AAAA,EACrB,CAAC,WAAW,WAAW,CAAA;AAAA,EACvB,CAAC,qBAAqB,sBAAsB,CAAA;AAAA,EAC5C,CAAC,WAAW,WAAW,CAAA;AAAA,EACvB,CAAC,aAAa,aAAa,CAAA;AAAA,EAC3B,CAAC,UAAU,eAAe;AAC5B,CAAA;AAOO,SAAS,iBAAiB,OAAA,EAA2C;AAC1E,EAAA,MAAM,IAAA,GAAO,QAAQ,aAAA,CAAc,WAAA;AACnC,EAAA,IAAI,IAAA,KAAS,MAAM,OAAO,oBAAA;AAC1B,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,cAAc,eAAe,CAAA;AACzE,EAAA,MAAM,MAAA,GAA8B,EAAE,GAAG,oBAAA,EAAqB;AAC9D,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,CAAA,IAAK,UAAA,EAAY;AACpC,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,gBAAA,CAAiB,IAAI,EAAE,IAAA,EAAK;AAChD,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,gBAAA,CAAiB,UAAU,EAAE,IAAA,EAAK;AACvD,EAAA,IAAI,MAAA,CAAO,OAAA,KAAY,oBAAA,CAAqB,OAAA,EAAS;AACnD,IAAA,MAAA,CAAO,YAAA,GAAe;AAAA,MACpB,MAAA,CAAO,OAAA;AAAA,MACP,MAAA,CAAO,SAAA;AAAA,MACP,GAAI,MAAA,CAAO,MAAA,GAAS,IAAI,CAAC,MAAM,IAAI,EAAC;AAAA,MACpC,GAAG,oBAAA,CAAqB;AAAA,KAC1B;AACA,IAAA,MAAA,CAAO,aAAA,GAAgB;AAAA,MACrB,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,MACpC,MAAA,CAAO,OAAA;AAAA,MACP,MAAA,CAAO;AAAA,KACT;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cACP,KAAA,EACuC;AACvC,EAAA,OAAO,UAAU,MAAA,IAAa,MAAA,CAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,CAAA;AAC5D;AAEA,SAAS,OAAA,CACP,QACA,KAAA,EAC8B;AAC9B,EAAA,IAAI,aAAA,CAAc,KAAA,CAAM,KAAK,CAAA,SAAU,KAAA,CAAM,KAAA;AAC7C,EAAA,OAAO,OAAO,MAAA,KAAW,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,MAAA;AAChE;AAEA,SAAS,WAAA,CACP,OACA,KAAA,EACyB;AACzB,EAAA,OAAO;AAAA,IACL,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,KAAA;AAAA,IACA,GAAI,MAAM,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAO;AAAA,IAC7D,GAAI,MAAM,OAAA,KAAY,MAAA,GAAY,EAAC,GAAI,EAAE,OAAA,EAAS,KAAA,CAAM,OAAA,EAAQ;AAAA,IAChE,GAAI,MAAM,WAAA,KAAgB,MAAA,GACtB,EAAC,GACD,EAAE,WAAA,EAAa,KAAA,CAAM,WAAA,EAAY;AAAA,IACrC,GAAI,MAAM,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,KAAA,CAAM,SAAA;AAAU,GACxE;AACF;AAEA,SAAS,cAAc,MAAA,EAAoD;AACzE,EAAA,OAAO,CAAC,KAAA,KAAU;AAChB,IAAA,MAAM,QAAA,GAAW,0BAAA;AAAA,MACf,WAAA,CAAY,KAAA,EAAO,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAC;AAAA,KAC3C;AACA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,CAAC,IAAA,KACP,QAAA,CAAS,MAAA,CAAO,WAAA,CAAY,IAAA,EAAM,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAC,CAAC,CAAA;AAAA,MAC1D,MAAA,EAAQ,MAAM,QAAA,CAAS,MAAA,EAAO;AAAA,MAC9B,OAAA,EAAS,MAAM,QAAA,CAAS,OAAA;AAAQ,KAClC;AAAA,EACF,CAAA;AACF;AAEA,SAAS,aAAa,MAAA,EAAoD;AACxE,EAAA,OAAO,CAAC,KAAA,KAAU;AAChB,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA;AACnC,IAAA,MAAM,UAAA,GAAa,CAAC,IAAA,MAAmC;AAAA,MACrD,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,KAAA;AAAA,MACA,KAAA,EAAO,uBAAA;AAAA,QACL,IAAA,CAAK,MAAA;AAAA,QACL,IAAA,CAAK,UAAU,EAAC;AAAA,QAChB,IAAA,CAAK,WAAW;AAAC,OACnB;AAAA,MACA,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,GAAI,KAAK,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAO;AAAA,MAC3D,GAAI,KAAK,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA;AAAU,KACtE,CAAA;AACA,IAAA,MAAM,QAAA,GAAW,qBAAA,CAAsB,UAAA,CAAW,KAAK,CAAC,CAAA;AACxD,IAAA,OAAO;AAAA,MACL,QAAQ,CAAC,IAAA,KAAS,SAAS,MAAA,CAAO,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,MAClD,MAAA,EAAQ,MAAM,QAAA,CAAS,MAAA,EAAO;AAAA,MAC9B,OAAA,EAAS,MAAM,QAAA,CAAS,OAAA;AAAQ,KAClC;AAAA,EACF,CAAA;AACF;AAEA,SAAS,aAAa,MAAA,EAAoD;AACxE,EAAA,OAAO,CAAC,KAAA,KAAU;AAChB,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA;AACnC,IAAA,MAAM,UAAA,GAAa,CAAC,IAAA,MAAmC;AAAA,MACrD,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,KAAA;AAAA,MACA,KAAA,EAAO,2BAAA;AAAA,QACL,IAAA,CAAK,MAAA;AAAA,QACL,IAAA,CAAK,UAAU,EAAC;AAAA,QAChB,IAAA,CAAK,WAAW;AAAC,OACnB;AAAA,MACA,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,GAAI,KAAK,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA;AAAU,KACtE,CAAA;AACA,IAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,UAAA,CAAW,KAAK,CAAC,CAAA;AAC1D,IAAA,OAAO;AAAA,MACL,QAAQ,CAAC,IAAA,KAAS,SAAS,MAAA,CAAO,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,MAClD,MAAA,EAAQ,MAAM,QAAA,CAAS,MAAA,EAAO;AAAA,MAC9B,OAAA,EAAS,MAAM,QAAA,CAAS,OAAA;AAAQ,KAClC;AAAA,EACF,CAAA;AACF;AAEA,SAAS,aAAa,MAAA,EAAoD;AACxE,EAAA,OAAO,OAAO,KAAA,KAAyC;AACrD,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,KACb,uBAAA;AAAA,MACE,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK,UAAU,EAAC;AAAA,MAChB,IAAA,CAAK,WAAW;AAAC,KACnB;AACF,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAK,CAAA;AACzB,IAAA,IAAI,KAAA,CAAM,WAAW,OAAA,EAAS;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA;AAAA,IAC/B;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,sBAAA,CAAuB;AAAA,MAC5C,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,KAAA;AAAA,MACA,KAAA,EAAO,KAAA;AAAA,MACP,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,GAAI,MAAM,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,KAAA,CAAM,SAAA;AAAU,KACvE,CAAA;AACD,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,CAAC,IAAA,KAAS;AAChB,QAAA,MAAM,SAAA,GAAY,MAAM,IAAI,CAAA;AAC5B,QAAA,IAAI,SAAA,CAAU,WAAW,OAAA,EAAS;AAClC,QAAA,QAAA,CAAS,MAAA,CAAO;AAAA,UACd,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,KAAA;AAAA,UACA,KAAA,EAAO,SAAA;AAAA,UACP,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,GAAI,KAAK,SAAA,KAAc,MAAA,GACnB,EAAC,GACD,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA;AAAU,SACjC,CAAA;AAAA,MACH,CAAA;AAAA,MACA,MAAA,EAAQ,MAAM,QAAA,CAAS,MAAA,EAAO;AAAA,MAC9B,OAAA,EAAS,MAAM,QAAA,CAAS,OAAA;AAAQ,KAClC;AAAA,EACF,CAAA;AACF;AAQO,SAAS,sBAAA,CACd,OAAA,GAAmC,EAAC,EACX;AACzB,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,gBAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,aAAa,KAAK,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,aAAa,KAAK,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,aAAa,KAAK,CAAA;AAChC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,cAAc,KAAK,CAAA;AAAA,IAC5B,OAAA,EAAS,KAAA;AAAA,IACT,KAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,KAAA;AAAA,IACX,WAAA,EAAa,KAAA;AAAA,IACb,KAAA;AAAA,IACA,GAAG,OAAA,CAAQ;AAAA,GACb;AACF","file":"chunk-SRWIBMEB.js","sourcesContent":["/**\n * The three concrete renderers plus one factory map that wires them the way\n * every host so far has: ECharts for charts, Tabulator for tables, RevoGrid for\n * pivots and the plain DOM renderer for everything else.\n */\nimport { createEChartsRenderer } from \"@dlh.io/bideux-dashboard-renderer-echarts\";\nimport { createRevoGridRenderer } from \"@dlh.io/bideux-dashboard-renderer-revogrid\";\nimport { createTabulatorRenderer } from \"@dlh.io/bideux-dashboard-renderer-tabulator\";\nimport {\n createNativeWidgetRenderer,\n defaultRendererTheme,\n} from \"@dlh.io/bideux-dashboard-renderer-web\";\nimport type {\n NativeWidgetRenderInput,\n RendererHostCallbacks,\n RendererThemeTokens,\n WidgetRendererFactories,\n WidgetRendererFactory,\n WidgetRendererHandle,\n} from \"@dlh.io/bideux-dashboard-renderer-web\";\nimport {\n buildChartRendererModel,\n buildPivotRendererModel,\n buildTabulatorRendererModel,\n} from \"@dlh.io/bideux-dashboard-renderers\";\nimport type {\n RendererContext,\n WidgetResult,\n WidgetSpec,\n} from \"@dlh.io/bideux-dashboard-renderers\";\n\nexport * from \"./echarts.js\";\nexport * from \"./tabulator.js\";\nexport * from \"./revogrid.js\";\n\n/**\n * A theme is either fixed tokens or a function of the mount element, which is\n * how a host reads its CSS custom properties live so dark mode and brand\n * changes reach the charts and grids.\n */\nexport type RendererThemeSource =\n | Partial<RendererThemeTokens>\n | ((element: HTMLElement) => Partial<RendererThemeTokens>);\n\nexport interface DefaultRenderersOptions {\n readonly theme?: RendererThemeSource;\n /** Extra or replacement factories, merged over the defaults by component name. */\n readonly overrides?: WidgetRendererFactories;\n}\n\n/**\n * The mount input every renderer in this map accepts. It is the structural\n * meeting point of the React reader's `RendererMountInput` and the web shell's\n * `NativeWidgetRenderInput`, so one map serves both.\n */\nexport interface DefaultRendererMountInput {\n element: HTMLElement;\n widget: WidgetSpec;\n result?: WidgetResult;\n context?: RendererContext;\n filterValue?: unknown;\n callbacks?: RendererHostCallbacks;\n theme?: Partial<RendererThemeTokens> | Record<string, unknown>;\n}\n\ntype ColorToken = Exclude<\n keyof RendererThemeTokens,\n \"seriesColors\" | \"heatmapColors\" | \"fontFamily\"\n>;\n\nconst CSS_TOKENS: readonly (readonly [ColorToken, string])[] = [\n [\"foreground\", \"--foreground\"],\n [\"mutedForeground\", \"--muted-foreground\"],\n [\"border\", \"--border\"],\n [\"surface\", \"--popover\"],\n [\"surfaceForeground\", \"--popover-foreground\"],\n [\"primary\", \"--primary\"],\n [\"secondary\", \"--secondary\"],\n [\"danger\", \"--destructive\"],\n];\n\n/**\n * Reads the shadcn style custom properties from the document root and falls\n * back to the built in palette for any that are missing. Hosts with their own\n * variable names pass a theme function instead.\n */\nexport function cssVariableTheme(element: HTMLElement): RendererThemeTokens {\n const view = element.ownerDocument.defaultView;\n if (view === null) return defaultRendererTheme;\n const style = view.getComputedStyle(element.ownerDocument.documentElement);\n const tokens: RendererThemeTokens = { ...defaultRendererTheme };\n for (const [key, name] of CSS_TOKENS) {\n const value = style.getPropertyValue(name).trim();\n if (value.length > 0) {\n tokens[key] = value;\n }\n }\n const accent = style.getPropertyValue(\"--accent\").trim();\n if (tokens.primary !== defaultRendererTheme.primary) {\n tokens.seriesColors = [\n tokens.primary,\n tokens.secondary,\n ...(accent.length > 0 ? [accent] : []),\n ...defaultRendererTheme.seriesColors,\n ];\n tokens.heatmapColors = [\n accent.length > 0 ? accent : tokens.border,\n tokens.primary,\n tokens.secondary,\n ];\n }\n return tokens;\n}\n\nfunction isThemeTokens(\n value: Partial<RendererThemeTokens> | Record<string, unknown> | undefined,\n): value is Partial<RendererThemeTokens> {\n return value !== undefined && Object.keys(value).length > 0;\n}\n\nfunction resolve(\n source: RendererThemeSource,\n input: DefaultRendererMountInput,\n): Partial<RendererThemeTokens> {\n if (isThemeTokens(input.theme)) return input.theme;\n return typeof source === \"function\" ? source(input.element) : source;\n}\n\nfunction nativeInput(\n input: DefaultRendererMountInput,\n theme: Partial<RendererThemeTokens>,\n): NativeWidgetRenderInput {\n return {\n element: input.element,\n widget: input.widget,\n theme,\n ...(input.result === undefined ? {} : { result: input.result }),\n ...(input.context === undefined ? {} : { context: input.context }),\n ...(input.filterValue === undefined\n ? {}\n : { filterValue: input.filterValue }),\n ...(input.callbacks === undefined ? {} : { callbacks: input.callbacks }),\n };\n}\n\nfunction nativeFactory(source: RendererThemeSource): WidgetRendererFactory {\n return (input) => {\n const renderer = createNativeWidgetRenderer(\n nativeInput(input, resolve(source, input)),\n );\n return {\n update: (next) =>\n renderer.update(nativeInput(next, resolve(source, next))),\n resize: () => renderer.resize(),\n destroy: () => renderer.destroy(),\n };\n };\n}\n\nfunction chartFactory(source: RendererThemeSource): WidgetRendererFactory {\n return (input) => {\n const theme = resolve(source, input);\n const chartInput = (next: NativeWidgetRenderInput) => ({\n element: next.element,\n theme,\n model: buildChartRendererModel(\n next.widget,\n next.result ?? {},\n next.context ?? {},\n ),\n widget: next.widget,\n ...(next.result === undefined ? {} : { result: next.result }),\n ...(next.callbacks === undefined ? {} : { callbacks: next.callbacks }),\n });\n const renderer = createEChartsRenderer(chartInput(input));\n return {\n update: (next) => renderer.update(chartInput(next)),\n resize: () => renderer.resize(),\n destroy: () => renderer.destroy(),\n };\n };\n}\n\nfunction tableFactory(source: RendererThemeSource): WidgetRendererFactory {\n return (input) => {\n const theme = resolve(source, input);\n const tableInput = (next: NativeWidgetRenderInput) => ({\n element: next.element,\n theme,\n model: buildTabulatorRendererModel(\n next.widget,\n next.result ?? {},\n next.context ?? {},\n ),\n widget: next.widget,\n ...(next.callbacks === undefined ? {} : { callbacks: next.callbacks }),\n });\n const renderer = createTabulatorRenderer(tableInput(input));\n return {\n update: (next) => renderer.update(tableInput(next)),\n resize: () => renderer.resize(),\n destroy: () => renderer.destroy(),\n };\n };\n}\n\nfunction pivotFactory(source: RendererThemeSource): WidgetRendererFactory {\n return async (input): Promise<WidgetRendererHandle> => {\n const theme = resolve(source, input);\n const model = (next: NativeWidgetRenderInput) =>\n buildPivotRendererModel(\n next.widget,\n next.result ?? {},\n next.context ?? {},\n );\n const ready = model(input);\n if (ready.status !== \"ready\") {\n throw new Error(ready.message);\n }\n const renderer = await createRevoGridRenderer({\n element: input.element,\n theme,\n model: ready,\n widget: input.widget,\n ...(input.callbacks === undefined ? {} : { callbacks: input.callbacks }),\n });\n return {\n update: (next) => {\n const nextModel = model(next);\n if (nextModel.status !== \"ready\") return;\n renderer.update({\n element: next.element,\n theme,\n model: nextModel,\n widget: next.widget,\n ...(next.callbacks === undefined\n ? {}\n : { callbacks: next.callbacks }),\n });\n },\n resize: () => renderer.resize(),\n destroy: () => renderer.destroy(),\n };\n };\n}\n\n/**\n * The factory map most hosts want, keyed by every component name the reader\n * and the web shell look up. Pass it as `renderers` to the React\n * `DashboardReaderProvider` or as `factories` to the web reader shell; replace\n * any entry through `overrides` or spread your own factory over the result.\n */\nexport function createDefaultRenderers(\n options: DefaultRenderersOptions = {},\n): WidgetRendererFactories {\n const theme = options.theme ?? cssVariableTheme;\n const chart = chartFactory(theme);\n const table = tableFactory(theme);\n const pivot = pivotFactory(theme);\n return {\n default: nativeFactory(theme),\n echarts: chart,\n chart,\n table,\n tabulator: table,\n pivot_table: pivot,\n pivot,\n ...options.overrides,\n };\n}\n"]}
|