@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,33 @@
1
+ import { applySceneInspectReconcile, planSceneInspectReconcile, } from "./teardown.js";
2
+ /**
3
+ * Register the coordinator-disposal + scene-run reconcile effects (formerly
4
+ * host-phased registerInspectionEffects — registered at construction, #627).
5
+ * Must be called synchronously during createInspectionState construction.
6
+ */
7
+ export function registerSceneInspectReconcile(ports) {
8
+ let reconciledRun = -1;
9
+ $effect(() => {
10
+ return () => {
11
+ ports.coordinatorInvalidate();
12
+ };
13
+ });
14
+ $effect(() => {
15
+ const currentModel = ports.model();
16
+ const plan = planSceneInspectReconcile({
17
+ inspectionEnabled: ports.inspectEnabled(),
18
+ // Thunk: do not read `inspection` on the same-run skip path so hover
19
+ // updates are not effect dependencies of scene-run reconcile.
20
+ getInspectionState: ports.getInspectionState,
21
+ modelRunId: currentModel?.runId ?? null,
22
+ reconciledRun,
23
+ });
24
+ // Thin plan → apply shell (#855); ports double as the apply bag.
25
+ applySceneInspectReconcile(plan, {
26
+ ...ports,
27
+ model: currentModel,
28
+ setReconciledRun(runId) {
29
+ reconciledRun = runId;
30
+ },
31
+ });
32
+ });
33
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Inspection controller (extracted from GGPlot). Owns inspection $state,
3
+ * seed/fingerprints/latch, deriveds, coordinator, resolve/emit helpers,
4
+ * public set/toggle/dismiss/close. Reconcile: inspection-reconcile.svelte.ts;
5
+ * traversal: inspection-traversal.svelte.ts; queue: pointer-inspect.ts. #627.
6
+ */
7
+ import type { CandidateFacts, CellValue } from "@ggts-sh/core";
8
+ import { type PanelBounds } from "../scene/geometry.js";
9
+ import type { InteractionContext } from "../interaction/interaction-context.svelte.js";
10
+ import type { createInteractionReducer } from "../interaction/reducer.js";
11
+ import type { InteractionSource, PlotInspectionChange } from "../interaction/interaction.js";
12
+ import { type PresentationInspectionFocus } from "../selection/selection.js";
13
+ import { type CancelPointerInspectPolicy, type InspectPointerFrameAction, type SchedulePointerInspectInput } from "./pointer-inspect.js";
14
+ import { type InspectionDismissPlan } from "./teardown.js";
15
+ /** Component-held reducer shape — factory-only export from interaction/reducer. */
16
+ type InteractionReducer = ReturnType<typeof createInteractionReducer>;
17
+ /**
18
+ * Inspection-specific ports beyond the shared InteractionContext. The reducer
19
+ * is hoisted by the assembly (constructed before this factory) so inspection
20
+ * does not close over surface.
21
+ */
22
+ export type InspectionStateOptions = {
23
+ /** Shared interaction reducer (concrete instance from the assembly). */
24
+ readonly reducer: InteractionReducer | (() => InteractionReducer);
25
+ readonly inspectEnabled: () => boolean;
26
+ readonly dataIdentityEpoch: () => string;
27
+ readonly plotId: () => string;
28
+ readonly clearTooltipHovered: () => void;
29
+ /** Stable sink over the announcer. */
30
+ readonly clearAnnouncement: () => void;
31
+ };
32
+ /** Panel geometry for crosshairs / keyboard clamp; id for scene lookups. */
33
+ type InspectionPanelBounds = PanelBounds & {
34
+ readonly id: string;
35
+ };
36
+ export type InspectionState = {
37
+ readonly inspection: PlotInspectionChange<Record<string, CellValue>, PropertyKey> | null;
38
+ readonly inspectionPanel: InspectionPanelBounds | null;
39
+ /** Seed candidate for presentation chrome (kind); not emitted on public events. */
40
+ readonly inspectionSeed: CandidateFacts | null;
41
+ /**
42
+ * Presentation focus for semantic masks / mute-siblings (#1080).
43
+ * Owned here so plot-engine does not re-assemble focus + seed fields.
44
+ */
45
+ readonly presentationFocus: PresentationInspectionFocus | null;
46
+ setInspection(candidate: CandidateFacts | null, source: InteractionSource, state?: "transient" | "pinned", concreteMode?: "exact" | "x" | "y" | "xy"): void;
47
+ toggleInspectionPin(source: InteractionSource): void;
48
+ /**
49
+ * Local dismiss only. Cross-module plan tails (clearBrush / returnToInspect)
50
+ * are applied by `applyInspectionDismissSideEffects` at the call site.
51
+ */
52
+ dismissInspection(kind: "escape" | "close", source: InteractionSource, opts?: {
53
+ restoreFocus?: boolean;
54
+ returnToInspect?: boolean;
55
+ }): InspectionDismissPlan;
56
+ closeInspection(source: InteractionSource, restoreFocus?: boolean): InspectionDismissPlan;
57
+ navigate(delta: number): void;
58
+ navigateDirection(dx: number, dy: number): void;
59
+ cycleCoincident(delta: number): void;
60
+ /** Blur-path reset; scene-reconcile does NOT reset the index. */
61
+ resetTraversalIndex(): void;
62
+ /**
63
+ * Schedule a coalesced pointer-inspect frame from pointer intent.
64
+ * Owns nearest/hitTest, queue payload+token, and reducer.queuePointer.
65
+ */
66
+ schedulePointerInspect(input: SchedulePointerInspectInput): void;
67
+ /**
68
+ * Cancel pending inspect schedule + clear queued payload.
69
+ * Does not cancel move-area (typed cancel on the reducer).
70
+ */
71
+ cancelPointerInspect(policy: CancelPointerInspectPolicy): void;
72
+ /**
73
+ * Reducer onPointerFrame inspect branch sink.
74
+ * Returns false when the frame is dropped so the reducer skips dispatch.
75
+ */
76
+ onInspectPointerFrame(action: InspectPointerFrameAction): boolean;
77
+ };
78
+ /**
79
+ * Create the inspection controller. Construction registers deriveds and the
80
+ * coordinator disposal + scene-reconcile effects (via the reconcile adapter).
81
+ *
82
+ * Construction-order note: deps must not be invoked during construction —
83
+ * construction-read discipline enforced by the armed-getter suite.
84
+ */
85
+ export declare function createInspectionState(context: InteractionContext, options: InspectionStateOptions): InspectionState;
86
+ export {};
@@ -0,0 +1,347 @@
1
+ import { panelBoundsFrom } from "../scene/geometry.js";
2
+ import { createInspectionCoordinator } from "./coordinator.js";
3
+ import { inspectionLiveText as inspectionLiveTextFor } from "../assembly/labels.js";
4
+ import { plotTooltipDomId } from "../assembly/layout.js";
5
+ import { presentationFocusFromInspection, } from "../selection/selection.js";
6
+ import { resolveInspectionCompleteness, resolveInspectionMode, resolveSetInspectionAction, resolveToggleInspectionPinAction, shouldAnnounceUnpin, shouldClearInspectionAnnouncement, shouldFocusPinnedInteractiveTooltip, } from "./apply.js";
7
+ import { createPointerInspectQueue, } from "./pointer-inspect.js";
8
+ import { planInspectionDismiss, resolveInspectionEmitAction, } from "./teardown.js";
9
+ import { registerSceneInspectReconcile } from "./inspection-reconcile.svelte.js";
10
+ import { createInspectionTraversal } from "./inspection-traversal.svelte.js";
11
+ function resolveReducer(reducer) {
12
+ return typeof reducer === "function" ? reducer() : reducer;
13
+ }
14
+ // ---------------------------------------------------------------------------
15
+ // Factory
16
+ // ---------------------------------------------------------------------------
17
+ /**
18
+ * Create the inspection controller. Construction registers deriveds and the
19
+ * coordinator disposal + scene-reconcile effects (via the reconcile adapter).
20
+ *
21
+ * Construction-order note: deps must not be invoked during construction —
22
+ * construction-read discipline enforced by the armed-getter suite.
23
+ */
24
+ export function createInspectionState(context, options) {
25
+ const reducerOf = () => resolveReducer(options.reducer);
26
+ let inspection = $state(null);
27
+ let inspectionSeed = null;
28
+ let lastInspectionFingerprint = "";
29
+ let activeCandidateId = null;
30
+ /** Same-candidate suppression after Escape of a *transient* inspection;
31
+ * cleared on re-apply, null-clear, and scene invalidate. */
32
+ let dismissedCandidateId = null;
33
+ let dismissedRunId = null;
34
+ function clearDismissedLatch() {
35
+ dismissedCandidateId = null;
36
+ dismissedRunId = null;
37
+ }
38
+ // Queue factory stores thunks only (armed-getter suite); setInspection is a
39
+ // hoisted declaration so the apply-pending re-entry closes correctly.
40
+ const pointerQueue = createPointerInspectQueue({
41
+ model: () => context.model(),
42
+ reducer: () => reducerOf(),
43
+ inspectionState: () => (inspection === null ? "none" : inspection.state),
44
+ setInspection: (candidate, source, state, concreteMode) => {
45
+ setInspection(candidate, source, state, concreteMode);
46
+ },
47
+ });
48
+ // Key off the snapshot's panelId (seed-authoritative), not focus.anchor (#787).
49
+ const inspectionPanel = $derived.by(() => {
50
+ if (inspection === null || context.model() === null)
51
+ return null;
52
+ const panelId = inspection.panelId;
53
+ if (panelId === null)
54
+ return null;
55
+ const viewportPanel = context.model().viewport.panel(panelId);
56
+ if (viewportPanel === null)
57
+ return null;
58
+ return { id: viewportPanel.id, ...panelBoundsFrom(viewportPanel.bounds) };
59
+ });
60
+ // Single owner for the presentation-focus shape (#1080); survives pin toggle.
61
+ const presentationFocus = $derived(presentationFocusFromInspection(inspection, inspectionSeed));
62
+ // Coordinator closes over keyAt — handler-only invocation (deferred).
63
+ const inspectionCoordinator = createInspectionCoordinator((index) => context.keyAt(index));
64
+ function resolveInspection(seed, source, state = "transient", concreteMode) {
65
+ const model = context.model();
66
+ if (model === null)
67
+ throw new Error("Cannot resolve inspection without a render model");
68
+ const requested = context.inspectConfig()?.mode ?? "auto";
69
+ const mode = resolveInspectionMode({
70
+ concreteMode,
71
+ requested,
72
+ seedAutoMode: seed.autoMode,
73
+ });
74
+ return inspectionCoordinator.resolve({
75
+ model,
76
+ seed,
77
+ mode,
78
+ state,
79
+ source,
80
+ identityEpoch: options.dataIdentityEpoch(),
81
+ layoutEpoch: model.runId,
82
+ completeness: resolveInspectionCompleteness({
83
+ state,
84
+ hasCustomContent: context.inspectConfig()?.content !== undefined,
85
+ hasInspectCallback: context.oninspect() !== undefined,
86
+ hasInteractionCallback: context.oninteraction() !== undefined,
87
+ }),
88
+ });
89
+ }
90
+ function emitInspection(next, semanticFingerprint) {
91
+ const emit = resolveInspectionEmitAction({
92
+ phase: next.phase,
93
+ source: next.source,
94
+ semanticFingerprint,
95
+ lastFingerprint: lastInspectionFingerprint,
96
+ });
97
+ if (emit.type === "skip")
98
+ return;
99
+ if (emit.updateFingerprint !== null)
100
+ lastInspectionFingerprint = emit.updateFingerprint;
101
+ context.oninspect()?.(next);
102
+ context.oninteraction()?.(next);
103
+ }
104
+ function inspectionLiveText(value) {
105
+ return inspectionLiveTextFor(context.model(), value);
106
+ }
107
+ function setInspection(candidate, source, state = "transient", concreteMode) {
108
+ // Announcement clear runs before priority gates (even ignored pinned requests).
109
+ if (shouldClearInspectionAnnouncement({
110
+ hasHit: candidate !== null,
111
+ source,
112
+ }))
113
+ options.clearAnnouncement();
114
+ // Direct applies must cancel queued hover/touch-move frames so a pending
115
+ // rAF cannot override the apply; pointer hover keeps the queue so frames
116
+ // coalesce.
117
+ if (source !== "pointer") {
118
+ pointerQueue.cancel({ pendingPinned: "preserve" });
119
+ }
120
+ const action = resolveSetInspectionAction({
121
+ hasHit: candidate !== null,
122
+ requestedState: state,
123
+ currentState: inspection === null ? "none" : inspection.state,
124
+ tooltipHovered: context.tooltipHovered(),
125
+ });
126
+ switch (action.type) {
127
+ case "ignore":
128
+ return;
129
+ case "clear": {
130
+ // Clear ends the session — discard orphan pending pin stash (#856).
131
+ pointerQueue.cancel({ pendingPinned: "discard" });
132
+ if (action.emitClear)
133
+ emitInspection({ type: "inspect", phase: "clear", source });
134
+ inspection = null;
135
+ inspectionSeed = null;
136
+ clearDismissedLatch();
137
+ inspectionCoordinator.release("transient");
138
+ return;
139
+ }
140
+ case "apply": {
141
+ // candidate is non-null when action is apply (pure gate).
142
+ const resolved = resolveInspection(candidate, source, state, concreteMode);
143
+ // Null resolve re-enters clear gates via setInspection(null, source).
144
+ if (resolved === null) {
145
+ setInspection(null, source);
146
+ return;
147
+ }
148
+ const runId = context.model()?.runId ?? 0;
149
+ // Same-candidate dismiss latch (Escape on transient).
150
+ if (dismissedCandidateId === resolved.seed.id &&
151
+ dismissedRunId === runId &&
152
+ state === "transient")
153
+ return;
154
+ if (dismissedCandidateId !== null && dismissedCandidateId !== resolved.seed.id)
155
+ clearDismissedLatch();
156
+ inspection = resolved.snapshot;
157
+ inspectionSeed = resolved.seed;
158
+ activeCandidateId = resolved.seed.id;
159
+ if (resolved.semanticChanged)
160
+ emitInspection(resolved.snapshot, resolved.semanticFingerprint);
161
+ }
162
+ }
163
+ }
164
+ function toggleInspectionPin(source) {
165
+ pointerQueue.cancel({ pendingPinned: "preserve" });
166
+ const pinAction = resolveToggleInspectionPinAction({
167
+ hasInspection: inspection !== null,
168
+ hasSeed: inspectionSeed !== null,
169
+ currentState: inspection?.state ?? "transient",
170
+ pending: pointerQueue.peekPendingPinned(),
171
+ });
172
+ if (pinAction.type === "ignore")
173
+ return;
174
+ switch (pinAction.type) {
175
+ case "restore-pending": {
176
+ // Consume stash (read+clear) so a second toggle cannot re-restore.
177
+ pointerQueue.takePendingPinned();
178
+ inspectionCoordinator.release("pinned");
179
+ inspection = null;
180
+ inspectionSeed = null;
181
+ setInspection(pinAction.pending.candidate, pinAction.pending.source, "transient", pinAction.pending.concreteMode);
182
+ return;
183
+ }
184
+ case "flip": {
185
+ const nextState = pinAction.state;
186
+ const resolved = resolveInspection(inspectionSeed, source, nextState, inspection.mode);
187
+ if (resolved === null)
188
+ return;
189
+ inspection = resolved.snapshot;
190
+ inspectionSeed = resolved.seed;
191
+ if (nextState === "transient")
192
+ inspectionCoordinator.release("pinned");
193
+ if (shouldAnnounceUnpin({ state: nextState, source }))
194
+ context.announce(`${inspectionLiveText(resolved.snapshot)}, unpinned`);
195
+ if (resolved.semanticChanged)
196
+ emitInspection(resolved.snapshot, resolved.semanticFingerprint);
197
+ if (shouldFocusPinnedInteractiveTooltip({
198
+ state: nextState,
199
+ contentMode: context.inspectConfig()?.contentMode,
200
+ }))
201
+ queueMicrotask(() => context
202
+ .root()
203
+ ?.querySelector(`#${CSS.escape(plotTooltipDomId(options.plotId()))}`)
204
+ ?.focus());
205
+ }
206
+ }
207
+ }
208
+ /** Shared dismiss path; Escape also cancels area, close does not. */
209
+ function dismissInspection(kind, source, opts = {}) {
210
+ const plan = planInspectionDismiss({
211
+ kind,
212
+ hasInspection: inspection !== null,
213
+ ...(opts.restoreFocus !== undefined && {
214
+ restoreFocus: opts.restoreFocus,
215
+ }),
216
+ ...(opts.returnToInspect !== undefined && {
217
+ returnToInspect: opts.returnToInspect,
218
+ }),
219
+ });
220
+ // discard policy already clears pending pin stash — no second clear.
221
+ pointerQueue.cancel({
222
+ pendingPinned: plan.clearPendingPinned ? "discard" : "preserve",
223
+ });
224
+ // Latch only when dismissing a *transient* inspection (Escape path).
225
+ if (inspection?.state === "transient" && inspectionSeed !== null) {
226
+ dismissedCandidateId = inspectionSeed.id;
227
+ dismissedRunId = context.model()?.runId ?? null;
228
+ }
229
+ else if (inspection?.state === "pinned") {
230
+ clearDismissedLatch();
231
+ }
232
+ // Real Escape cancels area + bumps epoch; close does not.
233
+ if (kind === "escape")
234
+ reducerOf().dispatch({ type: "escape", source });
235
+ if (plan.emitClear)
236
+ emitInspection({ type: "inspect", phase: "clear", source });
237
+ inspection = null;
238
+ inspectionSeed = null;
239
+ if (plan.clearTooltipHovered)
240
+ options.clearTooltipHovered();
241
+ if (plan.coordinator === "invalidate")
242
+ inspectionCoordinator.invalidate();
243
+ else
244
+ inspectionCoordinator.release("pinned");
245
+ // Cross-module clearBrush/returnToInspect: caller applies the plan tail.
246
+ if (plan.restoreFocus)
247
+ queueMicrotask(() => context.captureSurface()?.focus());
248
+ return plan;
249
+ }
250
+ function closeInspection(source, restoreFocus = true) {
251
+ return dismissInspection("close", source, { restoreFocus });
252
+ }
253
+ // Candidate traversal lives in inspection-traversal.svelte.ts; the
254
+ // activeCandidateId cursor stays here, exposed via live get/set ports.
255
+ const traversal = createInspectionTraversal({
256
+ model: () => context.model(),
257
+ hasInspection: () => inspection !== null,
258
+ getActiveCandidateId: () => activeCandidateId,
259
+ setActiveCandidateId: (id) => {
260
+ activeCandidateId = id;
261
+ },
262
+ applyCandidate: (candidate) => {
263
+ setInspection(candidate, "keyboard", "transient");
264
+ },
265
+ });
266
+ function schedulePointerInspect(input) {
267
+ pointerQueue.schedule(input);
268
+ }
269
+ function cancelPointerInspect(policy) {
270
+ pointerQueue.cancel(policy);
271
+ }
272
+ function onInspectPointerFrame(action) {
273
+ return pointerQueue.onFrame(action);
274
+ }
275
+ // Coordinator disposal + scene-run reconcile: registration fn invoked during
276
+ // construction (formerly host-phased registerInspectionEffects, #627).
277
+ registerSceneInspectReconcile({
278
+ model: () => context.model(),
279
+ inspectEnabled: () => options.inspectEnabled(),
280
+ dataIdentityEpoch: options.dataIdentityEpoch,
281
+ getInspectionState: () => (inspection === null ? "none" : inspection.state),
282
+ clearInspection: () => {
283
+ inspection = null;
284
+ inspectionSeed = null;
285
+ },
286
+ setInspectionFromReconcile: ({ snapshot, seed }) => {
287
+ inspection = snapshot;
288
+ inspectionSeed = seed;
289
+ },
290
+ setActiveCandidateId: (id) => {
291
+ activeCandidateId = id;
292
+ },
293
+ clearDismissedLatch,
294
+ dispatchSceneInvalidate: () => {
295
+ reducerOf().dispatch({ type: "invalidate", reason: "scene" });
296
+ },
297
+ cancelPointerDiscardPending: () => {
298
+ pointerQueue.cancel({ pendingPinned: "discard" });
299
+ },
300
+ clearPointerForSceneInvalidate: () => {
301
+ pointerQueue.clearForSceneInvalidate();
302
+ },
303
+ coordinatorInvalidate: () => {
304
+ inspectionCoordinator.invalidate();
305
+ },
306
+ releaseTransient: () => {
307
+ inspectionCoordinator.release("transient");
308
+ },
309
+ reconcilePinned: (input) => inspectionCoordinator.reconcilePinned({
310
+ ...input,
311
+ source: "programmatic",
312
+ completeness: "complete",
313
+ }),
314
+ emitClearProgrammatic: () => {
315
+ emitInspection({ type: "inspect", phase: "clear", source: "programmatic" });
316
+ },
317
+ emitSemanticChange: (snapshot, semanticFingerprint) => {
318
+ emitInspection(snapshot, semanticFingerprint);
319
+ },
320
+ });
321
+ return {
322
+ get inspection() {
323
+ return inspection;
324
+ },
325
+ get inspectionPanel() {
326
+ return inspectionPanel;
327
+ },
328
+ /** Internal seed for presentation chrome (kind); not part of the public inspection event. */
329
+ get inspectionSeed() {
330
+ return inspectionSeed;
331
+ },
332
+ get presentationFocus() {
333
+ return presentationFocus;
334
+ },
335
+ setInspection,
336
+ toggleInspectionPin,
337
+ dismissInspection,
338
+ closeInspection,
339
+ navigate: traversal.navigate,
340
+ navigateDirection: traversal.navigateDirection,
341
+ cycleCoincident: traversal.cycleCoincident,
342
+ resetTraversalIndex: traversal.resetTraversalIndex,
343
+ schedulePointerInspect,
344
+ cancelPointerInspect,
345
+ onInspectPointerFrame,
346
+ };
347
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Candidate traversal (keyboard candidate navigation) extracted from
3
+ * inspection-state.svelte.ts for S5 (plan §4).
4
+ *
5
+ * The factory receives live accessors only — the model that owns the
6
+ * candidate store, the live inspection-presence check, and the traversal
7
+ * cursor (activeCandidateId) get/set — and applies candidates through the
8
+ * host's `applyCandidate` action. It owns NO mutable state: the cursor stays
9
+ * in the inspection-state lexical owner and is re-read on every call, never
10
+ * cached or snapshotted.
11
+ */
12
+ import type { CandidateFacts, RenderModel } from "@ggts-sh/core";
13
+ export type InspectionTraversalPorts = {
14
+ /** Candidate-store authority — re-read per call, never cached. */
15
+ readonly model: () => RenderModel | null;
16
+ /** Live inspection presence (directional/cycle start behavior). */
17
+ readonly hasInspection: () => boolean;
18
+ readonly getActiveCandidateId: () => number | null;
19
+ readonly setActiveCandidateId: (id: number | null) => void;
20
+ /** Apply a candidate — host routes to setInspection("keyboard", "transient"). */
21
+ readonly applyCandidate: (candidate: CandidateFacts) => void;
22
+ };
23
+ export declare function createInspectionTraversal(ports: InspectionTraversalPorts): {
24
+ applyCandidateId: (id: number | null) => void;
25
+ navigate: (delta: number) => void;
26
+ navigateDirection: (dx: number, dy: number) => void;
27
+ cycleCoincident: (delta: number) => void;
28
+ resetTraversalIndex: () => void;
29
+ };
@@ -0,0 +1,52 @@
1
+ export function createInspectionTraversal(ports) {
2
+ function applyCandidateId(id) {
3
+ if (id === null)
4
+ return;
5
+ const candidate = ports.model()?.candidates.candidate(id);
6
+ if (candidate === null || candidate === undefined)
7
+ return;
8
+ ports.setActiveCandidateId(id);
9
+ ports.applyCandidate(candidate);
10
+ }
11
+ function navigate(delta) {
12
+ const store = ports.model()?.candidates;
13
+ if (store === undefined || store.size === 0)
14
+ return;
15
+ const direction = delta < 0 ? "previous" : "next";
16
+ applyCandidateId(store.traverse(ports.getActiveCandidateId(), direction, Math.abs(delta)));
17
+ }
18
+ function navigateDirection(dx, dy) {
19
+ const store = ports.model()?.candidates;
20
+ if (store === undefined || store.size === 0)
21
+ return;
22
+ // Live read + local snapshot per call so the store sees the narrowed id.
23
+ const current = ports.getActiveCandidateId();
24
+ if (!ports.hasInspection() || current === null) {
25
+ applyCandidateId(store.traverse(current, "next"));
26
+ return;
27
+ }
28
+ const direction = dx < 0 ? "left" : dx > 0 ? "right" : dy < 0 ? "up" : dy > 0 ? "down" : "next";
29
+ applyCandidateId(store.traverse(current, direction));
30
+ }
31
+ function cycleCoincident(delta) {
32
+ const store = ports.model()?.candidates;
33
+ if (store === undefined || store.size === 0)
34
+ return;
35
+ const current = ports.getActiveCandidateId();
36
+ if (!ports.hasInspection() || current === null) {
37
+ applyCandidateId(store.traverse(current, "next"));
38
+ return;
39
+ }
40
+ applyCandidateId(store.cycle(current, delta));
41
+ }
42
+ function resetTraversalIndex() {
43
+ ports.setActiveCandidateId(null);
44
+ }
45
+ return {
46
+ applyCandidateId,
47
+ navigate,
48
+ navigateDirection,
49
+ cycleCoincident,
50
+ resetTraversalIndex,
51
+ };
52
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Pointer-inspect queue ownership for InspectionState.
3
+ *
4
+ * Owns queued payload + frame token + pending-pin stash, nearest schedule,
5
+ * typed cancel, and onInspectPointerFrame routing. Pure frame tables stay in
6
+ * frame.ts; the host owns $state inspection snapshot, setInspection, dismiss,
7
+ * and scene-reconcile orchestration.
8
+ *
9
+ * Construction must not invoke deps.model / deps.reducer / deps.setInspection
10
+ * (armed-getter construction discipline on the host factory).
11
+ *
12
+ * onFrame may re-enter the host via setInspection (apply-pending). Snapshot
13
+ * then clear queue fields before pure routing so re-entrant cancel sees empty
14
+ * queue fields — load-bearing for touch-tap override of a pending rAF.
15
+ */
16
+ import type { CandidateFacts, RenderModel } from "@ggts-sh/core";
17
+ import type { InteractionAction, InteractionFrameToken } from "../interaction/reducer.js";
18
+ import type { InteractionSource } from "../interaction/interaction.js";
19
+ import { type InspectionHostState, type QueuedPointerInspection } from "./frame.js";
20
+ /** Intent for a coalesced pointer-inspect frame (nearest lookup owned here). */
21
+ export type SchedulePointerInspectInput = {
22
+ readonly point: Readonly<{
23
+ x: number;
24
+ y: number;
25
+ }>;
26
+ readonly source: InteractionSource;
27
+ readonly mode: "auto" | "exact" | "x" | "y" | "xy";
28
+ readonly maxDistance: number;
29
+ };
30
+ /** Cancel policy for pending pointer-inspect work. */
31
+ export type CancelPointerInspectPolicy = {
32
+ /** Leave/clear: discard stash. Cancel/down/blur tool paths: preserve. */
33
+ readonly pendingPinned: "preserve" | "discard";
34
+ };
35
+ /** Inspect frame action delivered to onPointerFrame (non-move-area branch). */
36
+ export type InspectPointerFrameAction = Extract<InteractionAction, {
37
+ type: "inspect";
38
+ }>;
39
+ /** Reducer methods the queue touches (host may pass a getter). */
40
+ type PointerInspectReducer = {
41
+ frameToken(): InteractionFrameToken;
42
+ accepts(token: InteractionFrameToken): boolean;
43
+ queuePointer(action: Extract<InteractionAction, {
44
+ type: "inspect" | "move-area";
45
+ }>): void;
46
+ cancelScheduledPointer(kind?: "inspect" | "move-area"): void;
47
+ };
48
+ export type PointerInspectQueueDeps = {
49
+ model: () => RenderModel | null;
50
+ reducer: () => PointerInspectReducer;
51
+ /** Host: `inspection === null ? "none" : inspection.state`. */
52
+ inspectionState: () => InspectionHostState;
53
+ setInspection: (candidate: CandidateFacts | null, source: InteractionSource, state?: "transient" | "pinned", concreteMode?: "exact" | "x" | "y" | "xy") => void;
54
+ };
55
+ export type PointerInspectQueue = {
56
+ schedule(input: SchedulePointerInspectInput): void;
57
+ cancel(policy: CancelPointerInspectPolicy): void;
58
+ onFrame(action: InspectPointerFrameAction): boolean;
59
+ /** Read-only peek for pin-toggle gates. */
60
+ peekPendingPinned(): QueuedPointerInspection | null;
61
+ /** Read+clear for restore-pending. */
62
+ takePendingPinned(): QueuedPointerInspection | null;
63
+ /**
64
+ * Scene invalidate-* path: clear queue fields only.
65
+ * Caller owns reducer.dispatch({ type: "invalidate" }) which already cancels
66
+ * all scheduled pointer work — do not call cancelScheduledPointer here.
67
+ */
68
+ clearForSceneInvalidate(): void;
69
+ };
70
+ /**
71
+ * Create the pointer-inspect queue. Does not invoke deps at construction.
72
+ */
73
+ export declare function createPointerInspectQueue(deps: PointerInspectQueueDeps): PointerInspectQueue;
74
+ export {};