matterviz 0.3.4 → 0.3.6

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 (852) hide show
  1. package/.vscode/launch.json +13 -0
  2. package/.vscodeignore +7 -0
  3. package/dist/assets/STLExporter-BpTH3YHE.js +8 -0
  4. package/dist/assets/browser-DdDecX_W.js +1 -0
  5. package/dist/assets/export-qgn-H9y6.js +2 -0
  6. package/dist/assets/main-DiKYzti2.css +1 -0
  7. package/dist/assets/moyo_wasm_bg-0ocwg7xY.wasm +0 -0
  8. package/dist/extension.js +31293 -0
  9. package/dist/src/lib/FilePicker.svelte +360 -0
  10. package/dist/src/lib/MillerIndexInput.svelte +66 -0
  11. package/dist/src/lib/api/mp.ts +26 -0
  12. package/dist/src/lib/api/optimade.ts +204 -0
  13. package/dist/src/lib/app.css +247 -0
  14. package/dist/src/lib/brillouin/BrillouinZone.svelte +549 -0
  15. package/dist/src/lib/brillouin/BrillouinZoneControls.svelte +144 -0
  16. package/dist/src/lib/brillouin/BrillouinZoneExportPane.svelte +146 -0
  17. package/dist/src/lib/brillouin/BrillouinZoneInfoPane.svelte +146 -0
  18. package/dist/src/lib/brillouin/BrillouinZoneScene.svelte +476 -0
  19. package/dist/src/lib/brillouin/BrillouinZoneTooltip.svelte +92 -0
  20. package/dist/src/lib/brillouin/compute.ts +529 -0
  21. package/dist/src/lib/brillouin/index.ts +8 -0
  22. package/dist/src/lib/brillouin/types.ts +51 -0
  23. package/dist/src/lib/chempot-diagram/ChemPotDiagram.svelte +327 -0
  24. package/dist/src/lib/chempot-diagram/ChemPotDiagram2D.svelte +846 -0
  25. package/dist/src/lib/chempot-diagram/ChemPotDiagram3D.svelte +3193 -0
  26. package/dist/src/lib/chempot-diagram/async-compute.svelte.ts +94 -0
  27. package/dist/src/lib/chempot-diagram/chempot-worker.ts +11 -0
  28. package/dist/src/lib/chempot-diagram/color.ts +42 -0
  29. package/dist/src/lib/chempot-diagram/compute.ts +1014 -0
  30. package/dist/src/lib/chempot-diagram/index.ts +6 -0
  31. package/dist/src/lib/chempot-diagram/pointer.ts +56 -0
  32. package/dist/src/lib/chempot-diagram/temperature.ts +77 -0
  33. package/dist/src/lib/chempot-diagram/types.ts +130 -0
  34. package/dist/src/lib/colors/index.ts +249 -0
  35. package/dist/src/lib/composition/BarChart.svelte +297 -0
  36. package/dist/src/lib/composition/BubbleChart.svelte +218 -0
  37. package/dist/src/lib/composition/Composition.svelte +165 -0
  38. package/dist/src/lib/composition/Formula.svelte +268 -0
  39. package/dist/src/lib/composition/FormulaFilter.svelte +1257 -0
  40. package/dist/src/lib/composition/PieChart.svelte +323 -0
  41. package/dist/src/lib/composition/format.ts +155 -0
  42. package/dist/src/lib/composition/index.ts +37 -0
  43. package/dist/src/lib/composition/parse.ts +605 -0
  44. package/dist/src/lib/constants.ts +134 -0
  45. package/dist/src/lib/controls.ts +42 -0
  46. package/dist/src/lib/convex-hull/ConvexHull.svelte +157 -0
  47. package/dist/src/lib/convex-hull/ConvexHull2D.svelte +825 -0
  48. package/dist/src/lib/convex-hull/ConvexHull3D.svelte +1801 -0
  49. package/dist/src/lib/convex-hull/ConvexHull4D.svelte +1398 -0
  50. package/dist/src/lib/convex-hull/ConvexHullControls.svelte +535 -0
  51. package/dist/src/lib/convex-hull/ConvexHullInfoPane.svelte +125 -0
  52. package/dist/src/lib/convex-hull/ConvexHullStats.svelte +929 -0
  53. package/dist/src/lib/convex-hull/ConvexHullTooltip.svelte +131 -0
  54. package/dist/src/lib/convex-hull/GasPressureControls.svelte +247 -0
  55. package/dist/src/lib/convex-hull/StructurePopup.svelte +151 -0
  56. package/dist/src/lib/convex-hull/TemperatureSlider.svelte +140 -0
  57. package/dist/src/lib/convex-hull/barycentric-coords.ts +246 -0
  58. package/dist/src/lib/convex-hull/demo-temperature.ts +63 -0
  59. package/dist/src/lib/convex-hull/gas-thermodynamics.ts +405 -0
  60. package/dist/src/lib/convex-hull/helpers.ts +932 -0
  61. package/dist/src/lib/convex-hull/index.ts +202 -0
  62. package/dist/src/lib/convex-hull/thermodynamics.ts +2192 -0
  63. package/dist/src/lib/convex-hull/types.ts +267 -0
  64. package/dist/src/lib/coordination/CoordinationBarPlot.svelte +311 -0
  65. package/dist/src/lib/coordination/calc-coordination.ts +93 -0
  66. package/dist/src/lib/coordination/index.ts +9 -0
  67. package/dist/src/lib/effects.svelte.ts +48 -0
  68. package/dist/src/lib/element/BohrAtom.svelte +147 -0
  69. package/dist/src/lib/element/ElementHeading.svelte +26 -0
  70. package/dist/src/lib/element/ElementPhoto.svelte +57 -0
  71. package/dist/src/lib/element/ElementStats.svelte +80 -0
  72. package/dist/src/lib/element/ElementTile.svelte +484 -0
  73. package/dist/src/lib/element/data.json.gz.d.ts +4 -0
  74. package/dist/src/lib/element/data.ts +14 -0
  75. package/dist/src/lib/element/index.ts +8 -0
  76. package/dist/src/lib/element/types.ts +62 -0
  77. package/dist/src/lib/feedback/ClickFeedback.svelte +58 -0
  78. package/dist/src/lib/feedback/DragOverlay.svelte +42 -0
  79. package/dist/src/lib/feedback/index.ts +4 -0
  80. package/dist/src/lib/fermi-surface/FermiSlice.svelte +189 -0
  81. package/dist/src/lib/fermi-surface/FermiSurface.svelte +600 -0
  82. package/dist/src/lib/fermi-surface/FermiSurfaceControls.svelte +448 -0
  83. package/dist/src/lib/fermi-surface/FermiSurfaceScene.svelte +794 -0
  84. package/dist/src/lib/fermi-surface/FermiSurfaceTooltip.svelte +111 -0
  85. package/dist/src/lib/fermi-surface/compute.ts +728 -0
  86. package/dist/src/lib/fermi-surface/constants.ts +32 -0
  87. package/dist/src/lib/fermi-surface/export.ts +64 -0
  88. package/dist/src/lib/fermi-surface/index.ts +14 -0
  89. package/dist/src/lib/fermi-surface/marching-cubes.ts +3 -0
  90. package/dist/src/lib/fermi-surface/parse.ts +574 -0
  91. package/dist/src/lib/fermi-surface/symmetry.ts +56 -0
  92. package/dist/src/lib/fermi-surface/types.ts +159 -0
  93. package/dist/src/lib/heatmap-matrix/HeatmapMatrix.svelte +1545 -0
  94. package/dist/src/lib/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  95. package/dist/src/lib/heatmap-matrix/index.ts +167 -0
  96. package/dist/src/lib/heatmap-matrix/shared.ts +7 -0
  97. package/dist/src/lib/icons.ts +650 -0
  98. package/dist/src/lib/index.ts +61 -0
  99. package/dist/src/lib/io/decompress.ts +92 -0
  100. package/dist/src/lib/io/export.ts +385 -0
  101. package/dist/src/lib/io/fetch.ts +46 -0
  102. package/dist/src/lib/io/file-drop.ts +51 -0
  103. package/dist/src/lib/io/index.ts +7 -0
  104. package/dist/src/lib/io/is-binary.ts +24 -0
  105. package/dist/src/lib/io/types.ts +8 -0
  106. package/dist/src/lib/io/url-drop.ts +141 -0
  107. package/dist/src/lib/isosurface/Isosurface.svelte +285 -0
  108. package/dist/src/lib/isosurface/IsosurfaceControls.svelte +277 -0
  109. package/dist/src/lib/isosurface/index.ts +7 -0
  110. package/dist/src/lib/isosurface/parse.ts +656 -0
  111. package/dist/src/lib/isosurface/slice.ts +175 -0
  112. package/dist/src/lib/isosurface/types.ts +309 -0
  113. package/dist/src/lib/labels.ts +320 -0
  114. package/dist/src/lib/layout/FullscreenToggle.svelte +50 -0
  115. package/dist/src/lib/layout/InfoCard.svelte +120 -0
  116. package/dist/src/lib/layout/InfoTag.svelte +185 -0
  117. package/dist/src/lib/layout/PropertyFilter.svelte +246 -0
  118. package/dist/src/lib/layout/SettingsSection.svelte +148 -0
  119. package/dist/src/lib/layout/SubpageGrid.svelte +82 -0
  120. package/dist/src/lib/layout/fullscreen.ts +65 -0
  121. package/dist/src/lib/layout/index.ts +11 -0
  122. package/dist/src/lib/layout/json-tree/JsonNode.svelte +548 -0
  123. package/dist/src/lib/layout/json-tree/JsonTree.svelte +1230 -0
  124. package/dist/src/lib/layout/json-tree/JsonValue.svelte +334 -0
  125. package/dist/src/lib/layout/json-tree/index.ts +3 -0
  126. package/dist/src/lib/layout/json-tree/types.ts +126 -0
  127. package/dist/src/lib/layout/json-tree/utils.ts +682 -0
  128. package/dist/src/lib/marching-cubes.ts +614 -0
  129. package/dist/src/lib/math.ts +1081 -0
  130. package/dist/src/lib/overlays/ContextMenu.svelte +162 -0
  131. package/dist/src/lib/overlays/CopyButton.svelte +45 -0
  132. package/dist/src/lib/overlays/DragControlTab.svelte +98 -0
  133. package/dist/src/lib/overlays/DraggablePane.svelte +487 -0
  134. package/dist/src/lib/overlays/InfoPaneCards.svelte +149 -0
  135. package/dist/src/lib/overlays/index.ts +3 -0
  136. package/dist/src/lib/periodic-table/PeriodicTable.svelte +469 -0
  137. package/dist/src/lib/periodic-table/PeriodicTableControls.svelte +557 -0
  138. package/dist/src/lib/periodic-table/PropertySelect.svelte +37 -0
  139. package/dist/src/lib/periodic-table/index.ts +12 -0
  140. package/dist/src/lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +1086 -0
  141. package/dist/src/lib/phase-diagram/PhaseDiagramControls.svelte +444 -0
  142. package/dist/src/lib/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  143. package/dist/src/lib/phase-diagram/PhaseDiagramExportPane.svelte +184 -0
  144. package/dist/src/lib/phase-diagram/PhaseDiagramTooltip.svelte +391 -0
  145. package/dist/src/lib/phase-diagram/TdbInfoPanel.svelte +203 -0
  146. package/dist/src/lib/phase-diagram/build-diagram.ts +186 -0
  147. package/dist/src/lib/phase-diagram/colors.ts +58 -0
  148. package/dist/src/lib/phase-diagram/diagram-input.ts +40 -0
  149. package/dist/src/lib/phase-diagram/index.ts +13 -0
  150. package/dist/src/lib/phase-diagram/parse.ts +348 -0
  151. package/dist/src/lib/phase-diagram/svg-to-diagram.ts +1023 -0
  152. package/dist/src/lib/phase-diagram/types.ts +144 -0
  153. package/dist/src/lib/phase-diagram/utils.ts +775 -0
  154. package/dist/src/lib/plot/AxisLabel.svelte +51 -0
  155. package/dist/src/lib/plot/BarPlot.svelte +2113 -0
  156. package/dist/src/lib/plot/BarPlotControls.svelte +66 -0
  157. package/dist/src/lib/plot/BinnedScatterPlot.svelte +1114 -0
  158. package/dist/src/lib/plot/ColorBar.svelte +721 -0
  159. package/dist/src/lib/plot/ColorScaleSelect.svelte +54 -0
  160. package/dist/src/lib/plot/ElementScatter.svelte +63 -0
  161. package/dist/src/lib/plot/FillArea.svelte +223 -0
  162. package/dist/src/lib/plot/Histogram.svelte +1558 -0
  163. package/dist/src/lib/plot/HistogramControls.svelte +212 -0
  164. package/dist/src/lib/plot/InteractiveAxisLabel.svelte +96 -0
  165. package/dist/src/lib/plot/Line.svelte +84 -0
  166. package/dist/src/lib/plot/PlotAxis.svelte +169 -0
  167. package/dist/src/lib/plot/PlotControls.svelte +537 -0
  168. package/dist/src/lib/plot/PlotLegend.svelte +569 -0
  169. package/dist/src/lib/plot/PlotTooltip.svelte +67 -0
  170. package/dist/src/lib/plot/PortalSelect.svelte +253 -0
  171. package/dist/src/lib/plot/ReferenceLine3D.svelte +156 -0
  172. package/dist/src/lib/plot/ReferencePlane.svelte +175 -0
  173. package/dist/src/lib/plot/ScatterPlot.svelte +2778 -0
  174. package/dist/src/lib/plot/ScatterPlot3D.svelte +529 -0
  175. package/dist/src/lib/plot/ScatterPlot3DControls.svelte +437 -0
  176. package/dist/src/lib/plot/ScatterPlot3DScene.svelte +912 -0
  177. package/dist/src/lib/plot/ScatterPlotControls.svelte +306 -0
  178. package/dist/src/lib/plot/ScatterPoint.svelte +182 -0
  179. package/dist/src/lib/plot/SpacegroupBarPlot.svelte +293 -0
  180. package/dist/src/lib/plot/Surface3D.svelte +197 -0
  181. package/dist/src/lib/plot/ZeroLines.svelte +97 -0
  182. package/dist/src/lib/plot/ZoomRect.svelte +23 -0
  183. package/dist/src/lib/plot/adaptive-density.ts +316 -0
  184. package/dist/src/lib/plot/auto-place.ts +184 -0
  185. package/dist/src/lib/plot/axis-utils.ts +122 -0
  186. package/dist/src/lib/plot/binned-scatter-types.ts +83 -0
  187. package/dist/src/lib/plot/data-cleaning.ts +1069 -0
  188. package/dist/src/lib/plot/data-transform.ts +69 -0
  189. package/dist/src/lib/plot/defaults.ts +9 -0
  190. package/dist/src/lib/plot/fill-utils.ts +494 -0
  191. package/dist/src/lib/plot/hover-lock.svelte.ts +60 -0
  192. package/dist/src/lib/plot/index.ts +53 -0
  193. package/dist/src/lib/plot/interactions.ts +119 -0
  194. package/dist/src/lib/plot/layout.ts +425 -0
  195. package/dist/src/lib/plot/reference-line.ts +426 -0
  196. package/dist/src/lib/plot/scales.ts +654 -0
  197. package/dist/src/lib/plot/svg.ts +23 -0
  198. package/dist/src/lib/plot/types.ts +1144 -0
  199. package/dist/src/lib/plot/utils/label-placement.ts +541 -0
  200. package/dist/src/lib/plot/utils/series-visibility.ts +140 -0
  201. package/dist/src/lib/plot/utils.ts +11 -0
  202. package/dist/src/lib/rdf/RdfPlot.svelte +247 -0
  203. package/dist/src/lib/rdf/calc-rdf.ts +167 -0
  204. package/dist/src/lib/rdf/index.ts +27 -0
  205. package/dist/src/lib/sanitize.ts +126 -0
  206. package/dist/src/lib/settings.ts +1479 -0
  207. package/dist/src/lib/spectral/Bands.svelte +1040 -0
  208. package/dist/src/lib/spectral/BandsAndDos.svelte +134 -0
  209. package/dist/src/lib/spectral/BrillouinBandsDos.svelte +252 -0
  210. package/dist/src/lib/spectral/Dos.svelte +697 -0
  211. package/dist/src/lib/spectral/helpers.ts +1381 -0
  212. package/dist/src/lib/spectral/index.ts +8 -0
  213. package/dist/src/lib/spectral/types.ts +112 -0
  214. package/dist/src/lib/state.svelte.ts +64 -0
  215. package/dist/src/lib/structure/Arrow.svelte +72 -0
  216. package/dist/src/lib/structure/AtomLegend.svelte +815 -0
  217. package/dist/src/lib/structure/Bond.svelte +140 -0
  218. package/dist/src/lib/structure/CanvasTooltip.svelte +33 -0
  219. package/dist/src/lib/structure/CellSelect.svelte +349 -0
  220. package/dist/src/lib/structure/Cylinder.svelte +45 -0
  221. package/dist/src/lib/structure/Lattice.svelte +196 -0
  222. package/dist/src/lib/structure/Structure.svelte +2248 -0
  223. package/dist/src/lib/structure/StructureControls.svelte +1273 -0
  224. package/dist/src/lib/structure/StructureExportPane.svelte +252 -0
  225. package/dist/src/lib/structure/StructureInfoPane.svelte +737 -0
  226. package/dist/src/lib/structure/StructureScene.svelte +2255 -0
  227. package/dist/src/lib/structure/atom-properties.ts +316 -0
  228. package/dist/src/lib/structure/bond-order-perception.ts +447 -0
  229. package/dist/src/lib/structure/bonding.ts +944 -0
  230. package/dist/src/lib/structure/export.ts +861 -0
  231. package/dist/src/lib/structure/index.ts +291 -0
  232. package/dist/src/lib/structure/label-placement.ts +130 -0
  233. package/dist/src/lib/structure/measure.ts +45 -0
  234. package/dist/src/lib/structure/parse.ts +1705 -0
  235. package/dist/src/lib/structure/partial-occupancy.ts +183 -0
  236. package/dist/src/lib/structure/pbc.ts +164 -0
  237. package/dist/src/lib/structure/supercell.ts +226 -0
  238. package/dist/src/lib/structure/validation.ts +11 -0
  239. package/dist/src/lib/symmetry/SymmetryStats.svelte +226 -0
  240. package/dist/src/lib/symmetry/WyckoffTable.svelte +120 -0
  241. package/dist/src/lib/symmetry/cell-transform.ts +118 -0
  242. package/dist/src/lib/symmetry/index.ts +348 -0
  243. package/dist/src/lib/symmetry/spacegroups.ts +404 -0
  244. package/dist/src/lib/table/HeatmapTable.svelte +1833 -0
  245. package/dist/src/lib/table/ToggleMenu.svelte +385 -0
  246. package/dist/src/lib/table/index.ts +139 -0
  247. package/dist/src/lib/theme/ThemeControl.svelte +53 -0
  248. package/dist/src/lib/theme/index.ts +107 -0
  249. package/dist/src/lib/theme/themes.mjs +297 -0
  250. package/dist/src/lib/time.ts +71 -0
  251. package/dist/src/lib/tooltip/TooltipContent.svelte +58 -0
  252. package/dist/src/lib/tooltip/index.ts +2 -0
  253. package/dist/src/lib/tooltip/types.ts +13 -0
  254. package/dist/src/lib/trajectory/Trajectory.svelte +1545 -0
  255. package/dist/src/lib/trajectory/TrajectoryError.svelte +128 -0
  256. package/dist/src/lib/trajectory/TrajectoryExportPane.svelte +357 -0
  257. package/dist/src/lib/trajectory/TrajectoryInfoPane.svelte +313 -0
  258. package/dist/src/lib/trajectory/constants.ts +7 -0
  259. package/dist/src/lib/trajectory/extract.ts +196 -0
  260. package/dist/src/lib/trajectory/format-detect.ts +96 -0
  261. package/dist/src/lib/trajectory/frame-reader.ts +456 -0
  262. package/dist/src/lib/trajectory/helpers.ts +217 -0
  263. package/dist/src/lib/trajectory/index.ts +218 -0
  264. package/dist/src/lib/trajectory/parse/ase.ts +109 -0
  265. package/dist/src/lib/trajectory/parse/hdf5.ts +173 -0
  266. package/dist/src/lib/trajectory/parse/index.ts +411 -0
  267. package/dist/src/lib/trajectory/parse/lammps.ts +215 -0
  268. package/dist/src/lib/trajectory/parse/vasp.ts +102 -0
  269. package/dist/src/lib/trajectory/parse/xyz.ts +143 -0
  270. package/dist/src/lib/trajectory/plotting.ts +599 -0
  271. package/dist/src/lib/trajectory/types.ts +13 -0
  272. package/dist/src/lib/utils.ts +56 -0
  273. package/dist/src/lib/xrd/XrdPlot.svelte +615 -0
  274. package/dist/src/lib/xrd/broadening.ts +130 -0
  275. package/dist/src/lib/xrd/calc-xrd.ts +397 -0
  276. package/dist/src/lib/xrd/index.ts +38 -0
  277. package/dist/src/lib/xrd/parse.ts +858 -0
  278. package/dist/webview.js +29421 -0
  279. package/icon.png +0 -0
  280. package/license +1 -1
  281. package/matterviz-0.3.2.vsix +0 -0
  282. package/matterviz-0.3.4.vsix +0 -0
  283. package/matterviz-0.3.5.vsix +0 -0
  284. package/package.json +1461 -231
  285. package/readme.md +171 -98
  286. package/scripts/sync-config.ts +101 -0
  287. package/src/declarations.d.ts +2 -0
  288. package/src/extension.ts +972 -0
  289. package/src/node-io.ts +65 -0
  290. package/src/types.ts +17 -0
  291. package/src/webview/JsonBrowser.svelte +1079 -0
  292. package/src/webview/PlotPanel.svelte +346 -0
  293. package/src/webview/detect.ts +444 -0
  294. package/src/webview/main.ts +764 -0
  295. package/src/webview/plot-utils.ts +250 -0
  296. package/test-fixtures/all-viz-types.json.gz +0 -0
  297. package/test-fixtures/plot-demo-data.json.gz +0 -0
  298. package/tests/detect.test.ts +604 -0
  299. package/tests/extension.test.ts +2041 -0
  300. package/tests/node-io.test.ts +39 -0
  301. package/tests/plot-utils.test.ts +302 -0
  302. package/tests/vite-plugin-json-gz.test.ts +114 -0
  303. package/tests/vscode-mock.ts +18 -0
  304. package/tests/webview.test.ts +231 -0
  305. package/tsconfig.json +20 -0
  306. package/vite-plugin-json-gz.ts +29 -0
  307. package/vite.config.ts +34 -0
  308. package/vite.extension.config.ts +34 -0
  309. package/dist/EmptyState.svelte.d.ts +0 -9
  310. package/dist/FilePicker.svelte +0 -360
  311. package/dist/FilePicker.svelte.d.ts +0 -17
  312. package/dist/Icon.svelte.d.ts +0 -13
  313. package/dist/MillerIndexInput.svelte +0 -66
  314. package/dist/MillerIndexInput.svelte.d.ts +0 -7
  315. package/dist/api/mp.d.ts +0 -6
  316. package/dist/api/mp.js +0 -22
  317. package/dist/api/optimade.d.ts +0 -45
  318. package/dist/api/optimade.js +0 -135
  319. package/dist/app.css +0 -240
  320. package/dist/brillouin/BrillouinZone.svelte +0 -543
  321. package/dist/brillouin/BrillouinZone.svelte.d.ts +0 -83
  322. package/dist/brillouin/BrillouinZoneControls.svelte +0 -144
  323. package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +0 -17
  324. package/dist/brillouin/BrillouinZoneExportPane.svelte +0 -148
  325. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +0 -15
  326. package/dist/brillouin/BrillouinZoneInfoPane.svelte +0 -146
  327. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +0 -13
  328. package/dist/brillouin/BrillouinZoneScene.svelte +0 -476
  329. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +0 -48
  330. package/dist/brillouin/BrillouinZoneTooltip.svelte +0 -92
  331. package/dist/brillouin/BrillouinZoneTooltip.svelte.d.ts +0 -8
  332. package/dist/brillouin/compute.d.ts +0 -17
  333. package/dist/brillouin/compute.js +0 -422
  334. package/dist/brillouin/index.d.ts +0 -8
  335. package/dist/brillouin/index.js +0 -8
  336. package/dist/brillouin/types.d.ts +0 -48
  337. package/dist/brillouin/types.js +0 -1
  338. package/dist/chempot-diagram/ChemPotDiagram.svelte +0 -327
  339. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +0 -13
  340. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +0 -847
  341. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +0 -16
  342. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +0 -3194
  343. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +0 -16
  344. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +0 -7
  345. package/dist/chempot-diagram/async-compute.svelte.d.ts +0 -3
  346. package/dist/chempot-diagram/async-compute.svelte.js +0 -77
  347. package/dist/chempot-diagram/chempot-worker.d.ts +0 -1
  348. package/dist/chempot-diagram/chempot-worker.js +0 -11
  349. package/dist/chempot-diagram/color.d.ts +0 -10
  350. package/dist/chempot-diagram/color.js +0 -32
  351. package/dist/chempot-diagram/compute.d.ts +0 -48
  352. package/dist/chempot-diagram/compute.js +0 -812
  353. package/dist/chempot-diagram/index.d.ts +0 -6
  354. package/dist/chempot-diagram/index.js +0 -6
  355. package/dist/chempot-diagram/pointer.d.ts +0 -16
  356. package/dist/chempot-diagram/pointer.js +0 -40
  357. package/dist/chempot-diagram/temperature.d.ts +0 -15
  358. package/dist/chempot-diagram/temperature.js +0 -36
  359. package/dist/chempot-diagram/types.d.ts +0 -86
  360. package/dist/chempot-diagram/types.js +0 -28
  361. package/dist/colors/index.d.ts +0 -47
  362. package/dist/colors/index.js +0 -203
  363. package/dist/composition/BarChart.svelte +0 -297
  364. package/dist/composition/BarChart.svelte.d.ts +0 -39
  365. package/dist/composition/BubbleChart.svelte +0 -218
  366. package/dist/composition/BubbleChart.svelte.d.ts +0 -28
  367. package/dist/composition/Composition.svelte +0 -164
  368. package/dist/composition/Composition.svelte.d.ts +0 -15
  369. package/dist/composition/Formula.svelte +0 -265
  370. package/dist/composition/Formula.svelte.d.ts +0 -19
  371. package/dist/composition/FormulaFilter.svelte +0 -1259
  372. package/dist/composition/FormulaFilter.svelte.d.ts +0 -51
  373. package/dist/composition/PieChart.svelte +0 -323
  374. package/dist/composition/PieChart.svelte.d.ts +0 -37
  375. package/dist/composition/format.d.ts +0 -15
  376. package/dist/composition/format.js +0 -109
  377. package/dist/composition/index.d.ts +0 -20
  378. package/dist/composition/index.js +0 -14
  379. package/dist/composition/parse.d.ts +0 -55
  380. package/dist/composition/parse.js +0 -459
  381. package/dist/constants.d.ts +0 -29
  382. package/dist/constants.js +0 -105
  383. package/dist/controls.d.ts +0 -14
  384. package/dist/controls.js +0 -30
  385. package/dist/convex-hull/ConvexHull.svelte +0 -157
  386. package/dist/convex-hull/ConvexHull.svelte.d.ts +0 -13
  387. package/dist/convex-hull/ConvexHull2D.svelte +0 -813
  388. package/dist/convex-hull/ConvexHull2D.svelte.d.ts +0 -11
  389. package/dist/convex-hull/ConvexHull3D.svelte +0 -1788
  390. package/dist/convex-hull/ConvexHull3D.svelte.d.ts +0 -8
  391. package/dist/convex-hull/ConvexHull4D.svelte +0 -1374
  392. package/dist/convex-hull/ConvexHull4D.svelte.d.ts +0 -8
  393. package/dist/convex-hull/ConvexHullControls.svelte +0 -546
  394. package/dist/convex-hull/ConvexHullControls.svelte.d.ts +0 -48
  395. package/dist/convex-hull/ConvexHullInfoPane.svelte +0 -115
  396. package/dist/convex-hull/ConvexHullInfoPane.svelte.d.ts +0 -18
  397. package/dist/convex-hull/ConvexHullStats.svelte +0 -905
  398. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +0 -15
  399. package/dist/convex-hull/ConvexHullTooltip.svelte +0 -131
  400. package/dist/convex-hull/ConvexHullTooltip.svelte.d.ts +0 -33
  401. package/dist/convex-hull/GasPressureControls.svelte +0 -247
  402. package/dist/convex-hull/GasPressureControls.svelte.d.ts +0 -11
  403. package/dist/convex-hull/StructurePopup.svelte +0 -116
  404. package/dist/convex-hull/StructurePopup.svelte.d.ts +0 -18
  405. package/dist/convex-hull/TemperatureSlider.svelte +0 -137
  406. package/dist/convex-hull/TemperatureSlider.svelte.d.ts +0 -8
  407. package/dist/convex-hull/barycentric-coords.d.ts +0 -18
  408. package/dist/convex-hull/barycentric-coords.js +0 -182
  409. package/dist/convex-hull/demo-temperature.d.ts +0 -6
  410. package/dist/convex-hull/demo-temperature.js +0 -40
  411. package/dist/convex-hull/gas-thermodynamics.d.ts +0 -16
  412. package/dist/convex-hull/gas-thermodynamics.js +0 -316
  413. package/dist/convex-hull/helpers.d.ts +0 -103
  414. package/dist/convex-hull/helpers.js +0 -671
  415. package/dist/convex-hull/index.d.ts +0 -118
  416. package/dist/convex-hull/index.js +0 -57
  417. package/dist/convex-hull/thermodynamics.d.ts +0 -66
  418. package/dist/convex-hull/thermodynamics.js +0 -1752
  419. package/dist/convex-hull/types.d.ts +0 -162
  420. package/dist/convex-hull/types.js +0 -36
  421. package/dist/coordination/CoordinationBarPlot.svelte +0 -311
  422. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +0 -30
  423. package/dist/coordination/calc-coordination.d.ts +0 -15
  424. package/dist/coordination/calc-coordination.js +0 -63
  425. package/dist/coordination/index.d.ts +0 -8
  426. package/dist/coordination/index.js +0 -7
  427. package/dist/element/BohrAtom.svelte +0 -149
  428. package/dist/element/BohrAtom.svelte.d.ts +0 -20
  429. package/dist/element/ElementHeading.svelte +0 -26
  430. package/dist/element/ElementHeading.svelte.d.ts +0 -8
  431. package/dist/element/ElementPhoto.svelte +0 -57
  432. package/dist/element/ElementPhoto.svelte.d.ts +0 -9
  433. package/dist/element/ElementStats.svelte +0 -80
  434. package/dist/element/ElementStats.svelte.d.ts +0 -8
  435. package/dist/element/ElementTile.svelte +0 -484
  436. package/dist/element/ElementTile.svelte.d.ts +0 -29
  437. package/dist/element/Nucleus.svelte.d.ts +0 -17
  438. package/dist/element/data.d.ts +0 -3
  439. package/dist/element/data.js +0 -2
  440. package/dist/element/data.json.gz.d.ts +0 -2
  441. package/dist/element/index.d.ts +0 -8
  442. package/dist/element/index.js +0 -8
  443. package/dist/element/types.d.ts +0 -57
  444. package/dist/element/types.js +0 -1
  445. package/dist/feedback/ClickFeedback.svelte +0 -58
  446. package/dist/feedback/ClickFeedback.svelte.d.ts +0 -12
  447. package/dist/feedback/DragOverlay.svelte +0 -42
  448. package/dist/feedback/DragOverlay.svelte.d.ts +0 -7
  449. package/dist/feedback/Spinner.svelte.d.ts +0 -7
  450. package/dist/feedback/StatusMessage.svelte.d.ts +0 -9
  451. package/dist/feedback/index.d.ts +0 -4
  452. package/dist/feedback/index.js +0 -4
  453. package/dist/fermi-surface/FermiSlice.svelte +0 -189
  454. package/dist/fermi-surface/FermiSlice.svelte.d.ts +0 -24
  455. package/dist/fermi-surface/FermiSurface.svelte +0 -597
  456. package/dist/fermi-surface/FermiSurface.svelte.d.ts +0 -83
  457. package/dist/fermi-surface/FermiSurfaceControls.svelte +0 -452
  458. package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +0 -35
  459. package/dist/fermi-surface/FermiSurfaceScene.svelte +0 -792
  460. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +0 -50
  461. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +0 -111
  462. package/dist/fermi-surface/FermiSurfaceTooltip.svelte.d.ts +0 -8
  463. package/dist/fermi-surface/compute.d.ts +0 -5
  464. package/dist/fermi-surface/compute.js +0 -538
  465. package/dist/fermi-surface/constants.d.ts +0 -9
  466. package/dist/fermi-surface/constants.js +0 -27
  467. package/dist/fermi-surface/export.d.ts +0 -5
  468. package/dist/fermi-surface/export.js +0 -63
  469. package/dist/fermi-surface/index.d.ts +0 -12
  470. package/dist/fermi-surface/index.js +0 -13
  471. package/dist/fermi-surface/marching-cubes.d.ts +0 -2
  472. package/dist/fermi-surface/marching-cubes.js +0 -2
  473. package/dist/fermi-surface/parse.d.ts +0 -2
  474. package/dist/fermi-surface/parse.js +0 -495
  475. package/dist/fermi-surface/symmetry.d.ts +0 -3
  476. package/dist/fermi-surface/symmetry.js +0 -46
  477. package/dist/fermi-surface/types.d.ts +0 -113
  478. package/dist/fermi-surface/types.js +0 -4
  479. package/dist/heatmap-matrix/HeatmapMatrix.svelte +0 -1527
  480. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +0 -110
  481. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +0 -225
  482. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +0 -30
  483. package/dist/heatmap-matrix/index.d.ts +0 -53
  484. package/dist/heatmap-matrix/index.js +0 -100
  485. package/dist/heatmap-matrix/shared.d.ts +0 -2
  486. package/dist/heatmap-matrix/shared.js +0 -4
  487. package/dist/icons.d.ts +0 -569
  488. package/dist/icons.js +0 -648
  489. package/dist/index.d.ts +0 -39
  490. package/dist/index.js +0 -39
  491. package/dist/io/decompress.d.ts +0 -10
  492. package/dist/io/decompress.js +0 -69
  493. package/dist/io/export.d.ts +0 -16
  494. package/dist/io/export.js +0 -312
  495. package/dist/io/fetch.d.ts +0 -5
  496. package/dist/io/fetch.js +0 -39
  497. package/dist/io/file-drop.d.ts +0 -7
  498. package/dist/io/file-drop.js +0 -43
  499. package/dist/io/index.d.ts +0 -7
  500. package/dist/io/index.js +0 -7
  501. package/dist/io/is-binary.d.ts +0 -1
  502. package/dist/io/is-binary.js +0 -5
  503. package/dist/io/types.d.ts +0 -8
  504. package/dist/io/types.js +0 -1
  505. package/dist/io/url-drop.d.ts +0 -2
  506. package/dist/io/url-drop.js +0 -117
  507. package/dist/isosurface/Isosurface.svelte +0 -285
  508. package/dist/isosurface/Isosurface.svelte.d.ts +0 -8
  509. package/dist/isosurface/IsosurfaceControls.svelte +0 -291
  510. package/dist/isosurface/IsosurfaceControls.svelte.d.ts +0 -9
  511. package/dist/isosurface/index.d.ts +0 -5
  512. package/dist/isosurface/index.js +0 -6
  513. package/dist/isosurface/parse.d.ts +0 -6
  514. package/dist/isosurface/parse.js +0 -553
  515. package/dist/isosurface/slice.d.ts +0 -11
  516. package/dist/isosurface/slice.js +0 -140
  517. package/dist/isosurface/types.d.ts +0 -56
  518. package/dist/isosurface/types.js +0 -227
  519. package/dist/labels.d.ts +0 -53
  520. package/dist/labels.js +0 -274
  521. package/dist/layout/FullscreenToggle.svelte +0 -50
  522. package/dist/layout/FullscreenToggle.svelte.d.ts +0 -7
  523. package/dist/layout/InfoCard.svelte +0 -120
  524. package/dist/layout/InfoCard.svelte.d.ts +0 -21
  525. package/dist/layout/InfoTag.svelte +0 -183
  526. package/dist/layout/InfoTag.svelte.d.ts +0 -19
  527. package/dist/layout/PropertyFilter.svelte +0 -244
  528. package/dist/layout/PropertyFilter.svelte.d.ts +0 -24
  529. package/dist/layout/SettingsSection.svelte +0 -148
  530. package/dist/layout/SettingsSection.svelte.d.ts +0 -17
  531. package/dist/layout/SubpageGrid.svelte +0 -82
  532. package/dist/layout/SubpageGrid.svelte.d.ts +0 -14
  533. package/dist/layout/fullscreen.d.ts +0 -9
  534. package/dist/layout/fullscreen.js +0 -53
  535. package/dist/layout/index.d.ts +0 -10
  536. package/dist/layout/index.js +0 -8
  537. package/dist/layout/json-tree/JsonNode.svelte +0 -547
  538. package/dist/layout/json-tree/JsonNode.svelte.d.ts +0 -11
  539. package/dist/layout/json-tree/JsonTree.svelte +0 -1222
  540. package/dist/layout/json-tree/JsonTree.svelte.d.ts +0 -6
  541. package/dist/layout/json-tree/JsonValue.svelte +0 -334
  542. package/dist/layout/json-tree/JsonValue.svelte.d.ts +0 -9
  543. package/dist/layout/json-tree/index.d.ts +0 -3
  544. package/dist/layout/json-tree/index.js +0 -3
  545. package/dist/layout/json-tree/types.d.ts +0 -73
  546. package/dist/layout/json-tree/types.js +0 -3
  547. package/dist/layout/json-tree/utils.d.ts +0 -29
  548. package/dist/layout/json-tree/utils.js +0 -648
  549. package/dist/marching-cubes.d.ts +0 -14
  550. package/dist/marching-cubes.js +0 -542
  551. package/dist/math.d.ts +0 -91
  552. package/dist/math.js +0 -896
  553. package/dist/overlays/ContextMenu.svelte +0 -162
  554. package/dist/overlays/ContextMenu.svelte.d.ts +0 -25
  555. package/dist/overlays/DraggablePane.svelte +0 -564
  556. package/dist/overlays/DraggablePane.svelte.d.ts +0 -36
  557. package/dist/overlays/index.d.ts +0 -2
  558. package/dist/overlays/index.js +0 -2
  559. package/dist/periodic-table/PeriodicTable.svelte +0 -469
  560. package/dist/periodic-table/PeriodicTable.svelte.d.ts +0 -55
  561. package/dist/periodic-table/PeriodicTableControls.svelte +0 -557
  562. package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +0 -24
  563. package/dist/periodic-table/PropertySelect.svelte +0 -37
  564. package/dist/periodic-table/PropertySelect.svelte.d.ts +0 -13
  565. package/dist/periodic-table/TableInset.svelte.d.ts +0 -9
  566. package/dist/periodic-table/index.d.ts +0 -10
  567. package/dist/periodic-table/index.js +0 -4
  568. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +0 -1086
  569. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +0 -44
  570. package/dist/phase-diagram/PhaseDiagramControls.svelte +0 -451
  571. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +0 -30
  572. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +0 -126
  573. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +0 -15
  574. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +0 -192
  575. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +0 -19
  576. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +0 -392
  577. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +0 -16
  578. package/dist/phase-diagram/TdbInfoPanel.svelte +0 -203
  579. package/dist/phase-diagram/TdbInfoPanel.svelte.d.ts +0 -12
  580. package/dist/phase-diagram/build-diagram.d.ts +0 -11
  581. package/dist/phase-diagram/build-diagram.js +0 -167
  582. package/dist/phase-diagram/colors.d.ts +0 -35
  583. package/dist/phase-diagram/colors.js +0 -51
  584. package/dist/phase-diagram/diagram-input.d.ts +0 -33
  585. package/dist/phase-diagram/diagram-input.js +0 -3
  586. package/dist/phase-diagram/index.d.ts +0 -13
  587. package/dist/phase-diagram/index.js +0 -13
  588. package/dist/phase-diagram/parse.d.ts +0 -55
  589. package/dist/phase-diagram/parse.js +0 -276
  590. package/dist/phase-diagram/svg-to-diagram.d.ts +0 -2
  591. package/dist/phase-diagram/svg-to-diagram.js +0 -869
  592. package/dist/phase-diagram/types.d.ts +0 -99
  593. package/dist/phase-diagram/types.js +0 -1
  594. package/dist/phase-diagram/utils.d.ts +0 -118
  595. package/dist/phase-diagram/utils.js +0 -606
  596. package/dist/plot/AxisLabel.svelte +0 -51
  597. package/dist/plot/AxisLabel.svelte.d.ts +0 -16
  598. package/dist/plot/BarPlot.svelte +0 -2256
  599. package/dist/plot/BarPlot.svelte.d.ts +0 -82
  600. package/dist/plot/BarPlotControls.svelte +0 -66
  601. package/dist/plot/BarPlotControls.svelte.d.ts +0 -18
  602. package/dist/plot/ColorBar.svelte +0 -719
  603. package/dist/plot/ColorBar.svelte.d.ts +0 -31
  604. package/dist/plot/ColorScaleSelect.svelte +0 -54
  605. package/dist/plot/ColorScaleSelect.svelte.d.ts +0 -15
  606. package/dist/plot/ElementScatter.svelte +0 -63
  607. package/dist/plot/ElementScatter.svelte.d.ts +0 -14
  608. package/dist/plot/FillArea.svelte +0 -226
  609. package/dist/plot/FillArea.svelte.d.ts +0 -20
  610. package/dist/plot/Histogram.svelte +0 -1654
  611. package/dist/plot/Histogram.svelte.d.ts +0 -50
  612. package/dist/plot/HistogramControls.svelte +0 -212
  613. package/dist/plot/HistogramControls.svelte.d.ts +0 -22
  614. package/dist/plot/InteractiveAxisLabel.svelte +0 -94
  615. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +0 -14
  616. package/dist/plot/Line.svelte +0 -85
  617. package/dist/plot/Line.svelte.d.ts +0 -15
  618. package/dist/plot/PlotControls.svelte +0 -537
  619. package/dist/plot/PlotControls.svelte.d.ts +0 -4
  620. package/dist/plot/PlotLegend.svelte +0 -498
  621. package/dist/plot/PlotLegend.svelte.d.ts +0 -25
  622. package/dist/plot/PlotTooltip.svelte +0 -67
  623. package/dist/plot/PlotTooltip.svelte.d.ts +0 -17
  624. package/dist/plot/PortalSelect.svelte +0 -253
  625. package/dist/plot/PortalSelect.svelte.d.ts +0 -16
  626. package/dist/plot/ReferenceLine.svelte.d.ts +0 -20
  627. package/dist/plot/ReferenceLine3D.svelte +0 -154
  628. package/dist/plot/ReferenceLine3D.svelte.d.ts +0 -14
  629. package/dist/plot/ReferencePlane.svelte +0 -178
  630. package/dist/plot/ReferencePlane.svelte.d.ts +0 -14
  631. package/dist/plot/ScatterPlot.svelte +0 -2831
  632. package/dist/plot/ScatterPlot.svelte.d.ts +0 -92
  633. package/dist/plot/ScatterPlot3D.svelte +0 -499
  634. package/dist/plot/ScatterPlot3D.svelte.d.ts +0 -94
  635. package/dist/plot/ScatterPlot3DControls.svelte +0 -437
  636. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +0 -20
  637. package/dist/plot/ScatterPlot3DScene.svelte +0 -912
  638. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +0 -74
  639. package/dist/plot/ScatterPlotControls.svelte +0 -307
  640. package/dist/plot/ScatterPlotControls.svelte.d.ts +0 -17
  641. package/dist/plot/ScatterPoint.svelte +0 -185
  642. package/dist/plot/ScatterPoint.svelte.d.ts +0 -19
  643. package/dist/plot/SpacegroupBarPlot.svelte +0 -292
  644. package/dist/plot/SpacegroupBarPlot.svelte.d.ts +0 -9
  645. package/dist/plot/Surface3D.svelte +0 -200
  646. package/dist/plot/Surface3D.svelte.d.ts +0 -13
  647. package/dist/plot/ZeroLines.svelte +0 -96
  648. package/dist/plot/ZeroLines.svelte.d.ts +0 -32
  649. package/dist/plot/ZoomRect.svelte +0 -23
  650. package/dist/plot/ZoomRect.svelte.d.ts +0 -8
  651. package/dist/plot/axis-utils.d.ts +0 -19
  652. package/dist/plot/axis-utils.js +0 -80
  653. package/dist/plot/data-cleaning.d.ts +0 -37
  654. package/dist/plot/data-cleaning.js +0 -855
  655. package/dist/plot/data-transform.d.ts +0 -16
  656. package/dist/plot/data-transform.js +0 -45
  657. package/dist/plot/defaults.d.ts +0 -19
  658. package/dist/plot/defaults.js +0 -9
  659. package/dist/plot/fill-utils.d.ts +0 -51
  660. package/dist/plot/fill-utils.js +0 -337
  661. package/dist/plot/hover-lock.svelte.d.ts +0 -14
  662. package/dist/plot/hover-lock.svelte.js +0 -46
  663. package/dist/plot/index.d.ts +0 -43
  664. package/dist/plot/index.js +0 -37
  665. package/dist/plot/interactions.d.ts +0 -12
  666. package/dist/plot/interactions.js +0 -100
  667. package/dist/plot/layout.d.ts +0 -60
  668. package/dist/plot/layout.js +0 -230
  669. package/dist/plot/reference-line.d.ts +0 -60
  670. package/dist/plot/reference-line.js +0 -316
  671. package/dist/plot/scales.d.ts +0 -48
  672. package/dist/plot/scales.js +0 -484
  673. package/dist/plot/svg.d.ts +0 -1
  674. package/dist/plot/svg.js +0 -11
  675. package/dist/plot/types.d.ts +0 -863
  676. package/dist/plot/types.js +0 -103
  677. package/dist/plot/utils/label-placement.d.ts +0 -47
  678. package/dist/plot/utils/label-placement.js +0 -256
  679. package/dist/plot/utils/series-visibility.d.ts +0 -9
  680. package/dist/plot/utils/series-visibility.js +0 -67
  681. package/dist/plot/utils.d.ts +0 -1
  682. package/dist/plot/utils.js +0 -14
  683. package/dist/rdf/RdfPlot.svelte +0 -247
  684. package/dist/rdf/RdfPlot.svelte.d.ts +0 -27
  685. package/dist/rdf/calc-rdf.d.ts +0 -4
  686. package/dist/rdf/calc-rdf.js +0 -111
  687. package/dist/rdf/index.d.ts +0 -23
  688. package/dist/rdf/index.js +0 -2
  689. package/dist/sanitize.d.ts +0 -4
  690. package/dist/sanitize.js +0 -107
  691. package/dist/settings.d.ts +0 -253
  692. package/dist/settings.js +0 -1123
  693. package/dist/spectral/Bands.svelte +0 -1040
  694. package/dist/spectral/Bands.svelte.d.ts +0 -40
  695. package/dist/spectral/BandsAndDos.svelte +0 -128
  696. package/dist/spectral/BandsAndDos.svelte.d.ts +0 -18
  697. package/dist/spectral/BrillouinBandsDos.svelte +0 -248
  698. package/dist/spectral/BrillouinBandsDos.svelte.d.ts +0 -20
  699. package/dist/spectral/Dos.svelte +0 -697
  700. package/dist/spectral/Dos.svelte.d.ts +0 -29
  701. package/dist/spectral/helpers.d.ts +0 -117
  702. package/dist/spectral/helpers.js +0 -1023
  703. package/dist/spectral/index.d.ts +0 -6
  704. package/dist/spectral/index.js +0 -7
  705. package/dist/spectral/types.d.ts +0 -84
  706. package/dist/spectral/types.js +0 -2
  707. package/dist/state.svelte.d.ts +0 -25
  708. package/dist/state.svelte.js +0 -45
  709. package/dist/structure/Arrow.svelte +0 -72
  710. package/dist/structure/Arrow.svelte.d.ts +0 -15
  711. package/dist/structure/AtomLegend.svelte +0 -798
  712. package/dist/structure/AtomLegend.svelte.d.ts +0 -34
  713. package/dist/structure/Bond.svelte +0 -140
  714. package/dist/structure/Bond.svelte.d.ts +0 -9
  715. package/dist/structure/CanvasTooltip.svelte +0 -33
  716. package/dist/structure/CanvasTooltip.svelte.d.ts +0 -12
  717. package/dist/structure/CellSelect.svelte +0 -351
  718. package/dist/structure/CellSelect.svelte.d.ts +0 -13
  719. package/dist/structure/Cylinder.svelte +0 -45
  720. package/dist/structure/Cylinder.svelte.d.ts +0 -10
  721. package/dist/structure/Lattice.svelte +0 -196
  722. package/dist/structure/Lattice.svelte.d.ts +0 -17
  723. package/dist/structure/Structure.svelte +0 -1857
  724. package/dist/structure/Structure.svelte.d.ts +0 -83
  725. package/dist/structure/StructureControls.svelte +0 -1184
  726. package/dist/structure/StructureControls.svelte.d.ts +0 -31
  727. package/dist/structure/StructureExportPane.svelte +0 -251
  728. package/dist/structure/StructureExportPane.svelte.d.ts +0 -17
  729. package/dist/structure/StructureInfoPane.svelte +0 -434
  730. package/dist/structure/StructureInfoPane.svelte.d.ts +0 -18
  731. package/dist/structure/StructureScene.svelte +0 -1574
  732. package/dist/structure/StructureScene.svelte.d.ts +0 -104
  733. package/dist/structure/atom-properties.d.ts +0 -37
  734. package/dist/structure/atom-properties.js +0 -198
  735. package/dist/structure/bonding.d.ts +0 -33
  736. package/dist/structure/bonding.js +0 -304
  737. package/dist/structure/export.d.ts +0 -20
  738. package/dist/structure/export.js +0 -725
  739. package/dist/structure/ferrox-wasm-types.d.ts +0 -46
  740. package/dist/structure/ferrox-wasm-types.js +0 -18
  741. package/dist/structure/ferrox-wasm.d.ts +0 -94
  742. package/dist/structure/ferrox-wasm.js +0 -249
  743. package/dist/structure/index.d.ts +0 -110
  744. package/dist/structure/index.js +0 -168
  745. package/dist/structure/measure.d.ts +0 -6
  746. package/dist/structure/measure.js +0 -29
  747. package/dist/structure/parse.d.ts +0 -65
  748. package/dist/structure/parse.js +0 -1374
  749. package/dist/structure/partial-occupancy.d.ts +0 -25
  750. package/dist/structure/partial-occupancy.js +0 -99
  751. package/dist/structure/pbc.d.ts +0 -9
  752. package/dist/structure/pbc.js +0 -123
  753. package/dist/structure/supercell.d.ts +0 -8
  754. package/dist/structure/supercell.js +0 -137
  755. package/dist/structure/validation.d.ts +0 -2
  756. package/dist/structure/validation.js +0 -10
  757. package/dist/symmetry/SymmetryStats.svelte +0 -226
  758. package/dist/symmetry/SymmetryStats.svelte.d.ts +0 -21
  759. package/dist/symmetry/WyckoffTable.svelte +0 -113
  760. package/dist/symmetry/WyckoffTable.svelte.d.ts +0 -11
  761. package/dist/symmetry/cell-transform.d.ts +0 -12
  762. package/dist/symmetry/cell-transform.js +0 -77
  763. package/dist/symmetry/index.d.ts +0 -43
  764. package/dist/symmetry/index.js +0 -229
  765. package/dist/symmetry/spacegroups.d.ts +0 -9
  766. package/dist/symmetry/spacegroups.js +0 -394
  767. package/dist/table/HeatmapTable.svelte +0 -1854
  768. package/dist/table/HeatmapTable.svelte.d.ts +0 -49
  769. package/dist/table/ToggleMenu.svelte +0 -376
  770. package/dist/table/ToggleMenu.svelte.d.ts +0 -11
  771. package/dist/table/index.d.ts +0 -74
  772. package/dist/table/index.js +0 -38
  773. package/dist/theme/ThemeControl.svelte +0 -53
  774. package/dist/theme/ThemeControl.svelte.d.ts +0 -9
  775. package/dist/theme/index.d.ts +0 -29
  776. package/dist/theme/index.js +0 -79
  777. package/dist/theme/themes.mjs +0 -285
  778. package/dist/time.d.ts +0 -4
  779. package/dist/time.js +0 -70
  780. package/dist/tooltip/TooltipContent.svelte +0 -58
  781. package/dist/tooltip/TooltipContent.svelte.d.ts +0 -31
  782. package/dist/tooltip/index.d.ts +0 -2
  783. package/dist/tooltip/index.js +0 -2
  784. package/dist/tooltip/types.d.ts +0 -8
  785. package/dist/tooltip/types.js +0 -1
  786. package/dist/trajectory/Trajectory.svelte +0 -1517
  787. package/dist/trajectory/Trajectory.svelte.d.ts +0 -77
  788. package/dist/trajectory/TrajectoryError.svelte +0 -128
  789. package/dist/trajectory/TrajectoryError.svelte.d.ts +0 -13
  790. package/dist/trajectory/TrajectoryExportPane.svelte +0 -357
  791. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +0 -17
  792. package/dist/trajectory/TrajectoryInfoPane.svelte +0 -387
  793. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +0 -17
  794. package/dist/trajectory/constants.d.ts +0 -6
  795. package/dist/trajectory/constants.js +0 -7
  796. package/dist/trajectory/extract.d.ts +0 -5
  797. package/dist/trajectory/extract.js +0 -162
  798. package/dist/trajectory/format-detect.d.ts +0 -9
  799. package/dist/trajectory/format-detect.js +0 -76
  800. package/dist/trajectory/frame-reader.d.ts +0 -17
  801. package/dist/trajectory/frame-reader.js +0 -332
  802. package/dist/trajectory/helpers.d.ts +0 -14
  803. package/dist/trajectory/helpers.js +0 -172
  804. package/dist/trajectory/index.d.ts +0 -63
  805. package/dist/trajectory/index.js +0 -126
  806. package/dist/trajectory/parse/ase.d.ts +0 -2
  807. package/dist/trajectory/parse/ase.js +0 -77
  808. package/dist/trajectory/parse/hdf5.d.ts +0 -2
  809. package/dist/trajectory/parse/hdf5.js +0 -129
  810. package/dist/trajectory/parse/index.d.ts +0 -12
  811. package/dist/trajectory/parse/index.js +0 -299
  812. package/dist/trajectory/parse/lammps.d.ts +0 -5
  813. package/dist/trajectory/parse/lammps.js +0 -179
  814. package/dist/trajectory/parse/vasp.d.ts +0 -2
  815. package/dist/trajectory/parse/vasp.js +0 -68
  816. package/dist/trajectory/parse/xyz.d.ts +0 -2
  817. package/dist/trajectory/parse/xyz.js +0 -110
  818. package/dist/trajectory/plotting.d.ts +0 -28
  819. package/dist/trajectory/plotting.js +0 -423
  820. package/dist/trajectory/types.d.ts +0 -11
  821. package/dist/trajectory/types.js +0 -1
  822. package/dist/utils.d.ts +0 -5
  823. package/dist/utils.js +0 -36
  824. package/dist/xrd/XrdPlot.svelte +0 -615
  825. package/dist/xrd/XrdPlot.svelte.d.ts +0 -28
  826. package/dist/xrd/broadening.d.ts +0 -20
  827. package/dist/xrd/broadening.js +0 -97
  828. package/dist/xrd/calc-xrd.d.ts +0 -37
  829. package/dist/xrd/calc-xrd.js +0 -337
  830. package/dist/xrd/index.d.ts +0 -37
  831. package/dist/xrd/index.js +0 -4
  832. package/dist/xrd/parse.d.ts +0 -13
  833. package/dist/xrd/parse.js +0 -749
  834. /package/dist/{EmptyState.svelte → src/lib/EmptyState.svelte} +0 -0
  835. /package/dist/{Icon.svelte → src/lib/Icon.svelte} +0 -0
  836. /package/dist/{chempot-diagram → src/lib/chempot-diagram}/ChemPotScene3D.svelte +0 -0
  837. /package/dist/{colors → src/lib/colors}/alloy-colors.json +0 -0
  838. /package/dist/{colors → src/lib/colors}/dark-mode-colors.json +0 -0
  839. /package/dist/{colors → src/lib/colors}/jmol-colors.json +0 -0
  840. /package/dist/{colors → src/lib/colors}/muted-colors.json +0 -0
  841. /package/dist/{colors → src/lib/colors}/pastel-colors.json +0 -0
  842. /package/dist/{colors → src/lib/colors}/vesta-colors.json +0 -0
  843. /package/dist/{element → src/lib/element}/Nucleus.svelte +0 -0
  844. /package/dist/{element → src/lib/element}/data.json +0 -0
  845. /package/dist/{element → src/lib/element}/data.json.gz +0 -0
  846. /package/dist/{element → src/lib/element}/data.schema.json +0 -0
  847. /package/dist/{element-image-urls.json → src/lib/element-image-urls.json} +0 -0
  848. /package/dist/{feedback → src/lib/feedback}/Spinner.svelte +0 -0
  849. /package/dist/{feedback → src/lib/feedback}/StatusMessage.svelte +0 -0
  850. /package/dist/{periodic-table → src/lib/periodic-table}/TableInset.svelte +0 -0
  851. /package/dist/{plot → src/lib/plot}/ReferenceLine.svelte +0 -0
  852. /package/dist/{xrd → src/lib/xrd}/atomic_scattering_params.json +0 -0
