ggaction 0.0.13 → 0.0.15
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/CHANGELOG.md +78 -0
- package/README.md +20 -11
- package/knowledge/action-cards.json +1 -1
- package/knowledge/intent-taxonomy.json +1 -1
- package/knowledge/mcp-resources.json +1 -1
- package/package.json +8 -3
- package/src/actions/basic.js +2 -2
- package/src/actions/boxPlots/components.js +14 -4
- package/src/actions/boxPlots/edit.js +31 -5
- package/src/actions/boxPlots/materialize.js +11 -3
- package/src/actions/boxPlots/options.js +48 -16
- package/src/actions/categoryOrder/index.js +15 -4
- package/src/actions/charts/area.js +5 -1
- package/src/actions/charts/bar.js +2 -1
- package/src/actions/charts/density.js +6 -2
- package/src/actions/charts/ecdf.js +4 -1
- package/src/actions/charts/endpoints.js +25 -3
- package/src/actions/charts/heatmap.js +2 -1
- package/src/actions/charts/histogram.js +4 -3
- package/src/actions/charts/horizon.js +3 -1
- package/src/actions/charts/interval-regression.js +5 -2
- package/src/actions/charts/line.js +3 -1
- package/src/actions/charts/parallel.js +8 -2
- package/src/actions/charts/pie.js +10 -2
- package/src/actions/charts/polar.js +15 -4
- package/src/actions/charts/radar.js +8 -2
- package/src/actions/charts/radial.js +10 -2
- package/src/actions/charts/rug-strip.js +6 -2
- package/src/actions/charts/scatter.js +3 -1
- package/src/actions/composition/actions.js +13 -4
- package/src/actions/coordinates/actions.js +1 -1
- package/src/actions/coordinates/edit.js +76 -0
- package/src/actions/data/bin.js +1 -1
- package/src/actions/data/bin2d.js +57 -185
- package/src/actions/data/complete.js +26 -0
- package/src/actions/data/computed.js +2 -2
- package/src/actions/data/create.js +2 -2
- package/src/actions/data/density.js +12 -20
- package/src/actions/data/derived.js +47 -17
- package/src/actions/data/edit.js +539 -0
- package/src/actions/data/filter.js +14 -2
- package/src/actions/data/impute.js +26 -0
- package/src/actions/data/index.js +14 -0
- package/src/actions/data/normalize.js +27 -0
- package/src/actions/data/regression.js +16 -21
- package/src/actions/data/revisionBindings.js +145 -0
- package/src/actions/data/shared.js +20 -4
- package/src/actions/data/summary.js +1 -1
- package/src/actions/data/timeUnit.js +4 -1
- package/src/actions/data/window.js +1 -1
- package/src/actions/encodings/channels.js +415 -0
- package/src/actions/encodings/color/index.js +2 -1
- package/src/actions/encodings/density.js +5 -2
- package/src/actions/encodings/histogram.js +3 -2
- package/src/actions/encodings/index.js +4 -0
- package/src/actions/encodings/offset.js +20 -13
- package/src/actions/encodings/position/apply.js +53 -7
- package/src/actions/encodings/position/index.js +10 -2
- package/src/actions/encodings/position/policies/bar.js +9 -0
- package/src/actions/encodings/position/resolve.js +24 -7
- package/src/actions/encodings/remove.js +9 -4
- package/src/actions/encodings/ruleAppearance.js +1 -23
- package/src/actions/encodings/seriesLayout.js +1 -0
- package/src/actions/encodings/shared.js +82 -14
- package/src/actions/encodings/stroke.js +226 -0
- package/src/actions/errorBands/create.js +23 -3
- package/src/actions/errorBands/edit.js +21 -6
- package/src/actions/errorBars/create.js +35 -7
- package/src/actions/errorBars/edit.js +19 -4
- package/src/actions/facets/actions.js +237 -57
- package/src/actions/facets/derive.js +91 -26
- package/src/actions/gradientPlots/components.js +10 -2
- package/src/actions/gradientPlots/edit.js +14 -4
- package/src/actions/gradientPlots/materialize.js +3 -1
- package/src/actions/gradientPlots/options.js +10 -2
- package/src/actions/guides/applicability.js +8 -2
- package/src/actions/guides/axes/labels.js +58 -12
- package/src/actions/guides/axes/lines.js +6 -2
- package/src/actions/guides/axes/parallel/resolve.js +6 -2
- package/src/actions/guides/axes/tickGroups.js +2 -1
- package/src/actions/guides/axes/ticks.js +6 -2
- package/src/actions/guides/axes/titles.js +11 -3
- package/src/actions/guides/grids/resolve.js +7 -2
- package/src/actions/guides/guides.js +19 -3
- package/src/actions/guides/legends/blocks.js +426 -0
- package/src/actions/guides/legends/categorical/actions.js +134 -48
- package/src/actions/guides/legends/categorical/components.js +17 -12
- package/src/actions/guides/legends/categorical/index.js +37 -33
- package/src/actions/guides/legends/categorical/layout.js +97 -15
- package/src/actions/guides/legends/categorical/options.js +2 -2
- package/src/actions/guides/legends/categorical/recipes.js +111 -20
- package/src/actions/guides/legends/categorical/resolve.js +12 -8
- package/src/actions/guides/legends/categorical/symbols.js +85 -30
- package/src/actions/guides/legends/continuous/common.js +30 -12
- package/src/actions/guides/legends/continuous/gradient.js +10 -7
- package/src/actions/guides/legends/continuous/index.js +2 -0
- package/src/actions/guides/legends/continuous/interval.js +8 -3
- package/src/actions/guides/legends/continuous/opacity.js +8 -5
- package/src/actions/guides/legends/continuous/stroke.js +525 -0
- package/src/actions/guides/legends/creation.js +14 -1
- package/src/actions/guides/legends/edit.js +158 -59
- package/src/actions/guides/legends/index.js +2 -0
- package/src/actions/guides/legends/lane.js +54 -19
- package/src/actions/guides/legends/lifecycle.js +19 -8
- package/src/actions/guides/legends/remove.js +13 -3
- package/src/actions/guides/legends/sampling.js +140 -0
- package/src/actions/guides/legends/size.js +93 -40
- package/src/actions/guides/legends/strokeWidth.js +34 -28
- package/src/actions/guides/legends/target.js +112 -1
- package/src/actions/guides/legends/transition.js +165 -16
- package/src/actions/guides/polar/axes/facade.js +4 -4
- package/src/actions/guides/polar/axes/labels.js +24 -5
- package/src/actions/guides/polar/axes/lines.js +10 -4
- package/src/actions/guides/polar/axes/shared.js +16 -0
- package/src/actions/guides/polar/axes/ticks.js +1 -1
- package/src/actions/guides/polar/axes/titles.js +1 -1
- package/src/actions/guides/polar/grids.js +1 -1
- package/src/actions/guides/polar/resolve.js +12 -8
- package/src/actions/index.js +14 -3
- package/src/actions/marks/arc/actions.js +77 -19
- package/src/actions/marks/area/actions.js +34 -9
- package/src/actions/marks/area/materialize.js +17 -1
- package/src/actions/marks/bar/create.js +11 -2
- package/src/actions/marks/bar/edit.js +20 -3
- package/src/actions/marks/bar/materialize.js +22 -2
- package/src/actions/marks/index.js +10 -1
- package/src/actions/marks/line/actions.js +37 -14
- package/src/actions/marks/line/materialize.js +29 -10
- package/src/actions/marks/point/create.js +8 -2
- package/src/actions/marks/point/edit.js +18 -6
- package/src/actions/marks/point/materialize.js +49 -15
- package/src/actions/marks/rect/actions.js +33 -12
- package/src/actions/marks/references.js +601 -30
- package/src/actions/marks/remove.js +71 -1
- package/src/actions/marks/rule/actions.js +47 -10
- package/src/actions/marks/shared.js +1 -1
- package/src/actions/marks/text/actions.js +74 -9
- package/src/actions/marks/text/index.js +4 -0
- package/src/actions/marks/text/layout.js +154 -6
- package/src/actions/marks/text/removal.js +173 -0
- package/src/actions/marks/text/selection.js +73 -0
- package/src/actions/marks/tick/actions.js +22 -5
- package/src/actions/primitives/editGraphics.js +26 -0
- package/src/actions/primitives/semantic.js +2 -1
- package/src/actions/primitives/semanticAction.js +83 -10
- package/src/actions/primitives/semanticValidation/guide.js +1 -1
- package/src/actions/primitives/semanticValidation/index.js +9 -1
- package/src/actions/primitives/semanticValidation/layer.js +5 -0
- package/src/actions/primitives/semanticValidation/scale.js +28 -7
- package/src/actions/regression/components.js +26 -11
- package/src/actions/regression/create.js +10 -2
- package/src/actions/regression/edit.js +21 -7
- package/src/actions/resources/index.js +7 -0
- package/src/actions/resources/remove.js +172 -0
- package/src/actions/scales/channels.js +212 -0
- package/src/actions/scales/consumers/common.js +1 -1
- package/src/actions/scales/consumers/families.js +3 -2
- package/src/actions/scales/consumers/index.js +19 -2
- package/src/actions/scales/consumers/seriesLayout.js +28 -14
- package/src/actions/scales/create.js +54 -22
- package/src/actions/scales/definitions.js +94 -40
- package/src/actions/scales/edit.js +66 -11
- package/src/actions/scales/editPolicy.js +81 -11
- package/src/actions/scales/index.js +6 -0
- package/src/actions/scales/materialize.js +4 -3
- package/src/actions/scales/offset.js +48 -0
- package/src/actions/scales/parallel.js +71 -0
- package/src/actions/scales/preview.js +111 -10
- package/src/actions/selection/actions.js +154 -30
- package/src/actions/selection/index.js +3 -0
- package/src/actions/theme/actions.js +68 -13
- package/src/actions/theme/composition.js +238 -0
- package/src/actions/theme/index.js +9 -2
- package/src/actions/theme/reconcile.js +315 -67
- package/src/actions/theme/state.js +160 -0
- package/src/actions/violinPlots/create.js +5 -2
- package/src/actions/violinPlots/edit.js +1 -0
- package/src/core/action.js +10 -0
- package/src/core/compositionState.js +6 -1
- package/src/core/programState.js +20 -0
- package/src/core/resourceReferences.js +332 -0
- package/src/core/vocabulary.js +16 -3
- package/src/grammar/bars/aggregate.js +4 -1
- package/src/grammar/bars/geometry.js +44 -0
- package/src/grammar/bin.js +54 -9
- package/src/grammar/complete.js +279 -0
- package/src/grammar/computed.js +265 -64
- package/src/grammar/coordinates.js +37 -0
- package/src/grammar/density.js +239 -37
- package/src/grammar/displayLabels.js +57 -0
- package/src/grammar/facets/dependencies.js +133 -1
- package/src/grammar/facets/guides.js +3 -0
- package/src/grammar/facets/index.js +7 -47
- package/src/grammar/facets/scales.js +15 -18
- package/src/grammar/impute.js +340 -0
- package/src/grammar/markLabelSelection.js +57 -0
- package/src/grammar/markLabels.js +18 -1
- package/src/grammar/normalize.js +366 -0
- package/src/grammar/pathSeries.js +26 -8
- package/src/grammar/pointShapes.js +13 -4
- package/src/grammar/polar.js +90 -8
- package/src/grammar/regression/index.js +1 -0
- package/src/grammar/regression/parameters.js +23 -0
- package/src/grammar/roundedRect.js +180 -0
- package/src/grammar/rules.js +1 -0
- package/src/grammar/scales/colorConsumers.js +20 -1
- package/src/grammar/scales/continuous.js +2 -2
- package/src/grammar/scales/definition.js +27 -4
- package/src/grammar/scales/index.js +1 -0
- package/src/grammar/scales/ordinal.js +12 -3
- package/src/grammar/scales/policies.js +2 -2
- package/src/grammar/scales/size.js +456 -0
- package/src/grammar/schemas/concreteGraphic.js +14 -2
- package/src/grammar/schemas/graphic.js +15 -0
- package/src/grammar/schemas/graphicBounds.js +179 -30
- package/src/grammar/schemas/semanticPath.js +7 -2
- package/src/grammar/statisticalReference.js +103 -0
- package/src/grammar/strokeStyle.js +77 -0
- package/src/grammar/summary.js +78 -16
- package/src/grammar/timeUnit.js +216 -5
- package/src/grammar/transformTopology.js +4 -0
- package/src/grammar/transforms.js +394 -28
- package/src/grammar/weightedStatistics.js +374 -0
- package/src/grammar/window.js +221 -16
- package/src/layout/aspect.js +80 -0
- package/src/layout/facets.js +59 -5
- package/src/layout/labels.js +343 -0
- package/src/materialization/bars/aggregate.js +25 -2
- package/src/materialization/bars/histogram.js +84 -24
- package/src/materialization/bars/ranged.js +19 -3
- package/src/materialization/bars/resolve.js +7 -4
- package/src/materialization/composition.js +3 -1
- package/src/materialization/coordinateBounds.js +204 -0
- package/src/materialization/dependencies.js +36 -0
- package/src/materialization/facetGuides/legacyCategorical.js +3 -0
- package/src/materialization/facetGuides/placement.js +8 -2
- package/src/materialization/facetGuides/preparation.js +12 -7
- package/src/materialization/facetHeaders.js +346 -0
- package/src/materialization/facets.js +15 -65
- package/src/materialization/guides/resources.js +26 -0
- package/src/materialization/legends.js +1 -1
- package/src/materialization/marks/index.js +11 -5
- package/src/materialization/marks/policies.js +2 -1
- package/src/materialization/rect.js +25 -12
- package/src/materialization/rectConfig.js +5 -1
- package/src/materialization/scales/map.js +5 -3
- package/src/materialization/scales/policies/binnedPosition.js +2 -2
- package/src/materialization/scales/policies/offset.js +50 -8
- package/src/materialization/scales/policies/series.js +4 -1
- package/src/materialization/scales/resolve.js +22 -6
- package/src/materialization/selection/items/arc.js +28 -4
- package/src/materialization/selection/items/bar.js +30 -3
- package/src/materialization/selection/items/common.js +19 -4
- package/src/materialization/selection/items/rect.js +28 -4
- package/src/materialization/selection/path.js +1 -1
- package/src/materialization/selection/point.js +3 -1
- package/src/materialization/text.js +265 -14
- package/src/renderers/canvas/circle.js +2 -3
- package/src/renderers/canvas/line.js +2 -3
- package/src/renderers/canvas/native.js +4 -4
- package/src/renderers/canvas/path.js +2 -3
- package/src/renderers/canvas/rect.js +2 -3
- package/src/renderers/canvas/stroke.js +11 -0
- package/src/renderers/svg.js +19 -0
- package/src/selectors/datasets.js +32 -1
- package/src/selectors/layers.js +4 -0
- package/src/theme/defaults.js +101 -0
- package/types/basic.d.ts +6 -0
- package/types/index.d.ts +85 -0
- package/types/program.d.ts +910 -117
package/src/renderers/svg.js
CHANGED
|
@@ -113,6 +113,21 @@ function requireStrokeDash(properties, graphicId) {
|
|
|
113
113
|
return strokeDash;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
function strokeDetailAttributes(properties, strokeWidth) {
|
|
117
|
+
if (typeof properties.stroke !== "string" || !(strokeWidth > 0)) return [];
|
|
118
|
+
return [
|
|
119
|
+
["stroke-linecap", Object.hasOwn(properties, "lineCap")
|
|
120
|
+
? properties.lineCap
|
|
121
|
+
: undefined],
|
|
122
|
+
["stroke-linejoin", Object.hasOwn(properties, "lineJoin")
|
|
123
|
+
? properties.lineJoin
|
|
124
|
+
: undefined],
|
|
125
|
+
["stroke-miterlimit", Object.hasOwn(properties, "miterLimit")
|
|
126
|
+
? formatNumber(properties.miterLimit)
|
|
127
|
+
: undefined]
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
|
+
|
|
116
131
|
function requireCanvasGeometry(id, canvas, { nested }) {
|
|
117
132
|
const properties = canvas.properties ?? {};
|
|
118
133
|
const width = requireFiniteProperty(properties, "width", id);
|
|
@@ -200,6 +215,7 @@ function serializeCircle(state, graphicId, properties) {
|
|
|
200
215
|
["stroke-width", strokeWidth === undefined
|
|
201
216
|
? undefined
|
|
202
217
|
: formatNumber(strokeWidth)],
|
|
218
|
+
...strokeDetailAttributes(properties, strokeWidth),
|
|
203
219
|
["opacity", formatNumber(requireOpacity(properties, graphicId))]
|
|
204
220
|
]);
|
|
205
221
|
}
|
|
@@ -240,6 +256,7 @@ function serializeRect(state, graphicId, properties) {
|
|
|
240
256
|
["fill", fill],
|
|
241
257
|
["stroke", properties.stroke],
|
|
242
258
|
["stroke-width", formatNumber(strokeWidth)],
|
|
259
|
+
...strokeDetailAttributes(properties, strokeWidth),
|
|
243
260
|
["opacity", formatNumber(requireOpacity(properties, graphicId))]
|
|
244
261
|
]);
|
|
245
262
|
}
|
|
@@ -268,6 +285,7 @@ function serializeLine(state, graphicId, properties) {
|
|
|
268
285
|
["fill", "none"],
|
|
269
286
|
["stroke", properties.stroke],
|
|
270
287
|
["stroke-width", formatNumber(strokeWidth)],
|
|
288
|
+
...strokeDetailAttributes(properties, strokeWidth),
|
|
271
289
|
["stroke-dasharray", strokeDash.length === 0
|
|
272
290
|
? undefined
|
|
273
291
|
: strokeDash.map(formatNumber).join(" ")],
|
|
@@ -332,6 +350,7 @@ function serializePath(state, graphicId, properties) {
|
|
|
332
350
|
["stroke-width", strokeWidth === undefined
|
|
333
351
|
? undefined
|
|
334
352
|
: formatNumber(strokeWidth)],
|
|
353
|
+
...strokeDetailAttributes(properties, strokeWidth),
|
|
335
354
|
["stroke-dasharray", strokeDash.length === 0
|
|
336
355
|
? undefined
|
|
337
356
|
: strokeDash.map(formatNumber).join(" ")],
|
|
@@ -2,6 +2,37 @@ export function findDataset(program, id) {
|
|
|
2
2
|
return program.semanticSpec.datasets.find(dataset => dataset.id === id);
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
+
function currentOwnerMatches(program, id) {
|
|
6
|
+
const families = program.materializationConfigs.data ?? {};
|
|
7
|
+
return Object.entries(families).flatMap(([family, owners]) =>
|
|
8
|
+
Object.entries(owners ?? {}).flatMap(([owner, config]) =>
|
|
9
|
+
owner === id && typeof config?.current === "string"
|
|
10
|
+
? [{ family, owner, current: config.current }]
|
|
11
|
+
: []
|
|
12
|
+
)
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function hasDatasetOwner(program, id) {
|
|
17
|
+
return currentOwnerMatches(program, id).length > 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function resolveDatasetReference(program, id, label = "Dataset") {
|
|
21
|
+
const matches = currentOwnerMatches(program, id);
|
|
22
|
+
if (matches.length > 1) {
|
|
23
|
+
throw new Error(`${label} logical owner "${id}" is ambiguous.`);
|
|
24
|
+
}
|
|
25
|
+
const resolved = matches.length === 1 ? matches[0].current : id;
|
|
26
|
+
const dataset = findDataset(program, resolved);
|
|
27
|
+
if (dataset === undefined) {
|
|
28
|
+
const kind = label.toLowerCase().includes("source")
|
|
29
|
+
? "source dataset"
|
|
30
|
+
: "dataset";
|
|
31
|
+
throw new Error(`Unknown ${kind} "${id}" does not exist.`);
|
|
32
|
+
}
|
|
33
|
+
return dataset;
|
|
34
|
+
}
|
|
35
|
+
|
|
5
36
|
export function hasDataset(program, id) {
|
|
6
37
|
return findDataset(program, id) !== undefined;
|
|
7
38
|
}
|
|
@@ -17,7 +48,7 @@ export function requireDataset(program, id, label = `Dataset "${id}"`) {
|
|
|
17
48
|
}
|
|
18
49
|
|
|
19
50
|
export function requireMaterializedDataset(program, id) {
|
|
20
|
-
const dataset =
|
|
51
|
+
const dataset = resolveDatasetReference(program, id, "Dataset");
|
|
21
52
|
if (dataset === undefined) throw new Error(`Unknown dataset "${id}".`);
|
|
22
53
|
if (!Array.isArray(dataset.values)) {
|
|
23
54
|
throw new Error(
|
package/src/selectors/layers.js
CHANGED
|
@@ -2,6 +2,10 @@ export function findLayer(program, id) {
|
|
|
2
2
|
return program.semanticSpec.layers.find(layer => layer.id === id);
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
+
export function findLayerMatching(program, predicate) {
|
|
6
|
+
return program.semanticSpec.layers.find(predicate);
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
export function hasLayer(program, id) {
|
|
6
10
|
return findLayer(program, id) !== undefined;
|
|
7
11
|
}
|
package/src/theme/defaults.js
CHANGED
|
@@ -23,6 +23,56 @@ export const DEFAULT_COLORS = Object.freeze({
|
|
|
23
23
|
|
|
24
24
|
export const THEME_NAMES = Object.freeze(["light", "dark"]);
|
|
25
25
|
|
|
26
|
+
export const THEME_TOKEN_KEYS = Object.freeze([
|
|
27
|
+
"background",
|
|
28
|
+
"mark",
|
|
29
|
+
"text",
|
|
30
|
+
"strongText",
|
|
31
|
+
"mutedText",
|
|
32
|
+
"axis",
|
|
33
|
+
"axisTitle",
|
|
34
|
+
"grid",
|
|
35
|
+
"border",
|
|
36
|
+
"sizeSymbol",
|
|
37
|
+
"regressionBand",
|
|
38
|
+
"boxLine",
|
|
39
|
+
"boxMedian",
|
|
40
|
+
"referenceLine",
|
|
41
|
+
"referenceBand",
|
|
42
|
+
"gradientCenter",
|
|
43
|
+
"highlight",
|
|
44
|
+
"fontFamily"
|
|
45
|
+
]);
|
|
46
|
+
|
|
47
|
+
const THEME_DEFINITION_KEYS = Object.freeze(["base", "tokens"]);
|
|
48
|
+
|
|
49
|
+
function isPlainObject(value) {
|
|
50
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
const prototype = Object.getPrototypeOf(value);
|
|
54
|
+
return prototype === Object.prototype || prototype === null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function own(value) {
|
|
58
|
+
return Object.freeze({ ...value });
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function validateKeys(value, allowed, label) {
|
|
62
|
+
const supported = new Set(allowed);
|
|
63
|
+
const unknown = Object.keys(value).find(key => !supported.has(key));
|
|
64
|
+
if (unknown !== undefined) {
|
|
65
|
+
throw new Error(`Unknown ${label} option "${unknown}".`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function validateNonEmptyString(value, label) {
|
|
70
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
71
|
+
throw new TypeError(`${label} must be a non-empty string.`);
|
|
72
|
+
}
|
|
73
|
+
return value;
|
|
74
|
+
}
|
|
75
|
+
|
|
26
76
|
export const THEME_TOKENS = Object.freeze({
|
|
27
77
|
light: Object.freeze({
|
|
28
78
|
background: "white",
|
|
@@ -54,3 +104,54 @@ export const THEME_TOKENS = Object.freeze({
|
|
|
54
104
|
export function themeTokens(name = "light") {
|
|
55
105
|
return THEME_TOKENS[name];
|
|
56
106
|
}
|
|
107
|
+
|
|
108
|
+
function validateThemeName(value, label) {
|
|
109
|
+
if (!THEME_NAMES.includes(value)) {
|
|
110
|
+
throw new Error(`Unsupported ${label} "${value}".`);
|
|
111
|
+
}
|
|
112
|
+
return value;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function normalizeThemeTokens(tokens) {
|
|
116
|
+
if (!isPlainObject(tokens)) {
|
|
117
|
+
throw new TypeError("applyTheme theme.tokens must be a plain object.");
|
|
118
|
+
}
|
|
119
|
+
validateKeys(tokens, THEME_TOKEN_KEYS, "applyTheme theme.tokens");
|
|
120
|
+
const normalized = {};
|
|
121
|
+
for (const [key, value] of Object.entries(tokens)) {
|
|
122
|
+
validateNonEmptyString(value, `applyTheme theme.tokens.${key}`);
|
|
123
|
+
normalized[key] = value;
|
|
124
|
+
}
|
|
125
|
+
return own(normalized);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function normalizeThemeDefinition(definition) {
|
|
129
|
+
if (typeof definition === "string") {
|
|
130
|
+
return own({
|
|
131
|
+
name: validateThemeName(definition, "theme"),
|
|
132
|
+
tokens: own({})
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
if (!isPlainObject(definition)) {
|
|
136
|
+
throw new TypeError(
|
|
137
|
+
"applyTheme theme must be a built-in name or a plain { base, tokens } object."
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
validateKeys(definition, THEME_DEFINITION_KEYS, "applyTheme theme");
|
|
141
|
+
if (!Object.hasOwn(definition, "base") ||
|
|
142
|
+
!Object.hasOwn(definition, "tokens")) {
|
|
143
|
+
throw new Error("applyTheme custom theme requires base and tokens.");
|
|
144
|
+
}
|
|
145
|
+
return own({
|
|
146
|
+
name: validateThemeName(definition.base, "theme base"),
|
|
147
|
+
tokens: normalizeThemeTokens(definition.tokens)
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export function resolveThemeTokens(definition = "light") {
|
|
152
|
+
const normalized = normalizeThemeDefinition(definition);
|
|
153
|
+
return own({
|
|
154
|
+
...THEME_TOKENS[normalized.name],
|
|
155
|
+
...normalized.tokens
|
|
156
|
+
});
|
|
157
|
+
}
|
package/types/basic.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export type {
|
|
|
6
6
|
AxisTickOptions,
|
|
7
7
|
AxisTicksAndLabelsOptions,
|
|
8
8
|
AxisTitleOptions,
|
|
9
|
+
DisplayLabelMap,
|
|
10
|
+
DisplayLabelOptions,
|
|
9
11
|
ApplyThemeOptions,
|
|
10
12
|
BarWidthOptions,
|
|
11
13
|
BasicSeriesLayoutOptions,
|
|
@@ -29,12 +31,16 @@ export type {
|
|
|
29
31
|
LegendOptions,
|
|
30
32
|
PositionEncodingOptions,
|
|
31
33
|
RectMarkOptions,
|
|
34
|
+
RectStyleDetails,
|
|
32
35
|
ScaleOptions,
|
|
33
36
|
SecondaryPositionEncodingOptions,
|
|
34
37
|
SemanticSpec,
|
|
35
38
|
StrokeDashEncodingOptions,
|
|
39
|
+
StrokeStyleDetails,
|
|
36
40
|
TemporalInputUnit,
|
|
41
|
+
ThemeDefinition,
|
|
37
42
|
ThemeName,
|
|
43
|
+
ThemeTokens,
|
|
38
44
|
TraceNode,
|
|
39
45
|
XAxisPosition,
|
|
40
46
|
XOffsetEncodingOptions,
|
package/types/index.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export type {
|
|
|
18
18
|
AxisTickStyleOptions,
|
|
19
19
|
AxisTitleOptions,
|
|
20
20
|
AxisValue,
|
|
21
|
+
DisplayLabelMap,
|
|
22
|
+
DisplayLabelOptions,
|
|
21
23
|
BarWidthOptions,
|
|
22
24
|
BoxPlotOptions,
|
|
23
25
|
BinnedHeatmapColorOptions,
|
|
@@ -30,6 +32,7 @@ export type {
|
|
|
30
32
|
BinDataOptions,
|
|
31
33
|
BinDataOutputFields,
|
|
32
34
|
BindMarkDataOptions,
|
|
35
|
+
RemoveResourceOptions,
|
|
33
36
|
CanvasOptions,
|
|
34
37
|
FitCanvasOptions,
|
|
35
38
|
FoldDataOptions,
|
|
@@ -41,20 +44,37 @@ export type {
|
|
|
41
44
|
ColorLayout,
|
|
42
45
|
SeriesLayoutOptions,
|
|
43
46
|
BasicSeriesLayoutOptions,
|
|
47
|
+
StrokeStyleDetails,
|
|
48
|
+
RectStyleDetails,
|
|
44
49
|
CreateAreaPlotOptions,
|
|
45
50
|
AreaPlotIndependentChannel,
|
|
46
51
|
AreaPlotMeasureChannel,
|
|
47
52
|
ColorEncodingOptions,
|
|
53
|
+
StrokeEncodingOptions,
|
|
54
|
+
EncodeChannelsOptions,
|
|
55
|
+
EncodingChannelAssignments,
|
|
56
|
+
SizeEncodingOptions,
|
|
57
|
+
ShapeEncodingOptions,
|
|
58
|
+
AngleEncodingOptions,
|
|
48
59
|
CompleteAxisOptions,
|
|
49
60
|
ConcatCompositionSpec,
|
|
50
61
|
CompositionAlign,
|
|
51
62
|
CompositionOptions,
|
|
52
63
|
EditFacetSourceOptions,
|
|
64
|
+
FacetHeaderRole,
|
|
65
|
+
FacetHeaderSide,
|
|
66
|
+
FacetHeaderAlign,
|
|
53
67
|
CompositionPadding,
|
|
54
68
|
CompositionProgramEntry,
|
|
55
69
|
CompositionSpec,
|
|
56
70
|
ComputedDataOptions,
|
|
57
71
|
ComputedExpression,
|
|
72
|
+
CompleteDataOptions,
|
|
73
|
+
ImputedDataOptions,
|
|
74
|
+
NormalizedDataOptions,
|
|
75
|
+
NormalizeBaseline,
|
|
76
|
+
NormalizeMethod,
|
|
77
|
+
NormalizeZeroDenominator,
|
|
58
78
|
ChartProgram,
|
|
59
79
|
ConcretePathCommand,
|
|
60
80
|
CurveInterpolation,
|
|
@@ -75,10 +95,20 @@ export type {
|
|
|
75
95
|
CreateThetaAxisTicksOptions,
|
|
76
96
|
CreateRadialAxisTicksOptions,
|
|
77
97
|
CreateThetaAxisLabelsOptions,
|
|
98
|
+
ThetaAxisLabelOptions,
|
|
99
|
+
ThetaTicksAndLabelsOptions,
|
|
100
|
+
CompleteThetaAxisOptions,
|
|
101
|
+
EditThetaAxisOptions,
|
|
78
102
|
CreateRadialAxisLabelsOptions,
|
|
79
103
|
CreateThetaAxisTitleOptions,
|
|
80
104
|
CreateRadialAxisTitleOptions,
|
|
81
105
|
CreateCoordinateOptions,
|
|
106
|
+
CoordinateAspect,
|
|
107
|
+
CoordinateAspectAlign,
|
|
108
|
+
PolarFrameCenter,
|
|
109
|
+
PolarFrameRadius,
|
|
110
|
+
PolarFrameOptions,
|
|
111
|
+
EditCoordinateOptions,
|
|
82
112
|
CreateGuidesOptions,
|
|
83
113
|
CreateGridOptions,
|
|
84
114
|
CreateBarPlotOptions,
|
|
@@ -155,6 +185,9 @@ export type {
|
|
|
155
185
|
ECDFOutputFields,
|
|
156
186
|
ECDFDataOptions,
|
|
157
187
|
DatasetComputedTransform,
|
|
188
|
+
DatasetCompleteTransform,
|
|
189
|
+
DatasetImputedTransform,
|
|
190
|
+
DatasetNormalizedTransform,
|
|
158
191
|
DatasetHorizonTransform,
|
|
159
192
|
DensityPlacement,
|
|
160
193
|
BaselineDensityPlacement,
|
|
@@ -173,12 +206,33 @@ export type {
|
|
|
173
206
|
DatasetWindowOperation,
|
|
174
207
|
DatasetWindowSort,
|
|
175
208
|
DatasetWindowTransform,
|
|
209
|
+
DurationWindowFrame,
|
|
210
|
+
DurationWindowUnit,
|
|
176
211
|
DatasetRegressionTransform,
|
|
177
212
|
DatasetScalar,
|
|
213
|
+
StatisticalWeight,
|
|
178
214
|
DatasetStackTransform,
|
|
179
215
|
DatasetTransform,
|
|
216
|
+
RequestedDatasetTransform,
|
|
217
|
+
DerivedDataDependents,
|
|
218
|
+
EditDerivedDataOptions,
|
|
180
219
|
EditGraphicsOptions,
|
|
181
220
|
EditBin2DDataOptions,
|
|
221
|
+
EditComputedDataOptions,
|
|
222
|
+
EditFilteredDataOptions,
|
|
223
|
+
EditFoldDataOptions,
|
|
224
|
+
EditSummaryDataOptions,
|
|
225
|
+
EditBinDataOptions,
|
|
226
|
+
EditTimeUnitDataOptions,
|
|
227
|
+
EditWindowDataOptions,
|
|
228
|
+
EditDensityDataOptions,
|
|
229
|
+
EditStackDataOptions,
|
|
230
|
+
EditRegressionDataOptions,
|
|
231
|
+
EditIntervalDataOptions,
|
|
232
|
+
EditECDFDataOptions,
|
|
233
|
+
EditNormalizedDataOptions,
|
|
234
|
+
EditCompleteDataOptions,
|
|
235
|
+
EditImputedDataOptions,
|
|
182
236
|
EditHorizonOptions,
|
|
183
237
|
EditCompositionLayoutOptions,
|
|
184
238
|
EditFacetHeadersOptions,
|
|
@@ -198,6 +252,18 @@ export type {
|
|
|
198
252
|
EditLegendSymbolsOptions,
|
|
199
253
|
EditLegendTitleOptions,
|
|
200
254
|
EditScaleOptions,
|
|
255
|
+
EditXScaleOptions,
|
|
256
|
+
EditYScaleOptions,
|
|
257
|
+
EditParallelScaleOptions,
|
|
258
|
+
EditThetaScaleOptions,
|
|
259
|
+
EditRScaleOptions,
|
|
260
|
+
EditColorScaleOptions,
|
|
261
|
+
EditStrokeScaleOptions,
|
|
262
|
+
EditSizeScaleOptions,
|
|
263
|
+
EditOpacityScaleOptions,
|
|
264
|
+
EditShapeScaleOptions,
|
|
265
|
+
EditStrokeWidthScaleOptions,
|
|
266
|
+
EditStrokeDashScaleOptions,
|
|
201
267
|
EditSemanticOptions,
|
|
202
268
|
FieldType,
|
|
203
269
|
FillPaint,
|
|
@@ -249,6 +315,10 @@ export type {
|
|
|
249
315
|
LabelLayoutOptions,
|
|
250
316
|
LabelLeaderOptions,
|
|
251
317
|
LegendOptions,
|
|
318
|
+
LegendChannel,
|
|
319
|
+
LegendBlockTextPatch,
|
|
320
|
+
LegendBlockSymbolPatch,
|
|
321
|
+
EditLegendBlockOptions,
|
|
252
322
|
EditLegendOptions,
|
|
253
323
|
ContinuousColorInterpolation,
|
|
254
324
|
ContinuousColorScaleOptions,
|
|
@@ -256,6 +326,9 @@ export type {
|
|
|
256
326
|
OpacityScaleOptions,
|
|
257
327
|
OrderCategoriesOptions,
|
|
258
328
|
OffsetScaleOptions,
|
|
329
|
+
OffsetScaleEditPatch,
|
|
330
|
+
EditXOffsetScaleOptions,
|
|
331
|
+
EditYOffsetScaleOptions,
|
|
259
332
|
PathOrderEncodingOptions,
|
|
260
333
|
ParallelCoordinatesEncodingOptions,
|
|
261
334
|
ParallelDimension,
|
|
@@ -317,8 +390,11 @@ export type {
|
|
|
317
390
|
ThetaScaleOptions,
|
|
318
391
|
TimeUnit,
|
|
319
392
|
TimeUnitDataOptions,
|
|
393
|
+
RowWindowFrame,
|
|
320
394
|
TemporalInputUnit,
|
|
395
|
+
ThemeDefinition,
|
|
321
396
|
ThemeName,
|
|
397
|
+
ThemeTokens,
|
|
322
398
|
ApplyThemeOptions,
|
|
323
399
|
TraceNode,
|
|
324
400
|
TitleOptions,
|
|
@@ -330,12 +406,21 @@ export type {
|
|
|
330
406
|
TextMarkOptions,
|
|
331
407
|
DatumPositionEncodingOptions,
|
|
332
408
|
CreateMarkLabelsOptions,
|
|
409
|
+
EditMarkLabelPlacementOptions,
|
|
410
|
+
EditMarkLabelSelectionOptions,
|
|
411
|
+
MarkLabelAnchor,
|
|
412
|
+
MarkLabelPlacement,
|
|
413
|
+
MarkLabelPlacementLeaderOptions,
|
|
414
|
+
MarkLabelSelectionOptions,
|
|
415
|
+
RemoveMarkLabelsOptions,
|
|
333
416
|
CreateAnnotationOptions,
|
|
417
|
+
ReferenceStatistic,
|
|
334
418
|
CreateReferenceLineOptions,
|
|
335
419
|
CreateReferenceBandOptions,
|
|
336
420
|
XAxisPosition,
|
|
337
421
|
YAxisPosition,
|
|
338
422
|
WindowDataOptions,
|
|
423
|
+
WindowFrame,
|
|
339
424
|
WindowOperation,
|
|
340
425
|
WindowSort,
|
|
341
426
|
WindowSortOrder,
|