@ggts-sh/svelte 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 (656) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -0
  3. package/bin/ggts-codemod.js +47 -0
  4. package/dist/GGPlot.svelte +491 -0
  5. package/dist/GGPlot.svelte.d.ts +67 -0
  6. package/dist/a11y/CanvasA11y.svelte +115 -0
  7. package/dist/a11y/CanvasA11y.svelte.d.ts +15 -0
  8. package/dist/a11y/canvas-a11y.d.ts +1 -0
  9. package/dist/a11y/canvas-a11y.js +2 -0
  10. package/dist/assembly/assemble.d.ts +1 -0
  11. package/dist/assembly/assemble.js +1 -0
  12. package/dist/assembly/labels.d.ts +43 -0
  13. package/dist/assembly/labels.js +126 -0
  14. package/dist/assembly/layout.d.ts +158 -0
  15. package/dist/assembly/layout.js +175 -0
  16. package/dist/chrome/StatusChrome.svelte +125 -0
  17. package/dist/chrome/StatusChrome.svelte.d.ts +16 -0
  18. package/dist/chrome/ToolRail.svelte +293 -0
  19. package/dist/chrome/ToolRail.svelte.d.ts +26 -0
  20. package/dist/chrome/chrome-state.svelte.d.ts +63 -0
  21. package/dist/chrome/chrome-state.svelte.js +158 -0
  22. package/dist/chrome/theme-css.d.ts +16 -0
  23. package/dist/chrome/theme-css.js +16 -0
  24. package/dist/codemod/cli.d.ts +16 -0
  25. package/dist/codemod/cli.js +150 -0
  26. package/dist/codemod/edits.d.ts +28 -0
  27. package/dist/codemod/edits.js +36 -0
  28. package/dist/codemod/index.d.ts +10 -0
  29. package/dist/codemod/index.js +10 -0
  30. package/dist/codemod/migrate-plot-props-rewrite.d.ts +86 -0
  31. package/dist/codemod/migrate-plot-props-rewrite.js +228 -0
  32. package/dist/codemod/migrate-plot-props.d.ts +38 -0
  33. package/dist/codemod/migrate-plot-props.js +159 -0
  34. package/dist/coord/Coord.svelte +21 -0
  35. package/dist/coord/Coord.svelte.d.ts +16 -0
  36. package/dist/coord/CoordCartesian.svelte +11 -0
  37. package/dist/coord/CoordCartesian.svelte.d.ts +18 -0
  38. package/dist/coord/CoordFixed.svelte +17 -0
  39. package/dist/coord/CoordFixed.svelte.d.ts +10 -0
  40. package/dist/coord/CoordFlip.svelte +11 -0
  41. package/dist/coord/CoordFlip.svelte.d.ts +18 -0
  42. package/dist/coord/CoordPolar.svelte +16 -0
  43. package/dist/coord/CoordPolar.svelte.d.ts +9 -0
  44. package/dist/coord/CoordRadial.svelte +16 -0
  45. package/dist/coord/CoordRadial.svelte.d.ts +9 -0
  46. package/dist/coord/CoordSf.svelte +16 -0
  47. package/dist/coord/CoordSf.svelte.d.ts +9 -0
  48. package/dist/coord/CoordTransform.svelte +16 -0
  49. package/dist/coord/CoordTransform.svelte.d.ts +9 -0
  50. package/dist/data/index.d.ts +1 -0
  51. package/dist/data/index.js +2 -0
  52. package/dist/diagnostics/composition.d.ts +112 -0
  53. package/dist/diagnostics/composition.js +203 -0
  54. package/dist/diagnostics/deprecation.d.ts +58 -0
  55. package/dist/diagnostics/deprecation.js +27 -0
  56. package/dist/diagnostics/plot-engine-diagnostics.svelte.d.ts +44 -0
  57. package/dist/diagnostics/plot-engine-diagnostics.svelte.js +193 -0
  58. package/dist/facet/Facet.svelte +23 -0
  59. package/dist/facet/Facet.svelte.d.ts +16 -0
  60. package/dist/facet/FacetGrid.svelte +32 -0
  61. package/dist/facet/FacetGrid.svelte.d.ts +16 -0
  62. package/dist/facet/FacetWrap.svelte +32 -0
  63. package/dist/facet/FacetWrap.svelte.d.ts +16 -0
  64. package/dist/fonts/RobotoCondensed-Bold.ttf +0 -0
  65. package/dist/fonts/RobotoCondensed-Light.ttf +0 -0
  66. package/dist/fonts/RobotoCondensed-Regular.ttf +0 -0
  67. package/dist/fonts/THIRD_PARTY_NOTICES.txt +416 -0
  68. package/dist/geoms/GeomAbline.svelte +25 -0
  69. package/dist/geoms/GeomAbline.svelte.d.ts +7 -0
  70. package/dist/geoms/GeomArea.svelte +12 -0
  71. package/dist/geoms/GeomArea.svelte.d.ts +7 -0
  72. package/dist/geoms/GeomBar.svelte +12 -0
  73. package/dist/geoms/GeomBar.svelte.d.ts +7 -0
  74. package/dist/geoms/GeomBin2d.svelte +21 -0
  75. package/dist/geoms/GeomBin2d.svelte.d.ts +7 -0
  76. package/dist/geoms/GeomBlank.svelte +12 -0
  77. package/dist/geoms/GeomBlank.svelte.d.ts +7 -0
  78. package/dist/geoms/GeomBoxplot.svelte +25 -0
  79. package/dist/geoms/GeomBoxplot.svelte.d.ts +7 -0
  80. package/dist/geoms/GeomCol.svelte +12 -0
  81. package/dist/geoms/GeomCol.svelte.d.ts +7 -0
  82. package/dist/geoms/GeomContour.svelte +25 -0
  83. package/dist/geoms/GeomContour.svelte.d.ts +7 -0
  84. package/dist/geoms/GeomCount.svelte +12 -0
  85. package/dist/geoms/GeomCount.svelte.d.ts +7 -0
  86. package/dist/geoms/GeomCrossbar.svelte +25 -0
  87. package/dist/geoms/GeomCrossbar.svelte.d.ts +7 -0
  88. package/dist/geoms/GeomCurve.svelte +21 -0
  89. package/dist/geoms/GeomCurve.svelte.d.ts +7 -0
  90. package/dist/geoms/GeomDensity.svelte +25 -0
  91. package/dist/geoms/GeomDensity.svelte.d.ts +7 -0
  92. package/dist/geoms/GeomDensity2d.svelte +25 -0
  93. package/dist/geoms/GeomDensity2d.svelte.d.ts +7 -0
  94. package/dist/geoms/GeomDensity2dFilled.svelte +25 -0
  95. package/dist/geoms/GeomDensity2dFilled.svelte.d.ts +7 -0
  96. package/dist/geoms/GeomDotplot.svelte +25 -0
  97. package/dist/geoms/GeomDotplot.svelte.d.ts +7 -0
  98. package/dist/geoms/GeomErrorbar.svelte +25 -0
  99. package/dist/geoms/GeomErrorbar.svelte.d.ts +7 -0
  100. package/dist/geoms/GeomFreqpoly.svelte +25 -0
  101. package/dist/geoms/GeomFreqpoly.svelte.d.ts +7 -0
  102. package/dist/geoms/GeomFunction.svelte +25 -0
  103. package/dist/geoms/GeomFunction.svelte.d.ts +7 -0
  104. package/dist/geoms/GeomHex.svelte +21 -0
  105. package/dist/geoms/GeomHex.svelte.d.ts +7 -0
  106. package/dist/geoms/GeomHistogram.svelte +25 -0
  107. package/dist/geoms/GeomHistogram.svelte.d.ts +7 -0
  108. package/dist/geoms/GeomHline.svelte +12 -0
  109. package/dist/geoms/GeomHline.svelte.d.ts +7 -0
  110. package/dist/geoms/GeomJitter.svelte +35 -0
  111. package/dist/geoms/GeomJitter.svelte.d.ts +13 -0
  112. package/dist/geoms/GeomLabel.svelte +12 -0
  113. package/dist/geoms/GeomLabel.svelte.d.ts +7 -0
  114. package/dist/geoms/GeomLine.svelte +12 -0
  115. package/dist/geoms/GeomLine.svelte.d.ts +7 -0
  116. package/dist/geoms/GeomLinerange.svelte +25 -0
  117. package/dist/geoms/GeomLinerange.svelte.d.ts +7 -0
  118. package/dist/geoms/GeomMap.svelte +21 -0
  119. package/dist/geoms/GeomMap.svelte.d.ts +7 -0
  120. package/dist/geoms/GeomPath.svelte +12 -0
  121. package/dist/geoms/GeomPath.svelte.d.ts +7 -0
  122. package/dist/geoms/GeomPoint.svelte +12 -0
  123. package/dist/geoms/GeomPoint.svelte.d.ts +7 -0
  124. package/dist/geoms/GeomPointrange.svelte +25 -0
  125. package/dist/geoms/GeomPointrange.svelte.d.ts +7 -0
  126. package/dist/geoms/GeomPolygon.svelte +25 -0
  127. package/dist/geoms/GeomPolygon.svelte.d.ts +7 -0
  128. package/dist/geoms/GeomQq.svelte +21 -0
  129. package/dist/geoms/GeomQq.svelte.d.ts +7 -0
  130. package/dist/geoms/GeomQqLine.svelte +25 -0
  131. package/dist/geoms/GeomQqLine.svelte.d.ts +7 -0
  132. package/dist/geoms/GeomQuantile.svelte +25 -0
  133. package/dist/geoms/GeomQuantile.svelte.d.ts +7 -0
  134. package/dist/geoms/GeomRaster.svelte +25 -0
  135. package/dist/geoms/GeomRaster.svelte.d.ts +7 -0
  136. package/dist/geoms/GeomRect.svelte +12 -0
  137. package/dist/geoms/GeomRect.svelte.d.ts +7 -0
  138. package/dist/geoms/GeomRibbon.svelte +16 -0
  139. package/dist/geoms/GeomRibbon.svelte.d.ts +7 -0
  140. package/dist/geoms/GeomRug.svelte +21 -0
  141. package/dist/geoms/GeomRug.svelte.d.ts +7 -0
  142. package/dist/geoms/GeomRule.svelte +12 -0
  143. package/dist/geoms/GeomRule.svelte.d.ts +7 -0
  144. package/dist/geoms/GeomSegment.svelte +16 -0
  145. package/dist/geoms/GeomSegment.svelte.d.ts +7 -0
  146. package/dist/geoms/GeomSf.svelte +21 -0
  147. package/dist/geoms/GeomSf.svelte.d.ts +7 -0
  148. package/dist/geoms/GeomSfLabel.svelte +25 -0
  149. package/dist/geoms/GeomSfLabel.svelte.d.ts +7 -0
  150. package/dist/geoms/GeomSfText.svelte +25 -0
  151. package/dist/geoms/GeomSfText.svelte.d.ts +7 -0
  152. package/dist/geoms/GeomSmooth.svelte +25 -0
  153. package/dist/geoms/GeomSmooth.svelte.d.ts +7 -0
  154. package/dist/geoms/GeomSpoke.svelte +21 -0
  155. package/dist/geoms/GeomSpoke.svelte.d.ts +7 -0
  156. package/dist/geoms/GeomStep.svelte +12 -0
  157. package/dist/geoms/GeomStep.svelte.d.ts +7 -0
  158. package/dist/geoms/GeomText.svelte +12 -0
  159. package/dist/geoms/GeomText.svelte.d.ts +7 -0
  160. package/dist/geoms/GeomTile.svelte +21 -0
  161. package/dist/geoms/GeomTile.svelte.d.ts +7 -0
  162. package/dist/geoms/GeomViolin.svelte +25 -0
  163. package/dist/geoms/GeomViolin.svelte.d.ts +7 -0
  164. package/dist/geoms/GeomVline.svelte +12 -0
  165. package/dist/geoms/GeomVline.svelte.d.ts +7 -0
  166. package/dist/geoms/factory.svelte.d.ts +41 -0
  167. package/dist/geoms/factory.svelte.js +60 -0
  168. package/dist/geoms/registry.svelte.d.ts +71 -0
  169. package/dist/geoms/registry.svelte.js +177 -0
  170. package/dist/guides/GuideAxis.svelte +20 -0
  171. package/dist/guides/GuideAxis.svelte.d.ts +14 -0
  172. package/dist/guides/GuideColorbar.svelte +22 -0
  173. package/dist/guides/GuideColorbar.svelte.d.ts +13 -0
  174. package/dist/guides/GuideColorsteps.svelte +22 -0
  175. package/dist/guides/GuideColorsteps.svelte.d.ts +13 -0
  176. package/dist/guides/GuideLegend.svelte +90 -0
  177. package/dist/guides/GuideLegend.svelte.d.ts +37 -0
  178. package/dist/guides/GuideNone.svelte +19 -0
  179. package/dist/guides/GuideNone.svelte.d.ts +7 -0
  180. package/dist/guides/Guides.svelte +14 -0
  181. package/dist/guides/Guides.svelte.d.ts +13 -0
  182. package/dist/guides/factory.svelte.d.ts +36 -0
  183. package/dist/guides/factory.svelte.js +15 -0
  184. package/dist/index.d.ts +418 -0
  185. package/dist/index.js +376 -0
  186. package/dist/inspection/Inspect.svelte +71 -0
  187. package/dist/inspection/Inspect.svelte.d.ts +36 -0
  188. package/dist/inspection/Tooltip.svelte +439 -0
  189. package/dist/inspection/Tooltip.svelte.d.ts +32 -0
  190. package/dist/inspection/apply.d.ts +120 -0
  191. package/dist/inspection/apply.js +99 -0
  192. package/dist/inspection/coordinator.d.ts +51 -0
  193. package/dist/inspection/coordinator.js +354 -0
  194. package/dist/inspection/display-members.d.ts +1 -0
  195. package/dist/inspection/display-members.js +2 -0
  196. package/dist/inspection/frame.d.ts +90 -0
  197. package/dist/inspection/frame.js +76 -0
  198. package/dist/inspection/group-total.d.ts +1 -0
  199. package/dist/inspection/group-total.js +2 -0
  200. package/dist/inspection/inspect-guide-axes.d.ts +10 -0
  201. package/dist/inspection/inspect-guide-axes.js +24 -0
  202. package/dist/inspection/inspection-reconcile.svelte.d.ts +37 -0
  203. package/dist/inspection/inspection-reconcile.svelte.js +33 -0
  204. package/dist/inspection/inspection-state.svelte.d.ts +86 -0
  205. package/dist/inspection/inspection-state.svelte.js +347 -0
  206. package/dist/inspection/inspection-traversal.svelte.d.ts +29 -0
  207. package/dist/inspection/inspection-traversal.svelte.js +52 -0
  208. package/dist/inspection/pointer-inspect.d.ts +74 -0
  209. package/dist/inspection/pointer-inspect.js +158 -0
  210. package/dist/inspection/resolver.d.ts +3 -0
  211. package/dist/inspection/resolver.js +4 -0
  212. package/dist/inspection/teardown.d.ts +199 -0
  213. package/dist/inspection/teardown.js +181 -0
  214. package/dist/inspection/tooltip-chrome.d.ts +19 -0
  215. package/dist/inspection/tooltip-chrome.js +17 -0
  216. package/dist/inspection/tooltip-motion.d.ts +25 -0
  217. package/dist/inspection/tooltip-motion.js +32 -0
  218. package/dist/inspection/tooltip-presence.svelte.d.ts +49 -0
  219. package/dist/inspection/tooltip-presence.svelte.js +110 -0
  220. package/dist/inspection/tooltip-total.d.ts +1 -0
  221. package/dist/inspection/tooltip-total.js +2 -0
  222. package/dist/interaction/capability-resolution.svelte.d.ts +42 -0
  223. package/dist/interaction/capability-resolution.svelte.js +40 -0
  224. package/dist/interaction/capability.d.ts +129 -0
  225. package/dist/interaction/capability.js +134 -0
  226. package/dist/interaction/controller.svelte.d.ts +4 -0
  227. package/dist/interaction/controller.svelte.js +43 -0
  228. package/dist/interaction/inspect-geom-advisories.d.ts +10 -0
  229. package/dist/interaction/inspect-geom-advisories.js +10 -0
  230. package/dist/interaction/interaction-context.svelte.d.ts +57 -0
  231. package/dist/interaction/interaction-context.svelte.js +4 -0
  232. package/dist/interaction/interaction-diagnostics.d.ts +11 -0
  233. package/dist/interaction/interaction-diagnostics.js +173 -0
  234. package/dist/interaction/interaction-states.svelte.d.ts +84 -0
  235. package/dist/interaction/interaction-states.svelte.js +55 -0
  236. package/dist/interaction/interaction.d.ts +304 -0
  237. package/dist/interaction/interaction.js +7 -0
  238. package/dist/interaction/normalize-interaction-config.d.ts +9 -0
  239. package/dist/interaction/normalize-interaction-config.js +112 -0
  240. package/dist/interaction/reducer.d.ts +97 -0
  241. package/dist/interaction/reducer.js +117 -0
  242. package/dist/interaction/resolve-inspect-capability.d.ts +40 -0
  243. package/dist/interaction/resolve-inspect-capability.js +50 -0
  244. package/dist/interaction/scoped-store.svelte.d.ts +73 -0
  245. package/dist/interaction/scoped-store.svelte.js +93 -0
  246. package/dist/interaction/target.d.ts +91 -0
  247. package/dist/interaction/target.js +68 -0
  248. package/dist/interaction/transition-owner.d.ts +19 -0
  249. package/dist/interaction/transition-owner.js +10 -0
  250. package/dist/interaction/wiring-advisories.d.ts +33 -0
  251. package/dist/interaction/wiring-advisories.js +46 -0
  252. package/dist/interval/BoundsEditor.svelte +332 -0
  253. package/dist/interval/BoundsEditor.svelte.d.ts +10 -0
  254. package/dist/interval/bounds-editor.d.ts +1 -0
  255. package/dist/interval/bounds-editor.js +2 -0
  256. package/dist/interval/consumption.d.ts +1 -0
  257. package/dist/interval/consumption.js +2 -0
  258. package/dist/interval/interval-bounds-state.svelte.d.ts +53 -0
  259. package/dist/interval/interval-bounds-state.svelte.js +117 -0
  260. package/dist/interval/interval-state-helpers.d.ts +10 -0
  261. package/dist/interval/interval-state-helpers.js +34 -0
  262. package/dist/interval/interval-state.svelte.d.ts +60 -0
  263. package/dist/interval/interval-state.svelte.js +360 -0
  264. package/dist/interval/interval.d.ts +1 -0
  265. package/dist/interval/interval.js +2 -0
  266. package/dist/interval/precise-bounds.d.ts +1 -0
  267. package/dist/interval/precise-bounds.js +2 -0
  268. package/dist/interval/query.d.ts +1 -0
  269. package/dist/interval/query.js +2 -0
  270. package/dist/labs/Labs.svelte +29 -0
  271. package/dist/labs/Labs.svelte.d.ts +16 -0
  272. package/dist/layers/fold.d.ts +2 -0
  273. package/dist/layers/fold.js +1 -0
  274. package/dist/layers/grammar-families.d.ts +2 -0
  275. package/dist/layers/grammar-families.js +1 -0
  276. package/dist/layers/plot-layer-contract.d.ts +1 -0
  277. package/dist/layers/plot-layer-contract.js +29 -0
  278. package/dist/layers/plot-layer.svelte.d.ts +42 -0
  279. package/dist/layers/plot-layer.svelte.js +34 -0
  280. package/dist/layers/types.d.ts +2 -0
  281. package/dist/layers/types.js +1 -0
  282. package/dist/legend/Legend.svelte +24 -0
  283. package/dist/legend/Legend.svelte.d.ts +5 -0
  284. package/dist/legend/LegendFilters.svelte +196 -0
  285. package/dist/legend/LegendFilters.svelte.d.ts +8 -0
  286. package/dist/legend/LegendTargets.svelte +393 -0
  287. package/dist/legend/LegendTargets.svelte.d.ts +31 -0
  288. package/dist/legend/entry-key-index.d.ts +1 -0
  289. package/dist/legend/entry-key-index.js +2 -0
  290. package/dist/legend/entry-key-index.svelte.d.ts +34 -0
  291. package/dist/legend/entry-key-index.svelte.js +35 -0
  292. package/dist/legend/filter-state.svelte.d.ts +66 -0
  293. package/dist/legend/filter-state.svelte.js +284 -0
  294. package/dist/legend/filter.d.ts +1 -0
  295. package/dist/legend/filter.js +2 -0
  296. package/dist/legend/focus-emphasis.d.ts +72 -0
  297. package/dist/legend/focus-emphasis.js +91 -0
  298. package/dist/legend/focus-plans.d.ts +89 -0
  299. package/dist/legend/focus-plans.js +72 -0
  300. package/dist/legend/focus-reconcile.svelte.d.ts +53 -0
  301. package/dist/legend/focus-reconcile.svelte.js +113 -0
  302. package/dist/legend/focus-state.svelte.d.ts +73 -0
  303. package/dist/legend/focus-state.svelte.js +338 -0
  304. package/dist/legend/focus.d.ts +1 -0
  305. package/dist/legend/focus.js +2 -0
  306. package/dist/legend/resolve-legend-capability.d.ts +52 -0
  307. package/dist/legend/resolve-legend-capability.js +68 -0
  308. package/dist/legend/resolve-legend-filter.d.ts +65 -0
  309. package/dist/legend/resolve-legend-filter.js +54 -0
  310. package/dist/legend/resolve-legend-focus.d.ts +58 -0
  311. package/dist/legend/resolve-legend-focus.js +36 -0
  312. package/dist/legend/surface.d.ts +190 -0
  313. package/dist/legend/surface.js +158 -0
  314. package/dist/plot-engine-deriveds.svelte.d.ts +75 -0
  315. package/dist/plot-engine-deriveds.svelte.js +166 -0
  316. package/dist/plot-engine.svelte.d.ts +116 -0
  317. package/dist/plot-engine.svelte.js +316 -0
  318. package/dist/plot-props.d.ts +144 -0
  319. package/dist/plot-props.js +81 -0
  320. package/dist/runtime/announcer.svelte.d.ts +17 -0
  321. package/dist/runtime/announcer.svelte.js +28 -0
  322. package/dist/runtime/paint.d.ts +38 -0
  323. package/dist/runtime/paint.js +45 -0
  324. package/dist/runtime/resolve-datum-key.d.ts +53 -0
  325. package/dist/runtime/resolve-datum-key.js +73 -0
  326. package/dist/runtime/runtime.svelte.d.ts +37 -0
  327. package/dist/runtime/runtime.svelte.js +233 -0
  328. package/dist/runtime/semantic-candidate-projection.svelte.d.ts +29 -0
  329. package/dist/runtime/semantic-candidate-projection.svelte.js +137 -0
  330. package/dist/runtime/semantic-data-identity.d.ts +64 -0
  331. package/dist/runtime/semantic-data-identity.js +153 -0
  332. package/dist/runtime/semantic-keys-projection.d.ts +22 -0
  333. package/dist/runtime/semantic-keys-projection.js +40 -0
  334. package/dist/runtime/semantic-keys-resolve.d.ts +69 -0
  335. package/dist/runtime/semantic-keys-resolve.js +122 -0
  336. package/dist/runtime/semantic-keys.svelte.d.ts +30 -0
  337. package/dist/runtime/semantic-keys.svelte.js +69 -0
  338. package/dist/runtime/semantic-source-identity.d.ts +9 -0
  339. package/dist/runtime/semantic-source-identity.js +16 -0
  340. package/dist/scale/Scale.svelte +26 -0
  341. package/dist/scale/Scale.svelte.d.ts +21 -0
  342. package/dist/scale/ScaleAlphaBinned.svelte +14 -0
  343. package/dist/scale/ScaleAlphaBinned.svelte.d.ts +4 -0
  344. package/dist/scale/ScaleAlphaContinuous.svelte +14 -0
  345. package/dist/scale/ScaleAlphaContinuous.svelte.d.ts +4 -0
  346. package/dist/scale/ScaleAlphaDate.svelte +15 -0
  347. package/dist/scale/ScaleAlphaDate.svelte.d.ts +5 -0
  348. package/dist/scale/ScaleAlphaDatetime.svelte +15 -0
  349. package/dist/scale/ScaleAlphaDatetime.svelte.d.ts +5 -0
  350. package/dist/scale/ScaleAlphaDiscrete.svelte +14 -0
  351. package/dist/scale/ScaleAlphaDiscrete.svelte.d.ts +4 -0
  352. package/dist/scale/ScaleAlphaIdentity.svelte +14 -0
  353. package/dist/scale/ScaleAlphaIdentity.svelte.d.ts +4 -0
  354. package/dist/scale/ScaleAlphaManual.svelte +14 -0
  355. package/dist/scale/ScaleAlphaManual.svelte.d.ts +4 -0
  356. package/dist/scale/ScaleColorBinned.svelte +14 -0
  357. package/dist/scale/ScaleColorBinned.svelte.d.ts +3 -0
  358. package/dist/scale/ScaleColorBrewer.svelte +14 -0
  359. package/dist/scale/ScaleColorBrewer.svelte.d.ts +4 -0
  360. package/dist/scale/ScaleColorContinuous.svelte +14 -0
  361. package/dist/scale/ScaleColorContinuous.svelte.d.ts +4 -0
  362. package/dist/scale/ScaleColorDate.svelte +15 -0
  363. package/dist/scale/ScaleColorDate.svelte.d.ts +5 -0
  364. package/dist/scale/ScaleColorDatetime.svelte +15 -0
  365. package/dist/scale/ScaleColorDatetime.svelte.d.ts +5 -0
  366. package/dist/scale/ScaleColorDiscrete.svelte +14 -0
  367. package/dist/scale/ScaleColorDiscrete.svelte.d.ts +4 -0
  368. package/dist/scale/ScaleColorDistiller.svelte +14 -0
  369. package/dist/scale/ScaleColorDistiller.svelte.d.ts +4 -0
  370. package/dist/scale/ScaleColorFermenter.svelte +14 -0
  371. package/dist/scale/ScaleColorFermenter.svelte.d.ts +4 -0
  372. package/dist/scale/ScaleColorGradient.svelte +11 -0
  373. package/dist/scale/ScaleColorGradient.svelte.d.ts +4 -0
  374. package/dist/scale/ScaleColorGradient2.svelte +14 -0
  375. package/dist/scale/ScaleColorGradient2.svelte.d.ts +4 -0
  376. package/dist/scale/ScaleColorGradientn.svelte +14 -0
  377. package/dist/scale/ScaleColorGradientn.svelte.d.ts +4 -0
  378. package/dist/scale/ScaleColorGrey.svelte +11 -0
  379. package/dist/scale/ScaleColorGrey.svelte.d.ts +4 -0
  380. package/dist/scale/ScaleColorHue.svelte +11 -0
  381. package/dist/scale/ScaleColorHue.svelte.d.ts +4 -0
  382. package/dist/scale/ScaleColorIdentity.svelte +14 -0
  383. package/dist/scale/ScaleColorIdentity.svelte.d.ts +4 -0
  384. package/dist/scale/ScaleColorLog10.svelte +14 -0
  385. package/dist/scale/ScaleColorLog10.svelte.d.ts +4 -0
  386. package/dist/scale/ScaleColorManual.svelte +14 -0
  387. package/dist/scale/ScaleColorManual.svelte.d.ts +4 -0
  388. package/dist/scale/ScaleColorOrdinal.svelte +14 -0
  389. package/dist/scale/ScaleColorOrdinal.svelte.d.ts +3 -0
  390. package/dist/scale/ScaleColorSqrt.svelte +14 -0
  391. package/dist/scale/ScaleColorSqrt.svelte.d.ts +4 -0
  392. package/dist/scale/ScaleColorSteps.svelte +11 -0
  393. package/dist/scale/ScaleColorSteps.svelte.d.ts +4 -0
  394. package/dist/scale/ScaleColorSteps2.svelte +11 -0
  395. package/dist/scale/ScaleColorSteps2.svelte.d.ts +4 -0
  396. package/dist/scale/ScaleColorStepsn.svelte +11 -0
  397. package/dist/scale/ScaleColorStepsn.svelte.d.ts +4 -0
  398. package/dist/scale/ScaleColorViridisB.svelte +11 -0
  399. package/dist/scale/ScaleColorViridisB.svelte.d.ts +4 -0
  400. package/dist/scale/ScaleColorViridisC.svelte +11 -0
  401. package/dist/scale/ScaleColorViridisC.svelte.d.ts +4 -0
  402. package/dist/scale/ScaleColorViridisD.svelte +11 -0
  403. package/dist/scale/ScaleColorViridisD.svelte.d.ts +4 -0
  404. package/dist/scale/ScaleFillBinned.svelte +11 -0
  405. package/dist/scale/ScaleFillBinned.svelte.d.ts +3 -0
  406. package/dist/scale/ScaleFillBrewer.svelte +11 -0
  407. package/dist/scale/ScaleFillBrewer.svelte.d.ts +4 -0
  408. package/dist/scale/ScaleFillContinuous.svelte +14 -0
  409. package/dist/scale/ScaleFillContinuous.svelte.d.ts +4 -0
  410. package/dist/scale/ScaleFillDate.svelte +12 -0
  411. package/dist/scale/ScaleFillDate.svelte.d.ts +5 -0
  412. package/dist/scale/ScaleFillDatetime.svelte +15 -0
  413. package/dist/scale/ScaleFillDatetime.svelte.d.ts +5 -0
  414. package/dist/scale/ScaleFillDiscrete.svelte +14 -0
  415. package/dist/scale/ScaleFillDiscrete.svelte.d.ts +4 -0
  416. package/dist/scale/ScaleFillDistiller.svelte +14 -0
  417. package/dist/scale/ScaleFillDistiller.svelte.d.ts +4 -0
  418. package/dist/scale/ScaleFillFermenter.svelte +14 -0
  419. package/dist/scale/ScaleFillFermenter.svelte.d.ts +4 -0
  420. package/dist/scale/ScaleFillGradient.svelte +11 -0
  421. package/dist/scale/ScaleFillGradient.svelte.d.ts +4 -0
  422. package/dist/scale/ScaleFillGradient2.svelte +14 -0
  423. package/dist/scale/ScaleFillGradient2.svelte.d.ts +4 -0
  424. package/dist/scale/ScaleFillGradientn.svelte +14 -0
  425. package/dist/scale/ScaleFillGradientn.svelte.d.ts +4 -0
  426. package/dist/scale/ScaleFillGrey.svelte +11 -0
  427. package/dist/scale/ScaleFillGrey.svelte.d.ts +4 -0
  428. package/dist/scale/ScaleFillHue.svelte +11 -0
  429. package/dist/scale/ScaleFillHue.svelte.d.ts +4 -0
  430. package/dist/scale/ScaleFillIdentity.svelte +14 -0
  431. package/dist/scale/ScaleFillIdentity.svelte.d.ts +4 -0
  432. package/dist/scale/ScaleFillLog10.svelte +14 -0
  433. package/dist/scale/ScaleFillLog10.svelte.d.ts +4 -0
  434. package/dist/scale/ScaleFillManual.svelte +11 -0
  435. package/dist/scale/ScaleFillManual.svelte.d.ts +4 -0
  436. package/dist/scale/ScaleFillOrdinal.svelte +14 -0
  437. package/dist/scale/ScaleFillOrdinal.svelte.d.ts +3 -0
  438. package/dist/scale/ScaleFillSqrt.svelte +14 -0
  439. package/dist/scale/ScaleFillSqrt.svelte.d.ts +4 -0
  440. package/dist/scale/ScaleFillSteps.svelte +11 -0
  441. package/dist/scale/ScaleFillSteps.svelte.d.ts +4 -0
  442. package/dist/scale/ScaleFillSteps2.svelte +11 -0
  443. package/dist/scale/ScaleFillSteps2.svelte.d.ts +4 -0
  444. package/dist/scale/ScaleFillStepsn.svelte +11 -0
  445. package/dist/scale/ScaleFillStepsn.svelte.d.ts +4 -0
  446. package/dist/scale/ScaleFillViridisB.svelte +11 -0
  447. package/dist/scale/ScaleFillViridisB.svelte.d.ts +4 -0
  448. package/dist/scale/ScaleFillViridisC.svelte +11 -0
  449. package/dist/scale/ScaleFillViridisC.svelte.d.ts +4 -0
  450. package/dist/scale/ScaleFillViridisD.svelte +11 -0
  451. package/dist/scale/ScaleFillViridisD.svelte.d.ts +4 -0
  452. package/dist/scale/ScaleLinetypeBinned.svelte +15 -0
  453. package/dist/scale/ScaleLinetypeBinned.svelte.d.ts +4 -0
  454. package/dist/scale/ScaleLinetypeDiscrete.svelte +15 -0
  455. package/dist/scale/ScaleLinetypeDiscrete.svelte.d.ts +4 -0
  456. package/dist/scale/ScaleLinetypeIdentity.svelte +15 -0
  457. package/dist/scale/ScaleLinetypeIdentity.svelte.d.ts +4 -0
  458. package/dist/scale/ScaleLinetypeManual.svelte +15 -0
  459. package/dist/scale/ScaleLinetypeManual.svelte.d.ts +4 -0
  460. package/dist/scale/ScaleLinewidthBinned.svelte +14 -0
  461. package/dist/scale/ScaleLinewidthBinned.svelte.d.ts +4 -0
  462. package/dist/scale/ScaleLinewidthContinuous.svelte +14 -0
  463. package/dist/scale/ScaleLinewidthContinuous.svelte.d.ts +4 -0
  464. package/dist/scale/ScaleLinewidthDate.svelte +15 -0
  465. package/dist/scale/ScaleLinewidthDate.svelte.d.ts +5 -0
  466. package/dist/scale/ScaleLinewidthDatetime.svelte +15 -0
  467. package/dist/scale/ScaleLinewidthDatetime.svelte.d.ts +5 -0
  468. package/dist/scale/ScaleLinewidthDiscrete.svelte +14 -0
  469. package/dist/scale/ScaleLinewidthDiscrete.svelte.d.ts +4 -0
  470. package/dist/scale/ScaleLinewidthIdentity.svelte +14 -0
  471. package/dist/scale/ScaleLinewidthIdentity.svelte.d.ts +4 -0
  472. package/dist/scale/ScaleLinewidthManual.svelte +14 -0
  473. package/dist/scale/ScaleLinewidthManual.svelte.d.ts +4 -0
  474. package/dist/scale/ScaleRadius.svelte +11 -0
  475. package/dist/scale/ScaleRadius.svelte.d.ts +4 -0
  476. package/dist/scale/ScaleShapeBinned.svelte +15 -0
  477. package/dist/scale/ScaleShapeBinned.svelte.d.ts +4 -0
  478. package/dist/scale/ScaleShapeDiscrete.svelte +15 -0
  479. package/dist/scale/ScaleShapeDiscrete.svelte.d.ts +4 -0
  480. package/dist/scale/ScaleShapeIdentity.svelte +15 -0
  481. package/dist/scale/ScaleShapeIdentity.svelte.d.ts +4 -0
  482. package/dist/scale/ScaleShapeManual.svelte +15 -0
  483. package/dist/scale/ScaleShapeManual.svelte.d.ts +4 -0
  484. package/dist/scale/ScaleSizeArea.svelte +11 -0
  485. package/dist/scale/ScaleSizeArea.svelte.d.ts +4 -0
  486. package/dist/scale/ScaleSizeBinned.svelte +14 -0
  487. package/dist/scale/ScaleSizeBinned.svelte.d.ts +4 -0
  488. package/dist/scale/ScaleSizeBinnedArea.svelte +14 -0
  489. package/dist/scale/ScaleSizeBinnedArea.svelte.d.ts +4 -0
  490. package/dist/scale/ScaleSizeContinuous.svelte +14 -0
  491. package/dist/scale/ScaleSizeContinuous.svelte.d.ts +4 -0
  492. package/dist/scale/ScaleSizeDate.svelte +15 -0
  493. package/dist/scale/ScaleSizeDate.svelte.d.ts +5 -0
  494. package/dist/scale/ScaleSizeDatetime.svelte +15 -0
  495. package/dist/scale/ScaleSizeDatetime.svelte.d.ts +5 -0
  496. package/dist/scale/ScaleSizeDiscrete.svelte +14 -0
  497. package/dist/scale/ScaleSizeDiscrete.svelte.d.ts +4 -0
  498. package/dist/scale/ScaleSizeIdentity.svelte +14 -0
  499. package/dist/scale/ScaleSizeIdentity.svelte.d.ts +4 -0
  500. package/dist/scale/ScaleSizeManual.svelte +14 -0
  501. package/dist/scale/ScaleSizeManual.svelte.d.ts +4 -0
  502. package/dist/scale/ScaleXBinned.svelte +14 -0
  503. package/dist/scale/ScaleXBinned.svelte.d.ts +4 -0
  504. package/dist/scale/ScaleXContinuous.svelte +14 -0
  505. package/dist/scale/ScaleXContinuous.svelte.d.ts +4 -0
  506. package/dist/scale/ScaleXDate.svelte +12 -0
  507. package/dist/scale/ScaleXDate.svelte.d.ts +5 -0
  508. package/dist/scale/ScaleXDatetime.svelte +12 -0
  509. package/dist/scale/ScaleXDatetime.svelte.d.ts +5 -0
  510. package/dist/scale/ScaleXDiscrete.svelte +14 -0
  511. package/dist/scale/ScaleXDiscrete.svelte.d.ts +4 -0
  512. package/dist/scale/ScaleXLog10.svelte +14 -0
  513. package/dist/scale/ScaleXLog10.svelte.d.ts +4 -0
  514. package/dist/scale/ScaleXMonthDay.svelte +12 -0
  515. package/dist/scale/ScaleXMonthDay.svelte.d.ts +5 -0
  516. package/dist/scale/ScaleXReverse.svelte +15 -0
  517. package/dist/scale/ScaleXReverse.svelte.d.ts +4 -0
  518. package/dist/scale/ScaleXSqrt.svelte +14 -0
  519. package/dist/scale/ScaleXSqrt.svelte.d.ts +4 -0
  520. package/dist/scale/ScaleXTime.svelte +12 -0
  521. package/dist/scale/ScaleXTime.svelte.d.ts +5 -0
  522. package/dist/scale/ScaleYBinned.svelte +14 -0
  523. package/dist/scale/ScaleYBinned.svelte.d.ts +4 -0
  524. package/dist/scale/ScaleYContinuous.svelte +14 -0
  525. package/dist/scale/ScaleYContinuous.svelte.d.ts +4 -0
  526. package/dist/scale/ScaleYDate.svelte +12 -0
  527. package/dist/scale/ScaleYDate.svelte.d.ts +5 -0
  528. package/dist/scale/ScaleYDatetime.svelte +12 -0
  529. package/dist/scale/ScaleYDatetime.svelte.d.ts +5 -0
  530. package/dist/scale/ScaleYDiscrete.svelte +14 -0
  531. package/dist/scale/ScaleYDiscrete.svelte.d.ts +4 -0
  532. package/dist/scale/ScaleYLog10.svelte +14 -0
  533. package/dist/scale/ScaleYLog10.svelte.d.ts +4 -0
  534. package/dist/scale/ScaleYMonthDay.svelte +12 -0
  535. package/dist/scale/ScaleYMonthDay.svelte.d.ts +5 -0
  536. package/dist/scale/ScaleYReverse.svelte +15 -0
  537. package/dist/scale/ScaleYReverse.svelte.d.ts +4 -0
  538. package/dist/scale/ScaleYSqrt.svelte +14 -0
  539. package/dist/scale/ScaleYSqrt.svelte.d.ts +4 -0
  540. package/dist/scale/ScaleYTime.svelte +12 -0
  541. package/dist/scale/ScaleYTime.svelte.d.ts +5 -0
  542. package/dist/scene/Axis.svelte +159 -0
  543. package/dist/scene/Axis.svelte.d.ts +12 -0
  544. package/dist/scene/Batch.svelte +252 -0
  545. package/dist/scene/Batch.svelte.d.ts +23 -0
  546. package/dist/scene/InteractionOverlay.svelte +402 -0
  547. package/dist/scene/InteractionOverlay.svelte.d.ts +44 -0
  548. package/dist/scene/Legend.svelte +278 -0
  549. package/dist/scene/Legend.svelte.d.ts +8 -0
  550. package/dist/scene/MarkStrata.svelte +129 -0
  551. package/dist/scene/MarkStrata.svelte.d.ts +15 -0
  552. package/dist/scene/SceneOverlays.svelte +118 -0
  553. package/dist/scene/SceneOverlays.svelte.d.ts +49 -0
  554. package/dist/scene/SceneView.svelte +478 -0
  555. package/dist/scene/SceneView.svelte.d.ts +32 -0
  556. package/dist/scene/batch-presentation.svelte.d.ts +111 -0
  557. package/dist/scene/batch-presentation.svelte.js +207 -0
  558. package/dist/scene/geometry.d.ts +2 -0
  559. package/dist/scene/geometry.js +3 -0
  560. package/dist/scene/stratum-paint.d.ts +25 -0
  561. package/dist/scene/stratum-paint.js +40 -0
  562. package/dist/selection/selection-state.svelte.d.ts +23 -0
  563. package/dist/selection/selection-state.svelte.js +73 -0
  564. package/dist/selection/selection.d.ts +1 -0
  565. package/dist/selection/selection.js +2 -0
  566. package/dist/surface/CaptureSurface.svelte +109 -0
  567. package/dist/surface/CaptureSurface.svelte.d.ts +27 -0
  568. package/dist/surface/area-brush.d.ts +48 -0
  569. package/dist/surface/area-brush.js +44 -0
  570. package/dist/surface/brush-finish.d.ts +49 -0
  571. package/dist/surface/brush-finish.js +44 -0
  572. package/dist/surface/keyboard.d.ts +97 -0
  573. package/dist/surface/keyboard.js +105 -0
  574. package/dist/surface/pointer.d.ts +241 -0
  575. package/dist/surface/pointer.js +179 -0
  576. package/dist/surface/surface-description.d.ts +10 -0
  577. package/dist/surface/surface-description.js +11 -0
  578. package/dist/surface/surface-handlers.svelte.d.ts +53 -0
  579. package/dist/surface/surface-handlers.svelte.js +418 -0
  580. package/dist/surface/surface-state.svelte.d.ts +90 -0
  581. package/dist/surface/surface-state.svelte.js +161 -0
  582. package/dist/theme/Theme.svelte +27 -0
  583. package/dist/theme/Theme.svelte.d.ts +23 -0
  584. package/dist/theme/ThemeBase.svelte +13 -0
  585. package/dist/theme/ThemeBase.svelte.d.ts +8 -0
  586. package/dist/theme/ThemeBw.svelte +13 -0
  587. package/dist/theme/ThemeBw.svelte.d.ts +8 -0
  588. package/dist/theme/ThemeClassic.svelte +13 -0
  589. package/dist/theme/ThemeClassic.svelte.d.ts +8 -0
  590. package/dist/theme/ThemeClean.svelte +13 -0
  591. package/dist/theme/ThemeClean.svelte.d.ts +8 -0
  592. package/dist/theme/ThemeDark.svelte +13 -0
  593. package/dist/theme/ThemeDark.svelte.d.ts +8 -0
  594. package/dist/theme/ThemeDefault.svelte +13 -0
  595. package/dist/theme/ThemeDefault.svelte.d.ts +8 -0
  596. package/dist/theme/ThemeEconomist.svelte +13 -0
  597. package/dist/theme/ThemeEconomist.svelte.d.ts +8 -0
  598. package/dist/theme/ThemeEconomistwhite.svelte +13 -0
  599. package/dist/theme/ThemeEconomistwhite.svelte.d.ts +8 -0
  600. package/dist/theme/ThemeFew.svelte +13 -0
  601. package/dist/theme/ThemeFew.svelte.d.ts +8 -0
  602. package/dist/theme/ThemeFivethirtyeight.svelte +14 -0
  603. package/dist/theme/ThemeFivethirtyeight.svelte.d.ts +9 -0
  604. package/dist/theme/ThemeGgplot2.svelte +13 -0
  605. package/dist/theme/ThemeGgplot2.svelte.d.ts +8 -0
  606. package/dist/theme/ThemeGray.svelte +13 -0
  607. package/dist/theme/ThemeGray.svelte.d.ts +8 -0
  608. package/dist/theme/ThemeGrey.svelte +13 -0
  609. package/dist/theme/ThemeGrey.svelte.d.ts +8 -0
  610. package/dist/theme/ThemeHc.svelte +13 -0
  611. package/dist/theme/ThemeHc.svelte.d.ts +8 -0
  612. package/dist/theme/ThemeHcdark.svelte +13 -0
  613. package/dist/theme/ThemeHcdark.svelte.d.ts +8 -0
  614. package/dist/theme/ThemeHrbr.svelte +13 -0
  615. package/dist/theme/ThemeHrbr.svelte.d.ts +8 -0
  616. package/dist/theme/ThemeIgray.svelte +13 -0
  617. package/dist/theme/ThemeIgray.svelte.d.ts +8 -0
  618. package/dist/theme/ThemeLight.svelte +13 -0
  619. package/dist/theme/ThemeLight.svelte.d.ts +8 -0
  620. package/dist/theme/ThemeLinedraw.svelte +13 -0
  621. package/dist/theme/ThemeLinedraw.svelte.d.ts +8 -0
  622. package/dist/theme/ThemeMap.svelte +13 -0
  623. package/dist/theme/ThemeMap.svelte.d.ts +8 -0
  624. package/dist/theme/ThemeMinimal.svelte +13 -0
  625. package/dist/theme/ThemeMinimal.svelte.d.ts +8 -0
  626. package/dist/theme/ThemePander.svelte +13 -0
  627. package/dist/theme/ThemePander.svelte.d.ts +8 -0
  628. package/dist/theme/ThemeSolarized.svelte +13 -0
  629. package/dist/theme/ThemeSolarized.svelte.d.ts +8 -0
  630. package/dist/theme/ThemeSolarized2.svelte +13 -0
  631. package/dist/theme/ThemeSolarized2.svelte.d.ts +8 -0
  632. package/dist/theme/ThemeSolarized2dark.svelte +13 -0
  633. package/dist/theme/ThemeSolarized2dark.svelte.d.ts +8 -0
  634. package/dist/theme/ThemeSolarizeddark.svelte +14 -0
  635. package/dist/theme/ThemeSolarizeddark.svelte.d.ts +9 -0
  636. package/dist/theme/ThemeSolid.svelte +13 -0
  637. package/dist/theme/ThemeSolid.svelte.d.ts +8 -0
  638. package/dist/theme/ThemeStata.svelte +13 -0
  639. package/dist/theme/ThemeStata.svelte.d.ts +8 -0
  640. package/dist/theme/ThemeStatas1color.svelte +13 -0
  641. package/dist/theme/ThemeStatas1color.svelte.d.ts +8 -0
  642. package/dist/theme/ThemeTest.svelte +14 -0
  643. package/dist/theme/ThemeTest.svelte.d.ts +9 -0
  644. package/dist/theme/ThemeTufte.svelte +13 -0
  645. package/dist/theme/ThemeTufte.svelte.d.ts +8 -0
  646. package/dist/theme/ThemeVoid.svelte +14 -0
  647. package/dist/theme/ThemeVoid.svelte.d.ts +9 -0
  648. package/dist/theme/ThemeWsj.svelte +13 -0
  649. package/dist/theme/ThemeWsj.svelte.d.ts +8 -0
  650. package/dist/theme/factory.svelte.d.ts +36 -0
  651. package/dist/theme/factory.svelte.js +100 -0
  652. package/dist/zoom/zoom-state.svelte.d.ts +44 -0
  653. package/dist/zoom/zoom-state.svelte.js +121 -0
  654. package/dist/zoom/zoom.d.ts +1 -0
  655. package/dist/zoom/zoom.js +2 -0
  656. package/package.json +83 -0
