ggaction 0.0.12 → 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 (378) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/README.md +20 -11
  3. package/knowledge/action-card.schema.json +1 -1
  4. package/knowledge/action-cards.json +1 -1
  5. package/knowledge/action-cards.schema.json +1 -1
  6. package/knowledge/extension-authoring.md +2 -1
  7. package/knowledge/intent-taxonomy.json +1 -1
  8. package/knowledge/mcp-resources.json +1 -1
  9. package/knowledge/task-resolver.js +1 -1
  10. package/package.json +10 -3
  11. package/src/actions/basic.js +4 -2
  12. package/src/actions/boxPlots/components.js +14 -4
  13. package/src/actions/boxPlots/edit.js +31 -5
  14. package/src/actions/boxPlots/materialize.js +13 -4
  15. package/src/actions/boxPlots/options.js +48 -16
  16. package/src/actions/canvas/actions.js +3 -1
  17. package/src/actions/canvas/fitting.js +211 -0
  18. package/src/actions/canvas/index.js +2 -0
  19. package/src/actions/categoryOrder/index.js +18 -6
  20. package/src/actions/charts/area.js +51 -0
  21. package/src/actions/charts/bar.js +13 -6
  22. package/src/actions/charts/beeswarm.js +70 -0
  23. package/src/actions/charts/density.js +48 -0
  24. package/src/actions/charts/ecdf.js +186 -0
  25. package/src/actions/charts/endpoints.js +473 -0
  26. package/src/actions/charts/heatmap.js +4 -3
  27. package/src/actions/charts/histogram.js +5 -4
  28. package/src/actions/charts/horizon.js +73 -0
  29. package/src/actions/charts/index.js +37 -0
  30. package/src/actions/charts/interval-regression.js +172 -0
  31. package/src/actions/charts/line.js +8 -6
  32. package/src/actions/charts/parallel.js +8 -2
  33. package/src/actions/charts/pie.js +52 -0
  34. package/src/actions/charts/polar.js +134 -0
  35. package/src/actions/charts/radar.js +305 -0
  36. package/src/actions/charts/radial.js +50 -0
  37. package/src/actions/charts/raincloud.js +422 -0
  38. package/src/actions/charts/rug-strip.js +283 -0
  39. package/src/actions/charts/scatter.js +11 -3
  40. package/src/actions/charts/shared.js +69 -10
  41. package/src/actions/composition/actions.js +129 -3
  42. package/src/actions/coordinates/actions.js +1 -1
  43. package/src/actions/coordinates/edit.js +76 -0
  44. package/src/actions/data/bin.js +29 -0
  45. package/src/actions/data/bin2d.js +57 -185
  46. package/src/actions/data/complete.js +26 -0
  47. package/src/actions/data/computed.js +24 -0
  48. package/src/actions/data/create.js +2 -2
  49. package/src/actions/data/density.js +12 -20
  50. package/src/actions/data/derived.js +111 -15
  51. package/src/actions/data/ecdf.js +38 -0
  52. package/src/actions/data/edit.js +539 -0
  53. package/src/actions/data/filter.js +226 -30
  54. package/src/actions/data/fold.js +24 -0
  55. package/src/actions/data/impute.js +26 -0
  56. package/src/actions/data/index.js +38 -0
  57. package/src/actions/data/interval.js +2 -0
  58. package/src/actions/data/intervalEdit.js +86 -4
  59. package/src/actions/data/normalize.js +27 -0
  60. package/src/actions/data/regression.js +19 -21
  61. package/src/actions/data/revisionBindings.js +145 -0
  62. package/src/actions/data/shared.js +20 -4
  63. package/src/actions/data/stack.js +26 -0
  64. package/src/actions/data/summary.js +26 -0
  65. package/src/actions/data/timeUnit.js +4 -1
  66. package/src/actions/data/window.js +1 -1
  67. package/src/actions/encodings/appearance.js +32 -13
  68. package/src/actions/encodings/barWidth.js +8 -0
  69. package/src/actions/encodings/basic.js +2 -0
  70. package/src/actions/encodings/channels.js +415 -0
  71. package/src/actions/encodings/color/continuous.js +19 -59
  72. package/src/actions/encodings/color/index.js +30 -23
  73. package/src/actions/encodings/color/layout.js +3 -97
  74. package/src/actions/encodings/color/policy.js +5 -8
  75. package/src/actions/encodings/density/resolve.js +37 -5
  76. package/src/actions/encodings/density.js +124 -34
  77. package/src/actions/encodings/histogram.js +3 -2
  78. package/src/actions/encodings/horizon/resolve.js +8 -4
  79. package/src/actions/encodings/horizon.js +18 -8
  80. package/src/actions/encodings/index.js +6 -0
  81. package/src/actions/encodings/offset.js +30 -29
  82. package/src/actions/encodings/parallel.js +2 -8
  83. package/src/actions/encodings/position/apply.js +63 -11
  84. package/src/actions/encodings/position/index.js +52 -6
  85. package/src/actions/encodings/position/policies/arc.js +14 -0
  86. package/src/actions/encodings/position/policies/area.js +4 -42
  87. package/src/actions/encodings/position/policies/bar.js +57 -13
  88. package/src/actions/encodings/position/resolve.js +88 -26
  89. package/src/actions/encodings/ranged.js +123 -97
  90. package/src/actions/encodings/remove.js +44 -34
  91. package/src/actions/encodings/ruleAppearance.js +24 -32
  92. package/src/actions/encodings/seriesLayout.js +105 -0
  93. package/src/actions/encodings/shared.js +107 -37
  94. package/src/actions/encodings/stroke.js +226 -0
  95. package/src/actions/encodings/strokeDash.js +9 -6
  96. package/src/actions/encodings/temporal.js +7 -0
  97. package/src/actions/encodings/text.js +30 -15
  98. package/src/actions/errorBands/create.js +41 -8
  99. package/src/actions/errorBands/edit.js +360 -25
  100. package/src/actions/errorBars/create.js +56 -17
  101. package/src/actions/errorBars/edit.js +372 -21
  102. package/src/actions/facets/actions.js +619 -41
  103. package/src/actions/facets/derive.js +139 -25
  104. package/src/actions/gradientPlots/components.js +43 -13
  105. package/src/actions/gradientPlots/edit.js +14 -4
  106. package/src/actions/gradientPlots/materialize.js +8 -8
  107. package/src/actions/gradientPlots/options.js +10 -2
  108. package/src/actions/guides/applicability.js +28 -19
  109. package/src/actions/guides/axes/axes.js +4 -3
  110. package/src/actions/guides/axes/axis.js +18 -18
  111. package/src/actions/guides/axes/components.js +43 -0
  112. package/src/actions/guides/axes/edit.js +16 -51
  113. package/src/actions/guides/axes/labels.js +184 -28
  114. package/src/actions/guides/axes/lines.js +13 -7
  115. package/src/actions/guides/axes/parallel/lifecycle.js +117 -0
  116. package/src/actions/guides/axes/parallel/policy.js +137 -0
  117. package/src/actions/guides/axes/parallel/resolve.js +50 -25
  118. package/src/actions/guides/axes/parallel.js +93 -217
  119. package/src/actions/guides/axes/policy.js +21 -67
  120. package/src/actions/guides/axes/tickGroups.js +15 -8
  121. package/src/actions/guides/axes/ticks.js +11 -6
  122. package/src/actions/guides/axes/titles.js +32 -11
  123. package/src/actions/guides/basic.js +2 -0
  124. package/src/actions/guides/facade.js +106 -0
  125. package/src/actions/guides/facadeAxes.js +200 -0
  126. package/src/actions/guides/facadeLegend.js +63 -0
  127. package/src/actions/guides/grids/grid.js +37 -33
  128. package/src/actions/guides/grids/resolve.js +17 -4
  129. package/src/actions/guides/guides.js +54 -31
  130. package/src/actions/guides/legends/blocks.js +426 -0
  131. package/src/actions/guides/legends/categorical/actions.js +309 -279
  132. package/src/actions/guides/legends/categorical/components.js +21 -17
  133. package/src/actions/guides/legends/categorical/index.js +37 -33
  134. package/src/actions/guides/legends/categorical/layout.js +123 -354
  135. package/src/actions/guides/legends/categorical/options.js +32 -16
  136. package/src/actions/guides/legends/categorical/recipes.js +114 -9
  137. package/src/actions/guides/legends/categorical/resolve.js +30 -15
  138. package/src/actions/guides/legends/categorical/symbols.js +87 -33
  139. package/src/actions/guides/legends/continuous/common.js +99 -26
  140. package/src/actions/guides/legends/continuous/gradient.js +120 -89
  141. package/src/actions/guides/legends/continuous/index.js +8 -2
  142. package/src/actions/guides/legends/continuous/interval.js +79 -95
  143. package/src/actions/guides/legends/continuous/opacity.js +113 -89
  144. package/src/actions/guides/legends/continuous/stroke.js +525 -0
  145. package/src/actions/guides/legends/creation.js +40 -0
  146. package/src/actions/guides/legends/edit.js +321 -90
  147. package/src/actions/guides/legends/focused.js +2 -2
  148. package/src/actions/guides/legends/index.js +2 -0
  149. package/src/actions/guides/legends/lane.js +149 -102
  150. package/src/actions/guides/legends/lifecycle.js +143 -0
  151. package/src/actions/guides/legends/remove.js +43 -78
  152. package/src/actions/guides/legends/sampling.js +140 -0
  153. package/src/actions/guides/legends/size.js +213 -116
  154. package/src/actions/guides/legends/strokeWidth.js +121 -73
  155. package/src/actions/guides/legends/target.js +123 -0
  156. package/src/actions/guides/legends/transition.js +192 -0
  157. package/src/actions/guides/polar/axes/facade.js +81 -66
  158. package/src/actions/guides/polar/axes/labels.js +28 -8
  159. package/src/actions/guides/polar/axes/lines.js +12 -5
  160. package/src/actions/guides/polar/axes/shared.js +22 -0
  161. package/src/actions/guides/polar/axes/ticks.js +6 -5
  162. package/src/actions/guides/polar/axes/titles.js +6 -5
  163. package/src/actions/guides/polar/grids.js +8 -8
  164. package/src/actions/guides/polar/resolve.js +12 -8
  165. package/src/actions/guides/reuse.js +44 -0
  166. package/src/actions/guides/tickValues.js +19 -21
  167. package/src/actions/index.js +15 -2
  168. package/src/actions/intervals/resolve.js +35 -15
  169. package/src/actions/marks/arc/actions.js +78 -20
  170. package/src/actions/marks/area/actions.js +51 -12
  171. package/src/actions/marks/area/materialize.js +22 -3
  172. package/src/actions/marks/bar/create.js +11 -2
  173. package/src/actions/marks/bar/edit.js +20 -3
  174. package/src/actions/marks/bar/materialize.js +33 -9
  175. package/src/actions/marks/index.js +14 -0
  176. package/src/actions/marks/line/actions.js +71 -113
  177. package/src/actions/marks/line/materialize.js +57 -56
  178. package/src/actions/marks/point/create.js +8 -2
  179. package/src/actions/marks/point/edit.js +29 -21
  180. package/src/actions/marks/point/index.js +1 -0
  181. package/src/actions/marks/point/jitter.js +3 -0
  182. package/src/actions/marks/point/materialize.js +154 -16
  183. package/src/actions/marks/point/packing.js +68 -0
  184. package/src/actions/marks/rect/actions.js +33 -12
  185. package/src/actions/marks/references.js +658 -0
  186. package/src/actions/marks/remove.js +87 -4
  187. package/src/actions/marks/rule/actions.js +77 -9
  188. package/src/actions/marks/rule/appearance.js +26 -0
  189. package/src/actions/marks/shared.js +13 -13
  190. package/src/actions/marks/text/actions.js +296 -13
  191. package/src/actions/marks/text/index.js +4 -0
  192. package/src/actions/marks/text/layout.js +156 -8
  193. package/src/actions/marks/text/removal.js +173 -0
  194. package/src/actions/marks/text/selection.js +73 -0
  195. package/src/actions/marks/tick/actions.js +22 -5
  196. package/src/actions/primitives/createGraphics.js +3 -1
  197. package/src/actions/primitives/editGraphics.js +26 -0
  198. package/src/actions/primitives/semantic.js +3 -2
  199. package/src/actions/primitives/semanticAction.js +120 -10
  200. package/src/actions/primitives/semanticValidation/guide.js +10 -0
  201. package/src/actions/primitives/semanticValidation/index.js +9 -1
  202. package/src/actions/primitives/semanticValidation/layer.js +23 -1
  203. package/src/actions/primitives/semanticValidation/scale.js +38 -8
  204. package/src/actions/regression/components.js +26 -11
  205. package/src/actions/regression/create.js +11 -3
  206. package/src/actions/regression/edit.js +40 -13
  207. package/src/actions/regression/resolve.js +1 -1
  208. package/src/actions/resources/index.js +7 -0
  209. package/src/actions/resources/remove.js +172 -0
  210. package/src/actions/scales/channels.js +212 -0
  211. package/src/actions/scales/consumers/common.js +21 -54
  212. package/src/actions/scales/consumers/families.js +28 -14
  213. package/src/actions/scales/consumers/index.js +42 -4
  214. package/src/actions/scales/consumers/seriesLayout.js +57 -12
  215. package/src/actions/scales/create.js +58 -26
  216. package/src/actions/scales/definitions.js +109 -39
  217. package/src/actions/scales/edit.js +101 -34
  218. package/src/actions/scales/editPolicy.js +95 -35
  219. package/src/actions/scales/index.js +6 -0
  220. package/src/actions/scales/materialize.js +14 -49
  221. package/src/actions/scales/offset.js +48 -0
  222. package/src/actions/scales/parallel.js +71 -0
  223. package/src/actions/scales/patch.js +1 -1
  224. package/src/actions/scales/preview.js +140 -0
  225. package/src/actions/scales/quantitativeColor.js +9 -5
  226. package/src/actions/selection/actions.js +154 -30
  227. package/src/actions/selection/index.js +3 -0
  228. package/src/actions/theme/actions.js +98 -0
  229. package/src/actions/theme/composition.js +238 -0
  230. package/src/actions/theme/index.js +16 -0
  231. package/src/actions/theme/reconcile.js +1130 -0
  232. package/src/actions/theme/state.js +160 -0
  233. package/src/actions/titles/actions.js +11 -10
  234. package/src/actions/titles/resolve.js +1 -40
  235. package/src/actions/violinPlots/create.js +90 -43
  236. package/src/actions/violinPlots/edit.js +192 -0
  237. package/src/actions/violinPlots/index.js +2 -0
  238. package/src/core/ChartProgram.js +7 -0
  239. package/src/core/action.js +32 -2
  240. package/src/core/compositionState.js +141 -8
  241. package/src/core/programState.js +20 -0
  242. package/src/core/resourceReferences.js +332 -0
  243. package/src/core/vocabulary.js +16 -3
  244. package/src/grammar/aggregate.js +66 -23
  245. package/src/grammar/arcs.js +58 -1
  246. package/src/grammar/areaEndpoints.js +46 -0
  247. package/src/grammar/areaSeries.js +87 -41
  248. package/src/grammar/bars/aggregate.js +37 -13
  249. package/src/grammar/bars/geometry.js +44 -0
  250. package/src/grammar/bars/policy.js +9 -7
  251. package/src/grammar/bin.js +226 -0
  252. package/src/grammar/categoryOrder.js +34 -0
  253. package/src/grammar/complete.js +279 -0
  254. package/src/grammar/computed.js +351 -0
  255. package/src/grammar/coordinates.js +37 -0
  256. package/src/grammar/density.js +239 -37
  257. package/src/grammar/displayLabels.js +57 -0
  258. package/src/grammar/ecdf.js +198 -0
  259. package/src/grammar/facets/dependencies.js +133 -1
  260. package/src/grammar/facets/guides.js +3 -0
  261. package/src/grammar/facets/index.js +123 -52
  262. package/src/grammar/facets/scales.js +15 -18
  263. package/src/grammar/fold.js +123 -0
  264. package/src/grammar/horizon.js +6 -4
  265. package/src/grammar/impute.js +340 -0
  266. package/src/grammar/interval.js +37 -20
  267. package/src/grammar/lineSeries.js +20 -63
  268. package/src/grammar/markFilter.js +22 -4
  269. package/src/grammar/markLabelSelection.js +57 -0
  270. package/src/grammar/markLabels.js +110 -0
  271. package/src/grammar/normalize.js +366 -0
  272. package/src/grammar/parallelAxisTitles.js +16 -0
  273. package/src/grammar/pathSeries.js +109 -0
  274. package/src/grammar/pointPacking.js +183 -0
  275. package/src/grammar/pointShapes.js +13 -4
  276. package/src/grammar/polar.js +90 -8
  277. package/src/grammar/positionDatum.js +12 -0
  278. package/src/grammar/rects.js +9 -1
  279. package/src/grammar/regression/derive.js +4 -0
  280. package/src/grammar/regression/index.js +8 -2
  281. package/src/grammar/regression/models.js +22 -7
  282. package/src/grammar/regression/parameters.js +63 -13
  283. package/src/grammar/rotation.js +29 -0
  284. package/src/grammar/roundedRect.js +180 -0
  285. package/src/grammar/rules.js +8 -21
  286. package/src/grammar/scales/color.js +23 -1
  287. package/src/grammar/scales/colorConsumers.js +57 -0
  288. package/src/grammar/scales/continuous.js +2 -2
  289. package/src/grammar/scales/definition.js +42 -5
  290. package/src/grammar/scales/discretized.js +11 -5
  291. package/src/grammar/scales/fields.js +38 -8
  292. package/src/grammar/scales/index.js +1 -0
  293. package/src/grammar/scales/mapping.js +2 -0
  294. package/src/grammar/scales/ordinal.js +12 -3
  295. package/src/grammar/scales/policies.js +2 -2
  296. package/src/grammar/scales/radial.js +55 -0
  297. package/src/grammar/scales/size.js +456 -0
  298. package/src/grammar/scales/types.js +1 -0
  299. package/src/grammar/schemas/concreteGraphic.js +14 -2
  300. package/src/grammar/schemas/graphic.js +15 -0
  301. package/src/grammar/schemas/graphicBounds.js +179 -30
  302. package/src/grammar/schemas/semanticPath.js +23 -4
  303. package/src/grammar/stack.js +170 -0
  304. package/src/grammar/statisticalReference.js +103 -0
  305. package/src/grammar/statistics/confidenceInterval.js +101 -0
  306. package/src/grammar/strokeStyle.js +77 -0
  307. package/src/grammar/summary.js +245 -0
  308. package/src/grammar/text.js +22 -16
  309. package/src/grammar/timeUnit.js +234 -13
  310. package/src/grammar/transformTopology.js +10 -0
  311. package/src/grammar/transforms.js +418 -16
  312. package/src/grammar/valueFormat.js +112 -0
  313. package/src/grammar/weightedStatistics.js +374 -0
  314. package/src/grammar/window.js +232 -21
  315. package/src/layout/aspect.js +80 -0
  316. package/src/layout/facets.js +100 -12
  317. package/src/layout/guideCollisions.js +12 -0
  318. package/src/layout/labels.js +343 -0
  319. package/src/layout/legend.js +2 -10
  320. package/src/layout/legendItems.js +102 -0
  321. package/src/layout/legendLane.js +100 -11
  322. package/src/materialization/bars/aggregate.js +56 -147
  323. package/src/materialization/bars/histogram.js +104 -20
  324. package/src/materialization/bars/ranged.js +19 -3
  325. package/src/materialization/bars/resolve.js +7 -4
  326. package/src/materialization/categorySlotOffset.js +40 -0
  327. package/src/materialization/composition.js +3 -1
  328. package/src/materialization/compositionSnapshot.js +1 -1
  329. package/src/materialization/coordinateBounds.js +204 -0
  330. package/src/materialization/dependencies.js +93 -16
  331. package/src/materialization/encodings.js +1 -1
  332. package/src/materialization/facetGuides/legacyCategorical.js +3 -0
  333. package/src/materialization/facetGuides/placement.js +8 -2
  334. package/src/materialization/facetGuides/preparation.js +12 -7
  335. package/src/materialization/facetHeaders.js +346 -0
  336. package/src/materialization/facets.js +23 -66
  337. package/src/materialization/guides/layout.js +57 -0
  338. package/src/materialization/guides/resources.js +28 -2
  339. package/src/materialization/legends.js +11 -2
  340. package/src/materialization/marks/capabilities.js +20 -5
  341. package/src/materialization/marks/grouping.js +52 -0
  342. package/src/materialization/marks/index.js +68 -27
  343. package/src/materialization/marks/policies.js +4 -1
  344. package/src/materialization/rect.js +55 -42
  345. package/src/materialization/rectConfig.js +5 -1
  346. package/src/materialization/rowEncoding.js +13 -13
  347. package/src/materialization/scaleGuideDependencies.js +8 -5
  348. package/src/materialization/scales/map.js +6 -3
  349. package/src/materialization/scales/policies/arc.js +42 -0
  350. package/src/materialization/scales/policies/binnedPosition.js +7 -4
  351. package/src/materialization/scales/policies/offset.js +50 -8
  352. package/src/materialization/scales/policies/series.js +5 -1
  353. package/src/materialization/scales/resolve.js +65 -17
  354. package/src/materialization/selection/compatibility.js +11 -0
  355. package/src/materialization/selection/items/arc.js +28 -4
  356. package/src/materialization/selection/items/bar.js +42 -71
  357. package/src/materialization/selection/items/common.js +27 -6
  358. package/src/materialization/selection/items/path.js +3 -13
  359. package/src/materialization/selection/items/rect.js +35 -8
  360. package/src/materialization/selection/path.js +1 -1
  361. package/src/materialization/selection/point.js +3 -1
  362. package/src/materialization/text.js +324 -14
  363. package/src/mcp/adapter.js +2 -2
  364. package/src/renderers/canvas/circle.js +2 -3
  365. package/src/renderers/canvas/line.js +2 -3
  366. package/src/renderers/canvas/native.js +4 -4
  367. package/src/renderers/canvas/path.js +2 -3
  368. package/src/renderers/canvas/rect.js +2 -3
  369. package/src/renderers/canvas/stroke.js +11 -0
  370. package/src/renderers/svg.js +19 -0
  371. package/src/selectors/datasets.js +44 -0
  372. package/src/selectors/layers.js +7 -2
  373. package/src/selectors/scales.js +6 -0
  374. package/src/theme/defaults.js +140 -0
  375. package/types/basic.d.ts +17 -2
  376. package/types/index.d.ts +211 -0
  377. package/types/program.d.ts +2182 -204
  378. package/src/materialization/bars/grouped.js +0 -144
