@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/expressions.ts","../../dashboard-renderers/src/value-format.ts","../../dashboard-renderers/src/chart-defaults.ts","../../dashboard-renderers/src/chart-options.ts","../../dashboard-renderers/src/chart-theme.ts","../../dashboard-renderers/src/chart-model.ts"],"names":["record","format","exactFormatter","data","categories"],"mappings":"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","file":"chunk-OMPR32AR.js","sourcesContent":["import { addDays, format, subDays } from \"date-fns\";\n\nexport interface ExpressionRow {\n [key: string]: unknown;\n}\n\nexport interface ExpressionContext {\n rows?: ExpressionRow[];\n row?: ExpressionRow;\n variables?: Record<string, unknown>;\n}\n\ntype Node =\n | { kind: \"number\"; value: number }\n | { kind: \"string\"; value: string }\n | { kind: \"boolean\"; value: boolean }\n | { kind: \"null\" }\n | { kind: \"identifier\"; name: string }\n | { kind: \"variable\"; name: string }\n | { kind: \"rowField\"; name: string }\n | { kind: \"rowsField\"; name: string }\n | { kind: \"call\"; name: string; args: Node[] }\n | { kind: \"unary\"; op: \"+\" | \"-\" | \"!\"; right: Node }\n | { kind: \"binary\"; op: BinaryOp; left: Node; right: Node };\n\ntype BinaryOp =\n | \"||\"\n | \"&&\"\n | \"==\"\n | \"!=\"\n | \"<\"\n | \"<=\"\n | \">\"\n | \">=\"\n | \"+\"\n | \"-\"\n | \"*\"\n | \"/\"\n | \"%\"\n | \"**\";\n\ninterface Token {\n type:\n | \"number\"\n | \"string\"\n | \"boolean\"\n | \"null\"\n | \"identifier\"\n | \"variable\"\n | \"operator\"\n | \"punct\";\n value: string;\n raw: unknown;\n}\n\nconst AGGREGATE_FUNCTIONS = new Set([\n \"min\",\n \"max\",\n \"median\",\n \"avg\",\n \"sum\",\n \"count\",\n \"first\",\n \"last\",\n]);\n\nconst MATH_FUNCTIONS: Record<string, (arg: unknown) => unknown> = {\n abs: (v) => Math.abs(toNumber(v)),\n round: (v) => Math.round(toNumber(v)),\n floor: (v) => Math.floor(toNumber(v)),\n ceil: (v) => Math.ceil(toNumber(v)),\n float: (v) => Number(v),\n int: (v) => Math.trunc(toNumber(v)),\n len: (v) => (Array.isArray(v) ? v.length : String(v).length),\n today: (fmt) =>\n format(new Date(), typeof fmt === \"string\" && fmt ? fmt : \"yyyy-MM-dd\"),\n yesterday: (fmt) =>\n format(\n subDays(new Date(), 1),\n typeof fmt === \"string\" && fmt ? fmt : \"yyyy-MM-dd\",\n ),\n tomorrow: (fmt) =>\n format(\n addDays(new Date(), 1),\n typeof fmt === \"string\" && fmt ? fmt : \"yyyy-MM-dd\",\n ),\n now: () => new Date().toISOString(),\n};\n\nfunction tokenize(input: string): Token[] {\n const tokens: Token[] = [];\n const regex =\n /\\s*(\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?|\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|\\$\\{[A-Za-z_][A-Za-z0-9_]*\\}|&&|\\|\\||==|!=|<=|>=|\\*\\*|[+\\-*/%<>,!():.[\\]{}]|[A-Za-z_][A-Za-z0-9_]*)\\s*/y;\n\n while (regex.lastIndex < input.length) {\n const match = regex.exec(input);\n if (!match) {\n throw new Error(`Unexpected character at position ${regex.lastIndex}`);\n }\n const captured = match[1];\n if (captured === undefined) {\n throw new Error(`Unexpected character at position ${regex.lastIndex}`);\n }\n let value = captured;\n let type: Token[\"type\"];\n let raw: unknown = value;\n\n if (/^\\$\\{/.test(value)) {\n type = \"variable\";\n value = value.slice(2, -1);\n raw = value;\n } else if (/^\\d/.test(value)) {\n type = \"number\";\n raw = Number(value);\n } else if (value === \"true\" || value === \"false\") {\n type = \"boolean\";\n raw = value === \"true\";\n } else if (value === \"null\") {\n type = \"null\";\n raw = null;\n } else if (/^\"|'/.test(value)) {\n type = \"string\";\n raw = value.slice(1, -1).replace(/\\\\(.)/g, (_, ch) => {\n switch (ch) {\n case \"n\":\n return \"\\n\";\n case \"t\":\n return \"\\t\";\n case \"r\":\n return \"\\r\";\n default:\n return ch;\n }\n });\n } else if (/^[A-Za-z_]/.test(value)) {\n type = \"identifier\";\n } else if (/^[+\\-*/%<>=!&|*]+$/.test(value)) {\n type = \"operator\";\n } else {\n type = \"punct\";\n }\n\n tokens.push({ type, value, raw });\n }\n\n return tokens;\n}\n\nclass Parser {\n private pos = 0;\n\n constructor(private tokens: Token[]) {}\n\n parse(): Node {\n const node = this.logicalOr();\n if (this.pos < this.tokens.length) {\n const token = this.current();\n if (token === undefined) {\n throw new Error(\"Unexpected end of expression\");\n }\n throw new Error(\n `Unexpected token '${token.value}' at position ${this.pos}`,\n );\n }\n return node;\n }\n\n private current(): Token | undefined {\n return this.tokens[this.pos];\n }\n\n private peek(offset = 0): Token | undefined {\n return this.tokens[this.pos + offset];\n }\n\n private eat(value: string): void {\n if (this.current()?.value !== value) {\n throw new Error(\n `Expected '${value}' but got '${this.current()?.value ?? \"EOF\"}'`,\n );\n }\n this.pos++;\n }\n\n private matchOperator(...ops: string[]): boolean {\n const token = this.current();\n if (token?.type === \"operator\" && ops.includes(token.value)) {\n this.pos++;\n return true;\n }\n return false;\n }\n\n private previousOperator(fallback: BinaryOp): BinaryOp {\n return (\n (this.tokens[this.pos - 1]?.value as BinaryOp | undefined) ?? fallback\n );\n }\n\n private logicalOr(): Node {\n let left = this.logicalAnd();\n while (this.matchOperator(\"||\")) {\n const right = this.logicalAnd();\n left = { kind: \"binary\", op: \"||\", left, right };\n }\n return left;\n }\n\n private logicalAnd(): Node {\n let left = this.equality();\n while (this.matchOperator(\"&&\")) {\n const right = this.equality();\n left = { kind: \"binary\", op: \"&&\", left, right };\n }\n return left;\n }\n\n private equality(): Node {\n let left = this.comparison();\n while (this.matchOperator(\"==\", \"!=\")) {\n const op = this.previousOperator(\"==\");\n const right = this.comparison();\n left = { kind: \"binary\", op, left, right };\n }\n return left;\n }\n\n private comparison(): Node {\n let left = this.additive();\n while (this.matchOperator(\"<\", \"<=\", \">\", \">=\")) {\n const op = this.previousOperator(\"<\");\n const right = this.additive();\n left = { kind: \"binary\", op, left, right };\n }\n return left;\n }\n\n private additive(): Node {\n let left = this.multiplicative();\n while (this.matchOperator(\"+\", \"-\")) {\n const op = this.previousOperator(\"+\");\n const right = this.multiplicative();\n left = { kind: \"binary\", op, left, right };\n }\n return left;\n }\n\n private multiplicative(): Node {\n let left = this.power();\n while (this.matchOperator(\"*\", \"/\", \"%\")) {\n const op = this.previousOperator(\"*\");\n const right = this.power();\n left = { kind: \"binary\", op, left, right };\n }\n return left;\n }\n\n private power(): Node {\n let left = this.unary();\n while (this.matchOperator(\"**\")) {\n const right = this.unary();\n left = { kind: \"binary\", op: \"**\", left, right };\n }\n return left;\n }\n\n private unary(): Node {\n if (this.matchOperator(\"+\", \"-\", \"!\")) {\n const token = this.tokens[this.pos - 1];\n if (token === undefined) {\n throw new Error(\"Unexpected end of expression\");\n }\n const op = token.value as \"+\" | \"-\" | \"!\";\n const right = this.unary();\n return { kind: \"unary\", op, right };\n }\n return this.primary();\n }\n\n private primary(): Node {\n const token = this.current();\n if (!token) throw new Error(\"Unexpected end of expression\");\n\n if (token.type === \"number\") {\n this.pos++;\n return { kind: \"number\", value: Number(token.raw) };\n }\n if (token.type === \"variable\") {\n this.pos++;\n return { kind: \"variable\", name: token.value };\n }\n if (token.type === \"string\") {\n this.pos++;\n return { kind: \"string\", value: String(token.raw) };\n }\n if (token.type === \"boolean\") {\n this.pos++;\n return { kind: \"boolean\", value: Boolean(token.raw) };\n }\n if (token.type === \"null\") {\n this.pos++;\n return { kind: \"null\" };\n }\n\n if (token.type === \"identifier\") {\n this.pos++;\n const name = token.value;\n\n if (this.current()?.value === \"(\") {\n this.eat(\"(\");\n const args: Node[] = [];\n if (this.current()?.value !== \")\") {\n args.push(this.logicalOr());\n while (this.current()?.value === \",\") {\n this.eat(\",\");\n args.push(this.logicalOr());\n }\n }\n this.eat(\")\");\n return { kind: \"call\", name, args };\n }\n\n if (\n this.current()?.value === \".\" &&\n (name === \"rows\" || name === \"row\")\n ) {\n this.eat(\".\");\n const fieldToken = this.current();\n if (fieldToken?.type !== \"identifier\") {\n throw new Error(`Expected field name after '${name}.'`);\n }\n this.pos++;\n if (name === \"row\") {\n return { kind: \"rowField\", name: fieldToken.value };\n }\n return { kind: \"rowsField\", name: fieldToken.value };\n }\n\n return { kind: \"identifier\", name };\n }\n\n if (token.value === \"(\") {\n this.eat(\"(\");\n const node = this.logicalOr();\n this.eat(\")\");\n return node;\n }\n\n throw new Error(`Unexpected token '${token.value}'`);\n }\n}\n\nfunction toNumber(value: unknown): number {\n if (typeof value === \"number\") return value;\n if (typeof value === \"boolean\") return value ? 1 : 0;\n if (value === null || value === undefined) return 0;\n const parsed = Number(value);\n return Number.isNaN(parsed) ? 0 : parsed;\n}\n\nfunction toString(value: unknown): string {\n if (value === null || value === undefined) return \"\";\n if (typeof value === \"string\") return value;\n return String(value);\n}\n\nfunction isTruthy(value: unknown): boolean {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"number\") return value !== 0;\n if (typeof value === \"string\") return value.length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return value !== null && value !== undefined;\n}\n\nfunction compareEqual(left: unknown, right: unknown): boolean {\n if (left === null || left === undefined)\n return right === null || right === undefined;\n if (right === null || right === undefined) return false;\n if (typeof left === \"number\" && typeof right === \"number\")\n return left === right;\n return String(left) === String(right);\n}\n\nfunction evaluateNode(node: Node, context: ExpressionContext): unknown {\n switch (node.kind) {\n case \"number\":\n return node.value;\n case \"string\":\n return node.value;\n case \"boolean\":\n return node.value;\n case \"null\":\n return null;\n\n case \"variable\": {\n const variables = context.variables ?? {};\n if (node.name in variables) return variables[node.name];\n throw new Error(`Unknown variable '${node.name}'`);\n }\n\n case \"identifier\": {\n const variables = context.variables ?? {};\n if (node.name in variables) return variables[node.name];\n if (context.row && node.name in context.row)\n return context.row[node.name];\n if (context.rows && context.rows.length > 0) {\n const sample = context.rows[0];\n if (sample !== undefined && node.name in sample) {\n return context.row?.[node.name];\n }\n }\n throw new Error(`Unknown identifier '${node.name}'`);\n }\n\n case \"rowField\":\n if (!context.row)\n throw new Error(\"'row.field' is only valid inside a filter context\");\n return context.row[node.name];\n\n case \"rowsField\": {\n const rows = context.rows ?? [];\n return rows.map((row) => row[node.name]);\n }\n\n case \"call\": {\n const argValues = node.args.map((arg) => evaluateNode(arg, context));\n if (AGGREGATE_FUNCTIONS.has(node.name)) {\n return evaluateAggregate(node.name, argValues);\n }\n const fn = MATH_FUNCTIONS[node.name];\n if (fn) return fn(argValues[0]);\n throw new Error(`Unknown function '${node.name}'`);\n }\n\n case \"unary\": {\n const right = evaluateNode(node.right, context);\n if (node.op === \"!\") return !isTruthy(right);\n const num = toNumber(right);\n return node.op === \"-\" ? -num : num;\n }\n\n case \"binary\": {\n const left = evaluateNode(node.left, context);\n const right = evaluateNode(node.right, context);\n switch (node.op) {\n case \"||\":\n return isTruthy(left) || isTruthy(right);\n case \"&&\":\n return isTruthy(left) && isTruthy(right);\n case \"==\":\n return compareEqual(left, right);\n case \"!=\":\n return !compareEqual(left, right);\n case \"<\":\n return toNumber(left) < toNumber(right);\n case \"<=\":\n return toNumber(left) <= toNumber(right);\n case \">\":\n return toNumber(left) > toNumber(right);\n case \">=\":\n return toNumber(left) >= toNumber(right);\n case \"+\":\n if (typeof left === \"string\" || typeof right === \"string\") {\n return toString(left) + toString(right);\n }\n return toNumber(left) + toNumber(right);\n case \"-\":\n return toNumber(left) - toNumber(right);\n case \"*\":\n return toNumber(left) * toNumber(right);\n case \"/\": {\n const divisor = toNumber(right);\n return divisor === 0 ? 0 : toNumber(left) / divisor;\n }\n case \"%\": {\n const mod = toNumber(right);\n return mod === 0 ? 0 : toNumber(left) % mod;\n }\n case \"**\":\n return toNumber(left) ** toNumber(right);\n default:\n throw new Error(`Unknown operator '${(node as { op: string }).op}'`);\n }\n }\n\n default:\n throw new Error(\"Unknown expression node\");\n }\n}\n\nfunction evaluateAggregate(name: string, args: unknown[]): unknown {\n if (args.length === 0) return null;\n const values = args[0];\n if (!Array.isArray(values)) {\n throw new Error(`Aggregate '${name}' requires a row vector argument`);\n }\n\n const numeric = values.map((v) =>\n v === null || v === undefined ? NaN : Number(v),\n );\n const finite = numeric.filter((n) => Number.isFinite(n));\n\n switch (name) {\n case \"min\":\n return finite.length ? Math.min(...finite) : null;\n case \"max\":\n return finite.length ? Math.max(...finite) : null;\n case \"sum\":\n return finite.reduce((a, b) => a + b, 0);\n case \"avg\":\n return finite.length\n ? finite.reduce((a, b) => a + b, 0) / finite.length\n : null;\n case \"count\":\n return values.filter((v) => v !== null && v !== undefined && v !== \"\")\n .length;\n case \"first\":\n return values[0] ?? null;\n case \"last\":\n return values[values.length - 1] ?? null;\n case \"median\": {\n if (!finite.length) return null;\n const sorted = [...finite].sort((a, b) => a - b);\n const mid = Math.floor(sorted.length / 2);\n if (sorted.length % 2) return sorted[mid];\n const lower = sorted[mid - 1];\n const upper = sorted[mid];\n if (lower === undefined || upper === undefined) return null;\n return (lower + upper) / 2;\n }\n default:\n throw new Error(`Unknown aggregate '${name}'`);\n }\n}\n\nfunction interpolateTemplate(\n template: string,\n variables: Record<string, unknown>,\n): string {\n return template.replace(/\\$\\{([^}]+)\\}/g, (_, name) => {\n if (!(name in variables)) throw new Error(`Unknown variable '${name}'`);\n const value = variables[name];\n return value === null || value === undefined ? \"\" : String(value);\n });\n}\n\nexport function interpolateVariables(\n value: unknown,\n variables: Record<string, unknown>,\n): unknown {\n if (typeof value === \"string\") {\n if (!value.includes(\"${\")) return value;\n const interpolated = interpolateTemplate(value, variables);\n // If the entire value was a placeholder, preserve the original type when possible.\n if (/^\\$\\{[^}]+\\}$/.test(value)) {\n const name = value.slice(2, -1);\n const raw = variables[name];\n if (typeof raw === \"number\" || typeof raw === \"boolean\" || raw === null) {\n return raw;\n }\n }\n // Convert purely numeric interpolated strings back to numbers for convenience.\n if (\n /^-?\\d+(\\.\\d+)?$/.test(interpolated) &&\n !Number.isNaN(Number(interpolated))\n ) {\n return Number(interpolated);\n }\n return interpolated;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => interpolateVariables(item, variables));\n }\n\n if (value !== null && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n return Object.fromEntries(\n Object.entries(record).map(([k, v]) => [\n k,\n interpolateVariables(v, variables),\n ]),\n );\n }\n\n return value;\n}\n\nexport function evaluateExpression(\n expression: string,\n context: ExpressionContext,\n): unknown {\n const tokens = tokenize(expression);\n const parser = new Parser(tokens);\n const node = parser.parse();\n return evaluateNode(node, context);\n}\n\nexport function evaluateVariables(\n variables: Record<string, string> | undefined,\n rows: ExpressionRow[],\n existingVariables?: Record<string, unknown>,\n): Record<string, unknown> {\n if (!variables) return {};\n const result: Record<string, unknown> = { ...(existingVariables ?? {}) };\n for (const [name, expression] of Object.entries(variables)) {\n result[name] = evaluateExpression(expression, { rows, variables: result });\n }\n return result;\n}\n\nexport function applyFilter(\n filter: string | undefined,\n rows: ExpressionRow[],\n variables: Record<string, unknown>,\n): ExpressionRow[] {\n if (!filter) return rows;\n return rows.filter((row) =>\n isTruthy(evaluateExpression(filter, { rows, row, variables })),\n );\n}\n\nfunction dateBuiltinVariables(): Record<string, unknown> {\n const today = new Date();\n return {\n today: format(today, \"yyyy-MM-dd\"),\n yesterday: format(subDays(today, 1), \"yyyy-MM-dd\"),\n tomorrow: format(addDays(today, 1), \"yyyy-MM-dd\"),\n now: today.toISOString(),\n };\n}\n\nexport function resolveFilterDefault(\n defaultValue: unknown,\n extraVariables?: Record<string, unknown>,\n): unknown {\n if (defaultValue === undefined || defaultValue === null) return \"\";\n if (typeof defaultValue !== \"string\") return defaultValue;\n\n const variables = { ...dateBuiltinVariables(), ...(extraVariables ?? {}) };\n const trimmed = defaultValue.trim();\n\n if (trimmed.startsWith(\"=\")) {\n try {\n return evaluateExpression(trimmed.slice(1).trim(), { variables });\n } catch {\n return defaultValue;\n }\n }\n\n if (defaultValue.includes(\"${\")) {\n try {\n return interpolateVariables(defaultValue, variables);\n } catch {\n return defaultValue;\n }\n }\n\n return defaultValue;\n}\n","import type { ChartOption } from \"./types.js\";\nimport { isRecord } from \"./records.js\";\n\nconst compactFormatter = new Intl.NumberFormat(\"en-US\", {\n notation: \"compact\",\n maximumFractionDigits: 1,\n});\n\nconst exactFormatter = new Intl.NumberFormat(\"en-US\", {\n maximumFractionDigits: 2,\n});\n\nconst NAMED_FORMATS = new Set([\"percent\", \"currency\", \"number\"]);\n\nexport interface ValueFormatOptions {\n format?: string;\n prefix?: string;\n compact?: boolean;\n suffix?: string;\n decimals?: number;\n}\n\nexport function formatCompactNumber(value: number): string {\n if (!Number.isFinite(value)) return \"\";\n if (Math.abs(value) < 1000) return exactFormatter.format(value);\n return compactFormatter.format(value);\n}\n\nexport function formatValue(\n value: number | null | undefined,\n options: ValueFormatOptions = {},\n): string {\n if (value === undefined || value === null) return \"-\";\n\n const format = options.format ?? \"number\";\n const notation = options.compact === true ? \"compact\" : \"standard\";\n const places =\n typeof options.decimals === \"number\" &&\n options.decimals >= 0 &&\n options.decimals <= 20\n ? Math.floor(options.decimals)\n : undefined;\n const wrap = (text: string) =>\n (options.prefix ?? \"\") + text + (options.suffix ?? \"\");\n\n if (format === \"currency\") {\n const currencyOptions: Intl.NumberFormatOptions = {\n minimumFractionDigits: places ?? 2,\n maximumFractionDigits: places ?? 2,\n notation,\n };\n if (options.compact === true) currencyOptions.compactDisplay = \"short\";\n return wrap(new Intl.NumberFormat(\"en-US\", currencyOptions).format(value));\n }\n\n if (format === \"percent\") {\n return wrap(\n new Intl.NumberFormat(\"en-US\", {\n style: \"percent\",\n minimumFractionDigits: places,\n maximumFractionDigits: places ?? 1,\n }).format(value),\n );\n }\n\n const numberOptions: Intl.NumberFormatOptions = { notation };\n if (options.compact === true) numberOptions.compactDisplay = \"short\";\n if (places !== undefined) {\n numberOptions.minimumFractionDigits = places;\n numberOptions.maximumFractionDigits = places;\n }\n return wrap(new Intl.NumberFormat(\"en-US\", numberOptions).format(value));\n}\n\nfunction namedFormatter(name: string): (value: unknown) => string {\n return (value: unknown) =>\n formatValue(Number(value), { format: name, decimals: 1 });\n}\n\nfunction withNamedAxisFormatter(axis: unknown): unknown {\n if (!isRecord(axis)) return axis;\n const label = isRecord(axis.axisLabel) ? { ...axis.axisLabel } : undefined;\n if (\n label === undefined ||\n typeof label.formatter !== \"string\" ||\n !NAMED_FORMATS.has(label.formatter)\n ) {\n return axis;\n }\n return {\n ...axis,\n axisLabel: { ...label, formatter: namedFormatter(label.formatter) },\n };\n}\n\nexport function applyNamedFormatters(option: ChartOption): ChartOption {\n const next: ChartOption = { ...option };\n for (const key of [\"xAxis\", \"yAxis\"] as const) {\n const axes = option[key];\n if (axes === undefined) continue;\n next[key] = Array.isArray(axes)\n ? axes.map(withNamedAxisFormatter)\n : withNamedAxisFormatter(axes);\n }\n\n if (isRecord(option.tooltip)) {\n const formatter = option.tooltip.valueFormatter;\n if (typeof formatter === \"string\" && NAMED_FORMATS.has(formatter)) {\n next.tooltip = {\n ...option.tooltip,\n valueFormatter: namedFormatter(formatter),\n };\n }\n }\n return next;\n}\n","import type { ChartOption } from \"./types.js\";\nimport { isRecord } from \"./records.js\";\nimport { formatCompactNumber } from \"./value-format.js\";\n\nconst ZOOM_THRESHOLD = 60;\nconst ROTATE_LABEL_COUNT = 6;\nconst LONG_LABEL_CHARS = 10;\n\nconst exactFormatter = new Intl.NumberFormat(\"en-US\", {\n maximumFractionDigits: 2,\n});\n\nconst MONTHS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nconst DATE_LABEL = /^(\\d{4})-(\\d{2})-(\\d{2})/u;\n\nfunction niceCeil(value: number): number {\n if (value === 0) return 0;\n const magnitude = 10 ** Math.floor(Math.log10(Math.abs(value)));\n const step = magnitude / 2;\n return Math.ceil(value / step) * step;\n}\n\nfunction niceFloor(value: number): number {\n if (value === 0) return 0;\n const magnitude = 10 ** Math.floor(Math.log10(Math.abs(value)));\n const step = magnitude / 2;\n return Math.floor(value / step) * step;\n}\n\nexport function valueScaleBounds(values: readonly number[]): {\n min: number;\n max: number;\n} {\n let lowest = Number.POSITIVE_INFINITY;\n let highest = Number.NEGATIVE_INFINITY;\n for (const value of values) {\n if (!Number.isFinite(value)) continue;\n if (value < lowest) lowest = value;\n if (value > highest) highest = value;\n }\n if (lowest > highest) return { min: 0, max: 1 };\n\n const min = lowest < 0 ? niceFloor(lowest) : 0;\n const max = niceCeil(highest);\n return max <= min ? { min, max: min + 1 } : { min, max };\n}\n\nfunction formatDateLabel(value: string, withYear: boolean): string {\n const match = DATE_LABEL.exec(value);\n if (match === null) return value;\n const monthNumber = Number(match[2]);\n const month = MONTHS[monthNumber - 1] ?? match[2] ?? \"\";\n const day = String(Number(match[3]));\n const year = match[1] ?? \"\";\n return withYear ? `${month} ${day}, ${year.slice(2)}` : `${month} ${day}`;\n}\n\nfunction categoryData(axis: Record<string, unknown>): string[] {\n if (!Array.isArray(axis.data)) return [];\n return axis.data.map((entry) =>\n typeof entry === \"string\" || typeof entry === \"number\"\n ? String(entry)\n : isRecord(entry)\n ? String(entry.value ?? \"\")\n : \"\",\n );\n}\n\nfunction looksLikeDates(values: string[]): boolean {\n if (values.length === 0) return false;\n return (\n values.filter((value) => DATE_LABEL.test(value)).length / values.length >=\n 0.8\n );\n}\n\nfunction withAxisLabelDefaults(axis: unknown): unknown {\n if (!isRecord(axis)) return axis;\n const label = isRecord(axis.axisLabel) ? { ...axis.axisLabel } : {};\n const hasFormatter = label.formatter !== undefined;\n const type = typeof axis.type === \"string\" ? axis.type : \"value\";\n\n if ((type === \"value\" || type === \"log\") && !hasFormatter) {\n label.formatter = (value: number) => formatCompactNumber(value);\n } else if (type === \"category\") {\n const values = categoryData(axis);\n if (!hasFormatter && looksLikeDates(values)) {\n const years = new Set(values.map((value) => value.slice(0, 4)));\n const withYear = years.size > 1;\n label.formatter = (value: string) => formatDateLabel(value, withYear);\n }\n const longest = values.reduce(\n (maximum, value) => Math.max(maximum, value.length),\n 0,\n );\n if (\n label.rotate === undefined &&\n values.length > ROTATE_LABEL_COUNT &&\n longest > LONG_LABEL_CHARS\n ) {\n label.rotate = 30;\n }\n }\n\n if (label.hideOverlap === undefined) label.hideOverlap = true;\n return { ...axis, axisLabel: label };\n}\n\nfunction mapAxis(axes: unknown): unknown {\n return Array.isArray(axes)\n ? axes.map(withAxisLabelDefaults)\n : withAxisLabelDefaults(axes);\n}\n\nfunction withTooltipDefaults(\n tooltip: unknown,\n seriesCount: number,\n): Record<string, unknown> {\n const next = isRecord(tooltip) ? { ...tooltip } : {};\n const trigger = typeof next.trigger === \"string\" ? next.trigger : \"item\";\n if (next.valueFormatter === undefined) {\n next.valueFormatter = (value: unknown) =>\n typeof value === \"number\" && Number.isFinite(value)\n ? exactFormatter.format(value)\n : Array.isArray(value)\n ? value.map((entry) => String(entry)).join(\" to \")\n : String(value ?? \"\");\n }\n if (trigger === \"axis\") {\n if (next.axisPointer === undefined) {\n next.axisPointer = { type: seriesCount > 1 ? \"cross\" : \"line\" };\n }\n if (next.order === undefined && seriesCount > 2) {\n next.order = \"valueDesc\";\n }\n }\n if (next.extraCssText === undefined) {\n next.extraCssText =\n \"max-height:280px;overflow:auto;box-shadow:0 4px 16px rgba(0,0,0,0.12);\";\n }\n return next;\n}\n\nfunction longestSeriesLength(series: unknown[]): number {\n return series.reduce<number>((maximum, entry) => {\n if (!isRecord(entry) || !Array.isArray(entry.data)) return maximum;\n return Math.max(maximum, entry.data.length);\n }, 0);\n}\n\nfunction hasCategoryAxis(option: ChartOption): boolean {\n const axes = Array.isArray(option.xAxis) ? option.xAxis : [option.xAxis];\n return axes.some((axis) => isRecord(axis) && axis.type === \"category\");\n}\n\nexport function applyChartDefaults(option: ChartOption): ChartOption {\n const next: ChartOption = { ...option };\n const rawSeries = option.series;\n const series = Array.isArray(rawSeries)\n ? rawSeries\n : rawSeries === undefined || rawSeries === null\n ? []\n : [rawSeries];\n\n next.tooltip = withTooltipDefaults(option.tooltip, series.length);\n if (option.xAxis !== undefined) next.xAxis = mapAxis(option.xAxis);\n if (option.yAxis !== undefined) next.yAxis = mapAxis(option.yAxis);\n\n if (isRecord(option.legend) && option.legend.type === undefined) {\n next.legend = { ...option.legend, type: \"scroll\" };\n }\n\n const zoomable =\n longestSeriesLength(series) >= ZOOM_THRESHOLD &&\n option.dataZoom === undefined &&\n hasCategoryAxis(option);\n if (zoomable) {\n next.dataZoom = [\n {\n type: \"inside\",\n zoomOnMouseWheel: \"shift\",\n moveOnMouseWheel: false,\n moveOnMouseMove: false,\n },\n { type: \"slider\", height: 14, bottom: 6, brushSelect: false },\n ];\n if (\n isRecord(next.legend) &&\n (next.legend.bottom === 0 || next.legend.bottom === \"0\")\n ) {\n next.legend = { ...next.legend, bottom: 26 };\n }\n if (isRecord(option.grid) && option.grid.bottom === \"10%\") {\n next.grid = { ...option.grid, bottom: 56 };\n }\n }\n return next;\n}\n","import {\n applyFilter,\n evaluateVariables,\n interpolateVariables,\n} from \"@dlh.io/bideux-dashboard-core\";\n\nimport type {\n ChartOption,\n DataRow,\n WidgetResult,\n WidgetSpec,\n} from \"./types.js\";\nimport { displayBlock, isRecord, record, stringValue } from \"./records.js\";\nimport { valueScaleBounds } from \"./chart-defaults.js\";\n\nconst GAUGE_POINTER_ICONS: Readonly<Record<string, string>> = {\n pointer: \"path://M12.8,0.7l12,40.1H0.7L12.8,0.7z\",\n arrow: \"path://M12,2 L22,22 H18 V40 H6 V22 H2 L12,2 z\",\n hand: \"path://M12,0 C18,0 22,6 22,12 L22,30 C22,36 18,40 12,40 C6,40 2,36 2,30 L2,12 C2,6 6,0 12,0 z\",\n};\n\ninterface ChartFields {\n x: string;\n category: string;\n value: string;\n}\n\ninterface ChartPadding {\n top?: string | number;\n right?: string | number;\n bottom?: string | number;\n left?: string | number;\n}\n\nfunction rowsFrom(result: WidgetResult): DataRow[] {\n if (!Array.isArray(result.rows)) return [];\n return result.rows.filter(isRecord);\n}\n\nfunction stringRecord(value: unknown): Record<string, string> | undefined {\n if (!isRecord(value)) return undefined;\n const entries = Object.entries(value).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\",\n );\n return Object.fromEntries(entries);\n}\n\nfunction resolveGaugePointer(\n pointer: unknown,\n): Record<string, unknown> | undefined {\n if (pointer === undefined || pointer === null) return undefined;\n const name = typeof pointer === \"string\" ? pointer : undefined;\n const pointerObject = isRecord(pointer) ? pointer : undefined;\n const iconName =\n name ??\n (typeof pointerObject?.icon === \"string\" ? pointerObject.icon : undefined);\n\n if (iconName === undefined || GAUGE_POINTER_ICONS[iconName] === undefined) {\n if (\n typeof pointerObject?.icon === \"string\" &&\n pointerObject.icon.startsWith(\"path://\")\n ) {\n return pointerObject;\n }\n return pointerObject;\n }\n\n const icon = GAUGE_POINTER_ICONS[iconName];\n const resolved: Record<string, unknown> = {\n length: \"90%\",\n width: 20,\n offsetCenter: [\"0%\", \"-50%\"],\n itemStyle: { color: \"inherit\" },\n ...pointerObject,\n icon,\n };\n if (isRecord(resolved.itemStyle) && resolved.itemStyle.color === \"auto\") {\n resolved.itemStyle = { ...resolved.itemStyle, color: \"inherit\" };\n }\n return resolved;\n}\n\nexport function inferChartFields(rows: DataRow[]): ChartFields {\n const first = rows[0];\n if (first === undefined) {\n return { x: \"x\", category: \"category\", value: \"value\" };\n }\n const keys = Object.keys(first);\n const isNumeric = (key: string) => {\n const cell = first[key];\n return (\n typeof cell === \"number\" ||\n (typeof cell === \"string\" &&\n cell.trim() !== \"\" &&\n !Number.isNaN(Number(cell)))\n );\n };\n const label = keys.find((key) => !isNumeric(key)) ?? keys[0] ?? \"x\";\n const numeric = keys.find(isNumeric);\n return {\n x: keys.includes(\"x\") ? \"x\" : label,\n category: keys.includes(\"category\") ? \"category\" : label,\n value: keys.includes(\"value\")\n ? \"value\"\n : (numeric ?? keys[1] ?? keys[0] ?? \"value\"),\n };\n}\n\nfunction paddingFor(value: unknown): ChartPadding {\n if (typeof value === \"number\" || typeof value === \"string\") {\n return { top: value, right: value, bottom: value, left: value };\n }\n if (!isRecord(value)) return {};\n const padding: ChartPadding = {};\n for (const key of [\"top\", \"right\", \"bottom\", \"left\"] as const) {\n const entry = value[key];\n if (typeof entry === \"number\" || typeof entry === \"string\") {\n padding[key] = entry;\n }\n }\n return padding;\n}\n\nfunction unique(rows: DataRow[], field: string): string[] {\n const values = rows.map((row) =>\n row[field] === undefined || row[field] === null ? \"\" : String(row[field]),\n );\n return [...new Set(values)];\n}\n\nfunction groupBy(rows: DataRow[], field: string): Record<string, DataRow[]> {\n return rows.reduce<Record<string, DataRow[]>>((groups, row) => {\n const key = row[field] === undefined ? \"\" : String(row[field]);\n const group = groups[key] ?? [];\n group.push(row);\n groups[key] = group;\n return groups;\n }, {});\n}\n\nfunction sumBy(\n rows: DataRow[],\n groupField: string,\n valueField: string,\n groupValue: string | number,\n): number {\n return rows\n .filter((row) => String(row[groupField]) === String(groupValue))\n .reduce((sum, row) => sum + Number(row[valueField] ?? 0), 0);\n}\n\nfunction maxBy(rows: DataRow[], field: string): number {\n return rows.reduce(\n (maximum, row) => Math.max(maximum, Number(row[field] ?? 0)),\n 0,\n );\n}\n\nfunction resolveBaseline(\n baseline: unknown,\n rows: DataRow[],\n groupField: string,\n groupValue: string | number,\n): number | undefined {\n if (typeof baseline === \"number\") return baseline;\n if (typeof baseline !== \"string\") return undefined;\n const parsed = Number(baseline);\n return Number.isNaN(parsed)\n ? sumBy(rows, groupField, baseline, groupValue)\n : parsed;\n}\n\nfunction sortRowsBy(\n rows: DataRow[],\n field: string,\n order: \"asc\" | \"desc\",\n): DataRow[] {\n return [...rows].sort((left, right) => {\n const leftValue = left[field];\n const rightValue = right[field];\n if (leftValue === null || leftValue === undefined) {\n if (rightValue === null || rightValue === undefined) return 0;\n return order === \"asc\" ? 1 : -1;\n }\n if (rightValue === null || rightValue === undefined) {\n return order === \"asc\" ? -1 : 1;\n }\n const leftNumber = Number(leftValue);\n const rightNumber = Number(rightValue);\n if (!Number.isNaN(leftNumber) && !Number.isNaN(rightNumber)) {\n return order === \"asc\"\n ? leftNumber - rightNumber\n : rightNumber - leftNumber;\n }\n const comparison = String(leftValue).localeCompare(String(rightValue));\n return order === \"asc\" ? comparison : -comparison;\n });\n}\n\nfunction customSeriesOption(\n widget: WidgetSpec,\n rows: DataRow[],\n seriesConfigs: Record<string, unknown>[],\n seriesTemplate: Record<string, unknown>,\n categoryField: string,\n valueField: string,\n chartType: string,\n baseOption: ChartOption,\n common: ChartOption,\n): ChartOption {\n const categories = unique(rows, categoryField);\n const series = seriesConfigs.map((configuration) => {\n const field = stringValue(configuration.field);\n const seriesRest = { ...configuration };\n delete seriesRest.field;\n delete seriesRest.baseline;\n const currentValueField = field ?? valueField;\n const data = categories.map((category) => {\n const value = sumBy(rows, categoryField, currentValueField, category);\n const baseline = resolveBaseline(\n configuration.baseline,\n rows,\n categoryField,\n category,\n );\n return baseline === undefined ? value : [baseline, value];\n });\n return {\n ...seriesTemplate,\n ...seriesRest,\n name: stringValue(configuration.name) ?? field ?? widget.metadata.name,\n data,\n type: stringValue(configuration.type) ?? chartType,\n };\n });\n return {\n ...common,\n xAxis: {\n ...record(baseOption.xAxis),\n type: \"category\",\n data: categories,\n axisLabel: { interval: \"auto\", hideOverlap: true },\n },\n yAxis:\n baseOption.yAxis === undefined\n ? { type: \"value\" }\n : record(baseOption.yAxis),\n legend:\n baseOption.legend === undefined\n ? { bottom: 0 }\n : record(baseOption.legend),\n series,\n };\n}\n\nexport function buildChartOption(\n widget: WidgetSpec,\n result: WidgetResult,\n): ChartOption {\n const mappings = record(widget.spec.mappings);\n const display = displayBlock(widget, \"echarts\");\n const xSort = record(display.xSort);\n const xSortField = stringValue(xSort.by) ?? stringValue(mappings.x_order);\n const xSortOrder = xSort.order === \"desc\" ? \"desc\" : \"asc\";\n\n let rows = rowsFrom(result);\n const resultVariables = record(result.variables);\n const variables = evaluateVariables(\n stringRecord(display.variables),\n rows,\n resultVariables,\n );\n rows = applyFilter(stringValue(display.filter), rows, variables);\n if (xSortField !== undefined) {\n rows = sortRowsBy(rows, xSortField, xSortOrder);\n }\n\n const displayForInterpolation = { ...display };\n delete displayForInterpolation.variables;\n delete displayForInterpolation.filter;\n const interpolated = record(\n interpolateVariables(displayForInterpolation, variables),\n );\n const baseOption = record(interpolated.option);\n const rawSeries = baseOption.series;\n const seriesArray = Array.isArray(rawSeries) ? rawSeries : [rawSeries];\n const seriesTemplate = record(seriesArray[0]);\n const chartType = stringValue(seriesTemplate.type) ?? \"line\";\n\n const inferred = inferChartFields(rows);\n const xField = stringValue(mappings.x) ?? inferred.x;\n const yField = stringValue(mappings.y) ?? inferred.value;\n const categoryField = stringValue(mappings.category) ?? inferred.category;\n const valueField = stringValue(mappings.value) ?? inferred.value;\n const seriesField = stringValue(mappings.series);\n const chartPadding = paddingFor(interpolated.chartPadding);\n const baseOptionRest = { ...baseOption };\n delete baseOptionRest.grid;\n const grid = {\n left: chartPadding.left ?? (chartType === \"gauge\" ? \"0%\" : \"5%\"),\n right: chartPadding.right ?? (chartType === \"gauge\" ? \"0%\" : \"5%\"),\n top: chartPadding.top ?? (chartType === \"gauge\" ? \"0%\" : \"5%\"),\n bottom: chartPadding.bottom ?? (chartType === \"gauge\" ? \"0%\" : \"10%\"),\n containLabel: true,\n ...record(baseOption.grid),\n };\n const common: ChartOption = {\n tooltip: {\n trigger: chartType === \"pie\" || chartType === \"gauge\" ? \"item\" : \"axis\",\n appendToBody: true,\n confine: false,\n },\n grid,\n ...baseOptionRest,\n };\n const customSeries = Array.isArray(interpolated.series)\n ? interpolated.series.filter(isRecord)\n : [];\n if (customSeries.length > 0) {\n return customSeriesOption(\n widget,\n rows,\n customSeries,\n seriesTemplate,\n categoryField,\n valueField,\n chartType,\n baseOptionRest,\n common,\n );\n }\n\n if (chartType === \"gauge\") {\n const first = rows[0] ?? {};\n const startAngle = Number(seriesTemplate.startAngle);\n const endAngle = Number(seriesTemplate.endAngle);\n const semicircle =\n Number.isFinite(startAngle) &&\n Number.isFinite(endAngle) &&\n Math.abs(endAngle - startAngle) <= 180;\n return {\n ...common,\n series: [\n {\n ...seriesTemplate,\n radius: seriesTemplate.radius ?? (semicircle ? \"90%\" : \"95%\"),\n center:\n seriesTemplate.center ??\n (semicircle ? [\"50%\", \"85%\"] : [\"50%\", \"55%\"]),\n ...(semicircle\n ? {\n title: {\n offsetCenter: [\"0%\", \"20%\"],\n ...record(seriesTemplate.title),\n },\n detail: {\n offsetCenter: [\"0%\", \"-5%\"],\n ...record(seriesTemplate.detail),\n },\n }\n : {}),\n pointer: resolveGaugePointer(seriesTemplate.pointer),\n data: [\n {\n value: Number(first[valueField] ?? 0),\n name: widget.metadata.name,\n },\n ],\n },\n ],\n };\n }\n\n if (chartType === \"pie\") {\n const data = unique(rows, categoryField).map((category) => ({\n name: category,\n value: sumBy(rows, categoryField, valueField, category),\n }));\n return {\n ...common,\n series: [\n {\n ...seriesTemplate,\n data,\n radius: seriesTemplate.radius ?? [\"0%\", \"80%\"],\n },\n ],\n };\n }\n\n if (chartType === \"heatmap\") {\n const yCategoryField = stringValue(mappings.y) ?? \"y\";\n const data = rows.map((row) => [\n row[xField],\n row[yCategoryField],\n Number(row[valueField] ?? 0),\n ]);\n return {\n ...common,\n xAxis: {\n ...record(baseOptionRest.xAxis),\n type: \"category\",\n data: unique(rows, xField),\n axisLabel: { interval: \"auto\", hideOverlap: true },\n },\n yAxis: {\n ...record(baseOptionRest.yAxis),\n type: \"category\",\n data: unique(rows, yCategoryField),\n axisLabel: { interval: \"auto\", hideOverlap: true },\n },\n visualMap: {\n ...valueScaleBounds(data.map((cell) => Number(cell[2]))),\n calculable: true,\n orient: \"horizontal\",\n left: \"center\",\n bottom: 0,\n ...record(baseOptionRest.visualMap),\n },\n series: [\n {\n ...seriesTemplate,\n data,\n encode: { x: xField, y: yCategoryField, value: valueField },\n },\n ],\n };\n }\n\n if (chartType === \"scatter\") {\n const groups =\n seriesField === undefined\n ? { [widget.metadata.name]: rows }\n : groupBy(rows, seriesField);\n return {\n ...common,\n xAxis: { ...record(baseOptionRest.xAxis), type: \"value\" },\n yAxis: { ...record(baseOptionRest.yAxis), type: \"value\" },\n legend: { bottom: 0 },\n series: Object.entries(groups).map(([name, group]) => ({\n ...seriesTemplate,\n name,\n data: group.map((row) => [\n Number(row[xField] ?? 0),\n Number(row[yField] ?? 0),\n ]),\n type: \"scatter\",\n })),\n };\n }\n\n if (chartType === \"radar\") {\n const categories = unique(rows, categoryField);\n return {\n ...common,\n radar: {\n indicator: categories.map((category) => ({\n name: category,\n max: maxBy(rows, valueField),\n })),\n },\n series: [\n {\n ...seriesTemplate,\n data: [\n {\n value: categories.map((category) =>\n sumBy(rows, categoryField, valueField, category),\n ),\n name: widget.metadata.name,\n },\n ],\n },\n ],\n };\n }\n\n if (seriesField !== undefined) {\n const xValues = unique(rows, xField);\n const groups = groupBy(rows, seriesField);\n const seriesWithoutBaseline = { ...seriesTemplate };\n const baseline = seriesWithoutBaseline.baseline;\n delete seriesWithoutBaseline.baseline;\n return {\n ...common,\n xAxis: {\n ...record(baseOptionRest.xAxis),\n type: \"category\",\n data: xValues,\n axisLabel: { interval: \"auto\", hideOverlap: true },\n },\n yAxis:\n baseOptionRest.yAxis === undefined\n ? { type: \"value\" }\n : record(baseOptionRest.yAxis),\n legend:\n baseOptionRest.legend === undefined\n ? { bottom: 0 }\n : record(baseOptionRest.legend),\n series: Object.entries(groups).map(([name, group]) => ({\n ...seriesWithoutBaseline,\n name,\n data: xValues.map((x) => {\n const row = group.find(\n (candidate) => String(candidate[xField]) === String(x),\n );\n const value = Number(row?.[yField] ?? 0);\n const base = resolveBaseline(baseline, group, xField, x);\n return base === undefined ? value : [base, value];\n }),\n type: chartType,\n })),\n };\n }\n\n const categories = unique(rows, categoryField);\n const data = categories.map((category) => {\n const value = sumBy(rows, categoryField, valueField, category);\n const baseline = resolveBaseline(\n seriesTemplate.baseline,\n rows,\n categoryField,\n category,\n );\n return baseline === undefined ? value : [baseline, value];\n });\n if (chartType === \"bar\" && interpolated.orientation === \"horizontal\") {\n return {\n ...common,\n xAxis: { ...record(baseOptionRest.xAxis), type: \"value\" },\n yAxis: {\n ...record(baseOptionRest.yAxis),\n type: \"category\",\n data: categories,\n axisLabel: { interval: \"auto\", hideOverlap: true },\n },\n series: [{ ...seriesTemplate, data, type: \"bar\" }],\n };\n }\n return {\n ...common,\n xAxis: {\n ...record(baseOptionRest.xAxis),\n type: \"category\",\n data: categories,\n axisLabel: { interval: \"auto\", hideOverlap: true },\n },\n yAxis:\n baseOptionRest.yAxis === undefined\n ? { type: \"value\" }\n : record(baseOptionRest.yAxis),\n series: [{ ...seriesTemplate, data }],\n };\n}\n\nexport function chartAxisKey(option: unknown): string {\n if (!isRecord(option)) return \"\";\n const axes = Array.isArray(option.xAxis) ? option.xAxis : [option.xAxis];\n const axis = axes.find(\n (entry) => isRecord(entry) && entry.type === \"category\",\n );\n if (!isRecord(axis) || !Array.isArray(axis.data)) return \"\";\n const values = axis.data.map((entry) =>\n isRecord(entry) ? String(entry.value ?? \"\") : String(entry),\n );\n if (values.length === 0) return \"\";\n return `${values.length}|${values[0]}|${values[values.length - 1]}`;\n}\n","import type { ChartOption } from \"./types.js\";\nimport { isRecord } from \"./records.js\";\n\nexport interface ChartThemeTokens {\n foreground: string;\n mutedForeground: string;\n border: string;\n surface: string;\n surfaceForeground: string;\n fontFamily: string;\n seriesColors: readonly string[];\n heatmapColors?: readonly string[];\n}\n\nexport interface ChartLoadingOptions {\n text: string;\n color: string;\n textColor: string;\n maskColor: string;\n zlevel: number;\n fontFamily: string;\n fontSize: number;\n}\n\nexport function buildChartTheme(tokens: ChartThemeTokens): ChartOption {\n const axis = {\n axisLine: { show: true, lineStyle: { color: tokens.border } },\n axisTick: { show: false },\n axisLabel: { color: tokens.mutedForeground, fontSize: 11 },\n splitLine: {\n show: true,\n lineStyle: { color: tokens.border, type: \"dashed\", opacity: 0.7 },\n },\n splitArea: { show: false },\n };\n return {\n color: [...tokens.seriesColors],\n backgroundColor: \"transparent\",\n textStyle: { fontFamily: tokens.fontFamily, color: tokens.foreground },\n title: {\n textStyle: { color: tokens.foreground, fontWeight: 600 },\n subtextStyle: { color: tokens.mutedForeground },\n },\n legend: {\n textStyle: { color: tokens.mutedForeground },\n itemWidth: 10,\n itemHeight: 10,\n icon: \"roundRect\",\n },\n tooltip: {\n backgroundColor: tokens.surface,\n borderColor: tokens.border,\n borderWidth: 1,\n textStyle: { color: tokens.surfaceForeground, fontSize: 12 },\n axisPointer: {\n lineStyle: { color: tokens.border },\n crossStyle: { color: tokens.border },\n label: { backgroundColor: tokens.mutedForeground },\n },\n },\n categoryAxis: { ...axis, splitLine: { show: false } },\n valueAxis: axis,\n logAxis: axis,\n timeAxis: axis,\n line: { symbol: \"circle\", symbolSize: 6, lineStyle: { width: 2 } },\n bar: { itemStyle: { borderRadius: [3, 3, 0, 0] } },\n pie: { itemStyle: { borderColor: tokens.surface, borderWidth: 1 } },\n visualMap: {\n textStyle: { color: tokens.mutedForeground },\n inRange: {\n color: [...(tokens.heatmapColors ?? tokens.seriesColors.slice(0, 3))],\n },\n },\n dataZoom: {\n borderColor: tokens.border,\n textStyle: { color: tokens.mutedForeground },\n },\n toolbox: { iconStyle: { borderColor: tokens.mutedForeground } },\n };\n}\n\nconst CHART_MOTION: ChartOption = {\n animation: true,\n animationDuration: 520,\n animationEasing: \"cubicOut\",\n animationDelay: (index: number) => Math.min(index, 40) * 12,\n animationDurationUpdate: 420,\n animationEasingUpdate: \"cubicInOut\",\n animationDelayUpdate: (index: number) => Math.min(index, 40) * 6,\n};\n\nconst CHART_MOTION_OFF: ChartOption = {\n animation: false,\n animationDuration: 0,\n animationDurationUpdate: 0,\n animationDelay: 0,\n animationDelayUpdate: 0,\n};\n\nexport function withChartMotion(\n option: ChartOption,\n reduced: boolean,\n): ChartOption {\n const next: ChartOption = {\n ...(reduced ? CHART_MOTION_OFF : CHART_MOTION),\n };\n for (const [key, value] of Object.entries(option)) {\n if (value !== undefined) next[key] = value;\n }\n return next;\n}\n\nexport function chartStructureKey(option: ChartOption): string {\n const rawSeries = option.series;\n const series = Array.isArray(rawSeries)\n ? rawSeries\n : rawSeries === undefined || rawSeries === null\n ? []\n : [rawSeries];\n const seriesKey = series\n .map((entry) =>\n isRecord(entry)\n ? `${String(entry.type ?? \"\")}|${String(entry.name ?? \"\")}`\n : \"?\",\n )\n .join(\",\");\n const axisKey = ([\"xAxis\", \"yAxis\"] as const)\n .map((key) => {\n const axes = Array.isArray(option[key]) ? option[key] : [option[key]];\n return axes\n .map((axis) => (isRecord(axis) ? String(axis.type ?? \"\") : \"\"))\n .join(\"/\");\n })\n .join(\";\");\n const extras = [\"radar\", \"visualMap\", \"dataZoom\"]\n .map((key) => (option[key] === undefined ? \"0\" : \"1\"))\n .join(\"\");\n return `${seriesKey}#${axisKey}#${extras}`;\n}\n\nexport function chartLoadingOptions(\n tokens: ChartThemeTokens,\n mode: \"light\" | \"dark\",\n): ChartLoadingOptions {\n return {\n text: \"Refreshing\",\n color: tokens.seriesColors[0] ?? tokens.foreground,\n textColor: tokens.mutedForeground,\n maskColor:\n mode === \"dark\" ? \"rgba(15, 17, 21, 0.55)\" : \"rgba(250, 251, 252, 0.6)\",\n zlevel: 0,\n fontFamily: tokens.fontFamily,\n fontSize: 12,\n };\n}\n","import type {\n ChartRendererModel,\n RendererContext,\n WidgetResult,\n WidgetSpec,\n} from \"./types.js\";\nimport { applyChartDefaults } from \"./chart-defaults.js\";\nimport { buildChartOption, chartAxisKey } from \"./chart-options.js\";\nimport { chartStructureKey, withChartMotion } from \"./chart-theme.js\";\nimport { rendererFrame } from \"./theme.js\";\nimport { applyNamedFormatters } from \"./value-format.js\";\n\nexport function buildChartRendererModel(\n widget: WidgetSpec,\n result: WidgetResult,\n context: RendererContext = {},\n): ChartRendererModel {\n const option = withChartMotion(\n applyChartDefaults(applyNamedFormatters(buildChartOption(widget, result))),\n context.reducedMotion === true,\n );\n return {\n kind: \"chart\",\n frame: rendererFrame(\n widget,\n \"echarts\",\n context.widgetDefaults,\n context.framed,\n ),\n option,\n axisKey: chartAxisKey(option),\n structureKey: chartStructureKey(option),\n loading: context.loading === true,\n };\n}\n"]}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { isRecord, stringValue, displayBlock, rendererFrame, getClickInteraction, record } from './chunk-75CRTQK7.js';
|
|
2
|
+
|
|
3
|
+
// ../dashboard-renderers/src/table-model.ts
|
|
4
|
+
function resultRows(result) {
|
|
5
|
+
return Array.isArray(result.rows) ? result.rows.filter(isRecord) : [];
|
|
6
|
+
}
|
|
7
|
+
function tableResultColumns(result, rows = resultRows(result)) {
|
|
8
|
+
if (Array.isArray(result.columns)) {
|
|
9
|
+
return result.columns.filter(
|
|
10
|
+
(column) => typeof column === "string"
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
return rows[0] === void 0 ? [] : Object.keys(rows[0]);
|
|
14
|
+
}
|
|
15
|
+
function tableExportModel(display, fallbackFilename, excelExport = true) {
|
|
16
|
+
const configuration = display.export;
|
|
17
|
+
const enabled = configuration !== false;
|
|
18
|
+
const options = isRecord(configuration) ? configuration : {};
|
|
19
|
+
return {
|
|
20
|
+
csv: enabled && options.csv !== false,
|
|
21
|
+
excel: enabled && options.excel !== false && excelExport,
|
|
22
|
+
filename: stringValue(options.filename) ?? fallbackFilename
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function sortTableRows(rows, sort, sortable = true) {
|
|
26
|
+
if (sort === null || !sortable) return rows;
|
|
27
|
+
const direction = sort.direction === "asc" ? 1 : -1;
|
|
28
|
+
return [...rows].sort((left, right) => {
|
|
29
|
+
const leftValue = left[sort.column];
|
|
30
|
+
const rightValue = right[sort.column];
|
|
31
|
+
if (leftValue == null && rightValue == null) return 0;
|
|
32
|
+
if (leftValue == null) return direction;
|
|
33
|
+
if (rightValue == null) return -direction;
|
|
34
|
+
const leftNumber = Number(leftValue);
|
|
35
|
+
const rightNumber = Number(rightValue);
|
|
36
|
+
if (!Number.isNaN(leftNumber) && !Number.isNaN(rightNumber)) {
|
|
37
|
+
return (leftNumber - rightNumber) * direction;
|
|
38
|
+
}
|
|
39
|
+
return String(leftValue).localeCompare(String(rightValue)) * direction;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function nextTableSort(current, column, sortable = true) {
|
|
43
|
+
if (!sortable) return current;
|
|
44
|
+
if (current?.column === column) {
|
|
45
|
+
return {
|
|
46
|
+
column,
|
|
47
|
+
direction: current.direction === "asc" ? "desc" : "asc"
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return { column, direction: "asc" };
|
|
51
|
+
}
|
|
52
|
+
function formatTableCell(value, emptyValue = "-") {
|
|
53
|
+
return String(value ?? emptyValue);
|
|
54
|
+
}
|
|
55
|
+
function tableRows(rows, columns, pageSize, page) {
|
|
56
|
+
const start = page * pageSize;
|
|
57
|
+
return rows.slice(start, start + pageSize).map((data, index) => ({
|
|
58
|
+
key: start + index,
|
|
59
|
+
data,
|
|
60
|
+
cells: columns.map((field) => ({
|
|
61
|
+
field,
|
|
62
|
+
value: data[field],
|
|
63
|
+
text: formatTableCell(data[field])
|
|
64
|
+
}))
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
function buildTableRendererModel(widget, result, context = {}) {
|
|
68
|
+
const display = displayBlock(widget, "table");
|
|
69
|
+
const rows = resultRows(result);
|
|
70
|
+
const columns = tableResultColumns(result, rows);
|
|
71
|
+
const sortable = display.sortable !== false;
|
|
72
|
+
const sort = sortable ? context.tableSort ?? null : null;
|
|
73
|
+
const sortedRows = sortTableRows(rows, sort, sortable);
|
|
74
|
+
const pageSize = typeof display.page_size === "number" ? display.page_size : 10;
|
|
75
|
+
const pageCount = Math.max(1, Math.ceil(rows.length / pageSize));
|
|
76
|
+
const requestedPage = typeof context.tablePage === "number" ? context.tablePage : 0;
|
|
77
|
+
const page = Math.min(pageCount - 1, Math.max(0, requestedPage));
|
|
78
|
+
const frame = rendererFrame(
|
|
79
|
+
widget,
|
|
80
|
+
"table",
|
|
81
|
+
context.widgetDefaults,
|
|
82
|
+
context.framed
|
|
83
|
+
);
|
|
84
|
+
if (!frame.showObjectHeader && frame.label === void 0) {
|
|
85
|
+
frame.label = { text: widget.metadata.name, position: "top" };
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
kind: "table",
|
|
89
|
+
frame,
|
|
90
|
+
columns: columns.map((field) => ({
|
|
91
|
+
field,
|
|
92
|
+
title: field,
|
|
93
|
+
sortable,
|
|
94
|
+
sortDirection: sort?.column === field ? sort.direction : null
|
|
95
|
+
})),
|
|
96
|
+
rows: tableRows(sortedRows, columns, pageSize, page),
|
|
97
|
+
allRows: sortedRows,
|
|
98
|
+
page,
|
|
99
|
+
pageSize,
|
|
100
|
+
pageCount,
|
|
101
|
+
totalRows: rows.length,
|
|
102
|
+
sort,
|
|
103
|
+
exports: tableExportModel(
|
|
104
|
+
display,
|
|
105
|
+
widget.metadata.name,
|
|
106
|
+
context.excelExport !== false
|
|
107
|
+
)
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function columnConfigs(value) {
|
|
111
|
+
if (!Array.isArray(value)) return [];
|
|
112
|
+
return value.filter(isRecord).map((entry) => {
|
|
113
|
+
const config = {};
|
|
114
|
+
const field = stringValue(entry.field);
|
|
115
|
+
const title = stringValue(entry.title);
|
|
116
|
+
const formatter = stringValue(entry.formatter);
|
|
117
|
+
const headerTooltip = stringValue(entry.headerTooltip);
|
|
118
|
+
const sorter = stringValue(entry.sorter);
|
|
119
|
+
if (field !== void 0) config.field = field;
|
|
120
|
+
if (title !== void 0) config.title = title;
|
|
121
|
+
if (formatter !== void 0) config.formatter = formatter;
|
|
122
|
+
if (isRecord(entry.formatterParams)) {
|
|
123
|
+
config.formatterParams = entry.formatterParams;
|
|
124
|
+
}
|
|
125
|
+
if (typeof entry.frozen === "boolean") config.frozen = entry.frozen;
|
|
126
|
+
if (typeof entry.width === "number" || typeof entry.width === "string") {
|
|
127
|
+
config.width = entry.width;
|
|
128
|
+
}
|
|
129
|
+
if (headerTooltip !== void 0) config.headerTooltip = headerTooltip;
|
|
130
|
+
if (sorter !== void 0) config.sorter = sorter;
|
|
131
|
+
if (typeof entry.headerSort === "boolean") {
|
|
132
|
+
config.headerSort = entry.headerSort;
|
|
133
|
+
}
|
|
134
|
+
return config;
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
function formatterModel(config) {
|
|
138
|
+
if (config?.formatter === void 0) return void 0;
|
|
139
|
+
const params = config.formatterParams ?? {};
|
|
140
|
+
if (config.formatter === "percent") {
|
|
141
|
+
const precision = Number(params.precision ?? 1);
|
|
142
|
+
return {
|
|
143
|
+
kind: "percent",
|
|
144
|
+
precision,
|
|
145
|
+
params
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
kind: "named",
|
|
150
|
+
name: config.formatter,
|
|
151
|
+
params
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function formatGridCell(value, formatter) {
|
|
155
|
+
if (formatter?.kind !== "percent") return formatTableCell(value, "");
|
|
156
|
+
const number = Number(value);
|
|
157
|
+
if (!Number.isFinite(number)) return "";
|
|
158
|
+
return new Intl.NumberFormat("en-US", {
|
|
159
|
+
style: "percent",
|
|
160
|
+
minimumFractionDigits: formatter.precision,
|
|
161
|
+
maximumFractionDigits: formatter.precision
|
|
162
|
+
}).format(number);
|
|
163
|
+
}
|
|
164
|
+
function buildGridColumns(resultColumns, display) {
|
|
165
|
+
const frozenColumns = new Set(
|
|
166
|
+
Array.isArray(display.frozen_columns) ? display.frozen_columns.filter(
|
|
167
|
+
(column) => typeof column === "string"
|
|
168
|
+
) : []
|
|
169
|
+
);
|
|
170
|
+
const overrides = columnConfigs(display.columns);
|
|
171
|
+
const declared = overrides.map((configuration) => configuration.field).filter(
|
|
172
|
+
(field) => typeof field === "string" && field.length > 0
|
|
173
|
+
).map(
|
|
174
|
+
(field) => resultColumns.find(
|
|
175
|
+
(column) => column.toLowerCase() === field.toLowerCase()
|
|
176
|
+
)
|
|
177
|
+
).filter((field) => field !== void 0);
|
|
178
|
+
const fields = declared.length > 0 ? declared : resultColumns;
|
|
179
|
+
return fields.map((field) => {
|
|
180
|
+
const configuration = overrides.find(
|
|
181
|
+
(entry) => (entry.field ?? "").toLowerCase() === field.toLowerCase()
|
|
182
|
+
);
|
|
183
|
+
const model = {
|
|
184
|
+
field,
|
|
185
|
+
title: configuration?.title ?? field,
|
|
186
|
+
frozen: frozenColumns.has(field) || configuration?.frozen === true,
|
|
187
|
+
headerSort: typeof configuration?.headerSort === "boolean" ? configuration.headerSort : display.sortable !== false
|
|
188
|
+
};
|
|
189
|
+
const formatter = formatterModel(configuration);
|
|
190
|
+
if (formatter !== void 0) model.formatter = formatter;
|
|
191
|
+
if (configuration?.width !== void 0) {
|
|
192
|
+
model.width = configuration.width;
|
|
193
|
+
}
|
|
194
|
+
if (configuration?.headerTooltip !== void 0) {
|
|
195
|
+
model.headerTooltip = configuration.headerTooltip;
|
|
196
|
+
}
|
|
197
|
+
if (configuration?.sorter !== void 0) {
|
|
198
|
+
model.sorter = configuration.sorter;
|
|
199
|
+
}
|
|
200
|
+
return model;
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
function gridOptions(display) {
|
|
204
|
+
const pageSize = typeof display.page_size === "number" && display.page_size > 0 ? display.page_size : void 0;
|
|
205
|
+
const options = {
|
|
206
|
+
layout: display.layout === "fitData" || display.layout === "fitDataFill" ? display.layout : "fitColumns",
|
|
207
|
+
pagination: pageSize !== void 0,
|
|
208
|
+
groupStartOpen: display.group_start_open === true,
|
|
209
|
+
sortable: display.sortable !== false
|
|
210
|
+
};
|
|
211
|
+
if (pageSize !== void 0) options.pageSize = pageSize;
|
|
212
|
+
const groupBy = stringValue(display.group_by);
|
|
213
|
+
if (groupBy !== void 0 && groupBy !== "") options.groupBy = groupBy;
|
|
214
|
+
return options;
|
|
215
|
+
}
|
|
216
|
+
function buildTabulatorRendererModel(widget, result, context = {}) {
|
|
217
|
+
const display = displayBlock(widget, "tabulator");
|
|
218
|
+
const rows = resultRows(result);
|
|
219
|
+
const columns = tableResultColumns(result, rows);
|
|
220
|
+
return {
|
|
221
|
+
kind: "tabulator",
|
|
222
|
+
frame: rendererFrame(
|
|
223
|
+
widget,
|
|
224
|
+
"tabulator",
|
|
225
|
+
context.widgetDefaults,
|
|
226
|
+
context.framed
|
|
227
|
+
),
|
|
228
|
+
columns: buildGridColumns(columns, display),
|
|
229
|
+
rows,
|
|
230
|
+
options: gridOptions(display),
|
|
231
|
+
exports: tableExportModel(
|
|
232
|
+
display,
|
|
233
|
+
widget.metadata.name,
|
|
234
|
+
context.excelExport !== false
|
|
235
|
+
)
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
function tableInteraction(widget, row, columns) {
|
|
239
|
+
const interaction = getClickInteraction(widget);
|
|
240
|
+
if (interaction === void 0) return void 0;
|
|
241
|
+
const mappings = record(widget.spec.mappings);
|
|
242
|
+
const valueField = stringValue(mappings.value) ?? columns[0] ?? "value";
|
|
243
|
+
return {
|
|
244
|
+
interaction,
|
|
245
|
+
context: {
|
|
246
|
+
widgetId: widget.metadata.id,
|
|
247
|
+
data: row,
|
|
248
|
+
value: row[valueField]
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
export { buildGridColumns, buildTableRendererModel, buildTabulatorRendererModel, formatGridCell, formatTableCell, nextTableSort, sortTableRows, tableExportModel, tableInteraction, tableResultColumns };
|
|
254
|
+
//# sourceMappingURL=chunk-QDQ5VVTC.js.map
|
|
255
|
+
//# sourceMappingURL=chunk-QDQ5VVTC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../dashboard-renderers/src/table-model.ts"],"names":[],"mappings":"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","file":"chunk-QDQ5VVTC.js","sourcesContent":["import {\n getClickInteraction,\n type WidgetInteractionContext,\n} from \"@dlh.io/bideux-dashboard-core\";\nimport type { WidgetInteraction } from \"@dlh.io/bideux-dashboard-spec\";\n\nimport { displayBlock, isRecord, record, stringValue } from \"./records.js\";\nimport { rendererFrame } from \"./theme.js\";\nimport type {\n DataRow,\n GridColumnFormatterModel,\n GridColumnModel,\n GridOptionsModel,\n RendererContext,\n TableExportModel,\n TableRendererModel,\n TableRowModel,\n TableSortState,\n TabulatorRendererModel,\n WidgetResult,\n WidgetSpec,\n} from \"./types.js\";\n\ninterface TabulatorColumnConfig {\n field?: string;\n title?: string;\n formatter?: string;\n formatterParams?: Record<string, unknown>;\n frozen?: boolean;\n width?: number | string;\n headerTooltip?: string;\n sorter?: string;\n headerSort?: boolean;\n}\n\nfunction resultRows(result: WidgetResult): DataRow[] {\n return Array.isArray(result.rows) ? result.rows.filter(isRecord) : [];\n}\n\nexport function tableResultColumns(\n result: WidgetResult,\n rows: DataRow[] = resultRows(result),\n): string[] {\n if (Array.isArray(result.columns)) {\n return result.columns.filter(\n (column): column is string => typeof column === \"string\",\n );\n }\n return rows[0] === undefined ? [] : Object.keys(rows[0]);\n}\n\nexport function tableExportModel(\n display: Record<string, unknown>,\n fallbackFilename: string,\n excelExport = true,\n): TableExportModel {\n const configuration = display.export;\n const enabled = configuration !== false;\n const options = isRecord(configuration) ? configuration : {};\n return {\n csv: enabled && options.csv !== false,\n excel: enabled && options.excel !== false && excelExport,\n filename: stringValue(options.filename) ?? fallbackFilename,\n };\n}\n\nexport function sortTableRows(\n rows: DataRow[],\n sort: TableSortState | null,\n sortable = true,\n): DataRow[] {\n if (sort === null || !sortable) return rows;\n const direction = sort.direction === \"asc\" ? 1 : -1;\n return [...rows].sort((left, right) => {\n const leftValue = left[sort.column];\n const rightValue = right[sort.column];\n if (leftValue == null && rightValue == null) return 0;\n if (leftValue == null) return direction;\n if (rightValue == null) return -direction;\n const leftNumber = Number(leftValue);\n const rightNumber = Number(rightValue);\n if (!Number.isNaN(leftNumber) && !Number.isNaN(rightNumber)) {\n return (leftNumber - rightNumber) * direction;\n }\n return String(leftValue).localeCompare(String(rightValue)) * direction;\n });\n}\n\nexport function nextTableSort(\n current: TableSortState | null,\n column: string,\n sortable = true,\n): TableSortState | null {\n if (!sortable) return current;\n if (current?.column === column) {\n return {\n column,\n direction: current.direction === \"asc\" ? \"desc\" : \"asc\",\n };\n }\n return { column, direction: \"asc\" };\n}\n\nexport function formatTableCell(value: unknown, emptyValue = \"-\"): string {\n return String(value ?? emptyValue);\n}\n\nfunction tableRows(\n rows: DataRow[],\n columns: string[],\n pageSize: number,\n page: number,\n): TableRowModel[] {\n const start = page * pageSize;\n return rows.slice(start, start + pageSize).map((data, index) => ({\n key: start + index,\n data,\n cells: columns.map((field) => ({\n field,\n value: data[field],\n text: formatTableCell(data[field]),\n })),\n }));\n}\n\nexport function buildTableRendererModel(\n widget: WidgetSpec,\n result: WidgetResult,\n context: RendererContext = {},\n): TableRendererModel {\n const display = displayBlock(widget, \"table\");\n const rows = resultRows(result);\n const columns = tableResultColumns(result, rows);\n const sortable = display.sortable !== false;\n const sort = sortable ? (context.tableSort ?? null) : null;\n const sortedRows = sortTableRows(rows, sort, sortable);\n const pageSize =\n typeof display.page_size === \"number\" ? display.page_size : 10;\n const pageCount = Math.max(1, Math.ceil(rows.length / pageSize));\n const requestedPage =\n typeof context.tablePage === \"number\" ? context.tablePage : 0;\n const page = Math.min(pageCount - 1, Math.max(0, requestedPage));\n const frame = rendererFrame(\n widget,\n \"table\",\n context.widgetDefaults,\n context.framed,\n );\n if (!frame.showObjectHeader && frame.label === undefined) {\n frame.label = { text: widget.metadata.name, position: \"top\" };\n }\n return {\n kind: \"table\",\n frame,\n columns: columns.map((field) => ({\n field,\n title: field,\n sortable,\n sortDirection: sort?.column === field ? sort.direction : null,\n })),\n rows: tableRows(sortedRows, columns, pageSize, page),\n allRows: sortedRows,\n page,\n pageSize,\n pageCount,\n totalRows: rows.length,\n sort,\n exports: tableExportModel(\n display,\n widget.metadata.name,\n context.excelExport !== false,\n ),\n };\n}\n\nfunction columnConfigs(value: unknown): TabulatorColumnConfig[] {\n if (!Array.isArray(value)) return [];\n return value.filter(isRecord).map((entry) => {\n const config: TabulatorColumnConfig = {};\n const field = stringValue(entry.field);\n const title = stringValue(entry.title);\n const formatter = stringValue(entry.formatter);\n const headerTooltip = stringValue(entry.headerTooltip);\n const sorter = stringValue(entry.sorter);\n if (field !== undefined) config.field = field;\n if (title !== undefined) config.title = title;\n if (formatter !== undefined) config.formatter = formatter;\n if (isRecord(entry.formatterParams)) {\n config.formatterParams = entry.formatterParams;\n }\n if (typeof entry.frozen === \"boolean\") config.frozen = entry.frozen;\n if (typeof entry.width === \"number\" || typeof entry.width === \"string\") {\n config.width = entry.width;\n }\n if (headerTooltip !== undefined) config.headerTooltip = headerTooltip;\n if (sorter !== undefined) config.sorter = sorter;\n if (typeof entry.headerSort === \"boolean\") {\n config.headerSort = entry.headerSort;\n }\n return config;\n });\n}\n\nfunction formatterModel(\n config: TabulatorColumnConfig | undefined,\n): GridColumnFormatterModel | undefined {\n if (config?.formatter === undefined) return undefined;\n const params = config.formatterParams ?? {};\n if (config.formatter === \"percent\") {\n const precision = Number(params.precision ?? 1);\n return {\n kind: \"percent\",\n precision,\n params,\n };\n }\n return {\n kind: \"named\",\n name: config.formatter,\n params,\n };\n}\n\nexport function formatGridCell(\n value: unknown,\n formatter: GridColumnFormatterModel | undefined,\n): string {\n if (formatter?.kind !== \"percent\") return formatTableCell(value, \"\");\n const number = Number(value);\n if (!Number.isFinite(number)) return \"\";\n return new Intl.NumberFormat(\"en-US\", {\n style: \"percent\",\n minimumFractionDigits: formatter.precision,\n maximumFractionDigits: formatter.precision,\n }).format(number);\n}\n\nexport function buildGridColumns(\n resultColumns: string[],\n display: Record<string, unknown>,\n): GridColumnModel[] {\n const frozenColumns = new Set(\n Array.isArray(display.frozen_columns)\n ? display.frozen_columns.filter(\n (column): column is string => typeof column === \"string\",\n )\n : [],\n );\n const overrides = columnConfigs(display.columns);\n const declared = overrides\n .map((configuration) => configuration.field)\n .filter(\n (field): field is string => typeof field === \"string\" && field.length > 0,\n )\n .map((field) =>\n resultColumns.find(\n (column) => column.toLowerCase() === field.toLowerCase(),\n ),\n )\n .filter((field): field is string => field !== undefined);\n const fields = declared.length > 0 ? declared : resultColumns;\n\n return fields.map((field) => {\n const configuration = overrides.find(\n (entry) => (entry.field ?? \"\").toLowerCase() === field.toLowerCase(),\n );\n const model: GridColumnModel = {\n field,\n title: configuration?.title ?? field,\n frozen: frozenColumns.has(field) || configuration?.frozen === true,\n headerSort:\n typeof configuration?.headerSort === \"boolean\"\n ? configuration.headerSort\n : display.sortable !== false,\n };\n const formatter = formatterModel(configuration);\n if (formatter !== undefined) model.formatter = formatter;\n if (configuration?.width !== undefined) {\n model.width = configuration.width;\n }\n if (configuration?.headerTooltip !== undefined) {\n model.headerTooltip = configuration.headerTooltip;\n }\n if (configuration?.sorter !== undefined) {\n model.sorter = configuration.sorter;\n }\n return model;\n });\n}\n\nfunction gridOptions(display: Record<string, unknown>): GridOptionsModel {\n const pageSize =\n typeof display.page_size === \"number\" && display.page_size > 0\n ? display.page_size\n : undefined;\n const options: GridOptionsModel = {\n layout:\n display.layout === \"fitData\" || display.layout === \"fitDataFill\"\n ? display.layout\n : \"fitColumns\",\n pagination: pageSize !== undefined,\n groupStartOpen: display.group_start_open === true,\n sortable: display.sortable !== false,\n };\n if (pageSize !== undefined) options.pageSize = pageSize;\n const groupBy = stringValue(display.group_by);\n if (groupBy !== undefined && groupBy !== \"\") options.groupBy = groupBy;\n return options;\n}\n\nexport function buildTabulatorRendererModel(\n widget: WidgetSpec,\n result: WidgetResult,\n context: RendererContext = {},\n): TabulatorRendererModel {\n const display = displayBlock(widget, \"tabulator\");\n const rows = resultRows(result);\n const columns = tableResultColumns(result, rows);\n return {\n kind: \"tabulator\",\n frame: rendererFrame(\n widget,\n \"tabulator\",\n context.widgetDefaults,\n context.framed,\n ),\n columns: buildGridColumns(columns, display),\n rows,\n options: gridOptions(display),\n exports: tableExportModel(\n display,\n widget.metadata.name,\n context.excelExport !== false,\n ),\n };\n}\n\nexport function tableInteraction(\n widget: WidgetSpec,\n row: DataRow,\n columns: string[],\n):\n | {\n interaction: WidgetInteraction;\n context: WidgetInteractionContext;\n }\n | undefined {\n const interaction = getClickInteraction(widget);\n if (interaction === undefined) return undefined;\n const mappings = record(widget.spec.mappings);\n const valueField = stringValue(mappings.value) ?? columns[0] ?? \"value\";\n return {\n interaction,\n context: {\n widgetId: widget.metadata.id,\n data: row,\n value: row[valueField],\n },\n };\n}\n"]}
|