ggaction 0.0.9 → 0.0.11
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 +84 -0
- package/README.md +5 -4
- package/knowledge/action-card.schema.json +1 -0
- package/knowledge/action-cards.json +1 -10941
- package/knowledge/action-cards.schema.json +1 -0
- package/knowledge/extension-authoring.md +248 -0
- package/knowledge/intent-taxonomy.json +1 -183
- package/knowledge/intent-taxonomy.schema.json +1 -0
- package/knowledge/mcp-resources.json +1 -95
- package/knowledge/mcp-resources.schema.json +1 -0
- package/knowledge/task-packet.schema.json +1 -159
- package/knowledge/task-resolver.js +1 -1230
- package/package.json +19 -2
- package/src/actions/boxPlots/edit.js +45 -298
- package/src/actions/boxPlots/options.js +46 -77
- package/src/actions/boxPlots/resolve.js +1 -1
- package/src/actions/charts/bar.js +3 -0
- package/src/actions/charts/heatmap.js +73 -83
- package/src/actions/charts/index.js +1 -1
- package/src/actions/charts/parallel.js +35 -1
- package/src/actions/charts/shared.js +20 -0
- package/src/actions/composition/actions.js +46 -49
- package/src/actions/data/bin2d.js +105 -2
- package/src/actions/data/box.js +17 -17
- package/src/actions/data/density.js +42 -78
- package/src/actions/data/gradientProfile.js +22 -52
- package/src/actions/data/horizon.js +16 -41
- package/src/actions/data/index.js +10 -10
- package/src/actions/data/interval.js +16 -38
- package/src/actions/data/intervalEdit.js +55 -0
- package/src/actions/data/regression.js +7 -17
- package/src/actions/data/shared.js +47 -0
- package/src/actions/data/timeUnit.js +14 -38
- package/src/actions/data/window.js +14 -38
- package/src/actions/distributions/revision.js +154 -34
- package/src/actions/encodings/angle.js +9 -10
- package/src/actions/encodings/appearance.js +17 -51
- package/src/actions/encodings/density/resolve.js +3 -1
- package/src/actions/encodings/density.js +1 -15
- package/src/actions/encodings/horizon/resolve.js +13 -3
- package/src/actions/encodings/horizon.js +8 -7
- package/src/actions/encodings/index.js +9 -9
- package/src/actions/encodings/offset.js +8 -24
- package/src/actions/encodings/parallel.js +9 -10
- package/src/actions/encodings/pathOrder.js +6 -13
- package/src/actions/encodings/position/policies/index.js +4 -4
- package/src/actions/encodings/position/policies/line.js +47 -17
- package/src/actions/encodings/position/resolve.js +24 -5
- package/src/actions/encodings/ranged.js +18 -23
- package/src/actions/encodings/remove.js +15 -25
- package/src/actions/encodings/ruleAppearance.js +9 -24
- package/src/actions/encodings/shared.js +37 -0
- package/src/actions/encodings/strokeDash.js +8 -23
- package/src/actions/encodings/text.js +9 -10
- package/src/actions/errorBands/create.js +105 -39
- package/src/actions/errorBands/edit.js +89 -93
- package/src/actions/errorBands/index.js +1 -2
- package/src/actions/errorBars/create.js +78 -27
- package/src/actions/errorBars/edit.js +81 -48
- package/src/actions/errorBars/index.js +1 -2
- package/src/actions/facets/actions.js +45 -69
- package/src/actions/facets/derive.js +38 -53
- package/src/actions/facets/replay.js +0 -1
- package/src/actions/gradientPlots/components.js +59 -48
- package/src/actions/gradientPlots/edit.js +35 -216
- package/src/actions/gradientPlots/index.js +11 -10
- package/src/actions/gradientPlots/materialize.js +21 -35
- package/src/actions/gradientPlots/options.js +5 -7
- package/src/actions/gradientPlots/paint.js +9 -6
- package/src/actions/gradientPlots/resolve.js +1 -1
- package/src/actions/guides/axes/index.js +3 -3
- package/src/actions/guides/axes/labels.js +68 -26
- package/src/actions/guides/axes/lines.js +22 -2
- package/src/actions/guides/axes/policy.js +28 -8
- package/src/actions/guides/axes/ticks.js +27 -9
- package/src/actions/guides/axes/titles.js +113 -65
- package/src/actions/guides/grids/resolve.js +14 -0
- package/src/actions/guides/guides.js +2 -4
- package/src/actions/guides/index.js +2 -2
- package/src/actions/guides/legends/categorical/actions.js +44 -68
- package/src/actions/guides/legends/categorical/components.js +6 -1
- package/src/actions/guides/legends/categorical/index.js +2 -2
- package/src/actions/guides/legends/categorical/layout.js +148 -175
- package/src/actions/guides/legends/categorical/recipes.js +5 -0
- package/src/actions/guides/legends/categorical/resolve.js +8 -1
- package/src/actions/guides/legends/continuous/common.js +117 -66
- package/src/actions/guides/legends/continuous/gradient.js +38 -37
- package/src/actions/guides/legends/continuous/interval.js +97 -76
- package/src/actions/guides/legends/continuous/opacity.js +28 -38
- package/src/actions/guides/legends/edit.js +14 -1
- package/src/actions/guides/legends/index.js +1 -1
- package/src/actions/guides/legends/lane.js +2 -1
- package/src/actions/guides/legends/remove.js +8 -0
- package/src/actions/guides/legends/size.js +36 -43
- package/src/actions/guides/legends/strokeWidth.js +20 -26
- package/src/actions/guides/polar/axes/labels.js +17 -1
- package/src/actions/guides/polar/axes/shared.js +7 -1
- package/src/actions/guides/polar/axes/titles.js +19 -2
- package/src/actions/guides/polar/grids.js +4 -0
- package/src/actions/guides/polar/resolve.js +6 -0
- package/src/actions/index.js +13 -13
- package/src/actions/intervals/resolve.js +87 -117
- package/src/actions/marks/arc/actions.js +31 -36
- package/src/actions/marks/area/actions.js +23 -31
- package/src/actions/marks/index.js +6 -6
- package/src/actions/marks/line/actions.js +33 -52
- package/src/actions/marks/line/materialize.js +7 -5
- package/src/actions/marks/point/materialize.js +5 -3
- package/src/actions/marks/remove.js +21 -0
- package/src/actions/marks/rule/actions.js +53 -53
- package/src/actions/marks/shared.js +8 -4
- package/src/actions/marks/text/actions.js +14 -6
- package/src/actions/marks/text/layout.js +21 -45
- package/src/actions/marks/tick/actions.js +22 -21
- package/src/actions/primitives/createGraphics.js +4 -0
- package/src/actions/primitives/editGraphics.js +4 -0
- package/src/actions/primitives/index.js +3 -3
- package/src/actions/primitives/semantic.js +1 -1
- package/src/actions/primitives/semanticValidation/index.js +2 -2
- package/src/actions/primitives/semanticValidation/layer.js +1 -1
- package/src/actions/regression/edit.js +3 -43
- package/src/actions/scales/consumers/families.js +24 -4
- package/src/actions/scales/consumers/index.js +1 -1
- package/src/actions/scales/consumers/seriesLayout.js +17 -0
- package/src/actions/scales/definitions.js +100 -103
- package/src/actions/scales/materialize.js +5 -0
- package/src/actions/selection/actions.js +79 -121
- package/src/actions/titles/actions.js +48 -94
- package/src/actions/titles/resolve.js +14 -27
- package/src/actions/violinPlots/create.js +37 -44
- package/src/core/action.js +20 -5
- package/src/core/extensionRegistry.js +104 -0
- package/src/core/textMetrics.js +74 -37
- package/src/core/validation.js +18 -0
- package/src/extension.js +8 -1
- package/src/grammar/aggregate.js +48 -28
- package/src/grammar/arcs.js +58 -11
- package/src/grammar/areaSeries.js +14 -16
- package/src/grammar/bin2d.js +37 -23
- package/src/grammar/boxPlot.js +14 -13
- package/src/grammar/categoricalDensity.js +14 -14
- package/src/grammar/categoryOrder.js +8 -14
- package/src/grammar/curveCommands.js +87 -20
- package/src/grammar/density.js +162 -141
- package/src/grammar/facets/index.js +14 -0
- package/src/grammar/facets/scales.js +7 -4
- package/src/grammar/gradientProfile.js +12 -15
- package/src/grammar/histogram.js +145 -83
- package/src/grammar/horizon.js +60 -23
- package/src/grammar/interval.js +14 -13
- package/src/grammar/lineSeries.js +91 -61
- package/src/grammar/numeric.js +290 -0
- package/src/grammar/paint.js +3 -4
- package/src/grammar/palettes.js +21 -32
- package/src/grammar/pathCommands.js +6 -0
- package/src/grammar/polarPaths.js +5 -5
- package/src/grammar/regression/derive.js +48 -9
- package/src/grammar/regression/models.js +248 -69
- package/src/grammar/regression/parameters.js +8 -0
- package/src/grammar/scales/color.js +35 -26
- package/src/grammar/scales/continuous.js +71 -24
- package/src/grammar/scales/definition.js +1 -1
- package/src/grammar/scales/discretized.js +42 -12
- package/src/grammar/scales/fields.js +21 -4
- package/src/grammar/scales/ordinal.js +117 -61
- package/src/grammar/scales/temporal.js +40 -11
- package/src/grammar/scales/transformed.js +199 -52
- package/src/grammar/schemas/graphicBounds.js +270 -79
- package/src/grammar/seriesLayout.js +50 -18
- package/src/grammar/ticks.js +123 -53
- package/src/grammar/timeUnit.js +18 -8
- package/src/grammar/transforms.js +4 -1
- package/src/grammar/window.js +70 -57
- package/src/index.js +1 -1
- package/src/layout/canvas.js +4 -8
- package/src/layout/composition.js +39 -40
- package/src/layout/facets.js +10 -14
- package/src/layout/labels.js +91 -15
- package/src/layout/legend.js +22 -20
- package/src/layout/legendLane.js +54 -40
- package/src/layout/title.js +7 -7
- package/src/materialization/bars/aggregate.js +14 -40
- package/src/materialization/bars/grouped.js +7 -18
- package/src/materialization/bars/histogram.js +2 -19
- package/src/materialization/bars/ranged.js +20 -15
- package/src/materialization/bars/resolve.js +21 -0
- package/src/materialization/facetGuides/legacyCategorical.js +2 -1
- package/src/materialization/facetGuides/placement.js +34 -19
- package/src/materialization/facetGuides/preparation.js +9 -5
- package/src/materialization/facets.js +39 -27
- package/src/materialization/guides/resources.js +2 -1
- package/src/materialization/marks/capabilities.js +5 -2
- package/src/materialization/marks/index.js +24 -4
- package/src/materialization/scales/policies/bar.js +61 -59
- package/src/materialization/scales/policies/binnedPosition.js +34 -0
- package/src/materialization/scales/policies/series.js +13 -7
- package/src/materialization/scales/resolve.js +4 -5
- package/src/materialization/selection/items/arc.js +16 -2
- package/src/materialization/selection/items/bar.js +4 -2
- package/src/materialization/selection/items/common.js +21 -1
- package/src/materialization/selection/items/path.js +19 -2
- package/src/materialization/selection/items/point.js +4 -16
- package/src/materialization/selection/items/tick.js +13 -21
- package/src/materialization/selection/point.js +11 -4
- package/src/materialization/selection/styles.js +19 -27
- package/src/materialization/text.js +4 -1
- package/src/mcp/adapter.js +8 -3
- package/src/renderers/canvas/fill.js +2 -2
- package/src/renderers/canvas/index.js +35 -2
- package/src/renderers/canvas/native.js +160 -0
- package/src/renderers/pdf.js +14 -0
- package/src/renderers/svg.js +37 -4
- package/types/extension.d.ts +19 -0
- package/types/index.d.ts +3 -0
- package/types/program.d.ts +509 -131
- package/types/svg.d.ts +1 -0
- package/src/actions/errorBands/components.js +0 -81
- package/src/actions/errorBands/options.js +0 -39
- package/src/actions/errorBands/resolve.js +0 -28
- package/src/actions/errorBars/components.js +0 -62
- package/src/actions/errorBars/options.js +0 -58
- package/src/actions/errorBars/resolve.js +0 -25
package/src/renderers/svg.js
CHANGED
|
@@ -19,7 +19,8 @@ import {
|
|
|
19
19
|
import { normalizeRendererFontWeight } from "./text.js";
|
|
20
20
|
|
|
21
21
|
const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
|
|
22
|
-
const SVG_OPTIONS = new Set(["title", "description"]);
|
|
22
|
+
const SVG_OPTIONS = new Set(["title", "description", "resourceNamespace"]);
|
|
23
|
+
const RESOURCE_NAMESPACE = /^[A-Za-z][A-Za-z0-9_-]*$/;
|
|
23
24
|
const TEXT_ANCHORS = Object.freeze({
|
|
24
25
|
left: "start",
|
|
25
26
|
start: "start",
|
|
@@ -36,7 +37,28 @@ const DOMINANT_BASELINES = Object.freeze({
|
|
|
36
37
|
bottom: "text-after-edge"
|
|
37
38
|
});
|
|
38
39
|
|
|
40
|
+
function resourceNamespace(graphicSpec) {
|
|
41
|
+
const serialized = JSON.stringify(graphicSpec);
|
|
42
|
+
let hash = 0xcbf29ce484222325n;
|
|
43
|
+
for (let index = 0; index < serialized.length; index += 1) {
|
|
44
|
+
hash ^= BigInt(serialized.charCodeAt(index));
|
|
45
|
+
hash = BigInt.asUintN(64, hash * 0x100000001b3n);
|
|
46
|
+
}
|
|
47
|
+
return hash.toString(36);
|
|
48
|
+
}
|
|
49
|
+
|
|
39
50
|
function escapeText(value) {
|
|
51
|
+
for (const character of value) {
|
|
52
|
+
const point = character.codePointAt(0);
|
|
53
|
+
if (!(
|
|
54
|
+
point === 9 || point === 10 || point === 13 ||
|
|
55
|
+
(point >= 0x20 && point <= 0xd7ff) ||
|
|
56
|
+
(point >= 0xe000 && point <= 0xfffd) ||
|
|
57
|
+
(point >= 0x10000 && point <= 0x10ffff)
|
|
58
|
+
)) {
|
|
59
|
+
throw new TypeError("SVG output requires XML 1.0-compatible strings.");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
40
62
|
return value
|
|
41
63
|
.replaceAll("&", "&")
|
|
42
64
|
.replaceAll("<", "<")
|
|
@@ -122,7 +144,8 @@ function requireCanvasBackground(id, canvas) {
|
|
|
122
144
|
|
|
123
145
|
function addLinearGradient(state, fill, bounds, graphicId) {
|
|
124
146
|
const coordinates = resolveLinearGradientCoordinates(fill, bounds);
|
|
125
|
-
const id =
|
|
147
|
+
const id =
|
|
148
|
+
`ggaction-gradient-${state.resourceNamespace}-${state.gradientCount}`;
|
|
126
149
|
state.gradientCount += 1;
|
|
127
150
|
const stops = fill.stops.map(stop => element("stop", [
|
|
128
151
|
["offset", formatNumber(stop.offset)],
|
|
@@ -410,7 +433,7 @@ function openNestedCanvas(state, id, canvas) {
|
|
|
410
433
|
canvas,
|
|
411
434
|
{ nested: true }
|
|
412
435
|
);
|
|
413
|
-
const clipId = `ggaction-clip-${state.clipCount}`;
|
|
436
|
+
const clipId = `ggaction-clip-${state.resourceNamespace}-${state.clipCount}`;
|
|
414
437
|
state.clipCount += 1;
|
|
415
438
|
state.definitions.push(element("clipPath", [["id", clipId]], element(
|
|
416
439
|
"rect",
|
|
@@ -504,6 +527,14 @@ function requireSVGOptions(options) {
|
|
|
504
527
|
throw new TypeError(`renderToSVG ${key} must be a non-empty string.`);
|
|
505
528
|
}
|
|
506
529
|
}
|
|
530
|
+
if (
|
|
531
|
+
options.resourceNamespace !== undefined &&
|
|
532
|
+
!RESOURCE_NAMESPACE.test(options.resourceNamespace)
|
|
533
|
+
) {
|
|
534
|
+
throw new TypeError(
|
|
535
|
+
"renderToSVG resourceNamespace must start with a letter and contain only letters, numbers, _ or -."
|
|
536
|
+
);
|
|
537
|
+
}
|
|
507
538
|
return options;
|
|
508
539
|
}
|
|
509
540
|
|
|
@@ -529,7 +560,9 @@ export function renderToSVG(program, options = {}) {
|
|
|
529
560
|
const state = {
|
|
530
561
|
clipCount: 1,
|
|
531
562
|
definitions: [],
|
|
532
|
-
gradientCount: 1
|
|
563
|
+
gradientCount: 1,
|
|
564
|
+
resourceNamespace:
|
|
565
|
+
resolvedOptions.resourceNamespace ?? resourceNamespace(graphicSpec)
|
|
533
566
|
};
|
|
534
567
|
const body = serializeBody(
|
|
535
568
|
graphicSpec,
|
package/types/extension.d.ts
CHANGED
|
@@ -15,6 +15,21 @@ export interface ActionMetadata {
|
|
|
15
15
|
scope?: "unit" | "composition" | "any";
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
export interface RegisteredExtensionActions {}
|
|
19
|
+
|
|
20
|
+
export type RegisteredExtensionAction = (
|
|
21
|
+
this: ChartProgram,
|
|
22
|
+
...args: any[]
|
|
23
|
+
) => ChartProgram;
|
|
24
|
+
|
|
25
|
+
export interface ExtensionDefinition<
|
|
26
|
+
TActions extends Readonly<Record<string, RegisteredExtensionAction>> =
|
|
27
|
+
Readonly<Record<string, RegisteredExtensionAction>>
|
|
28
|
+
> {
|
|
29
|
+
name: string;
|
|
30
|
+
actions: TActions;
|
|
31
|
+
}
|
|
32
|
+
|
|
18
33
|
export function action<TOptions extends ActionOptions = ActionOptions>(
|
|
19
34
|
metadata: ActionMetadata,
|
|
20
35
|
implementation: (this: ChartProgram, options: TOptions) => ChartProgram
|
|
@@ -22,3 +37,7 @@ export function action<TOptions extends ActionOptions = ActionOptions>(
|
|
|
22
37
|
this: TProgram,
|
|
23
38
|
options?: TOptions
|
|
24
39
|
) => TProgram;
|
|
40
|
+
|
|
41
|
+
export function registerExtension<
|
|
42
|
+
TActions extends Readonly<Record<string, RegisteredExtensionAction>>
|
|
43
|
+
>(definition: ExtensionDefinition<TActions>): void;
|
package/types/index.d.ts
CHANGED
|
@@ -157,6 +157,7 @@ export type {
|
|
|
157
157
|
MarkGraphicProperty,
|
|
158
158
|
Palette,
|
|
159
159
|
PaletteName,
|
|
160
|
+
NonPointQuantitativePositionScaleOptions,
|
|
160
161
|
PositionEncodingOptions,
|
|
161
162
|
YPositionEncodingOptions,
|
|
162
163
|
RulePositionEncodingOptions,
|
|
@@ -181,6 +182,8 @@ export type {
|
|
|
181
182
|
ScaleRange,
|
|
182
183
|
ScaleOptions,
|
|
183
184
|
ScaleType,
|
|
185
|
+
ShapeScaleOptions,
|
|
186
|
+
SizeScaleOptions,
|
|
184
187
|
StackMode,
|
|
185
188
|
YStackMode,
|
|
186
189
|
SemanticCoordinate,
|