ggaction 0.0.13 → 0.0.16
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 +146 -0
- package/README.md +41 -12
- package/knowledge/action-cards.json +1 -1
- package/knowledge/intent-taxonomy.json +1 -1
- package/knowledge/mcp-resources.json +1 -1
- package/knowledge/task-packet.schema.json +1 -1
- package/knowledge/task-resolver.js +1 -1
- package/package.json +39 -7
- package/src/BasicChartProgram.js +3 -1
- package/src/ChartProgram.js +2 -0
- package/src/accessibility.js +157 -0
- package/src/actions/basic.js +2 -2
- package/src/actions/boxPlots/components.js +20 -12
- package/src/actions/boxPlots/create.js +4 -5
- package/src/actions/boxPlots/edit.js +34 -9
- package/src/actions/boxPlots/materialize.js +12 -4
- package/src/actions/boxPlots/options.js +48 -16
- package/src/actions/canvas/actions.js +3 -3
- package/src/actions/canvas/fitting.js +1 -1
- package/src/actions/categoryOrder/index.js +21 -12
- package/src/actions/charts/area.js +6 -2
- package/src/actions/charts/bar.js +3 -2
- package/src/actions/charts/beeswarm.js +1 -1
- package/src/actions/charts/density.js +7 -3
- package/src/actions/charts/ecdf.js +6 -3
- package/src/actions/charts/endpoints.js +29 -7
- package/src/actions/charts/heatmap.js +3 -2
- package/src/actions/charts/histogram.js +5 -4
- package/src/actions/charts/horizon.js +4 -2
- package/src/actions/charts/interval-regression.js +7 -4
- package/src/actions/charts/line.js +4 -2
- package/src/actions/charts/parallel.js +9 -3
- package/src/actions/charts/pie.js +11 -3
- package/src/actions/charts/polar.js +17 -6
- package/src/actions/charts/radar.js +9 -3
- package/src/actions/charts/radial.js +12 -4
- package/src/actions/charts/raincloud.js +2 -2
- package/src/actions/charts/rug-strip.js +8 -4
- package/src/actions/charts/scatter.js +4 -2
- package/src/actions/composition/actions.js +29 -24
- package/src/actions/coordinates/actions.js +2 -2
- package/src/actions/coordinates/edit.js +76 -0
- package/src/actions/data/basicBin2d.js +4 -5
- package/src/actions/data/bin.js +3 -3
- package/src/actions/data/bin2d.js +63 -193
- package/src/actions/data/bin2dMaterialize.js +4 -5
- package/src/actions/data/box.js +4 -4
- package/src/actions/data/complete.js +26 -0
- package/src/actions/data/computed.js +4 -4
- package/src/actions/data/create.js +7 -14
- package/src/actions/data/density.js +15 -23
- package/src/actions/data/derived.js +57 -31
- package/src/actions/data/ecdf.js +2 -2
- package/src/actions/data/edit.js +551 -0
- package/src/actions/data/filter.js +28 -22
- package/src/actions/data/fold.js +2 -2
- package/src/actions/data/gradientProfile.js +2 -2
- package/src/actions/data/horizon.js +2 -2
- package/src/actions/data/impute.js +26 -0
- package/src/actions/data/index.js +62 -47
- package/src/actions/data/interval.js +2 -2
- package/src/actions/data/intervalEdit.js +26 -18
- package/src/actions/data/normalize.js +27 -0
- package/src/actions/data/regression.js +21 -27
- package/src/actions/data/revise.js +48 -0
- package/src/actions/data/revisionBindings.js +125 -0
- package/src/actions/data/shared.js +20 -4
- package/src/actions/data/stack.js +2 -2
- package/src/actions/data/summary.js +3 -3
- package/src/actions/data/timeUnit.js +6 -3
- package/src/actions/data/window.js +3 -3
- package/src/actions/encodings/angle.js +1 -1
- package/src/actions/encodings/appearance.js +4 -4
- package/src/actions/encodings/barWidth.js +1 -1
- package/src/actions/encodings/channels.js +415 -0
- package/src/actions/encodings/color/index.js +3 -2
- package/src/actions/encodings/density.js +7 -4
- package/src/actions/encodings/histogram.js +4 -3
- package/src/actions/encodings/horizon.js +6 -8
- package/src/actions/encodings/index.js +4 -0
- package/src/actions/encodings/offset.js +22 -15
- package/src/actions/encodings/parallel.js +4 -5
- package/src/actions/encodings/pathOrder.js +6 -11
- package/src/actions/encodings/position/apply.js +53 -7
- package/src/actions/encodings/position/index.js +14 -6
- package/src/actions/encodings/position/policies/bar.js +9 -0
- package/src/actions/encodings/position/resolve.js +24 -7
- package/src/actions/encodings/ranged.js +5 -5
- package/src/actions/encodings/remove.js +13 -9
- package/src/actions/encodings/ruleAppearance.js +2 -24
- package/src/actions/encodings/seriesLayout.js +2 -1
- package/src/actions/encodings/shared.js +82 -14
- package/src/actions/encodings/stroke.js +226 -0
- package/src/actions/encodings/strokeDash.js +2 -2
- package/src/actions/encodings/text.js +1 -1
- package/src/actions/errorBands/create.js +34 -20
- package/src/actions/errorBands/edit.js +34 -137
- package/src/actions/errorBars/create.js +43 -20
- package/src/actions/errorBars/edit.js +29 -125
- package/src/actions/facets/actions.js +267 -73
- package/src/actions/facets/derive.js +99 -28
- package/src/actions/facets/guides.js +4 -5
- package/src/actions/facets/replay.js +4 -5
- package/src/actions/gradientPlots/components.js +15 -8
- package/src/actions/gradientPlots/create.js +4 -5
- package/src/actions/gradientPlots/edit.js +18 -9
- package/src/actions/gradientPlots/materialize.js +5 -3
- package/src/actions/gradientPlots/options.js +10 -2
- package/src/actions/gradientPlots/rebind.js +4 -5
- package/src/actions/guides/applicability.js +8 -2
- package/src/actions/guides/axes/axes.js +23 -4
- package/src/actions/guides/axes/axis.js +2 -2
- package/src/actions/guides/axes/edit.js +2 -2
- package/src/actions/guides/axes/labels.js +67 -21
- package/src/actions/guides/axes/lines.js +15 -9
- package/src/actions/guides/axes/parallel/lifecycle.js +13 -13
- package/src/actions/guides/axes/parallel/resolve.js +6 -2
- package/src/actions/guides/axes/parallel.js +5 -5
- package/src/actions/guides/axes/remove.js +4 -4
- package/src/actions/guides/axes/tickGroups.js +6 -5
- package/src/actions/guides/axes/ticks.js +19 -6
- package/src/actions/guides/axes/titles.js +21 -13
- package/src/actions/guides/grids/grid.js +18 -29
- package/src/actions/guides/grids/resolve.js +7 -2
- package/src/actions/guides/guides.js +20 -4
- package/src/actions/guides/legends/blocks.js +426 -0
- package/src/actions/guides/legends/categorical/actions.js +138 -52
- package/src/actions/guides/legends/categorical/components.js +55 -45
- package/src/actions/guides/legends/categorical/index.js +37 -33
- package/src/actions/guides/legends/categorical/layout.js +98 -16
- 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 +104 -52
- package/src/actions/guides/legends/continuous/common.js +76 -20
- package/src/actions/guides/legends/continuous/gradient.js +95 -158
- package/src/actions/guides/legends/continuous/index.js +2 -0
- package/src/actions/guides/legends/continuous/interval.js +21 -16
- package/src/actions/guides/legends/continuous/opacity.js +37 -83
- package/src/actions/guides/legends/continuous/stroke.js +225 -0
- package/src/actions/guides/legends/creation.js +14 -1
- package/src/actions/guides/legends/edit.js +159 -60
- package/src/actions/guides/legends/focused.js +5 -5
- package/src/actions/guides/legends/index.js +2 -0
- package/src/actions/guides/legends/lane.js +59 -24
- package/src/actions/guides/legends/lifecycle.js +19 -8
- package/src/actions/guides/legends/remove.js +17 -8
- package/src/actions/guides/legends/sampling.js +140 -0
- package/src/actions/guides/legends/size.js +100 -108
- package/src/actions/guides/legends/strokeWidth.js +38 -92
- 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 +8 -8
- package/src/actions/guides/polar/axes/labels.js +29 -10
- package/src/actions/guides/polar/axes/lines.js +19 -19
- package/src/actions/guides/polar/axes/shared.js +16 -0
- package/src/actions/guides/polar/axes/ticks.js +10 -16
- package/src/actions/guides/polar/axes/titles.js +6 -6
- package/src/actions/guides/polar/grids.js +12 -14
- package/src/actions/guides/polar/resolve.js +12 -8
- package/src/actions/index.js +16 -3
- package/src/actions/intervals/revision.js +126 -0
- package/src/actions/marks/arc/actions.js +80 -22
- package/src/actions/marks/area/actions.js +38 -13
- package/src/actions/marks/area/materialize.js +17 -1
- package/src/actions/marks/bar/create.js +12 -3
- package/src/actions/marks/bar/edit.js +21 -4
- package/src/actions/marks/bar/materialize.js +34 -40
- package/src/actions/marks/index.js +10 -1
- package/src/actions/marks/line/actions.js +40 -17
- package/src/actions/marks/line/materialize.js +29 -10
- package/src/actions/marks/point/create.js +9 -3
- package/src/actions/marks/point/edit.js +19 -7
- package/src/actions/marks/point/jitter.js +6 -8
- package/src/actions/marks/point/materialize.js +48 -22
- package/src/actions/marks/point/packing.js +6 -8
- package/src/actions/marks/rect/actions.js +36 -15
- package/src/actions/marks/references.js +602 -33
- package/src/actions/marks/remove.js +67 -41
- package/src/actions/marks/rule/actions.js +51 -14
- package/src/actions/marks/shared.js +1 -1
- package/src/actions/marks/text/actions.js +79 -14
- package/src/actions/marks/text/index.js +4 -0
- package/src/actions/marks/text/layout.js +157 -17
- package/src/actions/marks/text/removal.js +173 -0
- package/src/actions/marks/text/selection.js +72 -0
- package/src/actions/marks/tick/actions.js +25 -8
- package/src/actions/primitives/createGraphics.js +5 -4
- package/src/actions/primitives/editGraphics.js +31 -4
- package/src/actions/primitives/graphicProperties.js +6 -0
- package/src/actions/primitives/semantic.js +11 -3
- package/src/actions/primitives/semanticAction.js +90 -14
- package/src/actions/primitives/semanticValidation/dataset.js +2 -4
- 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 +36 -25
- package/src/actions/regression/create.js +13 -6
- package/src/actions/regression/edit.js +24 -11
- package/src/actions/resources/index.js +7 -0
- package/src/actions/resources/remove.js +173 -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 +55 -23
- package/src/actions/scales/definitions.js +94 -40
- package/src/actions/scales/edit.js +67 -12
- package/src/actions/scales/editPolicy.js +81 -11
- package/src/actions/scales/index.js +6 -0
- package/src/actions/scales/materialize.js +5 -4
- 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/scales/quantitativeColor.js +4 -5
- package/src/actions/selection/actions.js +179 -66
- package/src/actions/selection/index.js +3 -0
- package/src/actions/textMetrics/index.js +56 -0
- package/src/actions/theme/actions.js +70 -15
- package/src/actions/theme/composition.js +238 -0
- package/src/actions/theme/index.js +9 -2
- package/src/actions/theme/reconcile.js +313 -121
- package/src/actions/theme/state.js +160 -0
- package/src/actions/titles/actions.js +8 -8
- package/src/actions/titles/resolve.js +3 -3
- package/src/actions/violinPlots/create.js +6 -3
- package/src/actions/violinPlots/edit.js +2 -1
- package/src/core/action.js +117 -35
- package/src/core/compositionState.js +6 -1
- package/src/core/diagnostics.js +16 -0
- package/src/core/extensionRegistry.js +27 -0
- package/src/core/font.js +18 -0
- package/src/core/identifiers.js +5 -4
- package/src/core/immutable.js +10 -3
- package/src/core/optionRequirements.js +8 -0
- package/src/core/programState.js +21 -1
- package/src/core/resourceReferences.js +341 -0
- package/src/core/textMetricProfile.js +28 -0
- package/src/core/textMetrics.js +24 -3
- package/src/core/validation.js +22 -10
- package/src/core/vocabulary.js +16 -3
- package/src/diagnostics.js +1 -0
- 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 +341 -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/scales/types.js +8 -0
- package/src/grammar/schemas/concreteGraphic.js +14 -2
- package/src/grammar/schemas/graphic.js +15 -0
- package/src/grammar/schemas/graphicBounds.js +190 -41
- 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 +351 -7
- package/src/layout/legend.js +4 -4
- package/src/layout/legendItems.js +6 -6
- package/src/layout/text.js +10 -9
- package/src/layout/title.js +9 -9
- 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 +9 -3
- package/src/materialization/facetGuides/preparation.js +13 -8
- package/src/materialization/facetHeaders.js +347 -0
- package/src/materialization/facets.js +15 -65
- package/src/materialization/guides/layout.js +3 -3
- 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/scaleGuideDependencies.js +10 -0
- 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 +20 -5
- 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/materialization/typography.js +31 -0
- package/src/mcp/cli.js +5 -3
- package/src/persistence/codec.js +65 -0
- package/src/persistence/validation.js +185 -0
- package/src/persistence.js +74 -0
- package/src/renderers/canvas/circle.js +2 -3
- package/src/renderers/canvas/index.js +5 -4
- 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/nativeBackend.js +10 -0
- package/src/renderers/options.js +13 -0
- package/src/renderers/pdf.js +25 -54
- package/src/renderers/png.js +22 -17
- package/src/renderers/svg.js +29 -14
- package/src/renderers/text.js +1 -11
- package/src/selectors/coordinates.js +3 -1
- package/src/selectors/datasets.js +38 -5
- package/src/selectors/layers.js +10 -4
- package/src/selectors/markOwners.js +46 -0
- package/src/selectors/scales.js +6 -4
- package/src/theme/defaults.js +103 -1
- package/src/version.js +2 -0
- package/types/accessibility.d.ts +37 -0
- package/types/basic.d.ts +10 -2
- package/types/diagnostics.d.ts +15 -0
- package/types/index.d.ts +90 -0
- package/types/pdf.d.ts +9 -0
- package/types/persistence.d.ts +7 -0
- package/types/png.d.ts +9 -0
- package/types/program.d.ts +944 -118
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,152 @@ All notable changes to `ggaction` are recorded in this file.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## [0.0.16] - 2026-09-14
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Added `reviseData` for immutable original-data revisions that update dependent
|
|
12
|
+
transforms, chart owners, scales, guides, labels, selections, and retained facets.
|
|
13
|
+
- Added `applyTextMetrics` and `removeTextMetrics` for host-measured text layout
|
|
14
|
+
with immutable exact-font profiles, deterministic fallback, composition
|
|
15
|
+
propagation, and wrapped typography rematerialization.
|
|
16
|
+
- Added browser-safe `ggaction/persistence` with versioned editable-program and
|
|
17
|
+
graphic-only snapshots, tagged value preservation, and strict restoration.
|
|
18
|
+
- Added browser-safe `ggaction/accessibility` with immutable final visual data,
|
|
19
|
+
component roles, aggregate/bin/interval values, series, and composition hierarchy.
|
|
20
|
+
- Added `ggaction/diagnostics` to read structured error codes and resource details
|
|
21
|
+
while preserving the original Error, TypeError, or RangeError identity.
|
|
22
|
+
- Added `renderToPNGBuffer` and `renderToPDFBuffer` for Node memory output.
|
|
23
|
+
PNG encoding is asynchronous; Canvas drawing remains synchronous.
|
|
24
|
+
- Added `release:prepare` for reviewable version, changelog, release-contract,
|
|
25
|
+
provenance, and generated-documentation updates without publishing side effects.
|
|
26
|
+
- Added reproducible runtime benchmarks, exhaustive direct-action negative-input
|
|
27
|
+
contracts, semantic authoring evaluations, and cross-platform/browser checks.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- **Installation:** Node rendering and MCP dependencies are now optional peers.
|
|
32
|
+
Canvas/SVG users can install only `ggaction`. Node PNG/PDF users must also install
|
|
33
|
+
`@napi-rs/canvas`; MCP users must also install `@modelcontextprotocol/sdk`.
|
|
34
|
+
Missing backends report the required install command and never auto-install.
|
|
35
|
+
- MCP task packets now use schema version 5. Required options are separate from
|
|
36
|
+
example/configured options, exact calls preserve explicit user choices, and
|
|
37
|
+
unresolved request fragments remain visible. Consumers must check packet versions.
|
|
38
|
+
- Reused owned immutable subtrees, avoided unrelated theme traversal, shared
|
|
39
|
+
persistent trace tails, and cached immutable SVG resource hashes. Mutable
|
|
40
|
+
renderer inputs still recompute their hashes.
|
|
41
|
+
- Reduced Basic browser bundle size through built-in factory tree shaking and
|
|
42
|
+
shared validation/materialization code. Existing browser gzip limits remain.
|
|
43
|
+
- Release verification now distributes one canonical candidate artifact across
|
|
44
|
+
independent source, coverage, package, documentation, platform, browser, and
|
|
45
|
+
weighted realistic-test jobs, then requires a strict successful aggregate.
|
|
46
|
+
- Added a strict realistic-test aggregate check and bounded failure evidence for
|
|
47
|
+
test logs, render differences, and browser screenshots. Verification errors
|
|
48
|
+
retain their original failing status.
|
|
49
|
+
- Consolidated architecture prose around ownership and state flow, with exact
|
|
50
|
+
action behavior linked to current contracts and shared metadata owners.
|
|
51
|
+
|
|
52
|
+
### Fixed
|
|
53
|
+
|
|
54
|
+
- Rejected callable, mutable class-instance, cyclic, and sparse source inputs
|
|
55
|
+
before they could escape immutable ownership or fail during materialization.
|
|
56
|
+
TypeScript source-row declarations now match the runtime data boundary.
|
|
57
|
+
- Rejected unknown options consistently in extension primitives and renderers,
|
|
58
|
+
including PNG, and validated axis coordinate/channel assertions before changes.
|
|
59
|
+
- Corrected padding units for focused scale editors using one canonical registry.
|
|
60
|
+
- Corrected MCP required-option inference, explicit style/scale choices, derived
|
|
61
|
+
owner references, and false-completion reporting for partially understood tasks.
|
|
62
|
+
- Preserved nested facet trace closure and prototype-named keys during snapshot
|
|
63
|
+
round trips, and distinguished live dependencies from reserved optional IDs.
|
|
64
|
+
- Distinguished data and mark identity when revising statistical-reference inputs.
|
|
65
|
+
Inferred grids now follow explicit tick changes without disrupting orientation
|
|
66
|
+
changes that must rematerialize guides in dependency order.
|
|
67
|
+
- Applied the same interval-statistics merge during simultaneous role edits,
|
|
68
|
+
clearing inherited confidence-interval parameters when changing extent.
|
|
69
|
+
- Reused the exact release artifact in installed-package consumers instead of
|
|
70
|
+
silently repacking it, and made development npm/TypeScript invocation portable
|
|
71
|
+
across supported operating systems.
|
|
72
|
+
- Bounded long CSV description memory in realistic test fixtures and synchronized
|
|
73
|
+
their direct action coverage and coordinate options with current contracts.
|
|
74
|
+
|
|
75
|
+
## [0.0.15] - 2026-09-14
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
|
|
79
|
+
- Added independent field-driven stroke color for Point, Line, Area, Bar, Rect,
|
|
80
|
+
Arc, Rule, and Tick marks, including categorical and continuous scales,
|
|
81
|
+
focused scale editing, legends, selections, facets, and renderer parity.
|
|
82
|
+
- Added logarithmic, square-root, power, quantize, quantile, and threshold
|
|
83
|
+
point-size scales with equal-area geometry, focused scale editing, complete
|
|
84
|
+
interval legends, source replay, strict types, and installed-package support.
|
|
85
|
+
|
|
86
|
+
- Added normalization and missing-data workflows with `createNormalizedData`,
|
|
87
|
+
`createCompleteData`, and `createImputedData`. Computed expressions now support
|
|
88
|
+
typed scalar/null results, comparisons, conditions, and short-circuit logic;
|
|
89
|
+
calendar buckets and windows have explicit time and ordering policies.
|
|
90
|
+
- Added immutable derived revision editing: `editDerivedData`, `editComputedData`,
|
|
91
|
+
`editFilteredData`, `editFoldData`, `editSummaryData`, `editBinData`,
|
|
92
|
+
`editTimeUnitData`, `editWindowData`, `editDensityData`, `editStackData`,
|
|
93
|
+
`editRegressionData`, `editIntervalData`, `editECDFData`, `editNormalizedData`,
|
|
94
|
+
`editCompleteData`, and `editImputedData`. An existing descendant rejects an
|
|
95
|
+
edit by default; `dependents: "recompute"` rebuilds the full affected closure.
|
|
96
|
+
- Added focused scale editing with `editXScale`, `editYScale`, `editThetaScale`,
|
|
97
|
+
`editRScale`, `editColorScale`, `editStrokeScale`, `editSizeScale`,
|
|
98
|
+
`editOpacityScale`, `editShapeScale`, `editStrokeWidthScale`,
|
|
99
|
+
`editStrokeDashScale`, `editXOffsetScale`, `editYOffsetScale`, and
|
|
100
|
+
`editParallelScale`. These select the channel owner and replay its consumers.
|
|
101
|
+
- Added `encodeChannels` for atomic multi-channel reassignment; `editCoordinate`
|
|
102
|
+
for Cartesian aspect and Polar frame changes; and `editLegendBlock` for one
|
|
103
|
+
identified block of a composite legend.
|
|
104
|
+
- Added `editMarkLabelSelection`, `editMarkLabelPlacement`, and `removeMarkLabels`.
|
|
105
|
+
Label selection now works on final aggregated items; semantic placement follows
|
|
106
|
+
directed boundaries through source, scale, and layout changes.
|
|
107
|
+
- Added explicit safe removal with `removeData`, `removeScale`, and
|
|
108
|
+
`removeCoordinate`. A live dependency produces an ownership-path error; remove
|
|
109
|
+
or rebind consumers before removing the resource.
|
|
110
|
+
- Added weighted summaries, bins, histogram/KDE authoring and revisions; dynamic
|
|
111
|
+
statistical reference lines/bands; exact sampled legend values; typed display
|
|
112
|
+
label maps; facet-header role/side/alignment controls; custom theme tokens;
|
|
113
|
+
detailed stroke styles, rounded rectangles, and expanded Polar/Parallel facets.
|
|
114
|
+
|
|
115
|
+
### Changed
|
|
116
|
+
|
|
117
|
+
- Clarified the action/program grammar, relative action hierarchy, and
|
|
118
|
+
decision-level atomicity. Catalog role tags are distinguished from action
|
|
119
|
+
delegation and package exposure.
|
|
120
|
+
- Resource removal actions now record their semantic deletions as `editSemantic`
|
|
121
|
+
children. The full extension primitive accepts whole unused source datasets
|
|
122
|
+
and coordinates while retaining dependency guards and immutable snapshots.
|
|
123
|
+
- Point-size ranges represent area across continuous and discrete families.
|
|
124
|
+
Entering a discrete size family requires a destination domain and range;
|
|
125
|
+
repeated field assignments preserve compatible scale settings.
|
|
126
|
+
- Axis, legend, and facet display labels preserve raw category identity. Mapping
|
|
127
|
+
`"KR"` to `"South Korea"` changes visible text while grouping, selection, and
|
|
128
|
+
domain lookup still use `"KR"`. Numeric and UTC formats must match field type.
|
|
129
|
+
- Custom themes supply defaults while explicit mark styles retain precedence.
|
|
130
|
+
Removing a theme restores baseline defaults and retains explicit overrides.
|
|
131
|
+
- Complete guides can be created progressively without duplicating existing
|
|
132
|
+
compatible components. Polar/Parallel repetition retains source recipes and
|
|
133
|
+
rejects unsupported role substitutions explicitly.
|
|
134
|
+
- Documentation now distinguishes released API snapshots from later development,
|
|
135
|
+
provides an exact address and declaration for every action, and executes every
|
|
136
|
+
maintained tutorial and recipe against the packaged module. See
|
|
137
|
+
[migration notes](https://ggaction.github.io/ggaction/version/#migration-from-v0013).
|
|
138
|
+
|
|
139
|
+
### Fixed
|
|
140
|
+
|
|
141
|
+
- Prevented typing immediately after a failed search-index prefetch from sending
|
|
142
|
+
an implicit retry. Each explicit retry now sends one request even when the
|
|
143
|
+
first failure arrives before the input event.
|
|
144
|
+
- Corrected the README's canvas margins for its complete 406-row example and
|
|
145
|
+
documented regression defaults beside the example. The hierarchy tutorial now
|
|
146
|
+
refines its high-level chart and demonstrates a subsequent style revision.
|
|
147
|
+
- Corrected default dumbbell axis titles, direct Rose radius refinement, and stale
|
|
148
|
+
current-guide pointers after removal.
|
|
149
|
+
- Corrected executable examples, API defaults and compatibility descriptions,
|
|
150
|
+
missing gallery/tutorial entries, exact-action search, initial ArrowUp selection,
|
|
151
|
+
filter/TOC synchronization, search retries, and narrow-screen type references.
|
|
152
|
+
|
|
7
153
|
## [0.0.13] - 2026-09-07
|
|
8
154
|
|
|
9
155
|
### Added
|
package/README.md
CHANGED
|
@@ -16,15 +16,14 @@ Every frame is rendered from an immutable `ChartProgram`. The final R² label is
|
|
|
16
16
|
|
|
17
17
|
## A grammar of graphical action
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
An action expresses a design operation on a chart element. In
|
|
20
|
+
`editLineMark({ strokeWidth: 4 })`, `edit` is the operation, `LineMark` names
|
|
21
|
+
the target concept, and the option supplies the design choice.
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
`data · marks · scales · coordinates · guides`
|
|
26
|
-
|
|
27
|
-
A `ChartProgram` is the immutable sentence they produce.
|
|
23
|
+
The grammar has two units: **graphical actions** and **chart programs**.
|
|
24
|
+
A program composes action calls in authoring order and retains their resulting
|
|
25
|
+
immutable state. Authors read a linear sequence of decisions; an action may
|
|
26
|
+
delegate to smaller actions recorded in its nested execution trace.
|
|
28
27
|
|
|
29
28
|
The following fragment assumes `cars` is an array of row objects:
|
|
30
29
|
|
|
@@ -32,7 +31,11 @@ The following fragment assumes `cars` is an array of row objects:
|
|
|
32
31
|
import { chart } from "ggaction";
|
|
33
32
|
|
|
34
33
|
const program = chart()
|
|
35
|
-
.createCanvas(
|
|
34
|
+
.createCanvas({
|
|
35
|
+
width: 760,
|
|
36
|
+
height: 480,
|
|
37
|
+
margin: { top: 40, right: 190, bottom: 70, left: 80 }
|
|
38
|
+
})
|
|
36
39
|
.createData({ values: cars })
|
|
37
40
|
.createScatterPlot({
|
|
38
41
|
id: "points",
|
|
@@ -45,6 +48,12 @@ const program = chart()
|
|
|
45
48
|
.createGuides();
|
|
46
49
|
```
|
|
47
50
|
|
|
51
|
+
Here `createRegression()` infers groups from the point layer, uses a linear
|
|
52
|
+
model, and includes a 95% mean-response interval band. The right margin reserves
|
|
53
|
+
space for the resulting legend. The [regression recipe](https://ggaction.github.io/ggaction/recipes/regression-scatterplot/)
|
|
54
|
+
provides data and rendering setup; [regression options](https://ggaction.github.io/ggaction/api/regression/)
|
|
55
|
+
control grouping, model, interval, and whether a band is drawn.
|
|
56
|
+
|
|
48
57
|
## Why actions?
|
|
49
58
|
|
|
50
59
|
- **Progressive** — build and revise a chart one meaningful operation at a time.
|
|
@@ -80,6 +89,10 @@ Install the current public release:
|
|
|
80
89
|
npm install ggaction
|
|
81
90
|
```
|
|
82
91
|
|
|
92
|
+
For Node PNG/PDF output, also install `@napi-rs/canvas`. For the MCP server,
|
|
93
|
+
also install `@modelcontextprotocol/sdk`. These are optional peer dependencies;
|
|
94
|
+
browser Canvas/SVG users do not need either package.
|
|
95
|
+
|
|
83
96
|
Add the Canvas element that the rendering code targets. Its accessible name and
|
|
84
97
|
fallback text summarize the chart for contexts where Canvas pixels are not
|
|
85
98
|
available:
|
|
@@ -157,7 +170,7 @@ automatic undo stack; the application chooses which to retain or render.
|
|
|
157
170
|
|
|
158
171
|
Use `createLinePlot`, `createBarPlot`, `createHistogram`, and `createHeatmap` for
|
|
159
172
|
the other basic Cartesian charts. The `ggaction/basic` entry keeps this common
|
|
160
|
-
creation path at or below the current
|
|
173
|
+
creation path at or below the current 175,000-byte gzip regression ceiling while
|
|
161
174
|
each facade still records its mark, encoding, and guide actions as trace
|
|
162
175
|
children. Import from
|
|
163
176
|
`ggaction` when you need editing, selection, composition, alternative
|
|
@@ -202,11 +215,14 @@ The package is ESM-only and requires Node.js 20 or later.
|
|
|
202
215
|
| `ggaction/extension` | Author and register wrapped actions with public low-level primitives |
|
|
203
216
|
| `ggaction/png` | Render a completed program to a PNG file in Node.js |
|
|
204
217
|
| `ggaction/pdf` | Render a completed program to a single-page vector PDF file in Node.js |
|
|
218
|
+
| `ggaction/persistence` | Save and restore editable programs or graphic snapshots in Browser or Node |
|
|
219
|
+
| `ggaction/accessibility` | Export final visual data for host-provided accessible tables and descriptions |
|
|
220
|
+
| `ggaction/diagnostics` | Read structured error codes and resource details in Browser or Node |
|
|
205
221
|
| `ggaction/svg` | Serialize a completed program to browser-safe SVG |
|
|
206
222
|
| `ggaction-mcp` | Run the local read-only MCP authoring server over stdio in Node.js |
|
|
207
223
|
|
|
208
224
|
All module entries include TypeScript declarations. The default, basic,
|
|
209
|
-
extension, and SVG entries are browser-safe; the PNG and PDF adapters are
|
|
225
|
+
extension, diagnostics, accessibility, and SVG entries are browser-safe; the PNG and PDF adapters are
|
|
210
226
|
Node-only.
|
|
211
227
|
|
|
212
228
|
The installed package also includes the Node-only `ggaction-mcp` executable. It
|
|
@@ -231,7 +247,7 @@ the extra discussion required before public API or architecture changes.
|
|
|
231
247
|
|
|
232
248
|
## Status and development
|
|
233
249
|
|
|
234
|
-
> **Status:** `0.0.
|
|
250
|
+
> **Status:** `0.0.16` is the current experimental public release. APIs may change before `1.0.0`; changes are recorded in the [changelog](./CHANGELOG.md).
|
|
235
251
|
|
|
236
252
|
```bash
|
|
237
253
|
npm install
|
|
@@ -244,3 +260,16 @@ npm run test:docs
|
|
|
244
260
|
## Related Links
|
|
245
261
|
|
|
246
262
|
- Action-trace demo: [Link](https://ggactionbot.github.io/action-trace-demo/)
|
|
263
|
+
|
|
264
|
+
### Prepare a release
|
|
265
|
+
|
|
266
|
+
Record changes under `Unreleased` in `CHANGELOG.md` and commit the reviewed work.
|
|
267
|
+
Run `npm run release:prepare -- 0.0.16 --dry-run` to preview version updates.
|
|
268
|
+
Omit `--dry-run` to update versions, promote notes, and generate the release
|
|
269
|
+
contract, documentation, and local notes. Review the Git diff. After committing
|
|
270
|
+
runtime changes, rerun the command to refresh source provenance; existing notes
|
|
271
|
+
and their date are preserved.
|
|
272
|
+
|
|
273
|
+
Preparation does not commit, push, tag, publish, or deploy. Integration and required
|
|
274
|
+
PR checks precede an annotated tag. The protected workflow verifies and publishes
|
|
275
|
+
one candidate from that tag. Generation failures leave an unfinished diff to review.
|