@ggts-sh/spec 0.43.0

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 (679) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +75 -0
  3. package/dist/artifact.d.ts +11 -0
  4. package/dist/artifact.d.ts.map +1 -0
  5. package/dist/artifact.js +71 -0
  6. package/dist/artifact.js.map +1 -0
  7. package/dist/builder-core.d.ts +100 -0
  8. package/dist/builder-core.d.ts.map +1 -0
  9. package/dist/builder-core.js +176 -0
  10. package/dist/builder-core.js.map +1 -0
  11. package/dist/builder-data.d.ts +36 -0
  12. package/dist/builder-data.d.ts.map +1 -0
  13. package/dist/builder-data.js +123 -0
  14. package/dist/builder-data.js.map +1 -0
  15. package/dist/builder-geoms.d.ts +128 -0
  16. package/dist/builder-geoms.d.ts.map +1 -0
  17. package/dist/builder-geoms.js +221 -0
  18. package/dist/builder-geoms.js.map +1 -0
  19. package/dist/builder-options.d.ts +323 -0
  20. package/dist/builder-options.d.ts.map +1 -0
  21. package/dist/builder-options.js +2 -0
  22. package/dist/builder-options.js.map +1 -0
  23. package/dist/builder-scales.d.ts +160 -0
  24. package/dist/builder-scales.d.ts.map +1 -0
  25. package/dist/builder-scales.js +322 -0
  26. package/dist/builder-scales.js.map +1 -0
  27. package/dist/builder.d.ts +242 -0
  28. package/dist/builder.d.ts.map +1 -0
  29. package/dist/builder.js +42 -0
  30. package/dist/builder.js.map +1 -0
  31. package/dist/capabilities-data.d.ts +72 -0
  32. package/dist/capabilities-data.d.ts.map +1 -0
  33. package/dist/capabilities-data.js +337 -0
  34. package/dist/capabilities-data.js.map +1 -0
  35. package/dist/capabilities-helpers.d.ts +31 -0
  36. package/dist/capabilities-helpers.d.ts.map +1 -0
  37. package/dist/capabilities-helpers.js +41 -0
  38. package/dist/capabilities-helpers.js.map +1 -0
  39. package/dist/capabilities.d.ts +22 -0
  40. package/dist/capabilities.d.ts.map +1 -0
  41. package/dist/capabilities.js +154 -0
  42. package/dist/capabilities.js.map +1 -0
  43. package/dist/coord-helpers.d.ts +102 -0
  44. package/dist/coord-helpers.d.ts.map +1 -0
  45. package/dist/coord-helpers.js +90 -0
  46. package/dist/coord-helpers.js.map +1 -0
  47. package/dist/coord-reference-build.d.ts +50 -0
  48. package/dist/coord-reference-build.d.ts.map +1 -0
  49. package/dist/coord-reference-build.js +211 -0
  50. package/dist/coord-reference-build.js.map +1 -0
  51. package/dist/coord-reference.d.ts +52 -0
  52. package/dist/coord-reference.d.ts.map +1 -0
  53. package/dist/coord-reference.js +27 -0
  54. package/dist/coord-reference.js.map +1 -0
  55. package/dist/error-catalog.d.ts +258 -0
  56. package/dist/error-catalog.d.ts.map +1 -0
  57. package/dist/error-catalog.js +235 -0
  58. package/dist/error-catalog.js.map +1 -0
  59. package/dist/error-prose-shared.d.ts +100 -0
  60. package/dist/error-prose-shared.d.ts.map +1 -0
  61. package/dist/error-prose-shared.js +95 -0
  62. package/dist/error-prose-shared.js.map +1 -0
  63. package/dist/errors.d.ts +39 -0
  64. package/dist/errors.d.ts.map +1 -0
  65. package/dist/errors.js +52 -0
  66. package/dist/errors.js.map +1 -0
  67. package/dist/generated/coord-reference-data.d.ts +189 -0
  68. package/dist/generated/coord-reference-data.d.ts.map +1 -0
  69. package/dist/generated/coord-reference-data.js +212 -0
  70. package/dist/generated/coord-reference-data.js.map +1 -0
  71. package/dist/generated/geom-param-keys.d.ts +58 -0
  72. package/dist/generated/geom-param-keys.d.ts.map +1 -0
  73. package/dist/generated/geom-param-keys.js +223 -0
  74. package/dist/generated/geom-param-keys.js.map +1 -0
  75. package/dist/generated/geom-reference-data.d.ts +2377 -0
  76. package/dist/generated/geom-reference-data.d.ts.map +1 -0
  77. package/dist/generated/geom-reference-data.js +2790 -0
  78. package/dist/generated/geom-reference-data.js.map +1 -0
  79. package/dist/generated/guide-reference-data.d.ts +219 -0
  80. package/dist/generated/guide-reference-data.d.ts.map +1 -0
  81. package/dist/generated/guide-reference-data.js +253 -0
  82. package/dist/generated/guide-reference-data.js.map +1 -0
  83. package/dist/generated/plot-spec-validator.d.ts +2 -0
  84. package/dist/generated/plot-spec-validator.d.ts.map +1 -0
  85. package/dist/generated/plot-spec-validator.js +6274 -0
  86. package/dist/generated/plot-spec-validator.js.map +1 -0
  87. package/dist/generated/position-reference-data.d.ts +82 -0
  88. package/dist/generated/position-reference-data.d.ts.map +1 -0
  89. package/dist/generated/position-reference-data.js +181 -0
  90. package/dist/generated/position-reference-data.js.map +1 -0
  91. package/dist/generated/scale-reference-data.d.ts +8366 -0
  92. package/dist/generated/scale-reference-data.d.ts.map +1 -0
  93. package/dist/generated/scale-reference-data.js +9821 -0
  94. package/dist/generated/scale-reference-data.js.map +1 -0
  95. package/dist/generated/stat-reference-data.d.ts +241 -0
  96. package/dist/generated/stat-reference-data.d.ts.map +1 -0
  97. package/dist/generated/stat-reference-data.js +311 -0
  98. package/dist/generated/stat-reference-data.js.map +1 -0
  99. package/dist/geom-params-build.d.ts +3 -0
  100. package/dist/geom-params-build.d.ts.map +1 -0
  101. package/dist/geom-params-build.js +80 -0
  102. package/dist/geom-params-build.js.map +1 -0
  103. package/dist/geom-params.d.ts +13 -0
  104. package/dist/geom-params.d.ts.map +1 -0
  105. package/dist/geom-params.js +7 -0
  106. package/dist/geom-params.js.map +1 -0
  107. package/dist/geom-reference-build.d.ts +29 -0
  108. package/dist/geom-reference-build.d.ts.map +1 -0
  109. package/dist/geom-reference-build.js +221 -0
  110. package/dist/geom-reference-build.js.map +1 -0
  111. package/dist/geom-reference.d.ts +52 -0
  112. package/dist/geom-reference.d.ts.map +1 -0
  113. package/dist/geom-reference.js +72 -0
  114. package/dist/geom-reference.js.map +1 -0
  115. package/dist/guide-helpers.d.ts +20 -0
  116. package/dist/guide-helpers.d.ts.map +1 -0
  117. package/dist/guide-helpers.js +25 -0
  118. package/dist/guide-helpers.js.map +1 -0
  119. package/dist/guide-reference-build.d.ts +42 -0
  120. package/dist/guide-reference-build.d.ts.map +1 -0
  121. package/dist/guide-reference-build.js +180 -0
  122. package/dist/guide-reference-build.js.map +1 -0
  123. package/dist/guide-reference.d.ts +48 -0
  124. package/dist/guide-reference.d.ts.map +1 -0
  125. package/dist/guide-reference.js +32 -0
  126. package/dist/guide-reference.js.map +1 -0
  127. package/dist/hue-grey-palettes.d.ts +15 -0
  128. package/dist/hue-grey-palettes.d.ts.map +1 -0
  129. package/dist/hue-grey-palettes.js +77 -0
  130. package/dist/hue-grey-palettes.js.map +1 -0
  131. package/dist/index.d.ts +364 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +225 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/lint-catalog.d.ts +47 -0
  136. package/dist/lint-catalog.d.ts.map +1 -0
  137. package/dist/lint-catalog.js +39 -0
  138. package/dist/lint-catalog.js.map +1 -0
  139. package/dist/lint-layer-rules.d.ts +18 -0
  140. package/dist/lint-layer-rules.d.ts.map +1 -0
  141. package/dist/lint-layer-rules.js +145 -0
  142. package/dist/lint-layer-rules.js.map +1 -0
  143. package/dist/lint-scale-rules.d.ts +8 -0
  144. package/dist/lint-scale-rules.d.ts.map +1 -0
  145. package/dist/lint-scale-rules.js +254 -0
  146. package/dist/lint-scale-rules.js.map +1 -0
  147. package/dist/lint.d.ts +62 -0
  148. package/dist/lint.d.ts.map +1 -0
  149. package/dist/lint.js +57 -0
  150. package/dist/lint.js.map +1 -0
  151. package/dist/normalize-coord.d.ts +8 -0
  152. package/dist/normalize-coord.d.ts.map +1 -0
  153. package/dist/normalize-coord.js +123 -0
  154. package/dist/normalize-coord.js.map +1 -0
  155. package/dist/normalize-input-layers-marks.d.ts +208 -0
  156. package/dist/normalize-input-layers-marks.d.ts.map +1 -0
  157. package/dist/normalize-input-layers-marks.js +2 -0
  158. package/dist/normalize-input-layers-marks.js.map +1 -0
  159. package/dist/normalize-input-layers-special.d.ts +131 -0
  160. package/dist/normalize-input-layers-special.d.ts.map +1 -0
  161. package/dist/normalize-input-layers-special.js +2 -0
  162. package/dist/normalize-input-layers-special.js.map +1 -0
  163. package/dist/normalize-input.d.ts +81 -0
  164. package/dist/normalize-input.d.ts.map +1 -0
  165. package/dist/normalize-input.js +2 -0
  166. package/dist/normalize-input.js.map +1 -0
  167. package/dist/normalize-paint.d.ts +8 -0
  168. package/dist/normalize-paint.d.ts.map +1 -0
  169. package/dist/normalize-paint.js +83 -0
  170. package/dist/normalize-paint.js.map +1 -0
  171. package/dist/normalize-scales.d.ts +7 -0
  172. package/dist/normalize-scales.d.ts.map +1 -0
  173. package/dist/normalize-scales.js +90 -0
  174. package/dist/normalize-scales.js.map +1 -0
  175. package/dist/normalize.d.ts +46 -0
  176. package/dist/normalize.d.ts.map +1 -0
  177. package/dist/normalize.js +279 -0
  178. package/dist/normalize.js.map +1 -0
  179. package/dist/paint-helpers.d.ts +45 -0
  180. package/dist/paint-helpers.d.ts.map +1 -0
  181. package/dist/paint-helpers.js +48 -0
  182. package/dist/paint-helpers.js.map +1 -0
  183. package/dist/pipeline-error-catalog.d.ts +319 -0
  184. package/dist/pipeline-error-catalog.d.ts.map +1 -0
  185. package/dist/pipeline-error-catalog.js +260 -0
  186. package/dist/pipeline-error-catalog.js.map +1 -0
  187. package/dist/portability-check.d.ts +35 -0
  188. package/dist/portability-check.d.ts.map +1 -0
  189. package/dist/portability-check.js +121 -0
  190. package/dist/portability-check.js.map +1 -0
  191. package/dist/portability-lossy.d.ts +19 -0
  192. package/dist/portability-lossy.d.ts.map +1 -0
  193. package/dist/portability-lossy.js +65 -0
  194. package/dist/portability-lossy.js.map +1 -0
  195. package/dist/portability.d.ts +23 -0
  196. package/dist/portability.d.ts.map +1 -0
  197. package/dist/portability.js +23 -0
  198. package/dist/portability.js.map +1 -0
  199. package/dist/portable-builder.d.ts +215 -0
  200. package/dist/portable-builder.d.ts.map +1 -0
  201. package/dist/portable-builder.js +27 -0
  202. package/dist/portable-builder.js.map +1 -0
  203. package/dist/portable-entry.d.ts +16 -0
  204. package/dist/portable-entry.d.ts.map +1 -0
  205. package/dist/portable-entry.js +14 -0
  206. package/dist/portable-entry.js.map +1 -0
  207. package/dist/position-reference-build.d.ts +29 -0
  208. package/dist/position-reference-build.d.ts.map +1 -0
  209. package/dist/position-reference-build.js +115 -0
  210. package/dist/position-reference-build.js.map +1 -0
  211. package/dist/position-reference.d.ts +34 -0
  212. package/dist/position-reference.d.ts.map +1 -0
  213. package/dist/position-reference.js +19 -0
  214. package/dist/position-reference.js.map +1 -0
  215. package/dist/runtime.d.ts +139 -0
  216. package/dist/runtime.d.ts.map +1 -0
  217. package/dist/runtime.js +2 -0
  218. package/dist/runtime.js.map +1 -0
  219. package/dist/scale-color-helpers.d.ts +121 -0
  220. package/dist/scale-color-helpers.d.ts.map +1 -0
  221. package/dist/scale-color-helpers.js +188 -0
  222. package/dist/scale-color-helpers.js.map +1 -0
  223. package/dist/scale-color-hue-grey.d.ts +52 -0
  224. package/dist/scale-color-hue-grey.d.ts.map +1 -0
  225. package/dist/scale-color-hue-grey.js +60 -0
  226. package/dist/scale-color-hue-grey.js.map +1 -0
  227. package/dist/scale-color-stops.d.ts +85 -0
  228. package/dist/scale-color-stops.d.ts.map +1 -0
  229. package/dist/scale-color-stops.js +87 -0
  230. package/dist/scale-color-stops.js.map +1 -0
  231. package/dist/scale-color-viridis.d.ts +52 -0
  232. package/dist/scale-color-viridis.d.ts.map +1 -0
  233. package/dist/scale-color-viridis.js +68 -0
  234. package/dist/scale-color-viridis.js.map +1 -0
  235. package/dist/scale-helpers.d.ts +20 -0
  236. package/dist/scale-helpers.d.ts.map +1 -0
  237. package/dist/scale-helpers.js +20 -0
  238. package/dist/scale-helpers.js.map +1 -0
  239. package/dist/scale-multi-helpers.d.ts +61 -0
  240. package/dist/scale-multi-helpers.d.ts.map +1 -0
  241. package/dist/scale-multi-helpers.js +147 -0
  242. package/dist/scale-multi-helpers.js.map +1 -0
  243. package/dist/scale-position-helpers.d.ts +81 -0
  244. package/dist/scale-position-helpers.d.ts.map +1 -0
  245. package/dist/scale-position-helpers.js +133 -0
  246. package/dist/scale-position-helpers.js.map +1 -0
  247. package/dist/scale-reference-build.d.ts +50 -0
  248. package/dist/scale-reference-build.d.ts.map +1 -0
  249. package/dist/scale-reference-build.js +147 -0
  250. package/dist/scale-reference-build.js.map +1 -0
  251. package/dist/scale-reference-classify-color.d.ts +11 -0
  252. package/dist/scale-reference-classify-color.d.ts.map +1 -0
  253. package/dist/scale-reference-classify-color.js +292 -0
  254. package/dist/scale-reference-classify-color.js.map +1 -0
  255. package/dist/scale-reference-classify-position.d.ts +10 -0
  256. package/dist/scale-reference-classify-position.d.ts.map +1 -0
  257. package/dist/scale-reference-classify-position.js +137 -0
  258. package/dist/scale-reference-classify-position.js.map +1 -0
  259. package/dist/scale-reference-classify-style.d.ts +10 -0
  260. package/dist/scale-reference-classify-style.d.ts.map +1 -0
  261. package/dist/scale-reference-classify-style.js +194 -0
  262. package/dist/scale-reference-classify-style.js.map +1 -0
  263. package/dist/scale-reference-classify-support.d.ts +37 -0
  264. package/dist/scale-reference-classify-support.d.ts.map +1 -0
  265. package/dist/scale-reference-classify-support.js +206 -0
  266. package/dist/scale-reference-classify-support.js.map +1 -0
  267. package/dist/scale-reference.d.ts +80 -0
  268. package/dist/scale-reference.d.ts.map +1 -0
  269. package/dist/scale-reference.js +85 -0
  270. package/dist/scale-reference.js.map +1 -0
  271. package/dist/scale-style-helpers.d.ts +158 -0
  272. package/dist/scale-style-helpers.d.ts.map +1 -0
  273. package/dist/scale-style-helpers.js +197 -0
  274. package/dist/scale-style-helpers.js.map +1 -0
  275. package/dist/schema-catalog.d.ts +62 -0
  276. package/dist/schema-catalog.d.ts.map +1 -0
  277. package/dist/schema-catalog.js +208 -0
  278. package/dist/schema-catalog.js.map +1 -0
  279. package/dist/schema-declarations.d.ts +1585 -0
  280. package/dist/schema-declarations.d.ts.map +1 -0
  281. package/dist/schema-declarations.js +51 -0
  282. package/dist/schema-declarations.js.map +1 -0
  283. package/dist/schema-decls-data.d.ts +58 -0
  284. package/dist/schema-decls-data.d.ts.map +1 -0
  285. package/dist/schema-decls-data.js +151 -0
  286. package/dist/schema-decls-data.js.map +1 -0
  287. package/dist/schema-decls-guides-theme.d.ts +166 -0
  288. package/dist/schema-decls-guides-theme.d.ts.map +1 -0
  289. package/dist/schema-decls-guides-theme.js +251 -0
  290. package/dist/schema-decls-guides-theme.js.map +1 -0
  291. package/dist/schema-decls-layers-col-boxplot.d.ts +118 -0
  292. package/dist/schema-decls-layers-col-boxplot.d.ts.map +1 -0
  293. package/dist/schema-decls-layers-col-boxplot.js +239 -0
  294. package/dist/schema-decls-layers-col-boxplot.js.map +1 -0
  295. package/dist/schema-decls-layers-count-pointrange.d.ts +89 -0
  296. package/dist/schema-decls-layers-count-pointrange.d.ts.map +1 -0
  297. package/dist/schema-decls-layers-count-pointrange.js +190 -0
  298. package/dist/schema-decls-layers-count-pointrange.js.map +1 -0
  299. package/dist/schema-decls-layers-crossbar-jitter.d.ts +129 -0
  300. package/dist/schema-decls-layers-crossbar-jitter.d.ts.map +1 -0
  301. package/dist/schema-decls-layers-crossbar-jitter.js +255 -0
  302. package/dist/schema-decls-layers-crossbar-jitter.js.map +1 -0
  303. package/dist/schema-decls-layers-point-path.d.ts +49 -0
  304. package/dist/schema-decls-layers-point-path.d.ts.map +1 -0
  305. package/dist/schema-decls-layers-point-path.js +156 -0
  306. package/dist/schema-decls-layers-point-path.js.map +1 -0
  307. package/dist/schema-decls-layers-sf-blank.d.ts +89 -0
  308. package/dist/schema-decls-layers-sf-blank.d.ts.map +1 -0
  309. package/dist/schema-decls-layers-sf-blank.js +254 -0
  310. package/dist/schema-decls-layers-sf-blank.js.map +1 -0
  311. package/dist/schema-decls-layers-text-map.d.ts +80 -0
  312. package/dist/schema-decls-layers-text-map.d.ts.map +1 -0
  313. package/dist/schema-decls-layers-text-map.js +151 -0
  314. package/dist/schema-decls-layers-text-map.js.map +1 -0
  315. package/dist/schema-decls-paint.d.ts +39 -0
  316. package/dist/schema-decls-paint.d.ts.map +1 -0
  317. package/dist/schema-decls-paint.js +95 -0
  318. package/dist/schema-decls-paint.js.map +1 -0
  319. package/dist/schema-decls-params-area-abline.d.ts +85 -0
  320. package/dist/schema-decls-params-area-abline.d.ts.map +1 -0
  321. package/dist/schema-decls-params-area-abline.js +259 -0
  322. package/dist/schema-decls-params-area-abline.js.map +1 -0
  323. package/dist/schema-decls-params-col-contour.d.ts +61 -0
  324. package/dist/schema-decls-params-col-contour.d.ts.map +1 -0
  325. package/dist/schema-decls-params-col-contour.js +202 -0
  326. package/dist/schema-decls-params-col-contour.js.map +1 -0
  327. package/dist/schema-decls-params-curve-label.d.ts +64 -0
  328. package/dist/schema-decls-params-curve-label.d.ts.map +1 -0
  329. package/dist/schema-decls-params-curve-label.js +204 -0
  330. package/dist/schema-decls-params-curve-label.js.map +1 -0
  331. package/dist/schema-decls-params-errorbar-position.d.ts +83 -0
  332. package/dist/schema-decls-params-errorbar-position.d.ts.map +1 -0
  333. package/dist/schema-decls-params-errorbar-position.js +264 -0
  334. package/dist/schema-decls-params-errorbar-position.js.map +1 -0
  335. package/dist/schema-decls-params-point-path.d.ts +61 -0
  336. package/dist/schema-decls-params-point-path.d.ts.map +1 -0
  337. package/dist/schema-decls-params-point-path.js +240 -0
  338. package/dist/schema-decls-params-point-path.js.map +1 -0
  339. package/dist/schema-decls-params-violin-summary.d.ts +78 -0
  340. package/dist/schema-decls-params-violin-summary.d.ts.map +1 -0
  341. package/dist/schema-decls-params-violin-summary.js +272 -0
  342. package/dist/schema-decls-params-violin-summary.js.map +1 -0
  343. package/dist/schema-decls-plot.d.ts +80 -0
  344. package/dist/schema-decls-plot.d.ts.map +1 -0
  345. package/dist/schema-decls-plot.js +222 -0
  346. package/dist/schema-decls-plot.js.map +1 -0
  347. package/dist/schema-decls-scales-guides.d.ts +291 -0
  348. package/dist/schema-decls-scales-guides.d.ts.map +1 -0
  349. package/dist/schema-decls-scales-guides.js +189 -0
  350. package/dist/schema-decls-scales-guides.js.map +1 -0
  351. package/dist/schema-decls-scales.d.ts +124 -0
  352. package/dist/schema-decls-scales.d.ts.map +1 -0
  353. package/dist/schema-decls-scales.js +279 -0
  354. package/dist/schema-decls-scales.js.map +1 -0
  355. package/dist/schema-imports.d.ts +1679 -0
  356. package/dist/schema-imports.d.ts.map +1 -0
  357. package/dist/schema-imports.js +104 -0
  358. package/dist/schema-imports.js.map +1 -0
  359. package/dist/schema-name-schemas.d.ts +18 -0
  360. package/dist/schema-name-schemas.d.ts.map +1 -0
  361. package/dist/schema-name-schemas.js +13 -0
  362. package/dist/schema-name-schemas.js.map +1 -0
  363. package/dist/schema-names.d.ts +53 -0
  364. package/dist/schema-names.d.ts.map +1 -0
  365. package/dist/schema-names.js +229 -0
  366. package/dist/schema-names.js.map +1 -0
  367. package/dist/schema-types.d.ts +336 -0
  368. package/dist/schema-types.d.ts.map +1 -0
  369. package/dist/schema-types.js +10 -0
  370. package/dist/schema-types.js.map +1 -0
  371. package/dist/schema.d.ts +38 -0
  372. package/dist/schema.d.ts.map +1 -0
  373. package/dist/schema.js +34 -0
  374. package/dist/schema.js.map +1 -0
  375. package/dist/stat-reference-build.d.ts +24 -0
  376. package/dist/stat-reference-build.d.ts.map +1 -0
  377. package/dist/stat-reference-build.js +86 -0
  378. package/dist/stat-reference-build.js.map +1 -0
  379. package/dist/stat-reference.d.ts +33 -0
  380. package/dist/stat-reference.d.ts.map +1 -0
  381. package/dist/stat-reference.js +19 -0
  382. package/dist/stat-reference.js.map +1 -0
  383. package/dist/structural-gate.d.ts +15 -0
  384. package/dist/structural-gate.d.ts.map +1 -0
  385. package/dist/structural-gate.js +34 -0
  386. package/dist/structural-gate.js.map +1 -0
  387. package/dist/temporal-column.d.ts +33 -0
  388. package/dist/temporal-column.d.ts.map +1 -0
  389. package/dist/temporal-column.js +247 -0
  390. package/dist/temporal-column.js.map +1 -0
  391. package/dist/temporal-guides.d.ts +11 -0
  392. package/dist/temporal-guides.d.ts.map +1 -0
  393. package/dist/temporal-guides.js +11 -0
  394. package/dist/temporal-guides.js.map +1 -0
  395. package/dist/temporal-interval-schema.d.ts +9 -0
  396. package/dist/temporal-interval-schema.d.ts.map +1 -0
  397. package/dist/temporal-interval-schema.js +25 -0
  398. package/dist/temporal-interval-schema.js.map +1 -0
  399. package/dist/temporal-interval.d.ts +29 -0
  400. package/dist/temporal-interval.d.ts.map +1 -0
  401. package/dist/temporal-interval.js +122 -0
  402. package/dist/temporal-interval.js.map +1 -0
  403. package/dist/temporal-parse-core.d.ts +96 -0
  404. package/dist/temporal-parse-core.d.ts.map +1 -0
  405. package/dist/temporal-parse-core.js +235 -0
  406. package/dist/temporal-parse-core.js.map +1 -0
  407. package/dist/temporal-parse-format.d.ts +13 -0
  408. package/dist/temporal-parse-format.d.ts.map +1 -0
  409. package/dist/temporal-parse-format.js +180 -0
  410. package/dist/temporal-parse-format.js.map +1 -0
  411. package/dist/temporal-parse-schema.d.ts +11 -0
  412. package/dist/temporal-parse-schema.d.ts.map +1 -0
  413. package/dist/temporal-parse-schema.js +23 -0
  414. package/dist/temporal-parse-schema.js.map +1 -0
  415. package/dist/temporal-parse.d.ts +18 -0
  416. package/dist/temporal-parse.d.ts.map +1 -0
  417. package/dist/temporal-parse.js +183 -0
  418. package/dist/temporal-parse.js.map +1 -0
  419. package/dist/temporal-polyfill.d.ts +3 -0
  420. package/dist/temporal-polyfill.d.ts.map +1 -0
  421. package/dist/temporal-polyfill.js +25 -0
  422. package/dist/temporal-polyfill.js.map +1 -0
  423. package/dist/temporal-ticks.d.ts +20 -0
  424. package/dist/temporal-ticks.d.ts.map +1 -0
  425. package/dist/temporal-ticks.js +246 -0
  426. package/dist/temporal-ticks.js.map +1 -0
  427. package/dist/temporal.d.ts +109 -0
  428. package/dist/temporal.d.ts.map +1 -0
  429. package/dist/temporal.js +73 -0
  430. package/dist/temporal.js.map +1 -0
  431. package/dist/validate-data-checks-color-temporal.d.ts +58 -0
  432. package/dist/validate-data-checks-color-temporal.d.ts.map +1 -0
  433. package/dist/validate-data-checks-color-temporal.js +168 -0
  434. package/dist/validate-data-checks-color-temporal.js.map +1 -0
  435. package/dist/validate-data-checks-color.d.ts +28 -0
  436. package/dist/validate-data-checks-color.d.ts.map +1 -0
  437. package/dist/validate-data-checks-color.js +296 -0
  438. package/dist/validate-data-checks-color.js.map +1 -0
  439. package/dist/validate-data-checks-layer.d.ts +37 -0
  440. package/dist/validate-data-checks-layer.d.ts.map +1 -0
  441. package/dist/validate-data-checks-layer.js +343 -0
  442. package/dist/validate-data-checks-layer.js.map +1 -0
  443. package/dist/validate-data-checks-position.d.ts +45 -0
  444. package/dist/validate-data-checks-position.d.ts.map +1 -0
  445. package/dist/validate-data-checks-position.js +204 -0
  446. package/dist/validate-data-checks-position.js.map +1 -0
  447. package/dist/validate-data-checks-style-finite.d.ts +24 -0
  448. package/dist/validate-data-checks-style-finite.d.ts.map +1 -0
  449. package/dist/validate-data-checks-style-finite.js +40 -0
  450. package/dist/validate-data-checks-style-finite.js.map +1 -0
  451. package/dist/validate-data-checks-style-numeric.d.ts +26 -0
  452. package/dist/validate-data-checks-style-numeric.d.ts.map +1 -0
  453. package/dist/validate-data-checks-style-numeric.js +327 -0
  454. package/dist/validate-data-checks-style-numeric.js.map +1 -0
  455. package/dist/validate-data-checks-style.d.ts +14 -0
  456. package/dist/validate-data-checks-style.d.ts.map +1 -0
  457. package/dist/validate-data-checks-style.js +14 -0
  458. package/dist/validate-data-checks-style.js.map +1 -0
  459. package/dist/validate-data-checks-temporal.d.ts +57 -0
  460. package/dist/validate-data-checks-temporal.d.ts.map +1 -0
  461. package/dist/validate-data-checks-temporal.js +83 -0
  462. package/dist/validate-data-checks-temporal.js.map +1 -0
  463. package/dist/validate-data-checks.d.ts +31 -0
  464. package/dist/validate-data-checks.d.ts.map +1 -0
  465. package/dist/validate-data-checks.js +110 -0
  466. package/dist/validate-data-checks.js.map +1 -0
  467. package/dist/validate-data-evidence.d.ts +69 -0
  468. package/dist/validate-data-evidence.d.ts.map +1 -0
  469. package/dist/validate-data-evidence.js +329 -0
  470. package/dist/validate-data-evidence.js.map +1 -0
  471. package/dist/validate-data.d.ts +73 -0
  472. package/dist/validate-data.d.ts.map +1 -0
  473. package/dist/validate-data.js +30 -0
  474. package/dist/validate-data.js.map +1 -0
  475. package/dist/validate-map-errors.d.ts +32 -0
  476. package/dist/validate-map-errors.d.ts.map +1 -0
  477. package/dist/validate-map-errors.js +76 -0
  478. package/dist/validate-map-errors.js.map +1 -0
  479. package/dist/validate-map-forms.d.ts +43 -0
  480. package/dist/validate-map-forms.d.ts.map +1 -0
  481. package/dist/validate-map-forms.js +125 -0
  482. package/dist/validate-map-forms.js.map +1 -0
  483. package/dist/validate-map-path-keywords.d.ts +11 -0
  484. package/dist/validate-map-path-keywords.d.ts.map +1 -0
  485. package/dist/validate-map-path-keywords.js +95 -0
  486. package/dist/validate-map-path-keywords.js.map +1 -0
  487. package/dist/validate-map-path-unions.d.ts +27 -0
  488. package/dist/validate-map-path-unions.d.ts.map +1 -0
  489. package/dist/validate-map-path-unions.js +200 -0
  490. package/dist/validate-map-path-unions.js.map +1 -0
  491. package/dist/validate-schema-shape.d.ts +69 -0
  492. package/dist/validate-schema-shape.d.ts.map +1 -0
  493. package/dist/validate-schema-shape.js +156 -0
  494. package/dist/validate-schema-shape.js.map +1 -0
  495. package/dist/validate-schema-walk.d.ts +34 -0
  496. package/dist/validate-schema-walk.d.ts.map +1 -0
  497. package/dist/validate-schema-walk.js +216 -0
  498. package/dist/validate-schema-walk.js.map +1 -0
  499. package/dist/validate-structure-facet.d.ts +8 -0
  500. package/dist/validate-structure-facet.d.ts.map +1 -0
  501. package/dist/validate-structure-facet.js +67 -0
  502. package/dist/validate-structure-facet.js.map +1 -0
  503. package/dist/validate-structure-layer-computed-y.d.ts +14 -0
  504. package/dist/validate-structure-layer-computed-y.d.ts.map +1 -0
  505. package/dist/validate-structure-layer-computed-y.js +70 -0
  506. package/dist/validate-structure-layer-computed-y.js.map +1 -0
  507. package/dist/validate-structure-layer-ribbon.d.ts +8 -0
  508. package/dist/validate-structure-layer-ribbon.d.ts.map +1 -0
  509. package/dist/validate-structure-layer-ribbon.js +36 -0
  510. package/dist/validate-structure-layer-ribbon.js.map +1 -0
  511. package/dist/validate-structure-layer-rule.d.ts +14 -0
  512. package/dist/validate-structure-layer-rule.d.ts.map +1 -0
  513. package/dist/validate-structure-layer-rule.js +90 -0
  514. package/dist/validate-structure-layer-rule.js.map +1 -0
  515. package/dist/validate-structure-layer-shared.d.ts +12 -0
  516. package/dist/validate-structure-layer-shared.d.ts.map +1 -0
  517. package/dist/validate-structure-layer-shared.js +17 -0
  518. package/dist/validate-structure-layer-shared.js.map +1 -0
  519. package/dist/validate-structure-layers.d.ts +12 -0
  520. package/dist/validate-structure-layers.d.ts.map +1 -0
  521. package/dist/validate-structure-layers.js +292 -0
  522. package/dist/validate-structure-layers.js.map +1 -0
  523. package/dist/validate-structure-paint.d.ts +12 -0
  524. package/dist/validate-structure-paint.d.ts.map +1 -0
  525. package/dist/validate-structure-paint.js +87 -0
  526. package/dist/validate-structure-paint.js.map +1 -0
  527. package/dist/validate-structure-scales.d.ts +10 -0
  528. package/dist/validate-structure-scales.d.ts.map +1 -0
  529. package/dist/validate-structure-scales.js +242 -0
  530. package/dist/validate-structure-scales.js.map +1 -0
  531. package/dist/validate-structure-style-bins.d.ts +17 -0
  532. package/dist/validate-structure-style-bins.d.ts.map +1 -0
  533. package/dist/validate-structure-style-bins.js +150 -0
  534. package/dist/validate-structure-style-bins.js.map +1 -0
  535. package/dist/validate-structure.d.ts +16 -0
  536. package/dist/validate-structure.d.ts.map +1 -0
  537. package/dist/validate-structure.js +16 -0
  538. package/dist/validate-structure.js.map +1 -0
  539. package/dist/validate.d.ts +24 -0
  540. package/dist/validate.d.ts.map +1 -0
  541. package/dist/validate.js +178 -0
  542. package/dist/validate.js.map +1 -0
  543. package/package.json +59 -0
  544. package/schema/v0.json +9618 -0
  545. package/src/artifact.ts +81 -0
  546. package/src/builder-core.ts +276 -0
  547. package/src/builder-data.ts +156 -0
  548. package/src/builder-geoms.ts +290 -0
  549. package/src/builder-options.ts +428 -0
  550. package/src/builder-scales.ts +443 -0
  551. package/src/builder.ts +125 -0
  552. package/src/capabilities-data.ts +336 -0
  553. package/src/capabilities-helpers.ts +54 -0
  554. package/src/capabilities.ts +159 -0
  555. package/src/coord-helpers.ts +177 -0
  556. package/src/coord-reference-build.ts +283 -0
  557. package/src/coord-reference.ts +75 -0
  558. package/src/error-catalog.ts +253 -0
  559. package/src/error-prose-shared.ts +106 -0
  560. package/src/errors.ts +87 -0
  561. package/src/generated/coord-reference-data.ts +235 -0
  562. package/src/generated/geom-param-keys.ts +222 -0
  563. package/src/generated/geom-reference-data.ts +3024 -0
  564. package/src/generated/guide-reference-data.ts +284 -0
  565. package/src/generated/plot-spec-validator.ts +7335 -0
  566. package/src/generated/position-reference-data.ts +191 -0
  567. package/src/generated/scale-reference-data.ts +10665 -0
  568. package/src/generated/stat-reference-data.ts +339 -0
  569. package/src/geom-params-build.ts +92 -0
  570. package/src/geom-params.ts +14 -0
  571. package/src/geom-reference-build.ts +292 -0
  572. package/src/geom-reference.ts +127 -0
  573. package/src/guide-helpers.ts +44 -0
  574. package/src/guide-reference-build.ts +249 -0
  575. package/src/guide-reference.ts +76 -0
  576. package/src/hue-grey-palettes.ts +82 -0
  577. package/src/index.ts +400 -0
  578. package/src/lint-catalog.ts +57 -0
  579. package/src/lint-layer-rules.ts +175 -0
  580. package/src/lint-scale-rules.ts +285 -0
  581. package/src/lint.ts +126 -0
  582. package/src/normalize-coord.ts +126 -0
  583. package/src/normalize-input-layers-marks.ts +276 -0
  584. package/src/normalize-input-layers-special.ts +252 -0
  585. package/src/normalize-input.ts +154 -0
  586. package/src/normalize-paint.ts +98 -0
  587. package/src/normalize-scales.ts +108 -0
  588. package/src/normalize.ts +403 -0
  589. package/src/paint-helpers.ts +98 -0
  590. package/src/pipeline-error-catalog.ts +278 -0
  591. package/src/portability-check.ts +155 -0
  592. package/src/portability-lossy.ts +81 -0
  593. package/src/portability.ts +31 -0
  594. package/src/portable-builder.ts +35 -0
  595. package/src/portable-entry.ts +37 -0
  596. package/src/position-reference-build.ts +164 -0
  597. package/src/position-reference.ts +41 -0
  598. package/src/runtime.ts +198 -0
  599. package/src/scale-color-helpers.ts +263 -0
  600. package/src/scale-color-hue-grey.ts +95 -0
  601. package/src/scale-color-stops.ts +177 -0
  602. package/src/scale-color-viridis.ts +99 -0
  603. package/src/scale-helpers.ts +264 -0
  604. package/src/scale-multi-helpers.ts +220 -0
  605. package/src/scale-position-helpers.ts +231 -0
  606. package/src/scale-reference-build.ts +222 -0
  607. package/src/scale-reference-classify-color.ts +334 -0
  608. package/src/scale-reference-classify-position.ts +164 -0
  609. package/src/scale-reference-classify-style.ts +229 -0
  610. package/src/scale-reference-classify-support.ts +298 -0
  611. package/src/scale-reference.ts +165 -0
  612. package/src/scale-style-helpers.ts +316 -0
  613. package/src/schema-catalog.ts +222 -0
  614. package/src/schema-declarations.ts +51 -0
  615. package/src/schema-decls-data.ts +272 -0
  616. package/src/schema-decls-guides-theme.ts +395 -0
  617. package/src/schema-decls-layers-col-boxplot.ts +410 -0
  618. package/src/schema-decls-layers-count-pointrange.ts +321 -0
  619. package/src/schema-decls-layers-crossbar-jitter.ts +443 -0
  620. package/src/schema-decls-layers-point-path.ts +246 -0
  621. package/src/schema-decls-layers-sf-blank.ts +408 -0
  622. package/src/schema-decls-layers-text-map.ts +259 -0
  623. package/src/schema-decls-paint.ts +124 -0
  624. package/src/schema-decls-params-area-abline.ts +440 -0
  625. package/src/schema-decls-params-col-contour.ts +333 -0
  626. package/src/schema-decls-params-curve-label.ts +343 -0
  627. package/src/schema-decls-params-errorbar-position.ts +446 -0
  628. package/src/schema-decls-params-point-path.ts +394 -0
  629. package/src/schema-decls-params-violin-summary.ts +447 -0
  630. package/src/schema-decls-plot.ts +385 -0
  631. package/src/schema-decls-scales-guides.ts +233 -0
  632. package/src/schema-decls-scales.ts +432 -0
  633. package/src/schema-imports.ts +116 -0
  634. package/src/schema-name-schemas.ts +37 -0
  635. package/src/schema-names.ts +243 -0
  636. package/src/schema-types.ts +400 -0
  637. package/src/schema.ts +287 -0
  638. package/src/stat-reference-build.ts +145 -0
  639. package/src/stat-reference.ts +38 -0
  640. package/src/structural-gate.ts +42 -0
  641. package/src/temporal-column.ts +323 -0
  642. package/src/temporal-guides.ts +32 -0
  643. package/src/temporal-interval-schema.ts +40 -0
  644. package/src/temporal-interval.ts +151 -0
  645. package/src/temporal-parse-core.ts +331 -0
  646. package/src/temporal-parse-format.ts +222 -0
  647. package/src/temporal-parse-schema.ts +38 -0
  648. package/src/temporal-parse.ts +259 -0
  649. package/src/temporal-polyfill.ts +27 -0
  650. package/src/temporal-ticks.ts +312 -0
  651. package/src/temporal.ts +112 -0
  652. package/src/validate-data-checks-color-temporal.ts +261 -0
  653. package/src/validate-data-checks-color.ts +395 -0
  654. package/src/validate-data-checks-layer.ts +492 -0
  655. package/src/validate-data-checks-position.ts +275 -0
  656. package/src/validate-data-checks-style-finite.ts +55 -0
  657. package/src/validate-data-checks-style-numeric.ts +455 -0
  658. package/src/validate-data-checks-style.ts +13 -0
  659. package/src/validate-data-checks-temporal.ts +129 -0
  660. package/src/validate-data-checks.ts +157 -0
  661. package/src/validate-data-evidence.ts +419 -0
  662. package/src/validate-data.ts +114 -0
  663. package/src/validate-map-errors.ts +126 -0
  664. package/src/validate-map-forms.ts +148 -0
  665. package/src/validate-map-path-keywords.ts +129 -0
  666. package/src/validate-map-path-unions.ts +281 -0
  667. package/src/validate-schema-shape.ts +232 -0
  668. package/src/validate-schema-walk.ts +219 -0
  669. package/src/validate-structure-facet.ts +76 -0
  670. package/src/validate-structure-layer-computed-y.ts +94 -0
  671. package/src/validate-structure-layer-ribbon.ts +61 -0
  672. package/src/validate-structure-layer-rule.ts +98 -0
  673. package/src/validate-structure-layer-shared.ts +29 -0
  674. package/src/validate-structure-layers.ts +395 -0
  675. package/src/validate-structure-paint.ts +101 -0
  676. package/src/validate-structure-scales.ts +278 -0
  677. package/src/validate-structure-style-bins.ts +167 -0
  678. package/src/validate-structure.ts +16 -0
  679. package/src/validate.ts +212 -0
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Within-mark paint authoring helpers (#591).
3
+ * Closed portable gradients + bounded glow — not theme decoration.
4
+ */
5
+ import type {
6
+ ColorStop,
7
+ GlowSpec,
8
+ LinearGradientPaint,
9
+ PaintSpace,
10
+ RadialGradientPaint,
11
+ } from "./schema.js";
12
+
13
+ export type ColorStopInput = ColorStop;
14
+
15
+ export type LinearPaintOptions = {
16
+ x1: number;
17
+ y1: number;
18
+ x2: number;
19
+ y2: number;
20
+ /** Gradient coordinate space. Default "mark" (object bounding box). */
21
+ space?: PaintSpace;
22
+ stops: ColorStopInput[];
23
+ /** Required solid #rgb/#rrggbb fallback for a11y / reduced-effects paths. */
24
+ fallback: string;
25
+ };
26
+
27
+ export type RadialPaintOptions = {
28
+ cx: number;
29
+ cy: number;
30
+ r: number;
31
+ /** Gradient coordinate space. Default "mark" (object bounding box). */
32
+ space?: PaintSpace;
33
+ stops: ColorStopInput[];
34
+ /** Required solid #rgb/#rrggbb fallback for a11y / reduced-effects paths. */
35
+ fallback: string;
36
+ };
37
+
38
+ export type GlowOptions = {
39
+ color: string;
40
+ /** Blur radius in CSS px (exclusive minimum 0, maximum 32). */
41
+ radius: number;
42
+ /** Glow opacity 0–1. */
43
+ opacity: number;
44
+ };
45
+
46
+ function linear(options: LinearPaintOptions): LinearGradientPaint {
47
+ return {
48
+ type: "linear",
49
+ x1: options.x1,
50
+ y1: options.y1,
51
+ x2: options.x2,
52
+ y2: options.y2,
53
+ space: options.space ?? "mark",
54
+ stops: options.stops.map((stop) => ({ ...stop })),
55
+ fallback: options.fallback,
56
+ };
57
+ }
58
+
59
+ function radial(options: RadialPaintOptions): RadialGradientPaint {
60
+ return {
61
+ type: "radial",
62
+ cx: options.cx,
63
+ cy: options.cy,
64
+ r: options.r,
65
+ space: options.space ?? "mark",
66
+ stops: options.stops.map((stop) => ({ ...stop })),
67
+ fallback: options.fallback,
68
+ };
69
+ }
70
+
71
+ /** Build a deterministic linear gradient paint for fillPaint / strokePaint. */
72
+ export function fillPaintLinear(options: LinearPaintOptions): LinearGradientPaint {
73
+ return linear(options);
74
+ }
75
+
76
+ /** Build a deterministic radial gradient paint for fillPaint. */
77
+ export function fillPaintRadial(options: RadialPaintOptions): RadialGradientPaint {
78
+ return radial(options);
79
+ }
80
+
81
+ /** Build a deterministic linear gradient paint for strokePaint. */
82
+ export function strokePaintLinear(options: LinearPaintOptions): LinearGradientPaint {
83
+ return linear(options);
84
+ }
85
+
86
+ /** Build a deterministic radial gradient paint for strokePaint. */
87
+ export function strokePaintRadial(options: RadialPaintOptions): RadialGradientPaint {
88
+ return radial(options);
89
+ }
90
+
91
+ /** Build a bounded glow treatment (color, radius ≤ 32px, opacity). */
92
+ export function glow(options: GlowOptions): GlowSpec {
93
+ return {
94
+ color: options.color,
95
+ radius: options.radius,
96
+ opacity: options.opacity,
97
+ };
98
+ }
@@ -0,0 +1,278 @@
1
+ /**
2
+ * Pipeline error catalog — structured errors thrown as
3
+ * `PipelineError { code, path, message }`. Pure data owned by @ggts-sh/spec
4
+ * (#987) so docs and agents have one prose source. Re-exported from
5
+ * @ggts-sh/core diagnostics for existing imports.
6
+ *
7
+ * Dual-channel codes (also emitable by validate) pull prose from
8
+ * error-prose-shared.ts — do not inline summary/fix for those keys.
9
+ */
10
+
11
+ import { DUAL_ERROR_PROSE } from "./error-prose-shared.js";
12
+
13
+ /** One render-time error catalog entry. */
14
+ export interface PipelineErrorCatalogEntry {
15
+ summary: string;
16
+ fix: string;
17
+ }
18
+
19
+ /** Structured errors thrown as `PipelineError { code, path, message }`. */
20
+ export const PIPELINE_ERROR_CATALOG = {
21
+ "guide-aesthetic-incompatible": DUAL_ERROR_PROSE["guide-aesthetic-incompatible"],
22
+ "guide-layout-overflow": {
23
+ summary: "A guide configured with collision: error cannot fit its authored label.",
24
+ fix: 'Use collision: "ellipsis" for long labels; increase the chart size, reduce categories, or suppress an oversized guide.',
25
+ },
26
+ "no-data": {
27
+ summary: "A layer has neither plot-level data nor its own layer.data.",
28
+ fix: "Set spec.data and/or layer.data ({values}, {columns}, or {name}), or pass named data via RunOptions.data.",
29
+ },
30
+ "dataset-collision": {
31
+ summary: "A dataset name is defined in both spec.datasets and RunOptions.data.",
32
+ fix: "Rename one of them, or pass allowOverride: true to let the runtime data win.",
33
+ },
34
+ "unknown-dataset": {
35
+ summary: 'A {"name": ...} data ref names a dataset that is not defined anywhere.',
36
+ fix: "Define it in spec.datasets or RunOptions.data (the message lists the available names).",
37
+ },
38
+ "unknown-field": DUAL_ERROR_PROSE["unknown-field"],
39
+ "all-null-column": DUAL_ERROR_PROSE["all-null-column"],
40
+ "missing-channel": {
41
+ summary: "A geom is missing a required aesthetic channel at render time.",
42
+ fix: "Map the named channel in the layer's aes or the plot-level aes.",
43
+ },
44
+ "unknown-stat-column": DUAL_ERROR_PROSE["unknown-stat-column"],
45
+ "channel-type-mismatch": DUAL_ERROR_PROSE["channel-type-mismatch"],
46
+ "computed-y-mapped": DUAL_ERROR_PROSE["computed-y-mapped"],
47
+ "bin-center-and-boundary": DUAL_ERROR_PROSE["bin-center-and-boundary"],
48
+ "rule-form-ambiguous": DUAL_ERROR_PROSE["rule-form-ambiguous"],
49
+ "rule-form-missing": DUAL_ERROR_PROSE["rule-form-missing"],
50
+ "rule-both-axes": DUAL_ERROR_PROSE["rule-both-axes"],
51
+ "ribbon-orientation-ambiguous": DUAL_ERROR_PROSE["ribbon-orientation-ambiguous"],
52
+ "ribbon-inverted-bounds": {
53
+ summary: "A ribbon layer has one or more rows where the lower bound exceeds the upper bound.",
54
+ fix: "Swap or correct ymin/ymax (or xmin/xmax) so lower ≤ upper on every finite row.",
55
+ },
56
+ "facet-form-ambiguous": DUAL_ERROR_PROSE["facet-form-ambiguous"],
57
+ "facet-form-missing": DUAL_ERROR_PROSE["facet-form-missing"],
58
+ "invalid-scale-domain": {
59
+ summary: "An explicit scale domain is malformed for its scale type.",
60
+ fix: "Provide a two-element [min, max] for continuous scales (values of the field's type).",
61
+ },
62
+ "invalid-scale-breaks": {
63
+ summary: "One or more explicit scale breaks do not match the scale's parser.",
64
+ fix: "Use numeric breaks for numeric scales or values matching the temporal parse option.",
65
+ },
66
+ "invalid-temporal-labels": {
67
+ summary: "A temporal dateLabels string uses an unsupported or incomplete token.",
68
+ fix: "Use only the documented closed dateLabels token grammar.",
69
+ },
70
+ "invalid-temporal-locale": {
71
+ summary: "A temporal scale locale is not a valid supported BCP 47 locale.",
72
+ fix: "Use a canonical BCP 47 locale such as en-US, en-GB, fr-FR, or ja-JP.",
73
+ },
74
+ "temporal-parse-failed": {
75
+ summary: "An explicit temporal parser rejected one or more source values.",
76
+ fix: "Correct the rejected values, choose the matching parser, or explicitly opt into censoring.",
77
+ },
78
+ "temporal-break-limit": {
79
+ summary: "An explicit temporal interval would generate more bounded ticks than allowed.",
80
+ fix: "Choose a coarser calendar interval.",
81
+ },
82
+ "temporal-break-progression": {
83
+ summary: "Calendar interval progression failed to advance monotonically.",
84
+ fix: "Choose another timezone, disambiguation policy, or interval and report the failing case.",
85
+ },
86
+ "invalid-scale-transform": {
87
+ summary: "The scale transform registry was asked for an unknown transform key.",
88
+ fix: "Use a supported transform (identity, log10, sqrt). This indicates malformed runtime input.",
89
+ },
90
+ "scale-transform-domain": {
91
+ summary:
92
+ "An explicit scale domain falls outside the transform's valid range (log10 <= 0, sqrt < 0).",
93
+ fix: "Restrict the domain to the transform's valid range, or use the identity transform.",
94
+ },
95
+ "scale-type-transform-conflict": DUAL_ERROR_PROSE["scale-type-transform-conflict"],
96
+ "scale-zero-invalid-for-transform": {
97
+ summary:
98
+ "zero: true was requested under a transform with no valid image for semantic zero (log10).",
99
+ fix: "Remove zero: true; log10 positions use the transformed-space origin (semantic 1), never log10(0).",
100
+ },
101
+ "coord-transform-domain": {
102
+ summary:
103
+ "A post-stat coordinate transform cannot project its trained or explicit viewport domain.",
104
+ fix: "Choose coordinate limits inside the transform domain, or use the identity coordinate transform.",
105
+ },
106
+ "coord-transform-temporal": {
107
+ summary: "A non-identity coordinate transform was requested for a temporal axis.",
108
+ fix: "Keep temporal coordinates on identity; use identity coordinate limits/reverse for a viewport.",
109
+ },
110
+ "coord-transform-continuous": {
111
+ summary:
112
+ "A quantitative coordinate transform or numeric limits were requested for a band axis.",
113
+ fix: "Use identity coordinates for categories, or configure a continuous quantitative scale.",
114
+ },
115
+ "coord-fixed-free-scales": DUAL_ERROR_PROSE["coord-fixed-free-scales"],
116
+ "coord-fixed-invalid-aspect": {
117
+ summary:
118
+ "A fixed-aspect target or fitted data rectangle is non-finite or non-positive after chrome is allocated.",
119
+ fix: "Use a moderate finite ratio and non-degenerate positional domains, or enlarge the plot allocation.",
120
+ },
121
+ "binned-scale-requires-continuous": {
122
+ summary: 'A type: "binned" scale is bound to a discrete or temporal field.',
123
+ fix: 'Map a quantitative field, or use type: "band"/"time" instead of "binned".',
124
+ },
125
+ "binned-scale-break-limit": {
126
+ summary: "A binned scale's automatic or explicit breaks would exceed MAX_BINNED_BREAKS (64).",
127
+ fix: "Supply fewer explicit breaks, or widen them so automatic binning stays under the limit.",
128
+ },
129
+ "palette-exhausted": {
130
+ summary:
131
+ 'A discrete color scale with onExhaust: "error" ran out of palette entries (the default "cycle" only warns).',
132
+ fix: "Provide a larger range, set an explicit domain, or accept cycling by removing onExhaust.",
133
+ },
134
+ "color-temporal-parse": {
135
+ summary: "A temporal color/fill scale could not parse the complete mapped column.",
136
+ fix: "Set the exact parse order, correct the rejected values, or explicitly choose parseFailure: censor.",
137
+ },
138
+ "color-temporal-kind": {
139
+ summary:
140
+ "A temporal color/fill scale requested date or datetime precision that the data does not have.",
141
+ fix: "Use the matching date/datetime helper or correct the source precision.",
142
+ },
143
+ "color-manual-domain-range": DUAL_ERROR_PROSE["color-manual-domain-range"],
144
+ "color-binned-breaks": {
145
+ summary: "Binned color/fill boundaries are invalid, unparseable, duplicated, or unordered.",
146
+ fix: "Provide 2–65 strictly increasing boundaries valid for the parser and transform.",
147
+ },
148
+ "color-binned-empty": {
149
+ summary: "A binned color/fill scale has no values inside its parser/transform domain.",
150
+ fix: "Correct the mapped values, parser, or transform, or provide a valid explicit domain.",
151
+ },
152
+ "color-binned-domain": {
153
+ summary: "A binned color/fill domain is degenerate or invalid for its transform.",
154
+ fix: "Provide two distinct domain endpoints valid for identity, log10, or sqrt.",
155
+ },
156
+ "color-domain-invalid": {
157
+ summary: "A sequential color/fill domain does not contain exactly two parseable values.",
158
+ fix: "Provide a two-value semantic domain matching the mapped field and parser.",
159
+ },
160
+ "color-transform-empty": {
161
+ summary: "Every mapped color/fill value is invalid for the requested transform.",
162
+ fix: "Correct the mapped data or choose a transform whose domain contains the values.",
163
+ },
164
+ "color-domain-transform": {
165
+ summary: "A sequential color/fill domain is invalid for its requested transform.",
166
+ fix: "Use positive endpoints for log10, non-negative endpoints for sqrt, or identity.",
167
+ },
168
+ "unsupported-aesthetic-scale": {
169
+ summary: "A finite shape/linetype aesthetic was configured as a continuous scale.",
170
+ fix: "Use a binned scale for quantitative values or an ordinal scale for categories.",
171
+ },
172
+ "unsupported-geom-aesthetic": DUAL_ERROR_PROSE["unsupported-geom-aesthetic"],
173
+ "unsupported-annotation-style": {
174
+ summary:
175
+ "A fixed-intercept annotation rule maps a style to a field or after-stat column, but it has no data rows to map.",
176
+ fix: "Use a constant style value (optionally { value, scale: true }) on the annotation rule.",
177
+ },
178
+ "tile-nonpositive-size": {
179
+ summary: "A tile layer has a non-positive or non-finite width/height.",
180
+ fix: "Map a positive width/height or set params.width / params.height to a positive number.",
181
+ },
182
+ "raster-duplicate-cells": {
183
+ summary: "A raster layer has duplicate (x, y) coordinates.",
184
+ fix: 'Aggregate to one value per cell, or use geom "tile" for overlapping cells.',
185
+ },
186
+ "unsupported-param": {
187
+ summary: "A layer param value is not supported by this runtime.",
188
+ fix: "Use a documented supported value for the param (see the error message).",
189
+ },
190
+ "invalid-aesthetic-constant": {
191
+ summary: "A literal style constant is outside the aesthetic's supported output domain.",
192
+ fix: "Use a positive size/linewidth, alpha in [0,1], or a documented shape/linetype name.",
193
+ },
194
+ "style-temporal-parse": {
195
+ summary: "A temporal numeric style scale could not parse the complete mapped column.",
196
+ fix: "Set the exact parser, correct the rejected values, or explicitly choose censoring.",
197
+ },
198
+ "style-temporal-kind": {
199
+ summary: "A temporal numeric style scale requested the wrong date/datetime precision.",
200
+ fix: "Use the matching date/datetime helper or correct the source precision.",
201
+ },
202
+ "style-manual-domain-range": {
203
+ summary: "A manual style scale has different domain and range lengths.",
204
+ fix: "Provide exactly one output style for every domain value.",
205
+ },
206
+ "style-palette-exhausted": {
207
+ summary: "A finite style scale needs more distinguishable outputs than its range provides.",
208
+ fix: "Provide a larger range, reduce categories/bins, or deliberately opt into cycling.",
209
+ },
210
+ "style-domain-empty": {
211
+ summary: "No finite values can train the requested numeric or binned style scale.",
212
+ fix: "Correct the mapped values or provide a valid explicit domain.",
213
+ },
214
+ "style-domain-invalid": {
215
+ summary: "An explicit style domain is malformed or contradicts its binned boundaries.",
216
+ fix: "Provide two finite semantic endpoints matching the first and last boundaries.",
217
+ },
218
+ "style-range-invalid": {
219
+ summary: "A numeric sequential/binned style range has fewer than two endpoints.",
220
+ fix: "Provide at least two valid output values in the aesthetic's supported bounds.",
221
+ },
222
+ "style-binned-breaks": {
223
+ summary: "Binned style boundaries are missing, non-finite, duplicated, or unordered.",
224
+ fix: "Provide 2–65 strictly increasing numeric boundaries.",
225
+ },
226
+ "stat-channel-unsupported": {
227
+ summary: "A { stat } style mapping names an output the selected stat does not publish.",
228
+ fix: "Use a generated output listed for that stat or map the original field instead.",
229
+ },
230
+ "manual-fun-required": DUAL_ERROR_PROSE["manual-fun-required"],
231
+ "manual-fun-unknown": {
232
+ summary:
233
+ "A layer uses stat manual with an unregistered params.fun (defense for unvalidated specs).",
234
+ fix: "Use a registered name: first, last, mean, median, min, max, sum.",
235
+ },
236
+ "unknown-theme": {
237
+ summary: "spec.theme names a theme that is not registered.",
238
+ fix: "Use a registered name (default, light, dark, minimal) or a theme object.",
239
+ },
240
+ "renderer-failure": {
241
+ summary: "The SVG renderer threw while drawing a scene (never blank output — failure policy).",
242
+ fix: "This is a ggts bug; the message carries the underlying error. Please report it.",
243
+ },
244
+ "max-marks-exceeded": {
245
+ summary: "renderToSVGString refused to render more marks than its maxMarks safety limit.",
246
+ fix: "Raise options.maxMarks deliberately, reduce the data, or render interactively (canvas).",
247
+ },
248
+ "sf-geometry-missing": {
249
+ summary: "geom_sf data is missing the geometry column.",
250
+ fix: 'Provide a column of GeoJSON Geometry JSON strings (default field "geometry", or params.geometry).',
251
+ },
252
+ "sf-geometry-invalid": {
253
+ summary: "A geom_sf geometry cell could not be parsed as drawable GeoJSON Geometry.",
254
+ fix: "Use valid GeoJSON Geometry JSON strings with finite coordinates.",
255
+ },
256
+ "sf-geometry-unsupported": {
257
+ summary: "geom_sf received a GeoJSON type outside the v1 point/line/polygon families.",
258
+ fix: "Use Point/MultiPoint, LineString/MultiLineString, Polygon/MultiPolygon, or GeometryCollection of those families (no CRS).",
259
+ },
260
+ "sf-geometry-mixed": {
261
+ summary: "One geom_sf layer mixes geometry families (point vs line vs polygon).",
262
+ fix: "Split mixed types into separate geom_sf layers (v1 is single-family per layer).",
263
+ },
264
+ "map-data-required": {
265
+ summary: "geom_map was used without params.map.",
266
+ fix: "Pass params.map as { values }, { columns }, or { name } against spec.datasets.",
267
+ },
268
+ "map-coords-missing": {
269
+ summary: "Map data is missing long/lat or x/y coordinate columns.",
270
+ fix: 'Provide "long"+"lat" or "x"+"y" columns in the fortified map table.',
271
+ },
272
+ "map-id-column-missing": {
273
+ summary: "Map data is missing a region join column.",
274
+ fix: 'Set params.mapId or include a "region" / "id" column in the map table.',
275
+ },
276
+ } as const satisfies Record<string, PipelineErrorCatalogEntry>;
277
+
278
+ export type PipelineErrorCode = keyof typeof PIPELINE_ERROR_CATALOG;
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Strict PortableSpec checks: walk for unserializable values, isPortable,
3
+ * toPortable (rejecting). Lossy tooling conversion: portability-lossy.ts.
4
+ * Public facade: portability.ts.
5
+ */
6
+ import type { PortableSpec } from "./schema.js";
7
+ import type { RuntimeSpec } from "./runtime.js";
8
+
9
+ /** Any strictly-JSON value (what a PortableSpec is made of). */
10
+ export type JSONValue =
11
+ | string
12
+ | number
13
+ | boolean
14
+ | null
15
+ | JSONValue[]
16
+ | {
17
+ [key: string]: JSONValue;
18
+ };
19
+
20
+ export interface PortabilityIssue {
21
+ /** JSON-pointer-ish path to the offending value (e.g. "/aes/x/fn"). */
22
+ path: string;
23
+ /** Why the value cannot travel as JSON. */
24
+ reason: string;
25
+ }
26
+
27
+ /** @internal Shared by strict walk and lossy clone. */
28
+ export function isPlainObject(value: unknown): value is Record<string, unknown> {
29
+ if (typeof value !== "object" || value === null) return false;
30
+ const proto: unknown = Object.getPrototypeOf(value);
31
+ return proto === Object.prototype || proto === null;
32
+ }
33
+
34
+ function issueFor(value: unknown): string | null {
35
+ switch (typeof value) {
36
+ case "string":
37
+ case "boolean":
38
+ return null;
39
+ case "number":
40
+ return Number.isFinite(value)
41
+ ? null
42
+ : "non-finite number (portable specs encode NaN/Infinity as null)";
43
+ case "undefined":
44
+ return "undefined (omit the property instead)";
45
+ case "function":
46
+ return "function (use toPortableLossy() to strip { fn } accessors, or keep a RuntimeSpec)";
47
+ case "symbol":
48
+ return "symbol";
49
+ case "bigint":
50
+ return "bigint (convert to number or string)";
51
+ default:
52
+ return null; // objects handled by the walker
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Walk a value tree, collecting portability issues.
58
+ * When `stopAfter` is set, stop once that many issues are recorded (used by
59
+ * `isPortable` for an early-exit existence check).
60
+ */
61
+ function walk(
62
+ value: unknown,
63
+ path: string,
64
+ seen: Set<object>,
65
+ issues: PortabilityIssue[],
66
+ stopAfter?: number,
67
+ ): void {
68
+ if (stopAfter !== undefined && issues.length >= stopAfter) return;
69
+
70
+ const primitiveIssue = issueFor(value);
71
+ if (primitiveIssue !== null) {
72
+ issues.push({ path, reason: primitiveIssue });
73
+ return;
74
+ }
75
+ if (typeof value !== "object" || value === null) return;
76
+ if (seen.has(value)) {
77
+ issues.push({ path, reason: "circular reference" });
78
+ return;
79
+ }
80
+ if (value instanceof Date) {
81
+ issues.push({
82
+ path,
83
+ reason: "Date (portable specs carry dates as ISO 8601 strings)",
84
+ });
85
+ return;
86
+ }
87
+ if (Array.isArray(value)) {
88
+ seen.add(value);
89
+ for (let i = 0; i < value.length; i++) {
90
+ walk(value[i], `${path}/${i}`, seen, issues, stopAfter);
91
+ if (stopAfter !== undefined && issues.length >= stopAfter) break;
92
+ }
93
+ seen.delete(value);
94
+ return;
95
+ }
96
+ if (!isPlainObject(value)) {
97
+ issues.push({
98
+ path,
99
+ reason: `non-plain object (${Object.prototype.toString.call(value)})`,
100
+ });
101
+ return;
102
+ }
103
+ seen.add(value);
104
+ // Prefer for…in over Object.entries: entries eagerly Gets every property
105
+ // value (including later getters), defeating stopAfter. Engines still list
106
+ // own keys up front (OwnPropertyKeys); the short-circuit here is on value
107
+ // Gets and recursive walks — not on key listing. for…in also skips keys
108
+ // deleted by an earlier getter before we reach them.
109
+ for (const key in value) {
110
+ if (!Object.hasOwn(value, key)) continue;
111
+ walk(value[key], `${path}/${key}`, seen, issues, stopAfter);
112
+ if (stopAfter !== undefined && issues.length >= stopAfter) break;
113
+ }
114
+ seen.delete(value);
115
+ }
116
+
117
+ /** Every reason `value` fails to be strictly-JSON, with paths. Empty = portable. */
118
+ export function portabilityIssues(value: unknown): PortabilityIssue[] {
119
+ const issues: PortabilityIssue[] = [];
120
+ walk(value, "", new Set(), issues);
121
+ return issues;
122
+ }
123
+
124
+ /** True when `spec` contains only strictly-JSON values (narrowing type guard). */
125
+ export function isPortable(spec: RuntimeSpec | PortableSpec): spec is PortableSpec {
126
+ const issues: PortabilityIssue[] = [];
127
+ walk(spec, "", new Set(), issues, 1);
128
+ return issues.length === 0;
129
+ }
130
+
131
+ /** Thrown by toPortable(): lists EVERY unserializable path, not just the first. */
132
+ export class UnportableSpecError extends Error {
133
+ readonly issues: readonly PortabilityIssue[];
134
+
135
+ constructor(issues: readonly PortabilityIssue[]) {
136
+ const lines = issues.map((i) => ` ${i.path || "/"}: ${i.reason}`);
137
+ super(
138
+ `Spec is not portable (${issues.length} issue${issues.length === 1 ? "" : "s"}):\n` +
139
+ lines.join("\n"),
140
+ );
141
+ this.name = "UnportableSpecError";
142
+ this.issues = issues;
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Convert a RuntimeSpec to a PortableSpec, REJECTING (UnportableSpecError,
148
+ * with every offending path) if anything unserializable is present.
149
+ * Returns a structurally-shared-nothing deep copy.
150
+ */
151
+ export function toPortable(spec: RuntimeSpec): PortableSpec {
152
+ const issues = portabilityIssues(spec);
153
+ if (issues.length > 0) throw new UnportableSpecError(issues);
154
+ return JSON.parse(JSON.stringify(spec)) as PortableSpec;
155
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Explicit lossy RuntimeSpec → PortableSpec conversion for tooling.
3
+ * Strict checks: portability-check.ts. Public facade: portability.ts.
4
+ */
5
+ import type { PortableSpec } from "./schema.js";
6
+ import type { RuntimeSpec } from "./runtime.js";
7
+ import { isPlainObject, type JSONValue } from "./portability-check.js";
8
+
9
+ export interface LossyResult {
10
+ spec: PortableSpec;
11
+ /** Paths that were REMOVED because they cannot travel as JSON. */
12
+ dropped: string[];
13
+ }
14
+
15
+ function lossyClone(
16
+ value: unknown,
17
+ path: string,
18
+ seen: Set<object>,
19
+ dropped: string[],
20
+ ): { keep: boolean; value?: JSONValue } {
21
+ switch (typeof value) {
22
+ case "string":
23
+ case "boolean":
24
+ return { keep: true, value };
25
+ case "number":
26
+ return { keep: true, value: Number.isFinite(value) ? value : null };
27
+ case "function":
28
+ case "symbol":
29
+ case "undefined":
30
+ case "bigint":
31
+ dropped.push(path);
32
+ return { keep: false };
33
+ default:
34
+ break;
35
+ }
36
+ if (value === null) return { keep: true, value: null };
37
+ const obj = value as object;
38
+ if (seen.has(obj)) {
39
+ dropped.push(path);
40
+ return { keep: false };
41
+ }
42
+ if (obj instanceof Date) {
43
+ // Coercion, not a drop: dates travel as ISO strings per the plan.
44
+ return { keep: true, value: Number.isNaN(obj.getTime()) ? null : obj.toISOString() };
45
+ }
46
+ if (Array.isArray(obj)) {
47
+ seen.add(obj);
48
+ const out: JSONValue[] = [];
49
+ for (let i = 0; i < obj.length; i++) {
50
+ const r = lossyClone(obj[i], `${path}/${i}`, seen, dropped);
51
+ // Dropped array elements become null so indices stay row-aligned.
52
+ out.push(r.keep ? r.value! : null);
53
+ }
54
+ seen.delete(obj);
55
+ return { keep: true, value: out };
56
+ }
57
+ if (!isPlainObject(obj)) {
58
+ dropped.push(path);
59
+ return { keep: false };
60
+ }
61
+ seen.add(obj);
62
+ const out: { [key: string]: JSONValue } = {};
63
+ for (const [key, v] of Object.entries(obj)) {
64
+ const r = lossyClone(v, `${path}/${key}`, seen, dropped);
65
+ if (r.keep) out[key] = r.value!;
66
+ }
67
+ seen.delete(obj);
68
+ return { keep: true, value: out };
69
+ }
70
+
71
+ /**
72
+ * Explicit lossy conversion for tooling: strips `{ fn }` accessors and any
73
+ * other unserializable values, returning the portable remainder plus the list
74
+ * of dropped paths. Dates are coerced to ISO strings, non-finite numbers to
75
+ * null (coercions are not reported as drops).
76
+ */
77
+ export function toPortableLossy(spec: RuntimeSpec): LossyResult {
78
+ const dropped: string[] = [];
79
+ const r = lossyClone(spec, "", new Set(), dropped);
80
+ return { spec: (r.keep ? r.value : {}) as unknown as PortableSpec, dropped };
81
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * PortableSpec vs RuntimeSpec (plan: "Two spec types, explicitly split").
3
+ *
4
+ * PortableSpec is strictly JSON, defined over a recursive JSONValue: no Date,
5
+ * undefined, functions, bigint, symbols, typed arrays, cycles, non-finite
6
+ * numbers. Dates travel as ISO strings; non-finite numbers as null.
7
+ *
8
+ * RuntimeSpec is the in-memory superset: `{ fn }` channel accessors are legal.
9
+ * - `isPortable()` narrows.
10
+ * - `toPortable()` REJECTS with a structured error listing every
11
+ * unserializable path (one behavior, never "strip or reject").
12
+ * - `toPortableLossy()` is the separate, explicit tool for tooling: it strips
13
+ * what cannot travel and returns `{ spec, dropped }` (dates are COERCED to
14
+ * ISO strings and non-finite numbers to null — coercions are not "dropped").
15
+ *
16
+ * Implementation:
17
+ * - portability-check.ts — strict walk, isPortable, toPortable
18
+ * - portability-lossy.ts — toPortableLossy
19
+ * This file re-exports the public surface so package imports stay on ./portability.js.
20
+ */
21
+
22
+ export {
23
+ isPortable,
24
+ portabilityIssues,
25
+ toPortable,
26
+ UnportableSpecError,
27
+ type JSONValue,
28
+ type PortabilityIssue,
29
+ } from "./portability-check.js";
30
+
31
+ export { toPortableLossy, type LossyResult } from "./portability-lossy.js";
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Lean portable builder implementation (values for `@ggts-sh/spec/portable`).
3
+ * Index surface re-exports live in {@link ./portable-entry.ts}.
4
+ */
5
+ import type { AesInput } from "./normalize.js";
6
+ import { toAuthoringDataRef, type DataInput } from "./builder-data.js";
7
+ import { GGBuilderCore } from "./builder-core.js";
8
+ import { WithBuilderGeoms } from "./builder-geoms.js";
9
+ import { WithBuilderScales } from "./builder-scales.js";
10
+ import type { PortableSpec } from "./schema.js";
11
+
12
+ /** Identity helper for aesthetic mappings (same as full package `aes`). */
13
+ export function aes(mapping: AesInput): AesInput {
14
+ return mapping;
15
+ }
16
+
17
+ /**
18
+ * Portable builder: `.spec()` and `.toPortable()` both normalize only.
19
+ * Full schema validation: import `validate` from `@ggts-sh/spec`.
20
+ */
21
+ export class GGBuilder extends WithBuilderScales(WithBuilderGeoms(GGBuilderCore)) {
22
+ /** Normalize-only finish (TypeBox-free). Alias of {@link toPortable}. */
23
+ spec(): PortableSpec {
24
+ return this.toPortable();
25
+ }
26
+ }
27
+
28
+ /** Start a plot for render paths: gg(data, aes(...)).geomPoint().spec(). */
29
+ export function gg(data?: DataInput, mapping?: AesInput): GGBuilder {
30
+ return new GGBuilder({
31
+ ...(data !== undefined && { data: toAuthoringDataRef(data) }),
32
+ ...(mapping !== undefined && { aes: mapping }),
33
+ layers: [],
34
+ });
35
+ }