@duckcodeailabs/dql-compiler 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 +123 -0
- package/dist/charts/area.d.ts +5 -0
- package/dist/charts/area.d.ts.map +1 -0
- package/dist/charts/area.js +30 -0
- package/dist/charts/area.js.map +1 -0
- package/dist/charts/bar.d.ts +5 -0
- package/dist/charts/bar.d.ts.map +1 -0
- package/dist/charts/bar.js +37 -0
- package/dist/charts/bar.js.map +1 -0
- package/dist/charts/boxplot.d.ts +5 -0
- package/dist/charts/boxplot.d.ts.map +1 -0
- package/dist/charts/boxplot.js +36 -0
- package/dist/charts/boxplot.js.map +1 -0
- package/dist/charts/chart-registry.d.ts +24 -0
- package/dist/charts/chart-registry.d.ts.map +1 -0
- package/dist/charts/chart-registry.js +14 -0
- package/dist/charts/chart-registry.js.map +1 -0
- package/dist/charts/combo.d.ts +5 -0
- package/dist/charts/combo.d.ts.map +1 -0
- package/dist/charts/combo.js +54 -0
- package/dist/charts/combo.js.map +1 -0
- package/dist/charts/funnel.d.ts +5 -0
- package/dist/charts/funnel.d.ts.map +1 -0
- package/dist/charts/funnel.js +36 -0
- package/dist/charts/funnel.js.map +1 -0
- package/dist/charts/gauge.d.ts +5 -0
- package/dist/charts/gauge.d.ts.map +1 -0
- package/dist/charts/gauge.js +53 -0
- package/dist/charts/gauge.js.map +1 -0
- package/dist/charts/geo.d.ts +5 -0
- package/dist/charts/geo.d.ts.map +1 -0
- package/dist/charts/geo.js +48 -0
- package/dist/charts/geo.js.map +1 -0
- package/dist/charts/grouped-bar.d.ts +5 -0
- package/dist/charts/grouped-bar.d.ts.map +1 -0
- package/dist/charts/grouped-bar.js +37 -0
- package/dist/charts/grouped-bar.js.map +1 -0
- package/dist/charts/heatmap.d.ts +5 -0
- package/dist/charts/heatmap.d.ts.map +1 -0
- package/dist/charts/heatmap.js +31 -0
- package/dist/charts/heatmap.js.map +1 -0
- package/dist/charts/histogram.d.ts +5 -0
- package/dist/charts/histogram.d.ts.map +1 -0
- package/dist/charts/histogram.js +32 -0
- package/dist/charts/histogram.js.map +1 -0
- package/dist/charts/index.d.ts +25 -0
- package/dist/charts/index.d.ts.map +1 -0
- package/dist/charts/index.js +66 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/charts/kpi.d.ts +14 -0
- package/dist/charts/kpi.d.ts.map +1 -0
- package/dist/charts/kpi.js +71 -0
- package/dist/charts/kpi.js.map +1 -0
- package/dist/charts/line.d.ts +5 -0
- package/dist/charts/line.d.ts.map +1 -0
- package/dist/charts/line.js +38 -0
- package/dist/charts/line.js.map +1 -0
- package/dist/charts/pie.d.ts +5 -0
- package/dist/charts/pie.d.ts.map +1 -0
- package/dist/charts/pie.js +25 -0
- package/dist/charts/pie.js.map +1 -0
- package/dist/charts/sankey.d.ts +10 -0
- package/dist/charts/sankey.d.ts.map +1 -0
- package/dist/charts/sankey.js +120 -0
- package/dist/charts/sankey.js.map +1 -0
- package/dist/charts/scatter.d.ts +5 -0
- package/dist/charts/scatter.d.ts.map +1 -0
- package/dist/charts/scatter.js +34 -0
- package/dist/charts/scatter.js.map +1 -0
- package/dist/charts/shared.d.ts +11 -0
- package/dist/charts/shared.d.ts.map +1 -0
- package/dist/charts/shared.js +52 -0
- package/dist/charts/shared.js.map +1 -0
- package/dist/charts/small-multiples.d.ts +5 -0
- package/dist/charts/small-multiples.d.ts.map +1 -0
- package/dist/charts/small-multiples.js +59 -0
- package/dist/charts/small-multiples.js.map +1 -0
- package/dist/charts/sparkline.d.ts +5 -0
- package/dist/charts/sparkline.d.ts.map +1 -0
- package/dist/charts/sparkline.js +41 -0
- package/dist/charts/sparkline.js.map +1 -0
- package/dist/charts/stacked-bar.d.ts +5 -0
- package/dist/charts/stacked-bar.d.ts.map +1 -0
- package/dist/charts/stacked-bar.js +34 -0
- package/dist/charts/stacked-bar.js.map +1 -0
- package/dist/charts/table.d.ts +14 -0
- package/dist/charts/table.d.ts.map +1 -0
- package/dist/charts/table.js +58 -0
- package/dist/charts/table.js.map +1 -0
- package/dist/charts/treemap.d.ts +9 -0
- package/dist/charts/treemap.d.ts.map +1 -0
- package/dist/charts/treemap.js +60 -0
- package/dist/charts/treemap.js.map +1 -0
- package/dist/charts/waterfall.d.ts +5 -0
- package/dist/charts/waterfall.d.ts.map +1 -0
- package/dist/charts/waterfall.js +36 -0
- package/dist/charts/waterfall.js.map +1 -0
- package/dist/codegen/bundle.d.ts +34 -0
- package/dist/codegen/bundle.d.ts.map +1 -0
- package/dist/codegen/bundle.js +20 -0
- package/dist/codegen/bundle.js.map +1 -0
- package/dist/codegen/html-emitter.d.ts +10 -0
- package/dist/codegen/html-emitter.d.ts.map +1 -0
- package/dist/codegen/html-emitter.js +1082 -0
- package/dist/codegen/html-emitter.js.map +1 -0
- package/dist/codegen/index.d.ts +6 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +6 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/react-emitter.d.ts +42 -0
- package/dist/codegen/react-emitter.d.ts.map +1 -0
- package/dist/codegen/react-emitter.js +135 -0
- package/dist/codegen/react-emitter.js.map +1 -0
- package/dist/codegen/runtime-emitter.d.ts +2 -0
- package/dist/codegen/runtime-emitter.d.ts.map +1 -0
- package/dist/codegen/runtime-emitter.js +1807 -0
- package/dist/codegen/runtime-emitter.js.map +1 -0
- package/dist/codegen/vega-lite-emitter.d.ts +23 -0
- package/dist/codegen/vega-lite-emitter.d.ts.map +1 -0
- package/dist/codegen/vega-lite-emitter.js +92 -0
- package/dist/codegen/vega-lite-emitter.js.map +1 -0
- package/dist/compiler.d.ts +17 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +106 -0
- package/dist/compiler.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/index.d.ts +3 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +2 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/ir-nodes.d.ts +169 -0
- package/dist/ir/ir-nodes.d.ts.map +1 -0
- package/dist/ir/ir-nodes.js +2 -0
- package/dist/ir/ir-nodes.js.map +1 -0
- package/dist/ir/lowering.d.ts +9 -0
- package/dist/ir/lowering.d.ts.map +1 -0
- package/dist/ir/lowering.js +980 -0
- package/dist/ir/lowering.js.map +1 -0
- package/dist/modules/index.d.ts +4 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/index.js +3 -0
- package/dist/modules/index.js.map +1 -0
- package/dist/modules/resolver.d.ts +21 -0
- package/dist/modules/resolver.d.ts.map +1 -0
- package/dist/modules/resolver.js +112 -0
- package/dist/modules/resolver.js.map +1 -0
- package/dist/modules/use-expander.d.ts +11 -0
- package/dist/modules/use-expander.d.ts.map +1 -0
- package/dist/modules/use-expander.js +42 -0
- package/dist/modules/use-expander.js.map +1 -0
- package/dist/themes/colorful.d.ts +3 -0
- package/dist/themes/colorful.d.ts.map +1 -0
- package/dist/themes/colorful.js +14 -0
- package/dist/themes/colorful.js.map +1 -0
- package/dist/themes/corporate.d.ts +3 -0
- package/dist/themes/corporate.d.ts.map +1 -0
- package/dist/themes/corporate.js +14 -0
- package/dist/themes/corporate.js.map +1 -0
- package/dist/themes/dark.d.ts +3 -0
- package/dist/themes/dark.d.ts.map +1 -0
- package/dist/themes/dark.js +14 -0
- package/dist/themes/dark.js.map +1 -0
- package/dist/themes/index.d.ts +11 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +29 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/light.d.ts +3 -0
- package/dist/themes/light.d.ts.map +1 -0
- package/dist/themes/light.js +14 -0
- package/dist/themes/light.js.map +1 -0
- package/dist/themes/minimal.d.ts +3 -0
- package/dist/themes/minimal.d.ts.map +1 -0
- package/dist/themes/minimal.js +14 -0
- package/dist/themes/minimal.js.map +1 -0
- package/dist/themes/theme-types.d.ts +14 -0
- package/dist/themes/theme-types.d.ts.map +1 -0
- package/dist/themes/theme-types.js +2 -0
- package/dist/themes/theme-types.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export function buildTitle(chart, theme) {
|
|
2
|
+
if (!chart.title)
|
|
3
|
+
return undefined;
|
|
4
|
+
if (chart.config.titleFontSize) {
|
|
5
|
+
return {
|
|
6
|
+
text: chart.title,
|
|
7
|
+
fontSize: chart.config.titleFontSize,
|
|
8
|
+
color: theme.titleColor,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
return chart.title;
|
|
12
|
+
}
|
|
13
|
+
export function buildTooltipEncoding(chart) {
|
|
14
|
+
if (!chart.config.tooltip || chart.config.tooltip.length === 0)
|
|
15
|
+
return undefined;
|
|
16
|
+
return chart.config.tooltip.map((field) => ({ field, type: 'nominal' }));
|
|
17
|
+
}
|
|
18
|
+
export function applyAxisFormat(encoding, chart) {
|
|
19
|
+
if (chart.config.formatX && encoding.x) {
|
|
20
|
+
encoding.x.axis = {
|
|
21
|
+
...(encoding.x.axis ?? {}),
|
|
22
|
+
format: chart.config.formatX,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (chart.config.formatY && encoding.y) {
|
|
26
|
+
encoding.y.axis = {
|
|
27
|
+
...(encoding.y.axis ?? {}),
|
|
28
|
+
format: chart.config.formatY,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function buildCommonConfig(chart, theme) {
|
|
33
|
+
return {
|
|
34
|
+
background: theme.background,
|
|
35
|
+
font: theme.fontFamily,
|
|
36
|
+
title: { color: theme.titleColor, fontSize: 16 },
|
|
37
|
+
axis: {
|
|
38
|
+
gridColor: chart.config.showGrid !== false ? theme.gridColor : 'transparent',
|
|
39
|
+
domainColor: theme.axisColor,
|
|
40
|
+
tickColor: theme.axisColor,
|
|
41
|
+
labelColor: theme.textColor,
|
|
42
|
+
titleColor: theme.textColor,
|
|
43
|
+
},
|
|
44
|
+
legend: {
|
|
45
|
+
...(chart.config.showLegend === false ? { disable: true } : {}),
|
|
46
|
+
labelColor: theme.textColor,
|
|
47
|
+
titleColor: theme.textColor,
|
|
48
|
+
},
|
|
49
|
+
view: { stroke: 'transparent' },
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/charts/shared.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,UAAU,CACxB,KAAc,EACd,KAAkB;IAElB,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAEnC,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,KAAK;YACjB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;YACpC,KAAK,EAAE,KAAK,CAAC,UAAU;SACxB,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACjF,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAiC,EAAE,KAAc;IAC/E,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC;QACtC,QAAQ,CAAC,CAA6B,CAAC,IAAI,GAAG;YAC7C,GAAG,CAAE,QAAQ,CAAC,CAA6B,CAAC,IAA+B,IAAI,EAAE,CAAC;YAClF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;SAC7B,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC;QACtC,QAAQ,CAAC,CAA6B,CAAC,IAAI,GAAG;YAC7C,GAAG,CAAE,QAAQ,CAAC,CAA6B,CAAC,IAA+B,IAAI,EAAE,CAAC;YAClF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;SAC7B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,KAAkB;IAClE,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,IAAI,EAAE,KAAK,CAAC,UAAU;QACtB,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAChD,IAAI,EAAE;YACJ,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa;YAC5E,WAAW,EAAE,KAAK,CAAC,SAAS;YAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,KAAK,CAAC,SAAS;YAC3B,UAAU,EAAE,KAAK,CAAC,SAAS;SAC5B;QACD,MAAM,EAAE;YACN,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,UAAU,EAAE,KAAK,CAAC,SAAS;YAC3B,UAAU,EAAE,KAAK,CAAC,SAAS;SAC5B;QACD,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;KAChC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ChartIR } from '../ir/ir-nodes.js';
|
|
2
|
+
import type { ThemeConfig } from '../themes/theme-types.js';
|
|
3
|
+
import type { VegaLiteSpec } from './chart-registry.js';
|
|
4
|
+
export declare function emitSmallMultiplesChart(chart: ChartIR, theme: ThemeConfig): VegaLiteSpec;
|
|
5
|
+
//# sourceMappingURL=small-multiples.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"small-multiples.d.ts","sourceRoot":"","sources":["../../src/charts/small-multiples.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,CA4DxF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { buildCommonConfig, buildTitle, buildTooltipEncoding, applyAxisFormat } from './shared.js';
|
|
2
|
+
export function emitSmallMultiplesChart(chart, theme) {
|
|
3
|
+
const x = chart.config.x || 'x';
|
|
4
|
+
const y = chart.config.y || 'y';
|
|
5
|
+
const facet = chart.config.facet || chart.config.colorField || 'facet';
|
|
6
|
+
const colorField = chart.config.colorField;
|
|
7
|
+
const tooltip = buildTooltipEncoding(chart) ?? [
|
|
8
|
+
{ field: facet, type: 'nominal', title: facet },
|
|
9
|
+
{ field: x, type: 'temporal', title: x },
|
|
10
|
+
{ field: y, type: 'quantitative', title: y },
|
|
11
|
+
];
|
|
12
|
+
const innerSpec = {
|
|
13
|
+
width: chart.config.width ?? 180,
|
|
14
|
+
height: chart.config.height ?? 110,
|
|
15
|
+
mark: {
|
|
16
|
+
type: 'line',
|
|
17
|
+
interpolate: 'monotone',
|
|
18
|
+
strokeWidth: chart.config.lineWidth ?? 2,
|
|
19
|
+
color: colorField ? undefined : (chart.config.color ?? theme.colors[0]),
|
|
20
|
+
},
|
|
21
|
+
encoding: {
|
|
22
|
+
x: {
|
|
23
|
+
field: x,
|
|
24
|
+
type: 'temporal',
|
|
25
|
+
axis: { title: chart.config.xAxisLabel ?? x, labelColor: theme.axisColor, titleColor: theme.axisColor },
|
|
26
|
+
},
|
|
27
|
+
y: {
|
|
28
|
+
field: y,
|
|
29
|
+
type: 'quantitative',
|
|
30
|
+
axis: { title: chart.config.yAxisLabel ?? y, labelColor: theme.axisColor, titleColor: theme.axisColor },
|
|
31
|
+
},
|
|
32
|
+
tooltip,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
if (colorField) {
|
|
36
|
+
innerSpec.encoding.color = {
|
|
37
|
+
field: colorField,
|
|
38
|
+
type: 'nominal',
|
|
39
|
+
legend: chart.config.showLegend === false ? null : undefined,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
applyAxisFormat(innerSpec.encoding, chart);
|
|
43
|
+
return {
|
|
44
|
+
$schema: 'https://vega.github.io/schema/vega-lite/v5.json',
|
|
45
|
+
title: buildTitle(chart, theme),
|
|
46
|
+
data: { values: [] },
|
|
47
|
+
facet: {
|
|
48
|
+
field: facet,
|
|
49
|
+
type: 'nominal',
|
|
50
|
+
columns: 2,
|
|
51
|
+
},
|
|
52
|
+
spec: innerSpec,
|
|
53
|
+
resolve: {
|
|
54
|
+
scale: { y: 'independent' },
|
|
55
|
+
},
|
|
56
|
+
config: buildCommonConfig(chart, theme),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=small-multiples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"small-multiples.js","sourceRoot":"","sources":["../../src/charts/small-multiples.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ChartIR } from '../ir/ir-nodes.js';
|
|
2
|
+
import type { ThemeConfig } from '../themes/theme-types.js';
|
|
3
|
+
import type { VegaLiteSpec } from './chart-registry.js';
|
|
4
|
+
export declare function emitSparklineChart(chart: ChartIR, theme: ThemeConfig): VegaLiteSpec;
|
|
5
|
+
//# sourceMappingURL=sparkline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparkline.d.ts","sourceRoot":"","sources":["../../src/charts/sparkline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,CAuCnF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { buildCommonConfig, buildTitle, buildTooltipEncoding, applyAxisFormat } from './shared.js';
|
|
2
|
+
export function emitSparklineChart(chart, theme) {
|
|
3
|
+
const x = chart.config.x || 'x';
|
|
4
|
+
const y = chart.config.y || 'y';
|
|
5
|
+
const tooltip = buildTooltipEncoding(chart) ?? [
|
|
6
|
+
{ field: x, type: 'temporal', title: x },
|
|
7
|
+
{ field: y, type: 'quantitative', title: y },
|
|
8
|
+
];
|
|
9
|
+
return {
|
|
10
|
+
$schema: 'https://vega.github.io/schema/vega-lite/v5.json',
|
|
11
|
+
title: buildTitle(chart, theme),
|
|
12
|
+
width: chart.config.width ?? 'container',
|
|
13
|
+
height: chart.config.height ?? 72,
|
|
14
|
+
mark: {
|
|
15
|
+
type: 'line',
|
|
16
|
+
interpolate: 'monotone',
|
|
17
|
+
strokeWidth: chart.config.lineWidth ?? 2,
|
|
18
|
+
color: chart.config.color ?? theme.colors[0],
|
|
19
|
+
},
|
|
20
|
+
encoding: (() => {
|
|
21
|
+
const enc = {
|
|
22
|
+
x: {
|
|
23
|
+
field: x,
|
|
24
|
+
type: 'temporal',
|
|
25
|
+
axis: null,
|
|
26
|
+
},
|
|
27
|
+
y: {
|
|
28
|
+
field: y,
|
|
29
|
+
type: 'quantitative',
|
|
30
|
+
axis: null,
|
|
31
|
+
},
|
|
32
|
+
tooltip,
|
|
33
|
+
};
|
|
34
|
+
applyAxisFormat(enc, chart);
|
|
35
|
+
return enc;
|
|
36
|
+
})(),
|
|
37
|
+
data: { values: [] },
|
|
38
|
+
config: buildCommonConfig(chart, theme),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=sparkline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparkline.js","sourceRoot":"","sources":["../../src/charts/sparkline.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnG,MAAM,UAAU,kBAAkB,CAAC,KAAc,EAAE,KAAkB;IACnE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC;IAChC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC;IAChC,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI;QAC7C,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;QACxC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE;KAC7C,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,iDAAiD;QAC1D,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAC/B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,WAAW;QACxC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE;QACjC,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,UAAU;YACvB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC;YACxC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;SAC7C;QACD,QAAQ,EAAE,CAAC,GAAG,EAAE;YACd,MAAM,GAAG,GAA4B;gBACnC,CAAC,EAAE;oBACD,KAAK,EAAE,CAAC;oBACR,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,IAAI;iBACX;gBACD,CAAC,EAAE;oBACD,KAAK,EAAE,CAAC;oBACR,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE,IAAI;iBACX;gBACD,OAAO;aACR,CAAC;YACF,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5B,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,EAAE;QACJ,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACpB,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ChartIR } from '../ir/ir-nodes.js';
|
|
2
|
+
import type { ThemeConfig } from '../themes/theme-types.js';
|
|
3
|
+
import type { VegaLiteSpec } from './chart-registry.js';
|
|
4
|
+
export declare function emitStackedBarChart(chart: ChartIR, theme: ThemeConfig): VegaLiteSpec;
|
|
5
|
+
//# sourceMappingURL=stacked-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stacked-bar.d.ts","sourceRoot":"","sources":["../../src/charts/stacked-bar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,CAgCpF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { buildCommonConfig, buildTitle } from './shared.js';
|
|
2
|
+
export function emitStackedBarChart(chart, theme) {
|
|
3
|
+
const { x, y, color, xAxisLabel, yAxisLabel } = chart.config;
|
|
4
|
+
return {
|
|
5
|
+
$schema: 'https://vega.github.io/schema/vega-lite/v5.json',
|
|
6
|
+
title: buildTitle(chart, theme),
|
|
7
|
+
width: chart.config.width ?? 'container',
|
|
8
|
+
height: chart.config.height ?? 300,
|
|
9
|
+
mark: {
|
|
10
|
+
type: 'bar',
|
|
11
|
+
},
|
|
12
|
+
encoding: {
|
|
13
|
+
x: {
|
|
14
|
+
field: x,
|
|
15
|
+
type: 'nominal',
|
|
16
|
+
axis: { title: xAxisLabel ?? x, labelColor: theme.axisColor, titleColor: theme.axisColor },
|
|
17
|
+
},
|
|
18
|
+
y: {
|
|
19
|
+
field: y,
|
|
20
|
+
type: 'quantitative',
|
|
21
|
+
axis: { title: yAxisLabel ?? y, labelColor: theme.axisColor, titleColor: theme.axisColor },
|
|
22
|
+
stack: 'zero',
|
|
23
|
+
},
|
|
24
|
+
color: {
|
|
25
|
+
field: color ?? x,
|
|
26
|
+
type: 'nominal',
|
|
27
|
+
scale: { range: theme.colors },
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
data: { values: [] },
|
|
31
|
+
config: buildCommonConfig(chart, theme),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=stacked-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stacked-bar.js","sourceRoot":"","sources":["../../src/charts/stacked-bar.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,UAAU,mBAAmB,CAAC,KAAc,EAAE,KAAkB;IACpE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IAE7D,OAAO;QACL,OAAO,EAAE,iDAAiD;QAC1D,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAC/B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,WAAW;QACxC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG;QAClC,IAAI,EAAE;YACJ,IAAI,EAAE,KAAK;SACZ;QACD,QAAQ,EAAE;YACR,CAAC,EAAE;gBACD,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE;aAC3F;YACD,CAAC,EAAE;gBACD,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE;gBAC1F,KAAK,EAAE,MAAM;aACd;YACD,KAAK,EAAE;gBACL,KAAK,EAAE,KAAK,IAAI,CAAC;gBACjB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;aAC/B;SACF;QACD,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACpB,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ChartIR } from '../ir/ir-nodes.js';
|
|
2
|
+
import type { ThemeConfig } from '../themes/theme-types.js';
|
|
3
|
+
export interface TableSpec {
|
|
4
|
+
type: 'table';
|
|
5
|
+
chartId: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
columns?: string[];
|
|
8
|
+
sortable: boolean;
|
|
9
|
+
pageSize: number;
|
|
10
|
+
theme: ThemeConfig;
|
|
11
|
+
}
|
|
12
|
+
export declare function emitTableSpec(chart: ChartIR, theme: ThemeConfig): TableSpec;
|
|
13
|
+
export declare function renderTableHTML(spec: TableSpec, data: Record<string, unknown>[]): string;
|
|
14
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/charts/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,CAU3E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAsDxF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export function emitTableSpec(chart, theme) {
|
|
2
|
+
return {
|
|
3
|
+
type: 'table',
|
|
4
|
+
chartId: chart.id,
|
|
5
|
+
title: chart.title,
|
|
6
|
+
columns: chart.config.columns,
|
|
7
|
+
sortable: chart.config.sortable ?? true,
|
|
8
|
+
pageSize: chart.config.pageSize ?? 25,
|
|
9
|
+
theme,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function renderTableHTML(spec, data) {
|
|
13
|
+
const { theme, title, columns: specColumns, sortable } = spec;
|
|
14
|
+
const columns = specColumns ?? (data.length > 0 ? Object.keys(data[0]) : []);
|
|
15
|
+
const headerCells = columns
|
|
16
|
+
.map((col) => `<th style="
|
|
17
|
+
padding: 10px 16px;
|
|
18
|
+
text-align: left;
|
|
19
|
+
border-bottom: 2px solid ${theme.borderColor};
|
|
20
|
+
color: ${theme.textColor};
|
|
21
|
+
font-weight: 600;
|
|
22
|
+
font-size: 12px;
|
|
23
|
+
text-transform: uppercase;
|
|
24
|
+
letter-spacing: 0.5px;
|
|
25
|
+
${sortable ? 'cursor: pointer;' : ''}
|
|
26
|
+
">${formatLabel(col)}</th>`)
|
|
27
|
+
.join('');
|
|
28
|
+
const bodyRows = data
|
|
29
|
+
.map((row) => `<tr>${columns
|
|
30
|
+
.map((col) => `<td style="
|
|
31
|
+
padding: 8px 16px;
|
|
32
|
+
border-bottom: 1px solid ${theme.borderColor};
|
|
33
|
+
color: ${theme.foreground};
|
|
34
|
+
">${row[col] ?? ''}</td>`)
|
|
35
|
+
.join('')}</tr>`)
|
|
36
|
+
.join('');
|
|
37
|
+
return `
|
|
38
|
+
<div class="dql-table-container" id="${spec.chartId}">
|
|
39
|
+
${title ? `<h3 style="color: ${theme.titleColor}; margin-bottom: 12px;">${title}</h3>` : ''}
|
|
40
|
+
<div style="overflow-x: auto;">
|
|
41
|
+
<table style="
|
|
42
|
+
width: 100%;
|
|
43
|
+
border-collapse: collapse;
|
|
44
|
+
background: ${theme.cardBackground};
|
|
45
|
+
border-radius: 8px;
|
|
46
|
+
font-family: ${theme.fontFamily};
|
|
47
|
+
">
|
|
48
|
+
<thead><tr>${headerCells}</tr></thead>
|
|
49
|
+
<tbody>${bodyRows}</tbody>
|
|
50
|
+
</table>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
`;
|
|
54
|
+
}
|
|
55
|
+
function formatLabel(col) {
|
|
56
|
+
return col.replace(/_/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase());
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/charts/table.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,KAAkB;IAC9D,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;QAC7B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI;QACvC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE;QACrC,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAe,EAAE,IAA+B;IAC9E,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC9D,MAAM,OAAO,GAAG,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE7E,MAAM,WAAW,GAAG,OAAO;SACxB,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN;;;qCAG6B,KAAK,CAAC,WAAW;mBACnC,KAAK,CAAC,SAAS;;;;;YAKtB,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;YAClC,WAAW,CAAC,GAAG,CAAC,OAAO,CAC9B;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,QAAQ,GAAG,IAAI;SAClB,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN,OAAO,OAAO;SACX,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN;;2CAE6B,KAAK,CAAC,WAAW;yBACnC,KAAK,CAAC,UAAU;kBACvB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAC5B;SACA,IAAI,CAAC,EAAE,CAAC,OAAO,CACrB;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO;2CACkC,IAAI,CAAC,OAAO;QAC/C,KAAK,CAAC,CAAC,CAAC,qBAAqB,KAAK,CAAC,UAAU,2BAA2B,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE;;;;;wBAKzE,KAAK,CAAC,cAAc;;yBAEnB,KAAK,CAAC,UAAU;;uBAElB,WAAW;mBACf,QAAQ;;;;GAIxB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ChartIR } from '../ir/ir-nodes.js';
|
|
2
|
+
import type { ThemeConfig } from '../themes/theme-types.js';
|
|
3
|
+
import type { VegaLiteSpec } from './chart-registry.js';
|
|
4
|
+
/**
|
|
5
|
+
* Treemap MVP: emitted as a slice treemap using Vega-Lite transforms.
|
|
6
|
+
* It preserves area proportionality via normalized cumulative ranges.
|
|
7
|
+
*/
|
|
8
|
+
export declare function emitTreemapChart(chart: ChartIR, theme: ThemeConfig): VegaLiteSpec;
|
|
9
|
+
//# sourceMappingURL=treemap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treemap.d.ts","sourceRoot":"","sources":["../../src/charts/treemap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,CAwDjF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { buildCommonConfig, buildTitle } from './shared.js';
|
|
2
|
+
/**
|
|
3
|
+
* Treemap MVP: emitted as a slice treemap using Vega-Lite transforms.
|
|
4
|
+
* It preserves area proportionality via normalized cumulative ranges.
|
|
5
|
+
*/
|
|
6
|
+
export function emitTreemapChart(chart, theme) {
|
|
7
|
+
const { x, y, colorField } = chart.config;
|
|
8
|
+
const groupField = x || 'category';
|
|
9
|
+
const valueField = y || 'value';
|
|
10
|
+
const colorBy = colorField || groupField;
|
|
11
|
+
const tooltip = [
|
|
12
|
+
{ field: groupField, type: 'nominal', title: groupField },
|
|
13
|
+
{ field: valueField, type: 'quantitative', title: valueField },
|
|
14
|
+
];
|
|
15
|
+
if (colorBy !== groupField) {
|
|
16
|
+
tooltip.push({ field: colorBy, type: 'nominal', title: colorBy });
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
$schema: 'https://vega.github.io/schema/vega-lite/v5.json',
|
|
20
|
+
title: buildTitle(chart, theme),
|
|
21
|
+
width: chart.config.width ?? 'container',
|
|
22
|
+
height: chart.config.height ?? 260,
|
|
23
|
+
mark: {
|
|
24
|
+
type: 'rect',
|
|
25
|
+
stroke: theme.background,
|
|
26
|
+
strokeWidth: 1,
|
|
27
|
+
},
|
|
28
|
+
transform: [
|
|
29
|
+
{
|
|
30
|
+
window: [{ op: 'sum', field: valueField, as: '__cum' }],
|
|
31
|
+
sort: [{ field: valueField, order: 'descending' }],
|
|
32
|
+
},
|
|
33
|
+
{ calculate: `datum.__cum - datum["${valueField}"]`, as: '__start' },
|
|
34
|
+
{ joinaggregate: [{ op: 'sum', field: valueField, as: '__total' }] },
|
|
35
|
+
{ calculate: 'datum.__start / datum.__total', as: '__x0' },
|
|
36
|
+
{ calculate: 'datum.__cum / datum.__total', as: '__x1' },
|
|
37
|
+
],
|
|
38
|
+
encoding: {
|
|
39
|
+
x: {
|
|
40
|
+
field: '__x0',
|
|
41
|
+
type: 'quantitative',
|
|
42
|
+
axis: null,
|
|
43
|
+
},
|
|
44
|
+
x2: {
|
|
45
|
+
field: '__x1',
|
|
46
|
+
},
|
|
47
|
+
y: { value: 0 },
|
|
48
|
+
y2: { value: 1 },
|
|
49
|
+
color: {
|
|
50
|
+
field: colorBy,
|
|
51
|
+
type: 'nominal',
|
|
52
|
+
legend: chart.config.showLegend === false ? null : undefined,
|
|
53
|
+
},
|
|
54
|
+
tooltip,
|
|
55
|
+
},
|
|
56
|
+
data: { values: [] },
|
|
57
|
+
config: buildCommonConfig(chart, theme),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=treemap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treemap.js","sourceRoot":"","sources":["../../src/charts/treemap.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,KAAkB;IACjE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IAC1C,MAAM,UAAU,GAAG,CAAC,IAAI,UAAU,CAAC;IACnC,MAAM,UAAU,GAAG,CAAC,IAAI,OAAO,CAAC;IAChC,MAAM,OAAO,GAAG,UAAU,IAAI,UAAU,CAAC;IAEzC,MAAM,OAAO,GAAG;QACd,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;QACzD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE;KAC/D,CAAC;IAEF,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,iDAAiD;QAC1D,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAC/B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,WAAW;QACxC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG;QAClC,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,KAAK,CAAC,UAAU;YACxB,WAAW,EAAE,CAAC;SACf;QACD,SAAS,EAAE;YACT;gBACE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;gBACvD,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;aACnD;YACD,EAAE,SAAS,EAAE,wBAAwB,UAAU,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE;YACpE,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;YACpE,EAAE,SAAS,EAAE,+BAA+B,EAAE,EAAE,EAAE,MAAM,EAAE;YAC1D,EAAE,SAAS,EAAE,6BAA6B,EAAE,EAAE,EAAE,MAAM,EAAE;SACzD;QACD,QAAQ,EAAE;YACR,CAAC,EAAE;gBACD,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,IAAI;aACX;YACD,EAAE,EAAE;gBACF,KAAK,EAAE,MAAM;aACd;YACD,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACf,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAChB,KAAK,EAAE;gBACL,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;aAC7D;YACD,OAAO;SACR;QACD,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACpB,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ChartIR } from '../ir/ir-nodes.js';
|
|
2
|
+
import type { ThemeConfig } from '../themes/theme-types.js';
|
|
3
|
+
import type { VegaLiteSpec } from './chart-registry.js';
|
|
4
|
+
export declare function emitWaterfallChart(chart: ChartIR, theme: ThemeConfig): VegaLiteSpec;
|
|
5
|
+
//# sourceMappingURL=waterfall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waterfall.d.ts","sourceRoot":"","sources":["../../src/charts/waterfall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,GAAG,YAAY,CAkCnF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { buildCommonConfig, buildTitle } from './shared.js';
|
|
2
|
+
export function emitWaterfallChart(chart, theme) {
|
|
3
|
+
const { x, y, xAxisLabel, yAxisLabel } = chart.config;
|
|
4
|
+
return {
|
|
5
|
+
$schema: 'https://vega.github.io/schema/vega-lite/v5.json',
|
|
6
|
+
title: buildTitle(chart, theme),
|
|
7
|
+
width: chart.config.width ?? 'container',
|
|
8
|
+
height: chart.config.height ?? 300,
|
|
9
|
+
transform: [
|
|
10
|
+
{ window: [{ op: 'sum', field: y, as: '_dql_sum' }] },
|
|
11
|
+
{ calculate: 'datum._dql_sum - datum.' + y, as: '_dql_prev_sum' },
|
|
12
|
+
],
|
|
13
|
+
mark: { type: 'bar' },
|
|
14
|
+
encoding: {
|
|
15
|
+
x: {
|
|
16
|
+
field: x,
|
|
17
|
+
type: 'nominal',
|
|
18
|
+
sort: null,
|
|
19
|
+
axis: { title: xAxisLabel ?? x, labelColor: theme.axisColor, titleColor: theme.axisColor },
|
|
20
|
+
},
|
|
21
|
+
y: {
|
|
22
|
+
field: '_dql_prev_sum',
|
|
23
|
+
type: 'quantitative',
|
|
24
|
+
axis: { title: yAxisLabel ?? y, labelColor: theme.axisColor, titleColor: theme.axisColor },
|
|
25
|
+
},
|
|
26
|
+
y2: { field: '_dql_sum' },
|
|
27
|
+
color: {
|
|
28
|
+
condition: { test: `datum.${y} >= 0`, value: theme.colors[0] },
|
|
29
|
+
value: theme.colors[4] ?? '#E45756',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
data: { values: [] },
|
|
33
|
+
config: buildCommonConfig(chart, theme),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=waterfall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waterfall.js","sourceRoot":"","sources":["../../src/charts/waterfall.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,UAAU,kBAAkB,CAAC,KAAc,EAAE,KAAkB;IACnE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IAEtD,OAAO;QACL,OAAO,EAAE,iDAAiD;QAC1D,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAC/B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,WAAW;QACxC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG;QAClC,SAAS,EAAE;YACT,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;YACrD,EAAE,SAAS,EAAE,yBAAyB,GAAG,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE;SAClE;QACD,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACrB,QAAQ,EAAE;YACR,CAAC,EAAE;gBACD,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE;aAC3F;YACD,CAAC,EAAE;gBACD,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE;aAC3F;YACD,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;YACzB,KAAK,EAAE;gBACL,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC9D,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS;aACpC;SACF;QACD,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACpB,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ChartSpec } from './vega-lite-emitter.js';
|
|
2
|
+
export interface CompilationOutput {
|
|
3
|
+
html: string;
|
|
4
|
+
chartSpecs: ChartSpec[];
|
|
5
|
+
runtimeJS: string;
|
|
6
|
+
metadata: {
|
|
7
|
+
title: string;
|
|
8
|
+
schedule?: {
|
|
9
|
+
cron: string;
|
|
10
|
+
};
|
|
11
|
+
notifications: Array<{
|
|
12
|
+
type: string;
|
|
13
|
+
recipients: string[];
|
|
14
|
+
}>;
|
|
15
|
+
alerts: Array<{
|
|
16
|
+
conditionSQL: string;
|
|
17
|
+
threshold?: number;
|
|
18
|
+
operator?: '>' | '<' | '>=' | '<=' | '==' | '!=';
|
|
19
|
+
message?: string;
|
|
20
|
+
}>;
|
|
21
|
+
queries: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
sql: string;
|
|
24
|
+
}>;
|
|
25
|
+
layoutDiagnostics?: Array<{
|
|
26
|
+
level: 'warning' | 'error';
|
|
27
|
+
message: string;
|
|
28
|
+
row?: number;
|
|
29
|
+
chartId?: string;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export declare function writeBundle(output: CompilationOutput, outDir: string): void;
|
|
34
|
+
//# sourceMappingURL=bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/codegen/bundle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5B,aAAa,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;QAC7D,MAAM,EAAE,KAAK,CAAC;YACZ,YAAY,EAAE,MAAM,CAAC;YACrB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;YACjD,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC5C,iBAAiB,CAAC,EAAE,KAAK,CAAC;YACxB,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;YAC3B,OAAO,EAAE,MAAM,CAAC;YAChB,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC,CAAC;KACJ,CAAC;CACH;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA4B3E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
export function writeBundle(output, outDir) {
|
|
4
|
+
if (!existsSync(outDir)) {
|
|
5
|
+
mkdirSync(outDir, { recursive: true });
|
|
6
|
+
}
|
|
7
|
+
// Write main HTML
|
|
8
|
+
writeFileSync(join(outDir, 'index.html'), output.html, 'utf-8');
|
|
9
|
+
// Write specs as JSON for debugging/inspection
|
|
10
|
+
const specsDir = join(outDir, 'specs');
|
|
11
|
+
if (!existsSync(specsDir)) {
|
|
12
|
+
mkdirSync(specsDir, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
for (const spec of output.chartSpecs) {
|
|
15
|
+
writeFileSync(join(specsDir, `${spec.chartId}.json`), JSON.stringify(spec.spec, null, 2), 'utf-8');
|
|
16
|
+
}
|
|
17
|
+
// Write metadata
|
|
18
|
+
writeFileSync(join(outDir, 'dql-metadata.json'), JSON.stringify(output.metadata, null, 2), 'utf-8');
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/codegen/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA4BjC,MAAM,UAAU,WAAW,CAAC,MAAyB,EAAE,MAAc;IACnE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,kBAAkB;IAClB,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEhE,+CAA+C;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACrC,aAAa,CACX,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,OAAO,CAAC,EACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAClC,OAAO,CACR,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,aAAa,CACX,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACxC,OAAO,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DashboardIR, WorkbookIR } from '../ir/ir-nodes.js';
|
|
2
|
+
import type { ThemeConfig } from '../themes/theme-types.js';
|
|
3
|
+
import type { ChartSpec } from './vega-lite-emitter.js';
|
|
4
|
+
export interface HTMLEmitOptions {
|
|
5
|
+
vegaAssets?: 'cdn' | 'local';
|
|
6
|
+
vegaBasePath?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function emitDashboardHTML(dashboard: DashboardIR, chartSpecs: ChartSpec[], theme: ThemeConfig, runtimeJS: string, options?: HTMLEmitOptions): string;
|
|
9
|
+
export declare function emitWorkbookHTML(workbook: WorkbookIR, theme: ThemeConfig, runtimeJS: string, options?: HTMLEmitOptions): string;
|
|
10
|
+
//# sourceMappingURL=html-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-emitter.d.ts","sourceRoot":"","sources":["../../src/codegen/html-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA+B,UAAU,EAAmB,MAAM,mBAAmB,CAAC;AAC/G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAIxD,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,SAAS,EAAE,EACvB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAAoB,GAC5B,MAAM,CA8oBR;AA4DD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,eAAoB,GAC5B,MAAM,CAwWR"}
|