ggaction 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +20 -11
  3. package/knowledge/action-cards.json +1 -1
  4. package/knowledge/intent-taxonomy.json +1 -1
  5. package/knowledge/mcp-resources.json +1 -1
  6. package/package.json +8 -3
  7. package/src/actions/basic.js +2 -2
  8. package/src/actions/boxPlots/components.js +14 -4
  9. package/src/actions/boxPlots/edit.js +31 -5
  10. package/src/actions/boxPlots/materialize.js +11 -3
  11. package/src/actions/boxPlots/options.js +48 -16
  12. package/src/actions/categoryOrder/index.js +15 -4
  13. package/src/actions/charts/area.js +5 -1
  14. package/src/actions/charts/bar.js +2 -1
  15. package/src/actions/charts/density.js +6 -2
  16. package/src/actions/charts/ecdf.js +4 -1
  17. package/src/actions/charts/endpoints.js +25 -3
  18. package/src/actions/charts/heatmap.js +2 -1
  19. package/src/actions/charts/histogram.js +4 -3
  20. package/src/actions/charts/horizon.js +3 -1
  21. package/src/actions/charts/interval-regression.js +5 -2
  22. package/src/actions/charts/line.js +3 -1
  23. package/src/actions/charts/parallel.js +8 -2
  24. package/src/actions/charts/pie.js +10 -2
  25. package/src/actions/charts/polar.js +15 -4
  26. package/src/actions/charts/radar.js +8 -2
  27. package/src/actions/charts/radial.js +10 -2
  28. package/src/actions/charts/rug-strip.js +6 -2
  29. package/src/actions/charts/scatter.js +3 -1
  30. package/src/actions/composition/actions.js +13 -4
  31. package/src/actions/coordinates/actions.js +1 -1
  32. package/src/actions/coordinates/edit.js +76 -0
  33. package/src/actions/data/bin.js +1 -1
  34. package/src/actions/data/bin2d.js +57 -185
  35. package/src/actions/data/complete.js +26 -0
  36. package/src/actions/data/computed.js +2 -2
  37. package/src/actions/data/create.js +2 -2
  38. package/src/actions/data/density.js +12 -20
  39. package/src/actions/data/derived.js +47 -17
  40. package/src/actions/data/edit.js +539 -0
  41. package/src/actions/data/filter.js +14 -2
  42. package/src/actions/data/impute.js +26 -0
  43. package/src/actions/data/index.js +14 -0
  44. package/src/actions/data/normalize.js +27 -0
  45. package/src/actions/data/regression.js +16 -21
  46. package/src/actions/data/revisionBindings.js +145 -0
  47. package/src/actions/data/shared.js +20 -4
  48. package/src/actions/data/summary.js +1 -1
  49. package/src/actions/data/timeUnit.js +4 -1
  50. package/src/actions/data/window.js +1 -1
  51. package/src/actions/encodings/channels.js +415 -0
  52. package/src/actions/encodings/color/index.js +2 -1
  53. package/src/actions/encodings/density.js +5 -2
  54. package/src/actions/encodings/histogram.js +3 -2
  55. package/src/actions/encodings/index.js +4 -0
  56. package/src/actions/encodings/offset.js +20 -13
  57. package/src/actions/encodings/position/apply.js +53 -7
  58. package/src/actions/encodings/position/index.js +10 -2
  59. package/src/actions/encodings/position/policies/bar.js +9 -0
  60. package/src/actions/encodings/position/resolve.js +24 -7
  61. package/src/actions/encodings/remove.js +9 -4
  62. package/src/actions/encodings/ruleAppearance.js +1 -23
  63. package/src/actions/encodings/seriesLayout.js +1 -0
  64. package/src/actions/encodings/shared.js +82 -14
  65. package/src/actions/encodings/stroke.js +226 -0
  66. package/src/actions/errorBands/create.js +23 -3
  67. package/src/actions/errorBands/edit.js +21 -6
  68. package/src/actions/errorBars/create.js +35 -7
  69. package/src/actions/errorBars/edit.js +19 -4
  70. package/src/actions/facets/actions.js +237 -57
  71. package/src/actions/facets/derive.js +91 -26
  72. package/src/actions/gradientPlots/components.js +10 -2
  73. package/src/actions/gradientPlots/edit.js +14 -4
  74. package/src/actions/gradientPlots/materialize.js +3 -1
  75. package/src/actions/gradientPlots/options.js +10 -2
  76. package/src/actions/guides/applicability.js +8 -2
  77. package/src/actions/guides/axes/labels.js +58 -12
  78. package/src/actions/guides/axes/lines.js +6 -2
  79. package/src/actions/guides/axes/parallel/resolve.js +6 -2
  80. package/src/actions/guides/axes/tickGroups.js +2 -1
  81. package/src/actions/guides/axes/ticks.js +6 -2
  82. package/src/actions/guides/axes/titles.js +11 -3
  83. package/src/actions/guides/grids/resolve.js +7 -2
  84. package/src/actions/guides/guides.js +19 -3
  85. package/src/actions/guides/legends/blocks.js +426 -0
  86. package/src/actions/guides/legends/categorical/actions.js +134 -48
  87. package/src/actions/guides/legends/categorical/components.js +17 -12
  88. package/src/actions/guides/legends/categorical/index.js +37 -33
  89. package/src/actions/guides/legends/categorical/layout.js +97 -15
  90. package/src/actions/guides/legends/categorical/options.js +2 -2
  91. package/src/actions/guides/legends/categorical/recipes.js +111 -20
  92. package/src/actions/guides/legends/categorical/resolve.js +12 -8
  93. package/src/actions/guides/legends/categorical/symbols.js +85 -30
  94. package/src/actions/guides/legends/continuous/common.js +30 -12
  95. package/src/actions/guides/legends/continuous/gradient.js +10 -7
  96. package/src/actions/guides/legends/continuous/index.js +2 -0
  97. package/src/actions/guides/legends/continuous/interval.js +8 -3
  98. package/src/actions/guides/legends/continuous/opacity.js +8 -5
  99. package/src/actions/guides/legends/continuous/stroke.js +525 -0
  100. package/src/actions/guides/legends/creation.js +14 -1
  101. package/src/actions/guides/legends/edit.js +158 -59
  102. package/src/actions/guides/legends/index.js +2 -0
  103. package/src/actions/guides/legends/lane.js +54 -19
  104. package/src/actions/guides/legends/lifecycle.js +19 -8
  105. package/src/actions/guides/legends/remove.js +13 -3
  106. package/src/actions/guides/legends/sampling.js +140 -0
  107. package/src/actions/guides/legends/size.js +93 -40
  108. package/src/actions/guides/legends/strokeWidth.js +34 -28
  109. package/src/actions/guides/legends/target.js +112 -1
  110. package/src/actions/guides/legends/transition.js +165 -16
  111. package/src/actions/guides/polar/axes/facade.js +4 -4
  112. package/src/actions/guides/polar/axes/labels.js +24 -5
  113. package/src/actions/guides/polar/axes/lines.js +10 -4
  114. package/src/actions/guides/polar/axes/shared.js +16 -0
  115. package/src/actions/guides/polar/axes/ticks.js +1 -1
  116. package/src/actions/guides/polar/axes/titles.js +1 -1
  117. package/src/actions/guides/polar/grids.js +1 -1
  118. package/src/actions/guides/polar/resolve.js +12 -8
  119. package/src/actions/index.js +14 -3
  120. package/src/actions/marks/arc/actions.js +77 -19
  121. package/src/actions/marks/area/actions.js +34 -9
  122. package/src/actions/marks/area/materialize.js +17 -1
  123. package/src/actions/marks/bar/create.js +11 -2
  124. package/src/actions/marks/bar/edit.js +20 -3
  125. package/src/actions/marks/bar/materialize.js +22 -2
  126. package/src/actions/marks/index.js +10 -1
  127. package/src/actions/marks/line/actions.js +37 -14
  128. package/src/actions/marks/line/materialize.js +29 -10
  129. package/src/actions/marks/point/create.js +8 -2
  130. package/src/actions/marks/point/edit.js +18 -6
  131. package/src/actions/marks/point/materialize.js +49 -15
  132. package/src/actions/marks/rect/actions.js +33 -12
  133. package/src/actions/marks/references.js +601 -30
  134. package/src/actions/marks/remove.js +71 -1
  135. package/src/actions/marks/rule/actions.js +47 -10
  136. package/src/actions/marks/shared.js +1 -1
  137. package/src/actions/marks/text/actions.js +74 -9
  138. package/src/actions/marks/text/index.js +4 -0
  139. package/src/actions/marks/text/layout.js +154 -6
  140. package/src/actions/marks/text/removal.js +173 -0
  141. package/src/actions/marks/text/selection.js +73 -0
  142. package/src/actions/marks/tick/actions.js +22 -5
  143. package/src/actions/primitives/editGraphics.js +26 -0
  144. package/src/actions/primitives/semantic.js +2 -1
  145. package/src/actions/primitives/semanticAction.js +83 -10
  146. package/src/actions/primitives/semanticValidation/guide.js +1 -1
  147. package/src/actions/primitives/semanticValidation/index.js +9 -1
  148. package/src/actions/primitives/semanticValidation/layer.js +5 -0
  149. package/src/actions/primitives/semanticValidation/scale.js +28 -7
  150. package/src/actions/regression/components.js +26 -11
  151. package/src/actions/regression/create.js +10 -2
  152. package/src/actions/regression/edit.js +21 -7
  153. package/src/actions/resources/index.js +7 -0
  154. package/src/actions/resources/remove.js +172 -0
  155. package/src/actions/scales/channels.js +212 -0
  156. package/src/actions/scales/consumers/common.js +1 -1
  157. package/src/actions/scales/consumers/families.js +3 -2
  158. package/src/actions/scales/consumers/index.js +19 -2
  159. package/src/actions/scales/consumers/seriesLayout.js +28 -14
  160. package/src/actions/scales/create.js +54 -22
  161. package/src/actions/scales/definitions.js +94 -40
  162. package/src/actions/scales/edit.js +66 -11
  163. package/src/actions/scales/editPolicy.js +81 -11
  164. package/src/actions/scales/index.js +6 -0
  165. package/src/actions/scales/materialize.js +4 -3
  166. package/src/actions/scales/offset.js +48 -0
  167. package/src/actions/scales/parallel.js +71 -0
  168. package/src/actions/scales/preview.js +111 -10
  169. package/src/actions/selection/actions.js +154 -30
  170. package/src/actions/selection/index.js +3 -0
  171. package/src/actions/theme/actions.js +68 -13
  172. package/src/actions/theme/composition.js +238 -0
  173. package/src/actions/theme/index.js +9 -2
  174. package/src/actions/theme/reconcile.js +315 -67
  175. package/src/actions/theme/state.js +160 -0
  176. package/src/actions/violinPlots/create.js +5 -2
  177. package/src/actions/violinPlots/edit.js +1 -0
  178. package/src/core/action.js +10 -0
  179. package/src/core/compositionState.js +6 -1
  180. package/src/core/programState.js +20 -0
  181. package/src/core/resourceReferences.js +332 -0
  182. package/src/core/vocabulary.js +16 -3
  183. package/src/grammar/bars/aggregate.js +4 -1
  184. package/src/grammar/bars/geometry.js +44 -0
  185. package/src/grammar/bin.js +54 -9
  186. package/src/grammar/complete.js +279 -0
  187. package/src/grammar/computed.js +265 -64
  188. package/src/grammar/coordinates.js +37 -0
  189. package/src/grammar/density.js +239 -37
  190. package/src/grammar/displayLabels.js +57 -0
  191. package/src/grammar/facets/dependencies.js +133 -1
  192. package/src/grammar/facets/guides.js +3 -0
  193. package/src/grammar/facets/index.js +7 -47
  194. package/src/grammar/facets/scales.js +15 -18
  195. package/src/grammar/impute.js +340 -0
  196. package/src/grammar/markLabelSelection.js +57 -0
  197. package/src/grammar/markLabels.js +18 -1
  198. package/src/grammar/normalize.js +366 -0
  199. package/src/grammar/pathSeries.js +26 -8
  200. package/src/grammar/pointShapes.js +13 -4
  201. package/src/grammar/polar.js +90 -8
  202. package/src/grammar/regression/index.js +1 -0
  203. package/src/grammar/regression/parameters.js +23 -0
  204. package/src/grammar/roundedRect.js +180 -0
  205. package/src/grammar/rules.js +1 -0
  206. package/src/grammar/scales/colorConsumers.js +20 -1
  207. package/src/grammar/scales/continuous.js +2 -2
  208. package/src/grammar/scales/definition.js +27 -4
  209. package/src/grammar/scales/index.js +1 -0
  210. package/src/grammar/scales/ordinal.js +12 -3
  211. package/src/grammar/scales/policies.js +2 -2
  212. package/src/grammar/scales/size.js +456 -0
  213. package/src/grammar/schemas/concreteGraphic.js +14 -2
  214. package/src/grammar/schemas/graphic.js +15 -0
  215. package/src/grammar/schemas/graphicBounds.js +179 -30
  216. package/src/grammar/schemas/semanticPath.js +7 -2
  217. package/src/grammar/statisticalReference.js +103 -0
  218. package/src/grammar/strokeStyle.js +77 -0
  219. package/src/grammar/summary.js +78 -16
  220. package/src/grammar/timeUnit.js +216 -5
  221. package/src/grammar/transformTopology.js +4 -0
  222. package/src/grammar/transforms.js +394 -28
  223. package/src/grammar/weightedStatistics.js +374 -0
  224. package/src/grammar/window.js +221 -16
  225. package/src/layout/aspect.js +80 -0
  226. package/src/layout/facets.js +59 -5
  227. package/src/layout/labels.js +343 -0
  228. package/src/materialization/bars/aggregate.js +25 -2
  229. package/src/materialization/bars/histogram.js +84 -24
  230. package/src/materialization/bars/ranged.js +19 -3
  231. package/src/materialization/bars/resolve.js +7 -4
  232. package/src/materialization/composition.js +3 -1
  233. package/src/materialization/coordinateBounds.js +204 -0
  234. package/src/materialization/dependencies.js +36 -0
  235. package/src/materialization/facetGuides/legacyCategorical.js +3 -0
  236. package/src/materialization/facetGuides/placement.js +8 -2
  237. package/src/materialization/facetGuides/preparation.js +12 -7
  238. package/src/materialization/facetHeaders.js +346 -0
  239. package/src/materialization/facets.js +15 -65
  240. package/src/materialization/guides/resources.js +26 -0
  241. package/src/materialization/legends.js +1 -1
  242. package/src/materialization/marks/index.js +11 -5
  243. package/src/materialization/marks/policies.js +2 -1
  244. package/src/materialization/rect.js +25 -12
  245. package/src/materialization/rectConfig.js +5 -1
  246. package/src/materialization/scales/map.js +5 -3
  247. package/src/materialization/scales/policies/binnedPosition.js +2 -2
  248. package/src/materialization/scales/policies/offset.js +50 -8
  249. package/src/materialization/scales/policies/series.js +4 -1
  250. package/src/materialization/scales/resolve.js +22 -6
  251. package/src/materialization/selection/items/arc.js +28 -4
  252. package/src/materialization/selection/items/bar.js +30 -3
  253. package/src/materialization/selection/items/common.js +19 -4
  254. package/src/materialization/selection/items/rect.js +28 -4
  255. package/src/materialization/selection/path.js +1 -1
  256. package/src/materialization/selection/point.js +3 -1
  257. package/src/materialization/text.js +265 -14
  258. package/src/renderers/canvas/circle.js +2 -3
  259. package/src/renderers/canvas/line.js +2 -3
  260. package/src/renderers/canvas/native.js +4 -4
  261. package/src/renderers/canvas/path.js +2 -3
  262. package/src/renderers/canvas/rect.js +2 -3
  263. package/src/renderers/canvas/stroke.js +11 -0
  264. package/src/renderers/svg.js +19 -0
  265. package/src/selectors/datasets.js +32 -1
  266. package/src/selectors/layers.js +4 -0
  267. package/src/theme/defaults.js +101 -0
  268. package/types/basic.d.ts +6 -0
  269. package/types/index.d.ts +85 -0
  270. package/types/program.d.ts +910 -117
