@malloydata/render 0.0.24-dev230224011252 → 0.0.24-dev230224184907

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.
@@ -142,7 +142,7 @@ export interface CartesianChartRenderOptions extends ChartRenderOptions {
142
142
  spark_line?: boolean;
143
143
  };
144
144
  }
145
- export interface BarChartRenderOptions {
145
+ export interface BarChartRenderOptions extends DataRenderOptions {
146
146
  size?: ChartSize;
147
147
  }
148
148
  export interface ScatterChartRenderOptions extends CartesianChartRenderOptions {
@@ -44,7 +44,7 @@ class HTMLCartesianChartRenderer extends chart_1.HTMLChartRenderer {
44
44
  ? {
45
45
  "field": colorField.name,
46
46
  "type": colorType,
47
- "axis": { "title": colorField.name },
47
+ "axis": { "title": (0, utils_1.formatTitle)(this.options, colorField.name) },
48
48
  "scale": (0, utils_1.getColorScale)(colorType, mark === "bar")
49
49
  }
50
50
  : { "value": "#4285F4" };
@@ -52,14 +52,14 @@ class HTMLCartesianChartRenderer extends chart_1.HTMLChartRenderer {
52
52
  ? {
53
53
  "field": sizeField.name,
54
54
  "type": sizeType,
55
- "axis": { "title": sizeField.name }
55
+ "axis": { "title": (0, utils_1.formatTitle)(this.options, sizeField.name) }
56
56
  }
57
57
  : undefined;
58
58
  const shapeDef = shapeField
59
59
  ? {
60
60
  "field": shapeField.name,
61
61
  "type": shapeType,
62
- "axis": { "title": shapeField.name }
62
+ "axis": { "title": (0, utils_1.formatTitle)(this.options, shapeField.name) }
63
63
  }
64
64
  : undefined;
65
65
  const xSort = xType === "nominal" ? null : undefined;
@@ -68,13 +68,13 @@ class HTMLCartesianChartRenderer extends chart_1.HTMLChartRenderer {
68
68
  "field": xField.name,
69
69
  "type": xType,
70
70
  "sort": xSort,
71
- "axis": { "title": xField.name }
71
+ "axis": { "title": (0, utils_1.formatTitle)(this.options, xField.name) }
72
72
  };
73
73
  const yDef = {
74
74
  "field": yField.name,
75
75
  "type": yType,
76
76
  "sort": ySort,
77
- "axis": { "title": yField.name }
77
+ "axis": { "title": (0, utils_1.formatTitle)(this.options, yField.name) }
78
78
  };
79
79
  return {
80
80
  ...vega_spec_1.DEFAULT_SPEC,
@@ -1,6 +1,6 @@
1
1
  import * as lite from "vega-lite";
2
2
  import { DataArray, DataColumn, Field } from "@malloydata/malloy";
3
- import { Renderer } from "../renderer";
3
+ import { Renderer, RendererOptions } from "../renderer";
4
4
  import { ChartRenderOptions, StyleDefaults } from "../data_styles";
5
5
  declare type MappedRow = {
6
6
  [p: string]: string | number | Date | undefined | null;
@@ -8,6 +8,7 @@ declare type MappedRow = {
8
8
  export declare abstract class HTMLChartRenderer implements Renderer {
9
9
  protected readonly document: Document;
10
10
  protected styleDefaults: StyleDefaults;
11
+ protected options: RendererOptions;
11
12
  size: string;
12
13
  abstract getDataType(field: Field): "temporal" | "ordinal" | "quantitative" | "nominal";
13
14
  abstract getDataValue(value: DataColumn): Date | string | number | null | undefined;
@@ -16,7 +17,7 @@ export declare abstract class HTMLChartRenderer implements Renderer {
16
17
  height: number;
17
18
  width: number;
18
19
  };
19
- constructor(document: Document, styleDefaults: StyleDefaults, options?: ChartRenderOptions);
20
+ constructor(document: Document, styleDefaults: StyleDefaults, options: RendererOptions, chartOptions?: ChartRenderOptions);
20
21
  abstract getVegaLiteSpec(data: DataArray): lite.TopLevelSpec;
21
22
  render(table: DataColumn): Promise<HTMLElement>;
22
23
  }
@@ -49,10 +49,11 @@ exports.HTMLChartRenderer = void 0;
49
49
  const lite = __importStar(require("vega-lite"));
50
50
  const vega = __importStar(require("vega"));
51
51
  class HTMLChartRenderer {
52
- constructor(document, styleDefaults, options = {}) {
52
+ constructor(document, styleDefaults, options, chartOptions = {}) {
53
53
  this.document = document;
54
54
  this.styleDefaults = styleDefaults;
55
- this.size = options.size || this.styleDefaults.size || "medium";
55
+ this.options = options;
56
+ this.size = chartOptions.size || this.styleDefaults.size || "medium";
56
57
  }
57
58
  mapData(data) {
58
59
  const mappedRows = [];
@@ -1,17 +1,9 @@
1
1
  import { Explore } from "@malloydata/malloy";
2
- import { DataStyles, StyleDefaults } from "../data_styles";
3
- import { DrillFunction } from "../drill";
4
- import { ChildRenderers, RenderTree } from "../renderer";
2
+ import { StyleDefaults } from "../data_styles";
3
+ import { ChildRenderers, RendererOptions, RenderTree } from "../renderer";
5
4
  export declare abstract class ContainerRenderer extends RenderTree {
6
5
  childRenderers: ChildRenderers;
7
6
  protected abstract childrenStyleDefaults: StyleDefaults;
8
7
  get defaultStylesForChildren(): StyleDefaults;
9
- static make<Type extends ContainerRenderer>(c: new (document: Document, options: {
10
- isDrillingEnabled?: boolean;
11
- onDrill?: DrillFunction;
12
- }) => Type, document: Document, exploreField: Explore, options: {
13
- dataStyles: DataStyles;
14
- isDrillingEnabled?: boolean;
15
- onDrill?: DrillFunction;
16
- }): Type;
8
+ static make<Type extends ContainerRenderer>(c: new (document: Document, options: RendererOptions) => Type, document: Document, exploreField: Explore, options: RendererOptions): Type;
17
9
  }
@@ -36,10 +36,7 @@ class ContainerRenderer extends renderer_1.RenderTree {
36
36
  // we need to be fully constructed before we construct
37
37
  // our children.
38
38
  static make(c, document, exploreField, options) {
39
- const n = new c(document, {
40
- "isDrillingEnabled": options.isDrillingEnabled,
41
- "onDrill": options.onDrill
42
- });
39
+ const n = new c(document, options);
43
40
  return n;
44
41
  }
45
42
  }
@@ -56,7 +56,7 @@ class HTMLDashboardRenderer extends container_1.ContainerRenderer {
56
56
  renderedDimension.style.cssText = DIMENSION_BOX;
57
57
  const dimensionTitle = this.document.createElement("div");
58
58
  dimensionTitle.style.cssText = DIMENSION_TITLE;
59
- dimensionTitle.appendChild(this.document.createTextNode(field.name));
59
+ dimensionTitle.appendChild(this.document.createTextNode((0, utils_1.formatTitle)(this.options, field.name, this.options.dataStyles[field.name])));
60
60
  const dimensionInner = this.document.createElement("div");
61
61
  dimensionInner.style.cssText = VERTICAL_CENTER;
62
62
  dimensionInner.appendChild(rendered);
@@ -87,7 +87,7 @@ class HTMLDashboardRenderer extends container_1.ContainerRenderer {
87
87
  measureBox.style.cssText = MEASURE_BOX;
88
88
  const measureTitle = this.document.createElement("div");
89
89
  measureTitle.style.cssText = TITLE;
90
- measureTitle.appendChild(this.document.createTextNode(field.name));
90
+ measureTitle.appendChild(this.document.createTextNode((0, utils_1.formatTitle)(this.options, field.name, this.options.dataStyles[field.name])));
91
91
  const measureInner = this.document.createElement("div");
92
92
  measureInner.style.cssText = VERTICAL_CENTER;
93
93
  const innerInner = this.document.createElement("div");
@@ -103,7 +103,7 @@ class HTMLDashboardRenderer extends container_1.ContainerRenderer {
103
103
  measureBox.style.cssText = MEASURE_BOX;
104
104
  const measureTitle = this.document.createElement("div");
105
105
  measureTitle.style.cssText = TITLE;
106
- measureTitle.appendChild(this.document.createTextNode(field.name));
106
+ measureTitle.appendChild(this.document.createTextNode((0, utils_1.formatTitle)(this.options, field.name, this.options.dataStyles[field.name])));
107
107
  const measureInner = this.document.createElement("div");
108
108
  measureInner.style.cssText = VERTICAL_CENTER;
109
109
  const innerInner = this.document.createElement("div");
@@ -1,23 +1,14 @@
1
1
  import { DataArray, Explore, Field } from "@malloydata/malloy";
2
- import { DataStyles, StyleDefaults } from "../data_styles";
3
- import { Renderer } from "../renderer";
4
- import { DrillFunction } from "../drill";
2
+ import { StyleDefaults } from "../data_styles";
3
+ import { RendererOptions, Renderer } from "../renderer";
5
4
  export declare class HTMLView {
6
- private readonly document;
5
+ private document;
7
6
  constructor(document: Document);
8
- render(table: DataArray, options: {
9
- dataStyles: DataStyles;
10
- isDrillingEnabled?: boolean;
11
- onDrill?: DrillFunction;
12
- }): Promise<HTMLElement>;
7
+ render(table: DataArray, options: RendererOptions): Promise<HTMLElement>;
13
8
  }
14
9
  export declare class JSONView {
15
- private readonly document;
10
+ private document;
16
11
  constructor(document: Document);
17
12
  render(table: DataArray): Promise<HTMLElement>;
18
13
  }
19
- export declare function makeRenderer(field: Explore | Field, document: Document, options: {
20
- dataStyles: DataStyles;
21
- isDrillingEnabled?: boolean;
22
- onDrill?: DrillFunction;
23
- }, styleDefaults: StyleDefaults): Renderer;
14
+ export declare function makeRenderer(field: Explore | Field, document: Document, options: RendererOptions, styleDefaults: StyleDefaults): Renderer;
@@ -96,7 +96,23 @@ class JSONView {
96
96
  }
97
97
  }
98
98
  exports.JSONView = JSONView;
99
+ const suffixMap = {
100
+ "_shape_map": "shape_map",
101
+ "_point_map": "point_map",
102
+ "_bar_chart": "bar_chart",
103
+ "_image": "image",
104
+ "_json": "json",
105
+ "_segment_map": "segment_map",
106
+ "_dashboard": "dashboard",
107
+ "_line_chart": "line_chart",
108
+ "_scatter_chart": "scatter_chart",
109
+ "_url": "link",
110
+ "_list": "list",
111
+ "_list_detail": "list_detail"
112
+ };
99
113
  function getRendererOptions(field, dataStyles) {
114
+ var _a, _b, _c;
115
+ var _d;
100
116
  let renderer = dataStyles[field.name];
101
117
  if (!renderer) {
102
118
  for (const sourceClass of field.sourceClasses) {
@@ -105,6 +121,26 @@ function getRendererOptions(field, dataStyles) {
105
121
  }
106
122
  }
107
123
  }
124
+ for (const suffix in suffixMap) {
125
+ const { name } = field;
126
+ if (name.endsWith(suffix)) {
127
+ const label = name.slice(0, name.length - suffix.length);
128
+ if (renderer) {
129
+ (_a = renderer.renderer) !== null && _a !== void 0 ? _a : (renderer.renderer = suffixMap[suffix]);
130
+ (_b = renderer.data) !== null && _b !== void 0 ? _b : (renderer.data = {});
131
+ (_c = (_d = renderer.data).label) !== null && _c !== void 0 ? _c : (_d.label = label);
132
+ }
133
+ else {
134
+ renderer = {
135
+ "renderer": suffixMap[suffix],
136
+ "data": {
137
+ label
138
+ }
139
+ };
140
+ }
141
+ break;
142
+ }
143
+ }
108
144
  return renderer;
109
145
  }
110
146
  function isContainer(field) {
@@ -117,51 +153,44 @@ function isContainer(field) {
117
153
  }
118
154
  function makeRenderer(field, document, options, styleDefaults) {
119
155
  const renderDef = getRendererOptions(field, options.dataStyles) || {};
120
- if (renderDef.renderer === "shape_map" || field.name.endsWith("_shape_map")) {
121
- return new shape_map_1.HTMLShapeMapRenderer(document, styleDefaults, renderDef);
156
+ options.dataStyles[field.name] = renderDef;
157
+ if (renderDef.renderer === "shape_map") {
158
+ return new shape_map_1.HTMLShapeMapRenderer(document, styleDefaults, options, renderDef);
122
159
  }
123
- else if (renderDef.renderer === "point_map" ||
124
- field.name.endsWith("_point_map")) {
125
- return new point_map_1.HTMLPointMapRenderer(document, styleDefaults);
160
+ else if (renderDef.renderer === "point_map") {
161
+ return new point_map_1.HTMLPointMapRenderer(document, styleDefaults, options, renderDef);
126
162
  }
127
- else if (renderDef.renderer === "image" || field.name.endsWith("_image")) {
163
+ else if (renderDef.renderer === "image") {
128
164
  return new image_1.HTMLImageRenderer(document);
129
165
  }
130
- else if (renderDef.renderer === "segment_map" ||
131
- field.name.endsWith("_segment_map")) {
132
- return new segment_map_1.HTMLSegmentMapRenderer(document, styleDefaults, renderDef);
166
+ else if (renderDef.renderer === "segment_map") {
167
+ return new segment_map_1.HTMLSegmentMapRenderer(document, styleDefaults, options, renderDef);
133
168
  }
134
- else if (renderDef.renderer === "dashboard" ||
135
- field.name.endsWith("_dashboard")) {
169
+ else if (renderDef.renderer === "dashboard") {
136
170
  return makeContainerRenderer(dashboard_1.HTMLDashboardRenderer, document, isContainer(field), options);
137
171
  }
138
- else if (renderDef.renderer === "json" || field.name.endsWith("_json")) {
172
+ else if (renderDef.renderer === "json") {
139
173
  return new json_1.HTMLJSONRenderer(document);
140
174
  }
141
- else if (renderDef.renderer === "line_chart" ||
142
- field.name.endsWith("_line_chart")) {
143
- return new line_chart_1.HTMLLineChartRenderer(document, styleDefaults, renderDef);
175
+ else if (renderDef.renderer === "line_chart") {
176
+ return new line_chart_1.HTMLLineChartRenderer(document, styleDefaults, options, renderDef);
144
177
  }
145
- else if (renderDef.renderer === "scatter_chart" ||
146
- field.name.endsWith("_scatter_chart")) {
147
- return new scatter_chart_1.HTMLScatterChartRenderer(document, styleDefaults);
178
+ else if (renderDef.renderer === "scatter_chart") {
179
+ return new scatter_chart_1.HTMLScatterChartRenderer(document, styleDefaults, options, renderDef);
148
180
  }
149
181
  else if (renderDef.renderer === "bar_chart") {
150
- return new bar_chart_1.HTMLBarChartRenderer(document, styleDefaults, renderDef);
151
- }
152
- else if (field.name.endsWith("_bar_chart")) {
153
- return new bar_chart_1.HTMLBarChartRenderer(document, styleDefaults, {});
182
+ return new bar_chart_1.HTMLBarChartRenderer(document, styleDefaults, options, renderDef);
154
183
  }
155
184
  else if (renderDef.renderer === "vega") {
156
185
  const spec = renderDef.spec;
157
186
  if (spec) {
158
- return new vega_spec_1.HTMLVegaSpecRenderer(document, styleDefaults, spec);
187
+ return new vega_spec_1.HTMLVegaSpecRenderer(document, styleDefaults, options, spec);
159
188
  }
160
189
  else if (renderDef.spec_name) {
161
190
  const vegaRenderer = options.dataStyles[renderDef.spec_name];
162
191
  if (vegaRenderer !== undefined && vegaRenderer.renderer === "vega") {
163
192
  if (vegaRenderer.spec) {
164
- return new vega_spec_1.HTMLVegaSpecRenderer(document, styleDefaults, vegaRenderer.spec);
193
+ return new vega_spec_1.HTMLVegaSpecRenderer(document, styleDefaults, options, vegaRenderer.spec);
165
194
  }
166
195
  else {
167
196
  throw new Error(`No spec defined on ${renderDef.spec_name}`);
@@ -204,14 +233,13 @@ function makeRenderer(field, document, options, styleDefaults) {
204
233
  field.type === malloy_1.AtomicFieldType.Boolean)) {
205
234
  return new boolean_1.HTMLBooleanRenderer(document);
206
235
  }
207
- else if (renderDef.renderer === "link" || field.name.endsWith("_url")) {
236
+ else if (renderDef.renderer === "link") {
208
237
  return new link_1.HTMLLinkRenderer(document);
209
238
  }
210
- else if (renderDef.renderer === "list" || field.name.endsWith("_list")) {
239
+ else if (renderDef.renderer === "list") {
211
240
  return makeContainerRenderer(list_1.HTMLListRenderer, document, isContainer(field), options);
212
241
  }
213
- else if (renderDef.renderer === "list_detail" ||
214
- field.name.endsWith("_list_detail")) {
242
+ else if (renderDef.renderer === "list_detail") {
215
243
  return makeContainerRenderer(list_detail_1.HTMLListDetailRenderer, document, isContainer(field), options);
216
244
  }
217
245
  else if (renderDef.renderer === "table" ||
@@ -68,7 +68,7 @@ class HTMLPointMapRenderer extends chart_1.HTMLChartRenderer {
68
68
  ? {
69
69
  "field": colorField.name,
70
70
  "type": colorType,
71
- "axis": { "title": colorField.name },
71
+ "axis": { "title": (0, utils_1.formatTitle)(this.options, colorField.name) },
72
72
  "scale": (0, utils_1.getColorScale)(colorType, false)
73
73
  }
74
74
  : undefined;
@@ -76,14 +76,14 @@ class HTMLPointMapRenderer extends chart_1.HTMLChartRenderer {
76
76
  ? {
77
77
  "field": sizeField.name,
78
78
  "type": sizeType,
79
- "axis": { "title": sizeField.name }
79
+ "axis": { "title": (0, utils_1.formatTitle)(this.options, sizeField.name) }
80
80
  }
81
81
  : { "value": 5 };
82
82
  const shapeDef = shapeField
83
83
  ? {
84
84
  "field": shapeField.name,
85
85
  "type": shapeType,
86
- "axis": { "title": shapeField.name }
86
+ "axis": { "title": (0, utils_1.formatTitle)(this.options, shapeField.name) }
87
87
  }
88
88
  : { "value": "circle" };
89
89
  return {
@@ -63,7 +63,7 @@ class HTMLSegmentMapRenderer extends chart_1.HTMLChartRenderer {
63
63
  ? {
64
64
  "field": colorField.name,
65
65
  "type": colorType,
66
- "axis": { "title": colorField.name },
66
+ "axis": { "title": (0, utils_1.formatTitle)(this.options, colorField.name) },
67
67
  "scale": (0, utils_1.getColorScale)(colorType, false)
68
68
  }
69
69
  : undefined;
@@ -94,7 +94,7 @@ class HTMLShapeMapRenderer extends chart_1.HTMLChartRenderer {
94
94
  ? {
95
95
  "field": colorField.name,
96
96
  "type": colorType,
97
- "axis": { "title": colorField.name },
97
+ "axis": { "title": (0, utils_1.formatTitle)(this.options, colorField.name) },
98
98
  "scale": (0, utils_1.getColorScale)(colorType, false)
99
99
  }
100
100
  : undefined;
@@ -40,7 +40,7 @@ class HTMLTableRenderer extends container_1.ContainerRenderer {
40
40
  }
41
41
  const header = this.document.createElement("tr");
42
42
  table.field.intrinsicFields.forEach((field) => {
43
- const name = field.name;
43
+ const name = (0, utils_1.formatTitle)(this.options, field.name, this.options.dataStyles[field.name]);
44
44
  const childRenderer = this.childRenderers[name];
45
45
  const isNumeric = childRenderer instanceof number_1.HTMLNumberRenderer;
46
46
  const headerCell = this.document.createElement("th");
@@ -1,4 +1,6 @@
1
1
  import { DateTimeframe, TimestampTimeframe } from "@malloydata/malloy";
2
+ import { RenderDef } from "../data_styles";
3
+ import type { RendererOptions } from "../renderer";
2
4
  export declare function getColorScale(type: "temporal" | "ordinal" | "quantitative" | "nominal" | undefined, isRectMark: boolean, hasOverlappingText?: boolean): {
3
5
  range: string[];
4
6
  } | undefined;
@@ -7,3 +9,4 @@ export declare function yieldTask(): Promise<void>;
7
9
  export declare function createErrorElement(document: Document, error: string | Error): HTMLElement;
8
10
  export declare function createNullElement(document: Document): HTMLElement;
9
11
  export declare function createDrillIcon(document: Document): HTMLElement;
12
+ export declare function formatTitle(options: RendererOptions, name: string, renderDef?: RenderDef | undefined): string;
@@ -21,9 +21,13 @@
21
21
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
22
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
  */
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
24
27
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.createDrillIcon = exports.createNullElement = exports.createErrorElement = exports.yieldTask = exports.timeToString = exports.getColorScale = void 0;
28
+ exports.formatTitle = exports.createDrillIcon = exports.createNullElement = exports.createErrorElement = exports.yieldTask = exports.timeToString = exports.getColorScale = void 0;
26
29
  const malloy_1 = require("@malloydata/malloy");
30
+ const startCase_1 = __importDefault(require("lodash/startCase"));
27
31
  function getColorScale(type, isRectMark, hasOverlappingText = false) {
28
32
  if (type === undefined) {
29
33
  return undefined;
@@ -191,4 +195,10 @@ function createDrillIcon(document) {
191
195
  return drill;
192
196
  }
193
197
  exports.createDrillIcon = createDrillIcon;
198
+ function formatTitle(options, name, renderDef) {
199
+ var _a;
200
+ const label = ((_a = renderDef === null || renderDef === void 0 ? void 0 : renderDef.data) === null || _a === void 0 ? void 0 : _a.label) || name;
201
+ return options.titleCase ? (0, startCase_1.default)(label) : label;
202
+ }
203
+ exports.formatTitle = formatTitle;
194
204
  //# sourceMappingURL=utils.js.map
@@ -2,13 +2,14 @@ import * as lite from "vega-lite";
2
2
  import { DataColumn, Explore, Field } from "@malloydata/malloy";
3
3
  import { HTMLChartRenderer } from "./chart";
4
4
  import { StyleDefaults } from "../data_styles";
5
+ import { RendererOptions } from "../renderer";
5
6
  declare type DataContainer = Array<unknown> | Record<string, unknown>;
6
7
  export declare const DEFAULT_SPEC: Partial<lite.TopLevelSpec>;
7
8
  export declare const vegaSpecs: Record<string, lite.TopLevelSpec>;
8
9
  export declare function isDataContainer(a: unknown): a is DataContainer;
9
10
  export declare class HTMLVegaSpecRenderer extends HTMLChartRenderer {
10
11
  spec: lite.TopLevelSpec;
11
- constructor(document: Document, styleDefaults: StyleDefaults, spec: lite.TopLevelSpec);
12
+ constructor(document: Document, styleDefaults: StyleDefaults, options: RendererOptions, spec: lite.TopLevelSpec);
12
13
  getDataValue(data: DataColumn): Date | string | number | null;
13
14
  getDataType(field: Field): "ordinal" | "quantitative" | "nominal";
14
15
  translateField(explore: Explore, fieldString: string): string;
@@ -422,8 +422,8 @@ function isDataContainer(a) {
422
422
  }
423
423
  exports.isDataContainer = isDataContainer;
424
424
  class HTMLVegaSpecRenderer extends chart_1.HTMLChartRenderer {
425
- constructor(document, styleDefaults, spec) {
426
- super(document, styleDefaults);
425
+ constructor(document, styleDefaults, options, spec) {
426
+ super(document, styleDefaults, options);
427
427
  this.spec = spec;
428
428
  }
429
429
  getDataValue(data) {
@@ -1,4 +1,5 @@
1
1
  import { DataColumn } from "@malloydata/malloy";
2
+ import { DataStyles } from "./data_styles";
2
3
  import { DrillFunction } from "./drill";
3
4
  export declare type ChildRenderers = {
4
5
  [fieldName: string]: Renderer;
@@ -6,16 +7,16 @@ export declare type ChildRenderers = {
6
7
  export interface Renderer {
7
8
  render(value: DataColumn): Promise<HTMLElement>;
8
9
  }
10
+ export interface RendererOptions {
11
+ dataStyles: DataStyles;
12
+ isDrillingEnabled?: boolean;
13
+ onDrill?: DrillFunction;
14
+ titleCase?: boolean;
15
+ }
9
16
  export declare abstract class RenderTree implements Renderer {
10
17
  protected readonly document: Document;
11
- protected readonly options: {
12
- isDrillingEnabled?: boolean;
13
- onDrill?: DrillFunction;
14
- };
15
- constructor(document: Document, options: {
16
- isDrillingEnabled?: boolean;
17
- onDrill?: DrillFunction;
18
- });
18
+ protected readonly options: RendererOptions;
19
+ constructor(document: Document, options: RendererOptions);
19
20
  protected abstract get childRenderers(): ChildRenderers;
20
21
  abstract render(value: DataColumn): Promise<HTMLElement>;
21
22
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/render",
3
- "version": "0.0.24-dev230224011252",
3
+ "version": "0.0.24-dev230224184907",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,8 @@
18
18
  "prepublishOnly": "npm run build"
19
19
  },
20
20
  "dependencies": {
21
- "@malloydata/malloy": "^0.0.24-dev230224011252",
21
+ "@malloydata/malloy": "^0.0.24-dev230224184907",
22
+ "lodash": "^4.17.20",
22
23
  "us-atlas": "^3.0.0",
23
24
  "vega": "^5.21.0",
24
25
  "vega-lite": "^5.2.0"