@fallen-8/studio 0.0.32

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 (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -0
  3. package/dist-lib/Canvas3D-C5og4ZIQ.js +62011 -0
  4. package/dist-lib/F8GraphCanvas-Db7vzDtJ.js +11085 -0
  5. package/dist-lib/abap-Bs8kvjsq.js +1398 -0
  6. package/dist-lib/apex-Dspwrl5m.js +326 -0
  7. package/dist-lib/azcli-k1BiOau1.js +68 -0
  8. package/dist-lib/bat-BIP72KWc.js +100 -0
  9. package/dist-lib/bicep-VhQeYhS3.js +102 -0
  10. package/dist-lib/cameligo-DnuAXtHg.js +174 -0
  11. package/dist-lib/canvas.js +13 -0
  12. package/dist-lib/clojure-BAuDPsal.js +761 -0
  13. package/dist-lib/coffee-BV06qSnj.js +232 -0
  14. package/dist-lib/cpp-Cz8Jeyrf.js +389 -0
  15. package/dist-lib/csharp-F6hhlXFb.js +326 -0
  16. package/dist-lib/csp-KzlEHCyI.js +53 -0
  17. package/dist-lib/css-e4FKntZ3.js +187 -0
  18. package/dist-lib/cssMode-Czf2vRA3.js +1571 -0
  19. package/dist-lib/cypher-CpvDGKRr.js +263 -0
  20. package/dist-lib/dart-DdHeFWR0.js +281 -0
  21. package/dist-lib/dockerfile-aoNXDcio.js +130 -0
  22. package/dist-lib/ecl-C4Q0DYuA.js +456 -0
  23. package/dist-lib/elixir-C9X42b0T.js +569 -0
  24. package/dist-lib/f8-studio.css +1 -0
  25. package/dist-lib/f8-studio.js +16 -0
  26. package/dist-lib/flow9-Bff42pfB.js +142 -0
  27. package/dist-lib/freemarker2-BtInkOsd.js +989 -0
  28. package/dist-lib/fsharp-C6vPAsHG.js +217 -0
  29. package/dist-lib/go-DEr8zx9f.js +218 -0
  30. package/dist-lib/graphql-BiNBBRFh.js +151 -0
  31. package/dist-lib/handlebars-UwZ7mBGA.js +419 -0
  32. package/dist-lib/hcl-2T9lKuFg.js +183 -0
  33. package/dist-lib/html-BXX93YIe.js +308 -0
  34. package/dist-lib/htmlMode-BCqQu1PO.js +1581 -0
  35. package/dist-lib/index-DFm6T7Un.js +132450 -0
  36. package/dist-lib/ini-CZGtssYM.js +71 -0
  37. package/dist-lib/java-B260NeH3.js +232 -0
  38. package/dist-lib/javascript-CK1z7Ynl.js +70 -0
  39. package/dist-lib/jsonMode-C4Q3fVvV.js +1996 -0
  40. package/dist-lib/julia-kuNLM9c5.js +511 -0
  41. package/dist-lib/kotlin-Bz6kAefA.js +253 -0
  42. package/dist-lib/less-AZUtS89I.js +162 -0
  43. package/dist-lib/lexon-BcmgnyRb.js +157 -0
  44. package/dist-lib/liquid-BnCUERBj.js +240 -0
  45. package/dist-lib/lua-Dz1RbATg.js +162 -0
  46. package/dist-lib/m3-CIMooLFn.js +210 -0
  47. package/dist-lib/markdown-C1BsCK9P.js +229 -0
  48. package/dist-lib/mdx-D2enmFMs.js +165 -0
  49. package/dist-lib/mips-BovsnfLQ.js +198 -0
  50. package/dist-lib/msdax-CiRB2ZB-.js +375 -0
  51. package/dist-lib/mysql-BwdpPE19.js +878 -0
  52. package/dist-lib/objective-c-D4nfHfso.js +183 -0
  53. package/dist-lib/pascal--j5-PYtz.js +251 -0
  54. package/dist-lib/pascaligo-C7TcJxNL.js +164 -0
  55. package/dist-lib/perl-BzEWqUb5.js +626 -0
  56. package/dist-lib/pgsql-B_KZ0mGX.js +851 -0
  57. package/dist-lib/php-A19QHzQV.js +500 -0
  58. package/dist-lib/pla-COeKY1hA.js +137 -0
  59. package/dist-lib/postiats-BfMp7zJL.js +907 -0
  60. package/dist-lib/powerquery-B0TS_5Gb.js +890 -0
  61. package/dist-lib/powershell-5jSbKdYB.js +239 -0
  62. package/dist-lib/protobuf-YgnOutn3.js +420 -0
  63. package/dist-lib/pug-DLej6kn5.js +402 -0
  64. package/dist-lib/python-DJvSF53q.js +301 -0
  65. package/dist-lib/qsharp-AhjqtSHB.js +301 -0
  66. package/dist-lib/r-D-F4P80w.js +243 -0
  67. package/dist-lib/razor-RerkagjP.js +550 -0
  68. package/dist-lib/redis-hwwIlMnV.js +302 -0
  69. package/dist-lib/redshift-Bcm_kjEG.js +809 -0
  70. package/dist-lib/restructuredtext-CrdzfPP-.js +174 -0
  71. package/dist-lib/ruby-QC2UNm1s.js +511 -0
  72. package/dist-lib/rust-5aqiQ3L5.js +343 -0
  73. package/dist-lib/sb-B1g1ZfLJ.js +115 -0
  74. package/dist-lib/scala-C2U4R5Gb.js +370 -0
  75. package/dist-lib/scheme-DeFRbslr.js +108 -0
  76. package/dist-lib/scss-RSTCiCmI.js +262 -0
  77. package/dist-lib/shell-BpF-iNu8.js +221 -0
  78. package/dist-lib/solidity-C00r2mbQ.js +1367 -0
  79. package/dist-lib/sophia-DVW5ZKDB.js +199 -0
  80. package/dist-lib/sparql-B0nmpxeX.js +201 -0
  81. package/dist-lib/sql-CJwKPERn.js +853 -0
  82. package/dist-lib/st-DPlKG5DT.js +416 -0
  83. package/dist-lib/swift-YZBAbVHV.js +309 -0
  84. package/dist-lib/systemverilog-CDQSaH63.js +576 -0
  85. package/dist-lib/tcl-Dlu8sp6Q.js +232 -0
  86. package/dist-lib/tsMode-C-6d-f_-.js +886 -0
  87. package/dist-lib/twig-C5TO7-kw.js +392 -0
  88. package/dist-lib/types/api/changefeed.d.ts +113 -0
  89. package/dist-lib/types/api/client.d.ts +81 -0
  90. package/dist-lib/types/api/endpoints.d.ts +197 -0
  91. package/dist-lib/types/api/queries.d.ts +8 -0
  92. package/dist-lib/types/api/types.d.ts +1032 -0
  93. package/dist-lib/types/app/AppShell.d.ts +10 -0
  94. package/dist-lib/types/app/NamespaceScope.d.ts +11 -0
  95. package/dist-lib/types/app/applyStudioConfig.d.ts +18 -0
  96. package/dist-lib/types/app/mount.d.ts +19 -0
  97. package/dist-lib/types/app/nav.d.ts +91 -0
  98. package/dist-lib/types/app/routes.d.ts +9 -0
  99. package/dist-lib/types/app/studioConfig.d.ts +106 -0
  100. package/dist-lib/types/canvas/Canvas2D.d.ts +18 -0
  101. package/dist-lib/types/canvas/Canvas3D.d.ts +14 -0
  102. package/dist-lib/types/canvas/ConnectPanel.d.ts +10 -0
  103. package/dist-lib/types/canvas/FindPanel.d.ts +14 -0
  104. package/dist-lib/types/canvas/GraphCanvas.d.ts +66 -0
  105. package/dist-lib/types/canvas/StylePanel.d.ts +7 -0
  106. package/dist-lib/types/canvas/eclipse.d.ts +136 -0
  107. package/dist-lib/types/canvas/imageAssets.d.ts +3 -0
  108. package/dist-lib/types/canvas/styleConfig.d.ts +48 -0
  109. package/dist-lib/types/canvas/styleEngine.d.ts +125 -0
  110. package/dist-lib/types/canvas/styling.d.ts +15 -0
  111. package/dist-lib/types/components/AdjacencyPanel.d.ts +11 -0
  112. package/dist-lib/types/components/AnalyticsRunner.d.ts +1 -0
  113. package/dist-lib/types/components/ConfigurationPanel.d.ts +1 -0
  114. package/dist-lib/types/components/ConfirmDialog.d.ts +18 -0
  115. package/dist-lib/types/components/DurabilityNotice.d.ts +18 -0
  116. package/dist-lib/types/components/ElementDetail.d.ts +11 -0
  117. package/dist-lib/types/components/ElementTable.d.ts +19 -0
  118. package/dist-lib/types/components/EmbeddingsTab.d.ts +15 -0
  119. package/dist-lib/types/components/ErrorBox.d.ts +8 -0
  120. package/dist-lib/types/components/EventFeedBell.d.ts +16 -0
  121. package/dist-lib/types/components/EventFeedPanel.d.ts +10 -0
  122. package/dist-lib/types/components/Field.d.ts +14 -0
  123. package/dist-lib/types/components/GraphShapePanel.d.ts +1 -0
  124. package/dist-lib/types/components/InspectLink.d.ts +5 -0
  125. package/dist-lib/types/components/ListCapNote.d.ts +10 -0
  126. package/dist-lib/types/components/MutationsPanel.d.ts +1 -0
  127. package/dist-lib/types/components/NamespaceSwitcher.d.ts +22 -0
  128. package/dist-lib/types/components/NamespacesPanel.d.ts +11 -0
  129. package/dist-lib/types/components/NeighborhoodPreview.d.ts +10 -0
  130. package/dist-lib/types/components/PluginsPanel.d.ts +9 -0
  131. package/dist-lib/types/components/PropertiesTab.d.ts +4 -0
  132. package/dist-lib/types/components/PropertyListEditor.d.ts +26 -0
  133. package/dist-lib/types/components/SampleGraphsPanel.d.ts +3 -0
  134. package/dist-lib/types/components/SectionHelp.d.ts +11 -0
  135. package/dist-lib/types/components/SemanticBlockEditor.d.ts +29 -0
  136. package/dist-lib/types/components/SemanticQueryEditor.d.ts +15 -0
  137. package/dist-lib/types/components/SettingRow.d.ts +15 -0
  138. package/dist-lib/types/components/Stat.d.ts +10 -0
  139. package/dist-lib/types/components/StoredQueriesPanel.d.ts +14 -0
  140. package/dist-lib/types/components/StoredQueryControls.d.ts +29 -0
  141. package/dist-lib/types/components/Truncated.d.ts +17 -0
  142. package/dist-lib/types/components/TruncationBadge.d.ts +6 -0
  143. package/dist-lib/types/components/TypedLiteralEditor.d.ts +13 -0
  144. package/dist-lib/types/components/VertexFilterSlot.d.ts +25 -0
  145. package/dist-lib/types/delegate/DelegateEditor.d.ts +10 -0
  146. package/dist-lib/types/delegate/DelegateSlot.d.ts +18 -0
  147. package/dist-lib/types/delegate/editorOptions.d.ts +25 -0
  148. package/dist-lib/types/delegate/kinds.d.ts +19 -0
  149. package/dist-lib/types/delegate/markers.d.ts +21 -0
  150. package/dist-lib/types/delegate/monacoSetup.d.ts +3 -0
  151. package/dist-lib/types/delegate/nl/NlAssistPanel.d.ts +10 -0
  152. package/dist-lib/types/delegate/nl/NlBackendConfig.d.ts +12 -0
  153. package/dist-lib/types/delegate/nl/NlDraftList.d.ts +42 -0
  154. package/dist-lib/types/delegate/nl/config.d.ts +105 -0
  155. package/dist-lib/types/delegate/nl/feedback.d.ts +30 -0
  156. package/dist-lib/types/delegate/nl/format.d.ts +6 -0
  157. package/dist-lib/types/delegate/nl/generate.d.ts +57 -0
  158. package/dist-lib/types/delegate/nl/prompt.d.ts +21 -0
  159. package/dist-lib/types/delegate/nl/useNlRun.d.ts +24 -0
  160. package/dist-lib/types/delegate/providers.d.ts +26 -0
  161. package/dist-lib/types/delegate/snippets.d.ts +25 -0
  162. package/dist-lib/types/embed/F8GraphCanvas.d.ts +37 -0
  163. package/dist-lib/types/embed/canvas.d.ts +23 -0
  164. package/dist-lib/types/embed/index.d.ts +14 -0
  165. package/dist-lib/types/firstrun/FirstRunOverlay.d.ts +10 -0
  166. package/dist-lib/types/firstrun/FirstRunShow.d.ts +22 -0
  167. package/dist-lib/types/firstrun/beats.d.ts +23 -0
  168. package/dist-lib/types/firstrun/firstRunStore.d.ts +38 -0
  169. package/dist-lib/types/firstrun/mockGraph.d.ts +56 -0
  170. package/dist-lib/types/firstrun/useBeatTimeline.d.ts +35 -0
  171. package/dist-lib/types/firstrun/useReducedMotion.d.ts +7 -0
  172. package/dist-lib/types/instances/registry.d.ts +83 -0
  173. package/dist-lib/types/instances/types.d.ts +49 -0
  174. package/dist-lib/types/lib/canvasCap.d.ts +7 -0
  175. package/dist-lib/types/lib/connectPaths.d.ts +55 -0
  176. package/dist-lib/types/lib/embeddingProperties.d.ts +6 -0
  177. package/dist-lib/types/lib/fieldHelp.d.ts +139 -0
  178. package/dist-lib/types/lib/format.d.ts +16 -0
  179. package/dist-lib/types/lib/hydrate.d.ts +37 -0
  180. package/dist-lib/types/lib/indexCapabilities.d.ts +17 -0
  181. package/dist-lib/types/lib/jsonlGraph.d.ts +42 -0
  182. package/dist-lib/types/lib/listCaps.d.ts +48 -0
  183. package/dist-lib/types/lib/literals.d.ts +36 -0
  184. package/dist-lib/types/lib/namespaceName.d.ts +10 -0
  185. package/dist-lib/types/lib/neighborhood.d.ts +37 -0
  186. package/dist-lib/types/lib/patternValidation.d.ts +12 -0
  187. package/dist-lib/types/lib/restartCopy.d.ts +11 -0
  188. package/dist-lib/types/lib/sampleLoader.d.ts +95 -0
  189. package/dist-lib/types/lib/samples.d.ts +87 -0
  190. package/dist-lib/types/lib/sbomGraph.d.ts +58 -0
  191. package/dist-lib/types/lib/sectionHelp.d.ts +39 -0
  192. package/dist-lib/types/lib/semantic.d.ts +95 -0
  193. package/dist-lib/types/lib/storedQueries.d.ts +43 -0
  194. package/dist-lib/types/lib/truncate.d.ts +34 -0
  195. package/dist-lib/types/lib/truncation.d.ts +7 -0
  196. package/dist-lib/types/lib/vector.d.ts +13 -0
  197. package/dist-lib/types/main.d.ts +1 -0
  198. package/dist-lib/types/plugin/PluginEditor.d.ts +20 -0
  199. package/dist-lib/types/plugin/nl/PluginNlAssistPanel.d.ts +13 -0
  200. package/dist-lib/types/plugin/nl/pluginPrompt.d.ts +48 -0
  201. package/dist-lib/types/plugin/scaffolds.d.ts +26 -0
  202. package/dist-lib/types/screens/AnalyticsScreen.d.ts +8 -0
  203. package/dist-lib/types/screens/BenchmarkScreen.d.ts +1 -0
  204. package/dist-lib/types/screens/BrowserScreen.d.ts +6 -0
  205. package/dist-lib/types/screens/CanvasScreen.d.ts +10 -0
  206. package/dist-lib/types/screens/ConnectScreen.d.ts +1 -0
  207. package/dist-lib/types/screens/DashboardScreen.d.ts +13 -0
  208. package/dist-lib/types/screens/IndexesScreen.d.ts +8 -0
  209. package/dist-lib/types/screens/IntegrationsScreen.d.ts +14 -0
  210. package/dist-lib/types/screens/KnowledgeScreen.d.ts +1 -0
  211. package/dist-lib/types/screens/PathScreen.d.ts +9 -0
  212. package/dist-lib/types/screens/PluginsScreen.d.ts +1 -0
  213. package/dist-lib/types/screens/QueryScreen.d.ts +1 -0
  214. package/dist-lib/types/screens/SamplesScreen.d.ts +7 -0
  215. package/dist-lib/types/screens/SaveGamesScreen.d.ts +7 -0
  216. package/dist-lib/types/screens/SubgraphScreen.d.ts +1 -0
  217. package/dist-lib/types/state/eventFeed.d.ts +63 -0
  218. package/dist-lib/types/state/feedFilter.d.ts +42 -0
  219. package/dist-lib/types/state/graphShape.d.ts +37 -0
  220. package/dist-lib/types/state/instanceStore.d.ts +280 -0
  221. package/dist-lib/types/state/integrations.d.ts +25 -0
  222. package/dist-lib/types/state/liveFeed.d.ts +37 -0
  223. package/dist-lib/types/state/scopeKey.d.ts +8 -0
  224. package/dist-lib/types/state/status.d.ts +21 -0
  225. package/dist-lib/typescript-aCo3H3H0.js +343 -0
  226. package/dist-lib/typespec-BsmjDEu7.js +117 -0
  227. package/dist-lib/vb-ChHvIDrk.js +372 -0
  228. package/dist-lib/wgsl-XEp1ju8c.js +439 -0
  229. package/dist-lib/xml-CSt-F-dl.js +95 -0
  230. package/dist-lib/yaml-kSsc3ru_.js +206 -0
  231. package/package.json +98 -0
@@ -0,0 +1,136 @@
1
+ /** Node radius (px) floor so a small or distant node still shows a visible corona. */
2
+ export declare const ECLIPSE_MIN_RADIUS = 9;
3
+ /** Clamp a raw on-screen node radius (px) up to the visible floor. */
4
+ export declare function eclipseRadius(rawRadius: number): number;
5
+ /**
6
+ * 3d-force-graph's default `nodeRelSize`: the world-space radius it renders per unit of
7
+ * `cbrt(val)`. Named because it is the anchor of every px-to-world conversion on the 3D canvas,
8
+ * and a second copy of it would silently decouple the sphere from the sprite drawn over it.
9
+ */
10
+ export declare const NODE_REL_SIZE = 4;
11
+ /**
12
+ * World-space sphere radius for a node value: `cbrt(val) * NODE_REL_SIZE`, collapsing a
13
+ * non-positive value to 0.
14
+ *
15
+ * That floor is where this DIVERGES from the library on purpose. three-forcegraph reads a falsy
16
+ * `nodeVal` as 1 (`valAccessor(node) || 1`), so it would report the DEFAULT radius for val 0 and
17
+ * a negative radius for val below 0 - it is not even self-consistent, clamping with
18
+ * `Math.max(0, val || 1)` on its arrow path but not on its sphere path. Sizing the hover corona
19
+ * off a value the scene cannot honour is worse than sizing it off 0. Unreachable in practice:
20
+ * resolveMagnitudes rejects a non-positive configured magnitude, so a resolved size is always
21
+ * positive; this stays a floor, not a live divergence.
22
+ */
23
+ export declare function worldRadiusForVal(val: number): number;
24
+ /**
25
+ * Screen-space radius (px) of a sphere of world radius `worldRadius`, seen at camera `distance`
26
+ * through a perspective camera of vertical field of view `fovDeg`, in a viewport `viewportHeight`
27
+ * px tall. Closer or larger spheres project bigger; a non-positive distance (camera on the node)
28
+ * yields 0 rather than a divide-by-zero.
29
+ */
30
+ export declare function perspectiveScreenRadius(distance: number, worldRadius: number, fovDeg: number, viewportHeight: number): number;
31
+ /**
32
+ * A 2D node radius in px as a 3d-force-graph node value. `nodeVal` is proportional to sphere
33
+ * VOLUME, so cubing the ratio is what keeps a 3D radius proportional to its 2D counterpart:
34
+ * substituting into `worldRadiusForVal` gives `size * NODE_REL_SIZE / NODE_SIZE_DEFAULT`, making
35
+ * the divisor the constant of proportionality between world units and pixels (0.8 today).
36
+ *
37
+ * The divisor is therefore the DEFAULT node size, never the configured `nodeSize`. Dividing by the
38
+ * configured value would normalise the host's knob away: `nodeSize: 20` would render in 3D exactly
39
+ * like the default while 2D grew fourfold, which is the opposite of keeping the renderers coupled.
40
+ */
41
+ export declare function sizeToVal(size: number): number;
42
+ /**
43
+ * Sprite edge length per px of 2D radius: an image node's sprite spans the DIAMETER of the sphere
44
+ * it replaces. Derived from the same anchor as `sizeToVal` so the two cannot drift, and exactly
45
+ * the 1.6 this was written as before (`(2 * 4) / 5` is the same double as the literal).
46
+ */
47
+ export declare const SPRITE_SCALE_PER_PX: number;
48
+ /** three.js PerspectiveCamera's default vertical field of view, in degrees. */
49
+ export declare const DEFAULT_FOV = 50;
50
+ /**
51
+ * Default fit inset in px: what the 3D mount auto-fit has always used, and the frame
52
+ * `getCameraRatio` measures against until a fit picks another.
53
+ */
54
+ export declare const FIT_PADDING_PX = 60;
55
+ /**
56
+ * SIGMA. The camera ratio that frames the whole graph with `paddingPx` of viewport margin.
57
+ *
58
+ * Under `autoRescale` sigma projects the normalised graph through `min(w, h) - 2 * stagePadding` px
59
+ * and then divides by the camera ratio (`matrixFromCamera`), so the quotient of those two spans is
60
+ * the zoom that turns one framing into the other. Asking for the padding already in effect returns
61
+ * exactly 1, which is what a camera reset does, so the default path is a plain reset.
62
+ *
63
+ * Padding is expressed as a ZOOM rather than by writing sigma's `stagePadding` setting, and the two
64
+ * are not interchangeable: `stagePadding` reframes without touching element sizes, whereas a camera
65
+ * ratio also divides every node radius and edge width by `sqrt(ratio)` (`scaleSize`). Zooming is the
66
+ * honest reading of "leave more margin" - a user's wheel-zoom does exactly the same - and it stays
67
+ * transient camera state rather than mutating a persistent setting and forcing a re-index. Label
68
+ * text does NOT shrink with it (`labelSize` is used verbatim), so a fit with a large inset makes
69
+ * labels relatively larger. A host that wants margin WITHOUT a zoom should size its own container.
70
+ *
71
+ * One consequence to know: far enough out, sigma's `minEdgeThickness` floor (Canvas2D sets it)
72
+ * catches ordinary and path-overlay edges alike, so the path's extra WIDTH stops reading. Its colour
73
+ * and its node sizes still do, which is why the overlay stays legible rather than invisible.
74
+ *
75
+ * Padding is clamped because it is a divisor sigma never validates: at 390x100 an unclamped 60 px
76
+ * request yields a NEGATIVE ratio, which renders the graph mirrored. The clamp never bites the stage
77
+ * padding itself, so the omitted-argument case is still exactly 1.
78
+ */
79
+ export declare function fitCameraRatio(viewport: {
80
+ width: number;
81
+ height: number;
82
+ }, stagePadding: number, paddingPx: number | undefined): number;
83
+ /**
84
+ * 3D-FORCE-GRAPH. Camera distance FROM THE WORLD ORIGIN at which the whole node cloud just fits a
85
+ * `viewportWidth` x `viewportHeight` frame inset by `paddingPx`, seen through a perspective camera
86
+ * of vertical field of view `fovDeg`. This is the distance `zoomToFit` parks at, so dividing the
87
+ * live camera distance by it gives a ratio that is 1 exactly when the graph fits.
88
+ *
89
+ * Reproduced from three-render-objects' `fitToBbox`, including three things a from-scratch
90
+ * derivation would get "right" and thereby wrong:
91
+ * - the extent is measured from the ORIGIN, not the cloud's centroid, so an off-centre graph pulls
92
+ * the camera further back (the library re-aims at the origin when it fits),
93
+ * - the divisor is `atan(paddedFov)` rather than the correct `2 * tan(paddedFov / 2)`, which is why
94
+ * this disagrees with `perspectiveScreenRadius` above: that one must match what WebGL projects,
95
+ * this one must match where the library moves,
96
+ * - a node contributes its rendered radius, links and arrowheads nothing outside that hull.
97
+ *
98
+ * Returns 0 for "no fit is defined": no placed node, zero extent, a zero-size viewport, or a
99
+ * padding eating at least half the height, which is where `fitToBbox` itself goes to Infinity.
100
+ */
101
+ export declare function graphFitDistance(nodes: Iterable<{
102
+ val: number;
103
+ x?: number;
104
+ y?: number;
105
+ z?: number;
106
+ }>, fovDeg: number, viewportWidth: number, viewportHeight: number, paddingPx: number): number;
107
+ /**
108
+ * `position` moved to sit `distance` from the origin along the same direction: the move a fit
109
+ * makes, at a chosen distance. A camera exactly on the origin has no direction to preserve and
110
+ * goes to +z, where the library's own initial camera sits.
111
+ */
112
+ export declare function scaleCameraDistance(position: {
113
+ x: number;
114
+ y: number;
115
+ z: number;
116
+ }, distance: number): {
117
+ x: number;
118
+ y: number;
119
+ z: number;
120
+ };
121
+ /**
122
+ * A host-supplied fit inset brought inside what the 3D renderer can honour. Padding is a divisor
123
+ * there too, and the library does NOT guard it: `paddedFov = (1 - 2 * padding / height) * fov`, so
124
+ * a padding of exactly half the height sends the fit distance to Infinity and more than half sends
125
+ * it NEGATIVE, and `fitToBbox` only rejects a distance below zero - it parks the camera at Infinity
126
+ * quite happily. The 0.4 ceiling matches the 2D clamp and leaves a fifth of the field of view.
127
+ */
128
+ export declare function clampFitPadding(paddingPx: number, viewportHeight: number): number;
129
+ /** A fit tween length: non-finite or negative means the default, and `floorMs` is the renderer's
130
+ * own lower bound (sigma divides by the duration, so it cannot take 0; three.js treats 0 as
131
+ * "immediately", which is what a resize-driven fit wants). */
132
+ export declare function fitDurationMs(durationMs: number | undefined, fallback: number, floorMs: number): number;
133
+ /** A camera ratio a host may set: 1 fits, larger is further out. Zero, negative and NaN all blank
134
+ * the canvas irrecoverably (they divide element sizes and the projection), so they are refused
135
+ * rather than clamped - silently substituting a number would hide the caller's bug. */
136
+ export declare function isUsableCameraRatio(ratio: number): boolean;
@@ -0,0 +1,3 @@
1
+ import type { ImageSpec } from "./styleEngine";
2
+ /** Resolves an ImageSpec to something an <img>/texture loader can consume. */
3
+ export declare function imageUrlFor(spec: ImageSpec): string;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Canvas style configuration (feature studio-canvas-viz): what the style panel edits,
3
+ * what the store persists per instance, and what the style engine resolves against.
4
+ * Defaults reproduce the pre-feature rendering exactly (spec FR-8).
5
+ */
6
+ export type CanvasRenderer = "2d" | "3d";
7
+ export type Layout2d = "force" | "circular" | "circlepack" | "grid" | "random";
8
+ export type Layout3d = "force" | "dag-td" | "dag-radial";
9
+ /** How a color is chosen: stable label hash (default) or a user-named property. */
10
+ export type ColorMode = "label" | "property";
11
+ /** Node size source; degree modes count edges visible on the canvas (spec: Decisions). */
12
+ export type NodeSizeMode = "fixed" | "property" | "in-degree" | "out-degree" | "degree";
13
+ export type EdgeWidthMode = "fixed" | "property";
14
+ export interface StyleConfig {
15
+ renderer: CanvasRenderer;
16
+ layout2d: Layout2d;
17
+ layout3d: Layout3d;
18
+ nodeColorMode: ColorMode;
19
+ nodeColorProperty: string;
20
+ nodeSizeMode: NodeSizeMode;
21
+ nodeSizeProperty: string;
22
+ /** Property whose value renders as the node: http(s)/data URL or emoji/text (FR-5). */
23
+ nodeImageProperty: string;
24
+ edgeColorMode: ColorMode;
25
+ edgeColorProperty: string;
26
+ edgeWidthMode: EdgeWidthMode;
27
+ edgeWidthProperty: string;
28
+ showNodeLabels: boolean;
29
+ showEdgeLabels: boolean;
30
+ edgeArrows: boolean;
31
+ /**
32
+ * Node radius in px for `nodeSizeMode: "fixed"`. Also the fallback the scaled modes use for
33
+ * a node they cannot measure (no such property, or a non-numeric value).
34
+ * Default: `NODE_SIZE_DEFAULT`.
35
+ */
36
+ nodeSize?: number;
37
+ /** `[min, max]` node radius in px for the scaled modes. Default: `NODE_SIZE_RANGE`. */
38
+ nodeSizeRange?: readonly [number, number];
39
+ /** Edge width in px for `edgeWidthMode: "fixed"`, and the unmeasurable-edge fallback. Default: `EDGE_WIDTH_DEFAULT`. */
40
+ edgeWidth?: number;
41
+ /** `[min, max]` edge width in px for the scaled mode. Default: `EDGE_WIDTH_RANGE`. */
42
+ edgeWidthRange?: readonly [number, number];
43
+ /** Node label px. Default: `LABEL_SIZE_DEFAULT`. */
44
+ labelSize?: number;
45
+ /** Edge label px. Default: `EDGE_LABEL_SIZE_DEFAULT`. */
46
+ edgeLabelSize?: number;
47
+ }
48
+ export declare const DEFAULT_STYLE_CONFIG: StyleConfig;
@@ -0,0 +1,125 @@
1
+ import { type CanvasEdge, type CanvasNode } from "../state/instanceStore";
2
+ import type { ColorMode, StyleConfig } from "./styleConfig";
3
+ /**
4
+ * Pure style resolution (studio-canvas-viz, spec "Decisions"): maps the canvas model +
5
+ * style config + path overlay to per-element visuals. This is the ONE home for the
6
+ * styling rules — the 2D and 3D renderers only consume what is resolved here.
7
+ */
8
+ export interface PathOverlaySets {
9
+ nodeIds: Set<number>;
10
+ edgeIds: Set<number>;
11
+ active: boolean;
12
+ /** true: non-members grey out (path overlay); false: members pop, the rest keeps its colors (adjacency-preview emphasis). */
13
+ dim: boolean;
14
+ }
15
+ export declare const EMPTY_OVERLAY: PathOverlaySets;
16
+ /** What a node image property value turned out to be (FR-5). */
17
+ export interface ImageSpec {
18
+ kind: "url" | "emoji";
19
+ value: string;
20
+ }
21
+ export interface ResolvedNodeStyle {
22
+ color: string;
23
+ size: number;
24
+ image: ImageSpec | null;
25
+ zIndex: number;
26
+ dimmed: boolean;
27
+ }
28
+ export interface ResolvedEdgeStyle {
29
+ color: string;
30
+ width: number;
31
+ zIndex: number;
32
+ dimmed: boolean;
33
+ }
34
+ export interface ResolvedStyles {
35
+ nodes: Record<number, ResolvedNodeStyle>;
36
+ edges: Record<number, ResolvedEdgeStyle>;
37
+ /** What the renderers draw with, defaulted once (see resolveMagnitudes). */
38
+ magnitudes: ResolvedMagnitudes;
39
+ }
40
+ export declare const NODE_SIZE_DEFAULT = 5;
41
+ export declare const NODE_SIZE_RANGE: readonly [number, number];
42
+ export declare const EDGE_WIDTH_DEFAULT = 1;
43
+ export declare const EDGE_WIDTH_RANGE: readonly [number, number];
44
+ export declare const LABEL_SIZE_DEFAULT = 11;
45
+ export declare const EDGE_LABEL_SIZE_DEFAULT = 9;
46
+ export declare const PATH_NODE_MIN_SIZE = 8;
47
+ export declare const PATH_EDGE_MIN_WIDTH = 3;
48
+ export declare const PATH_EDGE_COLOR = "#4cc38a";
49
+ export declare const DIM_NODE_COLOR = "#2a3240";
50
+ export declare const DIM_EDGE_COLOR = "#1a2029";
51
+ export declare const UNLABELED_EDGE_COLOR = "#2c3543";
52
+ type StyledElement = {
53
+ label: string | null;
54
+ props?: Record<string, string | number | boolean>;
55
+ };
56
+ /** Numeric magnitude of a property value; booleans are categories, never magnitudes. */
57
+ export declare function numericValue(value: unknown): number | null;
58
+ /** FR-5: http(s)/data URLs load as images; any other scalar rasterizes as emoji/text. */
59
+ export declare function classifyImageValue(value: unknown): ImageSpec | null;
60
+ /** How a color mode + property resolve over a concrete element set (FR-1/FR-2, FR-10). */
61
+ export type ColorScale = {
62
+ kind: "label";
63
+ } | {
64
+ kind: "categorical";
65
+ property: string;
66
+ } | {
67
+ kind: "gradient";
68
+ property: string;
69
+ min: number;
70
+ max: number;
71
+ };
72
+ export declare function buildColorScale(elements: StyledElement[], mode: ColorMode, property: string): ColorScale;
73
+ /**
74
+ * The magnitudes a renderer actually draws with: each optional StyleConfig magnitude resolved
75
+ * against its documented default. This is the ONE home for that defaulting, so no renderer and
76
+ * no call site repeats a fallback expression.
77
+ */
78
+ export interface ResolvedMagnitudes {
79
+ nodeSize: number;
80
+ nodeSizeRange: readonly [number, number];
81
+ /** What a scaled mode draws for a node it cannot measure (see fallbackWithin). */
82
+ nodeSizeFallback: number;
83
+ edgeWidth: number;
84
+ edgeWidthRange: readonly [number, number];
85
+ edgeWidthFallback: number;
86
+ labelSize: number;
87
+ edgeLabelSize: number;
88
+ }
89
+ /**
90
+ * The one rule for "a positive magnitude a host supplied": a finite number above zero. Exported
91
+ * because the camera handle applies it to a zoom ratio for the same reason, namely that hosts call
92
+ * in from plain JavaScript where `undefined`, `null` and NaN all arrive without a type error, and
93
+ * every one of these numbers ends up a divisor in a renderer that does not validate it.
94
+ *
95
+ * Zero and negatives are refused rather than honoured: they render nothing, and a host that reaches
96
+ * this state has a bug (a slider at its minimum, an unparsed input) that a blank canvas would hide.
97
+ */
98
+ export declare function isUsableMagnitude(value: number | undefined): value is number;
99
+ export declare function resolveMagnitudes(config: StyleConfig): ResolvedMagnitudes;
100
+ /** Visible in/out degree per node id (spec "Decisions": the canvas is the working set). */
101
+ export declare function visibleDegrees(edges: CanvasEdge[]): Map<number, {
102
+ in: number;
103
+ out: number;
104
+ }>;
105
+ export declare function resolveStyles(nodes: Record<number, CanvasNode>, edges: Record<number, CanvasEdge>, overlay: PathOverlaySets, config: StyleConfig): ResolvedStyles;
106
+ /** Legend model for the canvas screen (FR-10): follows the node color mode. */
107
+ export type LegendModel = {
108
+ kind: "categorical";
109
+ title: string;
110
+ entries: {
111
+ key: string;
112
+ color: string;
113
+ count: number;
114
+ }[];
115
+ } | {
116
+ kind: "gradient";
117
+ title: string;
118
+ min: number;
119
+ max: number;
120
+ };
121
+ export declare const LEGEND_MAX_ENTRIES = 12;
122
+ export declare function buildLegend(nodes: Record<number, CanvasNode>, config: StyleConfig): LegendModel;
123
+ /** Sorted union of snapshot property keys — feeds the style panel datalists (FR-8). */
124
+ export declare function knownPropertyKeys(elements: StyledElement[]): string[];
125
+ export {};
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Stable label-to-color assignment (FR-19): a label always hashes to the same palette
3
+ * slot, in any instance and any session. Palette tuned for the dark chrome.
4
+ */
5
+ export declare const LABEL_PALETTE: readonly ["#4cc38a", "#58a6ff", "#d29922", "#f778ba", "#a371f7", "#ff7b72", "#39c5cf", "#9e6a03", "#7ee787", "#79c0ff"];
6
+ export declare const UNLABELED_COLOR = "#55647a";
7
+ export declare function colorForLabel(label: string | null | undefined): string;
8
+ /** Property values color like labels: stringified, then stably hashed (FR-1/FR-2). */
9
+ export declare function colorForValue(value: unknown): string;
10
+ /** Two-color ramp for all-numeric properties (FR-1): min → cyan, max → pink. */
11
+ export declare const GRADIENT_LOW = "#39c5cf";
12
+ export declare const GRADIENT_HIGH = "#f778ba";
13
+ export declare function gradientColor(t: number): string;
14
+ /** FR-20: past this rendered-element count the canvas degrades (drops labels) instead of freezing. */
15
+ export declare const DEGRADE_THRESHOLD = 5000;
@@ -0,0 +1,11 @@
1
+ import type { EdgeREST, VertexREST } from "../api/types";
2
+ /**
3
+ * Right-column adjacency panel (feature adjacency-preview). A vertex offers graph|stats;
4
+ * an edge always renders the neighborhood preview (endpoints + parallel bundle). One
5
+ * component for both kinds so the preview instance survives vertex↔edge hops instead of
6
+ * remounting (which would flicker).
7
+ */
8
+ export declare function AdjacencyPanel({ element, onInspect, }: {
9
+ element: VertexREST | EdgeREST;
10
+ onInspect: (id: number) => void;
11
+ }): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function AnalyticsRunner(): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function ConfigurationPanel(): import("react").JSX.Element | null;
@@ -0,0 +1,18 @@
1
+ import { type ReactNode } from "react";
2
+ /**
3
+ * Typed confirmation for destructive actions (FR-1d, FR-3): the dialog names the target
4
+ * instance AND its endpoint, and the user must type the instance name to arm the action.
5
+ * Optional `extra` content renders above the typed-name field (e.g. a "delete files too"
6
+ * checkbox).
7
+ */
8
+ export declare function ConfirmDialog({ open, title, description, instanceName, endpoint, confirmLabel, onConfirm, onCancel, extra, }: {
9
+ open: boolean;
10
+ title: string;
11
+ description: string;
12
+ instanceName: string;
13
+ endpoint: string;
14
+ confirmLabel: string;
15
+ onConfirm: () => void;
16
+ onCancel: () => void;
17
+ extra?: ReactNode;
18
+ }): import("react").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import type { DurabilityREST } from "../api/types";
2
+ /**
3
+ * The durability signal, for a human (feature platform-integrity-audit W5).
4
+ *
5
+ * The engine has published this on /status for a while and a machine already acts on it - the
6
+ * integrations runtime refuses to delete anything while it is unhealthy - but nothing showed it to
7
+ * the person watching. That was the gap: "a client writes into a degraded log and nobody watching a
8
+ * dashboard finds out" was the failure this signal existed to prevent, and it stopped one hop short.
9
+ *
10
+ * Deliberately SILENT when everything is fine. A dashboard that always carries a green durability
11
+ * badge trains people to stop reading it, and the three states worth interrupting for are all
12
+ * exceptional: the log is degraded (commits are landing in memory only), the last recovery was
13
+ * truncated (the graph is a prefix of history, so anything reconciling against it is reasoning from
14
+ * incomplete data), or the last checkpoint dropped indexes (they are gone after the next load).
15
+ */
16
+ export declare function DurabilityNotice({ durability }: {
17
+ durability: DurabilityREST | null | undefined;
18
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,11 @@
1
+ import type { EdgeREST, VertexREST } from "../api/types";
2
+ export declare function ElementDetail({ element, providerEnabled, onRefresh, onInspect, tab, onTabChange, }: {
3
+ element: VertexREST | EdgeREST;
4
+ providerEnabled: boolean | null;
5
+ onRefresh: () => void;
6
+ onInspect: (id: number) => void;
7
+ /** Owned by the screen so the chosen tab survives the unmount a missing-element
8
+ * lookup causes (hops and refreshes keep this panel mounted since adjacency-preview). */
9
+ tab: "properties" | "embeddings";
10
+ onTabChange: (tab: "properties" | "embeddings") => void;
11
+ }): import("react").JSX.Element;
@@ -0,0 +1,19 @@
1
+ import type { EdgeREST, VertexREST } from "../api/types";
2
+ /**
3
+ * Hydrated element list as a table (FR-11 "open as table"). `scores` adds the optional
4
+ * score column shared by the vector scan and analytics top-K (concept spec §9);
5
+ * `scoreHeader` names the metric so an L2 distance is never misread as a similarity.
6
+ */
7
+ export declare function ElementTable({ elements, onInspect, onAddToCanvas, scores, scoreHeader, }: {
8
+ elements: (VertexREST | EdgeREST)[];
9
+ onInspect?: (id: number) => void;
10
+ /**
11
+ * Optional per-row "add just this element to the canvas" action (feature: per-row canvas add).
12
+ * When provided, a trailing action column renders one button per row; the caller maps the
13
+ * element to the canvas merge (a lone edge brings its endpoints in as placeholder nodes). Callers
14
+ * that do not pass it (Browser, Analytics) render no extra column - the addition is opt-in.
15
+ */
16
+ onAddToCanvas?: (element: VertexREST | EdgeREST) => void;
17
+ scores?: Map<number, number>;
18
+ scoreHeader?: string;
19
+ }): import("react").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import type { EdgeREST, VertexREST } from "../api/types";
2
+ import type { InstanceConfig } from "../instances/types";
3
+ /**
4
+ * Named-embedding management for one element (feature element-embeddings): lists the
5
+ * element's embeddings (folded out of the plain property table), and sets/replaces/removes
6
+ * one via the typed endpoints. Bring-your-own-vector (paste) is always available; text-in
7
+ * needs the embedding provider. onRefresh re-fetches the element so the list reflects the
8
+ * write. Server 400/404/409 reasons render verbatim.
9
+ */
10
+ export declare function EmbeddingsTab({ instance, element, providerEnabled, onRefresh, }: {
11
+ instance: InstanceConfig;
12
+ element: VertexREST | EdgeREST;
13
+ providerEnabled: boolean | null;
14
+ onRefresh: () => void;
15
+ }): import("react").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Every failed request shows HTTP status + server message (NFR: never a silent console
3
+ * error). A network-level failure renders as the disconnected state with a retry.
4
+ */
5
+ export declare function ErrorBox({ error, onRetry }: {
6
+ error: unknown;
7
+ onRetry?: () => void;
8
+ }): import("react").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import type { LiveFeedStatus } from "../state/liveFeed";
2
+ /**
3
+ * The Events bell (feature studio-event-feed): the top-bar presence of the change feed.
4
+ * Signals without being clicked - an interest-filtered unread count (display capped at
5
+ * 99+), and a distinct warning treatment when a resync arrived unseen (continuity was
6
+ * lost, which deserves more than a +1). Muted but clickable while the stream is not
7
+ * live: the panel then explains the state instead of a dead-looking list.
8
+ */
9
+ /** Unread numbers above this render as "99+" (the counter itself is uncapped). */
10
+ export declare const FEED_BADGE_MAX = 99;
11
+ export declare function EventFeedBell({ scopeId, status, onOpen, }: {
12
+ /** The bound instance id ("<id>/<namespace>") naming the feed scope. */
13
+ scopeId: string;
14
+ status: LiveFeedStatus;
15
+ onOpen: () => void;
16
+ }): import("react").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import type { InstanceConfig } from "../instances/types";
2
+ import type { LiveFeedStatus } from "../state/liveFeed";
3
+ export declare function EventFeedPanel({ instance, status, open, onClose, onInspect, }: {
4
+ /** The namespace-BOUND instance view (compound id) the feed streams for. */
5
+ instance: InstanceConfig;
6
+ status: LiveFeedStatus;
7
+ open: boolean;
8
+ onClose: () => void;
9
+ onInspect: (id: number) => void;
10
+ }): import("react").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from "react";
2
+ import { type FieldHelpKey } from "../lib/fieldHelp";
3
+ /**
4
+ * Labeled field with hover help (feature studio-mutations-ux): the title sits on the
5
+ * WRAPPER, so hovering the label or the input itself shows the explanation. Help copy
6
+ * lives only in lib/fieldHelp.ts; call sites pass a key, never text.
7
+ */
8
+ export declare function Field({ helpKey, label, htmlFor, className, children, }: {
9
+ helpKey: FieldHelpKey;
10
+ label: ReactNode;
11
+ htmlFor?: string;
12
+ className?: string;
13
+ children: ReactNode;
14
+ }): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function GraphShapePanel(): import("react").JSX.Element;
@@ -0,0 +1,5 @@
1
+ /** Clickable element-id chip. Navigation is owned by the Browser screen via onInspect. */
2
+ export declare function InspectLink({ id, onInspect, }: {
3
+ id: number;
4
+ onInspect: (id: number) => void;
5
+ }): import("react").JSX.Element;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Honest footer for the hard row ceiling: renders "showing N of M" ONLY when a list is actually
3
+ * truncated at LIST_MAX_ROWS (see capList in lib/listCaps.ts) — a rare safety cap, never the
4
+ * everyday scroll threshold — so a list that big never hides the overflow silently. Nothing
5
+ * renders when everything fits (the normal case: the list just scrolls).
6
+ */
7
+ export declare function ListCapNote({ shown, total }: {
8
+ shown: number;
9
+ total: number;
10
+ }): import("react").JSX.Element | null;
@@ -0,0 +1 @@
1
+ export declare function MutationsPanel(): import("react").JSX.Element;
@@ -0,0 +1,22 @@
1
+ import type { InstanceConfig } from "../instances/types";
2
+ import type { NamespaceEntry } from "../api/types";
3
+ /**
4
+ * The top-bar namespace switcher (feature graph-namespaces, per the approved mock): a
5
+ * trigger showing the active namespace with its counts, and a dropdown with a filter,
6
+ * per-namespace rows (state dot, counts, active / bare-URL-alias / not-ready / not-loaded
7
+ * tags), an
8
+ * inline "+ New namespace" create that switches to the newborn, a "Manage…" jump to the
9
+ * Connect panel, and the quota footer. Full CRUD stays on the Connect screen.
10
+ *
11
+ * This component renders in the app shell on EVERY screen, so it must survive any entry the
12
+ * inventory can contain: a namespace the server did not load carries null counts, and throwing
13
+ * on one of them would take the whole Studio down with the error boundary - including the
14
+ * Namespaces panel an operator would use to undo the exclusion. Hence `formatCountOrDash`.
15
+ */
16
+ export declare function NamespaceSwitcher({ instance, entries, maxNamespaces, activeNamespace, onSwitch, }: {
17
+ instance: InstanceConfig;
18
+ entries: NamespaceEntry[];
19
+ maxNamespaces: number | null;
20
+ activeNamespace: string;
21
+ onSwitch: (name: string) => void;
22
+ }): import("react").JSX.Element;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The "inherit" label, resolved against what the instance would actually do (feature
3
+ * writable-instance-config 5.9). A bare "inherit" left an operator unable to tell whether it meant
4
+ * load or skip, which is the whole question the row is asked.
5
+ *
6
+ * The two fields are published UNCOMPOSED on purpose, and both matter here: a startup mode of "all"
7
+ * or "defaultOnly" SHORT-CIRCUITS every per-namespace preference, so under those modes the default is
8
+ * not what inherit resolves to and saying otherwise would be a confident lie.
9
+ */
10
+ export declare function inheritLabel(loadOnStartupDefault: boolean | undefined, startupLoadMode: string | undefined): string;
11
+ export declare function NamespacesPanel(): import("react").JSX.Element | null;
@@ -0,0 +1,10 @@
1
+ import type { EdgeREST, VertexREST } from "../api/types";
2
+ /**
3
+ * Rendered 1-hop neighborhood (feature adjacency-preview): a vertex with its adjacent
4
+ * edges + neighbors, or an edge between its endpoints with every parallel edge — the
5
+ * focus element emphasized, clicks navigating via onInspect.
6
+ */
7
+ export declare function NeighborhoodPreview({ element, onInspect, }: {
8
+ element: VertexREST | EdgeREST;
9
+ onInspect: (id: number) => void;
10
+ }): import("react").JSX.Element;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Plugins screen · registry table (feature plugin-registration): the registry's ONE
3
+ * management home — list (name, category, contract, compileState badge), read-only source +
4
+ * recompile diagnostics for a selected/Failed entry, a function runner for a registered
5
+ * graph function, and delete (immutable entries: delete + re-register is the edit flow). The
6
+ * whole-type authoring flow lives in the "Register plugin" editor, the sibling of the
7
+ * stored-query library's inline capture — see StoredQueriesPanel for the shape this mirrors.
8
+ */
9
+ export declare function PluginsPanel(): import("react").JSX.Element;
@@ -0,0 +1,4 @@
1
+ import type { PropertyREST } from "../api/types";
2
+ export declare function PropertiesTab({ properties }: {
3
+ properties: PropertyREST[];
4
+ }): import("react").JSX.Element;
@@ -0,0 +1,26 @@
1
+ import type { PropertySpecification } from "../api/types";
2
+ import { type TypedValue } from "../lib/literals";
3
+ /**
4
+ * 0..n initial properties for the create-vertex/edge forms (feature
5
+ * studio-mutations-ux): rows of property id + typed value, validated as a set so the
6
+ * submit button can gate on propertyRowsError().
7
+ */
8
+ export interface PropertyRow {
9
+ /** Stable per-row React key, minted by newPropertyRow(). */
10
+ key: number;
11
+ propertyId: string;
12
+ value: TypedValue;
13
+ }
14
+ export declare const newPropertyRow: () => PropertyRow;
15
+ /**
16
+ * Why duplicates are rejected client-side: the wire format is a list, but the server
17
+ * builds a one-value-per-key property dictionary from it and rejects a duplicate id
18
+ * before the transaction is even enqueued — with a much murkier error than this one.
19
+ */
20
+ export declare function propertyRowsError(rows: PropertyRow[]): string | null;
21
+ export declare const toPropertySpecs: (rows: PropertyRow[]) => PropertySpecification[] | undefined;
22
+ export declare function PropertyListEditor({ rows, onChange, idPrefix, }: {
23
+ rows: PropertyRow[];
24
+ onChange: (rows: PropertyRow[]) => void;
25
+ idPrefix: string;
26
+ }): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export declare function SampleGraphsPanel(): import("react").JSX.Element;
2
+ /** Accepts "owner/repo" or a full/bare GitHub URL; returns "owner/repo" or null. */
3
+ export declare function normalizeRepo(input: string): string | null;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Per-section "How does this work?" help (feature studio-section-help). Rendered ONCE by the
3
+ * shell, keyed by the active nav leaf; it drops an anchored popover listing the 1-3 docs pages
4
+ * that explain the current section (each opens the published docs site in a new tab). Renders
5
+ * nothing for a leaf with no mapping in sectionHelp.ts. Mirrors the hand-rolled anchored
6
+ * dropdown pattern from NamespaceSwitcher (open-gated mousedown/keydown listeners), with
7
+ * focus returned to the trigger on close.
8
+ */
9
+ export declare function SectionHelp({ sectionKey }: {
10
+ sectionKey: string | null;
11
+ }): import("react").JSX.Element | null;