@@ -0,0 +1,393 @@
1
+ <script lang="ts">
2
+ /**
3
+ * Interactive legend hit targets + clear control for GGPlot.
4
+ * Host owns focus state machine, key index, and commit/preview side effects.
5
+ * Clear anchors off the pressed legend box (see resolveClearControlLayout).
6
+ */
7
+ import {
8
+ CLEAR_HIDE_DELAY_MS,
9
+ shouldRevealClearControl,
10
+ type ClearControlLayout,
11
+ } from "../assembly/layout.js";
12
+ import type { InteractiveLegendEntry, LegendEntryIdentity } from "./focus.js";
13
+
14
+ const {
15
+ entries,
16
+ previewIdentity = null,
17
+ pressedIdentity = null,
18
+ rovingIndex = 0,
19
+ sceneWidth: _sceneWidth,
20
+ /** Retained for caller layout parity; Clear is legend-relative, not scene-corner. */
21
+ sceneHeight: _sceneHeight,
22
+ /** Scene-local Clear position; null hides the control (no pressed legend). */
23
+ clearLayout = null,
24
+ onPreviewIndex,
25
+ onPreviewClear,
26
+ onPointerDown,
27
+ onPointerUp,
28
+ onPointerCancel,
29
+ onFocus,
30
+ onBlur,
31
+ onClick,
32
+ onKeyDown,
33
+ onClearPointerDown,
34
+ onClearPointerCancel,
35
+ onClearClick,
36
+ }: {
37
+ entries: readonly InteractiveLegendEntry[];
38
+ previewIdentity?: LegendEntryIdentity | null;
39
+ pressedIdentity?: LegendEntryIdentity | null;
40
+ rovingIndex?: number;
41
+ sceneWidth: number;
42
+ sceneHeight: number;
43
+ clearLayout?: ClearControlLayout | null;
44
+ onPreviewIndex: (index: number, source: "pointer") => void;
45
+ onPreviewClear: () => void;
46
+ onPointerDown: (event: PointerEvent, index: number) => void;
47
+ onPointerUp: (event: PointerEvent, index: number) => void;
48
+ onPointerCancel: () => void;
49
+ onFocus: (index: number) => void;
50
+ onBlur: (event: FocusEvent) => void;
51
+ onClick: (event: MouseEvent, index: number) => void;
52
+ onKeyDown: (event: KeyboardEvent, index: number) => void;
53
+ onClearPointerDown: (pointerType: string) => void;
54
+ onClearPointerCancel: () => void;
55
+ onClearClick: (event: MouseEvent) => void;
56
+ } = $props();
57
+
58
+ /** Pointer or focus is inside legend targets / Clear chrome. */
59
+ let chromeActive = $state(false);
60
+ /** Hide delay elapsed after leave — Clear fades so screenshots stay clean. */
61
+ let hideElapsed = $state(false);
62
+ let hideTimer: ReturnType<typeof setTimeout> | null = null;
63
+
64
+ const clearVisible = $derived(
65
+ shouldRevealClearControl({
66
+ pressed: clearLayout !== null,
67
+ chromeActive,
68
+ hideElapsed,
69
+ }),
70
+ );
71
+
72
+ function clearHideTimer(): void {
73
+ if (hideTimer === null) return;
74
+ clearTimeout(hideTimer);
75
+ hideTimer = null;
76
+ }
77
+
78
+ function pinChrome(): void {
79
+ clearHideTimer();
80
+ chromeActive = true;
81
+ hideElapsed = false;
82
+ }
83
+
84
+ function scheduleHide(): void {
85
+ chromeActive = false;
86
+ clearHideTimer();
87
+ hideTimer = setTimeout(() => {
88
+ hideElapsed = true;
89
+ hideTimer = null;
90
+ }, CLEAR_HIDE_DELAY_MS);
91
+ }
92
+
93
+ /**
94
+ * Chrome uses pointer-events:none so plot hit-testing still works; enter/leave
95
+ * therefore fire on the interactive children (targets + Clear), not the wrapper.
96
+ * relatedTarget checks keep the pin alive while moving between those children.
97
+ */
98
+ function stillInsideChrome(
99
+ current: EventTarget | null,
100
+ next: EventTarget | null,
101
+ ): boolean {
102
+ return (
103
+ current instanceof Element &&
104
+ next instanceof Node &&
105
+ current.closest(".gg-legend-chrome")?.contains(next) === true
106
+ );
107
+ }
108
+
109
+ function onChromeChildPointerLeave(event: PointerEvent): void {
110
+ if (stillInsideChrome(event.currentTarget, event.relatedTarget)) return;
111
+ scheduleHide();
112
+ }
113
+
114
+ function onChromeFocusOut(event: FocusEvent): void {
115
+ if (stillInsideChrome(event.currentTarget, event.relatedTarget)) return;
116
+ scheduleHide();
117
+ }
118
+
119
+ // Track pressed-ness as a boolean so parent re-renders that rebuild the
120
+ // clearLayout object do not restart the hide clock or fight pinChrome.
121
+ const clearPressed = $derived(clearLayout !== null);
122
+
123
+ // On a fresh press with idle chrome (touch commit, no hover), start the hide
124
+ // clock. If the pointer is already over a target from the click, stay pinned
125
+ // until leave/blur calls scheduleHide.
126
+ $effect(() => {
127
+ if (!clearPressed) {
128
+ clearHideTimer();
129
+ hideElapsed = false;
130
+ return;
131
+ }
132
+ if (chromeActive) {
133
+ clearHideTimer();
134
+ hideElapsed = false;
135
+ return;
136
+ }
137
+ clearHideTimer();
138
+ hideTimer = setTimeout(() => {
139
+ hideElapsed = true;
140
+ hideTimer = null;
141
+ }, CLEAR_HIDE_DELAY_MS);
142
+ return () => {
143
+ clearHideTimer();
144
+ };
145
+ });
146
+
147
+ function sameIdentity(
148
+ left: LegendEntryIdentity | null | undefined,
149
+ right: LegendEntryIdentity,
150
+ ): boolean {
151
+ return (
152
+ left !== null &&
153
+ left !== undefined &&
154
+ left.scale === right.scale &&
155
+ left.entryIndex === right.entryIndex
156
+ );
157
+ }
158
+
159
+ function targetAriaLabel(target: InteractiveLegendEntry): string {
160
+ const scale = target.identity.scale;
161
+ const aesthetics = target.legend.aesthetics ?? [scale];
162
+ return `${target.legend.title || scale}: ${target.entry.fullLabel ?? target.entry.label} (${aesthetics.join(" + ")} legend)`;
163
+ }
164
+
165
+ function targetLeft(target: InteractiveLegendEntry): number {
166
+ return (
167
+ target.legend.x +
168
+ (target.legend.direction === "horizontal" ? (target.entry.x ?? 0) : 0)
169
+ );
170
+ }
171
+
172
+ function targetWidth(target: InteractiveLegendEntry, index: number): number {
173
+ if (target.legend.direction !== "horizontal")
174
+ return Math.max(24, target.legend.width);
175
+ const start = target.entry.x ?? 0;
176
+ const next = entries[index + 1];
177
+ const end =
178
+ next?.legend === target.legend && next.entry.y === target.entry.y
179
+ ? (next.entry.x ?? target.legend.width)
180
+ : target.legend.width;
181
+ return Math.max(24, end - start);
182
+ }
183
+ </script>
184
+
185
+ {#if entries.length > 0 || clearLayout !== null}
186
+ <div
187
+ class="gg-legend-chrome"
188
+ role="presentation"
189
+ onfocusin={pinChrome}
190
+ onfocusout={onChromeFocusOut}
191
+ >
192
+ {#if entries.length > 0}
193
+ <div
194
+ class="gg-legend-targets"
195
+ role="group"
196
+ aria-label="Interactive legends"
197
+ >
198
+ {#each entries as target, index (`${target.identity.scale}:${target.identity.entryIndex}`)}
199
+ <button
200
+ type="button"
201
+ class="gg-legend-target"
202
+ class:gg-legend-target-active={sameIdentity(
203
+ previewIdentity,
204
+ target.identity,
205
+ )}
206
+ aria-label={targetAriaLabel(target)}
207
+ aria-pressed={sameIdentity(pressedIdentity, target.identity)}
208
+ tabindex={index === rovingIndex ? 0 : -1}
209
+ data-gg-legend-target
210
+ data-index={index}
211
+ style:left={`${targetLeft(target)}px`}
212
+ style:top={`${target.legend.y + target.entry.y}px`}
213
+ style:width={`${targetWidth(target, index)}px`}
214
+ style:height={`${Math.max(24, target.entry.height ?? 24)}px`}
215
+ onpointerenter={(event) => {
216
+ pinChrome();
217
+ if (event.pointerType !== "touch")
218
+ onPreviewIndex(index, "pointer");
219
+ }}
220
+ onpointerleave={(event) => {
221
+ onPreviewClear();
222
+ onChromeChildPointerLeave(event);
223
+ }}
224
+ onpointerdown={(event) => onPointerDown(event, index)}
225
+ onpointerup={(event) => onPointerUp(event, index)}
226
+ onpointercancel={() => onPointerCancel()}
227
+ onfocus={() => onFocus(index)}
228
+ onblur={onBlur}
229
+ onclick={(event) => onClick(event, index)}
230
+ onkeydown={(event) => onKeyDown(event, index)}
231
+ >
232
+ <span class="gg-legend-target-label">{target.entry.label}</span>
233
+ </button>
234
+ {/each}
235
+ </div>
236
+ {/if}
237
+ {#if clearLayout !== null}
238
+ <!-- clearLayout gates visibility (pressed legend scale). Anchored relative to
239
+ the pressed legend box (below right stacks, beside bottom strips) so
240
+ title/swatch labels stay readable. Fades after idle so screenshots of a
241
+ committed series stay clean; reappears on legend chrome hover/focus.
242
+ Smoke baseline: interaction-legend-focus-committed-light.png. -->
243
+ <button
244
+ type="button"
245
+ class="gg-legend-clear"
246
+ class:gg-legend-clear-faded={!clearVisible}
247
+ aria-label="Clear legend focus"
248
+ aria-hidden={!clearVisible ? true : undefined}
249
+ tabindex={clearVisible ? 0 : -1}
250
+ style:left={`${clearLayout.left}px`}
251
+ style:top={`${clearLayout.top}px`}
252
+ onpointerenter={pinChrome}
253
+ onpointerleave={onChromeChildPointerLeave}
254
+ onpointerdown={(event) => onClearPointerDown(event.pointerType)}
255
+ onpointercancel={() => onClearPointerCancel()}
256
+ onclick={(event) => onClearClick(event)}>Clear</button
257
+ >
258
+ {/if}
259
+ </div>
260
+ {/if}
261
+
262
+ <style>
263
+ .gg-legend-chrome {
264
+ position: absolute;
265
+ inset: 0;
266
+ z-index: 5;
267
+ pointer-events: none;
268
+ }
269
+
270
+ .gg-legend-clear {
271
+ position: absolute;
272
+ z-index: 5;
273
+ display: inline-flex;
274
+ align-items: center;
275
+ justify-content: center;
276
+ /* Compact row — matches legend entry height (AA 24px), not a 44×44 slab. */
277
+ min-width: 24px;
278
+ min-height: 24px;
279
+ height: 24px;
280
+ margin: 0;
281
+ border: 1px solid
282
+ var(--gg-tooltipBorder, var(--gg-theme-tooltipBorder, currentColor));
283
+ border-radius: 0.2rem;
284
+ padding: 0 0.4rem;
285
+ background: var(
286
+ --gg-tooltipPaper,
287
+ var(
288
+ --gg-tooltip-background,
289
+ var(--gg-theme-tooltipPaper, var(--gg-paper, #fff))
290
+ )
291
+ );
292
+ color: var(
293
+ --gg-tooltipInk,
294
+ var(
295
+ --gg-tooltip-foreground,
296
+ var(--gg-theme-tooltipInk, var(--gg-ink, #1f2328))
297
+ )
298
+ );
299
+ font: 600 0.75rem/1 var(--gg-font-family, system-ui, sans-serif);
300
+ letter-spacing: -0.01em;
301
+ white-space: nowrap;
302
+ pointer-events: auto;
303
+ cursor: pointer;
304
+ opacity: 1;
305
+ transition: opacity 180ms ease;
306
+ }
307
+
308
+ .gg-legend-clear-faded {
309
+ opacity: 0;
310
+ pointer-events: none;
311
+ }
312
+
313
+ .gg-legend-clear:hover {
314
+ background: color-mix(
315
+ in srgb,
316
+ var(--gg-tooltipInk, var(--gg-theme-tooltipInk, var(--gg-ink, #1f2328)))
317
+ 6%,
318
+ var(
319
+ --gg-tooltipPaper,
320
+ var(--gg-theme-tooltipPaper, var(--gg-paper, #fff))
321
+ )
322
+ );
323
+ }
324
+
325
+ .gg-legend-targets {
326
+ position: absolute;
327
+ inset: 0;
328
+ z-index: 5;
329
+ pointer-events: none;
330
+ }
331
+
332
+ .gg-legend-target {
333
+ position: absolute;
334
+ min-width: 24px;
335
+ min-height: 24px;
336
+ margin: 0;
337
+ border: 1px solid transparent;
338
+ border-radius: 3px;
339
+ padding: 0;
340
+ background: transparent;
341
+ color: transparent;
342
+ pointer-events: auto;
343
+ touch-action: manipulation;
344
+ }
345
+
346
+ .gg-legend-target:hover,
347
+ .gg-legend-target-active,
348
+ .gg-legend-target[aria-pressed="true"] {
349
+ border-color: var(
350
+ --gg-interactionInk,
351
+ var(--gg-theme-interactionInk, currentColor)
352
+ );
353
+ background: color-mix(in srgb, currentColor 7%, transparent);
354
+ }
355
+
356
+ .gg-legend-target:focus-visible {
357
+ outline: 2px solid var(--gg-focusRing, var(--gg-theme-focusRing, Highlight));
358
+ outline-offset: -2px;
359
+ }
360
+
361
+ .gg-legend-clear:focus-visible {
362
+ outline: 2px solid var(--gg-focusRing, var(--gg-theme-focusRing, Highlight));
363
+ outline-offset: 2px;
364
+ }
365
+
366
+ @media (forced-colors: active) {
367
+ .gg-legend-target:hover,
368
+ .gg-legend-target-active,
369
+ .gg-legend-target[aria-pressed="true"] {
370
+ border-color: Highlight;
371
+ background: Canvas;
372
+ }
373
+
374
+ .gg-legend-clear {
375
+ border-color: ButtonText;
376
+ background: Canvas;
377
+ color: CanvasText;
378
+ }
379
+ }
380
+
381
+ /* Local sr-only for target labels (GGPlot keeps its own .gg-sr-only for other chrome). */
382
+ .gg-legend-target-label {
383
+ position: absolute;
384
+ width: 1px;
385
+ height: 1px;
386
+ padding: 0;
387
+ margin: -1px;
388
+ overflow: hidden;
389
+ clip-path: inset(50%);
390
+ white-space: nowrap;
391
+ border: 0;
392
+ }
393
+ </style>
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Interactive legend hit targets + clear control for GGPlot.
3
+ * Host owns focus state machine, key index, and commit/preview side effects.
4
+ * Clear anchors off the pressed legend box (see resolveClearControlLayout).
5
+ */
6
+ import { type ClearControlLayout } from "../assembly/layout.js";
7
+ import type { InteractiveLegendEntry, LegendEntryIdentity } from "./focus.js";
8
+ type $$ComponentProps = {
9
+ entries: readonly InteractiveLegendEntry[];
10
+ previewIdentity?: LegendEntryIdentity | null;
11
+ pressedIdentity?: LegendEntryIdentity | null;
12
+ rovingIndex?: number;
13
+ sceneWidth: number;
14
+ sceneHeight: number;
15
+ clearLayout?: ClearControlLayout | null;
16
+ onPreviewIndex: (index: number, source: "pointer") => void;
17
+ onPreviewClear: () => void;
18
+ onPointerDown: (event: PointerEvent, index: number) => void;
19
+ onPointerUp: (event: PointerEvent, index: number) => void;
20
+ onPointerCancel: () => void;
21
+ onFocus: (index: number) => void;
22
+ onBlur: (event: FocusEvent) => void;
23
+ onClick: (event: MouseEvent, index: number) => void;
24
+ onKeyDown: (event: KeyboardEvent, index: number) => void;
25
+ onClearPointerDown: (pointerType: string) => void;
26
+ onClearPointerCancel: () => void;
27
+ onClearClick: (event: MouseEvent) => void;
28
+ };
29
+ declare const LegendTargets: import("svelte").Component<$$ComponentProps, {}, "">;
30
+ type LegendTargets = ReturnType<typeof LegendTargets>;
31
+ export default LegendTargets;
@@ -0,0 +1 @@
1
+ export { type LegendKeyIndexAdapter, buildLegendEntryKeyIndexForPlot, buildLegendEntryKeyIndex, } from "@ggts-sh/core/interaction";
@@ -0,0 +1,2 @@
1
+ // Shared pure behavior used by React and Svelte.
2
+ export { buildLegendEntryKeyIndexForPlot, buildLegendEntryKeyIndex, } from "@ggts-sh/core/interaction";
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Legend entry → semantic-key index service.
3
+ *
4
+ * Owns the reactive index Map and keysForLegend lookup previously hosted on
5
+ * the semantic-key service (S13 access contract: reactive getters, not snapped
6
+ * Maps). Re-homes under legend/ so runtime/semantic-keys has zero legend
7
+ * imports (S16 ownership goal).
8
+ */
9
+ import type { RenderModel } from "@ggts-sh/core";
10
+ import type { LegendEntryAction } from "./focus.js";
11
+ export type LegendEntryKeyIndexDeps = {
12
+ /** Reactive model source (thunk so `$derived` tracks host model updates). */
13
+ model: () => RenderModel | null;
14
+ /**
15
+ * Per-row semantic key lookup. Hosts pass `semanticKeys.keyAt(i)` — not the
16
+ * public `semanticKey(row, index)` method (which needs the row record).
17
+ */
18
+ keyAt: (rowIndex: number) => PropertyKey | null;
19
+ };
20
+ /**
21
+ * Structural access surface consumed by legend-focus (and any host that needs
22
+ * the entry→key index without depending on the full semantic-key service).
23
+ */
24
+ export type LegendEntryKeyAccess = {
25
+ readonly legendEntryKeyIndex: ReadonlyMap<string, readonly PropertyKey[]>;
26
+ keysForLegend(action: LegendEntryAction): readonly PropertyKey[];
27
+ };
28
+ /**
29
+ * Create the legend entry-key index. Construction registers the `$derived.by`
30
+ * that rebuilds the index when `model` / `keyAt` reactive deps change.
31
+ * Call during host init at the same relative position the index used to occupy
32
+ * inside the semantic-key service (after semanticKeys, before inspection).
33
+ */
34
+ export declare function createLegendEntryKeyIndex(deps: LegendEntryKeyIndexDeps): LegendEntryKeyAccess;
@@ -0,0 +1,35 @@
1
+ import { buildLegendEntryKeyIndexForPlot } from "./entry-key-index.js";
2
+ import { keysForLegendEntry } from "./focus.js";
3
+ /**
4
+ * Create the legend entry-key index. Construction registers the `$derived.by`
5
+ * that rebuilds the index when `model` / `keyAt` reactive deps change.
6
+ * Call during host init at the same relative position the index used to occupy
7
+ * inside the semantic-key service (after semanticKeys, before inspection).
8
+ */
9
+ export function createLegendEntryKeyIndex(deps) {
10
+ const legendEntryKeyIndex = $derived.by(() => {
11
+ const model = deps.model();
12
+ return buildLegendEntryKeyIndexForPlot({
13
+ model: model === null
14
+ ? null
15
+ : {
16
+ scene: model.scene,
17
+ candidates: model.candidates,
18
+ layerFields: model.layerFields,
19
+ layerScaledConstants: model.layerScaledConstants,
20
+ lineage: model.lineage,
21
+ row: (rowIndex) => model.row(rowIndex),
22
+ },
23
+ semanticKey: (rowIndex) => deps.keyAt(rowIndex),
24
+ });
25
+ });
26
+ function keysForLegend(action) {
27
+ return keysForLegendEntry(legendEntryKeyIndex, action.identity);
28
+ }
29
+ return {
30
+ get legendEntryKeyIndex() {
31
+ return legendEntryKeyIndex;
32
+ },
33
+ keysForLegend,
34
+ };
35
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Legend-filter controller extracted from GGPlot for S2.
3
+ *
4
+ * Owns chart-local filter clauses, mode/capability reset effects, catalog
5
+ * reconciliation (phased registration), and toggle/reset side effects.
6
+ * Construction-time deriveds must NOT read `model` (declared later;
7
+ * construction-order DAG — model is used only from late catalog effects).
8
+ */
9
+ import type { RenderModel, SceneDiscreteLegend, SceneLegendEntry } from "@ggts-sh/core";
10
+ import type { PortableSpec } from "@ggts-sh/spec";
11
+ import { type LegendFilterClause, type LegendFilterEvent, type LegendFilterInput } from "./filter.js";
12
+ type ResolvedLegendFilterOptions = {
13
+ readonly mode: "exclude" | "include";
14
+ readonly multiple: boolean;
15
+ };
16
+ export type FilterableLegendEntry = {
17
+ readonly legend: SceneDiscreteLegend;
18
+ readonly entry: SceneLegendEntry;
19
+ readonly field: string;
20
+ readonly visible: boolean;
21
+ };
22
+ export type LegendFilterStateDeps = {
23
+ effectiveSpec: () => PortableSpec | null;
24
+ /** Raw prop; options are derived internally. */
25
+ legendFilterProp: () => LegendFilterInput;
26
+ onlegendfilter: () => ((event: LegendFilterEvent) => void) | undefined;
27
+ oninteraction: () => ((event: LegendFilterEvent) => void) | undefined;
28
+ /** Stable announce sink (not a getter). */
29
+ announce: (message: string) => void;
30
+ /**
31
+ * Used ONLY inside catalog effects (never at construction). Armed-getter
32
+ * construction tests enforce this construction-order DAG contract.
33
+ */
34
+ model: () => RenderModel | null;
35
+ /**
36
+ * Live filterable entries for catalog reconcile. May close over a later
37
+ * host `$derived` (handler/effect-only; not read at construction).
38
+ */
39
+ catalogEntries: () => readonly FilterableLegendEntry[];
40
+ };
41
+ export type LegendFilterState = {
42
+ readonly options: ResolvedLegendFilterOptions | null;
43
+ /** Effective clauses (capability-gated) — feeds the plot runtime getter. */
44
+ readonly filters: readonly LegendFilterClause[];
45
+ /**
46
+ * Reset-button condition: true when any local clause exists (not merely
47
+ * effective length — transient reconciliation can differ).
48
+ */
49
+ readonly hasActiveFilters: boolean;
50
+ computeEntries(model: RenderModel | null): FilterableLegendEntry[];
51
+ /**
52
+ * Toggle one legend entry. Returns the post-toggle visibility so the host
53
+ * can force the controlled checkbox DOM (Svelte's set_checked cache skips
54
+ * writes when its last value matches, and trusted clicks can mutate
55
+ * input.checked after the reactive flush).
56
+ */
57
+ toggle(target: FilterableLegendEntry, event: MouseEvent): boolean;
58
+ reset(event: MouseEvent): void;
59
+ setPointerType(type: string | null): void;
60
+ };
61
+ /**
62
+ * Create the legend-filter controller. Construction registers capability-reset,
63
+ * mode-reset, and catalog-reconcile effects (#627).
64
+ */
65
+ export declare function createLegendFilterState(deps: LegendFilterStateDeps): LegendFilterState;
66
+ export {};