@@ -0,0 +1,1079 @@
1
+ <script lang="ts">
2
+ // Split-pane JSON browser for the VS Code extension.
3
+ // Left sidebar shows a JsonTree for navigating the file's JSON structure.
4
+ // Right canvas renders one or more visualization panels in a split layout.
5
+ // Users can click tree nodes to render in the main panel, or drag nodes
6
+ // to specific edges to create horizontal/vertical splits.
7
+ import BrillouinZone from '$lib/brillouin/BrillouinZone.svelte'
8
+ import ConvexHull from '$lib/convex-hull/ConvexHull.svelte'
9
+ import type { PhaseData } from '$lib/convex-hull/types'
10
+ import FermiSurface from '$lib/fermi-surface/FermiSurface.svelte'
11
+ import { is_fermi_surface_data } from '$lib/fermi-surface/types'
12
+ import type { VolumetricData } from '$lib/isosurface/types'
13
+ import JsonTree from '$lib/layout/json-tree/JsonTree.svelte'
14
+ import IsobaricBinaryPhaseDiagram from '$lib/phase-diagram/IsobaricBinaryPhaseDiagram.svelte'
15
+ import type { PhaseDiagramData } from '$lib/phase-diagram/types'
16
+ import { merge, type DefaultSettings } from '$lib/settings'
17
+ import Bands from '$lib/spectral/Bands.svelte'
18
+ import BandsAndDos from '$lib/spectral/BandsAndDos.svelte'
19
+ import Dos from '$lib/spectral/Dos.svelte'
20
+ import type { BaseBandStructure, DosInput } from '$lib/spectral/types'
21
+ import type { AnyStructure, LatticeType } from '$lib/structure'
22
+ import {
23
+ is_optimade_raw,
24
+ normalize_fractional_coords,
25
+ parse_optimade_from_raw,
26
+ } from '$lib/structure/parse'
27
+ import Structure from '$lib/structure/Structure.svelte'
28
+ import type { XrdPattern } from '$lib/xrd'
29
+ import XrdPlot from '$lib/xrd/XrdPlot.svelte'
30
+ import { mount, unmount } from 'svelte'
31
+ import {
32
+ detect_view_type,
33
+ scan_renderable_paths,
34
+ TYPE_COLORS,
35
+ TYPE_LABELS,
36
+ } from './detect'
37
+ import type { RenderableType } from './detect'
38
+ import PlotPanel from './PlotPanel.svelte'
39
+
40
+ let {
41
+ value,
42
+ defaults,
43
+ filename,
44
+ }: {
45
+ value: unknown
46
+ defaults?: DefaultSettings
47
+ filename?: string
48
+ } = $props()
49
+
50
+ // === Panel state ===
51
+ // Each panel holds a mounted component. Panels are arranged in a flat list
52
+ // with split info (direction) between consecutive panels.
53
+ // Panel sizing is stored as a parallel array of flex weights.
54
+ interface PanelInfo {
55
+ id: string
56
+ data_path: string
57
+ detected_type: RenderableType
58
+ val: unknown
59
+ component: ReturnType<typeof mount> | null
60
+ element: HTMLElement | null
61
+ }
62
+
63
+ type SplitDirection = `horizontal` | `vertical`
64
+
65
+ let panels = $state<PanelInfo[]>([])
66
+ let panel_sizes = $state<number[]>([]) // flex weight per panel (parallel to panels[])
67
+ let split_directions = $state<SplitDirection[]>([]) // direction between panels[i] and panels[i+1]
68
+
69
+ // Debounce timer for rapid clicks (cleaned up when component is destroyed)
70
+ let select_timer: ReturnType<typeof setTimeout> | undefined
71
+ let destroyed = false
72
+ $effect(() => () => {
73
+ destroyed = true
74
+ if (select_timer) clearTimeout(select_timer)
75
+ })
76
+
77
+ // Unmount all imperatively mounted panels when this component is destroyed
78
+ // (prevents leaked WebGL contexts, Three.js renderers, etc.)
79
+ $effect(() => () => {
80
+ for (let idx = 0; idx < panels.length; idx++) {
81
+ unmount_panel(idx)
82
+ }
83
+ })
84
+
85
+ // Scan for renderable paths asynchronously to avoid blocking the UI on large JSON files.
86
+ // Uses requestIdleCallback to yield to the main thread during tree rendering.
87
+ let renderable_paths = $state(new Map<string, { type: RenderableType; label: string }>())
88
+ let auto_rendered = false
89
+ $effect(() => {
90
+ const current_value = value
91
+ const idle_handle = requestIdleCallback(() => {
92
+ renderable_paths = scan_renderable_paths(current_value)
93
+ // Auto-render if the root value itself is a single renderable type
94
+ // (avoids forcing the user to click for single-type JSON files)
95
+ if (!auto_rendered && renderable_paths.has(``)) {
96
+ auto_rendered = true
97
+ const info = renderable_paths.get(``)
98
+ if (info) replace_or_add_panel(``, info.type, current_value)
99
+ }
100
+ })
101
+ return () => cancelIdleCallback(idle_handle)
102
+ })
103
+
104
+ // === Draggable sidebar divider ===
105
+ let sidebar_width = $state(320)
106
+ let is_sidebar_dragging = $state(false)
107
+
108
+ // Generic drag cleanup helper -- in a webview iframe the cursor can leave the
109
+ // document entirely, so we listen for mouseup, blur, and pointerleave to ensure
110
+ // the drag always terminates.
111
+ function start_drag(on_move: (event: MouseEvent) => void, on_done: () => void): void {
112
+ let cleaned_up = false
113
+ function cleanup(): void {
114
+ if (cleaned_up) return
115
+ cleaned_up = true
116
+ on_done()
117
+ globalThis.removeEventListener(`mousemove`, on_move)
118
+ globalThis.removeEventListener(`mouseup`, cleanup)
119
+ globalThis.removeEventListener(`blur`, cleanup)
120
+ document.documentElement.removeEventListener(`mouseleave`, cleanup)
121
+ }
122
+ globalThis.addEventListener(`mousemove`, on_move)
123
+ globalThis.addEventListener(`mouseup`, cleanup)
124
+ globalThis.addEventListener(`blur`, cleanup)
125
+ document.documentElement.addEventListener(`mouseleave`, cleanup)
126
+ }
127
+
128
+ function on_sidebar_divider_mousedown(event: MouseEvent): void {
129
+ event.preventDefault()
130
+ is_sidebar_dragging = true
131
+ const start_x = event.clientX
132
+ const start_width = sidebar_width
133
+ start_drag(
134
+ (move_event) => {
135
+ const delta = move_event.clientX - start_x
136
+ sidebar_width = Math.max(150, Math.min(start_width + delta, window.innerWidth * 0.6))
137
+ },
138
+ () => {
139
+ is_sidebar_dragging = false
140
+ },
141
+ )
142
+ }
143
+
144
+ // === Drag-and-drop from tree ===
145
+ let drop_zone = $state<`top` | `bottom` | `left` | `right` | `center` | null>(null)
146
+ let drop_target_panel_idx = $state<number>(-1)
147
+ let canvas_element: HTMLElement | undefined = $state()
148
+
149
+ let sidebar_element: HTMLElement | undefined = $state()
150
+
151
+ // Strip internal suffix used to register multiple renderable types at the same path
152
+ function strip_type_suffix(path: string): string {
153
+ const idx = path.indexOf(`\x00`)
154
+ return idx >= 0 ? path.slice(0, idx) : path
155
+ }
156
+
157
+ // Convert a data path (relative to JSON root) to the tree path used by JsonTree
158
+ function data_to_tree_path(data_path: string): string {
159
+ const clean = strip_type_suffix(data_path)
160
+ return filename ? (clean ? `${filename}.${clean}` : filename) : clean
161
+ }
162
+
163
+ // Build a map of tree paths that are renderable (for fast draggable lookup).
164
+ // Skip synthetic suffix paths (\x00...) since those have their own badge drag handlers.
165
+ let renderable_tree_paths = $derived(
166
+ new Map(
167
+ [...renderable_paths]
168
+ .filter(([data_path]) => !data_path.includes(`\x00`))
169
+ .map(([data_path, info]) => [data_to_tree_path(data_path), { data_path, ...info }]),
170
+ ),
171
+ )
172
+
173
+ // Mark renderable tree nodes as draggable via attribute (no per-node listeners)
174
+ function mark_draggable_nodes(): void {
175
+ if (!sidebar_element) return
176
+ for (const node of sidebar_element.querySelectorAll(`[data-path]`)) {
177
+ const el = node as HTMLElement
178
+ const tree_path = el.getAttribute(`data-path`) ?? ``
179
+ el.draggable = renderable_tree_paths.has(tree_path)
180
+ }
181
+ }
182
+
183
+ // Single delegated dragstart handler on sidebar (no per-node listeners needed)
184
+ $effect(() => {
185
+ if (!sidebar_element) return
186
+ function on_dragstart(event: DragEvent): void {
187
+ if (!event.dataTransfer) {
188
+ event.preventDefault()
189
+ return
190
+ }
191
+ const origin = event.target
192
+ if (!(origin instanceof HTMLElement)) return
193
+ // If dragging a badge directly, use its own data attributes
194
+ const badge = origin.closest(`.renderable-badge`) as HTMLElement | null
195
+ if (badge) {
196
+ const data_path = badge.dataset.renderable_path ?? ``
197
+ const detected_type = badge.dataset.renderable_type ?? ``
198
+ event.dataTransfer.setData(`text/plain`, JSON.stringify({ data_path, detected_type }))
199
+ event.dataTransfer.effectAllowed = `copy`
200
+ return
201
+ }
202
+ // Otherwise dragging a tree node -- look up from tree path
203
+ const target = origin.closest(`[data-path]`) as HTMLElement | null
204
+ if (!target) return
205
+ const tree_path = target.getAttribute(`data-path`) ?? ``
206
+ const info = renderable_tree_paths.get(tree_path)
207
+ if (!info) {
208
+ event.preventDefault()
209
+ return
210
+ }
211
+ event.dataTransfer.setData(
212
+ `text/plain`,
213
+ JSON.stringify({ data_path: info.data_path, detected_type: info.type }),
214
+ )
215
+ event.dataTransfer.effectAllowed = `copy`
216
+ }
217
+ sidebar_element.addEventListener(`dragstart`, on_dragstart)
218
+ return () => sidebar_element?.removeEventListener(`dragstart`, on_dragstart)
219
+ })
220
+
221
+ // === Badge injection ===
222
+ function apply_badges(): void {
223
+ if (!sidebar_element || renderable_paths.size === 0) return
224
+ for (const existing of sidebar_element.querySelectorAll(`.renderable-badge`)) {
225
+ existing.remove()
226
+ }
227
+ for (const [data_path, info] of renderable_paths) {
228
+ const node = sidebar_element.querySelector(
229
+ `[data-path="${CSS.escape(data_to_tree_path(data_path))}"]`,
230
+ )
231
+ if (!node) continue
232
+ const colon_el = node.querySelector(`.colon`)
233
+ const insert_after = colon_el ?? node.querySelector(`.node-key`) ?? node
234
+ const badge = document.createElement(`span`)
235
+ badge.className = `renderable-badge`
236
+ badge.textContent = info.label
237
+ badge.title = `Drag to canvas or click to render`
238
+ badge.dataset.renderable_path = data_path
239
+ badge.dataset.renderable_type = info.type
240
+ badge.style.background = TYPE_COLORS[info.type]
241
+ badge.draggable = true
242
+ insert_after.after(badge)
243
+ }
244
+ }
245
+
246
+ // Delegated click handler for badges (avoids per-badge listeners that leak on re-render)
247
+ // Uses capture phase to intercept before tree node fold/select handlers
248
+ $effect(() => {
249
+ if (!sidebar_element) return
250
+ function on_badge_click(event: MouseEvent): void {
251
+ const origin = event.target
252
+ if (!(origin instanceof HTMLElement)) return
253
+ const badge = origin.closest(`.renderable-badge`) as HTMLElement | null
254
+ if (!badge) return
255
+ event.stopPropagation()
256
+ event.preventDefault()
257
+ const raw_path = badge.dataset.renderable_path ?? ``
258
+ const data_path = strip_type_suffix(raw_path)
259
+ const detected_type = badge.dataset.renderable_type
260
+ if (!detected_type || !(detected_type in TYPE_LABELS)) return
261
+ const val = resolve_path(value, data_path)
262
+ if (val !== undefined)
263
+ replace_or_add_panel(data_path, detected_type as RenderableType, val)
264
+ }
265
+ sidebar_element.addEventListener(`click`, on_badge_click, true)
266
+ return () => sidebar_element?.removeEventListener(`click`, on_badge_click, true)
267
+ })
268
+
269
+ // Escape key closes all panels, returning to the overview
270
+ $effect(() => {
271
+ if (panels.length === 0) return
272
+ function on_keydown(event: KeyboardEvent): void {
273
+ if (event.key !== `Escape`) return
274
+ const target = event.target
275
+ if (
276
+ target instanceof HTMLElement &&
277
+ [`INPUT`, `SELECT`, `TEXTAREA`].includes(target.tagName)
278
+ ) return
279
+ close_all_panels()
280
+ }
281
+ globalThis.addEventListener(`keydown`, on_keydown)
282
+ return () => globalThis.removeEventListener(`keydown`, on_keydown)
283
+ })
284
+
285
+ // Re-apply badges + draggable attributes when tree DOM changes.
286
+ // Guard with a flag so our own badge DOM mutations don't re-trigger the observer,
287
+ // and coalesce rapid mutations into a single rAF.
288
+ let applying_badges = false
289
+ $effect(() => {
290
+ if (!sidebar_element) return
291
+ let pending_raf: number | null = null
292
+ function schedule_refresh(): void {
293
+ if (pending_raf) return
294
+ pending_raf = requestAnimationFrame(() => {
295
+ pending_raf = null
296
+ if (applying_badges) return
297
+ applying_badges = true
298
+ try {
299
+ apply_badges()
300
+ mark_draggable_nodes()
301
+ } finally {
302
+ applying_badges = false
303
+ }
304
+ })
305
+ }
306
+ schedule_refresh()
307
+ const observer = new MutationObserver(schedule_refresh)
308
+ observer.observe(sidebar_element, { childList: true, subtree: true })
309
+ return () => {
310
+ observer.disconnect()
311
+ if (pending_raf) cancelAnimationFrame(pending_raf)
312
+ }
313
+ })
314
+
315
+ // === Panel management ===
316
+
317
+ const make_panel_id = (): string => `panel_${crypto.randomUUID()}`
318
+
319
+ // Click replaces the single/first panel; drag adds a split
320
+ function replace_or_add_panel(
321
+ data_path: string,
322
+ detected_type: RenderableType,
323
+ val: unknown,
324
+ ): void {
325
+ if (panels.length === 0) {
326
+ panels = [
327
+ { id: make_panel_id(), data_path, detected_type, val, component: null, element: null },
328
+ ]
329
+ panel_sizes = [1]
330
+ } else {
331
+ unmount_panel(0)
332
+ panels[0] = {
333
+ id: make_panel_id(),
334
+ data_path,
335
+ detected_type,
336
+ val,
337
+ component: null,
338
+ element: null,
339
+ }
340
+ panels = [...panels] // trigger reactivity
341
+ }
342
+ requestAnimationFrame(() => mount_all_panels())
343
+ }
344
+
345
+ function add_panel_with_split(
346
+ data_path: string,
347
+ detected_type: RenderableType,
348
+ val: unknown,
349
+ target_idx: number,
350
+ zone: `top` | `bottom` | `left` | `right`,
351
+ ): void {
352
+ const new_panel: PanelInfo = {
353
+ id: make_panel_id(),
354
+ data_path,
355
+ detected_type,
356
+ val,
357
+ component: null,
358
+ element: null,
359
+ }
360
+ const direction: SplitDirection =
361
+ zone === `top` || zone === `bottom` ? `vertical` : `horizontal`
362
+ const insert_before = zone === `top` || zone === `left`
363
+
364
+ if (panels.length === 0) {
365
+ panels = [new_panel]
366
+ panel_sizes = [1]
367
+ } else {
368
+ const new_panels = [...panels]
369
+ const new_sizes = [...panel_sizes]
370
+ const new_dirs = [...split_directions]
371
+ const insert_idx = insert_before ? target_idx : target_idx + 1
372
+ // Split the target panel's size in half: new panel gets half, target keeps half
373
+ const target_size = new_sizes[target_idx] ?? 1
374
+ new_sizes[target_idx] = target_size / 2
375
+ new_panels.splice(insert_idx, 0, new_panel)
376
+ new_sizes.splice(insert_idx, 0, target_size / 2)
377
+ // Add direction between the two panels
378
+ new_dirs.splice(target_idx, 0, direction)
379
+ panels = new_panels
380
+ panel_sizes = new_sizes
381
+ split_directions = new_dirs
382
+ }
383
+ requestAnimationFrame(() => mount_all_panels())
384
+ }
385
+
386
+ function close_panel(idx: number): void {
387
+ unmount_panel(idx)
388
+ const new_panels = [...panels]
389
+ const new_sizes = [...panel_sizes]
390
+ const new_dirs = [...split_directions]
391
+ // Give the closed panel's size to its neighbor
392
+ const closed_size = new_sizes[idx] ?? 0
393
+ const neighbor_idx = idx > 0 ? idx - 1 : idx + 1
394
+ if (neighbor_idx < new_sizes.length) new_sizes[neighbor_idx] += closed_size
395
+ new_panels.splice(idx, 1)
396
+ new_sizes.splice(idx, 1)
397
+ // Remove the adjacent split direction
398
+ if (new_dirs.length > 0) {
399
+ const dir_idx = Math.min(idx, new_dirs.length - 1)
400
+ new_dirs.splice(dir_idx, 1)
401
+ }
402
+ panels = new_panels
403
+ panel_sizes = new_sizes
404
+ split_directions = new_dirs
405
+ }
406
+
407
+ function close_all_panels(): void {
408
+ for (let idx = panels.length - 1; idx >= 0; idx--) unmount_panel(idx)
409
+ panels = []
410
+ panel_sizes = []
411
+ split_directions = []
412
+ }
413
+
414
+ function unmount_panel(idx: number): void {
415
+ const panel = panels[idx]
416
+ if (panel?.component) {
417
+ try {
418
+ unmount(panel.component)
419
+ } catch (error) {
420
+ console.error(`JsonBrowser: unmount failed:`, error)
421
+ }
422
+ panel.component = null
423
+ }
424
+ if (panel?.element) panel.element.innerHTML = ``
425
+ }
426
+
427
+ // === Component mounting ===
428
+
429
+ function prepare_structure(val: unknown): unknown {
430
+ if (is_optimade_raw(val)) {
431
+ const result = parse_optimade_from_raw(val)
432
+ if (result) return result
433
+ }
434
+ const record = val as Record<string, unknown>
435
+ if (Array.isArray(record.sites) && record.lattice) {
436
+ return normalize_fractional_coords(
437
+ val as Parameters<typeof normalize_fractional_coords>[0],
438
+ )
439
+ }
440
+ return val
441
+ }
442
+
443
+ // Map user defaults to structure component props (mirrors main.ts structure_props)
444
+ function struct_props(merged: DefaultSettings): Record<string, unknown> {
445
+ const { structure } = merged
446
+ return {
447
+ scene_props: { ...structure, gizmo: structure.show_gizmo },
448
+ lattice_props: {
449
+ show_cell_vectors: structure.show_cell_vectors,
450
+ cell_edge_opacity: structure.cell_edge_opacity,
451
+ cell_surface_opacity: structure.cell_surface_opacity,
452
+ cell_edge_color: structure.cell_edge_color,
453
+ cell_surface_color: structure.cell_surface_color,
454
+ },
455
+ color_scheme: merged.color_scheme,
456
+ background_color: merged.background_color,
457
+ background_opacity: merged.background_opacity,
458
+ show_image_atoms: structure.show_image_atoms,
459
+ }
460
+ }
461
+
462
+ // Merge defaults once (reused across all panel mounts)
463
+ const merged_defaults = $derived(merge(defaults))
464
+ const common_props = { fullscreen_toggle: false, style: `height:100%` }
465
+
466
+ function mount_into(
467
+ target: HTMLElement,
468
+ val: unknown,
469
+ detected_type: RenderableType,
470
+ panel_id?: string,
471
+ ): ReturnType<typeof mount> | null {
472
+ const onclose =
473
+ panel_id !== undefined
474
+ ? () => {
475
+ const idx = panels.findIndex((p) => p.id === panel_id)
476
+ if (idx < 0) return
477
+ if (panels.length > 1) close_panel(idx)
478
+ else close_all_panels()
479
+ }
480
+ : undefined
481
+ target.innerHTML = ``
482
+ // Force layout so Three.js gets real dimensions
483
+ void target.offsetHeight
484
+
485
+ const struct_common = {
486
+ allow_file_drop: false,
487
+ enable_tips: false,
488
+ ...struct_props(merged_defaults),
489
+ ...common_props,
490
+ }
491
+
492
+ try {
493
+ if (detected_type === `structure`) {
494
+ return mount(Structure, {
495
+ target,
496
+ props: { structure: prepare_structure(val) as AnyStructure, ...struct_common },
497
+ })
498
+ } else if (detected_type === `fermi_surface` || detected_type === `band_grid`) {
499
+ const fermi_props: Record<string, unknown> = {
500
+ allow_file_drop: false,
501
+ ...common_props,
502
+ }
503
+ if (is_fermi_surface_data(val as Parameters<typeof is_fermi_surface_data>[0]))
504
+ fermi_props.fermi_data = val
505
+ else fermi_props.band_data = val
506
+ return mount(FermiSurface, { target, props: fermi_props })
507
+ } else if (detected_type === `convex_hull`) {
508
+ return mount(ConvexHull, {
509
+ target,
510
+ props: { entries: val as PhaseData[], ...common_props },
511
+ })
512
+ } else if (detected_type === `phase_diagram`) {
513
+ return mount(IsobaricBinaryPhaseDiagram, {
514
+ target,
515
+ props: { data: val as PhaseDiagramData, ...common_props },
516
+ })
517
+ } else if (detected_type === `volumetric`) {
518
+ const vol_data = val as { lattice: LatticeType }
519
+ return mount(Structure, {
520
+ target,
521
+ props: {
522
+ structure: { sites: [], lattice: vol_data.lattice } as AnyStructure,
523
+ volumetric_data: [val as VolumetricData],
524
+ ...struct_common,
525
+ },
526
+ })
527
+ } else if (detected_type === `bands_and_dos`) {
528
+ const data = val as Record<string, unknown>
529
+ // Support both { band_structure, dos } wrapper and combined-fields format
530
+ const band_data = (data.band_structure ?? val) as BaseBandStructure
531
+ const dos_data = (data.dos ?? val) as DosInput
532
+ return mount(BandsAndDos, {
533
+ target,
534
+ props: { band_structs: band_data, doses: dos_data, ...common_props },
535
+ })
536
+ } else if (detected_type === `band_structure`) {
537
+ return mount(Bands, {
538
+ target,
539
+ props: {
540
+ band_structs: val as BaseBandStructure,
541
+ ...common_props,
542
+ padding: { b: 60 },
543
+ },
544
+ })
545
+ } else if (detected_type === `dos`) {
546
+ return mount(Dos, {
547
+ target,
548
+ props: { doses: val as DosInput, ...common_props, padding: { b: 60 } },
549
+ })
550
+ } else if (detected_type === `brillouin_zone`) {
551
+ const bz_val = val as Record<string, unknown>
552
+ const bz_props: Record<string, unknown> = { allow_file_drop: false, ...common_props }
553
+ if (bz_val.structure) bz_props.structure = prepare_structure(bz_val.structure)
554
+ // Pass pre-computed BZ data (vertices, faces, edges) if present
555
+ if (bz_val.vertices && bz_val.faces) bz_props.bz_data = bz_val
556
+ return mount(BrillouinZone, { target, props: bz_props })
557
+ } else if (detected_type === `xrd`) {
558
+ return mount(XrdPlot, {
559
+ target,
560
+ props: { patterns: val as XrdPattern, allow_file_drop: false, ...common_props },
561
+ })
562
+ } else if (detected_type === `table`) {
563
+ return mount(PlotPanel, {
564
+ target,
565
+ props: { data: val, initial_type: `table`, onclose, ...common_props },
566
+ })
567
+ } else if (detected_type === `plot`) {
568
+ return mount(PlotPanel, { target, props: { data: val, onclose, ...common_props } })
569
+ }
570
+ } catch (error) {
571
+ console.error(`JsonBrowser: mount failed for ${detected_type}:`, error)
572
+ }
573
+ return null
574
+ }
575
+
576
+ function mount_all_panels(): void {
577
+ for (let idx = 0; idx < panels.length; idx++) {
578
+ const panel = panels[idx]
579
+ if (panel.component) continue // already mounted
580
+ const el = document.getElementById(panel.id)
581
+ if (!el) continue
582
+ panel.element = el
583
+ panel.component = mount_into(el, panel.val, panel.detected_type, panel.id)
584
+ }
585
+ }
586
+
587
+ // === Drop zone detection ===
588
+
589
+ function get_drop_zone(
590
+ event: DragEvent,
591
+ rect: DOMRect,
592
+ ): `top` | `bottom` | `left` | `right` | `center` {
593
+ const rel_x = (event.clientX - rect.left) / rect.width
594
+ const rel_y = (event.clientY - rect.top) / rect.height
595
+ const edge_threshold = 0.25
596
+ if (rel_y < edge_threshold) return `top`
597
+ if (rel_y > 1 - edge_threshold) return `bottom`
598
+ if (rel_x < edge_threshold) return `left`
599
+ if (rel_x > 1 - edge_threshold) return `right`
600
+ return `center`
601
+ }
602
+
603
+ function on_canvas_dragover(event: DragEvent): void {
604
+ event.preventDefault()
605
+ if (event.dataTransfer) event.dataTransfer.dropEffect = `copy`
606
+ if (!canvas_element) return
607
+ // Default to center/first panel; override if cursor is inside a specific panel
608
+ drop_zone = `center`
609
+ drop_target_panel_idx = 0
610
+ const panel_els = canvas_element.querySelectorAll(`.viz-panel`)
611
+ for (let idx = 0; idx < panel_els.length; idx++) {
612
+ const rect = panel_els[idx].getBoundingClientRect()
613
+ if (
614
+ event.clientX >= rect.left &&
615
+ event.clientX <= rect.right &&
616
+ event.clientY >= rect.top &&
617
+ event.clientY <= rect.bottom
618
+ ) {
619
+ drop_zone = get_drop_zone(event, rect)
620
+ drop_target_panel_idx = idx
621
+ break
622
+ }
623
+ }
624
+ // Prevent mixed-axis splits until nested layouts are supported
625
+ if (split_directions.length > 0) {
626
+ const layout = split_directions[0]
627
+ if (layout === `vertical` && (drop_zone === `left` || drop_zone === `right`)) {
628
+ drop_zone = `center`
629
+ } else if (layout === `horizontal` && (drop_zone === `top` || drop_zone === `bottom`)) {
630
+ drop_zone = `center`
631
+ }
632
+ }
633
+ }
634
+
635
+ function on_canvas_dragleave(event: DragEvent): void {
636
+ // Only clear if leaving the canvas entirely
637
+ if (canvas_element && !canvas_element.contains(event.relatedTarget as Node)) {
638
+ drop_zone = null
639
+ drop_target_panel_idx = -1
640
+ }
641
+ }
642
+
643
+ function on_canvas_drop(event: DragEvent): void {
644
+ event.preventDefault()
645
+ const raw = event.dataTransfer?.getData(`text/plain`)
646
+ // Capture the already-computed drop state before clearing it
647
+ const zone = drop_zone
648
+ const target_idx = Math.max(0, drop_target_panel_idx)
649
+ drop_zone = null
650
+ drop_target_panel_idx = -1
651
+ if (!raw) return
652
+ try {
653
+ const parsed = JSON.parse(raw) as { data_path: string; detected_type: RenderableType }
654
+ const data_path = strip_type_suffix(parsed.data_path)
655
+ const { detected_type } = parsed
656
+ if (!detected_type || !(detected_type in TYPE_LABELS)) return
657
+ const val = resolve_path(value, data_path)
658
+ if (val === undefined) return
659
+ if (panels.length === 0 || zone === `center` || !zone) {
660
+ replace_or_add_panel(data_path, detected_type, val)
661
+ } else {
662
+ add_panel_with_split(data_path, detected_type, val, target_idx, zone)
663
+ }
664
+ } catch (error) {
665
+ console.error(`JsonBrowser: drop failed:`, error)
666
+ }
667
+ }
668
+
669
+ // === Panel split divider dragging ===
670
+ let split_dragging_idx = $state(-1)
671
+
672
+ function on_split_divider_mousedown(event: MouseEvent, split_idx: number): void {
673
+ event.preventDefault()
674
+ split_dragging_idx = split_idx
675
+ const direction = split_directions[split_idx]
676
+ if (!direction) return
677
+ const panel_container = canvas_element?.querySelector(
678
+ `.panel-container`,
679
+ ) as HTMLElement | null
680
+ if (!panel_container) return
681
+ const container_rect = panel_container.getBoundingClientRect()
682
+
683
+ const is_vertical = direction === `vertical`
684
+ const start_pos = is_vertical ? event.clientY : event.clientX
685
+ const container_size = is_vertical ? container_rect.height : container_rect.width
686
+ // Total flex of the two adjacent panels
687
+ const left_idx = split_idx
688
+ const right_idx = split_idx + 1
689
+ const total_flex = (panel_sizes[left_idx] ?? 1) + (panel_sizes[right_idx] ?? 1)
690
+ const start_left_size = panel_sizes[left_idx] ?? total_flex / 2
691
+
692
+ start_drag(
693
+ (move_event) => {
694
+ const current_pos = is_vertical ? move_event.clientY : move_event.clientX
695
+ const delta_fraction = (current_pos - start_pos) / container_size
696
+ const delta_flex = delta_fraction * total_flex
697
+ const new_left = Math.max(
698
+ total_flex * 0.1,
699
+ Math.min(total_flex * 0.9, start_left_size + delta_flex),
700
+ )
701
+ panel_sizes[left_idx] = new_left
702
+ panel_sizes[right_idx] = total_flex - new_left
703
+ },
704
+ () => {
705
+ split_dragging_idx = -1
706
+ },
707
+ )
708
+ }
709
+
710
+ // === Helpers ===
711
+
712
+ function strip_root_prefix(path: string): string {
713
+ if (!filename || !path.startsWith(filename)) return path
714
+ const stripped = path.slice(filename.length)
715
+ return stripped.startsWith(`.`) ? stripped.slice(1) : stripped
716
+ }
717
+
718
+ function handle_select(path: string, val: unknown): void {
719
+ const data_path = strip_root_prefix(path)
720
+ if (select_timer) clearTimeout(select_timer)
721
+ select_timer = setTimeout(() => {
722
+ if (destroyed) return // component was destroyed while timer was pending
723
+ const detected = detect_view_type(val)
724
+ if (detected) replace_or_add_panel(data_path, detected, val)
725
+ }, 150)
726
+ }
727
+
728
+ function resolve_path(root: unknown, path: string): unknown {
729
+ if (!path) return root
730
+ // Parse path segments: handles dotted keys like ["foo.bar"], array indices like [0],
731
+ // and regular dotted paths like a.b.c
732
+ const segments: string[] = []
733
+ const segment_re = /\["([^"]+)"\]|\[(\d+)\]|([^.[\]]+)/g
734
+ let match: RegExpExecArray | null
735
+ while ((match = segment_re.exec(path)) !== null) {
736
+ segments.push(match[1] ?? match[2] ?? match[3])
737
+ }
738
+ let current: unknown = root
739
+ for (const segment of segments) {
740
+ if (current === null || current === undefined || typeof current !== `object`)
741
+ return undefined
742
+ current = (current as Record<string, unknown>)[segment]
743
+ }
744
+ return current
745
+ }
746
+
747
+ // The first split direction determines the flex layout direction
748
+ let layout_direction = $derived(
749
+ split_directions.length > 0 ? split_directions[0] : `vertical`,
750
+ )
751
+
752
+ const type_color = (key: string) => TYPE_COLORS[key as RenderableType] ?? `#888`
753
+ </script>
754
+
755
+ {#snippet type_list(header: string, extra_style?: string)}
756
+ <div class="type-list" style={extra_style ?? ``}>
757
+ <p class="type-list-header">{header}</p>
758
+ {#each Object.entries(TYPE_LABELS) as [type_key, label] (type_key)}
759
+ <span class="type-tag" style="border-color: {type_color(type_key)}44;">
760
+ <span class="chip-dot" style="background: {type_color(type_key)};"></span>
761
+ {label}
762
+ </span>
763
+ {/each}
764
+ </div>
765
+ {/snippet}
766
+
767
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
768
+ <div class="json-browser" class:dragging={is_sidebar_dragging || split_dragging_idx >= 0}>
769
+ <aside class="sidebar" bind:this={sidebar_element} style="width: {sidebar_width}px">
770
+ <JsonTree
771
+ {value}
772
+ root_label={filename}
773
+ default_fold_level={1}
774
+ onselect={handle_select}
775
+ show_header
776
+ />
777
+ </aside>
778
+
779
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
780
+ <div class="divider sidebar-divider" onmousedown={on_sidebar_divider_mousedown}></div>
781
+
782
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
783
+ <div
784
+ class="canvas"
785
+ bind:this={canvas_element}
786
+ ondragover={on_canvas_dragover}
787
+ ondragleave={on_canvas_dragleave}
788
+ ondrop={on_canvas_drop}
789
+ >
790
+ {#if panels.length === 0}
791
+ <!-- Placeholder when no panels -->
792
+ <div class="placeholder">
793
+ {#if renderable_paths.size === 0}
794
+ <p class="placeholder-title">No renderable data found</p>
795
+ <p class="placeholder-sub">
796
+ This JSON file doesn't contain recognized visualization data.
797
+ </p>
798
+ {@render type_list(`Recognized types:`)}
799
+ {:else}
800
+ <p class="placeholder-title">Click or drag a data node to visualize it</p>
801
+ <p class="placeholder-sub">
802
+ Found {renderable_paths.size} renderable item{renderable_paths.size === 1
803
+ ? ``
804
+ : `s`}. Click to render, or drag to an edge to create a split view.
805
+ </p>
806
+ <div
807
+ style="margin-top: 12px; display: flex; flex-wrap: wrap; gap: 6px; justify-content: center;"
808
+ >
809
+ {#each [...renderable_paths] as [data_path, info] (data_path)}
810
+ <button
811
+ type="button"
812
+ class="renderable-chip"
813
+ style="background: {type_color(info.type)}22; border: 1px solid {type_color(
814
+ info.type,
815
+ )}66;"
816
+ onclick={() => {
817
+ const clean_path = strip_type_suffix(data_path)
818
+ const val = resolve_path(value, clean_path)
819
+ if (val !== undefined) {
820
+ replace_or_add_panel(clean_path, info.type, val)
821
+ }
822
+ }}
823
+ >
824
+ <span class="chip-dot" style="background: {type_color(info.type)};"></span>
825
+ {info.label}: <code>{strip_type_suffix(data_path) || `root`}</code>
826
+ </button>
827
+ {/each}
828
+ </div>
829
+ {@render type_list(`All recognized types:`, `margin-top: 20px`)}
830
+ {/if}
831
+ </div>
832
+ {:else}
833
+ <!-- Panel layout -->
834
+ <div
835
+ class="panel-container"
836
+ class:vertical={layout_direction === `vertical`}
837
+ class:horizontal={layout_direction === `horizontal`}
838
+ >
839
+ {#each panels as panel, idx (panel.id)}
840
+ {#if idx > 0 && split_directions[idx - 1]}
841
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
842
+ <div
843
+ class="split-divider"
844
+ class:vertical={split_directions[idx - 1] === `vertical`}
845
+ class:horizontal={split_directions[idx - 1] === `horizontal`}
846
+ class:active={split_dragging_idx === idx - 1}
847
+ onmousedown={(event) => on_split_divider_mousedown(event, idx - 1)}
848
+ ></div>
849
+ {/if}
850
+ <div class="viz-panel" style="flex: {panel_sizes[idx] ?? 1}">
851
+ <div class="panel-mount" id={panel.id}></div>
852
+ <!-- Panel label -->
853
+ <div class="panel-label" style="background: {TYPE_COLORS[panel.detected_type]}cc;">
854
+ {TYPE_LABELS[panel.detected_type]}: {strip_type_suffix(panel.data_path)}
855
+ </div>
856
+ </div>
857
+ {/each}
858
+ </div>
859
+ {/if}
860
+
861
+ <!-- Drop zone overlay -->
862
+ {#if drop_zone && drop_zone !== `center`}
863
+ <div class="drop-indicator {drop_zone}"></div>
864
+ {/if}
865
+ </div>
866
+ </div>
867
+
868
+ <style>
869
+ .json-browser {
870
+ display: flex;
871
+ width: 100%;
872
+ height: 100%;
873
+ overflow: hidden;
874
+ background: var(--vscode-editor-background, #1e1e1e);
875
+ color: var(--vscode-editor-foreground, #d4d4d4);
876
+ }
877
+ .json-browser.dragging {
878
+ user-select: none;
879
+ }
880
+ .sidebar {
881
+ flex-shrink: 0;
882
+ min-width: 150px;
883
+ max-width: 60%;
884
+ overflow: auto;
885
+ padding: 4px;
886
+ }
887
+ .divider {
888
+ width: 5px;
889
+ flex-shrink: 0;
890
+ background: var(--vscode-panel-border, rgba(255, 255, 255, 0.1));
891
+ cursor: col-resize;
892
+ transition: background 0.15s;
893
+ }
894
+ .divider:hover,
895
+ .json-browser.dragging .sidebar-divider {
896
+ background: var(--vscode-focusBorder, #007fd4);
897
+ }
898
+ .canvas {
899
+ flex: 1;
900
+ height: 100%;
901
+ position: relative;
902
+ overflow: hidden;
903
+ min-width: 200px;
904
+ }
905
+ /* === Panel layout === */
906
+ .panel-container {
907
+ display: flex;
908
+ width: 100%;
909
+ height: 100%;
910
+ }
911
+ .panel-container.vertical {
912
+ flex-direction: column;
913
+ }
914
+ .panel-container.horizontal {
915
+ flex-direction: row;
916
+ }
917
+ .viz-panel {
918
+ position: relative;
919
+ overflow: hidden;
920
+ min-width: 100px;
921
+ min-height: 80px;
922
+ }
923
+ .panel-mount {
924
+ width: 100%;
925
+ height: 100%;
926
+ }
927
+ .panel-label {
928
+ position: absolute;
929
+ bottom: 4px;
930
+ left: 4px;
931
+ z-index: 10;
932
+ font-size: 10px;
933
+ padding: 2px 6px;
934
+ border-radius: 3px;
935
+ color: white;
936
+ opacity: 0.7;
937
+ pointer-events: none;
938
+ white-space: nowrap;
939
+ max-width: calc(100% - 16px);
940
+ overflow: hidden;
941
+ text-overflow: ellipsis;
942
+ }
943
+ /* === Split dividers === */
944
+ .split-divider {
945
+ flex-shrink: 0;
946
+ background: var(--vscode-panel-border, rgba(255, 255, 255, 0.15));
947
+ transition: background 0.15s;
948
+ z-index: 5;
949
+ }
950
+ .split-divider.vertical {
951
+ height: 5px;
952
+ cursor: row-resize;
953
+ }
954
+ .split-divider.horizontal {
955
+ width: 5px;
956
+ cursor: col-resize;
957
+ }
958
+ .split-divider:hover,
959
+ .split-divider.active {
960
+ background: var(--vscode-focusBorder, #007fd4);
961
+ }
962
+ /* === Drop zone indicators === */
963
+ .drop-indicator {
964
+ position: absolute;
965
+ background: rgba(0, 127, 212, 0.25);
966
+ border: 2px solid var(--vscode-focusBorder, #007fd4);
967
+ z-index: 20;
968
+ pointer-events: none;
969
+ transition: all 0.1s;
970
+ }
971
+ .drop-indicator.top {
972
+ top: 0;
973
+ left: 0;
974
+ right: 0;
975
+ height: 40%;
976
+ }
977
+ .drop-indicator.bottom {
978
+ bottom: 0;
979
+ left: 0;
980
+ right: 0;
981
+ height: 40%;
982
+ }
983
+ .drop-indicator.left {
984
+ top: 0;
985
+ left: 0;
986
+ bottom: 0;
987
+ width: 40%;
988
+ }
989
+ .drop-indicator.right {
990
+ top: 0;
991
+ right: 0;
992
+ bottom: 0;
993
+ width: 40%;
994
+ }
995
+ /* === Placeholder === */
996
+ .placeholder {
997
+ display: flex;
998
+ flex-direction: column;
999
+ align-items: center;
1000
+ justify-content: center;
1001
+ height: 100%;
1002
+ opacity: 0.8;
1003
+ padding: 2rem;
1004
+ text-align: center;
1005
+ }
1006
+ .placeholder-title {
1007
+ font-size: 16px;
1008
+ margin-bottom: 8px;
1009
+ font-weight: 500;
1010
+ }
1011
+ .placeholder-sub {
1012
+ font-size: 13px;
1013
+ opacity: 0.65;
1014
+ max-width: 400px;
1015
+ line-height: 1.5;
1016
+ }
1017
+ .type-list {
1018
+ margin-top: 16px;
1019
+ display: flex;
1020
+ flex-wrap: wrap;
1021
+ gap: 6px;
1022
+ justify-content: center;
1023
+ align-items: center;
1024
+ }
1025
+ .type-list-header {
1026
+ width: 100%;
1027
+ font-size: 11px;
1028
+ text-transform: uppercase;
1029
+ letter-spacing: 0.5px;
1030
+ opacity: 0.5;
1031
+ margin-bottom: 4px;
1032
+ }
1033
+ .type-tag {
1034
+ display: inline-flex;
1035
+ align-items: center;
1036
+ gap: 5px;
1037
+ padding: 3px 8px;
1038
+ border-radius: 10px;
1039
+ font-size: 11px;
1040
+ border: 1px solid;
1041
+ opacity: 0.7;
1042
+ }
1043
+ .renderable-chip {
1044
+ display: inline-flex;
1045
+ align-items: center;
1046
+ gap: 6px;
1047
+ padding: 4px 10px;
1048
+ border-radius: 12px;
1049
+ font-size: 12px;
1050
+ cursor: pointer;
1051
+ color: inherit;
1052
+ transition: opacity 0.15s;
1053
+ }
1054
+ .renderable-chip:hover {
1055
+ opacity: 0.8;
1056
+ }
1057
+ .renderable-chip code {
1058
+ font-size: 11px;
1059
+ opacity: 0.8;
1060
+ }
1061
+ .chip-dot {
1062
+ width: 8px;
1063
+ height: 8px;
1064
+ border-radius: 50%;
1065
+ flex-shrink: 0;
1066
+ }
1067
+ /* Badges are injected imperatively — use :global so Svelte doesn't strip the rule */
1068
+ :global(.renderable-badge) {
1069
+ font-size: 9px;
1070
+ padding: 1px 4px;
1071
+ margin-left: 4px;
1072
+ border-radius: 3px;
1073
+ color: white;
1074
+ font-weight: 500;
1075
+ white-space: nowrap;
1076
+ cursor: grab;
1077
+ flex-shrink: 0;
1078
+ }
1079
+ </style>