package/CHANGELOG.md CHANGED
@@ -4,6 +4,84 @@ All notable changes to `ggaction` are recorded in this file.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## [0.0.15] - 2026-09-14
8
+
9
+ ### Added
10
+
11
+ - Added independent field-driven stroke color for Point, Line, Area, Bar, Rect,
12
+ Arc, Rule, and Tick marks, including categorical and continuous scales,
13
+ focused scale editing, legends, selections, facets, and renderer parity.
14
+ - Added logarithmic, square-root, power, quantize, quantile, and threshold
15
+ point-size scales with equal-area geometry, focused scale editing, complete
16
+ interval legends, source replay, strict types, and installed-package support.
17
+
18
+ - Added normalization and missing-data workflows with `createNormalizedData`,
19
+ `createCompleteData`, and `createImputedData`. Computed expressions now support
20
+ typed scalar/null results, comparisons, conditions, and short-circuit logic;
21
+ calendar buckets and windows have explicit time and ordering policies.
22
+ - Added immutable derived revision editing: `editDerivedData`, `editComputedData`,
23
+ `editFilteredData`, `editFoldData`, `editSummaryData`, `editBinData`,
24
+ `editTimeUnitData`, `editWindowData`, `editDensityData`, `editStackData`,
25
+ `editRegressionData`, `editIntervalData`, `editECDFData`, `editNormalizedData`,
26
+ `editCompleteData`, and `editImputedData`. An existing descendant rejects an
27
+ edit by default; `dependents: "recompute"` rebuilds the full affected closure.
28
+ - Added focused scale editing with `editXScale`, `editYScale`, `editThetaScale`,
29
+ `editRScale`, `editColorScale`, `editStrokeScale`, `editSizeScale`,
30
+ `editOpacityScale`, `editShapeScale`, `editStrokeWidthScale`,
31
+ `editStrokeDashScale`, `editXOffsetScale`, `editYOffsetScale`, and
32
+ `editParallelScale`. These select the channel owner and replay its consumers.
33
+ - Added `encodeChannels` for atomic multi-channel reassignment; `editCoordinate`
34
+ for Cartesian aspect and Polar frame changes; and `editLegendBlock` for one
35
+ identified block of a composite legend.
36
+ - Added `editMarkLabelSelection`, `editMarkLabelPlacement`, and `removeMarkLabels`.
37
+ Label selection now works on final aggregated items; semantic placement follows
38
+ directed boundaries through source, scale, and layout changes.
39
+ - Added explicit safe removal with `removeData`, `removeScale`, and
40
+ `removeCoordinate`. A live dependency produces an ownership-path error; remove
41
+ or rebind consumers before removing the resource.
42
+ - Added weighted summaries, bins, histogram/KDE authoring and revisions; dynamic
43
+ statistical reference lines/bands; exact sampled legend values; typed display
44
+ label maps; facet-header role/side/alignment controls; custom theme tokens;
45
+ detailed stroke styles, rounded rectangles, and expanded Polar/Parallel facets.
46
+
47
+ ### Changed
48
+
49
+ - Clarified the action/program grammar, relative action hierarchy, and
50
+ decision-level atomicity. Catalog role tags are distinguished from action
51
+ delegation and package exposure.
52
+ - Resource removal actions now record their semantic deletions as `editSemantic`
53
+ children. The full extension primitive accepts whole unused source datasets
54
+ and coordinates while retaining dependency guards and immutable snapshots.
55
+ - Point-size ranges represent area across continuous and discrete families.
56
+ Entering a discrete size family requires a destination domain and range;
57
+ repeated field assignments preserve compatible scale settings.
58
+ - Axis, legend, and facet display labels preserve raw category identity. Mapping
59
+ `"KR"` to `"South Korea"` changes visible text while grouping, selection, and
60
+ domain lookup still use `"KR"`. Numeric and UTC formats must match field type.
61
+ - Custom themes supply defaults while explicit mark styles retain precedence.
62
+ Removing a theme restores baseline defaults and retains explicit overrides.
63
+ - Complete guides can be created progressively without duplicating existing
64
+ compatible components. Polar/Parallel repetition retains source recipes and
65
+ rejects unsupported role substitutions explicitly.
66
+ - Documentation now distinguishes released API snapshots from later development,
67
+ provides an exact address and declaration for every action, and executes every
68
+ maintained tutorial and recipe against the packaged module. See
69
+ [migration notes](https://ggaction.github.io/ggaction/version/#migration-from-v0013).
70
+
71
+ ### Fixed
72
+
73
+ - Prevented typing immediately after a failed search-index prefetch from sending
74
+ an implicit retry. Each explicit retry now sends one request even when the
75
+ first failure arrives before the input event.
76
+ - Corrected the README's canvas margins for its complete 406-row example and
77
+ documented regression defaults beside the example. The hierarchy tutorial now
78
+ refines its high-level chart and demonstrates a subsequent style revision.
79
+ - Corrected default dumbbell axis titles, direct Rose radius refinement, and stale
80
+ current-guide pointers after removal.
81
+ - Corrected executable examples, API defaults and compatibility descriptions,
82
+ missing gallery/tutorial entries, exact-action search, initial ArrowUp selection,
83
+ filter/TOC synchronization, search retries, and narrow-screen type references.
84
+
7
85
  ## [0.0.13] - 2026-09-07
8
86
 
9
87
  ### Added
package/README.md CHANGED
@@ -16,15 +16,14 @@ Every frame is rendered from an immutable `ChartProgram`. The final R² label is
16
16
 
17
17
  ## A grammar of graphical action
18
18
 
19
- Actions are verbs:
19
+ An action expresses a design operation on a chart element. In
20
+ `editLineMark({ strokeWidth: 4 })`, `edit` is the operation, `LineMark` names
21
+ the target concept, and the option supplies the design choice.
20
22
 
21
- `create · transform · encode · edit · select · compose`
22
-
23
- Chart resources are nouns:
24
-
25
- `data · marks · scales · coordinates · guides`
26
-
27
- A `ChartProgram` is the immutable sentence they produce.
23
+ The grammar has two units: **graphical actions** and **chart programs**.
24
+ A program composes action calls in authoring order and retains their resulting
25
+ immutable state. Authors read a linear sequence of decisions; an action may
26
+ delegate to smaller actions recorded in its nested execution trace.
28
27
 
29
28
  The following fragment assumes `cars` is an array of row objects:
30
29
 
@@ -32,7 +31,11 @@ The following fragment assumes `cars` is an array of row objects:
32
31
  import { chart } from "ggaction";
33
32
 
34
33
  const program = chart()
35
- .createCanvas()
34
+ .createCanvas({
35
+ width: 760,
36
+ height: 480,
37
+ margin: { top: 40, right: 190, bottom: 70, left: 80 }
38
+ })
36
39
  .createData({ values: cars })
37
40
  .createScatterPlot({
38
41
  id: "points",
@@ -45,6 +48,12 @@ const program = chart()
45
48
  .createGuides();
46
49
  ```
47
50
 
51
+ Here `createRegression()` infers groups from the point layer, uses a linear
52
+ model, and includes a 95% mean-response interval band. The right margin reserves
53
+ space for the resulting legend. The [regression recipe](https://ggaction.github.io/ggaction/recipes/regression-scatterplot/)
54
+ provides data and rendering setup; [regression options](https://ggaction.github.io/ggaction/api/regression/)
55
+ control grouping, model, interval, and whether a band is drawn.
56
+
48
57
  ## Why actions?
49
58
 
50
59
  - **Progressive** — build and revise a chart one meaningful operation at a time.
@@ -157,7 +166,7 @@ automatic undo stack; the application chooses which to retain or render.
157
166
 
158
167
  Use `createLinePlot`, `createBarPlot`, `createHistogram`, and `createHeatmap` for
159
168
  the other basic Cartesian charts. The `ggaction/basic` entry keeps this common
160
- creation path at or below the current 153,000-byte gzip regression ceiling while
169
+ creation path at or below the current 175,000-byte gzip regression ceiling while
161
170
  each facade still records its mark, encoding, and guide actions as trace
162
171
  children. Import from
163
172
  `ggaction` when you need editing, selection, composition, alternative
@@ -231,7 +240,7 @@ the extra discussion required before public API or architecture changes.
231
240
 
232
241
  ## Status and development
233
242
 
234
- > **Status:** `0.0.13` is the current experimental public release. APIs may change before `1.0.0`; changes are recorded in the [changelog](./CHANGELOG.md).
243
+ > **Status:** `0.0.15` is the current experimental public release. APIs may change before `1.0.0`; changes are recorded in the [changelog](./CHANGELOG.md).
235
244
 
236
245
  ```bash
237
246
  npm install