ggaction 0.0.12 → 0.0.13

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 (281) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +2 -2
  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 +4 -2
  11. package/src/actions/basic.js +2 -0
  12. package/src/actions/boxPlots/materialize.js +2 -1
  13. package/src/actions/canvas/actions.js +3 -1
  14. package/src/actions/canvas/fitting.js +211 -0
  15. package/src/actions/canvas/index.js +2 -0
  16. package/src/actions/categoryOrder/index.js +3 -2
  17. package/src/actions/charts/area.js +47 -0
  18. package/src/actions/charts/bar.js +11 -5
  19. package/src/actions/charts/beeswarm.js +70 -0
  20. package/src/actions/charts/density.js +44 -0
  21. package/src/actions/charts/ecdf.js +183 -0
  22. package/src/actions/charts/endpoints.js +451 -0
  23. package/src/actions/charts/heatmap.js +2 -2
  24. package/src/actions/charts/histogram.js +1 -1
  25. package/src/actions/charts/horizon.js +71 -0
  26. package/src/actions/charts/index.js +37 -0
  27. package/src/actions/charts/interval-regression.js +169 -0
  28. package/src/actions/charts/line.js +5 -5
  29. package/src/actions/charts/parallel.js +1 -1
  30. package/src/actions/charts/pie.js +44 -0
  31. package/src/actions/charts/polar.js +123 -0
  32. package/src/actions/charts/radar.js +299 -0
  33. package/src/actions/charts/radial.js +42 -0
  34. package/src/actions/charts/raincloud.js +422 -0
  35. package/src/actions/charts/rug-strip.js +279 -0
  36. package/src/actions/charts/scatter.js +9 -3
  37. package/src/actions/charts/shared.js +69 -10
  38. package/src/actions/composition/actions.js +118 -1
  39. package/src/actions/data/bin.js +29 -0
  40. package/src/actions/data/computed.js +24 -0
  41. package/src/actions/data/derived.js +66 -0
  42. package/src/actions/data/ecdf.js +38 -0
  43. package/src/actions/data/filter.js +212 -28
  44. package/src/actions/data/fold.js +24 -0
  45. package/src/actions/data/index.js +24 -0
  46. package/src/actions/data/interval.js +2 -0
  47. package/src/actions/data/intervalEdit.js +86 -4
  48. package/src/actions/data/regression.js +5 -2
  49. package/src/actions/data/stack.js +26 -0
  50. package/src/actions/data/summary.js +26 -0
  51. package/src/actions/data/timeUnit.js +1 -1
  52. package/src/actions/encodings/appearance.js +32 -13
  53. package/src/actions/encodings/barWidth.js +8 -0
  54. package/src/actions/encodings/basic.js +2 -0
  55. package/src/actions/encodings/color/continuous.js +19 -59
  56. package/src/actions/encodings/color/index.js +28 -22
  57. package/src/actions/encodings/color/layout.js +3 -97
  58. package/src/actions/encodings/color/policy.js +5 -8
  59. package/src/actions/encodings/density/resolve.js +37 -5
  60. package/src/actions/encodings/density.js +120 -33
  61. package/src/actions/encodings/horizon/resolve.js +8 -4
  62. package/src/actions/encodings/horizon.js +18 -8
  63. package/src/actions/encodings/index.js +2 -0
  64. package/src/actions/encodings/offset.js +10 -16
  65. package/src/actions/encodings/parallel.js +2 -8
  66. package/src/actions/encodings/position/apply.js +10 -4
  67. package/src/actions/encodings/position/index.js +43 -5
  68. package/src/actions/encodings/position/policies/arc.js +14 -0
  69. package/src/actions/encodings/position/policies/area.js +4 -42
  70. package/src/actions/encodings/position/policies/bar.js +48 -13
  71. package/src/actions/encodings/position/resolve.js +67 -22
  72. package/src/actions/encodings/ranged.js +123 -97
  73. package/src/actions/encodings/remove.js +37 -32
  74. package/src/actions/encodings/ruleAppearance.js +23 -9
  75. package/src/actions/encodings/seriesLayout.js +104 -0
  76. package/src/actions/encodings/shared.js +25 -23
  77. package/src/actions/encodings/strokeDash.js +9 -6
  78. package/src/actions/encodings/temporal.js +7 -0
  79. package/src/actions/encodings/text.js +30 -15
  80. package/src/actions/errorBands/create.js +18 -5
  81. package/src/actions/errorBands/edit.js +341 -21
  82. package/src/actions/errorBars/create.js +21 -10
  83. package/src/actions/errorBars/edit.js +355 -19
  84. package/src/actions/facets/actions.js +410 -12
  85. package/src/actions/facets/derive.js +57 -8
  86. package/src/actions/gradientPlots/components.js +33 -11
  87. package/src/actions/gradientPlots/materialize.js +5 -7
  88. package/src/actions/guides/applicability.js +20 -17
  89. package/src/actions/guides/axes/axes.js +4 -3
  90. package/src/actions/guides/axes/axis.js +18 -18
  91. package/src/actions/guides/axes/components.js +43 -0
  92. package/src/actions/guides/axes/edit.js +16 -51
  93. package/src/actions/guides/axes/labels.js +129 -19
  94. package/src/actions/guides/axes/lines.js +7 -5
  95. package/src/actions/guides/axes/parallel/lifecycle.js +117 -0
  96. package/src/actions/guides/axes/parallel/policy.js +137 -0
  97. package/src/actions/guides/axes/parallel/resolve.js +44 -23
  98. package/src/actions/guides/axes/parallel.js +93 -217
  99. package/src/actions/guides/axes/policy.js +21 -67
  100. package/src/actions/guides/axes/tickGroups.js +14 -8
  101. package/src/actions/guides/axes/ticks.js +5 -4
  102. package/src/actions/guides/axes/titles.js +21 -8
  103. package/src/actions/guides/basic.js +2 -0
  104. package/src/actions/guides/facade.js +106 -0
  105. package/src/actions/guides/facadeAxes.js +200 -0
  106. package/src/actions/guides/facadeLegend.js +63 -0
  107. package/src/actions/guides/grids/grid.js +37 -33
  108. package/src/actions/guides/grids/resolve.js +10 -2
  109. package/src/actions/guides/guides.js +35 -28
  110. package/src/actions/guides/legends/categorical/actions.js +193 -249
  111. package/src/actions/guides/legends/categorical/components.js +4 -5
  112. package/src/actions/guides/legends/categorical/layout.js +36 -349
  113. package/src/actions/guides/legends/categorical/options.js +30 -14
  114. package/src/actions/guides/legends/categorical/recipes.js +14 -0
  115. package/src/actions/guides/legends/categorical/resolve.js +21 -10
  116. package/src/actions/guides/legends/categorical/symbols.js +2 -3
  117. package/src/actions/guides/legends/continuous/common.js +69 -14
  118. package/src/actions/guides/legends/continuous/gradient.js +111 -83
  119. package/src/actions/guides/legends/continuous/index.js +6 -2
  120. package/src/actions/guides/legends/continuous/interval.js +71 -92
  121. package/src/actions/guides/legends/continuous/opacity.js +105 -84
  122. package/src/actions/guides/legends/creation.js +27 -0
  123. package/src/actions/guides/legends/edit.js +198 -66
  124. package/src/actions/guides/legends/focused.js +2 -2
  125. package/src/actions/guides/legends/lane.js +98 -86
  126. package/src/actions/guides/legends/lifecycle.js +132 -0
  127. package/src/actions/guides/legends/remove.js +31 -76
  128. package/src/actions/guides/legends/size.js +149 -105
  129. package/src/actions/guides/legends/strokeWidth.js +106 -64
  130. package/src/actions/guides/legends/target.js +12 -0
  131. package/src/actions/guides/legends/transition.js +43 -0
  132. package/src/actions/guides/polar/axes/facade.js +77 -62
  133. package/src/actions/guides/polar/axes/labels.js +5 -4
  134. package/src/actions/guides/polar/axes/lines.js +2 -1
  135. package/src/actions/guides/polar/axes/shared.js +6 -0
  136. package/src/actions/guides/polar/axes/ticks.js +5 -4
  137. package/src/actions/guides/polar/axes/titles.js +5 -4
  138. package/src/actions/guides/polar/grids.js +7 -7
  139. package/src/actions/guides/reuse.js +44 -0
  140. package/src/actions/guides/tickValues.js +19 -21
  141. package/src/actions/index.js +2 -0
  142. package/src/actions/intervals/resolve.js +35 -15
  143. package/src/actions/marks/arc/actions.js +1 -1
  144. package/src/actions/marks/area/actions.js +18 -4
  145. package/src/actions/marks/area/materialize.js +5 -2
  146. package/src/actions/marks/bar/materialize.js +11 -7
  147. package/src/actions/marks/index.js +5 -0
  148. package/src/actions/marks/line/actions.js +43 -108
  149. package/src/actions/marks/line/materialize.js +34 -52
  150. package/src/actions/marks/point/edit.js +11 -15
  151. package/src/actions/marks/point/index.js +1 -0
  152. package/src/actions/marks/point/jitter.js +3 -0
  153. package/src/actions/marks/point/materialize.js +106 -2
  154. package/src/actions/marks/point/packing.js +68 -0
  155. package/src/actions/marks/references.js +87 -0
  156. package/src/actions/marks/remove.js +17 -4
  157. package/src/actions/marks/rule/actions.js +34 -3
  158. package/src/actions/marks/rule/appearance.js +26 -0
  159. package/src/actions/marks/shared.js +12 -12
  160. package/src/actions/marks/text/actions.js +224 -6
  161. package/src/actions/marks/text/layout.js +2 -2
  162. package/src/actions/primitives/createGraphics.js +3 -1
  163. package/src/actions/primitives/semantic.js +1 -1
  164. package/src/actions/primitives/semanticAction.js +39 -2
  165. package/src/actions/primitives/semanticValidation/guide.js +10 -0
  166. package/src/actions/primitives/semanticValidation/layer.js +18 -1
  167. package/src/actions/primitives/semanticValidation/scale.js +10 -1
  168. package/src/actions/regression/create.js +1 -1
  169. package/src/actions/regression/edit.js +19 -6
  170. package/src/actions/regression/resolve.js +1 -1
  171. package/src/actions/scales/consumers/common.js +20 -53
  172. package/src/actions/scales/consumers/families.js +27 -14
  173. package/src/actions/scales/consumers/index.js +23 -2
  174. package/src/actions/scales/consumers/seriesLayout.js +33 -2
  175. package/src/actions/scales/create.js +4 -4
  176. package/src/actions/scales/definitions.js +19 -3
  177. package/src/actions/scales/edit.js +46 -34
  178. package/src/actions/scales/editPolicy.js +21 -31
  179. package/src/actions/scales/materialize.js +10 -46
  180. package/src/actions/scales/patch.js +1 -1
  181. package/src/actions/scales/preview.js +39 -0
  182. package/src/actions/scales/quantitativeColor.js +9 -5
  183. package/src/actions/theme/actions.js +43 -0
  184. package/src/actions/theme/index.js +9 -0
  185. package/src/actions/theme/reconcile.js +882 -0
  186. package/src/actions/titles/actions.js +11 -10
  187. package/src/actions/titles/resolve.js +1 -40
  188. package/src/actions/violinPlots/create.js +86 -42
  189. package/src/actions/violinPlots/edit.js +191 -0
  190. package/src/actions/violinPlots/index.js +2 -0
  191. package/src/core/ChartProgram.js +7 -0
  192. package/src/core/action.js +22 -2
  193. package/src/core/compositionState.js +136 -8
  194. package/src/grammar/aggregate.js +66 -23
  195. package/src/grammar/arcs.js +58 -1
  196. package/src/grammar/areaEndpoints.js +46 -0
  197. package/src/grammar/areaSeries.js +87 -41
  198. package/src/grammar/bars/aggregate.js +33 -12
  199. package/src/grammar/bars/policy.js +9 -7
  200. package/src/grammar/bin.js +181 -0
  201. package/src/grammar/categoryOrder.js +34 -0
  202. package/src/grammar/computed.js +150 -0
  203. package/src/grammar/ecdf.js +198 -0
  204. package/src/grammar/facets/index.js +117 -6
  205. package/src/grammar/fold.js +123 -0
  206. package/src/grammar/horizon.js +6 -4
  207. package/src/grammar/interval.js +37 -20
  208. package/src/grammar/lineSeries.js +20 -63
  209. package/src/grammar/markFilter.js +22 -4
  210. package/src/grammar/markLabels.js +93 -0
  211. package/src/grammar/parallelAxisTitles.js +16 -0
  212. package/src/grammar/pathSeries.js +91 -0
  213. package/src/grammar/pointPacking.js +183 -0
  214. package/src/grammar/positionDatum.js +12 -0
  215. package/src/grammar/rects.js +9 -1
  216. package/src/grammar/regression/derive.js +4 -0
  217. package/src/grammar/regression/index.js +7 -2
  218. package/src/grammar/regression/models.js +22 -7
  219. package/src/grammar/regression/parameters.js +40 -13
  220. package/src/grammar/rotation.js +29 -0
  221. package/src/grammar/rules.js +7 -21
  222. package/src/grammar/scales/color.js +23 -1
  223. package/src/grammar/scales/colorConsumers.js +38 -0
  224. package/src/grammar/scales/definition.js +15 -1
  225. package/src/grammar/scales/discretized.js +11 -5
  226. package/src/grammar/scales/fields.js +38 -8
  227. package/src/grammar/scales/mapping.js +2 -0
  228. package/src/grammar/scales/radial.js +55 -0
  229. package/src/grammar/scales/types.js +1 -0
  230. package/src/grammar/schemas/semanticPath.js +17 -3
  231. package/src/grammar/stack.js +170 -0
  232. package/src/grammar/statistics/confidenceInterval.js +101 -0
  233. package/src/grammar/summary.js +183 -0
  234. package/src/grammar/text.js +22 -16
  235. package/src/grammar/timeUnit.js +21 -11
  236. package/src/grammar/transformTopology.js +6 -0
  237. package/src/grammar/transforms.js +36 -0
  238. package/src/grammar/valueFormat.js +112 -0
  239. package/src/grammar/window.js +13 -7
  240. package/src/layout/facets.js +41 -7
  241. package/src/layout/guideCollisions.js +12 -0
  242. package/src/layout/legend.js +2 -10
  243. package/src/layout/legendItems.js +102 -0
  244. package/src/layout/legendLane.js +100 -11
  245. package/src/materialization/bars/aggregate.js +38 -152
  246. package/src/materialization/bars/histogram.js +24 -0
  247. package/src/materialization/categorySlotOffset.js +40 -0
  248. package/src/materialization/compositionSnapshot.js +1 -1
  249. package/src/materialization/dependencies.js +57 -16
  250. package/src/materialization/encodings.js +1 -1
  251. package/src/materialization/facets.js +8 -1
  252. package/src/materialization/guides/layout.js +57 -0
  253. package/src/materialization/guides/resources.js +2 -2
  254. package/src/materialization/legends.js +10 -1
  255. package/src/materialization/marks/capabilities.js +20 -5
  256. package/src/materialization/marks/grouping.js +52 -0
  257. package/src/materialization/marks/index.js +58 -23
  258. package/src/materialization/marks/policies.js +2 -0
  259. package/src/materialization/rect.js +33 -33
  260. package/src/materialization/rowEncoding.js +13 -13
  261. package/src/materialization/scaleGuideDependencies.js +8 -5
  262. package/src/materialization/scales/map.js +1 -0
  263. package/src/materialization/scales/policies/arc.js +42 -0
  264. package/src/materialization/scales/policies/binnedPosition.js +7 -4
  265. package/src/materialization/scales/policies/series.js +2 -1
  266. package/src/materialization/scales/resolve.js +46 -14
  267. package/src/materialization/selection/compatibility.js +11 -0
  268. package/src/materialization/selection/items/bar.js +12 -68
  269. package/src/materialization/selection/items/common.js +8 -2
  270. package/src/materialization/selection/items/path.js +3 -13
  271. package/src/materialization/selection/items/rect.js +7 -4
  272. package/src/materialization/text.js +64 -5
  273. package/src/mcp/adapter.js +2 -2
  274. package/src/selectors/datasets.js +13 -0
  275. package/src/selectors/layers.js +3 -2
  276. package/src/selectors/scales.js +6 -0
  277. package/src/theme/defaults.js +39 -0
  278. package/types/basic.d.ts +11 -2
  279. package/types/index.d.ts +126 -0
  280. package/types/program.d.ts +1320 -135
  281. package/src/materialization/bars/grouped.js +0 -144