package/CHANGELOG.md CHANGED
@@ -4,6 +4,132 @@ All notable changes to `ggaction` are recorded in this file.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## [0.0.15] - 2026-09-14
8
+
9
+ ### Added
10
+
11
+ - Added independent field-driven stroke color for Point, Line, Area, Bar, Rect,
12
+ Arc, Rule, and Tick marks, including categorical and continuous scales,
13
+ focused scale editing, legends, selections, facets, and renderer parity.
14
+ - Added logarithmic, square-root, power, quantize, quantile, and threshold
15
+ point-size scales with equal-area geometry, focused scale editing, complete
16
+ interval legends, source replay, strict types, and installed-package support.
17
+
18
+ - Added normalization and missing-data workflows with `createNormalizedData`,
19
+ `createCompleteData`, and `createImputedData`. Computed expressions now support
20
+ typed scalar/null results, comparisons, conditions, and short-circuit logic;
21
+ calendar buckets and windows have explicit time and ordering policies.
22
+ - Added immutable derived revision editing: `editDerivedData`, `editComputedData`,
23
+ `editFilteredData`, `editFoldData`, `editSummaryData`, `editBinData`,
24
+ `editTimeUnitData`, `editWindowData`, `editDensityData`, `editStackData`,
25
+ `editRegressionData`, `editIntervalData`, `editECDFData`, `editNormalizedData`,
26
+ `editCompleteData`, and `editImputedData`. An existing descendant rejects an
27
+ edit by default; `dependents: "recompute"` rebuilds the full affected closure.
28
+ - Added focused scale editing with `editXScale`, `editYScale`, `editThetaScale`,
29
+ `editRScale`, `editColorScale`, `editStrokeScale`, `editSizeScale`,
30
+ `editOpacityScale`, `editShapeScale`, `editStrokeWidthScale`,
31
+ `editStrokeDashScale`, `editXOffsetScale`, `editYOffsetScale`, and
32
+ `editParallelScale`. These select the channel owner and replay its consumers.
33
+ - Added `encodeChannels` for atomic multi-channel reassignment; `editCoordinate`
34
+ for Cartesian aspect and Polar frame changes; and `editLegendBlock` for one
35
+ identified block of a composite legend.
36
+ - Added `editMarkLabelSelection`, `editMarkLabelPlacement`, and `removeMarkLabels`.
37
+ Label selection now works on final aggregated items; semantic placement follows
38
+ directed boundaries through source, scale, and layout changes.
39
+ - Added explicit safe removal with `removeData`, `removeScale`, and
40
+ `removeCoordinate`. A live dependency produces an ownership-path error; remove
41
+ or rebind consumers before removing the resource.
42
+ - Added weighted summaries, bins, histogram/KDE authoring and revisions; dynamic
43
+ statistical reference lines/bands; exact sampled legend values; typed display
44
+ label maps; facet-header role/side/alignment controls; custom theme tokens;
45
+ detailed stroke styles, rounded rectangles, and expanded Polar/Parallel facets.
46
+
47
+ ### Changed
48
+
49
+ - Clarified the action/program grammar, relative action hierarchy, and
50
+ decision-level atomicity. Catalog role tags are distinguished from action
51
+ delegation and package exposure.
52
+ - Resource removal actions now record their semantic deletions as `editSemantic`
53
+ children. The full extension primitive accepts whole unused source datasets
54
+ and coordinates while retaining dependency guards and immutable snapshots.
55
+ - Point-size ranges represent area across continuous and discrete families.
56
+ Entering a discrete size family requires a destination domain and range;
57
+ repeated field assignments preserve compatible scale settings.
58
+ - Axis, legend, and facet display labels preserve raw category identity. Mapping
59
+ `"KR"` to `"South Korea"` changes visible text while grouping, selection, and
60
+ domain lookup still use `"KR"`. Numeric and UTC formats must match field type.
61
+ - Custom themes supply defaults while explicit mark styles retain precedence.
62
+ Removing a theme restores baseline defaults and retains explicit overrides.
63
+ - Complete guides can be created progressively without duplicating existing
64
+ compatible components. Polar/Parallel repetition retains source recipes and
65
+ rejects unsupported role substitutions explicitly.
66
+ - Documentation now distinguishes released API snapshots from later development,
67
+ provides an exact address and declaration for every action, and executes every
68
+ maintained tutorial and recipe against the packaged module. See
69
+ [migration notes](https://ggaction.github.io/ggaction/version/#migration-from-v0013).
70
+
71
+ ### Fixed
72
+
73
+ - Prevented typing immediately after a failed search-index prefetch from sending
74
+ an implicit retry. Each explicit retry now sends one request even when the
75
+ first failure arrives before the input event.
76
+ - Corrected the README's canvas margins for its complete 406-row example and
77
+ documented regression defaults beside the example. The hierarchy tutorial now
78
+ refines its high-level chart and demonstrates a subsequent style revision.
79
+ - Corrected default dumbbell axis titles, direct Rose radius refinement, and stale
80
+ current-guide pointers after removal.
81
+ - Corrected executable examples, API defaults and compatibility descriptions,
82
+ missing gallery/tutorial entries, exact-action search, initial ArrowUp selection,
83
+ filter/TOC synchronization, search retries, and narrow-screen type references.
84
+
85
+ ## [0.0.13] - 2026-09-07
86
+
87
+ ### Added
88
+
89
+ - Added complete Pie/Donut, Area, Density, Horizon, Polar scatter and line,
90
+ Radar, Rug, Strip, Beeswarm, Raincloud, Interval, Regression, Dot,
91
+ Lollipop, Dumbbell, ECDF, Rose, and Radial Bar authoring families. Each
92
+ facade composes the same public data, mark, encoding, scale, guide, and
93
+ primitive actions available for lower-level authoring.
94
+ - Added reusable summary, bin, fold, computed, stack, interval, and ECDF data
95
+ actions, plus immutable mark-data binding, filter removal, statistical-role
96
+ editing, deterministic point packing, and composite owner revision.
97
+ - Added complete Cartesian, Polar, and Parallel component lifecycles; focused
98
+ legend content and layout editing; final-item labels; reference lines and
99
+ bands; annotations; shared formatting and explicit rotation units; program
100
+ themes; and opt-in Canvas fitting.
101
+ - Added row-by-column facet grids, field repetition, whole-facet source
102
+ revision, and stable named-child insertion, removal, and reordering for
103
+ compositions.
104
+ - Added action-card schema v3 for all 234 direct actions, with H0-H4 authoring
105
+ roles, observed direct-child relationships, direct editors, package entry
106
+ support, units, inference rules, and completion requirements.
107
+
108
+ ### Changed
109
+
110
+ - Made complete-chart defaults and guide reuse compose predictably with
111
+ existing data, scales, coordinates, and explicitly authored guides while
112
+ retaining atomic errors for incompatible resources.
113
+ - Separated series identity from color and other appearance, made temporal
114
+ input units explicit, preserved JSON group opt-outs, and exposed persistent
115
+ source, role, order, layout, theme, and guide recipes for rematerialization.
116
+ - Expanded generated discovery, documentation, browser examples, renderer
117
+ evidence, installed-package checks, and the realistic corpus to cover the
118
+ complete 234-action hierarchy and its supported lifecycle combinations.
119
+
120
+ ### Fixed
121
+
122
+ - Corrected horizontal Bar role inference and temporal declarations,
123
+ definition-only dataset diagnostics, Point and Bar stroke declarations,
124
+ internal action inventory coverage, and false-complete MCP chart results.
125
+ - Prevented unrelated scales, guides, coordinates, or ambiguous resources from
126
+ being selected by authoring order, and preserved immutable rollback when a
127
+ data, role, scale, guide, selection, or composition revision is invalid.
128
+ - Corrected Polar and radial measurement semantics, categorical and continuous
129
+ legend layout, hidden-title bounds, scale-family transitions, midpoint
130
+ mapping, text ownership, datum spans, numeric formatting, and replay after
131
+ Canvas, data, scale, filter, or theme changes.
132
+
7
133
  ## [0.0.12] - 2026-09-03
8
134
 
9
135
  ### Added
@@ -309,6 +435,7 @@ All notable changes to `ggaction` are recorded in this file.
309
435
  - Cartesian charts are the complete current path. Polar semantic tokens exist only where explicitly documented and do
310
436
  not imply complete polar rendering.
311
437
 
438
+ [0.0.13]: https://github.com/ggaction/ggaction/releases/tag/v0.0.13
312
439
  [0.0.12]: https://github.com/ggaction/ggaction/releases/tag/v0.0.12
313
440
  [0.0.11]: https://github.com/ggaction/ggaction/releases/tag/v0.0.11
314
441
  [0.0.10]: https://github.com/ggaction/ggaction/releases/tag/v0.0.10
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
- Actions are verbs:
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
- `create · transform · encode · edit · select · compose`
22
-
23
- Chart resources are nouns:
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.
@@ -157,7 +166,7 @@ automatic undo stack; the application chooses which to retain or render.
157
166
 
158
167
  Use `createLinePlot`, `createBarPlot`, `createHistogram`, and `createHeatmap` for
159
168
  the other basic Cartesian charts. The `ggaction/basic` entry keeps this common
160
- creation path at or below the current 125,000-byte gzip regression ceiling while
169
+ creation path at or below the current 175,000-byte gzip regression ceiling while
161
170
  each facade still records its mark, encoding, and guide actions as trace
162
171
  children. Import from
163
172
  `ggaction` when you need editing, selection, composition, alternative
@@ -231,7 +240,7 @@ the extra discussion required before public API or architecture changes.
231
240
 
232
241
  ## Status and development
233
242
 
234
- > **Status:** `0.0.12` is the current experimental public release. APIs may change before `1.0.0`; changes are recorded in the [changelog](./CHANGELOG.md).
243
+ > **Status:** `0.0.15` is the current experimental public release. APIs may change before `1.0.0`; changes are recorded in the [changelog](./CHANGELOG.md).
235
244
 
236
245
  ```bash
237
246
  npm install
@@ -1 +1 @@
1
- {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://ggaction.github.io/ggaction/schemas/action-card.schema.json","title":"ggaction compact action card","type":"object","additionalProperties":false,"required":["schemaVersion","name","layer","domain","summary","signature","intents","lifecycle","resources","options","callPatterns","snippet","errors","route"],"properties":{"schemaVersion":{"const":2},"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]*$"},"layer":{"enum":["user-facing","advanced","primitive"]},"domain":{"type":"string","minLength":1},"summary":{"type":"string","minLength":20,"maxLength":420},"signature":{"type":"string","minLength":10},"intents":{"type":"array","minItems":3,"maxItems":7,"uniqueItems":true,"items":{"type":"string","minLength":2,"maxLength":80}},"lifecycle":{"type":"string","minLength":3},"resources":{"type":"object","additionalProperties":false,"required":["prerequisites","owns","idOptions"],"properties":{"prerequisites":{"type":"array","maxItems":4,"uniqueItems":true,"items":{"type":"string","minLength":2,"maxLength":100}},"owns":{"type":"array","maxItems":3,"uniqueItems":true,"items":{"type":"string","minLength":2,"maxLength":80}},"idOptions":{"type":"array","maxItems":10,"uniqueItems":true,"items":{"type":"string","minLength":2,"maxLength":30}}}},"options":{"type":"array","maxItems":40,"items":{"type":"object","additionalProperties":false,"required":["name","required","type"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]*$"},"required":{"type":"boolean"},"type":{"type":"string","minLength":1,"maxLength":500}}}},"callPatterns":{"type":"array","minItems":1,"maxItems":2,"uniqueItems":true,"items":{"type":"string","minLength":3,"maxLength":260}},"snippet":{"type":"string","minLength":3,"maxLength":700},"errors":{"type":"array","maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["error","fix"],"properties":{"error":{"type":"string","minLength":5,"maxLength":220},"fix":{"type":"string","minLength":5,"maxLength":220}}}},"route":{"type":"string","pattern":"^/reference/"}}}
1
+ {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://ggaction.github.io/ggaction/schemas/action-card.schema.json","title":"ggaction compact action card","type":"object","additionalProperties":false,"required":["schemaVersion","name","layer","domain","summary","signature","intents","lifecycle","resources","authoringRoles","wraps","editableVia","supports","units","inference","completionRequirements","options","callPatterns","snippet","errors","route"],"properties":{"schemaVersion":{"const":3},"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]*$"},"layer":{"enum":["user-facing","advanced","primitive"]},"domain":{"type":"string","minLength":1},"summary":{"type":"string","minLength":20,"maxLength":420},"signature":{"type":"string","minLength":10},"intents":{"type":"array","minItems":3,"maxItems":7,"uniqueItems":true,"items":{"type":"string","minLength":2,"maxLength":80}},"lifecycle":{"type":"string","minLength":3},"resources":{"type":"object","additionalProperties":false,"required":["prerequisites","owns","idOptions"],"properties":{"prerequisites":{"type":"array","maxItems":4,"uniqueItems":true,"items":{"type":"string","minLength":2,"maxLength":100}},"owns":{"type":"array","maxItems":3,"uniqueItems":true,"items":{"type":"string","minLength":2,"maxLength":80}},"idOptions":{"type":"array","maxItems":10,"uniqueItems":true,"items":{"type":"string","minLength":2,"maxLength":30}}}},"authoringRoles":{"type":"array","minItems":1,"maxItems":5,"uniqueItems":true,"items":{"enum":["H0","H1","H2","H3","H4"]}},"wraps":{"type":"array","maxItems":20,"uniqueItems":true,"items":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]*$"}},"editableVia":{"type":"array","maxItems":20,"uniqueItems":true,"items":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]*$"}},"supports":{"type":"object","additionalProperties":false,"required":["entryPoints"],"properties":{"entryPoints":{"type":"array","minItems":1,"maxItems":2,"uniqueItems":true,"items":{"enum":["default","basic"]}}}},"units":{"type":"array","maxItems":16,"items":{"type":"object","additionalProperties":false,"required":["path","unit"],"properties":{"path":{"type":"string","minLength":1,"maxLength":80},"unit":{"enum":["logical-pixel","degree","angle","ratio","probability","count","calendar-unit","temporal-input","data-value","band-fraction"]}}}},"inference":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["input","strategy"],"properties":{"input":{"type":"string","minLength":1,"maxLength":80},"strategy":{"enum":["explicit","explicit-or-current","explicit-current-unique-or-error","documented-auto","documented-default"]}}}},"completionRequirements":{"type":"object","additionalProperties":false,"required":["state","requires","allowsEmpty"],"properties":{"state":{"enum":["complete","deferred","contextual","not-applicable"]},"requires":{"type":"array","maxItems":4,"uniqueItems":true,"items":{"type":"string","minLength":2,"maxLength":100}},"allowsEmpty":{"type":"boolean"}}},"options":{"type":"array","maxItems":40,"items":{"type":"object","additionalProperties":false,"required":["name","required","type"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9]*$"},"required":{"type":"boolean"},"type":{"type":"string","minLength":1,"maxLength":500}}}},"callPatterns":{"type":"array","minItems":1,"maxItems":2,"uniqueItems":true,"items":{"type":"string","minLength":3,"maxLength":260}},"snippet":{"type":"string","minLength":3,"maxLength":700},"errors":{"type":"array","maxItems":2,"items":{"type":"object","additionalProperties":false,"required":["error","fix"],"properties":{"error":{"type":"string","minLength":5,"maxLength":220},"fix":{"type":"string","minLength":5,"maxLength":220}}}},"route":{"type":"string","pattern":"^/reference/"}}}