@malloydata/render 0.0.24-dev230224184907 → 0.0.24-dev230228224434
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/dist/data_styles.d.ts +27 -27
- package/dist/drill.d.ts +1 -1
- package/dist/drill.js +12 -12
- package/dist/html/bar_chart.d.ts +4 -4
- package/dist/html/bar_chart.js +5 -5
- package/dist/html/boolean.d.ts +2 -2
- package/dist/html/bytes.d.ts +2 -2
- package/dist/html/bytes.js +1 -1
- package/dist/html/cartesian_chart.d.ts +4 -4
- package/dist/html/cartesian_chart.js +30 -30
- package/dist/html/chart.d.ts +5 -5
- package/dist/html/chart.js +10 -10
- package/dist/html/container.d.ts +3 -3
- package/dist/html/currency.d.ts +2 -2
- package/dist/html/currency.js +4 -4
- package/dist/html/dashboard.d.ts +3 -3
- package/dist/html/dashboard.js +32 -31
- package/dist/html/date.d.ts +2 -2
- package/dist/html/date.js +2 -2
- package/dist/html/html_view.d.ts +3 -3
- package/dist/html/html_view.js +40 -40
- package/dist/html/image.d.ts +2 -2
- package/dist/html/image.js +2 -2
- package/dist/html/index.d.ts +1 -1
- package/dist/html/json.d.ts +2 -2
- package/dist/html/json.js +2 -2
- package/dist/html/line_chart.d.ts +4 -4
- package/dist/html/line_chart.js +6 -6
- package/dist/html/link.d.ts +2 -2
- package/dist/html/link.js +4 -4
- package/dist/html/list.d.ts +3 -3
- package/dist/html/list.js +7 -7
- package/dist/html/list_detail.d.ts +2 -2
- package/dist/html/number.d.ts +2 -2
- package/dist/html/percent.d.ts +2 -2
- package/dist/html/percent.js +1 -1
- package/dist/html/point_map.d.ts +4 -4
- package/dist/html/point_map.js +69 -69
- package/dist/html/scatter_chart.d.ts +4 -4
- package/dist/html/scatter_chart.js +6 -6
- package/dist/html/segment_map.d.ts +4 -4
- package/dist/html/segment_map.js +61 -61
- package/dist/html/shape_map.d.ts +4 -4
- package/dist/html/shape_map.js +73 -73
- package/dist/html/state_codes.js +108 -108
- package/dist/html/table.d.ts +3 -3
- package/dist/html/table.js +16 -16
- package/dist/html/text.d.ts +2 -2
- package/dist/html/text.js +1 -1
- package/dist/html/unsupported.d.ts +2 -2
- package/dist/html/unsupported.js +4 -4
- package/dist/html/utils.d.ts +4 -4
- package/dist/html/utils.js +51 -51
- package/dist/html/vega_spec.d.ts +6 -6
- package/dist/html/vega_spec.js +287 -287
- package/dist/index.d.ts +2 -2
- package/dist/renderer.d.ts +3 -3
- package/package.json +2 -2
package/dist/data_styles.d.ts
CHANGED
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import * as lite from
|
|
1
|
+
import * as lite from 'vega-lite';
|
|
2
2
|
export declare type DataStyles = {
|
|
3
3
|
[fieldName: string]: RenderDef;
|
|
4
4
|
};
|
|
5
|
-
export declare type ChartSize =
|
|
5
|
+
export declare type ChartSize = 'small' | 'medium' | 'large';
|
|
6
6
|
export declare type RenderDef = ({
|
|
7
7
|
renderer?: undefined;
|
|
8
8
|
} & DataRenderOptions) | ({
|
|
9
|
-
renderer:
|
|
9
|
+
renderer: 'table';
|
|
10
10
|
} & TableRenderOptions) | ({
|
|
11
|
-
renderer:
|
|
11
|
+
renderer: 'dashboard';
|
|
12
12
|
} & DashboardRenderOptions) | ({
|
|
13
|
-
renderer:
|
|
13
|
+
renderer: 'text';
|
|
14
14
|
} & TextRenderOptions) | ({
|
|
15
|
-
renderer:
|
|
15
|
+
renderer: 'currency';
|
|
16
16
|
} & CurrencyRenderOptions) | ({
|
|
17
|
-
renderer:
|
|
17
|
+
renderer: 'image';
|
|
18
18
|
} & ImageRenderOptions) | ({
|
|
19
|
-
renderer:
|
|
19
|
+
renderer: 'time';
|
|
20
20
|
} & TimeRenderOptions) | ({
|
|
21
|
-
renderer:
|
|
21
|
+
renderer: 'json';
|
|
22
22
|
} & JSONRenderOptions) | ({
|
|
23
|
-
renderer:
|
|
23
|
+
renderer: 'single_value';
|
|
24
24
|
} & SingleValueRenderOptions) | ({
|
|
25
|
-
renderer:
|
|
25
|
+
renderer: 'list';
|
|
26
26
|
} & ListRenderOptions) | ({
|
|
27
|
-
renderer:
|
|
27
|
+
renderer: 'list_detail';
|
|
28
28
|
} & ListDetailRenderOptions) | ({
|
|
29
|
-
renderer:
|
|
29
|
+
renderer: 'cartesian_chart';
|
|
30
30
|
} & CartesianChartRenderOptions) | ({
|
|
31
|
-
renderer:
|
|
31
|
+
renderer: 'bar_chart';
|
|
32
32
|
} & BarChartRenderOptions) | ({
|
|
33
|
-
renderer:
|
|
33
|
+
renderer: 'scatter_chart';
|
|
34
34
|
} & ScatterChartRenderOptions) | ({
|
|
35
|
-
renderer:
|
|
35
|
+
renderer: 'line_chart';
|
|
36
36
|
} & LineChartRenderOptions) | ({
|
|
37
|
-
renderer:
|
|
37
|
+
renderer: 'point_map';
|
|
38
38
|
} & PointMapRenderOptions) | ({
|
|
39
|
-
renderer:
|
|
39
|
+
renderer: 'segment_map';
|
|
40
40
|
} & SegmentMapRenderOptions) | ({
|
|
41
|
-
renderer:
|
|
41
|
+
renderer: 'shape_map';
|
|
42
42
|
} & ShapeMapRenderOptions) | ({
|
|
43
|
-
renderer:
|
|
43
|
+
renderer: 'number';
|
|
44
44
|
} & NumberRenderOptions) | ({
|
|
45
|
-
renderer:
|
|
45
|
+
renderer: 'percent';
|
|
46
46
|
} & PercentRenderOptions) | ({
|
|
47
|
-
renderer:
|
|
47
|
+
renderer: 'boolean';
|
|
48
48
|
} & BooleanRenderOptions) | ({
|
|
49
|
-
renderer:
|
|
49
|
+
renderer: 'spark_line';
|
|
50
50
|
} & SparkLineRenderOptions) | ({
|
|
51
|
-
renderer:
|
|
51
|
+
renderer: 'bytes';
|
|
52
52
|
} & BytesRenderOptions) | ({
|
|
53
|
-
renderer:
|
|
53
|
+
renderer: 'link';
|
|
54
54
|
} & LinkRenderOptions) | ({
|
|
55
|
-
renderer:
|
|
55
|
+
renderer: 'vega';
|
|
56
56
|
} & VegaRenderOptions);
|
|
57
57
|
export interface DataRenderOptions {
|
|
58
58
|
data?: {
|
|
@@ -82,7 +82,7 @@ export interface BytesRenderOptions extends TextRenderOptions {
|
|
|
82
82
|
}
|
|
83
83
|
export interface CurrencyRenderOptions extends TextRenderOptions {
|
|
84
84
|
currency?: {
|
|
85
|
-
unit?:
|
|
85
|
+
unit?: 'dollars' | 'pounds';
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
88
|
export interface TimeRenderOptions extends TextRenderOptions {
|
package/dist/drill.d.ts
CHANGED
package/dist/drill.js
CHANGED
|
@@ -32,34 +32,34 @@ function timestampToDateFilter(key, value, timeframe) {
|
|
|
32
32
|
const adjustedTimeframe = timeframe === malloy_1.TimestampTimeframe.Minute
|
|
33
33
|
? malloy_1.TimestampTimeframe.Second
|
|
34
34
|
: timeframe || malloy_1.TimestampTimeframe.Second;
|
|
35
|
-
const filterValue =
|
|
36
|
-
return { key,
|
|
35
|
+
const filterValue = '@' + (0, utils_1.timeToString)(value, adjustedTimeframe);
|
|
36
|
+
return { key, value: filterValue };
|
|
37
37
|
}
|
|
38
38
|
function getTableFilters(table) {
|
|
39
39
|
const filters = [];
|
|
40
40
|
for (const f of table.field.filters || []) {
|
|
41
|
-
if (f.expressionType ===
|
|
42
|
-
filters.push({
|
|
41
|
+
if (f.expressionType === 'scalar') {
|
|
42
|
+
filters.push({ key: f.code, value: undefined });
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
return filters;
|
|
46
46
|
}
|
|
47
47
|
function getRowFilters(row) {
|
|
48
48
|
const filters = [];
|
|
49
|
-
const dimensions = row.field.intrinsicFields.filter(
|
|
49
|
+
const dimensions = row.field.intrinsicFields.filter(field => field.isAtomicField() && field.sourceWasDimension());
|
|
50
50
|
for (const dim of dimensions) {
|
|
51
51
|
const cell = row.cell(dim);
|
|
52
52
|
// if we have an expression, use it instead of the name of the field.
|
|
53
53
|
const key = dim.isAtomicField() || dim.isQueryField() ? dim.expression : undefined;
|
|
54
54
|
if (key && !cell.isArray()) {
|
|
55
55
|
if (cell.isNull()) {
|
|
56
|
-
filters.push({ key,
|
|
56
|
+
filters.push({ key, value: 'null' });
|
|
57
57
|
}
|
|
58
58
|
else if (cell.isString()) {
|
|
59
|
-
filters.push({ key,
|
|
59
|
+
filters.push({ key, value: filterQuote(cell.value) });
|
|
60
60
|
}
|
|
61
61
|
else if (cell.isNumber() || cell.isBoolean()) {
|
|
62
|
-
filters.push({ key,
|
|
62
|
+
filters.push({ key, value: cell.value.toString() });
|
|
63
63
|
}
|
|
64
64
|
else if (cell.isTimestamp() || cell.isDate()) {
|
|
65
65
|
filters.push(timestampToDateFilter(key, cell.value, cell.field.timeframe));
|
|
@@ -97,17 +97,17 @@ function getDrillFilters(data) {
|
|
|
97
97
|
// TODO HACK: some filters get duplicated by the language, and this
|
|
98
98
|
// is a workaround until that is fixed
|
|
99
99
|
const dedupedFilters = formattedFilters.filter((filter, index) => formattedFilters.find((otherFilter, otherIndex) => otherFilter === filter && index < otherIndex) === undefined);
|
|
100
|
-
return {
|
|
100
|
+
return { formattedFilters: dedupedFilters, source };
|
|
101
101
|
}
|
|
102
102
|
exports.getDrillFilters = getDrillFilters;
|
|
103
103
|
function getDrillQuery(data) {
|
|
104
104
|
const { formattedFilters, source } = getDrillFilters(data);
|
|
105
105
|
let ret = `query: ${(source === null || source === void 0 ? void 0 : source.name) || '"unable to compute source"'} `;
|
|
106
106
|
if (formattedFilters.length) {
|
|
107
|
-
ret += `{ \n where: \n ${formattedFilters.join(
|
|
107
|
+
ret += `{ \n where: \n ${formattedFilters.join(',\n ')}\n \n}\n`;
|
|
108
108
|
}
|
|
109
|
-
const drillQuery = ret +
|
|
110
|
-
return { drillQuery,
|
|
109
|
+
const drillQuery = ret + '-> ';
|
|
110
|
+
return { drillQuery, drillFilters: formattedFilters };
|
|
111
111
|
}
|
|
112
112
|
exports.getDrillQuery = getDrillQuery;
|
|
113
113
|
//# sourceMappingURL=drill.js.map
|
package/dist/html/bar_chart.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DataColumn, Field } from
|
|
2
|
-
import { HTMLCartesianChartRenderer } from
|
|
1
|
+
import { DataColumn, Field } from '@malloydata/malloy';
|
|
2
|
+
import { HTMLCartesianChartRenderer } from './cartesian_chart';
|
|
3
3
|
export declare class HTMLBarChartRenderer extends HTMLCartesianChartRenderer {
|
|
4
|
-
getMark():
|
|
5
|
-
getDataType(field: Field):
|
|
4
|
+
getMark(): 'bar';
|
|
5
|
+
getDataType(field: Field): 'temporal' | 'ordinal' | 'quantitative' | 'nominal';
|
|
6
6
|
getDataValue(data: DataColumn): Date | string | number | null;
|
|
7
7
|
}
|
package/dist/html/bar_chart.js
CHANGED
|
@@ -26,18 +26,18 @@ exports.HTMLBarChartRenderer = void 0;
|
|
|
26
26
|
const cartesian_chart_1 = require("./cartesian_chart");
|
|
27
27
|
class HTMLBarChartRenderer extends cartesian_chart_1.HTMLCartesianChartRenderer {
|
|
28
28
|
getMark() {
|
|
29
|
-
return
|
|
29
|
+
return 'bar';
|
|
30
30
|
}
|
|
31
31
|
getDataType(field) {
|
|
32
32
|
if (field.isAtomicField()) {
|
|
33
33
|
if (field.isDate() || field.isTimestamp() || field.isString()) {
|
|
34
|
-
return
|
|
34
|
+
return 'nominal';
|
|
35
35
|
}
|
|
36
36
|
else if (field.isNumber()) {
|
|
37
|
-
return
|
|
37
|
+
return 'quantitative';
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
throw new Error(
|
|
40
|
+
throw new Error('Invalid field type for bar chart.');
|
|
41
41
|
}
|
|
42
42
|
getDataValue(data) {
|
|
43
43
|
if (data.isNull()) {
|
|
@@ -50,7 +50,7 @@ class HTMLBarChartRenderer extends cartesian_chart_1.HTMLCartesianChartRenderer
|
|
|
50
50
|
return data.value;
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
|
-
throw new Error(
|
|
53
|
+
throw new Error('Invalid field type for bar chart.');
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
}
|
package/dist/html/boolean.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DataColumn } from
|
|
2
|
-
import { HTMLTextRenderer } from
|
|
1
|
+
import { DataColumn } from '@malloydata/malloy';
|
|
2
|
+
import { HTMLTextRenderer } from './text';
|
|
3
3
|
export declare class HTMLBooleanRenderer extends HTMLTextRenderer {
|
|
4
4
|
getText(data: DataColumn): string | null;
|
|
5
5
|
}
|
package/dist/html/bytes.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DataColumn } from
|
|
2
|
-
import { HTMLTextRenderer } from
|
|
1
|
+
import { DataColumn } from '@malloydata/malloy';
|
|
2
|
+
import { HTMLTextRenderer } from './text';
|
|
3
3
|
export declare class HTMLBytesRenderer extends HTMLTextRenderer {
|
|
4
4
|
getText(data: DataColumn): string | null;
|
|
5
5
|
}
|
package/dist/html/bytes.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DataArray } from
|
|
2
|
-
import * as lite from
|
|
3
|
-
import { HTMLChartRenderer } from
|
|
1
|
+
import { DataArray } from '@malloydata/malloy';
|
|
2
|
+
import * as lite from 'vega-lite';
|
|
3
|
+
import { HTMLChartRenderer } from './chart';
|
|
4
4
|
export declare abstract class HTMLCartesianChartRenderer extends HTMLChartRenderer {
|
|
5
|
-
abstract getMark():
|
|
5
|
+
abstract getMark(): 'bar' | 'line' | 'point';
|
|
6
6
|
getVegaLiteSpec(data: DataArray): lite.TopLevelSpec;
|
|
7
7
|
}
|
|
@@ -42,55 +42,55 @@ class HTMLCartesianChartRenderer extends chart_1.HTMLChartRenderer {
|
|
|
42
42
|
const mark = this.getMark();
|
|
43
43
|
const colorDef = colorField !== undefined
|
|
44
44
|
? {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
field: colorField.name,
|
|
46
|
+
type: colorType,
|
|
47
|
+
axis: { title: (0, utils_1.formatTitle)(this.options, colorField.name) },
|
|
48
|
+
scale: (0, utils_1.getColorScale)(colorType, mark === 'bar'),
|
|
49
49
|
}
|
|
50
|
-
: {
|
|
50
|
+
: { value: '#4285F4' };
|
|
51
51
|
const sizeDef = sizeField
|
|
52
52
|
? {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
field: sizeField.name,
|
|
54
|
+
type: sizeType,
|
|
55
|
+
axis: { title: (0, utils_1.formatTitle)(this.options, sizeField.name) },
|
|
56
56
|
}
|
|
57
57
|
: undefined;
|
|
58
58
|
const shapeDef = shapeField
|
|
59
59
|
? {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
field: shapeField.name,
|
|
61
|
+
type: shapeType,
|
|
62
|
+
axis: { title: (0, utils_1.formatTitle)(this.options, shapeField.name) },
|
|
63
63
|
}
|
|
64
64
|
: undefined;
|
|
65
|
-
const xSort = xType ===
|
|
66
|
-
const ySort = yType ===
|
|
65
|
+
const xSort = xType === 'nominal' ? null : undefined;
|
|
66
|
+
const ySort = yType === 'nominal' ? null : undefined;
|
|
67
67
|
const xDef = {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
field: xField.name,
|
|
69
|
+
type: xType,
|
|
70
|
+
sort: xSort,
|
|
71
|
+
axis: { title: (0, utils_1.formatTitle)(this.options, xField.name) },
|
|
72
72
|
};
|
|
73
73
|
const yDef = {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
field: yField.name,
|
|
75
|
+
type: yType,
|
|
76
|
+
sort: ySort,
|
|
77
|
+
axis: { title: (0, utils_1.formatTitle)(this.options, yField.name) },
|
|
78
78
|
};
|
|
79
79
|
return {
|
|
80
80
|
...vega_spec_1.DEFAULT_SPEC,
|
|
81
81
|
...this.getSize(),
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
data: {
|
|
83
|
+
values: this.mapData(data),
|
|
84
84
|
},
|
|
85
85
|
mark,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
encoding: {
|
|
87
|
+
x: xDef,
|
|
88
|
+
y: yDef,
|
|
89
|
+
size: sizeDef,
|
|
90
|
+
color: colorDef,
|
|
91
|
+
shape: shapeDef,
|
|
92
92
|
},
|
|
93
|
-
|
|
93
|
+
background: 'transparent',
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
96
|
}
|
package/dist/html/chart.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as lite from
|
|
2
|
-
import { DataArray, DataColumn, Field } from
|
|
3
|
-
import { Renderer, RendererOptions } from
|
|
4
|
-
import { ChartRenderOptions, StyleDefaults } from
|
|
1
|
+
import * as lite from 'vega-lite';
|
|
2
|
+
import { DataArray, DataColumn, Field } from '@malloydata/malloy';
|
|
3
|
+
import { Renderer, RendererOptions } from '../renderer';
|
|
4
|
+
import { ChartRenderOptions, StyleDefaults } from '../data_styles';
|
|
5
5
|
declare type MappedRow = {
|
|
6
6
|
[p: string]: string | number | Date | undefined | null;
|
|
7
7
|
};
|
|
@@ -10,7 +10,7 @@ export declare abstract class HTMLChartRenderer implements Renderer {
|
|
|
10
10
|
protected styleDefaults: StyleDefaults;
|
|
11
11
|
protected options: RendererOptions;
|
|
12
12
|
size: string;
|
|
13
|
-
abstract getDataType(field: Field):
|
|
13
|
+
abstract getDataType(field: Field): 'temporal' | 'ordinal' | 'quantitative' | 'nominal';
|
|
14
14
|
abstract getDataValue(value: DataColumn): Date | string | number | null | undefined;
|
|
15
15
|
mapData(data: DataArray): MappedRow[];
|
|
16
16
|
getSize(): {
|
package/dist/html/chart.js
CHANGED
|
@@ -53,7 +53,7 @@ class HTMLChartRenderer {
|
|
|
53
53
|
this.document = document;
|
|
54
54
|
this.styleDefaults = styleDefaults;
|
|
55
55
|
this.options = options;
|
|
56
|
-
this.size = chartOptions.size || this.styleDefaults.size ||
|
|
56
|
+
this.size = chartOptions.size || this.styleDefaults.size || 'medium';
|
|
57
57
|
}
|
|
58
58
|
mapData(data) {
|
|
59
59
|
const mappedRows = [];
|
|
@@ -67,20 +67,20 @@ class HTMLChartRenderer {
|
|
|
67
67
|
return mappedRows;
|
|
68
68
|
}
|
|
69
69
|
getSize() {
|
|
70
|
-
if (this.size ===
|
|
71
|
-
return {
|
|
70
|
+
if (this.size === 'large') {
|
|
71
|
+
return { height: 350, width: 500 };
|
|
72
72
|
}
|
|
73
73
|
else {
|
|
74
|
-
return {
|
|
74
|
+
return { height: 175, width: 250 };
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
async render(table) {
|
|
78
78
|
if (!table.isArray()) {
|
|
79
|
-
throw new Error(
|
|
79
|
+
throw new Error('Invalid type for chart renderer');
|
|
80
80
|
}
|
|
81
81
|
const spec = this.getVegaLiteSpec(table);
|
|
82
82
|
const vegaspec = lite.compile(spec, {
|
|
83
|
-
|
|
83
|
+
logger: {
|
|
84
84
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
85
85
|
// @ts-ignore
|
|
86
86
|
level(newLevel) {
|
|
@@ -100,14 +100,14 @@ class HTMLChartRenderer {
|
|
|
100
100
|
},
|
|
101
101
|
debug() {
|
|
102
102
|
return this;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
105
|
}).spec;
|
|
106
106
|
const view = new vega.View(vega.parse(vegaspec), {
|
|
107
|
-
|
|
107
|
+
renderer: 'none',
|
|
108
108
|
});
|
|
109
109
|
view.logger().level(-1);
|
|
110
|
-
const element = this.document.createElement(
|
|
110
|
+
const element = this.document.createElement('div');
|
|
111
111
|
element.innerHTML = await view.toSVG();
|
|
112
112
|
return element;
|
|
113
113
|
}
|
package/dist/html/container.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Explore } from
|
|
2
|
-
import { StyleDefaults } from
|
|
3
|
-
import { ChildRenderers, RendererOptions, RenderTree } from
|
|
1
|
+
import { Explore } from '@malloydata/malloy';
|
|
2
|
+
import { StyleDefaults } from '../data_styles';
|
|
3
|
+
import { ChildRenderers, RendererOptions, RenderTree } from '../renderer';
|
|
4
4
|
export declare abstract class ContainerRenderer extends RenderTree {
|
|
5
5
|
childRenderers: ChildRenderers;
|
|
6
6
|
protected abstract childrenStyleDefaults: StyleDefaults;
|
package/dist/html/currency.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DataColumn } from
|
|
2
|
-
import { HTMLTextRenderer } from
|
|
1
|
+
import { DataColumn } from '@malloydata/malloy';
|
|
2
|
+
import { HTMLTextRenderer } from './text';
|
|
3
3
|
export declare class HTMLCurrencyRenderer extends HTMLTextRenderer {
|
|
4
4
|
getText(data: DataColumn): string | null;
|
|
5
5
|
}
|
package/dist/html/currency.js
CHANGED
|
@@ -30,10 +30,10 @@ class HTMLCurrencyRenderer extends text_1.HTMLTextRenderer {
|
|
|
30
30
|
return null;
|
|
31
31
|
}
|
|
32
32
|
// TODO get this from renderer options
|
|
33
|
-
const unitText =
|
|
34
|
-
const numText = data.number.value.toLocaleString(
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
const unitText = '$';
|
|
34
|
+
const numText = data.number.value.toLocaleString('en-US', {
|
|
35
|
+
minimumFractionDigits: 2,
|
|
36
|
+
maximumFractionDigits: 2,
|
|
37
37
|
});
|
|
38
38
|
return `${unitText}${numText}`;
|
|
39
39
|
}
|
package/dist/html/dashboard.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { DataArrayOrRecord } from
|
|
2
|
-
import { StyleDefaults } from
|
|
3
|
-
import { ContainerRenderer } from
|
|
1
|
+
import { DataArrayOrRecord } from '@malloydata/malloy';
|
|
2
|
+
import { StyleDefaults } from '../data_styles';
|
|
3
|
+
import { ContainerRenderer } from './container';
|
|
4
4
|
export declare class HTMLDashboardRenderer extends ContainerRenderer {
|
|
5
5
|
protected childrenStyleDefaults: StyleDefaults;
|
|
6
6
|
render(table: DataArrayOrRecord): Promise<HTMLElement>;
|
package/dist/html/dashboard.js
CHANGED
|
@@ -31,33 +31,33 @@ class HTMLDashboardRenderer extends container_1.ContainerRenderer {
|
|
|
31
31
|
constructor() {
|
|
32
32
|
super(...arguments);
|
|
33
33
|
this.childrenStyleDefaults = {
|
|
34
|
-
|
|
34
|
+
size: 'medium',
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
async render(table) {
|
|
38
38
|
if (!table.isArrayOrRecord()) {
|
|
39
|
-
return (0, utils_1.createErrorElement)(this.document,
|
|
39
|
+
return (0, utils_1.createErrorElement)(this.document, 'Invalid data for dashboard renderer.');
|
|
40
40
|
}
|
|
41
41
|
const fields = table.field.intrinsicFields;
|
|
42
|
-
const dimensions = fields.filter(
|
|
43
|
-
const measures = fields.filter(
|
|
44
|
-
const body = this.document.createElement(
|
|
42
|
+
const dimensions = fields.filter(field => field.isAtomicField() && field.sourceWasDimension());
|
|
43
|
+
const measures = fields.filter(field => !field.isAtomicField() || field.sourceWasMeasureLike());
|
|
44
|
+
const body = this.document.createElement('div');
|
|
45
45
|
for (const row of table) {
|
|
46
|
-
const dimensionsContainer = this.document.createElement(
|
|
47
|
-
dimensionsContainer.classList.add(
|
|
48
|
-
dimensionsContainer.style.display =
|
|
49
|
-
dimensionsContainer.style.flexWrap =
|
|
50
|
-
const rowElement = this.document.createElement(
|
|
51
|
-
rowElement.style.position =
|
|
46
|
+
const dimensionsContainer = this.document.createElement('div');
|
|
47
|
+
dimensionsContainer.classList.add('dimensions');
|
|
48
|
+
dimensionsContainer.style.display = 'flex';
|
|
49
|
+
dimensionsContainer.style.flexWrap = 'wrap';
|
|
50
|
+
const rowElement = this.document.createElement('div');
|
|
51
|
+
rowElement.style.position = 'relative';
|
|
52
52
|
for (const field of dimensions) {
|
|
53
53
|
const renderer = this.childRenderers[field.name];
|
|
54
54
|
const rendered = await renderer.render(row.cell(field));
|
|
55
|
-
const renderedDimension = this.document.createElement(
|
|
55
|
+
const renderedDimension = this.document.createElement('div');
|
|
56
56
|
renderedDimension.style.cssText = DIMENSION_BOX;
|
|
57
|
-
const dimensionTitle = this.document.createElement(
|
|
57
|
+
const dimensionTitle = this.document.createElement('div');
|
|
58
58
|
dimensionTitle.style.cssText = DIMENSION_TITLE;
|
|
59
59
|
dimensionTitle.appendChild(this.document.createTextNode((0, utils_1.formatTitle)(this.options, field.name, this.options.dataStyles[field.name])));
|
|
60
|
-
const dimensionInner = this.document.createElement(
|
|
60
|
+
const dimensionInner = this.document.createElement('div');
|
|
61
61
|
dimensionInner.style.cssText = VERTICAL_CENTER;
|
|
62
62
|
dimensionInner.appendChild(rendered);
|
|
63
63
|
renderedDimension.appendChild(dimensionTitle);
|
|
@@ -65,15 +65,15 @@ class HTMLDashboardRenderer extends container_1.ContainerRenderer {
|
|
|
65
65
|
dimensionsContainer.appendChild(renderedDimension);
|
|
66
66
|
}
|
|
67
67
|
if (dimensions.length > 0) {
|
|
68
|
-
const rowSeparatorOuter = this.document.createElement(
|
|
69
|
-
rowSeparatorOuter.classList.add(
|
|
68
|
+
const rowSeparatorOuter = this.document.createElement('div');
|
|
69
|
+
rowSeparatorOuter.classList.add('row-separator-outer');
|
|
70
70
|
rowSeparatorOuter.style.cssText = ROW_SEPARATOR_OUTER;
|
|
71
|
-
const rowSeparator = this.document.createElement(
|
|
71
|
+
const rowSeparator = this.document.createElement('div');
|
|
72
72
|
rowSeparator.style.cssText = ROW_SEPARATOR;
|
|
73
73
|
rowSeparatorOuter.appendChild(rowSeparator);
|
|
74
74
|
dimensionsContainer.appendChild(rowSeparatorOuter);
|
|
75
75
|
}
|
|
76
|
-
const measuresContainer = this.document.createElement(
|
|
76
|
+
const measuresContainer = this.document.createElement('div');
|
|
77
77
|
measuresContainer.style.cssText = MEASURE_BOXES;
|
|
78
78
|
for (const field of measures) {
|
|
79
79
|
const childRenderer = this.childRenderers[field.name];
|
|
@@ -83,14 +83,14 @@ class HTMLDashboardRenderer extends container_1.ContainerRenderer {
|
|
|
83
83
|
measuresContainer.appendChild(rendered);
|
|
84
84
|
}
|
|
85
85
|
else if (childRenderer instanceof text_1.HTMLTextRenderer) {
|
|
86
|
-
const measureBox = this.document.createElement(
|
|
86
|
+
const measureBox = this.document.createElement('div');
|
|
87
87
|
measureBox.style.cssText = MEASURE_BOX;
|
|
88
|
-
const measureTitle = this.document.createElement(
|
|
88
|
+
const measureTitle = this.document.createElement('div');
|
|
89
89
|
measureTitle.style.cssText = TITLE;
|
|
90
90
|
measureTitle.appendChild(this.document.createTextNode((0, utils_1.formatTitle)(this.options, field.name, this.options.dataStyles[field.name])));
|
|
91
|
-
const measureInner = this.document.createElement(
|
|
91
|
+
const measureInner = this.document.createElement('div');
|
|
92
92
|
measureInner.style.cssText = VERTICAL_CENTER;
|
|
93
|
-
const innerInner = this.document.createElement(
|
|
93
|
+
const innerInner = this.document.createElement('div');
|
|
94
94
|
innerInner.style.cssText = SINGLE_VALUE;
|
|
95
95
|
innerInner.appendChild(rendered);
|
|
96
96
|
measureInner.appendChild(innerInner);
|
|
@@ -99,14 +99,14 @@ class HTMLDashboardRenderer extends container_1.ContainerRenderer {
|
|
|
99
99
|
measuresContainer.appendChild(measureBox);
|
|
100
100
|
}
|
|
101
101
|
else {
|
|
102
|
-
const measureBox = this.document.createElement(
|
|
102
|
+
const measureBox = this.document.createElement('div');
|
|
103
103
|
measureBox.style.cssText = MEASURE_BOX;
|
|
104
|
-
const measureTitle = this.document.createElement(
|
|
104
|
+
const measureTitle = this.document.createElement('div');
|
|
105
105
|
measureTitle.style.cssText = TITLE;
|
|
106
106
|
measureTitle.appendChild(this.document.createTextNode((0, utils_1.formatTitle)(this.options, field.name, this.options.dataStyles[field.name])));
|
|
107
|
-
const measureInner = this.document.createElement(
|
|
107
|
+
const measureInner = this.document.createElement('div');
|
|
108
108
|
measureInner.style.cssText = VERTICAL_CENTER;
|
|
109
|
-
const innerInner = this.document.createElement(
|
|
109
|
+
const innerInner = this.document.createElement('div');
|
|
110
110
|
innerInner.style.cssText = HORIZONTAL_CENTER;
|
|
111
111
|
innerInner.appendChild(rendered);
|
|
112
112
|
measureInner.appendChild(innerInner);
|
|
@@ -117,10 +117,11 @@ class HTMLDashboardRenderer extends container_1.ContainerRenderer {
|
|
|
117
117
|
}
|
|
118
118
|
rowElement.appendChild(dimensionsContainer);
|
|
119
119
|
if (dimensions.length > 0 && this.options.isDrillingEnabled) {
|
|
120
|
-
const drillElement = this.document.createElement(
|
|
120
|
+
const drillElement = this.document.createElement('span');
|
|
121
121
|
const drillIcon = (0, utils_1.createDrillIcon)(this.document);
|
|
122
122
|
drillElement.appendChild(drillIcon);
|
|
123
|
-
drillElement.style.cssText =
|
|
123
|
+
drillElement.style.cssText =
|
|
124
|
+
'padding: 8px; vertical-align: top; width: 25px; cursor: pointer; position: absolute; top: 5px; right: 5px;';
|
|
124
125
|
drillElement.onclick = () => {
|
|
125
126
|
if (this.options.onDrill) {
|
|
126
127
|
const { drillQuery, drillFilters } = (0, drill_1.getDrillQuery)(row);
|
|
@@ -129,11 +130,11 @@ class HTMLDashboardRenderer extends container_1.ContainerRenderer {
|
|
|
129
130
|
};
|
|
130
131
|
rowElement.appendChild(drillElement);
|
|
131
132
|
}
|
|
132
|
-
const dashboardOuter = this.document.createElement(
|
|
133
|
-
dashboardOuter.classList.add(
|
|
133
|
+
const dashboardOuter = this.document.createElement('div');
|
|
134
|
+
dashboardOuter.classList.add('dashboard-outer');
|
|
134
135
|
dashboardOuter.style.cssText = DASHBOARD_OUTER;
|
|
135
136
|
if (dimensions.length > 0) {
|
|
136
|
-
const nestIndicator = this.document.createElement(
|
|
137
|
+
const nestIndicator = this.document.createElement('div');
|
|
137
138
|
nestIndicator.style.cssText = NEST_INDICATOR;
|
|
138
139
|
dashboardOuter.appendChild(nestIndicator);
|
|
139
140
|
}
|
package/dist/html/date.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DataColumn } from
|
|
2
|
-
import { Renderer } from
|
|
1
|
+
import { DataColumn } from '@malloydata/malloy';
|
|
2
|
+
import { Renderer } from '../renderer';
|
|
3
3
|
export declare class HTMLDateRenderer implements Renderer {
|
|
4
4
|
private readonly document;
|
|
5
5
|
constructor(document: Document);
|
package/dist/html/date.js
CHANGED
|
@@ -34,12 +34,12 @@ class HTMLDateRenderer {
|
|
|
34
34
|
return (0, utils_1.createNullElement)(this.document);
|
|
35
35
|
}
|
|
36
36
|
if (!data.isDate() && !data.isTimestamp()) {
|
|
37
|
-
return (0, utils_1.createErrorElement)(this.document,
|
|
37
|
+
return (0, utils_1.createErrorElement)(this.document, 'Invalid field for date renderer');
|
|
38
38
|
}
|
|
39
39
|
const timeframe = data.field.timeframe ||
|
|
40
40
|
(data.isTimestamp() ? malloy_1.TimestampTimeframe.Second : malloy_1.DateTimeframe.Day);
|
|
41
41
|
const timestring = (0, utils_1.timeToString)(data.value, timeframe);
|
|
42
|
-
const element = this.document.createElement(
|
|
42
|
+
const element = this.document.createElement('span');
|
|
43
43
|
element.appendChild(this.document.createTextNode(timestring));
|
|
44
44
|
return element;
|
|
45
45
|
}
|