@@ -1 +1 @@
1
- {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://ggaction.github.io/ggaction/schemas/action-cards.schema.json","title":"ggaction compact action-card collection","type":"object","additionalProperties":false,"required":["schemaVersion","packageVersion","typeSource","errorPolicy","count","cards"],"properties":{"schemaVersion":{"const":2},"packageVersion":{"type":"string","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$"},"typeSource":{"const":"types/program.d.ts"},"errorPolicy":{"type":"string","minLength":40,"maxLength":300},"count":{"type":"integer","minimum":1},"cards":{"type":"array","minItems":1,"items":{"$ref":"action-card.schema.json"}}}}
1
+ {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://ggaction.github.io/ggaction/schemas/action-cards.schema.json","title":"ggaction compact action-card collection","type":"object","additionalProperties":false,"required":["schemaVersion","packageVersion","typeSource","errorPolicy","count","cards"],"properties":{"schemaVersion":{"const":3},"packageVersion":{"type":"string","pattern":"^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$"},"typeSource":{"const":"types/program.d.ts"},"errorPolicy":{"type":"string","minLength":40,"maxLength":300},"count":{"type":"integer","minimum":1},"cards":{"type":"array","minItems":1,"items":{"$ref":"action-card.schema.json"}}}}
@@ -20,7 +20,8 @@ Before proposing or implementing an extension action:
20
20
  [`src/extension.js`](../src/extension.js) to confirm the installed public
21
21
  extension entry point.
22
22
  2. Search [`action-cards.json`](./action-cards.json) for actions whose names,
23
- intents, owned resources, or prerequisites overlap the requested feature.
23
+ intents, authoring roles, direct wrappers, lifecycle editors, owned
24
+ resources, or prerequisites overlap the requested feature.
24
25
  Read only relevant cards instead of loading the complete catalog into the
25
26
  working context.
26
27
  3. Inspect the installed declaration and source for each reuse candidate when
@@ -1 +1 @@
1
- {"schemaVersion":2,"packageVersion":"0.0.12","constraints":[{"id":"program.canvas","phrases":["chart canvas","create canvas","plot bounds"]},{"id":"program.data","phrases":["create dataset","load rows","inline data"]},{"id":"chart.scatter","phrases":["scatter plot","scatter chart","point chart"]},{"id":"chart.line","phrases":["line chart","line plot","time series chart"]},{"id":"chart.bar","phrases":["bar chart","bar plot","column chart"]},{"id":"chart.bar.horizontal","phrases":["horizontal bar chart","horizontal bar plot","horizontal bars"],"shadows":["chart.bar"]},{"id":"chart.histogram","phrases":["histogram","binned distribution","frequency distribution","frequency histogram"]},{"id":"chart.heatmap","phrases":["heatmap","heat map","two dimensional distribution"]},{"id":"chart.parallel","phrases":["parallel coordinates","parallel coordinate plot"]},{"id":"chart.box","phrases":["box plot","boxplot","quartile plot"]},{"id":"chart.violin","phrases":["violin plot","violin chart"]},{"id":"chart.gradient","phrases":["gradient plot","density gradient"]},{"id":"chart.density","phrases":["density plot","density curve","kernel density plot"]},{"id":"chart.area","phrases":["area chart","area plot"]},{"id":"chart.horizon","phrases":["horizon chart","horizon plot"]},{"id":"chart.pie","phrases":["pie chart","pie plot"],"exclusiveGroup":"polar.partition-chart"},{"id":"chart.donut","phrases":["donut chart","doughnut chart","donut plot"],"exclusiveGroup":"polar.partition-chart"},{"id":"chart.rose","phrases":["rose chart","coxcomb chart","polar area chart","radial bar chart"]},{"id":"chart.radar","phrases":["radar chart","spider chart","polar line chart"]},{"id":"mark.point","phrases":["point mark","circle marks"]},{"id":"mark.tick","phrases":["tick mark","tick plot","strip plot"]},{"id":"mark.text","phrases":["text mark","data labels"]},{"id":"mark.line","phrases":["line mark","path mark"]},{"id":"mark.bar","phrases":["bar mark","rectangle bars"]},{"id":"mark.area","phrases":["area mark","filled area"]},{"id":"mark.rule","phrases":["rule mark","reference line mark"],"shadows":["mark.line"]},{"id":"mark.arc","phrases":["arc mark","polar sectors"]},{"id":"mark.rect","phrases":["rect mark","rectangle cells"]},{"id":"transform.filter","phrases":["filter data","filtered dataset","filter rows"]},{"id":"transform.density","phrases":["density data","kde data","kernel density data"]},{"id":"transform.regression","phrases":["regression data","fitted rows","loess data"]},{"id":"transform.window","phrases":["moving average","moving mean","window transform","rank rows","lag values"]},{"id":"transform.timeUnit","phrases":["time unit","date bucket","month bucket","year bucket"]},{"id":"transform.bin1d","phrases":["bin one field","one dimensional bins","histogram bins"]},{"id":"transform.bin2d","phrases":["bin two fields","two dimensional bins","2d bins","bin2d","rectangular bins","binned heatmap"]},{"id":"transform.interval","phrases":["interval data","confidence interval data","summary interval"]},{"id":"statistics.regression","phrases":["regression line","trend line","fitted line","regression fit","best fit line","fitted trend"]},{"id":"statistics.errorBar","phrases":["error bars","error bar","point and whisker","point whisker plot","uncertainty whiskers"]},{"id":"statistics.errorBand","phrases":["error band","uncertainty ribbon","confidence band"]},{"id":"scale.create","phrases":["create scale","named scale","custom scale"]},{"id":"scale.log","phrases":["log scale","logarithmic scale"]},{"id":"scale.time","phrases":["time scale","temporal scale"]},{"id":"scale.color","phrases":["color scale","colour scale","palette scale"]},{"id":"encoding.x","phrases":["x encoding","encode x","map to x"]},{"id":"encoding.y","phrases":["y encoding","encode y","map to y"]},{"id":"encoding.color","phrases":["color encoding","encode color","map to color","color legend","colour legend"]},{"id":"encoding.size","phrases":["size encoding","encode size","map to size","size legend"]},{"id":"encoding.shape","phrases":["shape encoding","encode shape","map to shape","shape legend"]},{"id":"encoding.angle","phrases":["angle encoding","encode angle","rotate ticks","rotate points"]},{"id":"encoding.opacity","phrases":["opacity encoding","encode opacity","map to opacity","opacity legend"]},{"id":"encoding.strokeDash","phrases":["stroke dash encoding","stroke dash","dashed stroke","dash encoding","line style encoding","stroke dash legend"]},{"id":"encoding.strokeWidth","phrases":["stroke width encoding","encode stroke width","line width encoding","stroke width legend"]},{"id":"encoding.text","phrases":["text encoding","encode text","label field"]},{"id":"encoding.group","phrases":["group encoding","group series","series grouping"]},{"id":"encoding.theta","phrases":["theta encoding","angular encoding","encode theta"]},{"id":"encoding.radius","phrases":["radius encoding","radial encoding","encode radius"]},{"id":"encoding.parallel","phrases":["parallel dimensions","dimension axes"]},{"id":"guide.all","phrases":["create guides","automatic guides","all guides"]},{"id":"guide.axes","phrases":["axes","axis guides","x and y axes"]},{"id":"guide.xAxis","phrases":["x axis","horizontal axis"]},{"id":"guide.yAxis","phrases":["y axis","vertical axis"]},{"id":"guide.thetaAxis","phrases":["theta axis","angular axis"]},{"id":"guide.radialAxis","phrases":["radial axis","radius axis"]},{"id":"guide.legend","phrases":["legend","encoding key"]},{"id":"guide.grid","phrases":["grid lines","chart grid","reference grid"]},{"id":"guide.title","phrases":["chart title","add title","with title","titled","title and subtitle"]},{"id":"guide.subtitle","phrases":["subtitle","title and subtitle"]},{"id":"layout.legend.bottom","phrases":["legend at bottom","bottom legend"],"exclusiveGroup":"legend.position"},{"id":"layout.legend.top","phrases":["legend at top","top legend"],"exclusiveGroup":"legend.position"},{"id":"layout.legend.left","phrases":["legend at left","left legend"],"exclusiveGroup":"legend.position"},{"id":"layout.legend.right","phrases":["legend at right","right legend"],"exclusiveGroup":"legend.position"},{"id":"layout.labels","phrases":["avoid label overlap","label collision","layout labels"]},{"id":"layout.jitter","phrases":["jitter points","point jitter","reduce overplotting"]},{"id":"layout.categoryOrder","phrases":["order categories","sort categories","category order"]},{"id":"layout.facet","phrases":["facet chart","small multiples","repeat chart by field"]},{"id":"selection.store","phrases":["store selection","reusable selection","select marks"]},{"id":"selection.highlight","phrases":["highlight marks","highlight selected","conditional highlight"]},{"id":"selection.filter","phrases":["filter marks","retain matching marks"]},{"id":"composition.horizontal","phrases":["horizontal concat","horizontally concatenate","charts side by side"]},{"id":"composition.vertical","phrases":["vertical concat","vertically concatenate","stack charts vertically"]},{"id":"renderer.canvas","phrases":["render to canvas","browser canvas","canvas renderer","as canvas","on canvas","on the chart canvas"]},{"id":"renderer.svg","phrases":["render svg","export svg","svg output","as svg","vector svg","svg document","accessible svg","svg"]},{"id":"renderer.png","phrases":["render png","export png","png output","as png"]},{"id":"renderer.pdf","phrases":["render pdf","export pdf","pdf output","as pdf","vector pdf","pdf document"]},{"id":"unsupported.geo","phrases":["map chart","geographic chart","geo projection","choropleth"],"unsupported":"Geographic projections and map marks are outside the current ggaction contract."},{"id":"unsupported.animation","phrases":["animate chart","chart animation","animated transition","animated chart","animation","transitions"],"unsupported":"Animation is outside the current static-chart contract."},{"id":"unsupported.interaction","phrases":["interactive tooltip","hover tooltip","tooltip on hover","tooltip","tooltips","zoom interaction","pan interaction","brush interaction","hover interaction","click interaction","interactive chart","event handling"],"unsupported":"Interactive runtime behaviors are outside the current static-chart contract."},{"id":"unsupported.3d","phrases":["3d chart","three dimensional chart","three dimensional plot"],"unsupported":"Three-dimensional charts are not supported."},{"id":"unsupported.jpg","phrases":["export jpg","render jpeg","jpeg output","jpeg image","jpg image"],"unsupported":"JPEG is not a current renderer; use SVG, PNG, PDF, or Browser Canvas."}],"providers":[{"id":"action.createCanvas","kind":"action","name":"createCanvas","order":10,"anchors":["program.canvas"],"covers":["program.canvas"],"baseOptions":{}},{"id":"action.createData","kind":"action","name":"createData","order":20,"anchors":["program.data"],"covers":["program.data"],"baseOptions":{"values":"[{ category: \"A\", x: 1, y: 2, value: 3 }]"}},{"id":"action.createScatterPlot","kind":"action","name":"createScatterPlot","order":40,"anchors":["chart.scatter"],"covers":["chart.scatter","encoding.x","encoding.y","encoding.color","encoding.size","encoding.shape","guide.axes","guide.legend"],"baseOptions":{"x":"\"x\"","y":"\"y\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"encoding.size":{"size":"\"value\""},"encoding.shape":{"shape":"\"category\""},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createLinePlot","kind":"action","name":"createLinePlot","order":40,"anchors":["chart.line"],"covers":["chart.line","encoding.x","encoding.y","encoding.color","encoding.group","encoding.strokeDash","guide.axes","guide.legend"],"baseOptions":{"x":"\"x\"","y":"\"y\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"encoding.group":{"groupBy":"\"category\""},"encoding.strokeDash":{"strokeDash":"{ field: \"category\" }"},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createBarPlot","kind":"action","name":"createBarPlot","order":40,"anchors":["chart.bar"],"covers":["chart.bar","encoding.x","encoding.y","encoding.color","guide.axes","guide.legend"],"baseOptions":{"x":"\"category\"","y":"\"value\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createHorizontalBar","kind":"action","name":"createBarMark","order":40,"anchors":["chart.bar.horizontal"],"covers":["chart.bar.horizontal"],"baseOptions":{"id":"\"bar\""}},{"id":"action.createHistogram","kind":"action","name":"createHistogram","order":40,"anchors":["chart.histogram"],"covers":["chart.histogram","transform.bin1d","encoding.color","guide.axes","guide.legend"],"baseOptions":{"field":"\"value\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createHeatmap","kind":"action","name":"createHeatmap","order":40,"anchors":["chart.heatmap"],"covers":["chart.heatmap","transform.bin2d","encoding.x","encoding.y","encoding.color","guide.axes","guide.legend"],"baseOptions":{"x":"\"x\"","y":"\"y\"","bin":"{}"},"optionsByConstraint":{"encoding.color":{"color":"{}"},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createParallelCoordinates","kind":"action","name":"createParallelCoordinates","order":40,"anchors":["chart.parallel"],"covers":["chart.parallel","encoding.parallel","encoding.color","encoding.strokeDash","guide.axes","guide.legend"],"baseOptions":{"dimensions":"[\"a\", \"b\"]"},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"encoding.strokeDash":{"strokeDash":"{ field: \"category\" }"},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createBoxPlot","kind":"action","name":"createBoxPlot","order":40,"anchors":["chart.box"],"covers":["chart.box","guide.axes"],"baseOptions":{},"optionsByConstraint":{"guide.axes":{"guides":"{}"}}},{"id":"action.createViolinPlot","kind":"action","name":"createViolinPlot","order":40,"anchors":["chart.violin"],"covers":["chart.violin","encoding.color","guide.axes","guide.legend"],"baseOptions":{"x":"\"category\"","y":"\"value\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createGradientPlot","kind":"action","name":"createGradientPlot","order":40,"anchors":["chart.gradient"],"covers":["chart.gradient","guide.axes"],"baseOptions":{},"optionsByConstraint":{"guide.axes":{"guides":"{}"}}},{"id":"action.encodeDensity","kind":"action","name":"encodeDensity","order":50,"anchors":["chart.density"],"covers":["chart.density"],"baseOptions":{"field":"\"value\""}},{"id":"action.createAreaChart","kind":"action","name":"createAreaMark","order":40,"anchors":["chart.area"],"covers":["chart.area"],"baseOptions":{}},{"id":"action.createHorizonChart","kind":"action","name":"encodeHorizon","order":50,"anchors":["chart.horizon"],"covers":["chart.horizon"],"baseOptions":{"x":"\"x\"","y":"\"y\""}},{"id":"action.createPieChart","kind":"action","name":"createArcMark","order":40,"anchors":["chart.pie"],"covers":["chart.pie"],"baseOptions":{"innerRadius":"0"}},{"id":"action.createDonutChart","kind":"action","name":"createArcMark","order":40,"anchors":["chart.donut"],"covers":["chart.donut"],"baseOptions":{"innerRadius":"0.5","padAngle":"1"}},{"id":"action.createRoseChart","kind":"action","name":"createArcMark","order":40,"anchors":["chart.rose"],"covers":["chart.rose"],"baseOptions":{"padAngle":"1","opacity":"0.9"}},{"id":"action.createRadarChart","kind":"action","name":"createLineMark","order":40,"anchors":["chart.radar"],"covers":["chart.radar"],"baseOptions":{"closed":"true"}},{"id":"action.createPointMark","kind":"action","name":"createPointMark","order":40,"anchors":["mark.point"],"covers":["mark.point"],"baseOptions":{}},{"id":"action.createTickMark","kind":"action","name":"createTickMark","order":40,"anchors":["mark.tick"],"covers":["mark.tick"],"baseOptions":{}},{"id":"action.createTextMark","kind":"action","name":"createTextMark","order":40,"anchors":["mark.text"],"covers":["mark.text"],"baseOptions":{}},{"id":"action.createLineMark","kind":"action","name":"createLineMark","order":40,"anchors":["mark.line"],"covers":["mark.line"],"baseOptions":{}},{"id":"action.createBarMark","kind":"action","name":"createBarMark","order":40,"anchors":["mark.bar"],"covers":["mark.bar"],"baseOptions":{}},{"id":"action.createAreaMark","kind":"action","name":"createAreaMark","order":40,"anchors":["mark.area"],"covers":["mark.area"],"baseOptions":{}},{"id":"action.createRuleMark","kind":"action","name":"createRuleMark","order":40,"anchors":["mark.rule"],"covers":["mark.rule"],"baseOptions":{}},{"id":"action.createArcMark","kind":"action","name":"createArcMark","order":40,"anchors":["mark.arc"],"covers":["mark.arc"],"baseOptions":{}},{"id":"action.createRectMark","kind":"action","name":"createRectMark","order":40,"anchors":["mark.rect"],"covers":["mark.rect"],"baseOptions":{}},{"id":"action.filterData","kind":"action","name":"filterData","order":30,"anchors":["transform.filter"],"covers":["transform.filter"],"baseOptions":{"id":"\"filtered\"","field":"\"value\"","predicate":"{ op: \"gt\", value: 0 }"}},{"id":"action.createDensityData","kind":"action","name":"createDensityData","order":30,"anchors":["transform.density"],"covers":["transform.density"],"baseOptions":{"id":"\"density\"","field":"\"value\""}},{"id":"action.createRegressionData","kind":"action","name":"createRegressionData","order":30,"anchors":["transform.regression"],"covers":["transform.regression"],"baseOptions":{"id":"\"regression\"","x":"\"x\"","y":"\"y\""}},{"id":"action.createWindowData","kind":"action","name":"createWindowData","order":30,"anchors":["transform.window"],"covers":["transform.window"],"baseOptions":{"id":"\"windowed\"","operations":"[{ op: \"movingMean\", field: \"value\", as: \"movingMean\", frame: { preceding: 2 } }]"}},{"id":"action.createTimeUnitData","kind":"action","name":"createTimeUnitData","order":30,"anchors":["transform.timeUnit"],"covers":["transform.timeUnit"],"baseOptions":{"id":"\"monthly\"","field":"\"date\"","unit":"\"month\"","as":"\"month\""}},{"id":"action.encodeHistogram","kind":"action","name":"encodeHistogram","order":50,"anchors":["transform.bin1d"],"covers":["transform.bin1d"],"baseOptions":{"field":"\"value\""}},{"id":"action.createBin2DData","kind":"action","name":"createBin2DData","order":30,"anchors":["transform.bin2d"],"covers":["transform.bin2d"],"baseOptions":{"id":"\"bins\"","x":"\"x\"","y":"\"y\""}},{"id":"action.createIntervalData","kind":"action","name":"createIntervalData","order":30,"anchors":["transform.interval"],"covers":["transform.interval"],"baseOptions":{"id":"\"interval\"","field":"\"value\""}},{"id":"action.createRegression","kind":"action","name":"createRegression","order":60,"anchors":["statistics.regression"],"covers":["mark.line","transform.regression","statistics.regression","statistics.errorBand"],"baseOptions":{}},{"id":"action.createErrorBar","kind":"action","name":"createErrorBar","order":60,"anchors":["statistics.errorBar"],"covers":["statistics.errorBar"],"baseOptions":{}},{"id":"action.createErrorBand","kind":"action","name":"createErrorBand","order":61,"anchors":["statistics.errorBand"],"covers":["statistics.errorBand"],"baseOptions":{}},{"id":"action.createScale","kind":"action","name":"createScale","order":35,"anchors":["scale.create"],"covers":["scale.create"],"baseOptions":{"id":"\"scale-1\""}},{"id":"action.createLogScale","kind":"action","name":"createScale","order":35,"anchors":["scale.log"],"covers":["scale.log"],"baseOptions":{"id":"\"scale-1\"","type":"\"log\""}},{"id":"action.createTimeScale","kind":"action","name":"createScale","order":35,"anchors":["scale.time"],"covers":["scale.time"],"baseOptions":{"id":"\"scale-1\"","type":"\"time\""}},{"id":"action.createColorScale","kind":"action","name":"createScale","order":35,"anchors":["scale.color"],"covers":["scale.color"],"baseOptions":{"id":"\"color-scale\"","type":"\"ordinal\"","range":"{ palette: \"tableau10\" }"}},{"id":"action.encodeX","kind":"action","name":"encodeX","order":50,"anchors":["encoding.x"],"covers":["encoding.x"],"baseOptions":{"field":"\"x\""}},{"id":"action.encodeY","kind":"action","name":"encodeY","order":50,"anchors":["encoding.y"],"covers":["encoding.y"],"baseOptions":{"field":"\"y\""}},{"id":"action.encodeColor","kind":"action","name":"encodeColor","order":55,"anchors":["encoding.color"],"covers":["encoding.color"],"baseOptions":{"field":"\"category\""}},{"id":"action.encodeSize","kind":"action","name":"encodeSize","order":55,"anchors":["encoding.size"],"covers":["encoding.size"],"baseOptions":{"field":"\"value\""}},{"id":"action.encodeShape","kind":"action","name":"encodeShape","order":55,"anchors":["encoding.shape"],"covers":["encoding.shape"],"baseOptions":{"field":"\"category\""}},{"id":"action.encodeAngle","kind":"action","name":"encodeAngle","order":55,"anchors":["encoding.angle"],"covers":["encoding.angle"],"baseOptions":{"value":"45"}},{"id":"action.encodeOpacity","kind":"action","name":"encodeOpacity","order":55,"anchors":["encoding.opacity"],"covers":["encoding.opacity"],"baseOptions":{"field":"\"value\""}},{"id":"action.encodeStrokeDash","kind":"action","name":"encodeStrokeDash","order":55,"anchors":["encoding.strokeDash"],"covers":["encoding.strokeDash"],"baseOptions":{"field":"\"category\""}},{"id":"action.encodeStrokeWidth","kind":"action","name":"encodeStrokeWidth","order":55,"anchors":["encoding.strokeWidth"],"covers":["encoding.strokeWidth"],"baseOptions":{"value":"2"}},{"id":"action.encodeText","kind":"action","name":"encodeText","order":55,"anchors":["encoding.text"],"covers":["encoding.text"],"baseOptions":{"field":"\"label\""}},{"id":"action.encodeGroup","kind":"action","name":"encodeGroup","order":52,"anchors":["encoding.group"],"covers":["encoding.group"],"baseOptions":{"field":"\"category\""}},{"id":"action.encodeTheta","kind":"action","name":"encodeTheta","order":50,"anchors":["encoding.theta"],"covers":["encoding.theta"],"baseOptions":{"field":"\"angle\""}},{"id":"action.encodeR","kind":"action","name":"encodeR","order":50,"anchors":["encoding.radius"],"covers":["encoding.radius"],"baseOptions":{"field":"\"value\""}},{"id":"action.encodeParallelCoordinates","kind":"action","name":"encodeParallelCoordinates","order":50,"anchors":["encoding.parallel"],"covers":["encoding.parallel"],"baseOptions":{"dimensions":"[\"a\", \"b\"]"}},{"id":"action.createGuides","kind":"action","name":"createGuides","order":70,"anchors":["guide.all"],"covers":["guide.all","guide.axes","guide.legend","guide.grid"],"baseOptions":{}},{"id":"action.createAxes","kind":"action","name":"createAxes","order":70,"anchors":["guide.axes"],"covers":["guide.axes"],"baseOptions":{}},{"id":"action.createXAxis","kind":"action","name":"createXAxis","order":70,"anchors":["guide.xAxis"],"covers":["guide.xAxis"],"baseOptions":{}},{"id":"action.createYAxis","kind":"action","name":"createYAxis","order":70,"anchors":["guide.yAxis"],"covers":["guide.yAxis"],"baseOptions":{}},{"id":"action.createThetaAxis","kind":"action","name":"createThetaAxis","order":70,"anchors":["guide.thetaAxis"],"covers":["guide.thetaAxis"],"baseOptions":{}},{"id":"action.createRadialAxis","kind":"action","name":"createRadialAxis","order":70,"anchors":["guide.radialAxis"],"covers":["guide.radialAxis"],"baseOptions":{}},{"id":"action.createLegend","kind":"action","name":"createLegend","order":70,"anchors":["guide.legend"],"covers":["guide.legend"],"baseOptions":{}},{"id":"action.createGrid","kind":"action","name":"createGrid","order":70,"anchors":["guide.grid"],"covers":["guide.grid"],"baseOptions":{}},{"id":"action.createTitle","kind":"action","name":"createTitle","order":70,"anchors":["guide.title","guide.subtitle"],"covers":["guide.title","guide.subtitle"],"baseOptions":{"text":"\"Chart title\""},"optionsByConstraint":{"guide.subtitle":{"subtitle":"\"Chart subtitle\""}}},{"id":"action.legendBottom","kind":"action","name":"editLegendLayout","order":80,"anchors":["layout.legend.bottom"],"covers":["layout.legend.bottom"],"baseOptions":{"position":"\"bottom\""}},{"id":"action.legendTop","kind":"action","name":"editLegendLayout","order":80,"anchors":["layout.legend.top"],"covers":["layout.legend.top"],"baseOptions":{"position":"\"top\""}},{"id":"action.legendLeft","kind":"action","name":"editLegendLayout","order":80,"anchors":["layout.legend.left"],"covers":["layout.legend.left"],"baseOptions":{"position":"\"left\""}},{"id":"action.legendRight","kind":"action","name":"editLegendLayout","order":80,"anchors":["layout.legend.right"],"covers":["layout.legend.right"],"baseOptions":{"position":"\"right\""}},{"id":"action.layoutLabels","kind":"action","name":"layoutLabels","order":80,"anchors":["layout.labels"],"covers":["layout.labels"],"baseOptions":{"axis":"\"y\""}},{"id":"action.jitterPoints","kind":"action","name":"jitterPoints","order":80,"anchors":["layout.jitter"],"covers":["layout.jitter"],"baseOptions":{"channel":"\"x\"","maxOffset":"{ pixels: 4 }"}},{"id":"action.orderCategories","kind":"action","name":"orderCategories","order":80,"anchors":["layout.categoryOrder"],"covers":["layout.categoryOrder"],"baseOptions":{"channel":"\"x\"","by":"\"category\""}},{"id":"action.facet","kind":"action","name":"facet","order":80,"anchors":["layout.facet"],"covers":["layout.facet","guide.axes","guide.legend"],"baseOptions":{"field":"\"category\""},"optionsByConstraint":{"guide.axes":{"guides":"{ axes: \"outer\", legend: \"shared\" }"},"guide.legend":{"guides":"{ axes: \"outer\", legend: \"shared\" }"}}},{"id":"action.selectMarks","kind":"action","name":"selectMarks","order":75,"anchors":["selection.store"],"covers":["selection.store"],"baseOptions":{"id":"\"selection-1\"","field":"\"category\"","op":"\"eq\"","value":"\"A\""}},{"id":"action.highlightMarks","kind":"action","name":"highlightMarks","order":76,"anchors":["selection.highlight"],"covers":["selection.highlight"],"baseOptions":{"select":"{ field: \"category\", op: \"eq\", value: \"A\" }","color":"\"#f28e2b\""}},{"id":"action.filterMarks","kind":"action","name":"filterMarks","order":75,"anchors":["selection.filter"],"covers":["selection.filter"],"baseOptions":{"field":"\"value\"","op":"\"gt\"","value":"0"}},{"id":"runtime.hconcat","kind":"runtime","name":"hconcat","order":90,"anchors":["composition.horizontal"],"covers":["composition.horizontal"],"signature":"hconcat(options: CompositionOptions): ChartProgram;","call":"hconcat({ programs: [program, program] })","route":"/reference/runtime/#ggaction"},{"id":"runtime.vconcat","kind":"runtime","name":"vconcat","order":90,"anchors":["composition.vertical"],"covers":["composition.vertical"],"signature":"vconcat(options: CompositionOptions): ChartProgram;","call":"vconcat({ programs: [program, program] })","route":"/reference/runtime/#ggaction"},{"id":"runtime.render","kind":"runtime","name":"render","order":100,"anchors":["renderer.canvas"],"covers":["renderer.canvas"],"signature":"render(program: Pick<ChartProgram, \"graphicSpec\">, context: CanvasRenderingContext2D, options?: { pixelRatio?: number }): void;","call":"render(program, context)","route":"/reference/runtime/#ggaction"},{"id":"runtime.renderToSVG","kind":"runtime","name":"renderToSVG","order":100,"anchors":["renderer.svg"],"covers":["renderer.svg"],"signature":"renderToSVG(program: Pick<ChartProgram, \"graphicSpec\">, options?: SVGRenderOptions): string;","call":"renderToSVG(program)","route":"/reference/runtime/#ggactionsvg"},{"id":"runtime.renderToPNG","kind":"runtime","name":"renderToPNG","order":100,"anchors":["renderer.png"],"covers":["renderer.png"],"signature":"renderToPNG(program: Pick<ChartProgram, \"graphicSpec\">, options: { output: string; pixelRatio?: number }): Promise<PNGRenderResult>;","call":"await renderToPNG(program, { output: \"chart.png\" })","route":"/reference/runtime/#ggactionpng"},{"id":"runtime.renderToPDF","kind":"runtime","name":"renderToPDF","order":100,"anchors":["renderer.pdf"],"covers":["renderer.pdf"],"signature":"renderToPDF(program: Pick<ChartProgram, \"graphicSpec\">, options: PDFRenderOptions): Promise<PDFRenderResult>;","call":"await renderToPDF(program, { output: \"chart.pdf\" })","route":"/reference/runtime/#ggactionpdf"}]}
1
+ {"schemaVersion":2,"packageVersion":"0.0.13","constraints":[{"id":"program.canvas","phrases":["chart canvas","create canvas","plot bounds"]},{"id":"program.data","phrases":["create dataset","load rows","inline data"]},{"id":"chart.scatter","phrases":["scatter plot","scatter chart","point chart"]},{"id":"chart.dot","phrases":["dot plot","categorical dot plot","category dot chart"]},{"id":"chart.lollipop","phrases":["lollipop plot","lollipop chart","baseline stem chart"]},{"id":"chart.dumbbell","phrases":["dumbbell plot","dumbbell chart","connected dot plot","before and after chart"]},{"id":"chart.ecdf","phrases":["ecdf plot","ecdf chart","empirical cumulative distribution","empirical cumulative distribution plot"]},{"id":"chart.interval","phrases":["interval plot","point interval plot","point and interval chart"]},{"id":"chart.regression","phrases":["regression plot","regression scatter plot","scatter plot with fit"],"shadows":["chart.scatter"]},{"id":"chart.line","phrases":["line chart","line plot","time series chart"]},{"id":"chart.bar","phrases":["bar chart","bar plot","column chart"]},{"id":"chart.bar.horizontal","phrases":["horizontal bar chart","horizontal bar plot","horizontal bars"],"shadows":["chart.bar"]},{"id":"chart.histogram","phrases":["histogram","binned distribution","frequency distribution","frequency histogram"]},{"id":"chart.heatmap","phrases":["heatmap","heat map","two dimensional distribution"]},{"id":"chart.parallel","phrases":["parallel coordinates","parallel coordinate plot"]},{"id":"chart.box","phrases":["box plot","boxplot","quartile plot"]},{"id":"chart.violin","phrases":["violin plot","violin chart"]},{"id":"chart.gradient","phrases":["gradient plot","density gradient"]},{"id":"chart.density","phrases":["density plot","density curve","kernel density plot"]},{"id":"chart.area","phrases":["area chart","area plot"]},{"id":"chart.rug","phrases":["rug plot","rug chart","edge tick distribution"]},{"id":"chart.strip","phrases":["strip plot","strip chart","jittered strip plot"]},{"id":"chart.beeswarm","phrases":["beeswarm plot","beeswarm chart","packed point plot","swarm plot"]},{"id":"chart.raincloud","phrases":["raincloud plot","raincloud chart","half violin with box and points","density summary raw points"]},{"id":"chart.horizon","phrases":["horizon chart","horizon plot"]},{"id":"chart.pie","phrases":["pie chart","pie plot"],"exclusiveGroup":"polar.partition-chart"},{"id":"chart.donut","phrases":["donut chart","doughnut chart","donut plot"],"exclusiveGroup":"polar.partition-chart"},{"id":"chart.rose","phrases":["rose chart","rose plot","coxcomb chart","polar area chart"],"shadows":["chart.bar","chart.area"]},{"id":"chart.radialBar","phrases":["radial bar chart","radial bar plot"],"shadows":["chart.bar"]},{"id":"chart.polarScatter","phrases":["polar scatter plot","polar scatter chart","radial scatter plot"],"shadows":["chart.scatter"]},{"id":"chart.polarLine","phrases":["polar line plot","polar line chart","radial line chart"],"shadows":["chart.line"]},{"id":"chart.radar","phrases":["radar chart","spider chart"]},{"id":"mark.point","phrases":["point mark","circle marks"]},{"id":"mark.tick","phrases":["tick mark","tick plot"]},{"id":"mark.text","phrases":["text mark","data labels"]},{"id":"mark.line","phrases":["line mark","path mark"]},{"id":"mark.bar","phrases":["bar mark","rectangle bars"]},{"id":"mark.area","phrases":["area mark","filled area"]},{"id":"mark.rule","phrases":["rule mark","reference line mark"],"shadows":["mark.line"]},{"id":"mark.arc","phrases":["arc mark","polar sectors"]},{"id":"mark.rect","phrases":["rect mark","rectangle cells"]},{"id":"transform.filter","phrases":["filter data","filtered dataset","filter rows"]},{"id":"transform.density","phrases":["density data","kde data","kernel density data"]},{"id":"transform.regression","phrases":["regression data","fitted rows","loess data"]},{"id":"transform.window","phrases":["moving average","moving mean","window transform","rank rows","lag values"]},{"id":"transform.timeUnit","phrases":["time unit","date bucket","month bucket","year bucket"]},{"id":"transform.bin1d","phrases":["bin one field","one dimensional bins","histogram bins"]},{"id":"transform.bin2d","phrases":["bin two fields","two dimensional bins","2d bins","bin2d","rectangular bins","binned heatmap"]},{"id":"transform.interval","phrases":["interval data","confidence interval data","summary interval"]},{"id":"transform.ecdf","phrases":["ecdf data","empirical cumulative distribution data","cumulative probability transform"]},{"id":"statistics.regression","phrases":["regression line","trend line","fitted line","regression fit","best fit line","fitted trend"]},{"id":"statistics.errorBar","phrases":["error bars","error bar","point and whisker","point whisker plot","uncertainty whiskers"]},{"id":"statistics.errorBand","phrases":["error band","uncertainty ribbon","confidence band"]},{"id":"scale.create","phrases":["create scale","named scale","custom scale"]},{"id":"scale.log","phrases":["log scale","logarithmic scale"]},{"id":"scale.time","phrases":["time scale","temporal scale"]},{"id":"scale.color","phrases":["color scale","colour scale","palette scale"]},{"id":"encoding.x","phrases":["x encoding","encode x","map to x"]},{"id":"encoding.y","phrases":["y encoding","encode y","map to y"]},{"id":"encoding.color","phrases":["color encoding","encode color","map to color","color legend","colour legend"]},{"id":"encoding.size","phrases":["size encoding","encode size","map to size","size legend"]},{"id":"encoding.shape","phrases":["shape encoding","encode shape","map to shape","shape legend"]},{"id":"encoding.angle","phrases":["angle encoding","encode angle","rotate ticks","rotate points"]},{"id":"encoding.opacity","phrases":["opacity encoding","encode opacity","map to opacity","opacity legend"]},{"id":"encoding.strokeDash","phrases":["stroke dash encoding","stroke dash","dashed stroke","dash encoding","line style encoding","stroke dash legend"]},{"id":"encoding.strokeWidth","phrases":["stroke width encoding","encode stroke width","line width encoding","stroke width legend"]},{"id":"encoding.text","phrases":["text encoding","encode text","label field"]},{"id":"encoding.group","phrases":["group encoding","group series","series grouping"]},{"id":"encoding.theta","phrases":["theta encoding","angular encoding","encode theta"]},{"id":"encoding.radius","phrases":["radius encoding","radial encoding","encode radius"]},{"id":"encoding.parallel","phrases":["parallel dimensions","dimension axes"]},{"id":"guide.all","phrases":["create guides","automatic guides","all guides"]},{"id":"guide.axes","phrases":["axes","axis guides","x and y axes"]},{"id":"guide.xAxis","phrases":["x axis","horizontal axis"]},{"id":"guide.yAxis","phrases":["y axis","vertical axis"]},{"id":"guide.thetaAxis","phrases":["theta axis","angular axis"]},{"id":"guide.radialAxis","phrases":["radial axis","radius axis"]},{"id":"guide.legend","phrases":["legend","encoding key"]},{"id":"guide.grid","phrases":["grid lines","chart grid","reference grid","grid"]},{"id":"guide.title","phrases":["chart title","add title","with title","titled","title and subtitle"]},{"id":"guide.subtitle","phrases":["subtitle","title and subtitle"]},{"id":"layout.legend.bottom","phrases":["legend at bottom","bottom legend"],"exclusiveGroup":"legend.position"},{"id":"layout.legend.top","phrases":["legend at top","top legend"],"exclusiveGroup":"legend.position"},{"id":"layout.legend.left","phrases":["legend at left","left legend"],"exclusiveGroup":"legend.position"},{"id":"layout.legend.right","phrases":["legend at right","right legend"],"exclusiveGroup":"legend.position"},{"id":"layout.labels","phrases":["avoid label overlap","label collision","layout labels"]},{"id":"layout.jitter","phrases":["jitter points","point jitter","reduce overplotting"]},{"id":"layout.packing","phrases":["pack points","point packing","avoid point overlap","collision free points"]},{"id":"layout.categoryOrder","phrases":["order categories","sort categories","category order"]},{"id":"layout.facet","phrases":["facet chart","small multiples","repeat chart by field"]},{"id":"selection.store","phrases":["store selection","reusable selection","select marks"]},{"id":"selection.highlight","phrases":["highlight marks","highlight selected","conditional highlight"]},{"id":"selection.filter","phrases":["filter marks","retain matching marks"]},{"id":"composition.horizontal","phrases":["horizontal concat","horizontally concatenate","charts side by side"]},{"id":"composition.vertical","phrases":["vertical concat","vertically concatenate","stack charts vertically"]},{"id":"renderer.canvas","phrases":["render to canvas","browser canvas","canvas renderer","as canvas","on canvas","on the chart canvas"]},{"id":"renderer.svg","phrases":["render svg","export svg","svg output","as svg","vector svg","svg document","accessible svg","svg"]},{"id":"renderer.png","phrases":["render png","export png","png output","as png"]},{"id":"renderer.pdf","phrases":["render pdf","export pdf","pdf output","as pdf","vector pdf","pdf document"]},{"id":"unsupported.geo","phrases":["map chart","geographic chart","geo projection","choropleth"],"unsupported":"Geographic projections and map marks are outside the current ggaction contract."},{"id":"unsupported.animation","phrases":["animate chart","chart animation","animated transition","animated chart","animation","transitions"],"unsupported":"Animation is outside the current static-chart contract."},{"id":"unsupported.interaction","phrases":["interactive tooltip","hover tooltip","tooltip on hover","tooltip","tooltips","zoom interaction","pan interaction","brush interaction","hover interaction","click interaction","interactive chart","event handling"],"unsupported":"Interactive runtime behaviors are outside the current static-chart contract."},{"id":"unsupported.3d","phrases":["3d chart","three dimensional chart","three dimensional plot"],"unsupported":"Three-dimensional charts are not supported."},{"id":"unsupported.jpg","phrases":["export jpg","render jpeg","jpeg output","jpeg image","jpg image"],"unsupported":"JPEG is not a current renderer; use SVG, PNG, PDF, or Browser Canvas."}],"providers":[{"id":"action.createCanvas","kind":"action","name":"createCanvas","order":10,"anchors":["program.canvas"],"covers":["program.canvas"],"baseOptions":{}},{"id":"action.createData","kind":"action","name":"createData","order":20,"anchors":["program.data"],"covers":["program.data"],"baseOptions":{"values":"[{ category: \"A\", x: 1, y: 2, value: 3 }]"}},{"id":"action.createScatterPlot","kind":"action","name":"createScatterPlot","order":40,"anchors":["chart.scatter"],"covers":["chart.scatter","encoding.x","encoding.y","encoding.color","encoding.size","encoding.shape","guide.axes","guide.legend"],"baseOptions":{"x":"\"x\"","y":"\"y\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"encoding.size":{"size":"\"value\""},"encoding.shape":{"shape":"\"category\""},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createDotPlot","kind":"action","name":"createDotPlot","order":40,"anchors":["chart.dot"],"covers":["chart.dot","encoding.x","encoding.y","guide.axes","guide.all"],"baseOptions":{"category":"\"category\"","value":"\"value\""}},{"id":"action.createLollipopPlot","kind":"action","name":"createLollipopPlot","order":40,"anchors":["chart.lollipop"],"covers":["chart.lollipop","encoding.x","encoding.y","guide.axes","guide.all"],"baseOptions":{"category":"\"category\"","value":"\"value\""}},{"id":"action.createDumbbellPlot","kind":"action","name":"createDumbbellPlot","order":40,"anchors":["chart.dumbbell"],"covers":["chart.dumbbell","encoding.x","encoding.y","guide.axes","guide.all"],"baseOptions":{"category":"\"category\"","start":"\"before\"","end":"\"after\""}},{"id":"action.createECDFPlot","kind":"action","name":"createECDFPlot","order":40,"anchors":["chart.ecdf"],"covers":["chart.ecdf","transform.ecdf","encoding.x","encoding.y","guide.axes","guide.all"],"baseOptions":{"field":"\"value\""}},{"id":"action.createIntervalPlot","kind":"action","name":"createIntervalPlot","order":40,"anchors":["chart.interval"],"covers":["chart.interval","statistics.errorBar","encoding.x","encoding.y","guide.axes","guide.all"],"baseOptions":{"x":"\"category\"","y":"\"value\""}},{"id":"action.createRegressionPlot","kind":"action","name":"createRegressionPlot","order":40,"anchors":["chart.regression"],"covers":["chart.regression","chart.scatter","statistics.regression","statistics.errorBand","encoding.x","encoding.y","guide.axes","guide.all"],"baseOptions":{"x":"\"x\"","y":"\"y\""}},{"id":"action.createLinePlot","kind":"action","name":"createLinePlot","order":40,"anchors":["chart.line"],"covers":["chart.line","encoding.x","encoding.y","encoding.color","encoding.group","encoding.strokeDash","guide.axes","guide.legend"],"baseOptions":{"x":"\"x\"","y":"\"y\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"encoding.group":{"groupBy":"\"category\""},"encoding.strokeDash":{"strokeDash":"{ field: \"category\" }"},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createBarPlot","kind":"action","name":"createBarPlot","order":40,"anchors":["chart.bar"],"covers":["chart.bar","encoding.x","encoding.y","encoding.color","guide.axes","guide.legend"],"baseOptions":{"x":"\"category\"","y":"\"value\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createHorizontalBar","kind":"action","name":"createBarMark","order":40,"anchors":["chart.bar.horizontal"],"covers":["chart.bar.horizontal"],"baseOptions":{"id":"\"bar\""}},{"id":"action.createHistogram","kind":"action","name":"createHistogram","order":40,"anchors":["chart.histogram"],"covers":["chart.histogram","transform.bin1d","encoding.color","guide.axes","guide.legend"],"baseOptions":{"field":"\"value\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createHeatmap","kind":"action","name":"createHeatmap","order":40,"anchors":["chart.heatmap"],"covers":["chart.heatmap","transform.bin2d","encoding.x","encoding.y","encoding.color","guide.axes","guide.legend"],"baseOptions":{"x":"\"x\"","y":"\"y\"","bin":"{}"},"optionsByConstraint":{"encoding.color":{"color":"{}"},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createParallelCoordinates","kind":"action","name":"createParallelCoordinates","order":40,"anchors":["chart.parallel"],"covers":["chart.parallel","encoding.parallel","encoding.color","encoding.strokeDash","guide.axes","guide.legend"],"baseOptions":{"dimensions":"[\"a\", \"b\"]"},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"encoding.strokeDash":{"strokeDash":"{ field: \"category\" }"},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createBoxPlot","kind":"action","name":"createBoxPlot","order":40,"anchors":["chart.box"],"covers":["chart.box","guide.axes"],"baseOptions":{},"optionsByConstraint":{"guide.axes":{"guides":"{}"}}},{"id":"action.createViolinPlot","kind":"action","name":"createViolinPlot","order":40,"anchors":["chart.violin"],"covers":["chart.violin","encoding.color","guide.axes","guide.legend"],"baseOptions":{"x":"\"category\"","y":"\"value\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"guide.axes":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"}}},{"id":"action.createGradientPlot","kind":"action","name":"createGradientPlot","order":40,"anchors":["chart.gradient"],"covers":["chart.gradient","guide.axes"],"baseOptions":{},"optionsByConstraint":{"guide.axes":{"guides":"{}"}}},{"id":"action.createDensityPlot","kind":"action","name":"createDensityPlot","order":50,"anchors":["chart.density"],"covers":["chart.density","guide.axes","guide.xAxis","guide.yAxis","guide.grid","guide.all"],"baseOptions":{"field":"\"value\""}},{"id":"action.createAreaPlot","kind":"action","name":"createAreaPlot","order":10,"anchors":["chart.area"],"covers":["chart.area","encoding.x","encoding.y","guide.axes","guide.xAxis","guide.yAxis","guide.grid","guide.all"],"baseOptions":{"x":"\"x\"","y":"\"y\""}},{"id":"action.createRugPlot","kind":"action","name":"createRugPlot","order":40,"anchors":["chart.rug"],"covers":["chart.rug","encoding.x","guide.axes","guide.xAxis","guide.all"],"baseOptions":{"x":"\"value\"","edge":"\"bottom\""}},{"id":"action.createStripPlot","kind":"action","name":"createStripPlot","order":40,"anchors":["chart.strip"],"covers":["chart.strip","encoding.x","encoding.color","encoding.size","encoding.shape","guide.axes","guide.xAxis","guide.legend","guide.all","layout.jitter"],"baseOptions":{"x":"\"value\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"encoding.size":{"size":"\"value\""},"encoding.shape":{"shape":"\"category\""},"guide.axes":{"guides":"{}"},"guide.xAxis":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"},"guide.all":{"guides":"{}"},"layout.jitter":{"jitter":"{ maxOffset: { pixels: 4 }, seed: \"strip\" }"}}},{"id":"action.createBeeswarmPlot","kind":"action","name":"createBeeswarmPlot","order":40,"anchors":["chart.beeswarm"],"covers":["chart.beeswarm","encoding.x","encoding.y","encoding.color","encoding.size","encoding.shape","guide.axes","guide.legend","guide.all","layout.packing"],"baseOptions":{"x":"{ field: \"category\", fieldType: \"nominal\" }","y":"\"value\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"encoding.size":{"size":"\"value\""},"encoding.shape":{"shape":"\"category\""},"guide.axes":{"guides":"{}"},"guide.legend":{"color":"\"category\"","guides":"{ legend: {} }"},"guide.all":{"guides":"{}"},"layout.packing":{"packing":"{ key: \"id\" }"}}},{"id":"action.createRaincloudPlot","kind":"action","name":"createRaincloudPlot","order":40,"anchors":["chart.raincloud"],"covers":["chart.raincloud","encoding.x","encoding.y","encoding.color","guide.axes","guide.legend","guide.all","layout.packing"],"baseOptions":{"category":"{ field: \"category\", fieldType: \"nominal\" }","value":"\"value\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"guide.axes":{"guides":"{}"},"guide.legend":{"color":"\"category\"","guides":"{ legend: {} }"},"guide.all":{"guides":"{}"},"layout.packing":{"points":"{ type: \"beeswarm\", packing: { key: \"id\" } }"}}},{"id":"action.createHorizonPlot","kind":"action","name":"createHorizonPlot","order":50,"anchors":["chart.horizon"],"covers":["chart.horizon","encoding.x","encoding.y","guide.axes","guide.xAxis","guide.grid","guide.all"],"baseOptions":{"x":"\"x\"","y":"\"y\""}},{"id":"action.createPieChart","kind":"action","name":"createPiePlot","order":40,"anchors":["chart.pie"],"covers":["chart.pie","encoding.color","guide.legend","guide.all"],"baseOptions":{"category":"\"category\""}},{"id":"action.createDonutChart","kind":"action","name":"createPiePlot","order":40,"anchors":["chart.donut"],"covers":["chart.donut","encoding.color","guide.legend","guide.all"],"baseOptions":{"category":"\"category\"","arc":"{ innerRadius: 0.55, padAngle: 2 }"}},{"id":"action.createRoseChart","kind":"action","name":"createRosePlot","order":40,"anchors":["chart.rose"],"covers":["chart.rose","encoding.theta","encoding.radius","encoding.color","guide.axes","guide.grid","guide.legend","guide.all"],"baseOptions":{"category":"\"category\""}},{"id":"action.createRadialBarChart","kind":"action","name":"createRadialBarPlot","order":40,"anchors":["chart.radialBar"],"covers":["chart.radialBar","encoding.theta","encoding.radius","encoding.color","guide.axes","guide.grid","guide.legend","guide.all"],"baseOptions":{"category":"\"category\""}},{"id":"action.createPolarScatterPlot","kind":"action","name":"createPolarScatterPlot","order":40,"anchors":["chart.polarScatter"],"covers":["chart.polarScatter","encoding.theta","encoding.radius","encoding.color","encoding.size","encoding.shape","guide.axes","guide.grid","guide.legend","guide.all"],"baseOptions":{"theta":"\"angle\"","radius":"\"distance\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"encoding.size":{"size":"\"value\""},"encoding.shape":{"shape":"\"category\""},"guide.axes":{"guides":"{}"},"guide.grid":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"},"guide.all":{"guides":"{}"}}},{"id":"action.createPolarLinePlot","kind":"action","name":"createPolarLinePlot","order":40,"anchors":["chart.polarLine"],"covers":["chart.polarLine","encoding.theta","encoding.radius","encoding.color","encoding.group","encoding.strokeDash","guide.axes","guide.grid","guide.legend","guide.all"],"baseOptions":{"theta":"\"angle\"","radius":"\"distance\""},"optionsByConstraint":{"encoding.color":{"color":"\"category\""},"encoding.group":{"groupBy":"\"category\""},"encoding.strokeDash":{"strokeDash":"{ field: \"category\" }"},"guide.axes":{"guides":"{}"},"guide.grid":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"},"guide.all":{"guides":"{}"}}},{"id":"action.createRadarPlot","kind":"action","name":"createRadarPlot","order":40,"anchors":["chart.radar"],"covers":["chart.radar","encoding.theta","encoding.radius","encoding.color","encoding.group","encoding.strokeDash","guide.axes","guide.grid","guide.legend","guide.all"],"baseOptions":{"category":"\"category\"","value":"\"value\""},"optionsByConstraint":{"encoding.color":{"color":"\"series\""},"encoding.group":{"groupBy":"\"series\""},"encoding.strokeDash":{"strokeDash":"{ field: \"series\" }"},"guide.axes":{"guides":"{}"},"guide.grid":{"guides":"{}"},"guide.legend":{"guides":"{ legend: {} }"},"guide.all":{"guides":"{}"}}},{"id":"action.createPointMark","kind":"action","name":"createPointMark","order":40,"anchors":["mark.point"],"covers":["mark.point"],"baseOptions":{}},{"id":"action.createTickMark","kind":"action","name":"createTickMark","order":40,"anchors":["mark.tick"],"covers":["mark.tick"],"baseOptions":{}},{"id":"action.createTextMark","kind":"action","name":"createTextMark","order":40,"anchors":["mark.text"],"covers":["mark.text"],"baseOptions":{}},{"id":"action.createLineMark","kind":"action","name":"createLineMark","order":40,"anchors":["mark.line"],"covers":["mark.line"],"baseOptions":{}},{"id":"action.createBarMark","kind":"action","name":"createBarMark","order":40,"anchors":["mark.bar"],"covers":["mark.bar"],"baseOptions":{}},{"id":"action.createAreaMark","kind":"action","name":"createAreaMark","order":40,"anchors":["mark.area"],"covers":["mark.area"],"baseOptions":{}},{"id":"action.createRuleMark","kind":"action","name":"createRuleMark","order":40,"anchors":["mark.rule"],"covers":["mark.rule"],"baseOptions":{}},{"id":"action.createArcMark","kind":"action","name":"createArcMark","order":40,"anchors":["mark.arc"],"covers":["mark.arc"],"baseOptions":{}},{"id":"action.createRectMark","kind":"action","name":"createRectMark","order":40,"anchors":["mark.rect"],"covers":["mark.rect"],"baseOptions":{}},{"id":"action.filterData","kind":"action","name":"filterData","order":30,"anchors":["transform.filter"],"covers":["transform.filter"],"baseOptions":{"id":"\"filtered\"","field":"\"value\"","predicate":"{ op: \"gt\", value: 0 }"}},{"id":"action.createDensityData","kind":"action","name":"createDensityData","order":30,"anchors":["transform.density"],"covers":["transform.density"],"baseOptions":{"id":"\"density\"","field":"\"value\""}},{"id":"action.createRegressionData","kind":"action","name":"createRegressionData","order":30,"anchors":["transform.regression"],"covers":["transform.regression"],"baseOptions":{"id":"\"regression\"","x":"\"x\"","y":"\"y\""}},{"id":"action.createWindowData","kind":"action","name":"createWindowData","order":30,"anchors":["transform.window"],"covers":["transform.window"],"baseOptions":{"id":"\"windowed\"","operations":"[{ op: \"movingMean\", field: \"value\", as: \"movingMean\", frame: { preceding: 2 } }]"}},{"id":"action.createTimeUnitData","kind":"action","name":"createTimeUnitData","order":30,"anchors":["transform.timeUnit"],"covers":["transform.timeUnit"],"baseOptions":{"id":"\"monthly\"","field":"\"date\"","unit":"\"month\"","as":"\"month\""}},{"id":"action.encodeHistogram","kind":"action","name":"encodeHistogram","order":50,"anchors":["transform.bin1d"],"covers":["transform.bin1d"],"baseOptions":{"field":"\"value\""}},{"id":"action.createBin2DData","kind":"action","name":"createBin2DData","order":30,"anchors":["transform.bin2d"],"covers":["transform.bin2d"],"baseOptions":{"id":"\"bins\"","x":"\"x\"","y":"\"y\""}},{"id":"action.createIntervalData","kind":"action","name":"createIntervalData","order":30,"anchors":["transform.interval"],"covers":["transform.interval"],"baseOptions":{"id":"\"interval\"","field":"\"value\""}},{"id":"action.createECDFData","kind":"action","name":"createECDFData","order":30,"anchors":["transform.ecdf"],"covers":["transform.ecdf"],"baseOptions":{"id":"\"ecdf\"","field":"\"value\""}},{"id":"action.createRegression","kind":"action","name":"createRegression","order":60,"anchors":["statistics.regression"],"covers":["mark.line","transform.regression","statistics.regression","statistics.errorBand"],"baseOptions":{}},{"id":"action.createErrorBar","kind":"action","name":"createErrorBar","order":60,"anchors":["statistics.errorBar"],"covers":["statistics.errorBar"],"baseOptions":{}},{"id":"action.createErrorBand","kind":"action","name":"createErrorBand","order":61,"anchors":["statistics.errorBand"],"covers":["statistics.errorBand"],"baseOptions":{}},{"id":"action.createScale","kind":"action","name":"createScale","order":35,"anchors":["scale.create"],"covers":["scale.create"],"baseOptions":{"id":"\"scale-1\""}},{"id":"action.createLogScale","kind":"action","name":"createScale","order":35,"anchors":["scale.log"],"covers":["scale.log"],"baseOptions":{"id":"\"scale-1\"","type":"\"log\""}},{"id":"action.createTimeScale","kind":"action","name":"createScale","order":35,"anchors":["scale.time"],"covers":["scale.time"],"baseOptions":{"id":"\"scale-1\"","type":"\"time\""}},{"id":"action.createColorScale","kind":"action","name":"createScale","order":35,"anchors":["scale.color"],"covers":["scale.color"],"baseOptions":{"id":"\"color-scale\"","type":"\"ordinal\"","range":"{ palette: \"tableau10\" }"}},{"id":"action.encodeX","kind":"action","name":"encodeX","order":50,"anchors":["encoding.x"],"covers":["encoding.x"],"baseOptions":{"field":"\"x\""}},{"id":"action.encodeY","kind":"action","name":"encodeY","order":50,"anchors":["encoding.y"],"covers":["encoding.y"],"baseOptions":{"field":"\"y\""}},{"id":"action.encodeColor","kind":"action","name":"encodeColor","order":55,"anchors":["encoding.color"],"covers":["encoding.color"],"baseOptions":{"field":"\"category\""}},{"id":"action.encodeSize","kind":"action","name":"encodeSize","order":55,"anchors":["encoding.size"],"covers":["encoding.size"],"baseOptions":{"field":"\"value\""}},{"id":"action.encodeShape","kind":"action","name":"encodeShape","order":55,"anchors":["encoding.shape"],"covers":["encoding.shape"],"baseOptions":{"field":"\"category\""}},{"id":"action.encodeAngle","kind":"action","name":"encodeAngle","order":55,"anchors":["encoding.angle"],"covers":["encoding.angle"],"baseOptions":{"value":"45"}},{"id":"action.encodeOpacity","kind":"action","name":"encodeOpacity","order":55,"anchors":["encoding.opacity"],"covers":["encoding.opacity"],"baseOptions":{"field":"\"value\""}},{"id":"action.encodeStrokeDash","kind":"action","name":"encodeStrokeDash","order":55,"anchors":["encoding.strokeDash"],"covers":["encoding.strokeDash"],"baseOptions":{"field":"\"category\""}},{"id":"action.encodeStrokeWidth","kind":"action","name":"encodeStrokeWidth","order":55,"anchors":["encoding.strokeWidth"],"covers":["encoding.strokeWidth"],"baseOptions":{"value":"2"}},{"id":"action.encodeText","kind":"action","name":"encodeText","order":55,"anchors":["encoding.text"],"covers":["encoding.text"],"baseOptions":{"field":"\"label\""}},{"id":"action.encodeGroup","kind":"action","name":"encodeGroup","order":52,"anchors":["encoding.group"],"covers":["encoding.group"],"baseOptions":{"field":"\"category\""}},{"id":"action.encodeTheta","kind":"action","name":"encodeTheta","order":50,"anchors":["encoding.theta"],"covers":["encoding.theta"],"baseOptions":{"field":"\"angle\""}},{"id":"action.encodeR","kind":"action","name":"encodeR","order":50,"anchors":["encoding.radius"],"covers":["encoding.radius"],"baseOptions":{"field":"\"value\""}},{"id":"action.encodeParallelCoordinates","kind":"action","name":"encodeParallelCoordinates","order":50,"anchors":["encoding.parallel"],"covers":["encoding.parallel"],"baseOptions":{"dimensions":"[\"a\", \"b\"]"}},{"id":"action.createGuides","kind":"action","name":"createGuides","order":70,"anchors":["guide.all"],"covers":["guide.all","guide.axes","guide.legend","guide.grid"],"baseOptions":{}},{"id":"action.createAxes","kind":"action","name":"createAxes","order":70,"anchors":["guide.axes"],"covers":["guide.axes"],"baseOptions":{}},{"id":"action.createXAxis","kind":"action","name":"createXAxis","order":70,"anchors":["guide.xAxis"],"covers":["guide.xAxis"],"baseOptions":{}},{"id":"action.createYAxis","kind":"action","name":"createYAxis","order":70,"anchors":["guide.yAxis"],"covers":["guide.yAxis"],"baseOptions":{}},{"id":"action.createThetaAxis","kind":"action","name":"createThetaAxis","order":70,"anchors":["guide.thetaAxis"],"covers":["guide.thetaAxis"],"baseOptions":{}},{"id":"action.createRadialAxis","kind":"action","name":"createRadialAxis","order":70,"anchors":["guide.radialAxis"],"covers":["guide.radialAxis"],"baseOptions":{}},{"id":"action.createLegend","kind":"action","name":"createLegend","order":70,"anchors":["guide.legend"],"covers":["guide.legend"],"baseOptions":{}},{"id":"action.createGrid","kind":"action","name":"createGrid","order":70,"anchors":["guide.grid"],"covers":["guide.grid"],"baseOptions":{}},{"id":"action.createTitle","kind":"action","name":"createTitle","order":70,"anchors":["guide.title","guide.subtitle"],"covers":["guide.title","guide.subtitle"],"baseOptions":{"text":"\"Chart title\""},"optionsByConstraint":{"guide.subtitle":{"subtitle":"\"Chart subtitle\""}}},{"id":"action.legendBottom","kind":"action","name":"editLegendLayout","order":80,"anchors":["layout.legend.bottom"],"covers":["layout.legend.bottom"],"baseOptions":{"position":"\"bottom\""}},{"id":"action.legendTop","kind":"action","name":"editLegendLayout","order":80,"anchors":["layout.legend.top"],"covers":["layout.legend.top"],"baseOptions":{"position":"\"top\""}},{"id":"action.legendLeft","kind":"action","name":"editLegendLayout","order":80,"anchors":["layout.legend.left"],"covers":["layout.legend.left"],"baseOptions":{"position":"\"left\""}},{"id":"action.legendRight","kind":"action","name":"editLegendLayout","order":80,"anchors":["layout.legend.right"],"covers":["layout.legend.right"],"baseOptions":{"position":"\"right\""}},{"id":"action.layoutLabels","kind":"action","name":"layoutLabels","order":80,"anchors":["layout.labels"],"covers":["layout.labels"],"baseOptions":{"axis":"\"y\""}},{"id":"action.jitterPoints","kind":"action","name":"jitterPoints","order":80,"anchors":["layout.jitter"],"covers":["layout.jitter"],"baseOptions":{"channel":"\"x\"","maxOffset":"{ pixels: 4 }"}},{"id":"action.packPoints","kind":"action","name":"packPoints","order":80,"anchors":["layout.packing"],"covers":["layout.packing"],"baseOptions":{"channel":"\"x\""}},{"id":"action.orderCategories","kind":"action","name":"orderCategories","order":80,"anchors":["layout.categoryOrder"],"covers":["layout.categoryOrder"],"baseOptions":{"channel":"\"x\"","by":"\"category\""}},{"id":"action.facet","kind":"action","name":"facet","order":80,"anchors":["layout.facet"],"covers":["layout.facet","guide.axes","guide.legend"],"baseOptions":{"field":"\"category\""},"optionsByConstraint":{"guide.axes":{"guides":"{ axes: \"outer\", legend: \"shared\" }"},"guide.legend":{"guides":"{ axes: \"outer\", legend: \"shared\" }"}}},{"id":"action.selectMarks","kind":"action","name":"selectMarks","order":75,"anchors":["selection.store"],"covers":["selection.store"],"baseOptions":{"id":"\"selection-1\"","field":"\"category\"","op":"\"eq\"","value":"\"A\""}},{"id":"action.highlightMarks","kind":"action","name":"highlightMarks","order":76,"anchors":["selection.highlight"],"covers":["selection.highlight"],"baseOptions":{"select":"{ field: \"category\", op: \"eq\", value: \"A\" }","color":"\"#f28e2b\""}},{"id":"action.filterMarks","kind":"action","name":"filterMarks","order":75,"anchors":["selection.filter"],"covers":["selection.filter"],"baseOptions":{"field":"\"value\"","op":"\"gt\"","value":"0"}},{"id":"runtime.hconcat","kind":"runtime","name":"hconcat","order":90,"anchors":["composition.horizontal"],"covers":["composition.horizontal"],"signature":"hconcat(options: CompositionOptions): ChartProgram;","call":"hconcat({ programs: [program, program] })","route":"/reference/runtime/#ggaction"},{"id":"runtime.vconcat","kind":"runtime","name":"vconcat","order":90,"anchors":["composition.vertical"],"covers":["composition.vertical"],"signature":"vconcat(options: CompositionOptions): ChartProgram;","call":"vconcat({ programs: [program, program] })","route":"/reference/runtime/#ggaction"},{"id":"runtime.render","kind":"runtime","name":"render","order":100,"anchors":["renderer.canvas"],"covers":["renderer.canvas"],"signature":"render(program: Pick<ChartProgram, \"graphicSpec\">, context: CanvasRenderingContext2D, options?: { pixelRatio?: number }): void;","call":"render(program, context)","route":"/reference/runtime/#ggaction"},{"id":"runtime.renderToSVG","kind":"runtime","name":"renderToSVG","order":100,"anchors":["renderer.svg"],"covers":["renderer.svg"],"signature":"renderToSVG(program: Pick<ChartProgram, \"graphicSpec\">, options?: SVGRenderOptions): string;","call":"renderToSVG(program)","route":"/reference/runtime/#ggactionsvg"},{"id":"runtime.renderToPNG","kind":"runtime","name":"renderToPNG","order":100,"anchors":["renderer.png"],"covers":["renderer.png"],"signature":"renderToPNG(program: Pick<ChartProgram, \"graphicSpec\">, options: { output: string; pixelRatio?: number }): Promise<PNGRenderResult>;","call":"await renderToPNG(program, { output: \"chart.png\" })","route":"/reference/runtime/#ggactionpng"},{"id":"runtime.renderToPDF","kind":"runtime","name":"renderToPDF","order":100,"anchors":["renderer.pdf"],"covers":["renderer.pdf"],"signature":"renderToPDF(program: Pick<ChartProgram, \"graphicSpec\">, options: PDFRenderOptions): Promise<PDFRenderResult>;","call":"await renderToPDF(program, { output: \"chart.pdf\" })","route":"/reference/runtime/#ggactionpdf"}]}
@@ -1 +1 @@
1
- {"schemaVersion":2,"packageVersion":"0.0.12","overview":{"title":"ggaction compact authoring overview","text":"Use search_ggaction once with only the exact user chart request; do not append dataset contents or code scaffolding. The result contains exact authoring imports, chart() initialization, non-duplicated createCanvas and createData prerequisites, syntax-valid immutable steps with deterministic runtime dependencies closed, ordered actionPlan entries, applied options, explicit placeholder bindings, unmatched requirements, canonical routes, terminal unsupported constraints, and open unresolved decisions. Do not treat template field names as inferred dataset facts. Do not preload the full documentation. Read an action card when one exact action needs more detail. Read only the resource URIs attached to unresolved entries; unsupported entries are terminal and require no documentation read. The server is read-only and never executes chart code."},"recipes":[{"id":"scatter-svg","title":"Scatterplot with a bottom color legend and SVG output","summary":"Selects the chart facade, legend layout action, and browser-safe SVG renderer in execution order.","query":"scatter plot with a color legend at bottom as svg"},{"id":"moving-average-line-png","title":"Moving-average line chart as PNG","summary":"Combines a window transform, line facade, guides, and the Node PNG renderer.","query":"moving average line chart with axes and export png"},{"id":"binned-heatmap","title":"Binned heatmap with guides","summary":"Uses the heatmap facade to own 2D binning, position, color, axes, and legend requirements.","query":"binned heatmap with color legend and axes"},{"id":"regression-scatterplot","title":"Scatterplot with a regression layer","summary":"Builds the scatterplot before adding the statistical regression layer.","query":"scatter plot with a regression line"},{"id":"selection-highlight","title":"Stored selection and highlight","summary":"Stores a named mark selection before applying a graphical highlight to that selection.","query":"store selection then highlight marks"},{"id":"parallel-svg","title":"Styled parallel coordinates as SVG","summary":"Combines parallel coordinates, color and dash encodings, guides, and SVG output.","query":"parallel coordinates with color encoding, stroke dash encoding, axes, and legend as svg"},{"id":"facet-shared-guides","title":"Small multiples with shared guides","summary":"Uses the facet action as the owner of the small-multiple layout and shared guides.","query":"small multiples with shared legend and axes"},{"id":"horizontal-composition-svg","title":"Horizontal chart composition as SVG","summary":"Composes complete programs horizontally before serializing the parent program to SVG.","query":"put charts side by side and export svg"}],"docs":[{"id":"choose-chart-type","title":"Choose a chart or mark type","route":"/api/basic-charts/","text":"# Choose a chart or mark type\n\nName the intended chart or mark. Common complete chart facades are `createScatterPlot`, `createLinePlot`, `createBarPlot`, `createHistogram`, and `createHeatmap`. For lower-level authoring, choose a mark such as point, line, area, bar, rect, rule, tick, text, or arc, then add its required position encodings. Run `search_ggaction` again with the chosen chart type."},{"id":"choose-renderer","title":"Choose an output renderer","route":"/api/rendering/","text":"# Choose an output renderer\n\nUse `render(program, context)` for Browser Canvas, `renderToSVG(program)` for a browser-safe SVG string, `renderToPNG(program, output)` for Node PNG output, or `renderToPDF(program, output)` for a single-page vector PDF. Run `search_ggaction` again with one explicit format. JPEG output is not currently supported."},{"id":"legend-layout","title":"Resolve legend layout requirements","route":"/api/legends/","text":"# Resolve legend layout requirements\n\nA single legend resource can occupy one position at a time. Choose `top`, `bottom`, `left`, or `right`, or give distinct legends explicit IDs and edit each target separately. Run `search_ggaction` again with one position per legend."},{"id":"unsupported-capabilities","title":"Current static-chart limitations","route":"/supported-features/","text":"# Current static-chart limitations\n\nThe current authoring contract does not provide geographic maps, animation, interactive event handling, 3D charts, or JPEG rendering. The compact resolver reports these requirements explicitly instead of substituting a different chart. Consult the supported-features route before redesigning the task with current static actions."},{"id":"getting-started","title":"Clarify an unrecognized authoring request","route":"/getting-started/","text":"# Clarify an authoring request\n\nDescribe the chart or mark, its data/transform needs, position and appearance encodings, guides or layout, and output format in one request. Exact action names are also accepted. Example: `scatter plot with x and y, a bottom color legend, and SVG output`."},{"id":"action-reference","title":"Resolve a current action gap","route":"/reference/actions/","text":"# Resolve a current action gap\n\nUse the complete action reference only for a constraint that the compact resolver recognized but could not cover. Confirm the exact action signature, required resource ID, and supported options, then rerun `search_ggaction` with the exact action name and complete task request."},{"id":"responsive-layout","title":"Resolve responsive size and pixel density","route":"/responsive-charts/","text":"# Resolve responsive layout\n\nA ggaction program is immutable and has concrete Canvas dimensions. Measure the host container, choose the intended aspect ratio and pixel ratio, rebuild with `editCanvas`, and rerender from a `ResizeObserver`. Do not rely on CSS scaling as chart layout. Run `search_ggaction` again only after concrete dimensions or a host resize policy are known."},{"id":"accessibility","title":"Resolve output accessibility requirements","route":"/accessibility/","text":"# Resolve output accessibility\n\nChoose an output-specific accessible name and description, provide a data-table or textual alternative, and avoid color-only meaning. SVG supports explicit `title` and `description` renderer options. Canvas requires host ARIA and fallback content. Static output does not add keyboard interaction or tooltips."}]}
1
+ {"schemaVersion":2,"packageVersion":"0.0.13","overview":{"title":"ggaction compact authoring overview","text":"Use search_ggaction once with only the exact user chart request; do not append dataset contents or code scaffolding. The result contains exact authoring imports, chart() initialization, non-duplicated createCanvas and createData prerequisites, syntax-valid immutable steps with deterministic runtime dependencies closed, ordered actionPlan entries, applied options, explicit placeholder bindings, unmatched requirements, canonical routes, terminal unsupported constraints, and open unresolved decisions. Do not treat template field names as inferred dataset facts. Do not preload the full documentation. Read an action card when one exact action needs more detail. Read only the resource URIs attached to unresolved entries; unsupported entries are terminal and require no documentation read. The server is read-only and never executes chart code."},"recipes":[{"id":"scatter-svg","title":"Scatterplot with a bottom color legend and SVG output","summary":"Selects the chart facade, legend layout action, and browser-safe SVG renderer in execution order.","query":"scatter plot with a color legend at bottom as svg"},{"id":"moving-average-line-png","title":"Moving-average line chart as PNG","summary":"Combines a window transform, line facade, guides, and the Node PNG renderer.","query":"moving average line chart with axes and export png"},{"id":"binned-heatmap","title":"Binned heatmap with guides","summary":"Uses the heatmap facade to own 2D binning, position, color, axes, and legend requirements.","query":"binned heatmap with color legend and axes"},{"id":"regression-scatterplot","title":"Scatterplot with a regression layer","summary":"Builds the scatterplot before adding the statistical regression layer.","query":"scatter plot with a regression line"},{"id":"selection-highlight","title":"Stored selection and highlight","summary":"Stores a named mark selection before applying a graphical highlight to that selection.","query":"store selection then highlight marks"},{"id":"parallel-svg","title":"Styled parallel coordinates as SVG","summary":"Combines parallel coordinates, color and dash encodings, guides, and SVG output.","query":"parallel coordinates with color encoding, stroke dash encoding, axes, and legend as svg"},{"id":"facet-shared-guides","title":"Small multiples with shared guides","summary":"Uses the facet action as the owner of the small-multiple layout and shared guides.","query":"small multiples with shared legend and axes"},{"id":"horizontal-composition-svg","title":"Horizontal chart composition as SVG","summary":"Composes complete programs horizontally before serializing the parent program to SVG.","query":"put charts side by side and export svg"}],"docs":[{"id":"choose-chart-type","title":"Choose a chart or mark type","route":"/api/basic-charts/","text":"# Choose a chart or mark type\n\nName the intended chart or mark. Common complete chart facades are `createScatterPlot`, `createLinePlot`, `createBarPlot`, `createHistogram`, and `createHeatmap`. For lower-level authoring, choose a mark such as point, line, area, bar, rect, rule, tick, text, or arc, then add its required position encodings. Run `search_ggaction` again with the chosen chart type."},{"id":"choose-renderer","title":"Choose an output renderer","route":"/api/rendering/","text":"# Choose an output renderer\n\nUse `render(program, context)` for Browser Canvas, `renderToSVG(program)` for a browser-safe SVG string, `renderToPNG(program, output)` for Node PNG output, or `renderToPDF(program, output)` for a single-page vector PDF. Run `search_ggaction` again with one explicit format. JPEG output is not currently supported."},{"id":"legend-layout","title":"Resolve legend layout requirements","route":"/api/legends/","text":"# Resolve legend layout requirements\n\nA single legend resource can occupy one position at a time. Choose `top`, `bottom`, `left`, or `right`, or give distinct legends explicit IDs and edit each target separately. Run `search_ggaction` again with one position per legend."},{"id":"unsupported-capabilities","title":"Current static-chart limitations","route":"/supported-features/","text":"# Current static-chart limitations\n\nThe current authoring contract does not provide geographic maps, animation, interactive event handling, 3D charts, or JPEG rendering. The compact resolver reports these requirements explicitly instead of substituting a different chart. Consult the supported-features route before redesigning the task with current static actions."},{"id":"getting-started","title":"Clarify an unrecognized authoring request","route":"/getting-started/","text":"# Clarify an authoring request\n\nDescribe the chart or mark, its data/transform needs, position and appearance encodings, guides or layout, and output format in one request. Exact action names are also accepted. Example: `scatter plot with x and y, a bottom color legend, and SVG output`."},{"id":"action-reference","title":"Resolve a current action gap","route":"/reference/actions/","text":"# Resolve a current action gap\n\nUse the complete action reference only for a constraint that the compact resolver recognized but could not cover. Confirm the exact action signature, required resource ID, and supported options, then rerun `search_ggaction` with the exact action name and complete task request."},{"id":"responsive-layout","title":"Resolve responsive size and pixel density","route":"/responsive-charts/","text":"# Resolve responsive layout\n\nA ggaction program is immutable and has concrete Canvas dimensions. Measure the host container, choose the intended aspect ratio and pixel ratio, rebuild with `editCanvas`, and rerender from a `ResizeObserver`. Do not rely on CSS scaling as chart layout. Run `search_ggaction` again only after concrete dimensions or a host resize policy are known."},{"id":"accessibility","title":"Resolve output accessibility requirements","route":"/accessibility/","text":"# Resolve output accessibility\n\nChoose an output-specific accessible name and description, provide a data-table or textual alternative, and avoid color-only meaning. SVG supports explicit `title` and `description` renderer options. Canvas requires host ARIA and fallback content. Static output does not add keyboard interaction or tooltips."}]}
@@ -1 +1 @@
1
- var ve=Object.defineProperty;var p=(n,e)=>ve(n,"name",{value:e,configurable:!0});import{readFileSync as se}from"node:fs";import ce from"node:path";import{fileURLToPath as be}from"node:url";const de=be(new URL("../",import.meta.url)),F=JSON.parse(se(ce.join(de,"knowledge/action-cards.json"),"utf8")),C=JSON.parse(se(ce.join(de,"knowledge/intent-taxonomy.json"),"utf8")),L=new Map(F.cards.map(n=>[n.name,n])),U=new Map(C.constraints.map(n=>[n.id,n])),le=Object.freeze(["hconcat","vconcat","render"]),ee=Object.freeze({renderToSVG:Object.freeze({entry:"ggaction/svg",output:"svg"}),renderToPNG:Object.freeze({entry:"ggaction/png",output:"png"}),renderToPDF:Object.freeze({entry:"ggaction/pdf",output:"pdf"})}),ie=Object.freeze(["createCanvas","createData"]),xe=Object.freeze({width:"800",height:"600",margin:"{ top: 140, right: 220, bottom: 120, left: 260 }"}),pe=new Set(["createScatterPlot","createLinePlot","createBarPlot","createBoxPlot","createGradientPlot","createViolinPlot"]),we=new Set(["createAxes","createXAxis","createYAxis","createGrid","createLegend","createGuides"]),$e=Object.freeze({"chart.type":"ggaction://docs/choose-chart-type","renderer.format":"ggaction://docs/choose-renderer","layout.responsive":"ggaction://docs/responsive-layout","output.accessibility":"ggaction://docs/accessibility","renderer.svg.accessibleText":"ggaction://docs/accessibility","renderer.pixelRatio":"ggaction://docs/responsive-layout","query.intent":"ggaction://docs/getting-started"});class ke extends Error{static{p(this,"TaskPacketBudgetError")}constructor(e){super(`Compact task packet is ${e} bytes; the hard ceiling is 6144 bytes.`),this.name="TaskPacketBudgetError",this.bytes=e}}function N(n){return[...new Set(n)]}p(N,"unique");function H(n){return n.normalize("NFKC").toLowerCase().replace(/[^a-z0-9]+/g," ").trim().replace(/\s+/g," ")}p(H,"normalize");function re(n,e){const t=H(e),a=` ${n} `,o=` ${t} `,i=[];let r=0;for(;r<a.length;){const l=a.indexOf(o,r);if(l===-1)break;i.push({start:l+1,end:l+o.length-1}),r=l+1}return i}p(re,"phraseOccurrences");function Se(n){return F.cards.filter(e=>new RegExp(`(?:^|[^A-Za-z0-9])${e.name}(?:$|[^A-Za-z0-9])`,"i").test(n)).map(e=>e.name)}p(Se,"exactActionNames");function Oe(n){const e=C.constraints.flatMap(i=>i.phrases.flatMap(r=>re(n,r).map(l=>({constraint:i,...l})))),t=e.filter(i=>!e.some(r=>r.constraint.shadows?.includes(i.constraint.id)&&r.start<=i.start&&r.end>=i.end)),a=C.constraints.filter(i=>t.some(r=>r.constraint.id===i.id)),o=new Map(a.map(i=>[i.id,Math.min(...t.filter(r=>r.constraint.id===i.id).map(r=>r.start))]));return{matched:a,positions:o}}p(Oe,"semanticMatchResult");function ue(n){return n.name==="createCanvas"?10:n.name==="createData"?20:n.name.endsWith("Data")?30:n.domain==="charts"||n.domain==="marks"&&n.name.startsWith("create")?40:n.domain==="encodings"?/^encode(X|Y|X2|Y2|XRange|YRange|Theta|R|Radius|ParallelCoordinates)/.test(n.name)?50:n.name==="encodeGroup"||n.name==="encodePathOrder"?52:55:n.domain==="statistics"?60:["axes","grid","legend_and_title"].includes(n.domain)?70:n.domain==="mark-selection"?75:n.domain==="composition"||/^(layout|jitter|order|replace)/.test(n.name)?80:65}p(ue,"orderForCard");function Pe(n,e){const t=L.get(n),a=C.providers.filter(o=>o.kind==="action"&&o.name===n).map(o=>({provider:o,coverage:o.covers.filter(i=>e.has(i)).length})).filter(o=>o.coverage>0).sort((o,i)=>i.coverage-o.coverage||o.provider.order-i.provider.order||o.provider.id.localeCompare(i.provider.id))[0]?.provider;return a?{...a,id:`exact.${n}`,anchors:[`action.${n}`],covers:N([`action.${n}`,...a.covers.filter(o=>e.has(o))])}:{id:`exact.${n}`,kind:"action",name:n,order:ue(t),anchors:[`action.${n}`],covers:[`action.${n}`],exactCall:t.snippet,exactOptionNames:t.options.filter(o=>new RegExp(`\\b${o.name}\\s*:`).test(t.snippet)).map(o=>o.name)}}p(Pe,"exactProvider");function Ce(n){const e=new Map;for(const o of n){if(!o.exclusiveGroup)continue;const i=e.get(o.exclusiveGroup)??[];i.push(o),e.set(o.exclusiveGroup,i)}const t=new Set,a=[];for(const[o,i]of e)if(!(i.length<2)){for(const r of i)t.add(r.id);for(const r of i)a.push({constraint:r.id,reason:`This conflicts within ${o}: ${i.map(l=>l.id).join(", ")}.`,resources:[o==="legend.position"?"ggaction://docs/legend-layout":"ggaction://docs/choose-chart-type"]})}return{blocked:t,unresolved:a}}p(Ce,"conflictResult");function Te(n,e){const t=C.providers.filter(a=>a.anchors.some(o=>n.has(o)));for(const a of e)t.push(Pe(a,n));return t}p(Te,"candidateProviders");function ze(n,e){const t=new Set(n),a=[];for(;t.size>0;){const o=e.filter(r=>!a.some(l=>l.provider.id===r.id)).map(r=>({provider:r,coverage:r.covers.filter(l=>t.has(l))})).filter(r=>r.coverage.length>0).sort((r,l)=>l.coverage.length-r.coverage.length||r.provider.order-l.provider.order||r.provider.id.localeCompare(l.provider.id));if(o.length===0)break;const i=o[0];a.push(i);for(const r of i.coverage)t.delete(r)}return{selected:a,uncovered:t}}p(ze,"selectProviders");function Me(n){let e=n;n.some(r=>r.provider.name==="selectMarks")&&(e=e.map(r=>r.provider.name!=="highlightMarks"?r:{...r,provider:{...r.provider,baseOptions:{selection:'"selection-1"',color:'"#f28e2b"'}}}));const a=e.some(r=>r.provider.name==="createRegression"&&!r.provider.id.startsWith("exact.")),o=e.some(r=>["createPointMark","createScatterPlot"].includes(r.provider.name));if(a&&!o){const r=C.providers.find(l=>l.name==="createPointMark");if(!r)throw new Error("createRegression requires the createPointMark provider.");e=[{provider:r,coverage:[]},...e]}const i=e.find(r=>r.provider.name==="editLegendLayout"&&r.coverage.some(l=>l.startsWith("layout.legend.")));if(i){const r=e.find(l=>l.coverage.includes("guide.legend")&&(l.provider.name==="createLegend"||l.provider.optionsByConstraint?.["guide.legend"]?.guides!==void 0));if(r){const l=i.provider.baseOptions?.position;if(l===void 0)throw new Error(`${i.provider.id} lacks a legend position.`);const g=i.coverage.filter(h=>h.startsWith("layout.legend."));e=e.filter(h=>h!==i).map(h=>h!==r?h:{provider:h.provider.name==="createLegend"?{...h.provider,baseOptions:{...h.provider.baseOptions??{},position:l,...l==='"left"'?{offset:"96"}:{}}}:{...h.provider,optionsByConstraint:{...h.provider.optionsByConstraint??{},"guide.legend":{...h.provider.optionsByConstraint?.["guide.legend"]??{},guides:`{ legend: { position: ${l}${l==='"left"'?", offset: 96":""} } }`}}},coverage:[...h.coverage,...g]})}}return e}p(Me,"adaptProviderDependencies");function k(n,e){return{...n,provider:{...n.provider,baseOptions:{...n.provider.baseOptions??{},...e}}}}p(k,"withBaseOptions");function te(n,e,t=[]){const a=L.get(n);if(!a)throw new Error(`Unknown runtime dependency action ${n}.`);return{provider:{id:`action.${n}`,kind:"action",name:n,order:ue(a),anchors:[],covers:[],baseOptions:e},coverage:t}}p(te,"dependencyEntry");function ye(n){const e=n.find(o=>!o.provider.id.startsWith("exact.")&&pe.has(o.provider.name));if(!e)return n;const t=n.filter(o=>!o.provider.id.startsWith("exact.")&&we.has(o.provider.name));if(t.length===0)return n;const a=t.flatMap(o=>o.coverage);return n.filter(o=>!t.includes(o)).map(o=>o===e?{...o,coverage:N([...o.coverage,...a])}:o)}p(ye,"absorbFacadeGuides");function fe(n,e,t){const a=n.indexOf(e);return a===-1?n:[...n.slice(0,a),...t,...n.slice(a+1)]}p(fe,"replaceEntry");function Be(n){const e=p(w=>n.find(D=>D.provider.name===w&&!D.provider.id.startsWith("exact.")),"semantic"),t=e("createPointMark"),a=e("createTextMark"),o=e("encodeText"),i=new Set(["encodeX","encodeY","encodeColor","encodeSize","encodeShape","encodeAngle","encodeOpacity"]),r=n.filter(w=>!w.provider.id.startsWith("exact.")&&i.has(w.provider.name));if(!t||!a||!o||!r.some(w=>w.provider.name==="encodeX")||!r.some(w=>w.provider.name==="encodeY"))return n;const l=[t,...r,a,o],g=new Set(l),h=Math.min(...l.map(w=>n.indexOf(w))),P=n.slice(0,h).filter(w=>!g.has(w)).length,x=n.filter(w=>!g.has(w));return[...x.slice(0,P),...l,...x.slice(P)]}p(Be,"orderInheritedTextOverlay");function Re(n){const e=n.find(x=>x.provider.name==="createBarMark"&&!x.provider.id.startsWith("exact."));if(!e)return n;const t=n.indexOf(e),a=n.findIndex((x,w)=>w>t&&!x.provider.id.startsWith("exact.")&&x.provider.name.startsWith("create")&&(x.provider.name.endsWith("Mark")||x.provider.name.endsWith("Plot"))),o=a===-1?n.length:a,i=n.slice(t+1,o).filter(x=>["encodeX","encodeY"].includes(x.provider.name)&&!x.provider.id.startsWith("exact.")),r=i.find(x=>['"nominal"','"ordinal"','"temporal"'].includes(x.provider.baseOptions?.fieldType)),l=i.find(x=>x.provider.baseOptions?.fieldType==='"quantitative"');if(!r||!l||n.indexOf(r)<n.indexOf(l))return n;const g=[...n],h=g.indexOf(r),P=g.indexOf(l);return g[P]=r,g[h]=l,g}p(Re,"orderBarCategoryBeforeMeasure");function qe(n){let e=ye(n);const t=p(s=>e.find(m=>m.provider.name===s&&!m.provider.id.startsWith("exact.")),"semantic"),a=p(s=>e.find(m=>m.coverage.includes(s)),"chartOwner"),o=p((s,{before:m=[],after:f=[]})=>{if(!s)return;const c=e.indexOf(s);e=[...e.slice(0,c),...m,s,...f,...e.slice(c+1)]},"expandChartOwner"),i=p((s,m)=>{const f=e.find(c=>c.provider.name===s&&!c.provider.id.startsWith("exact."));return f?(e=e.filter(c=>c!==f),k(f,m)):te(s,m)},"chartDependency"),r=p((s,m)=>{const f=a(s);f&&o(f,m())},"expandChartConstraint");r("chart.area",()=>({after:[i("encodeX",{field:'"x"',fieldType:'"quantitative"'}),i("encodeY",{field:'"y"',fieldType:'"quantitative"'})]})),r("chart.bar.horizontal",()=>({after:[i("encodeY",{field:'"category"',fieldType:'"nominal"'}),i("encodeX",{field:'"value"',fieldType:'"quantitative"'})]})),r("chart.horizon",()=>({before:[i("createAreaMark",{id:'"horizon"'})]}));for(const s of["chart.pie","chart.donut"])r(s,()=>({after:[i("encodeTheta",{field:'"value"',fieldType:'"quantitative"'}),i("encodeColor",{field:'"category"'})]}));r("chart.rose",()=>({after:[i("encodeTheta",{field:'"category"',fieldType:'"ordinal"'}),i("encodeR",{field:'"value"',fieldType:'"quantitative"'}),i("encodeColor",{field:'"series"',layout:'"overlay"'})]})),r("chart.radar",()=>({after:[i("encodeTheta",{field:'"category"',fieldType:'"nominal"'}),i("encodeR",{field:'"value"',fieldType:'"quantitative"'}),i("encodeGroup",{field:'"series"'}),i("encodeColor",{field:'"series"'})]}));const l=t("createData");l&&(e=e.map(s=>s===l?k(s,{values:"values"}):s));const g=t("createCanvas");g&&(e=e.map(s=>s===g?k(s,xe):s));const h=t("createScatterPlot");h&&(e=e.map(s=>s===h?k(s,{x:'{ field: "x", fieldType: "quantitative" }',y:'{ field: "y", fieldType: "quantitative" }'}):s));const P=t("createLinePlot"),x=t("encodeOpacity");P&&x&&(e=e.filter(s=>s!==x).map(s=>s===P?{...k(s,{line:"{ opacity: 0.8 }"}),coverage:N([...s.coverage,...x.coverage])}:s));const w=t("createBarPlot");if(w){const s=t("createScale")?.provider.id==="action.createColorScale",m='{ field: "category", scale: { id: "color-scale" } }';e=e.map(f=>{if(f!==w)return f;const c=k(f,{x:'{ field: "category", fieldType: "nominal" }',y:'{ field: "value", fieldType: "quantitative" }',...s?{color:m}:{}});return s?{...c,provider:{...c.provider,optionsByConstraint:{...c.provider.optionsByConstraint??{},"encoding.color":{color:m}}}}:c})}const D=t("createTimeUnitData"),z=t("createBarPlot");D&&z&&(e=e.map(s=>s===z?k(s,{data:'"monthly"',x:'{ field: "month", fieldType: "ordinal" }',y:'{ field: "value", fieldType: "quantitative" }'}):s));const R=t("createBoxPlot");R&&(e=e.map(s=>s===R?k(s,{x:'{ field: "category", fieldType: "nominal" }',y:'{ field: "value", fieldType: "quantitative" }'}):s));const j=t("createWindowData"),T=t("createLinePlot");if(j&&T){const s=t("createScale")?.provider.id==="action.createTimeScale";e=e.map(m=>m===T?k(m,{data:'"windowed"',x:s?'{ field: "date", fieldType: "temporal", scale: { id: "scale-1" } }':'{ field: "x", fieldType: "quantitative" }',y:'{ field: "movingMean", fieldType: "quantitative" }'}):m)}const M=t("createIntervalData"),y=t("createBoxPlot"),u=t("createErrorBar");M&&y&&u&&(e=e.map(s=>s===M?k(s,{source:'"data"',groupBy:'"category"'}):s===y?k(s,{data:'"data"',x:'{ field: "category", fieldType: "nominal" }',y:'{ field: "value", fieldType: "quantitative" }'}):s===u?k(s,{data:'"interval"',x:'{ field: "category", fieldType: "nominal", scale: { id: "errorBarX" } }',y:'{ center: "__interval_center", lower: "__interval_lower", upper: "__interval_upper", scale: { id: "errorBarY" } }'}):s));const $=t("createDensityData"),G=t("createViolinPlot");$&&G&&(e=e.filter(s=>s!==$).map(s=>s===G?{...k(s,{data:'"data"',...s.coverage.includes("guide.legend")?{color:'"category"'}:{}}),coverage:N([...s.coverage,...$.coverage])}:s));const V=t("createGradientPlot"),J=t("createScale")?.provider.id==="action.createLogScale"?t("createScale"):void 0;V&&(e=e.map(s=>s===V?k(s,{data:'"data"',x:`{ field: "value", fieldType: "quantitative"${J?', scale: { id: "scale-1" }':""} }`,y:'{ field: "category", fieldType: "nominal" }'}):s));const I=t("encodeDensity"),K=t("createAreaMark");if(I&&!K){const s=te("createAreaMark",{id:'"densityArea"'}),m=e.indexOf(I);e=[...e.slice(0,m),s,...e.slice(m)].map(f=>f===I?k(f,{target:'"densityArea"'}):f)}const Y=t("createBin2DData"),_=t("createRectMark");if(Y&&_){e=e.map(d=>d===Y?k(d,{source:'"data"'}):d===_?k(d,{id:'"rect"',data:'"bins"'}):d.provider.id==="action.createColorScale"?k(d,{type:'"sequential"',range:'{ palette: "viridis" }'}):d);const s=t("encodeX"),m=t("encodeY");s&&(e=fe(e,s,[k(s,{field:'"__bins_x0"',fieldType:'"quantitative"',target:'"rect"'}),te("encodeX2",{field:'"__bins_x1"',fieldType:'"quantitative"',target:'"rect"'})])),m&&(e=fe(e,m,[k(m,{field:'"__bins_y0"',fieldType:'"quantitative"',target:'"rect"'}),te("encodeY2",{field:'"__bins_y1"',fieldType:'"quantitative"',target:'"rect"'})]));const f=t("encodeColor");f&&(e=e.map(d=>d===f?k(d,{field:'"__bins_count"',fieldType:'"quantitative"',target:'"rect"',scale:'{ id: "color-scale" }'}):d));const c=t("createLegend");c&&(e=e.map(d=>d===c?k(d,{target:'"rect"',channels:'["color"]'}):d))}let Z,E,A;const oe=Object.freeze({createPointMark:"point",createLineMark:"line",createAreaMark:"area",createBarMark:"bar",createRuleMark:"rule",createArcMark:"arc",createRectMark:"rect",createTextMark:"text",createScatterPlot:"scatterPlot",createLinePlot:"linePlot",createBarPlot:"barPlot",createBoxPlot:"boxPlot",createGradientPlot:"gradientPlot",createViolinPlot:"violinPlot"}),X=Object.freeze({createPointMark:"point",createLineMark:"line",createAreaMark:"area",createBarMark:"bar",createRuleMark:"rule",createArcMark:"arc",createRectMark:"rect",createTextMark:"text",createScatterPlot:"point",createLinePlot:"line",createBarPlot:"bar",createBoxPlot:"bar",createGradientPlot:"rect",createViolinPlot:"area"});return e=e.map(s=>{if(s.provider.id.startsWith("exact."))return s;if(s.provider.name==="createScale")return A=s.provider.id==="action.createColorScale"?void 0:s.provider.baseOptions?.id,s;const m=oe[s.provider.name];if(m!==void 0)return Z=s.provider.baseOptions?.id?.replaceAll('"',"")??m,E=s.coverage.includes("chart.bar.horizontal")?"bar-horizontal":X[s.provider.name],s;if(!Z||s.provider.name==="createErrorBar")return s;const f={};return["area","rule","arc"].includes(E)&&["encodeX","encodeY","encodeR"].includes(s.provider.name)&&(f.fieldType='"quantitative"'),s.provider.name==="encodeTheta"&&E==="arc"&&s.provider.baseOptions?.fieldType===void 0&&(f.fieldType='"ordinal"'),E==="bar"&&s.provider.name==="encodeX"&&(f.field='"category"',f.fieldType='"nominal"'),E==="bar"&&s.provider.name==="encodeY"&&(f.field='"value"',f.fieldType='"quantitative"'),E==="bar-horizontal"&&s.provider.name==="encodeX"&&(f.field='"value"',f.fieldType='"quantitative"'),E==="bar-horizontal"&&s.provider.name==="encodeY"&&(f.field='"category"',f.fieldType='"nominal"'),A&&["encodeX","encodeY"].includes(s.provider.name)&&(f.scale=`{ id: ${A} }`,A=void 0),Object.keys(f).length===0?s:k(s,f)}),Be(Re(e))}p(qe,"closeRuntimeDependencies");function he(n,e){const t=n.coverage.map(a=>e.get(a)).filter(a=>a!==void 0);return t.length===0?Number.POSITIVE_INFINITY:Math.min(...t)}p(he,"providerRequestPosition");function ae(n,e){const t=new Map(Object.entries(n.baseOptions??{}));for(const a of e)for(const[o,i]of Object.entries(n.optionsByConstraint?.[a]??{})){const r=t.get(o);if(r!==void 0&&r!==i){if(o==="guides"&&(r==="{}"||i==="{}")){t.set(o,r==="{}"?i:r);continue}throw new Error(`${n.id} assigns conflicting values to option ${o}.`)}t.set(o,i)}return t}p(ae,"mergeOptionValues");function De(n,e){if(n.exactCall)return n.exactCall;if(L.get(n.name).options.length===0)return`program.${n.name}()`;const a=[...e].map(([o,i])=>`${o}: ${i}`).join(", ");return`program.${n.name}(${a.length===0?"{}":`{ ${a} }`})`}p(De,"actionCall");function Ee(n,e){const{provider:t,coverage:a}=n,o=ae(t,a);if(t.kind==="runtime")return{plan:{step:e,id:t.id,kind:t.kind,name:t.name,constraints:a,requiredOptions:[],signature:t.signature,route:t.route},call:t.call};const i=L.get(t.name),r=new Map(i.options.filter(l=>o.has(l.name)).map(l=>[l.name,o.get(l.name)]));return{plan:{step:e,id:t.id,kind:t.kind,name:t.name,constraints:a,requiredOptions:t.exactOptionNames??[...r.keys()],signature:i.signature,route:i.route},call:De(t,r)}}p(Ee,"planEntry");function Ae(n){const e=new Set(n.filter(a=>a.plan.kind==="runtime").map(a=>a.plan.name));return[`import { ${["chart",...le.filter(a=>e.has(a))].join(", ")} } from "ggaction";`,...Object.entries(ee).filter(([a])=>e.has(a)).map(([a,o])=>`import { ${a} } from "${o.entry}";`)]}p(Ae,"authoringImports");function We(n){const e=n.filter(t=>ee[t.plan.name]);return n.map(t=>{if(t.plan.kind==="action"||["hconcat","vconcat"].includes(t.plan.name))return`program = ${t.call}`;if(t.plan.name==="render")return t.call;const a=ee[t.plan.name];if(!a)throw new Error(`Unknown authoring runtime ${t.plan.name}.`);return`const ${e.length===1?"output":`${a.output}Output`} = ${t.call}`})}p(We,"authoringSteps");function Le(n){const e=new Set(n.map(t=>t.plan.name).filter(t=>ie.includes(t)));return{imports:Ae(n),initialize:"let program = chart()",prerequisites:ie.filter(t=>!e.has(t)).map(t=>{const a=L.get(t);return{id:`action.${t}`,signature:a.signature,call:t==="createCanvas"?"program = program.createCanvas({ width: 800, height: 600, margin: { top: 140, right: 220, bottom: 120, left: 260 } })":"program = program.createData({ values })",bindings:t==="createData"?["values"]:[]}}),steps:We(n)}}p(Le,"authoringBlock");function B(n){return JSON.stringify(n)}p(B,"codeString");function je(n,e){if(!n||e.size===0)return n;const t=n.lastIndexOf("})"),a=n.indexOf("({");if(a===-1||t===-1||t<a)throw new Error(`Cannot apply requested options to exact call: ${n}`);let o=n.slice(a+2,t).trim();for(const[i,r]of e){const l=new RegExp(`(^|,\\s*)${i}\\s*:\\s*(?:"[^"]*"|'[^']*'|-?[0-9]+(?:\\.[0-9]+)?|true|false)(?=\\s*,|$)`);l.test(o)?o=o.replace(l,(g,h)=>`${h}${i}: ${r}`):o=`${o}${o.length===0?"":", "}${i}: ${r}`}return`${n.slice(0,a+2)}${o}${n.slice(t)}`}p(je,"mergeExactCallOptions");function Ne(n,e){if(n.provider.exactCall)return{...n,provider:{...n.provider,exactCall:je(n.provider.exactCall,e),exactOptionNames:N([...n.provider.exactOptionNames??[],...e.keys()])}};const t=Object.fromEntries(Object.entries(n.provider.optionsByConstraint??{}).map(([o,i])=>[o,Object.fromEntries(Object.entries(i).filter(([r])=>!e.has(r)))])),a=k(n,Object.fromEntries(e));return{...a,provider:{...a.provider,optionsByConstraint:t}}}p(Ne,"entryWithRequestedOptions");function q(n,...e){return e.map(t=>n?.[t]).find(t=>t!==void 0)?.trim()}p(q,"requestedText");const ne=new Set(["and","as","at","axes","axis","coordinate","coordinates","encoding","field","for","is","legend","on","option","options","palette","scale","then","to","using","with"]);function _e(n,e){const t=n.match(new RegExp(`\\b${e}(?:(?:\\s+(?:field|encoding|by|is))|\\s*[:=]|\\s+)\\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z_$][A-Za-z0-9_$.-]*))`,"i"));if(!t)return;const a=q(t,1,2,3);return ne.has(a.toLowerCase())?void 0:{value:a,source:t[0]}}p(_e,"fieldRequest");function Ge(n,e){const t=n.match(new RegExp(`\\b${e}(?:\\s+(?:by|field|encoding))?\\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z_$][A-Za-z0-9_$.-]*))`,"i"));if(!t)return;const a=q(t,1,2,3);if(!ne.has(a.toLowerCase()))return{value:a,source:t[0]}}p(Ge,"appearanceFieldRequest");function Ie(n,e){const t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),o=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=n.match(new RegExp(`\\b(?:${t}|${o})\\b\\s*(?:=|:|\\bis\\b|\\bto\\b)\\s*[^,;]+`,"i"));if(i)return i[0].trim();if(e!==a)return n.match(new RegExp(`\\b${t}\\b`,"i"))?.[0]}p(Ie,"explicitOptionMention");function Ve(n,e){let t=n;const a=[],o=[],i=[],r=p((c,d,v)=>{const b=t.find(O=>c.includes(O.provider.name));if(!b||d.size===0)return!1;t=t.map(O=>O===b?Ne(O,d):O);for(const[O,W]of d)a.push({owner:b.provider.name,option:O,value:W,source:v});return!0},"apply"),l=e.match(/\b(?:(one|two|three|four|five|six|seven|eight|nine|ten|\d+)\s+bands?|bands?\s*(?:of|=|:)?\s*(one|two|three|four|five|six|seven|eight|nine|ten|\d+))\b/i);if(l){const c=q(l,1,2),d=Number({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10}[c.toLowerCase()]??c);Number.isInteger(d)&&d>0?r(["encodeHorizon","editHorizon"],new Map([["bands",String(d)]]),l[0]):(o.push(l[0]),i.push(S("request.option.horizon.bands","Horizon bands must be a positive integer.")))}const g=/\b(?:legend|encoding key)\b/i.test(e),h=t.some(c=>c.provider.id.startsWith("exact.")&&/Legend/.test(c.provider.name)),P=t.some(c=>c.provider.name==="facet"),x=new Set(["encoding.color","encoding.opacity","encoding.shape","encoding.size","encoding.strokeDash","encoding.strokeWidth"]),w=t.some(c=>c.coverage.some(d=>x.has(d)));if(g&&!w&&!h&&!P){const c=N(t.flatMap(d=>d.coverage).filter(d=>d==="guide.legend"||d.startsWith("layout.legend.")));t=t.map(d=>({...d,coverage:d.coverage.filter(v=>v!=="guide.legend"&&!v.startsWith("layout.legend."))})).filter(d=>d.coverage.length>0||d.provider.id.startsWith("exact.")),o.push("legend channel");for(const d of c)i.push(S(d,"A legend requires a concrete compatible encoding channel such as color, shape, size, opacity, stroke dash, or stroke width."))}const D=e.match(/\blegend\s+(?:at|on)\s+(top|bottom|left|right)\b/i),z=g?e.match(/\b(?:(\d+)\s+columns?|columns?\s*(?:=|:)?\s*(\d+))\b/i):void 0,R=g?void 0:e.match(/\b(?:(\d+)\s+columns?|columns?\s*(?:=|:)?\s*(\d+))\b/i),j=g?e.match(/\b(?:(horizontal|vertical)(?:\s+direction)?\s+legend|legend(?:\s+direction)?\s*(?:=|:|is)?\s*(horizontal|vertical)|direction\s*(?:=|:|is)?\s*(horizontal|vertical)|legend\b[^,;]{0,60}\b(horizontal|vertical)|(horizontal|vertical)\s+direction)\b/i):void 0,T=new Map;if(D&&T.set("position",B(D[1].toLowerCase())),z){const c=Number(q(z,1,2));Number.isInteger(c)&&c>0?T.set("columns",String(c)):(o.push(z[0]),i.push(S("request.option.legend.columns","Legend columns must be a positive integer.")))}if(j&&T.set("direction",B(q(j,1,2,3,4,5).toLowerCase())),R&&(o.push(R[0]),i.push(S("request.option.columns","A column count requires a concrete owner such as a legend or composition layout."))),T.size>0&&(w||h||P)){const c=[D?.[0],z?.[0],j?.[0]].filter(Boolean).join(", ");if(!r(["editLegendLayout","createLegend"],T,c)){const d=[...T].map(([v,b])=>`${v}: ${b}`).join(", ");r([...pe],new Map([["guides",`{ legend: { ${d} } }`]]),c)}}const M=e.match(/\b(\d+)\s+x[ -]?bins?\b/i),y=e.match(/\b(\d+)\s+y[ -]?bins?\b/i),u=e.match(/\b(\d+)\s+(?:bins?|bins? per axis)\b/i),$=new Map,G=[];if(M||y)if(M&&y){const c=Number(M[1]),d=Number(y[1]);if(c>0&&d>0)$.set("bins",`{ x: ${c}, y: ${d} }`),G.push(M[0],y[0]);else{const v=`${M[0]}; ${y[0]}`;o.push(v),i.push(S("request.option.bin2d.bins","Two-dimensional x and y bin counts must be positive integers."))}}else{const c=M?"y":"x",d=(M??y)[0];o.push(d),i.push(S(`transform.bin2d.bins.${c}`,`Two-dimensional bin counts require both x and y; the request specifies only ${d}.`))}else if(u){const c=Number(u[1]);Number.isInteger(c)&&c>0?($.set("bins",String(c)),G.push(u[0])):(o.push(u[0]),i.push(S("request.option.bin2d.bins","Two-dimensional bin counts must be positive integers.")))}const V=e.match(/\b(include|exclude|omit)\s+empty\s+(?:bins|cells)\b/i);if(V&&($.set("includeEmpty",String(V[1].toLowerCase()==="include")),G.push(V[0])),$.size>0){const c=G.join("; ");if(!r(["createBin2DData","editBin2DData"],$,c)){const d=[...$].map(([W,Q])=>`${W}: ${Q}`).join(", "),v=r(["createHeatmap"],new Map([["bin",`{ ${d} }`]]),c),b=$.get("bins"),O=!v&&b!==void 0&&/^\d+$/.test(b)&&!$.has("includeEmpty")&&r(["createHistogram"],new Map([["maxBins",b]]),c);!v&&!O&&(o.push(c),i.push(S("request.option.bin2d","Two-dimensional bin options require a heatmap or a create/edit Bin2D data action.")))}}const J=e.match(/\b(?:titled\b|(?:chart\s+)?title\b(?:\s+(?:is|text))?)\s*[:=]?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9][^,;]*?))(?=\s+(?:(?:and|with)\s+)?(?:font(?:[ -]?size)?|subtitle|on\s+|as\s+)|$)/i),I=q(J,1,2,3);I&&!ne.has(I.toLowerCase())&&r(["createTitle","editTitle"],new Map([["text",B(I)]]),J[0]);const K=e.match(/\bsubtitle(?:\s+(?:is|text))?\s*[:=]?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9][^,;]*?))(?=\s+(?:(?:and|with)\s+)?(?:font(?:[ -]?size)?|title|on\s+|as\s+)|$)/i),Y=q(K,1,2,3);Y&&!ne.has(Y.toLowerCase())&&r(["createTitle","editTitle"],new Map([["subtitle",B(Y)]]),K[0]);const _=e.match(/\bfont[ -]?size\s*(?:=|:)?\s*(\d+(?:\.\d+)?)\b/i);if(_){const c=Number(_[1]);c>0&&r(["createTitle","editTitle"],new Map([["titleStyle",`{ fontSize: ${_[1]} }`]]),_[0])||(o.push(_[0]),i.push(S("request.option.fontSize",c>0?"A font size requires a concrete text owner such as a chart title, axis, legend, or text mark.":"Font size must be a positive finite number.")))}const Z=Object.freeze({x:["createScatterPlot","createLinePlot","createBarPlot","createHeatmap","createBoxPlot","createViolinPlot","createGradientPlot","createRegressionData","createBin2DData","encodeHorizon"],y:["createScatterPlot","createLinePlot","createBarPlot","createHeatmap","createBoxPlot","createViolinPlot","createGradientPlot","createRegressionData","createBin2DData","encodeHorizon"]}),E=new Set;for(const c of["x","y"]){const d=_e(e,c);if(!d||/^(?:bins?|axis|encoding|field)$/i.test(d.value))continue;(r(Z[c],new Map([[c,B(d.value)]]),d.source)||r([`encode${c.toUpperCase()}`],new Map([["field",B(d.value)]]),d.source))&&E.add(c)}const A=e.match(/\b(?:plot|chart)\s+of\s+(?:"([^"]+)"|'([^']+)'|([A-Za-z_$][A-Za-z0-9_$.-]*))\s+(?:vs\.?|versus|against)\s+(?:"([^"]+)"|'([^']+)'|([A-Za-z_$][A-Za-z0-9_$.-]*))/i);if(A&&E.size===0){const c=q(A,1,2,3),d=q(A,4,5,6);for(const[v,b]of[["x",d],["y",c]])r(Z[v],new Map([[v,B(b)]]),A[0])||r([`encode${v.toUpperCase()}`],new Map([["field",B(b)]]),A[0])}const oe=Object.freeze({color:["createScatterPlot","createLinePlot","createBarPlot","createViolinPlot"],size:["createScatterPlot"],shape:["createScatterPlot"]});for(const c of["color","size","shape"]){const d=Ge(e,c);if(!d)continue;r(oe[c],new Map([[c,B(d.value)]]),d.source)||r([`encode${c[0].toUpperCase()}${c.slice(1)}`],new Map([["field",B(d.value)]]),d.source)}const X=t.find(c=>c.provider.name==="renderToSVG");if(X){const c=e.match(/\bsvg\s+title\s*(?:=|:)?\s*(?:"([^"]+)"|'([^']+)')/i),d=e.match(/\bdescription\s*(?:=|:)?\s*(?:"([^"]+)"|'([^']+)')/i),v=new Map;if(c&&v.set("title",B(q(c,1,2))),d&&v.set("description",B(q(d,1,2))),v.size>0){const b=[...v].map(([O,W])=>`${O}: ${W}`).join(", ");t=t.map(O=>O===X?{...O,provider:{...O.provider,call:`renderToSVG(program, { ${b} })`}}:O);for(const[O,W]of v)a.push({owner:"renderToSVG",option:O,value:W,source:"SVG accessible text"})}}const s=e.match(/\bpixel[ -]?ratio\s*(?:=|:)?\s*(\d+(?:\.\d+)?)\b/i);if(s){const c=Number(s[1]),d=t.find(v=>["render","renderToPNG"].includes(v.provider.name));if(d&&c>0){const v=d.provider.name==="render"?`render(program, context, { pixelRatio: ${s[1]} })`:d.provider.call.replace(/\s*}\)$/,`, pixelRatio: ${s[1]} })`);t=t.map(b=>b===d?{...b,provider:{...b.provider,call:v}}:b),a.push({owner:d.provider.name,option:"pixelRatio",value:s[1],source:s[0]})}else o.push(s[0]),i.push(S("renderer.pixelRatio",c>0?"pixelRatio applies only to Browser Canvas or PNG output; choose one of those renderers or remove the requirement.":"pixelRatio must be a positive finite number."))}else if(/\b(?:high[ -]?dpi|retina)\b/i.test(e)){const c=e.match(/\b(?:high[ -]?dpi|retina)\b/i)[0];o.push(c),i.push(S("renderer.pixelRatio","High-density raster or Canvas output requires an explicit positive pixelRatio."))}/\bresponsive\b/i.test(e)&&(o.push("responsive"),i.push(S("layout.responsive","Responsive charts require host resize observation and immutable program rebuilding; no container size was supplied."))),/\b(?:accessible|accessibility|aria)\b/i.test(e)&&(a.some(d=>d.owner==="renderToSVG"&&d.option==="title")&&a.some(d=>d.owner==="renderToSVG"&&d.option==="description")||(o.push("accessible output"),i.push(S(X?"renderer.svg.accessibleText":"output.accessibility",X?"Accessible SVG output requires concrete title and description strings.":"Accessibility requires an output-specific accessible name, description, and host fallback strategy."))));const m=new Set(a.map(c=>`${c.owner}.${H(c.option)}`)),f=H(e);for(const c of t.filter(d=>d.provider.kind==="action")){const d=L.get(c.provider.name),v=ae(c.provider,c.coverage);for(const b of d?.options??[]){const O=H(b.name);if(O.length<3||!re(f,O).length||m.has(`${c.provider.name}.${O}`)||v.has(b.name)||b.name==="stroke"&&/\b(?:stroke[ -]?dash|dashed?\s+stroke)\b/i.test(e)||b.name==="bins"&&i.some(ge=>ge.constraint.startsWith("transform.bin2d.bins.")))continue;const W=Ie(e,b.name);if(!W)continue;const Q=`${c.provider.name}.${b.name}: ${W}`;o.includes(Q)||(o.push(Q),i.push(S(`request.option.${c.provider.name}.${b.name}`,`The request mentions ${b.name}, but its value could not be parsed safely for ${c.provider.name}.`)))}}return{entries:t,appliedOptions:a,unmatchedRequirements:N(o),unresolved:i}}p(Ve,"applyRequestedOptions");function Ye(n,e=[]){const t=new Map,a=p((i,r,l,g)=>{const h=`${r}:${i}`,P=t.get(h)??{name:i,kind:r,required:!0,usedBy:[],reason:g};P.usedBy=N([...P.usedBy,l]),t.set(h,P)},"add"),o=n.find(i=>i.plan.name==="createData");(!o||/\bvalues\s*:\s*values\b/.test(o.call))&&a("values","binding","createData","Supply the caller-owned dataset rows before running the authoring block.");for(const i of n){i.plan.name==="render"&&a("context","runtime","render","Supply a CanvasRenderingContext2D from the host page."),["hconcat","vconcat"].includes(i.plan.name)&&a("programs","program",i.plan.name,"Replace the repeated sample program with two complete child ChartPrograms.");const r=i.call.matchAll(/\b(?:field|x|y|color|size|shape|groupBy|weight):\s*"(x|y|value|category|label|angle|date|a|b|series)"/g);for(const l of r)a(l[1],"field",i.plan.name,"Replace this template name unless the input dataset declares the same field.");if(i.call.includes('"Chart title"')&&a("Chart title","text",i.plan.name,"Replace the sample title with user-approved chart text."),i.plan.id.startsWith("exact.")){const l=L.get(i.plan.name);for(const g of l?.resources.prerequisites??[])a(g,"resource",i.plan.name,"Provide or create this action-card prerequisite before applying the exact call.")}}for(const i of e){if(!new Set(["color","field","groupBy","shape","size","weight","x","y"]).has(i.option))continue;let r;try{r=JSON.parse(i.value)}catch{continue}typeof r!="string"||r.length===0||a(r,"field",i.owner,"Confirm that this request-supplied field exists in the caller-owned dataset.")}return[...t.values()]}p(Ye,"placeholderBindings");function Xe(n){let e=!1,t=new Set;const a=p(()=>e&&t.has("encodeX")&&t.has("encodeY")&&!t.has("encodeX2")&&!t.has("encodeY2"),"incomplete");for(const o of n){if(o.provider.id.startsWith("exact."))continue;const i=o.provider.name;if(i.startsWith("create")&&(i.endsWith("Mark")||i.endsWith("Plot"))){if(a())return!0;e=i==="createRuleMark",t=new Set;continue}e&&["encodeX","encodeY","encodeX2","encodeY2"].includes(i)&&t.add(i)}return a()}p(Xe,"hasIncompleteRulePrimaryPair");function He(n){return n.filter(t=>t.provider.name==="createScale"&&!t.provider.id.startsWith("exact.")).filter(t=>{const a=t.provider.baseOptions?.id;if(a===void 0)return!1;const o=`id: ${a}`;return!n.some(i=>i!==t&&[...ae(i.provider,i.coverage).values()].some(r=>r.includes(o)))}).map(t=>t.provider.baseOptions.id.replaceAll('"',""))}p(He,"unconsumedScaleIds");function Ze(n){const e=new Set(n.filter(r=>!r.provider.id.startsWith("exact.")).map(r=>r.provider.name)),t=[],a=[],i=[...e].filter(r=>r.startsWith("create")&&(r.endsWith("Mark")||r.endsWith("Plot"))).length>0||[...e].some(r=>["createHistogram","createHeatmap","createParallelCoordinates"].includes(r));["selectMarks","filterMarks","highlightMarks","facet"].some(r=>e.has(r))&&!i&&t.push(S("chart.type","Selection and faceting require one explicit chart or mark owner before those actions can be addressed.")),["hconcat","vconcat"].some(r=>e.has(r))&&!i&&t.push(S("composition.children","Composition requires at least two complete child ChartPrograms; name or provide the child charts first.")),e.has("layoutLabels")&&e.has("createTextMark")&&!e.has("encodeX")&&!e.has("encodeY")&&t.push(S("encoding.position","Collision-aware labels require a positioned source layer or explicit x and y encodings.")),e.has("createLegend")&&!["encodeColor","encodeSize","encodeShape","encodeOpacity","encodeStrokeDash","encodeStrokeWidth"].some(r=>e.has(r))&&t.push(S("guide.legend.channel","A legend requires an explicit compatible visual encoding such as color, size, shape, opacity, dash, or width.")),Xe(n)&&t.push(S("encoding.rule.endpoint","A rule with both x and y primary positions also requires x2 or y2; otherwise choose one primary position for a full-span rule."));for(const r of He(n))t.push(S("scale.consumer",`Scale "${r}" is not connected to a compatible encoding; choose the channel that should consume it.`));return e.has("createAreaMark")&&e.has("encodeStrokeDash")&&a.push({constraint:"unsupported.areaStrokeDash",reason:"Field-driven stroke dash is not supported for area marks; use a line or rule mark for dash encoding."}),{unresolved:t,unsupported:a}}p(Ze,"runtimeClosureDecisions");function S(n,e){const t=$e[n]??(n.startsWith("layout.legend.")?"ggaction://docs/legend-layout":"ggaction://docs/action-reference");return{constraint:n,reason:e,resources:[t]}}p(S,"unresolvedDecision");function Fe(n,e,t){const a=[],o=[...e].filter(i=>!i.startsWith("renderer.")&&!i.startsWith("unsupported."));return/\b(chart|plot)\b/.test(n)&&o.length===0&&![...e].some(i=>i.startsWith("unsupported."))&&t.length===0&&a.push(S("chart.type","A chart or mark type is required; for example scatter plot, line chart, bar chart, or tick mark.")),/\b(render|export|output)\b/.test(n)&&![...e].some(i=>i.startsWith("renderer."))&&a.push(S("renderer.format","A supported output format is required: Browser Canvas, SVG, PNG, or PDF.")),a}p(Fe,"genericUnresolved");function me(){if(F.schemaVersion!==2||C.schemaVersion!==2)throw new Error("Compact action cards and the intent taxonomy must use schemaVersion 2.");if(C.packageVersion!==F.packageVersion)throw new Error("Compact action cards and the intent taxonomy must use one packageVersion.");if(U.size!==C.constraints.length)throw new Error("Intent constraint IDs must be unique.");if(new Set(C.providers.map(o=>o.id)).size!==C.providers.length)throw new Error("Intent provider IDs must be unique.");const e=new Set;for(const o of C.constraints)for(const i of o.shadows??[])if(!U.has(i)||i===o.id)throw new Error(`${o.id} shadows invalid constraint ${i}.`);for(const o of C.providers){for(const i of[...o.anchors,...o.covers])if(!U.has(i))throw new Error(`${o.id} references unknown constraint ${i}.`);if(o.anchors.some(i=>!o.covers.includes(i)))throw new Error(`${o.id} does not cover every anchor.`);for(const i of o.anchors)e.add(i);if(o.kind==="action"){const i=L.get(o.name);if(!i)throw new Error(`${o.id} references unknown action ${o.name}.`);const r=new Set(i.options.map(g=>g.name)),l=[o.baseOptions??{},...Object.values(o.optionsByConstraint??{})];for(const g of l)for(const[h,P]of Object.entries(g)){if(!r.has(h))throw new Error(`${o.id} references undeclared option ${h}.`);if(typeof P!="string"||P.length===0)throw new Error(`${o.id}.${h} must be a JavaScript expression string.`)}}else{if(o.kind!=="runtime"||typeof o.signature!="string"||typeof o.call!="string"||!o.route.startsWith("/reference/"))throw new Error(`${o.id} has an invalid runtime contract.`);if(!le.includes(o.name)&&ee[o.name]===void 0)throw new Error(`${o.id} lacks an authoring runtime mapping.`)}}const t=C.constraints.filter(o=>o.unsupported===void 0&&!e.has(o.id));if(t.length>0)throw new Error(`Supported constraints lack providers: ${t.map(o=>o.id).join(", ")}.`);const a=C.constraints.filter(o=>o.unsupported!==void 0!==o.id.startsWith("unsupported.")||o.unsupported!==void 0&&e.has(o.id));if(a.length>0)throw new Error(`Terminal constraints must use unsupported.* IDs without providers: ${a.map(o=>o.id).join(", ")}.`);for(const o of ie)if(!L.has(o))throw new Error(`Missing authoring prerequisite action card: ${o}.`);return{cards:L.size,constraints:U.size,providers:C.providers.length,supported:C.constraints.filter(o=>o.unsupported===void 0).length,unsupported:C.constraints.filter(o=>o.unsupported!==void 0).length}}p(me,"validateResolverKnowledge");function et(n){if(typeof n!="string"||n.trim().length===0)throw new TypeError("searchGgaction query must be a non-empty string.");if(n.length>500)throw new RangeError("searchGgaction query must be at most 500 characters.");me();const e=H(n),t=Se(n),{matched:a,positions:o}=Oe(e);for(const u of t){const[$]=re(e,H(u));$&&o.set(`action.${u}`,$.start)}const i=new Set([...a.map(u=>u.id),...t.map(u=>`action.${u}`)]),r=a.filter(u=>u.unsupported!==void 0).map(u=>({constraint:u.id,reason:u.unsupported})),l=[],{blocked:g,unresolved:h}=Ce(a);l.push(...h);const P=new Set([...i].filter(u=>{const $=U.get(u);return!g.has(u)&&($===void 0||$.unsupported===void 0)})),x=Te(P,t),{selected:w,uncovered:D}=ze(P,x);for(const u of D)l.push(S(u,"No current action or runtime operation covers this recognized constraint."));l.push(...Fe(e,i,t)),i.size===0&&l.length===0&&l.push(S("query.intent","No current ggaction constraint was recognized; use an exact action name or a supported chart task."));let z=qe(Me(w).sort((u,$)=>u.provider.order-$.provider.order||he(u,o)-he($,o)||u.provider.id.localeCompare($.provider.id)));const R=Ve(z,n);z=R.entries,l.push(...R.unresolved);const j=Ze(z);r.push(...j.unsupported),l.push(...j.unresolved),j.unsupported.some(u=>u.constraint==="unsupported.areaStrokeDash")&&(z=z.filter(u=>u.provider.name!=="encodeStrokeDash"));const T=z.map((u,$)=>Ee(u,$+1)),M={schemaVersion:4,packageVersion:F.packageVersion,query:n.trim(),matchedConstraints:[...i],actionPlan:T.map(u=>u.plan),exactCalls:T.map(u=>u.call),appliedOptions:R.appliedOptions,placeholderBindings:Ye(T,R.appliedOptions),unmatchedRequirements:R.unmatchedRequirements,authoring:Le(T),unsupported:r,unresolved:N(l.map(u=>JSON.stringify(u))).map(JSON.parse),candidates:T.slice(0,3).map(u=>({id:u.plan.id,kind:u.plan.kind,name:u.plan.name,route:u.plan.route}))},y=Buffer.byteLength(JSON.stringify(M),"utf8");if(y>6144)throw new ke(y);return M}p(et,"searchGgaction");function tt(n){return Buffer.byteLength(JSON.stringify(n),"utf8")}p(tt,"taskPacketBytes"),me();export{ke as TaskPacketBudgetError,et as searchGgaction,tt as taskPacketBytes,me as validateResolverKnowledge};
1
+ var xe=Object.defineProperty;var p=(o,e)=>xe(o,"name",{value:e,configurable:!0});import{readFileSync as se}from"node:fs";import ce from"node:path";import{fileURLToPath as we}from"node:url";const de=we(new URL("../",import.meta.url)),Z=JSON.parse(se(ce.join(de,"knowledge/action-cards.json"),"utf8")),C=JSON.parse(se(ce.join(de,"knowledge/intent-taxonomy.json"),"utf8")),N=new Map(Z.cards.map(o=>[o.name,o])),U=new Map(C.constraints.map(o=>[o.id,o])),le=Object.freeze(["hconcat","vconcat","render"]),te=Object.freeze({renderToSVG:Object.freeze({entry:"ggaction/svg",output:"svg"}),renderToPNG:Object.freeze({entry:"ggaction/png",output:"png"}),renderToPDF:Object.freeze({entry:"ggaction/pdf",output:"pdf"})}),re=Object.freeze(["createCanvas","createData"]),Pe=Object.freeze({width:"800",height:"600",margin:"{ top: 140, right: 220, bottom: 120, left: 260 }"}),pe=new Set(["createScatterPlot","createLinePlot","createAreaPlot","createBarPlot","createBoxPlot","createGradientPlot","createViolinPlot","createPolarScatterPlot","createPolarLinePlot","createRadarPlot","createRugPlot","createStripPlot"]),$e=new Set(["createAxes","createXAxis","createYAxis","createGrid","createLegend","createGuides"]),Se=Object.freeze({"chart.type":"ggaction://docs/choose-chart-type","renderer.format":"ggaction://docs/choose-renderer","layout.responsive":"ggaction://docs/responsive-layout","output.accessibility":"ggaction://docs/accessibility","renderer.svg.accessibleText":"ggaction://docs/accessibility","renderer.pixelRatio":"ggaction://docs/responsive-layout","query.intent":"ggaction://docs/getting-started"});class ke extends Error{static{p(this,"TaskPacketBudgetError")}constructor(e){super(`Compact task packet is ${e} bytes; the hard ceiling is 6144 bytes.`),this.name="TaskPacketBudgetError",this.bytes=e}}function _(o){return[...new Set(o)]}p(_,"unique");function Y(o){return o.normalize("NFKC").toLowerCase().replace(/[^a-z0-9]+/g," ").trim().replace(/\s+/g," ")}p(Y,"normalize");const ue=/\b(?:no|not|without|exclude|excluding|omit|omitting|avoid|avoiding|don['’]t|doesn['’]t|isn['’]t|aren['’]t|never|neither|nor)\b/i;function Oe(o){let e=o.normalize("NFKC").replace(/(^|[\s=:(,])("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')/g,(t,a,n)=>a+" ".repeat(n.length));for(const t of C.constraints)for(const a of t.phrases.filter(n=>ue.test(n))){const n=Y(a).split(" ").join("\\s+");e=e.replace(new RegExp(`\\b${n}\\b`,"gi")," ")}return ue.test(e)}p(Oe,"hasUnresolvedNegation");function ie(o,e){const t=Y(e),a=` ${o} `,n=` ${t} `,r=[];let i=0;for(;i<a.length;){const c=a.indexOf(n,i);if(c===-1)break;r.push({start:c+1,end:c+n.length-1}),i=c+1}return r}p(ie,"phraseOccurrences");function Ce(o){return Z.cards.filter(e=>new RegExp(`(?:^|[^A-Za-z0-9])${e.name}(?:$|[^A-Za-z0-9])`,"i").test(o)).map(e=>e.name)}p(Ce,"exactActionNames");function ze(o){const e=C.constraints.flatMap(r=>r.phrases.flatMap(i=>ie(o,i).map(c=>({constraint:r,...c})))),t=e.filter(r=>!e.some(i=>i.constraint.shadows?.includes(r.constraint.id)&&i.start<=r.start&&i.end>=r.end)),a=C.constraints.filter(r=>t.some(i=>i.constraint.id===r.id)),n=new Map(a.map(r=>[r.id,Math.min(...t.filter(i=>i.constraint.id===r.id).map(i=>i.start))]));return{matched:a,positions:n}}p(ze,"semanticMatchResult");function fe(o){return o.name==="createCanvas"?10:o.name==="createData"?20:o.name.endsWith("Data")?30:o.domain==="charts"||o.domain==="marks"&&o.name.startsWith("create")?40:o.domain==="encodings"?/^encode(X|Y|X2|Y2|XRange|YRange|Theta|R|Radius|ParallelCoordinates)/.test(o.name)?50:o.name==="encodeGroup"||o.name==="encodePathOrder"?52:55:o.domain==="statistics"?60:["axes","grid","legend_and_title"].includes(o.domain)?70:o.domain==="mark-selection"?75:o.domain==="composition"||/^(layout|jitter|order|replace)/.test(o.name)?80:65}p(fe,"orderForCard");function Te(o,e){const t=N.get(o),a=C.providers.filter(n=>n.kind==="action"&&n.name===o).map(n=>({provider:n,coverage:n.covers.filter(r=>e.has(r)).length})).filter(n=>n.coverage>0).sort((n,r)=>r.coverage-n.coverage||n.provider.order-r.provider.order||n.provider.id.localeCompare(r.provider.id))[0]?.provider;return a?{...a,id:`exact.${o}`,anchors:[`action.${o}`],covers:_([`action.${o}`,...a.covers.filter(n=>e.has(n))])}:{id:`exact.${o}`,kind:"action",name:o,order:fe(t),anchors:[`action.${o}`],covers:[`action.${o}`],exactCall:t.snippet,exactOptionNames:t.options.filter(n=>new RegExp(`\\b${n.name}\\s*:`).test(t.snippet)).map(n=>n.name)}}p(Te,"exactProvider");function Me(o){const e=new Map;for(const n of o){if(!n.exclusiveGroup)continue;const r=e.get(n.exclusiveGroup)??[];r.push(n),e.set(n.exclusiveGroup,r)}const t=new Set,a=[];for(const[n,r]of e)if(!(r.length<2)){for(const i of r)t.add(i.id);for(const i of r)a.push({constraint:i.id,reason:`This conflicts within ${n}: ${r.map(c=>c.id).join(", ")}.`,resources:[n==="legend.position"?"ggaction://docs/legend-layout":"ggaction://docs/choose-chart-type"]})}return{blocked:t,unresolved:a}}p(Me,"conflictResult");function Be(o,e){const t=C.providers.filter(a=>a.anchors.some(n=>o.has(n)));for(const a of e)t.push(Te(a,o));return t}p(Be,"candidateProviders");function Re(o,e){const t=new Set(o),a=[];for(;t.size>0;){const n=e.filter(i=>!a.some(c=>c.provider.id===i.id)).map(i=>({provider:i,coverage:i.covers.filter(c=>t.has(c))})).filter(i=>i.coverage.length>0).sort((i,c)=>c.coverage.length-i.coverage.length||i.provider.order-c.provider.order||i.provider.id.localeCompare(c.provider.id));if(n.length===0)break;const r=n[0];a.push(r);for(const i of r.coverage)t.delete(i)}return{selected:a,uncovered:t}}p(Re,"selectProviders");function ye(o){let e=o;o.some(i=>i.provider.name==="selectMarks")&&(e=e.map(i=>i.provider.name!=="highlightMarks"?i:{...i,provider:{...i.provider,baseOptions:{selection:'"selection-1"',color:'"#f28e2b"'}}}));const a=e.some(i=>i.provider.name==="createRegression"&&!i.provider.id.startsWith("exact.")),n=e.some(i=>["createPointMark","createScatterPlot","createPolarScatterPlot"].includes(i.provider.name));a&&!n&&(e=[J("createPointMark",{}),...e]);const r=e.find(i=>i.provider.name==="editLegendLayout"&&i.coverage.some(c=>c.startsWith("layout.legend.")));if(r){const i=e.find(c=>c.coverage.includes("guide.legend")&&(c.provider.name==="createLegend"||c.provider.optionsByConstraint?.["guide.legend"]?.guides!==void 0));if(i){const c=r.provider.baseOptions?.position;if(c===void 0)throw new Error(`${r.provider.id} lacks a legend position.`);const m=r.coverage.filter(f=>f.startsWith("layout.legend."));e=e.filter(f=>f!==r).map(f=>{if(f!==i)return f;const P=c==='"left"'?"96":c==='"bottom"'?ge:void 0;return{provider:f.provider.name==="createLegend"?{...f.provider,baseOptions:{...f.provider.baseOptions??{},position:c,...P===void 0?{}:{offset:P}}}:{...f.provider,optionsByConstraint:{...f.provider.optionsByConstraint??{},"guide.legend":{...f.provider.optionsByConstraint?.["guide.legend"]??{},guides:`{ legend: { position: ${c}${P===void 0?"":`, offset: ${P}`} } }`}}},coverage:[...f.coverage,...m]}})}}return e}p(ye,"adaptProviderDependencies");function S(o,e){return{...o,provider:{...o.provider,baseOptions:{...o.provider.baseOptions??{},...e}}}}p(S,"withBaseOptions");function J(o,e,t=[]){const a=N.get(o);if(!a)throw new Error(`Unknown runtime dependency action ${o}.`);return{provider:{id:`action.${o}`,kind:"action",name:o,order:fe(a),anchors:[],covers:[],baseOptions:e},coverage:t}}p(J,"dependencyEntry");function qe(o){const e=o.find(n=>!n.provider.id.startsWith("exact.")&&pe.has(n.provider.name));if(!e)return o;const t=o.filter(n=>!n.provider.id.startsWith("exact.")&&$e.has(n.provider.name));if(t.length===0)return o;const a=t.flatMap(n=>n.coverage);return o.filter(n=>!t.includes(n)).map(n=>n===e?{...n,coverage:_([...n.coverage,...a])}:n)}p(qe,"absorbFacadeGuides");function he(o,e,t){const a=o.indexOf(e);return a===-1?o:[...o.slice(0,a),...t,...o.slice(a+1)]}p(he,"replaceEntry");function Ae(o){const e=p($=>o.find(q=>q.provider.name===$&&!q.provider.id.startsWith("exact.")),"semantic"),t=e("createPointMark"),a=e("createTextMark"),n=e("encodeText"),r=new Set(["encodeX","encodeY","encodeColor","encodeSize","encodeShape","encodeAngle","encodeOpacity"]),i=o.filter($=>!$.provider.id.startsWith("exact.")&&r.has($.provider.name));if(!t||!a||!n||!i.some($=>$.provider.name==="encodeX")||!i.some($=>$.provider.name==="encodeY"))return o;const c=[t,...i,a,n],m=new Set(c),f=Math.min(...c.map($=>o.indexOf($))),P=o.slice(0,f).filter($=>!m.has($)).length,x=o.filter($=>!m.has($));return[...x.slice(0,P),...c,...x.slice(P)]}p(Ae,"orderInheritedTextOverlay");function De(o){const e=o.find(x=>x.provider.name==="createBarMark"&&!x.provider.id.startsWith("exact."));if(!e)return o;const t=o.indexOf(e),a=o.findIndex((x,$)=>$>t&&!x.provider.id.startsWith("exact.")&&x.provider.name.startsWith("create")&&(x.provider.name.endsWith("Mark")||x.provider.name.endsWith("Plot"))),n=a===-1?o.length:a,r=o.slice(t+1,n).filter(x=>["encodeX","encodeY"].includes(x.provider.name)&&!x.provider.id.startsWith("exact.")),i=r.find(x=>['"nominal"','"ordinal"','"temporal"'].includes(x.provider.baseOptions?.fieldType)),c=r.find(x=>x.provider.baseOptions?.fieldType==='"quantitative"');if(!i||!c||o.indexOf(i)<o.indexOf(c))return o;const m=[...o],f=m.indexOf(i),P=m.indexOf(c);return m[P]=i,m[f]=c,m}p(De,"orderBarCategoryBeforeMeasure");function Ee(o){let e=qe(o);const t=p(s=>e.find(g=>g.provider.name===s&&!g.provider.id.startsWith("exact.")),"semantic"),a=p(s=>e.find(g=>g.coverage.includes(s)),"chartOwner"),n=p((s,{before:g=[],after:h=[]})=>{if(!s)return;const d=e.indexOf(s);e=[...e.slice(0,d),...g,s,...h,...e.slice(d+1)]},"expandChartOwner"),r=p((s,g)=>{const h=e.find(d=>d.provider.name===s&&!d.provider.id.startsWith("exact."));return h?(e=e.filter(d=>d!==h),S(h,g)):J(s,g)},"chartDependency"),i=p((s,g)=>{const h=a(s);h&&n(h,g())},"expandChartConstraint");i("chart.bar.horizontal",()=>({after:[r("encodeY",{field:'"category"',fieldType:'"nominal"'}),r("encodeX",{field:'"value"',fieldType:'"quantitative"'})]})),i("chart.radar",()=>({}));const c=t("createData");c&&(e=e.map(s=>s===c?S(s,{values:"values"}):s));const m=t("createCanvas");m&&(e=e.map(s=>s===m?S(s,Pe):s));const f=t("createScatterPlot");f&&(e=e.map(s=>s===f?S(s,{x:'{ field: "x", fieldType: "quantitative" }',y:'{ field: "y", fieldType: "quantitative" }'}):s));const P=t("createLinePlot"),x=t("encodeOpacity");P&&x&&(e=e.filter(s=>s!==x).map(s=>s===P?{...S(s,{line:"{ opacity: 0.8 }"}),coverage:_([...s.coverage,...x.coverage])}:s));const $=t("createBarPlot");if($){const s=t("createScale")?.provider.id==="action.createColorScale",g='{ field: "category", scale: { id: "color-scale" } }';e=e.map(h=>{if(h!==$)return h;const d=S(h,{x:'{ field: "category", fieldType: "nominal" }',y:'{ field: "value", fieldType: "quantitative" }',...s?{color:g}:{}});return s?{...d,provider:{...d.provider,optionsByConstraint:{...d.provider.optionsByConstraint??{},"encoding.color":{color:g}}}}:d})}const q=t("createTimeUnitData"),j=t("createBarPlot");q&&j&&(e=e.map(s=>s===j?S(s,{data:'"monthly"',x:'{ field: "month", fieldType: "ordinal" }',y:'{ field: "value", fieldType: "quantitative" }'}):s));const I=t("createBoxPlot");I&&(e=e.map(s=>s===I?S(s,{x:'{ field: "category", fieldType: "nominal" }',y:'{ field: "value", fieldType: "quantitative" }'}):s));const R=t("createWindowData"),z=t("createLinePlot");if(R&&z){const s=t("createScale")?.provider.id==="action.createTimeScale";e=e.map(g=>g===z?S(g,{data:'"windowed"',x:s?'{ field: "date", fieldType: "temporal", scale: { id: "scale-1" } }':'{ field: "x", fieldType: "quantitative" }',y:'{ field: "movingMean", fieldType: "quantitative" }'}):g)}const B=t("createIntervalData"),T=t("createBoxPlot"),D=t("createErrorBar");B&&T&&D&&(e=e.map(s=>s===B?S(s,{source:'"data"',groupBy:'"category"'}):s===T?S(s,{data:'"data"',x:'{ field: "category", fieldType: "nominal" }',y:'{ field: "value", fieldType: "quantitative" }'}):s===D?S(s,{data:'"interval"',x:'{ field: "category", fieldType: "nominal", scale: { id: "errorBarX" } }',y:'{ center: "__interval_center", lower: "__interval_lower", upper: "__interval_upper", scale: { id: "errorBarY" } }'}):s));const M=t("createDensityData"),u=t("createViolinPlot");M&&u&&(e=e.filter(s=>s!==M).map(s=>s===u?{...S(s,{data:'"data"',...s.coverage.includes("guide.legend")?{color:'"category"'}:{}}),coverage:_([...s.coverage,...M.coverage])}:s));const O=t("createGradientPlot"),K=t("createScale")?.provider.id==="action.createLogScale"?t("createScale"):void 0;O&&(e=e.map(s=>s===O?S(s,{data:'"data"',x:`{ field: "value", fieldType: "quantitative"${K?', scale: { id: "scale-1" }':""} }`,y:'{ field: "category", fieldType: "nominal" }'}):s));const V=t("encodeDensity"),Q=t("createAreaMark");if(V&&!Q){const s=J("createAreaMark",{id:'"densityArea"'}),g=e.indexOf(V);e=[...e.slice(0,g),s,...e.slice(g)].map(h=>h===V?S(h,{target:'"densityArea"'}):h)}const H=t("createBin2DData"),G=t("createRectMark");if(H&&G){e=e.map(l=>l===H?S(l,{source:'"data"'}):l===G?S(l,{id:'"rect"',data:'"bins"'}):l.provider.id==="action.createColorScale"?S(l,{type:'"sequential"',range:'{ palette: "viridis" }'}):l);const s=t("encodeX"),g=t("encodeY");s&&(e=he(e,s,[S(s,{field:'"__bins_x0"',fieldType:'"quantitative"',target:'"rect"'}),J("encodeX2",{field:'"__bins_x1"',fieldType:'"quantitative"',target:'"rect"'})])),g&&(e=he(e,g,[S(g,{field:'"__bins_y0"',fieldType:'"quantitative"',target:'"rect"'}),J("encodeY2",{field:'"__bins_y1"',fieldType:'"quantitative"',target:'"rect"'})]));const h=t("encodeColor");h&&(e=e.map(l=>l===h?S(l,{field:'"__bins_count"',fieldType:'"quantitative"',target:'"rect"',scale:'{ id: "color-scale" }'}):l));const d=t("createLegend");d&&(e=e.map(l=>l===d?S(l,{target:'"rect"',channels:'["color"]'}):l))}let F,E,L;const ne=Object.freeze({createPointMark:"point",createLineMark:"line",createAreaMark:"area",createBarMark:"bar",createRuleMark:"rule",createArcMark:"arc",createRectMark:"rect",createTextMark:"text",createScatterPlot:"scatterPlot",createLinePlot:"linePlot",createPolarScatterPlot:"polarScatterPlot",createPolarLinePlot:"polarLinePlot",createRadarPlot:"radarPlot",createRugPlot:"rugPlot",createStripPlot:"stripPlot",createAreaPlot:"areaPlot",createBarPlot:"barPlot",createBoxPlot:"boxPlot",createGradientPlot:"gradientPlot",createViolinPlot:"violinPlot",createPiePlot:"piePlot",createRosePlot:"rosePlot",createRadialBarPlot:"radialBarPlot",createDensityPlot:"densityPlot",createHorizonPlot:"horizonPlot"}),X=Object.freeze({createPointMark:"point",createLineMark:"line",createAreaMark:"area",createBarMark:"bar",createRuleMark:"rule",createArcMark:"arc",createRectMark:"rect",createTextMark:"text",createScatterPlot:"point",createLinePlot:"line",createPolarScatterPlot:"point",createPolarLinePlot:"line",createRadarPlot:"line",createRugPlot:"tick",createStripPlot:"point",createAreaPlot:"area",createBarPlot:"bar",createBoxPlot:"bar",createGradientPlot:"rect",createViolinPlot:"area",createPiePlot:"arc",createRosePlot:"arc",createRadialBarPlot:"arc",createDensityPlot:"area",createHorizonPlot:"area"});return e=e.map(s=>{if(s.provider.id.startsWith("exact."))return s;if(s.provider.name==="createScale")return L=s.provider.id==="action.createColorScale"?void 0:s.provider.baseOptions?.id,s;const g=ne[s.provider.name];if(g!==void 0)return F=s.provider.baseOptions?.id?.replaceAll('"',"")??g,E=s.coverage.includes("chart.bar.horizontal")?"bar-horizontal":X[s.provider.name],s;if(!F||s.provider.name==="createErrorBar")return s;const h={};return["area","rule","arc"].includes(E)&&["encodeX","encodeY","encodeR"].includes(s.provider.name)&&(h.fieldType='"quantitative"'),s.provider.name==="encodeTheta"&&E==="arc"&&s.provider.baseOptions?.fieldType===void 0&&(h.fieldType='"ordinal"'),E==="bar"&&s.provider.name==="encodeX"&&(h.field='"category"',h.fieldType='"nominal"'),E==="bar"&&s.provider.name==="encodeY"&&(h.field='"value"',h.fieldType='"quantitative"'),E==="bar-horizontal"&&s.provider.name==="encodeX"&&(h.field='"value"',h.fieldType='"quantitative"'),E==="bar-horizontal"&&s.provider.name==="encodeY"&&(h.field='"category"',h.fieldType='"nominal"'),L&&["encodeX","encodeY"].includes(s.provider.name)&&(h.scale=`{ id: ${L} }`,L=void 0),Object.keys(h).length===0?s:S(s,h)}),Ae(De(e))}p(Ee,"closeRuntimeDependencies");function me(o,e){const t=o.coverage.map(a=>e.get(a)).filter(a=>a!==void 0);return t.length===0?Number.POSITIVE_INFINITY:Math.min(...t)}p(me,"providerRequestPosition");function ae(o,e){const t=new Map(Object.entries(o.baseOptions??{}));for(const a of e)for(const[n,r]of Object.entries(o.optionsByConstraint?.[a]??{})){const i=t.get(n);if(i!==void 0&&i!==r){if(n==="guides"&&(i==="{}"||r==="{}")){t.set(n,i==="{}"?r:i);continue}throw new Error(`${o.id} assigns conflicting values to option ${n}.`)}t.set(n,r)}return t}p(ae,"mergeOptionValues");function Le(o,e){if(o.exactCall)return o.exactCall;if(N.get(o.name).options.length===0)return`program.${o.name}()`;const a=[...e].map(([n,r])=>`${n}: ${r}`).join(", ");return`program.${o.name}(${a.length===0?"{}":`{ ${a} }`})`}p(Le,"actionCall");function We(o,e){const{provider:t,coverage:a}=o,n=ae(t,a);if(t.kind==="runtime")return{plan:{step:e,id:t.id,kind:t.kind,name:t.name,constraints:a,requiredOptions:[],signature:t.signature,route:t.route},call:t.call};const r=N.get(t.name),i=new Map(r.options.filter(c=>n.has(c.name)).map(c=>[c.name,n.get(c.name)]));return{plan:{step:e,id:t.id,kind:t.kind,name:t.name,constraints:a,requiredOptions:t.exactOptionNames??[...i.keys()],signature:r.signature,route:r.route},call:Le(t,i)}}p(We,"planEntry");function Ne(o){const e=new Set(o.filter(a=>a.plan.kind==="runtime").map(a=>a.plan.name));return[`import { ${["chart",...le.filter(a=>e.has(a))].join(", ")} } from "ggaction";`,...Object.entries(te).filter(([a])=>e.has(a)).map(([a,n])=>`import { ${a} } from "${n.entry}";`)]}p(Ne,"authoringImports");function je(o){const e=o.filter(t=>te[t.plan.name]);return o.map(t=>{if(t.plan.kind==="action"||["hconcat","vconcat"].includes(t.plan.name))return`program = ${t.call}`;if(t.plan.name==="render")return t.call;const a=te[t.plan.name];if(!a)throw new Error(`Unknown authoring runtime ${t.plan.name}.`);return`const ${e.length===1?"output":`${a.output}Output`} = ${t.call}`})}p(je,"authoringSteps");function _e(o){const e=new Set(o.map(t=>t.plan.name).filter(t=>re.includes(t)));return{imports:Ne(o),initialize:"let program = chart()",prerequisites:re.filter(t=>!e.has(t)).map(t=>{const a=N.get(t);return{id:`action.${t}`,signature:a.signature,call:t==="createCanvas"?"program = program.createCanvas({ width: 800, height: 600, margin: { top: 140, right: 220, bottom: 120, left: 260 } })":"program = program.createData({ values })",bindings:t==="createData"?["values"]:[]}}),steps:je(o)}}p(_e,"authoringBlock");function y(o){return JSON.stringify(o)}p(y,"codeString");function Ge(o,e){if(!o||e.size===0)return o;const t=o.lastIndexOf("})"),a=o.indexOf("({");if(a===-1||t===-1||t<a)throw new Error(`Cannot apply requested options to exact call: ${o}`);let n=o.slice(a+2,t).trim();for(const[r,i]of e){const c=new RegExp(`(^|,\\s*)${r}\\s*:\\s*(?:"[^"]*"|'[^']*'|-?[0-9]+(?:\\.[0-9]+)?|true|false)(?=\\s*,|$)`);c.test(n)?n=n.replace(c,(m,f)=>`${f}${r}: ${i}`):n=`${n}${n.length===0?"":", "}${r}: ${i}`}return`${o.slice(0,a+2)}${n}${o.slice(t)}`}p(Ge,"mergeExactCallOptions");function Ie(o,e){if(o.provider.exactCall)return{...o,provider:{...o.provider,exactCall:Ge(o.provider.exactCall,e),exactOptionNames:_([...o.provider.exactOptionNames??[],...e.keys()])}};const t=Object.fromEntries(Object.entries(o.provider.optionsByConstraint??{}).map(([n,r])=>[n,Object.fromEntries(Object.entries(r).filter(([i])=>!e.has(i)))])),a=S(o,Object.fromEntries(e));return{...a,provider:{...a.provider,optionsByConstraint:t}}}p(Ie,"entryWithRequestedOptions");const ge="70";function A(o,...e){return e.map(t=>o?.[t]).find(t=>t!==void 0)?.trim()}p(A,"requestedText");const oe=new Set(["and","as","at","axes","axis","coordinate","coordinates","encoding","field","for","is","legend","on","option","options","palette","scale","then","to","using","with","without","no","not"]);function Ve(o,e){const t=o.match(new RegExp(`\\b${e}(?:(?:\\s+(?:field|encoding|by|is))|\\s*[:=]|\\s+)\\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z_$][A-Za-z0-9_$.-]*))`,"i"));if(!t)return;const a=A(t,1,2,3);return t[3]!==void 0&&oe.has(a.toLowerCase())?void 0:{value:a,source:t[0]}}p(Ve,"fieldRequest");function Ye(o,e){const t=o.match(new RegExp(`\\b${e}(?:\\s+(?:by|field|encoding))?\\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z_$][A-Za-z0-9_$.-]*))`,"i"));if(!t)return;const a=A(t,1,2,3);if(!(t[3]!==void 0&&oe.has(a.toLowerCase())))return{value:a,source:t[0]}}p(Ye,"appearanceFieldRequest");function He(o,e){const t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),n=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=o.match(new RegExp(`\\b(?:${t}|${n})\\b\\s*(?:=|:|\\bis\\b|\\bto\\b)\\s*[^,;]+`,"i"));if(r)return r[0].trim();if(e!==a)return o.match(new RegExp(`\\b${t}\\b`,"i"))?.[0]}p(He,"explicitOptionMention");function Xe(o,e){let t=o;const a=[],n=[],r=[],i=p((d,l,v)=>{const b=t.find(k=>d.includes(k.provider.name));if(!b||l.size===0)return!1;t=t.map(k=>k===b?Ie(k,l):k);for(const[k,W]of l)a.push({owner:b.provider.name,option:k,value:W,source:v});return!0},"apply"),c=e.match(/\b(?:(one|two|three|four|five|six|seven|eight|nine|ten|\d+)\s+bands?|bands?\s*(?:of|=|:)?\s*(one|two|three|four|five|six|seven|eight|nine|ten|\d+))\b/i);if(c){const d=A(c,1,2),l=Number({one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10}[d.toLowerCase()]??d);Number.isInteger(l)&&l>0?i(["createHorizonPlot","encodeHorizon","editHorizon"],new Map([["bands",String(l)]]),c[0]):(n.push(c[0]),r.push(w("request.option.horizon.bands","Horizon bands must be a positive integer.")))}const m=/\b(?:legend|encoding key)\b/i.test(e),f=t.some(d=>d.provider.id.startsWith("exact.")&&/Legend/.test(d.provider.name)),P=t.some(d=>d.provider.name==="facet"),x=new Set(["encoding.color","encoding.opacity","encoding.shape","encoding.size","encoding.strokeDash","encoding.strokeWidth"]),$=t.some(d=>["createPiePlot","createRosePlot","createRadialBarPlot"].includes(d.provider.name)||d.coverage.some(l=>x.has(l)));if(m&&!$&&!f&&!P){const d=_(t.flatMap(l=>l.coverage).filter(l=>l==="guide.legend"||l.startsWith("layout.legend.")));t=t.map(l=>({...l,coverage:l.coverage.filter(v=>v!=="guide.legend"&&!v.startsWith("layout.legend."))})).filter(l=>l.coverage.length>0||l.provider.id.startsWith("exact.")),n.push("legend channel");for(const l of d)r.push(w(l,"A legend requires a concrete compatible encoding channel such as color, shape, size, opacity, stroke dash, or stroke width."))}const q=e.match(/\blegend\s+(?:at|on)\s+(top|bottom|left|right)\b/i),j=m?e.match(/\b(?:(\d+)\s+columns?|columns?\s*(?:=|:)?\s*(\d+))\b/i):void 0,I=m?void 0:e.match(/\b(?:(\d+)\s+columns?|columns?\s*(?:=|:)?\s*(\d+))\b/i),R=m?e.match(/\b(?:(horizontal|vertical)(?:\s+direction)?\s+legend|legend(?:\s+direction)?\s*(?:=|:|is)?\s*(horizontal|vertical)|direction\s*(?:=|:|is)?\s*(horizontal|vertical)|legend\b[^,;]{0,60}\b(horizontal|vertical)|(horizontal|vertical)\s+direction)\b/i):void 0,z=new Map;if(q&&z.set("position",y(q[1].toLowerCase())),j){const d=Number(A(j,1,2));Number.isInteger(d)&&d>0?z.set("columns",String(d)):(n.push(j[0]),r.push(w("request.option.legend.columns","Legend columns must be a positive integer.")))}if(R&&z.set("direction",y(A(R,1,2,3,4,5).toLowerCase())),q?.[1].toLowerCase()==="bottom"&&z.set("offset",ge),I&&(n.push(I[0]),r.push(w("request.option.columns","A column count requires a concrete owner such as a legend or composition layout."))),z.size>0&&($||f||P)){const d=[q?.[0],j?.[0],R?.[0]].filter(Boolean).join(", ");if(!i(["editLegendLayout","createLegend"],z,d)){const l=[...z].map(([v,b])=>`${v}: ${b}`).join(", ");i([...pe],new Map([["guides",`{ legend: { ${l} } }`]]),d)}}const B=e.match(/\b(\d+)\s+x[ -]?bins?\b/i),T=e.match(/\b(\d+)\s+y[ -]?bins?\b/i),D=e.match(/\b(\d+)\s+(?:bins?|bins? per axis)\b/i),M=new Map,u=[];if(B||T)if(B&&T){const d=Number(B[1]),l=Number(T[1]);if(d>0&&l>0)M.set("bins",`{ x: ${d}, y: ${l} }`),u.push(B[0],T[0]);else{const v=`${B[0]}; ${T[0]}`;n.push(v),r.push(w("request.option.bin2d.bins","Two-dimensional x and y bin counts must be positive integers."))}}else{const d=B?"y":"x",l=(B??T)[0];n.push(l),r.push(w(`transform.bin2d.bins.${d}`,`Two-dimensional bin counts require both x and y; the request specifies only ${l}.`))}else if(D){const d=Number(D[1]);Number.isInteger(d)&&d>0?(M.set("bins",String(d)),u.push(D[0])):(n.push(D[0]),r.push(w("request.option.bin2d.bins","Two-dimensional bin counts must be positive integers.")))}const O=e.match(/\b(include|exclude|omit)\s+empty\s+(?:bins|cells)\b/i);if(O&&(M.set("includeEmpty",String(O[1].toLowerCase()==="include")),u.push(O[0])),M.size>0){const d=u.join("; ");if(!i(["createBin2DData","editBin2DData"],M,d)){const l=[...M].map(([W,ee])=>`${W}: ${ee}`).join(", "),v=i(["createHeatmap"],new Map([["bin",`{ ${l} }`]]),d),b=M.get("bins"),k=!v&&b!==void 0&&/^\d+$/.test(b)&&!M.has("includeEmpty")&&i(["createHistogram"],new Map([["maxBins",b]]),d);!v&&!k&&(n.push(d),r.push(w("request.option.bin2d","Two-dimensional bin options require a heatmap or a create/edit Bin2D data action.")))}}const K=e.match(/\b(?:titled\b|(?:chart\s+)?title\b(?:\s+(?:is|text))?)\s*[:=]?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9][^,;]*?))(?=\s+(?:(?:and|with)\s+)?(?:font(?:[ -]?size)?|subtitle|on\s+|as\s+)|$)/i),V=A(K,1,2,3);V&&!oe.has(V.toLowerCase())&&i(["createTitle","editTitle"],new Map([["text",y(V)]]),K[0]);const Q=e.match(/\bsubtitle(?:\s+(?:is|text))?\s*[:=]?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9][^,;]*?))(?=\s+(?:(?:and|with)\s+)?(?:font(?:[ -]?size)?|title|on\s+|as\s+)|$)/i),H=A(Q,1,2,3);H&&!oe.has(H.toLowerCase())&&i(["createTitle","editTitle"],new Map([["subtitle",y(H)]]),Q[0]);const G=e.match(/\bfont[ -]?size\s*(?:=|:)?\s*(\d+(?:\.\d+)?)\b/i);if(G){const d=Number(G[1]);d>0&&i(["createTitle","editTitle"],new Map([["titleStyle",`{ fontSize: ${G[1]} }`]]),G[0])||(n.push(G[0]),r.push(w("request.option.fontSize",d>0?"A font size requires a concrete text owner such as a chart title, axis, legend, or text mark.":"Font size must be a positive finite number.")))}const F=Object.freeze({x:["createScatterPlot","createLinePlot","createAreaPlot","createBarPlot","createHeatmap","createBoxPlot","createViolinPlot","createGradientPlot","createRegressionData","createBin2DData","encodeHorizon","createHorizonPlot"],y:["createScatterPlot","createLinePlot","createAreaPlot","createBarPlot","createHeatmap","createBoxPlot","createViolinPlot","createGradientPlot","createRegressionData","createBin2DData","encodeHorizon","createHorizonPlot"]}),E=new Set;for(const d of["x","y"]){const l=Ve(e,d);if(!l||/^(?:bins?|axis|encoding|field)$/i.test(l.value))continue;(i(F[d],new Map([[d,y(l.value)]]),l.source)||i([`encode${d.toUpperCase()}`],new Map([["field",y(l.value)]]),l.source))&&E.add(d)}const L=e.match(/\b(?:plot|chart)\s+of\s+(?:"([^"]+)"|'([^']+)'|([A-Za-z_$][A-Za-z0-9_$.-]*))\s+(?:vs\.?|versus|against)\s+(?:"([^"]+)"|'([^']+)'|([A-Za-z_$][A-Za-z0-9_$.-]*))/i);if(L&&E.size===0){const d=A(L,1,2,3),l=A(L,4,5,6);for(const[v,b]of[["x",l],["y",d]])i(F[v],new Map([[v,y(b)]]),L[0])||i([`encode${v.toUpperCase()}`],new Map([["field",y(b)]]),L[0])}const ne=Object.freeze({color:["createScatterPlot","createLinePlot","createAreaPlot","createBarPlot","createViolinPlot","createPiePlot","createRosePlot","createRadialBarPlot","createPolarScatterPlot","createPolarLinePlot","createRadarPlot"],size:["createScatterPlot","createPolarScatterPlot"],shape:["createScatterPlot","createPolarScatterPlot"]});for(const d of["color","size","shape"]){const l=Ye(e,d);if(!l)continue;i(ne[d],new Map([[d,y(l.value)]]),l.source)||i([`encode${d[0].toUpperCase()}${d.slice(1)}`],new Map([["field",y(l.value)]]),l.source)}const X=t.find(d=>d.provider.name==="renderToSVG");if(X){const d=e.match(/\bsvg\s+title\s*(?:=|:)?\s*(?:"([^"]+)"|'([^']+)')/i),l=e.match(/\bdescription\s*(?:=|:)?\s*(?:"([^"]+)"|'([^']+)')/i),v=new Map;if(d&&v.set("title",y(A(d,1,2))),l&&v.set("description",y(A(l,1,2))),v.size>0){const b=[...v].map(([k,W])=>`${k}: ${W}`).join(", ");t=t.map(k=>k===X?{...k,provider:{...k.provider,call:`renderToSVG(program, { ${b} })`}}:k);for(const[k,W]of v)a.push({owner:"renderToSVG",option:k,value:W,source:"SVG accessible text"})}}const s=e.match(/\bpixel[ -]?ratio\s*(?:=|:)?\s*(\d+(?:\.\d+)?)\b/i);if(s){const d=Number(s[1]),l=t.find(v=>["render","renderToPNG"].includes(v.provider.name));if(l&&d>0){const v=l.provider.name==="render"?`render(program, context, { pixelRatio: ${s[1]} })`:l.provider.call.replace(/\s*}\)$/,`, pixelRatio: ${s[1]} })`);t=t.map(b=>b===l?{...b,provider:{...b.provider,call:v}}:b),a.push({owner:l.provider.name,option:"pixelRatio",value:s[1],source:s[0]})}else n.push(s[0]),r.push(w("renderer.pixelRatio",d>0?"pixelRatio applies only to Browser Canvas or PNG output; choose one of those renderers or remove the requirement.":"pixelRatio must be a positive finite number."))}else if(/\b(?:high[ -]?dpi|retina)\b/i.test(e)){const d=e.match(/\b(?:high[ -]?dpi|retina)\b/i)[0];n.push(d),r.push(w("renderer.pixelRatio","High-density raster or Canvas output requires an explicit positive pixelRatio."))}/\bresponsive\b/i.test(e)&&(n.push("responsive"),r.push(w("layout.responsive","Responsive charts require host resize observation and immutable program rebuilding; no container size was supplied."))),/\b(?:accessible|accessibility|aria)\b/i.test(e)&&(a.some(l=>l.owner==="renderToSVG"&&l.option==="title")&&a.some(l=>l.owner==="renderToSVG"&&l.option==="description")||(n.push("accessible output"),r.push(w(X?"renderer.svg.accessibleText":"output.accessibility",X?"Accessible SVG output requires concrete title and description strings.":"Accessibility requires an output-specific accessible name, description, and host fallback strategy."))));const g=new Set(a.map(d=>`${d.owner}.${Y(d.option)}`)),h=Y(e);for(const d of t.filter(l=>l.provider.kind==="action")){const l=N.get(d.provider.name),v=ae(d.provider,d.coverage);for(const b of l?.options??[]){const k=Y(b.name);if(k.length<3||!ie(h,k).length||g.has(`${d.provider.name}.${k}`)||v.has(b.name)||b.name==="stroke"&&/\b(?:stroke[ -]?dash|dashed?\s+stroke)\b/i.test(e)||b.name==="bins"&&r.some(be=>be.constraint.startsWith("transform.bin2d.bins.")))continue;const W=He(e,b.name);if(!W)continue;const ee=`${d.provider.name}.${b.name}: ${W}`;n.includes(ee)||(n.push(ee),r.push(w(`request.option.${d.provider.name}.${b.name}`,`The request mentions ${b.name}, but its value could not be parsed safely for ${d.provider.name}.`)))}}return{entries:t,appliedOptions:a,unmatchedRequirements:_(n),unresolved:r}}p(Xe,"applyRequestedOptions");function Fe(o,e=[]){const t=new Map,a=p((r,i,c,m)=>{const f=`${i}:${r}`,P=t.get(f)??{name:r,kind:i,required:!0,usedBy:[],reason:m};P.usedBy=_([...P.usedBy,c]),t.set(f,P)},"add"),n=o.find(r=>r.plan.name==="createData");(!n||/\bvalues\s*:\s*values\b/.test(n.call))&&a("values","binding","createData","Supply the caller-owned dataset rows before running the authoring block.");for(const r of o){r.plan.name==="render"&&a("context","runtime","render","Supply a CanvasRenderingContext2D from the host page."),["hconcat","vconcat"].includes(r.plan.name)&&a("programs","program",r.plan.name,"Replace the repeated sample program with two complete child ChartPrograms.");const i=r.call.matchAll(/\b(?:field|x|y|theta|radius|color|size|shape|groupBy|weight):\s*"(x|y|value|category|label|angle|distance|date|a|b|series)"/g);for(const c of i)a(c[1],"field",r.plan.name,"Replace this template name unless the input dataset declares the same field.");if(r.call.includes('"Chart title"')&&a("Chart title","text",r.plan.name,"Replace the sample title with user-approved chart text."),r.plan.id.startsWith("exact.")){const c=N.get(r.plan.name);for(const m of c?.resources.prerequisites??[])a(m,"resource",r.plan.name,"Provide or create this action-card prerequisite before applying the exact call.")}}for(const r of e){if(!new Set(["color","field","groupBy","shape","size","weight","x","y","theta","radius"]).has(r.option))continue;let i;try{i=JSON.parse(r.value)}catch{continue}typeof i!="string"||i.length===0||a(i,"field",r.owner,"Confirm that this request-supplied field exists in the caller-owned dataset.")}return[...t.values()]}p(Fe,"placeholderBindings");function Ze(o){let e=!1,t=new Set;const a=p(()=>e&&t.has("encodeX")&&t.has("encodeY")&&!t.has("encodeX2")&&!t.has("encodeY2"),"incomplete");for(const n of o){if(n.provider.id.startsWith("exact."))continue;const r=n.provider.name;if(r.startsWith("create")&&(r.endsWith("Mark")||r.endsWith("Plot"))){if(a())return!0;e=r==="createRuleMark",t=new Set;continue}e&&["encodeX","encodeY","encodeX2","encodeY2"].includes(r)&&t.add(r)}return a()}p(Ze,"hasIncompleteRulePrimaryPair");function Ue(o){return o.filter(t=>t.provider.name==="createScale"&&!t.provider.id.startsWith("exact.")).filter(t=>{const a=t.provider.baseOptions?.id;if(a===void 0)return!1;const n=`id: ${a}`;return!o.some(r=>r!==t&&[...ae(r.provider,r.coverage).values()].some(i=>i.includes(n)))}).map(t=>t.provider.baseOptions.id.replaceAll('"',""))}p(Ue,"unconsumedScaleIds");function Je(o){const e=new Set(o.filter(c=>!c.provider.id.startsWith("exact.")).map(c=>c.provider.name)),t=[],a=[],n=new Set(o.flatMap(c=>c.coverage)),i=[...e].filter(c=>c.startsWith("create")&&(c.endsWith("Mark")||c.endsWith("Plot"))).length>0||[...e].some(c=>["createHistogram","createHeatmap","createParallelCoordinates"].includes(c));["selectMarks","filterMarks","highlightMarks","facet"].some(c=>e.has(c))&&!i&&t.push(w("chart.type","Selection and faceting require one explicit chart or mark owner before those actions can be addressed.")),["hconcat","vconcat"].some(c=>e.has(c))&&!i&&t.push(w("composition.children","Composition requires at least two complete child ChartPrograms; name or provide the child charts first.")),e.has("layoutLabels")&&e.has("createTextMark")&&!e.has("encodeX")&&!e.has("encodeY")&&t.push(w("encoding.position","Collision-aware labels require a positioned source layer or explicit x and y encodings.")),e.has("createLegend")&&!["encodeColor","encodeSize","encodeShape","encodeOpacity","encodeStrokeDash","encodeStrokeWidth"].some(c=>e.has(c))&&t.push(w("guide.legend.channel","A legend requires an explicit compatible visual encoding such as color, size, shape, opacity, dash, or width.")),Ze(o)&&t.push(w("encoding.rule.endpoint","A rule with both x and y primary positions also requires x2 or y2; otherwise choose one primary position for a full-span rule."));for(const c of Ue(o))t.push(w("scale.consumer",`Scale "${c}" is not connected to a compatible encoding; choose the channel that should consume it.`));return(e.has("createAreaMark")||e.has("createAreaPlot"))&&e.has("encodeStrokeDash")&&a.push({constraint:"unsupported.areaStrokeDash",reason:"Field-driven stroke dash is not supported for area marks; use a line or rule mark for dash encoding."}),{unresolved:t,unsupported:a}}p(Je,"runtimeClosureDecisions");function w(o,e){const t=Se[o]??(o.startsWith("layout.legend.")?"ggaction://docs/legend-layout":"ggaction://docs/action-reference");return{constraint:o,reason:e,resources:[t]}}p(w,"unresolvedDecision");function Ke(o,e){const t=[],a=["chart.pie","chart.donut"].some(i=>o.has(i)&&!e.has(i)),n=o.has("chart.horizon")&&!e.has("chart.horizon"),r=o.has("chart.density")&&!e.has("chart.density");for(const i of o){let c;a&&["encoding.x","encoding.y","guide.axes","guide.xAxis","guide.yAxis","guide.grid"].includes(i)&&(c="A pie has categorical sectors and a color legend. Cartesian positions, axes, and grids require a different chart or an explicit lower-level recipe."),n&&(i==="guide.yAxis"||i==="encoding.color"||i==="guide.legend"||i.startsWith("layout.legend."))&&(c="Horizon's y scale and palette describe internal folded bands. Choose an explicit lower-level guide or a separate original-amplitude guide; the facade only creates original-x guides."),r&&(i==="encoding.color"||i==="guide.legend"||i.startsWith("layout.legend."))&&(c="Density color requires an explicit groupBy field and matching color field. Its derived data does not retain arbitrary raw categories; choose that grouping before requesting a color legend."),c&&(e.add(i),t.push(w(i,c)))}return t}p(Ke,"completeChartBoundaries");function Qe(o,e,t){const a=[],n=[...e].filter(r=>!r.startsWith("renderer.")&&!r.startsWith("unsupported."));return/\b(chart|plot)\b/.test(o)&&n.length===0&&![...e].some(r=>r.startsWith("unsupported."))&&t.length===0&&a.push(w("chart.type","A chart or mark type is required; for example scatter plot, line chart, bar chart, or tick mark.")),/\b(render|export|output)\b/.test(o)&&![...e].some(r=>r.startsWith("renderer."))&&a.push(w("renderer.format","A supported output format is required: Browser Canvas, SVG, PNG, or PDF.")),a}p(Qe,"genericUnresolved");function ve(){if(Z.schemaVersion!==3||C.schemaVersion!==2)throw new Error("Compact action cards must use schemaVersion 3 and the intent taxonomy must use schemaVersion 2.");if(C.packageVersion!==Z.packageVersion)throw new Error("Compact action cards and the intent taxonomy must use one packageVersion.");if(U.size!==C.constraints.length)throw new Error("Intent constraint IDs must be unique.");if(new Set(C.providers.map(n=>n.id)).size!==C.providers.length)throw new Error("Intent provider IDs must be unique.");const e=new Set;for(const n of C.constraints)for(const r of n.shadows??[])if(!U.has(r)||r===n.id)throw new Error(`${n.id} shadows invalid constraint ${r}.`);for(const n of C.providers){for(const r of[...n.anchors,...n.covers])if(!U.has(r))throw new Error(`${n.id} references unknown constraint ${r}.`);if(n.anchors.some(r=>!n.covers.includes(r)))throw new Error(`${n.id} does not cover every anchor.`);for(const r of n.anchors)e.add(r);if(n.kind==="action"){const r=N.get(n.name);if(!r)throw new Error(`${n.id} references unknown action ${n.name}.`);const i=new Set(r.options.map(m=>m.name)),c=[n.baseOptions??{},...Object.values(n.optionsByConstraint??{})];for(const m of c)for(const[f,P]of Object.entries(m)){if(!i.has(f))throw new Error(`${n.id} references undeclared option ${f}.`);if(typeof P!="string"||P.length===0)throw new Error(`${n.id}.${f} must be a JavaScript expression string.`)}}else{if(n.kind!=="runtime"||typeof n.signature!="string"||typeof n.call!="string"||!n.route.startsWith("/reference/"))throw new Error(`${n.id} has an invalid runtime contract.`);if(!le.includes(n.name)&&te[n.name]===void 0)throw new Error(`${n.id} lacks an authoring runtime mapping.`)}}const t=C.constraints.filter(n=>n.unsupported===void 0&&!e.has(n.id));if(t.length>0)throw new Error(`Supported constraints lack providers: ${t.map(n=>n.id).join(", ")}.`);const a=C.constraints.filter(n=>n.unsupported!==void 0!==n.id.startsWith("unsupported.")||n.unsupported!==void 0&&e.has(n.id));if(a.length>0)throw new Error(`Terminal constraints must use unsupported.* IDs without providers: ${a.map(n=>n.id).join(", ")}.`);for(const n of re)if(!N.has(n))throw new Error(`Missing authoring prerequisite action card: ${n}.`);return{cards:N.size,constraints:U.size,providers:C.providers.length,supported:C.constraints.filter(n=>n.unsupported===void 0).length,unsupported:C.constraints.filter(n=>n.unsupported!==void 0).length}}p(ve,"validateResolverKnowledge");function rt(o){if(typeof o!="string"||o.trim().length===0)throw new TypeError("searchGgaction query must be a non-empty string.");if(o.length>500)throw new RangeError("searchGgaction query must be at most 500 characters.");ve();const e=Oe(o),t=e?"":o,a=Y(t),n=Ce(t),{matched:r,positions:i}=ze(a);for(const u of n){const[O]=ie(a,Y(u));O&&i.set(`action.${u}`,O.start)}const c=new Set([...r.map(u=>u.id),...n.map(u=>`action.${u}`)]),m=r.filter(u=>u.unsupported!==void 0).map(u=>({constraint:u.id,reason:u.unsupported})),f=e?[w("request.negation","Negation or exclusion requires explicit interpretation. No authoring steps are proposed; preserve the restriction when choosing action options.")]:[],{blocked:P,unresolved:x}=Me(r);f.push(...x),f.push(...Ke(c,P));const $=new Set([...c].filter(u=>{const O=U.get(u);return!P.has(u)&&(O===void 0||O.unsupported===void 0)})),q=Be($,n),{selected:j,uncovered:I}=Re($,q);for(const u of I)f.push(w(u,"No current action or runtime operation covers this recognized constraint."));f.push(...Qe(a,c,n)),c.size===0&&f.length===0&&f.push(w("query.intent","No current ggaction constraint was recognized; use an exact action name or a supported chart task."));let R=Ee(ye(j).sort((u,O)=>u.provider.order-O.provider.order||me(u,i)-me(O,i)||u.provider.id.localeCompare(O.provider.id)));const z=Xe(R,t);R=z.entries,f.push(...z.unresolved);const B=Je(R);m.push(...B.unsupported),f.push(...B.unresolved),B.unsupported.some(u=>u.constraint==="unsupported.areaStrokeDash")&&(R=R.filter(u=>u.provider.name!=="encodeStrokeDash"));const T=R.map((u,O)=>We(u,O+1)),D={schemaVersion:4,packageVersion:Z.packageVersion,query:o.trim(),matchedConstraints:[...c],actionPlan:T.map(u=>u.plan),exactCalls:T.map(u=>u.call),appliedOptions:z.appliedOptions,placeholderBindings:Fe(T,z.appliedOptions),unmatchedRequirements:e?o.trim().length<=180?[o.trim()]:o.trim().match(/[\s\S]{1,176}/g).map((u,O)=>`${O+1}. ${u}`):z.unmatchedRequirements,authoring:_e(T),unsupported:m,unresolved:_(f.map(u=>JSON.stringify(u))).map(JSON.parse),candidates:T.slice(0,3).map(u=>({id:u.plan.id,kind:u.plan.kind,name:u.plan.name,route:u.plan.route}))},M=Buffer.byteLength(JSON.stringify(D),"utf8");if(M>6144)throw new ke(M);return D}p(rt,"searchGgaction");function it(o){return Buffer.byteLength(JSON.stringify(o),"utf8")}p(it,"taskPacketBytes"),ve();export{ke as TaskPacketBudgetError,rt as searchGgaction,it as taskPacketBytes,ve as validateResolverKnowledge};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ggaction",
3
- "version": "0.0.12",
3
+ "version": "0.0.13",
4
4
  "description": "Build charts through immutable, traceable graphical actions.",
5
5
  "license": "MIT",
6
6
  "author": "Hyeon Jeon",
@@ -111,11 +111,13 @@
111
111
  "docs:signatures:check": "node scripts/generate-doc-signatures.js --check",
112
112
  "examples:index": "node scripts/generate-examples-readme.js",
113
113
  "examples:index:check": "node scripts/generate-examples-readme.js --check",
114
- "docs:generate": "npm run examples:index && npm run docs:reference && npm run contracts:cards && npm run docs:actions && npm run docs:signatures && npm run docs:capabilities && npm run docs:metadata && npm run docs:search && npm run docs:images && npm run docs:machine && npm run docs:llms",
114
+ "docs:generate": "npm run examples:index && npm run docs:capabilities && npm run docs:reference && npm run contracts:relations && npm run contracts:cards && npm run docs:actions && npm run docs:signatures && npm run docs:metadata && npm run docs:search && npm run docs:images && npm run docs:machine && npm run docs:llms",
115
115
  "docs:build": "bundle exec jekyll build --source docs --destination _site --baseurl /ggaction",
116
116
  "docs:verify": "npm run docs:preflight && npm run docs:generate && npm run test:docs && npm run docs:build && npm run test:docs:built && npm run test:docs:browser",
117
117
  "contracts:catalog": "node scripts/generate-action-catalog.js",
118
118
  "contracts:catalog:check": "node scripts/generate-action-catalog.js --check",
119
+ "contracts:relations": "node scripts/generate-action-relationships.js",
120
+ "contracts:relations:check": "node scripts/generate-action-relationships.js --check",
119
121
  "contracts:cards": "node scripts/generate-action-cards.js",
120
122
  "contracts:cards:check": "node scripts/generate-action-cards.js --check",
121
123
  "package:check": "node scripts/package-artifact.js --check",
@@ -7,8 +7,10 @@ import { registerBasicGuideActions } from "./guides/basic.js";
7
7
  import { registerBasicMarkActions } from "./marks/basic.js";
8
8
  import { registerBasicPrimitiveActions } from "./primitives/index.js";
9
9
  import { registerBasicScaleActions } from "./scales/index.js";
10
+ import { registerThemeActions } from "./theme/index.js";
10
11
 
11
12
  export function registerBasicActions(ProgramClass) {
13
+ registerThemeActions(ProgramClass);
12
14
  registerBasicPrimitiveActions(ProgramClass);
13
15
  registerBasicCanvasActions(ProgramClass);
14
16
  registerBasicDataActions(ProgramClass);