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.
Files changed (270) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +20 -11
  3. package/knowledge/action-cards.json +1 -1
  4. package/knowledge/intent-taxonomy.json +1 -1
  5. package/knowledge/mcp-resources.json +1 -1
  6. package/package.json +8 -3
  7. package/src/actions/basic.js +2 -2
  8. package/src/actions/boxPlots/components.js +14 -4
  9. package/src/actions/boxPlots/edit.js +31 -5
  10. package/src/actions/boxPlots/materialize.js +11 -3
  11. package/src/actions/boxPlots/options.js +48 -16
  12. package/src/actions/categoryOrder/index.js +15 -4
  13. package/src/actions/charts/area.js +5 -1
  14. package/src/actions/charts/bar.js +2 -1
  15. package/src/actions/charts/density.js +6 -2
  16. package/src/actions/charts/ecdf.js +4 -1
  17. package/src/actions/charts/endpoints.js +25 -3
  18. package/src/actions/charts/heatmap.js +2 -1
  19. package/src/actions/charts/histogram.js +4 -3
  20. package/src/actions/charts/horizon.js +3 -1
  21. package/src/actions/charts/interval-regression.js +5 -2
  22. package/src/actions/charts/line.js +3 -1
  23. package/src/actions/charts/parallel.js +8 -2
  24. package/src/actions/charts/pie.js +10 -2
  25. package/src/actions/charts/polar.js +15 -4
  26. package/src/actions/charts/radar.js +8 -2
  27. package/src/actions/charts/radial.js +10 -2
  28. package/src/actions/charts/rug-strip.js +6 -2
  29. package/src/actions/charts/scatter.js +3 -1
  30. package/src/actions/composition/actions.js +13 -4
  31. package/src/actions/coordinates/actions.js +1 -1
  32. package/src/actions/coordinates/edit.js +76 -0
  33. package/src/actions/data/bin.js +1 -1
  34. package/src/actions/data/bin2d.js +57 -185
  35. package/src/actions/data/complete.js +26 -0
  36. package/src/actions/data/computed.js +2 -2
  37. package/src/actions/data/create.js +2 -2
  38. package/src/actions/data/density.js +12 -20
  39. package/src/actions/data/derived.js +47 -17
  40. package/src/actions/data/edit.js +539 -0
  41. package/src/actions/data/filter.js +14 -2
  42. package/src/actions/data/impute.js +26 -0
  43. package/src/actions/data/index.js +14 -0
  44. package/src/actions/data/normalize.js +27 -0
  45. package/src/actions/data/regression.js +16 -21
  46. package/src/actions/data/revisionBindings.js +145 -0
  47. package/src/actions/data/shared.js +20 -4
  48. package/src/actions/data/summary.js +1 -1
  49. package/src/actions/data/timeUnit.js +4 -1
  50. package/src/actions/data/window.js +1 -1
  51. package/src/actions/encodings/channels.js +415 -0
  52. package/src/actions/encodings/color/index.js +2 -1
  53. package/src/actions/encodings/density.js +5 -2
  54. package/src/actions/encodings/histogram.js +3 -2
  55. package/src/actions/encodings/index.js +4 -0
  56. package/src/actions/encodings/offset.js +20 -13
  57. package/src/actions/encodings/position/apply.js +53 -7
  58. package/src/actions/encodings/position/index.js +10 -2
  59. package/src/actions/encodings/position/policies/bar.js +9 -0
  60. package/src/actions/encodings/position/resolve.js +24 -7
  61. package/src/actions/encodings/remove.js +9 -4
  62. package/src/actions/encodings/ruleAppearance.js +1 -23
  63. package/src/actions/encodings/seriesLayout.js +1 -0
  64. package/src/actions/encodings/shared.js +82 -14
  65. package/src/actions/encodings/stroke.js +226 -0
  66. package/src/actions/errorBands/create.js +23 -3
  67. package/src/actions/errorBands/edit.js +21 -6
  68. package/src/actions/errorBars/create.js +35 -7
  69. package/src/actions/errorBars/edit.js +19 -4
  70. package/src/actions/facets/actions.js +237 -57
  71. package/src/actions/facets/derive.js +91 -26
  72. package/src/actions/gradientPlots/components.js +10 -2
  73. package/src/actions/gradientPlots/edit.js +14 -4
  74. package/src/actions/gradientPlots/materialize.js +3 -1
  75. package/src/actions/gradientPlots/options.js +10 -2
  76. package/src/actions/guides/applicability.js +8 -2
  77. package/src/actions/guides/axes/labels.js +58 -12
  78. package/src/actions/guides/axes/lines.js +6 -2
  79. package/src/actions/guides/axes/parallel/resolve.js +6 -2
  80. package/src/actions/guides/axes/tickGroups.js +2 -1
  81. package/src/actions/guides/axes/ticks.js +6 -2
  82. package/src/actions/guides/axes/titles.js +11 -3
  83. package/src/actions/guides/grids/resolve.js +7 -2
  84. package/src/actions/guides/guides.js +19 -3
  85. package/src/actions/guides/legends/blocks.js +426 -0
  86. package/src/actions/guides/legends/categorical/actions.js +134 -48
  87. package/src/actions/guides/legends/categorical/components.js +17 -12
  88. package/src/actions/guides/legends/categorical/index.js +37 -33
  89. package/src/actions/guides/legends/categorical/layout.js +97 -15
  90. package/src/actions/guides/legends/categorical/options.js +2 -2
  91. package/src/actions/guides/legends/categorical/recipes.js +111 -20
  92. package/src/actions/guides/legends/categorical/resolve.js +12 -8
  93. package/src/actions/guides/legends/categorical/symbols.js +85 -30
  94. package/src/actions/guides/legends/continuous/common.js +30 -12
  95. package/src/actions/guides/legends/continuous/gradient.js +10 -7
  96. package/src/actions/guides/legends/continuous/index.js +2 -0
  97. package/src/actions/guides/legends/continuous/interval.js +8 -3
  98. package/src/actions/guides/legends/continuous/opacity.js +8 -5
  99. package/src/actions/guides/legends/continuous/stroke.js +525 -0
  100. package/src/actions/guides/legends/creation.js +14 -1
  101. package/src/actions/guides/legends/edit.js +158 -59
  102. package/src/actions/guides/legends/index.js +2 -0
  103. package/src/actions/guides/legends/lane.js +54 -19
  104. package/src/actions/guides/legends/lifecycle.js +19 -8
  105. package/src/actions/guides/legends/remove.js +13 -3
  106. package/src/actions/guides/legends/sampling.js +140 -0
  107. package/src/actions/guides/legends/size.js +93 -40
  108. package/src/actions/guides/legends/strokeWidth.js +34 -28
  109. package/src/actions/guides/legends/target.js +112 -1
  110. package/src/actions/guides/legends/transition.js +165 -16
  111. package/src/actions/guides/polar/axes/facade.js +4 -4
  112. package/src/actions/guides/polar/axes/labels.js +24 -5
  113. package/src/actions/guides/polar/axes/lines.js +10 -4
  114. package/src/actions/guides/polar/axes/shared.js +16 -0
  115. package/src/actions/guides/polar/axes/ticks.js +1 -1
  116. package/src/actions/guides/polar/axes/titles.js +1 -1
  117. package/src/actions/guides/polar/grids.js +1 -1
  118. package/src/actions/guides/polar/resolve.js +12 -8
  119. package/src/actions/index.js +14 -3
  120. package/src/actions/marks/arc/actions.js +77 -19
  121. package/src/actions/marks/area/actions.js +34 -9
  122. package/src/actions/marks/area/materialize.js +17 -1
  123. package/src/actions/marks/bar/create.js +11 -2
  124. package/src/actions/marks/bar/edit.js +20 -3
  125. package/src/actions/marks/bar/materialize.js +22 -2
  126. package/src/actions/marks/index.js +10 -1
  127. package/src/actions/marks/line/actions.js +37 -14
  128. package/src/actions/marks/line/materialize.js +29 -10
  129. package/src/actions/marks/point/create.js +8 -2
  130. package/src/actions/marks/point/edit.js +18 -6
  131. package/src/actions/marks/point/materialize.js +49 -15
  132. package/src/actions/marks/rect/actions.js +33 -12
  133. package/src/actions/marks/references.js +601 -30
  134. package/src/actions/marks/remove.js +71 -1
  135. package/src/actions/marks/rule/actions.js +47 -10
  136. package/src/actions/marks/shared.js +1 -1
  137. package/src/actions/marks/text/actions.js +74 -9
  138. package/src/actions/marks/text/index.js +4 -0
  139. package/src/actions/marks/text/layout.js +154 -6
  140. package/src/actions/marks/text/removal.js +173 -0
  141. package/src/actions/marks/text/selection.js +73 -0
  142. package/src/actions/marks/tick/actions.js +22 -5
  143. package/src/actions/primitives/editGraphics.js +26 -0
  144. package/src/actions/primitives/semantic.js +2 -1
  145. package/src/actions/primitives/semanticAction.js +83 -10
  146. package/src/actions/primitives/semanticValidation/guide.js +1 -1
  147. package/src/actions/primitives/semanticValidation/index.js +9 -1
  148. package/src/actions/primitives/semanticValidation/layer.js +5 -0
  149. package/src/actions/primitives/semanticValidation/scale.js +28 -7
  150. package/src/actions/regression/components.js +26 -11
  151. package/src/actions/regression/create.js +10 -2
  152. package/src/actions/regression/edit.js +21 -7
  153. package/src/actions/resources/index.js +7 -0
  154. package/src/actions/resources/remove.js +172 -0
  155. package/src/actions/scales/channels.js +212 -0
  156. package/src/actions/scales/consumers/common.js +1 -1
  157. package/src/actions/scales/consumers/families.js +3 -2
  158. package/src/actions/scales/consumers/index.js +19 -2
  159. package/src/actions/scales/consumers/seriesLayout.js +28 -14
  160. package/src/actions/scales/create.js +54 -22
  161. package/src/actions/scales/definitions.js +94 -40
  162. package/src/actions/scales/edit.js +66 -11
  163. package/src/actions/scales/editPolicy.js +81 -11
  164. package/src/actions/scales/index.js +6 -0
  165. package/src/actions/scales/materialize.js +4 -3
  166. package/src/actions/scales/offset.js +48 -0
  167. package/src/actions/scales/parallel.js +71 -0
  168. package/src/actions/scales/preview.js +111 -10
  169. package/src/actions/selection/actions.js +154 -30
  170. package/src/actions/selection/index.js +3 -0
  171. package/src/actions/theme/actions.js +68 -13
  172. package/src/actions/theme/composition.js +238 -0
  173. package/src/actions/theme/index.js +9 -2
  174. package/src/actions/theme/reconcile.js +315 -67
  175. package/src/actions/theme/state.js +160 -0
  176. package/src/actions/violinPlots/create.js +5 -2
  177. package/src/actions/violinPlots/edit.js +1 -0
  178. package/src/core/action.js +10 -0
  179. package/src/core/compositionState.js +6 -1
  180. package/src/core/programState.js +20 -0
  181. package/src/core/resourceReferences.js +332 -0
  182. package/src/core/vocabulary.js +16 -3
  183. package/src/grammar/bars/aggregate.js +4 -1
  184. package/src/grammar/bars/geometry.js +44 -0
  185. package/src/grammar/bin.js +54 -9
  186. package/src/grammar/complete.js +279 -0
  187. package/src/grammar/computed.js +265 -64
  188. package/src/grammar/coordinates.js +37 -0
  189. package/src/grammar/density.js +239 -37
  190. package/src/grammar/displayLabels.js +57 -0
  191. package/src/grammar/facets/dependencies.js +133 -1
  192. package/src/grammar/facets/guides.js +3 -0
  193. package/src/grammar/facets/index.js +7 -47
  194. package/src/grammar/facets/scales.js +15 -18
  195. package/src/grammar/impute.js +340 -0
  196. package/src/grammar/markLabelSelection.js +57 -0
  197. package/src/grammar/markLabels.js +18 -1
  198. package/src/grammar/normalize.js +366 -0
  199. package/src/grammar/pathSeries.js +26 -8
  200. package/src/grammar/pointShapes.js +13 -4
  201. package/src/grammar/polar.js +90 -8
  202. package/src/grammar/regression/index.js +1 -0
  203. package/src/grammar/regression/parameters.js +23 -0
  204. package/src/grammar/roundedRect.js +180 -0
  205. package/src/grammar/rules.js +1 -0
  206. package/src/grammar/scales/colorConsumers.js +20 -1
  207. package/src/grammar/scales/continuous.js +2 -2
  208. package/src/grammar/scales/definition.js +27 -4
  209. package/src/grammar/scales/index.js +1 -0
  210. package/src/grammar/scales/ordinal.js +12 -3
  211. package/src/grammar/scales/policies.js +2 -2
  212. package/src/grammar/scales/size.js +456 -0
  213. package/src/grammar/schemas/concreteGraphic.js +14 -2
  214. package/src/grammar/schemas/graphic.js +15 -0
  215. package/src/grammar/schemas/graphicBounds.js +179 -30
  216. package/src/grammar/schemas/semanticPath.js +7 -2
  217. package/src/grammar/statisticalReference.js +103 -0
  218. package/src/grammar/strokeStyle.js +77 -0
  219. package/src/grammar/summary.js +78 -16
  220. package/src/grammar/timeUnit.js +216 -5
  221. package/src/grammar/transformTopology.js +4 -0
  222. package/src/grammar/transforms.js +394 -28
  223. package/src/grammar/weightedStatistics.js +374 -0
  224. package/src/grammar/window.js +221 -16
  225. package/src/layout/aspect.js +80 -0
  226. package/src/layout/facets.js +59 -5
  227. package/src/layout/labels.js +343 -0
  228. package/src/materialization/bars/aggregate.js +25 -2
  229. package/src/materialization/bars/histogram.js +84 -24
  230. package/src/materialization/bars/ranged.js +19 -3
  231. package/src/materialization/bars/resolve.js +7 -4
  232. package/src/materialization/composition.js +3 -1
  233. package/src/materialization/coordinateBounds.js +204 -0
  234. package/src/materialization/dependencies.js +36 -0
  235. package/src/materialization/facetGuides/legacyCategorical.js +3 -0
  236. package/src/materialization/facetGuides/placement.js +8 -2
  237. package/src/materialization/facetGuides/preparation.js +12 -7
  238. package/src/materialization/facetHeaders.js +346 -0
  239. package/src/materialization/facets.js +15 -65
  240. package/src/materialization/guides/resources.js +26 -0
  241. package/src/materialization/legends.js +1 -1
  242. package/src/materialization/marks/index.js +11 -5
  243. package/src/materialization/marks/policies.js +2 -1
  244. package/src/materialization/rect.js +25 -12
  245. package/src/materialization/rectConfig.js +5 -1
  246. package/src/materialization/scales/map.js +5 -3
  247. package/src/materialization/scales/policies/binnedPosition.js +2 -2
  248. package/src/materialization/scales/policies/offset.js +50 -8
  249. package/src/materialization/scales/policies/series.js +4 -1
  250. package/src/materialization/scales/resolve.js +22 -6
  251. package/src/materialization/selection/items/arc.js +28 -4
  252. package/src/materialization/selection/items/bar.js +30 -3
  253. package/src/materialization/selection/items/common.js +19 -4
  254. package/src/materialization/selection/items/rect.js +28 -4
  255. package/src/materialization/selection/path.js +1 -1
  256. package/src/materialization/selection/point.js +3 -1
  257. package/src/materialization/text.js +265 -14
  258. package/src/renderers/canvas/circle.js +2 -3
  259. package/src/renderers/canvas/line.js +2 -3
  260. package/src/renderers/canvas/native.js +4 -4
  261. package/src/renderers/canvas/path.js +2 -3
  262. package/src/renderers/canvas/rect.js +2 -3
  263. package/src/renderers/canvas/stroke.js +11 -0
  264. package/src/renderers/svg.js +19 -0
  265. package/src/selectors/datasets.js +32 -1
  266. package/src/selectors/layers.js +4 -0
  267. package/src/theme/defaults.js +101 -0
  268. package/types/basic.d.ts +6 -0
  269. package/types/index.d.ts +85 -0
  270. package/types/program.d.ts +910 -117
@@ -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 = findDataset(program, id);
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(
@@ -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
  }
@@ -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,