@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,90 @@
1
+ /**
2
+ * Scale canonicalization for normalize() — position type rewrites and color hex.
3
+ * Coord: normalize-coord.ts. Layer/aes orchestration: normalize.ts.
4
+ */
5
+ function isRecord(value) {
6
+ return typeof value === "object" && value !== null && !Array.isArray(value);
7
+ }
8
+ function withGuide(scale) {
9
+ if (!("guide" in scale) || !isRecord(scale.guide))
10
+ return { ...scale };
11
+ const guide = {
12
+ ...scale.guide,
13
+ ...(isRecord(scale.guide["theme"]) && { theme: { ...scale.guide["theme"] } }),
14
+ };
15
+ return { ...scale, guide };
16
+ }
17
+ function normalizeHexColor(color) {
18
+ const match = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(color);
19
+ if (match === null)
20
+ return color;
21
+ const digits = match[1].toLowerCase();
22
+ return digits.length === 3
23
+ ? `#${digits[0]}${digits[0]}${digits[1]}${digits[1]}${digits[2]}${digits[2]}`
24
+ : `#${digits}`;
25
+ }
26
+ function normalizeColorScale(scale) {
27
+ const fallbacks = {
28
+ ...(scale.naValue !== undefined && { naValue: normalizeHexColor(scale.naValue) }),
29
+ ...(scale.unknownValue !== undefined && {
30
+ unknownValue: normalizeHexColor(scale.unknownValue),
31
+ }),
32
+ };
33
+ if (scale.type === "identity")
34
+ return { ...withGuide(scale), ...fallbacks };
35
+ return {
36
+ ...withGuide(scale),
37
+ ...(Array.isArray(scale.range) && {
38
+ range: scale.range.map((color) => normalizeHexColor(color)),
39
+ }),
40
+ ...fallbacks,
41
+ };
42
+ }
43
+ function normalizePositionScale(scale) {
44
+ if (scale.type === "band") {
45
+ const { temporalKind: _, parse: __, parseFailure: ___, timezone: ____, disambiguation: _____, dateBreaks: ______, dateMinorBreaks: _______, dateLabels: ________, locale: _________, weekStart: __________, ...band } = scale;
46
+ return band;
47
+ }
48
+ // Canonical log10: an authored `type: "log"` (base-10) IS the linear family
49
+ // with the log10 transform. A conflicting explicit transform (identity/sqrt)
50
+ // is left uncanonicalized for pipeline preflight to reject as
51
+ // scale-type-transform-conflict. Pure normalize never throws.
52
+ if (scale.type === "log" && (scale.transform === undefined || scale.transform === "log10")) {
53
+ return { ...scale, type: "linear", transform: "log10" };
54
+ }
55
+ // Binned is a quantitative position family; it never requests a time scale.
56
+ // Contradictory temporal options are left for validate() to reject.
57
+ if (scale.type === "binned") {
58
+ return { ...scale };
59
+ }
60
+ const hasTemporalGuideOption = scale.dateBreaks !== undefined ||
61
+ scale.dateMinorBreaks !== undefined ||
62
+ scale.dateLabels !== undefined ||
63
+ scale.locale !== undefined ||
64
+ scale.weekStart !== undefined;
65
+ if ((scale.type === "linear" || scale.type === "log") && hasTemporalGuideOption) {
66
+ return { ...scale };
67
+ }
68
+ const requestsTime = scale.type === "time" ||
69
+ scale.temporalKind !== undefined ||
70
+ scale.parse !== undefined ||
71
+ scale.parseFailure !== undefined ||
72
+ scale.timezone !== undefined ||
73
+ scale.disambiguation !== undefined ||
74
+ hasTemporalGuideOption;
75
+ return requestsTime ? { ...scale, type: "time" } : { ...scale };
76
+ }
77
+ export function normalizeScales(scales) {
78
+ return {
79
+ ...(scales.x !== undefined && { x: withGuide(normalizePositionScale(scales.x)) }),
80
+ ...(scales.y !== undefined && { y: withGuide(normalizePositionScale(scales.y)) }),
81
+ ...(scales.color !== undefined && { color: normalizeColorScale(scales.color) }),
82
+ ...(scales.fill !== undefined && { fill: normalizeColorScale(scales.fill) }),
83
+ ...(scales.size !== undefined && { size: withGuide(scales.size) }),
84
+ ...(scales.linewidth !== undefined && { linewidth: withGuide(scales.linewidth) }),
85
+ ...(scales.alpha !== undefined && { alpha: withGuide(scales.alpha) }),
86
+ ...(scales.shape !== undefined && { shape: withGuide(scales.shape) }),
87
+ ...(scales.linetype !== undefined && { linetype: withGuide(scales.linetype) }),
88
+ };
89
+ }
90
+ //# sourceMappingURL=normalize-scales.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-scales.js","sourceRoot":"","sources":["../src/normalize-scales.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * normalize() — the canonicalizer (plan: "One canonical form per concept").
3
+ *
4
+ * Input: a SpecInput, the TS/builder-level convenience form where channels may
5
+ * be bare strings ('displ' means { field: 'displ' }). The JSON Schema does NOT
6
+ * admit bare strings — the shorthand exists only here and in the Svelte props.
7
+ * Input types live in normalize-input.ts.
8
+ *
9
+ * Output: a canonical PortableSpec. Canonicalization performed:
10
+ * 1. Bare-string channels -> { field } (in plot aes and layer aes).
11
+ * 2. Geom defaults filled (GEOM_DEFAULTS): bar -> stat count + position
12
+ * stack; col/area -> identity + stack; everything else identity/identity.
13
+ * 3. Bar layers with no y channel get the count stat's default mapping
14
+ * y: { stat: "count" } (ggplot2's after_stat default aes).
15
+ * 4. Aes inheritance RESOLVED into each layer with null-unset semantics
16
+ * (layer channel null removes the inherited channel), and the plot-level
17
+ * `aes` removed from the output. Every normalized layer is self-contained.
18
+ * (Resolving at normalize time is what makes normalize idempotent: keeping
19
+ * plot aes AND merged layers would re-inherit null-unset channels on a
20
+ * second pass.)
21
+ * 5. Theme names stay strings; theme objects are cloned (both canonical).
22
+ * 6. Deterministic key order for every object it constructs.
23
+ *
24
+ * Scale-type inference needs data, so it lives in @ggts-sh/core (pipeline);
25
+ * normalize only fills structural defaults. Normalized output is itself a
26
+ * valid PortableSpec, and normalize(normalize(s)) deep-equals normalize(s).
27
+ *
28
+ * Scale and coord canonicalization live in normalize-scales.ts and
29
+ * normalize-coord.ts; this module owns channels, layers, facet, theme, and
30
+ * the top-level normalize() walk.
31
+ */
32
+ import type { ChannelValue, NormalizedSpec } from "./schema.js";
33
+ import type { ChannelInput, SpecInput } from "./normalize-input.js";
34
+ export type { AesInput, AreaLayerInput, BarLayerInput, BoxplotLayerInput, ChannelInput, ColLayerInput, DensityLayerInput, ErrorbarLayerInput, LinerangeLayerInput, PointrangeLayerInput, CrossbarLayerInput, FacetFieldInput, FacetInput, HistogramLayerInput, FreqpolyLayerInput, HlineLayerInput, JitterLayerInput, RibbonLayerInput, SegmentLayerInput, CountLayerInput, ViolinLayerInput, FunctionLayerInput, PolygonLayerInput, AblineLayerInput, ContourLayerInput, Density2dLayerInput, Density2dFilledLayerInput, DotplotLayerInput, BlankLayerInput, MapLayerInput, SpokeLayerInput, SfLayerInput, SfTextLayerInput, SfLabelLayerInput, CurveLayerInput, RugLayerInput, StepLayerInput, QqLayerInput, QqLineLayerInput, LayerInput, LineLayerInput, PathLayerInput, PointLayerInput, RasterLayerInput, HexLayerInput, RectLayerInput, RuleLayerInput, QuantileLayerInput, SmoothLayerInput, SpecInput, TextLayerInput, LabelLayerInput, TileLayerInput, Bin2dLayerInput, VlineLayerInput, } from "./normalize-input.js";
35
+ /** Canonicalize one channel: bare string -> { field }; clone canonical forms. */
36
+ export declare function normalizeChannel(input: ChannelInput): ChannelValue;
37
+ /**
38
+ * Canonicalize a SpecInput into a normalized PortableSpec (see module docs).
39
+ *
40
+ * The NormalizedSpec return type promises one thing the runtime enforces —
41
+ * canonicalGeom() has rewritten every alias geom. It promises nothing about an
42
+ * unknown geom: normalize() deliberately never throws on one (see below), so
43
+ * the type is only sound once validate() has passed on the result.
44
+ */
45
+ export declare function normalize(input: SpecInput): NormalizedSpec;
46
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAGV,YAAY,EAMZ,cAAc,EAGf,MAAM,aAAa,CAAC;AAKrB,OAAO,KAAK,EAEV,YAAY,EAGZ,SAAS,EACV,MAAM,sBAAsB,CAAC;AAI9B,YAAY,EACV,QAAQ,EACR,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAUlE;AAiPD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,cAAc,CA0B1D"}
@@ -0,0 +1,279 @@
1
+ import { normalizeCoord } from "./normalize-coord.js";
2
+ import { normalizeLayerParamsPaint } from "./normalize-paint.js";
3
+ import { normalizeScales } from "./normalize-scales.js";
4
+ import { CHANNELS, CURRENT_EDITION, GEOM_ALIASES, GEOM_DEFAULTS } from "./schema-catalog.js";
5
+ /** Canonicalize one channel: bare string -> { field }; clone canonical forms. */
6
+ export function normalizeChannel(input) {
7
+ if (typeof input === "string")
8
+ return { field: input };
9
+ if (input === null)
10
+ return null;
11
+ if ("field" in input)
12
+ return { field: input.field };
13
+ if ("value" in input) {
14
+ return input.scale === undefined
15
+ ? { value: input.value }
16
+ : { value: input.value, scale: input.scale };
17
+ }
18
+ return { stat: input.stat };
19
+ }
20
+ function normalizeAes(input) {
21
+ if (input === undefined)
22
+ return undefined;
23
+ const out = {};
24
+ for (const channel of CHANNELS) {
25
+ const v = input[channel];
26
+ if (v === undefined)
27
+ continue;
28
+ out[channel] = normalizeChannel(v);
29
+ }
30
+ return out;
31
+ }
32
+ /**
33
+ * Merge plot-level aes into a layer's aes with null-unset semantics:
34
+ * layer channels override; a layer channel of null REMOVES the inherited
35
+ * channel (and does not survive into the resolved mapping).
36
+ */
37
+ function resolveLayerAes(plotAes, layerAes) {
38
+ const out = {};
39
+ for (const channel of CHANNELS) {
40
+ const own = layerAes?.[channel];
41
+ if (own === null)
42
+ continue; // explicit unset
43
+ const inherited = plotAes?.[channel];
44
+ const chosen = own ?? inherited;
45
+ if (chosen === undefined || chosen === null)
46
+ continue;
47
+ out[channel] = chosen;
48
+ }
49
+ return Object.keys(out).length === 0 ? undefined : out;
50
+ }
51
+ /** Annotation-form rule / hline / vline layers (fixed intercepts) inherit NO
52
+ * plot aes — ggplot2's `inherit.aes = FALSE` on geom_vline/hline (Hadley
53
+ * lesson 15: honest, separate signatures for the two rule forms).
54
+ * Asymmetric: hline is annotation only when yintercept is set; vline only
55
+ * when xintercept is set; rule when either intercept is set. */
56
+ function isAnnotationRule(layer) {
57
+ const params = layer.params;
58
+ if (layer.geom === "hline")
59
+ return params?.yintercept !== undefined;
60
+ if (layer.geom === "vline")
61
+ return params?.xintercept !== undefined;
62
+ if (layer.geom !== "rule")
63
+ return false;
64
+ return params?.xintercept !== undefined || params?.yintercept !== undefined;
65
+ }
66
+ /** Abline is always annotation-style (fixed slope/intercept; no plot aes). */
67
+ function isAnnotationAbline(layer) {
68
+ return layer.geom === "abline";
69
+ }
70
+ /**
71
+ * Convenience geom aliases (#818 / histogram / freqpoly): rewrite to the
72
+ * canonical geom name. Pure renames only — no cross-field params surgery.
73
+ *
74
+ * The rewrite is GEOM_ALIASES, so the alias set is one table core can key its
75
+ * pipeline records off (#1042) rather than a fact buried in this branch.
76
+ */
77
+ function canonicalGeom(geom) {
78
+ // Own-key check, not `in`: `in` walks the prototype chain, so a geom named
79
+ // "constructor" or "toString" would read as an alias and rewrite to a
80
+ // function. Unknown names must pass through for validate() to reject.
81
+ return Object.hasOwn(GEOM_ALIASES, geom)
82
+ ? GEOM_ALIASES[geom]
83
+ : geom;
84
+ }
85
+ function normalizeLayer(layer, plotAes) {
86
+ // Data-driven hline/vline are one-axis rules: drop the orthogonal position
87
+ // channel from inheritance so plot-level x+y does not trigger rule-both-axes.
88
+ const layerAesInput = normalizeRuleAesInput(layer);
89
+ const inherited = isAnnotationRule(layer) || isAnnotationAbline(layer) ? undefined : plotAes;
90
+ let aes = resolveLayerAes(inherited, normalizeAes(layerAesInput));
91
+ // Unknown geoms fall back to identity defaults so normalize never throws —
92
+ // validate() rejects them right after with the proper did-you-mean error.
93
+ // Own-key check for the same reason as canonicalGeom: plain `[…]` on a geom
94
+ // named "constructor" returns a function, which is truthy, so `??` would not
95
+ // fire and the layer would lose stat and position.
96
+ const defaults = Object.hasOwn(GEOM_DEFAULTS, layer.geom)
97
+ ? GEOM_DEFAULTS[layer.geom]
98
+ : { stat: "identity", position: "identity" };
99
+ // geom_sf: public stat_sf (#809 phase 7). Rewrite legacy portable
100
+ // `stat: "identity"` so re-normalize stays additive (draw path unchanged).
101
+ const rawStat = layer.stat ?? defaults.stat;
102
+ const stat = layer.geom === "sf" && rawStat === "identity" ? "sf" : rawStat;
103
+ // Stat default mappings (ggplot2's `after_stat()` default aes): the count
104
+ // and bin stats map y to their count column; the density stat maps y to
105
+ // its density column.
106
+ aes = normalizeStatAes(aes, stat, layer.geom);
107
+ const geom = canonicalGeom(layer.geom);
108
+ const positionParams = "positionParams" in layer && layer.positionParams !== undefined
109
+ ? { ...layer.positionParams }
110
+ : undefined;
111
+ const rawParams = layer.params === undefined ? undefined : { ...layer.params };
112
+ const params = rawParams === undefined ? undefined : normalizeLayerParamsPaint(rawParams);
113
+ // "auto" is the render default — one canonical form per concept, so it
114
+ // canonicalizes away (same rule as coord "cartesian" / a11y "auto").
115
+ const render = layer.render === "auto" ? undefined : layer.render;
116
+ // Jitter alias has no position field on the input type; always use defaults.
117
+ const position = normalizeLayerPosition(layer, defaults.position);
118
+ const out = {
119
+ geom,
120
+ stat,
121
+ position,
122
+ ...(positionParams !== undefined && { positionParams }),
123
+ ...(render !== undefined && { render }),
124
+ ...(aes !== undefined && { aes }),
125
+ ...(layer.data !== undefined && { data: layer.data }),
126
+ // Only `false` is expressible. Read as unknown so a raw JSON `inspect: true`
127
+ // is not rewritten to false — validate rejects non-false; typed input only
128
+ // admits false (#1065).
129
+ ...(layer.inspect === false && {
130
+ inspect: false,
131
+ }),
132
+ ...(params !== undefined && { params }),
133
+ };
134
+ return out;
135
+ }
136
+ function normalizeRuleAesInput(layer) {
137
+ if (layer.geom === "hline" && !isAnnotationRule(layer))
138
+ return { ...layer.aes, x: null };
139
+ if (layer.geom === "vline" && !isAnnotationRule(layer))
140
+ return { ...layer.aes, y: null };
141
+ return layer.aes;
142
+ }
143
+ function normalizeStatAes(aes, stat, geom) {
144
+ let normalized = normalizeStatPositionAes(aes, stat);
145
+ normalized = normalizeStatStyleAes(normalized, stat, geom);
146
+ return normalized;
147
+ }
148
+ function normalizeStatPositionAes(aes, stat) {
149
+ if ((stat === "count" || stat === "bin") && aes?.y === undefined) {
150
+ return { ...aes, y: { stat: "count" } };
151
+ }
152
+ if (stat === "density" && aes?.y === undefined)
153
+ return { ...aes, y: { stat: "density" } };
154
+ if (stat === "function" && aes?.y === undefined)
155
+ return { ...aes, y: { stat: "y" } };
156
+ if (stat === "ecdf" && aes?.y === undefined)
157
+ return { ...aes, y: { stat: "ecdf" } };
158
+ if (stat === "bindot" && aes?.y === undefined)
159
+ return { ...aes, y: { stat: "stackpos" } };
160
+ return aes;
161
+ }
162
+ function normalizeStatStyleAes(aes, stat, geom) {
163
+ if (stat === "sum" && aes?.size === undefined)
164
+ return { ...aes, size: { stat: "n" } };
165
+ if (stat === "bin_hex" && aes?.fill === undefined)
166
+ return { ...aes, fill: { stat: "count" } };
167
+ if ((stat === "density_2d_filled" || geom === "density_2d_filled") && aes?.fill === undefined) {
168
+ return { ...aes, fill: { stat: "level" } };
169
+ }
170
+ if (stat === "bin_2d" && aes?.fill === undefined)
171
+ return { ...aes, fill: { stat: "count" } };
172
+ return aes;
173
+ }
174
+ function normalizeLayerPosition(layer, defaultPosition) {
175
+ if (layer.geom === "jitter")
176
+ return defaultPosition;
177
+ return "position" in layer && layer.position !== undefined ? layer.position : defaultPosition;
178
+ }
179
+ /** Canonicalize one facet field: bare string -> { field }; clone levels/labels. */
180
+ function normalizeFacetField(v) {
181
+ if (v === undefined)
182
+ return undefined;
183
+ if (typeof v === "string")
184
+ return { field: v };
185
+ const levels = v.levels === undefined
186
+ ? undefined
187
+ : [...v.levels];
188
+ const labels = v.labels === undefined ? undefined : { ...v.labels };
189
+ return {
190
+ field: v.field,
191
+ ...(levels !== undefined && { levels }),
192
+ ...(labels !== undefined && { labels }),
193
+ };
194
+ }
195
+ /** Canonicalize facet strip chrome (position + show). */
196
+ function normalizeFacetStrip(strip) {
197
+ const out = {
198
+ ...(strip.position !== undefined && { position: strip.position }),
199
+ ...(strip.show !== undefined && { show: strip.show }),
200
+ };
201
+ return out;
202
+ }
203
+ /** Canonicalize a facet input: bare-string fields -> { field }. */
204
+ function normalizeFacet(facet) {
205
+ const wrap = normalizeFacetField(facet.wrap);
206
+ const rows = normalizeFacetField(facet.rows);
207
+ const cols = normalizeFacetField(facet.cols);
208
+ const strip = facet.strip === undefined ? undefined : normalizeFacetStrip(facet.strip);
209
+ return {
210
+ ...(wrap !== undefined && { wrap }),
211
+ ...(rows !== undefined && { rows }),
212
+ ...(cols !== undefined && { cols }),
213
+ ...(facet.ncol !== undefined && { ncol: facet.ncol }),
214
+ ...(facet.scales !== undefined && { scales: facet.scales }),
215
+ ...(strip !== undefined && Object.keys(strip).length > 0 && { strip }),
216
+ };
217
+ }
218
+ function normalizeTheme(theme) {
219
+ return typeof theme === "string" ? theme : { ...theme };
220
+ }
221
+ function normalizeGuide(guide) {
222
+ return {
223
+ ...guide,
224
+ ...(guide.type !== "none" && guide.theme !== undefined && { theme: { ...guide.theme } }),
225
+ };
226
+ }
227
+ const GUIDE_ORDER = [
228
+ "x",
229
+ "y",
230
+ "color",
231
+ "fill",
232
+ "size",
233
+ "linewidth",
234
+ "alpha",
235
+ "shape",
236
+ "linetype",
237
+ ];
238
+ function normalizeGuides(guides) {
239
+ return Object.fromEntries(GUIDE_ORDER.flatMap((aesthetic) => {
240
+ const guide = guides[aesthetic];
241
+ return guide === undefined ? [] : [[aesthetic, normalizeGuide(guide)]];
242
+ }));
243
+ }
244
+ /**
245
+ * Canonicalize a SpecInput into a normalized PortableSpec (see module docs).
246
+ *
247
+ * The NormalizedSpec return type promises one thing the runtime enforces —
248
+ * canonicalGeom() has rewritten every alias geom. It promises nothing about an
249
+ * unknown geom: normalize() deliberately never throws on one (see below), so
250
+ * the type is only sound once validate() has passed on the result.
251
+ */
252
+ export function normalize(input) {
253
+ const plotAes = normalizeAes(input.aes);
254
+ // Defaults canonicalize away: Cartesian/identity coord and a11y "auto" ARE
255
+ // the absent forms (one canonical form per concept).
256
+ const coord = normalizeCoord(input.coord);
257
+ const a11y = input.a11y === "force-svg" ? input.a11y : undefined;
258
+ const out = {
259
+ ...(input.$schema !== undefined && { $schema: input.$schema }),
260
+ // Defaults-edition stamping (Hadley lesson 13): absent -> current, so the
261
+ // spec's default look is frozen at authoring time (schema description).
262
+ edition: input.edition ?? CURRENT_EDITION,
263
+ ...(input.data !== undefined && { data: input.data }),
264
+ ...(input.datasets !== undefined && { datasets: input.datasets }),
265
+ layers: input.layers.map((layer) => normalizeLayer(layer, plotAes)),
266
+ ...(input.facet !== undefined && { facet: normalizeFacet(input.facet) }),
267
+ ...(coord !== undefined && { coord }),
268
+ ...(input.scales !== undefined && { scales: normalizeScales(input.scales) }),
269
+ ...(input.guides !== undefined && { guides: normalizeGuides(input.guides) }),
270
+ ...(input.legend !== undefined && { legend: { ...input.legend } }),
271
+ ...(input.labs !== undefined && { labs: { ...input.labs } }),
272
+ ...(input.theme !== undefined && { theme: normalizeTheme(input.theme) }),
273
+ ...(input.width !== undefined && { width: input.width }),
274
+ ...(input.height !== undefined && { height: input.height }),
275
+ ...(a11y !== undefined && { a11y }),
276
+ };
277
+ return out;
278
+ }
279
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Within-mark paint authoring helpers (#591).
3
+ * Closed portable gradients + bounded glow — not theme decoration.
4
+ */
5
+ import type { ColorStop, GlowSpec, LinearGradientPaint, PaintSpace, RadialGradientPaint } from "./schema.js";
6
+ export type ColorStopInput = ColorStop;
7
+ export type LinearPaintOptions = {
8
+ x1: number;
9
+ y1: number;
10
+ x2: number;
11
+ y2: number;
12
+ /** Gradient coordinate space. Default "mark" (object bounding box). */
13
+ space?: PaintSpace;
14
+ stops: ColorStopInput[];
15
+ /** Required solid #rgb/#rrggbb fallback for a11y / reduced-effects paths. */
16
+ fallback: string;
17
+ };
18
+ export type RadialPaintOptions = {
19
+ cx: number;
20
+ cy: number;
21
+ r: number;
22
+ /** Gradient coordinate space. Default "mark" (object bounding box). */
23
+ space?: PaintSpace;
24
+ stops: ColorStopInput[];
25
+ /** Required solid #rgb/#rrggbb fallback for a11y / reduced-effects paths. */
26
+ fallback: string;
27
+ };
28
+ export type GlowOptions = {
29
+ color: string;
30
+ /** Blur radius in CSS px (exclusive minimum 0, maximum 32). */
31
+ radius: number;
32
+ /** Glow opacity 0–1. */
33
+ opacity: number;
34
+ };
35
+ /** Build a deterministic linear gradient paint for fillPaint / strokePaint. */
36
+ export declare function fillPaintLinear(options: LinearPaintOptions): LinearGradientPaint;
37
+ /** Build a deterministic radial gradient paint for fillPaint. */
38
+ export declare function fillPaintRadial(options: RadialPaintOptions): RadialGradientPaint;
39
+ /** Build a deterministic linear gradient paint for strokePaint. */
40
+ export declare function strokePaintLinear(options: LinearPaintOptions): LinearGradientPaint;
41
+ /** Build a deterministic radial gradient paint for strokePaint. */
42
+ export declare function strokePaintRadial(options: RadialPaintOptions): RadialGradientPaint;
43
+ /** Build a bounded glow treatment (color, radius ≤ 32px, opacity). */
44
+ export declare function glow(options: GlowOptions): GlowSpec;
45
+ //# sourceMappingURL=paint-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint-helpers.d.ts","sourceRoot":"","sources":["../src/paint-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,UAAU,EACV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC;AAEvC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,uEAAuE;IACvE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,uEAAuE;IACvE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AA2BF,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,CAEhF;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,CAEhF;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,CAElF;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,CAElF;AAED,sEAAsE;AACtE,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,QAAQ,CAMnD"}
@@ -0,0 +1,48 @@
1
+ function linear(options) {
2
+ return {
3
+ type: "linear",
4
+ x1: options.x1,
5
+ y1: options.y1,
6
+ x2: options.x2,
7
+ y2: options.y2,
8
+ space: options.space ?? "mark",
9
+ stops: options.stops.map((stop) => ({ ...stop })),
10
+ fallback: options.fallback,
11
+ };
12
+ }
13
+ function radial(options) {
14
+ return {
15
+ type: "radial",
16
+ cx: options.cx,
17
+ cy: options.cy,
18
+ r: options.r,
19
+ space: options.space ?? "mark",
20
+ stops: options.stops.map((stop) => ({ ...stop })),
21
+ fallback: options.fallback,
22
+ };
23
+ }
24
+ /** Build a deterministic linear gradient paint for fillPaint / strokePaint. */
25
+ export function fillPaintLinear(options) {
26
+ return linear(options);
27
+ }
28
+ /** Build a deterministic radial gradient paint for fillPaint. */
29
+ export function fillPaintRadial(options) {
30
+ return radial(options);
31
+ }
32
+ /** Build a deterministic linear gradient paint for strokePaint. */
33
+ export function strokePaintLinear(options) {
34
+ return linear(options);
35
+ }
36
+ /** Build a deterministic radial gradient paint for strokePaint. */
37
+ export function strokePaintRadial(options) {
38
+ return radial(options);
39
+ }
40
+ /** Build a bounded glow treatment (color, radius ≤ 32px, opacity). */
41
+ export function glow(options) {
42
+ return {
43
+ color: options.color,
44
+ radius: options.radius,
45
+ opacity: options.opacity,
46
+ };
47
+ }
48
+ //# sourceMappingURL=paint-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint-helpers.js","sourceRoot":"","sources":["../src/paint-helpers.ts"],"names":[],"mappings":"AA6CA,SAAS,MAAM,CAAC,OAA2B;IACzC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACjD,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,OAA2B;IACzC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,CAAC,EAAE,OAAO,CAAC,CAAC;QACZ,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACjD,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,OAA2B;IACzD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,OAA2B;IACzD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,IAAI,CAAC,OAAoB;IACvC,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;AACJ,CAAC"}