matterviz 0.3.1 → 0.3.3

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 (358) hide show
  1. package/dist/EmptyState.svelte +10 -2
  2. package/dist/FilePicker.svelte +154 -96
  3. package/dist/Icon.svelte +20 -14
  4. package/dist/MillerIndexInput.svelte +27 -21
  5. package/dist/api/optimade.js +6 -6
  6. package/dist/app.css +216 -178
  7. package/dist/brillouin/BrillouinZone.svelte +299 -198
  8. package/dist/brillouin/BrillouinZone.svelte.d.ts +1 -1
  9. package/dist/brillouin/BrillouinZoneControls.svelte +32 -5
  10. package/dist/brillouin/BrillouinZoneExportPane.svelte +74 -55
  11. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +1 -1
  12. package/dist/brillouin/BrillouinZoneInfoPane.svelte +99 -68
  13. package/dist/brillouin/BrillouinZoneScene.svelte +277 -165
  14. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
  15. package/dist/brillouin/BrillouinZoneTooltip.svelte +17 -7
  16. package/dist/brillouin/compute.js +11 -6
  17. package/dist/chempot-diagram/ChemPotDiagram.svelte +327 -0
  18. package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
  19. package/dist/chempot-diagram/ChemPotDiagram2D.svelte +847 -0
  20. package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
  21. package/dist/chempot-diagram/ChemPotDiagram3D.svelte +3194 -0
  22. package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
  23. package/dist/chempot-diagram/ChemPotScene3D.svelte +11 -0
  24. package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
  25. package/dist/chempot-diagram/async-compute.svelte.d.ts +3 -0
  26. package/dist/chempot-diagram/async-compute.svelte.js +77 -0
  27. package/dist/chempot-diagram/chempot-worker.d.ts +1 -0
  28. package/dist/chempot-diagram/chempot-worker.js +11 -0
  29. package/dist/chempot-diagram/color.d.ts +10 -0
  30. package/dist/chempot-diagram/color.js +32 -0
  31. package/dist/chempot-diagram/compute.d.ts +48 -0
  32. package/dist/chempot-diagram/compute.js +812 -0
  33. package/dist/chempot-diagram/index.d.ts +6 -0
  34. package/dist/chempot-diagram/index.js +6 -0
  35. package/dist/chempot-diagram/pointer.d.ts +16 -0
  36. package/dist/chempot-diagram/pointer.js +40 -0
  37. package/dist/chempot-diagram/temperature.d.ts +15 -0
  38. package/dist/chempot-diagram/temperature.js +36 -0
  39. package/dist/chempot-diagram/types.d.ts +86 -0
  40. package/dist/chempot-diagram/types.js +28 -0
  41. package/dist/colors/index.d.ts +3 -1
  42. package/dist/colors/index.js +9 -3
  43. package/dist/composition/BarChart.svelte +141 -77
  44. package/dist/composition/BubbleChart.svelte +107 -52
  45. package/dist/composition/Composition.svelte +100 -79
  46. package/dist/composition/Formula.svelte +108 -62
  47. package/dist/composition/FormulaFilter.svelte +973 -353
  48. package/dist/composition/FormulaFilter.svelte.d.ts +35 -1
  49. package/dist/composition/PieChart.svelte +199 -99
  50. package/dist/composition/PieChart.svelte.d.ts +1 -1
  51. package/dist/composition/format.d.ts +5 -0
  52. package/dist/composition/format.js +20 -3
  53. package/dist/composition/parse.js +14 -9
  54. package/dist/convex-hull/ConvexHull.svelte +93 -38
  55. package/dist/convex-hull/ConvexHull2D.svelte +551 -393
  56. package/dist/convex-hull/ConvexHull3D.svelte +1303 -825
  57. package/dist/convex-hull/ConvexHull4D.svelte +1012 -686
  58. package/dist/convex-hull/ConvexHullControls.svelte +115 -28
  59. package/dist/convex-hull/ConvexHullInfoPane.svelte +29 -3
  60. package/dist/convex-hull/ConvexHullStats.svelte +821 -249
  61. package/dist/convex-hull/ConvexHullStats.svelte.d.ts +6 -1
  62. package/dist/convex-hull/ConvexHullTooltip.svelte +41 -16
  63. package/dist/convex-hull/GasPressureControls.svelte +104 -61
  64. package/dist/convex-hull/StructurePopup.svelte +25 -4
  65. package/dist/convex-hull/TemperatureSlider.svelte +45 -25
  66. package/dist/convex-hull/barycentric-coords.js +13 -7
  67. package/dist/convex-hull/demo-temperature.d.ts +6 -0
  68. package/dist/convex-hull/demo-temperature.js +40 -0
  69. package/dist/convex-hull/gas-thermodynamics.js +17 -12
  70. package/dist/convex-hull/helpers.d.ts +10 -1
  71. package/dist/convex-hull/helpers.js +79 -38
  72. package/dist/convex-hull/index.d.ts +1 -0
  73. package/dist/convex-hull/index.js +1 -0
  74. package/dist/convex-hull/thermodynamics.d.ts +8 -21
  75. package/dist/convex-hull/thermodynamics.js +163 -69
  76. package/dist/convex-hull/types.d.ts +12 -12
  77. package/dist/convex-hull/types.js +0 -12
  78. package/dist/coordination/CoordinationBarPlot.svelte +232 -176
  79. package/dist/element/BohrAtom.svelte +56 -13
  80. package/dist/element/ElementHeading.svelte +7 -2
  81. package/dist/element/ElementPhoto.svelte +15 -9
  82. package/dist/element/ElementStats.svelte +10 -4
  83. package/dist/element/ElementTile.svelte +137 -73
  84. package/dist/element/Nucleus.svelte +39 -11
  85. package/dist/element/data.js +2 -14
  86. package/dist/element/data.json.gz +0 -0
  87. package/dist/element/types.d.ts +1 -0
  88. package/dist/feedback/ClickFeedback.svelte +16 -5
  89. package/dist/feedback/DragOverlay.svelte +10 -2
  90. package/dist/feedback/Spinner.svelte +4 -2
  91. package/dist/feedback/StatusMessage.svelte +8 -2
  92. package/dist/fermi-surface/FermiSlice.svelte +118 -88
  93. package/dist/fermi-surface/FermiSurface.svelte +336 -239
  94. package/dist/fermi-surface/FermiSurface.svelte.d.ts +1 -1
  95. package/dist/fermi-surface/FermiSurfaceControls.svelte +113 -46
  96. package/dist/fermi-surface/FermiSurfaceScene.svelte +536 -343
  97. package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
  98. package/dist/fermi-surface/FermiSurfaceTooltip.svelte +14 -5
  99. package/dist/fermi-surface/compute.js +16 -20
  100. package/dist/fermi-surface/parse.js +37 -33
  101. package/dist/fermi-surface/symmetry.js +2 -7
  102. package/dist/fermi-surface/types.d.ts +3 -5
  103. package/dist/heatmap-matrix/HeatmapMatrix.svelte +1527 -0
  104. package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
  105. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +225 -0
  106. package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +30 -0
  107. package/dist/heatmap-matrix/index.d.ts +53 -0
  108. package/dist/heatmap-matrix/index.js +100 -0
  109. package/dist/heatmap-matrix/shared.d.ts +2 -0
  110. package/dist/heatmap-matrix/shared.js +4 -0
  111. package/dist/icons.d.ts +111 -0
  112. package/dist/icons.js +158 -0
  113. package/dist/index.d.ts +5 -2
  114. package/dist/index.js +5 -2
  115. package/dist/io/decompress.js +1 -1
  116. package/dist/io/export.d.ts +3 -0
  117. package/dist/io/export.js +138 -140
  118. package/dist/io/file-drop.d.ts +7 -0
  119. package/dist/io/file-drop.js +43 -0
  120. package/dist/io/index.d.ts +2 -2
  121. package/dist/io/index.js +2 -112
  122. package/dist/io/is-binary.js +2 -3
  123. package/dist/io/types.d.ts +1 -0
  124. package/dist/io/url-drop.d.ts +2 -0
  125. package/dist/io/url-drop.js +117 -0
  126. package/dist/isosurface/Isosurface.svelte +220 -110
  127. package/dist/isosurface/IsosurfaceControls.svelte +65 -28
  128. package/dist/isosurface/parse.js +104 -56
  129. package/dist/isosurface/slice.d.ts +2 -1
  130. package/dist/isosurface/slice.js +8 -13
  131. package/dist/isosurface/types.d.ts +14 -1
  132. package/dist/isosurface/types.js +152 -5
  133. package/dist/labels.d.ts +2 -1
  134. package/dist/labels.js +12 -8
  135. package/dist/layout/FullscreenToggle.svelte +11 -2
  136. package/dist/layout/InfoCard.svelte +38 -6
  137. package/dist/layout/InfoTag.svelte +125 -94
  138. package/dist/layout/PropertyFilter.svelte +82 -37
  139. package/dist/layout/SettingsSection.svelte +85 -55
  140. package/dist/layout/SubpageGrid.svelte +82 -0
  141. package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
  142. package/dist/layout/index.d.ts +1 -0
  143. package/dist/layout/index.js +1 -0
  144. package/dist/layout/json-tree/JsonNode.svelte +266 -223
  145. package/dist/layout/json-tree/JsonTree.svelte +516 -429
  146. package/dist/layout/json-tree/JsonTree.svelte.d.ts +1 -1
  147. package/dist/layout/json-tree/JsonValue.svelte +281 -173
  148. package/dist/layout/json-tree/types.d.ts +10 -2
  149. package/dist/layout/json-tree/utils.d.ts +2 -0
  150. package/dist/layout/json-tree/utils.js +37 -2
  151. package/dist/marching-cubes.js +25 -2
  152. package/dist/math.d.ts +20 -17
  153. package/dist/math.js +474 -57
  154. package/dist/overlays/ContextMenu.svelte +66 -40
  155. package/dist/overlays/DraggablePane.svelte +331 -154
  156. package/dist/overlays/DraggablePane.svelte.d.ts +2 -0
  157. package/dist/periodic-table/PeriodicTable.svelte +278 -145
  158. package/dist/periodic-table/PeriodicTableControls.svelte +178 -128
  159. package/dist/periodic-table/PropertySelect.svelte +25 -7
  160. package/dist/periodic-table/TableInset.svelte +8 -3
  161. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +559 -267
  162. package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -2
  163. package/dist/phase-diagram/PhaseDiagramControls.svelte +131 -51
  164. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +3 -2
  165. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +126 -0
  166. package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
  167. package/dist/phase-diagram/PhaseDiagramExportPane.svelte +160 -110
  168. package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +8 -1
  169. package/dist/phase-diagram/PhaseDiagramTooltip.svelte +217 -86
  170. package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +6 -3
  171. package/dist/phase-diagram/TdbInfoPanel.svelte +28 -4
  172. package/dist/phase-diagram/build-diagram.js +9 -9
  173. package/dist/phase-diagram/colors.js +1 -3
  174. package/dist/phase-diagram/index.d.ts +2 -0
  175. package/dist/phase-diagram/index.js +2 -0
  176. package/dist/phase-diagram/parse.js +10 -9
  177. package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
  178. package/dist/phase-diagram/svg-to-diagram.js +869 -0
  179. package/dist/phase-diagram/types.d.ts +10 -0
  180. package/dist/phase-diagram/utils.d.ts +8 -4
  181. package/dist/phase-diagram/utils.js +219 -74
  182. package/dist/plot/AxisLabel.svelte +51 -0
  183. package/dist/plot/AxisLabel.svelte.d.ts +16 -0
  184. package/dist/plot/BarPlot.svelte +1461 -768
  185. package/dist/plot/BarPlot.svelte.d.ts +3 -3
  186. package/dist/plot/BarPlotControls.svelte +33 -6
  187. package/dist/plot/BarPlotControls.svelte.d.ts +1 -1
  188. package/dist/plot/ColorBar.svelte +533 -383
  189. package/dist/plot/ColorBar.svelte.d.ts +1 -1
  190. package/dist/plot/ColorScaleSelect.svelte +28 -7
  191. package/dist/plot/ElementScatter.svelte +38 -16
  192. package/dist/plot/FillArea.svelte +152 -92
  193. package/dist/plot/Histogram.svelte +1162 -709
  194. package/dist/plot/Histogram.svelte.d.ts +1 -1
  195. package/dist/plot/HistogramControls.svelte +81 -18
  196. package/dist/plot/HistogramControls.svelte.d.ts +6 -2
  197. package/dist/plot/InteractiveAxisLabel.svelte +34 -11
  198. package/dist/plot/InteractiveAxisLabel.svelte.d.ts +1 -1
  199. package/dist/plot/Line.svelte +63 -28
  200. package/dist/plot/PlotControls.svelte +221 -96
  201. package/dist/plot/PlotControls.svelte.d.ts +1 -1
  202. package/dist/plot/PlotLegend.svelte +174 -91
  203. package/dist/plot/PlotTooltip.svelte +45 -6
  204. package/dist/plot/PortalSelect.svelte +175 -146
  205. package/dist/plot/ReferenceLine.svelte +77 -22
  206. package/dist/plot/ReferenceLine.svelte.d.ts +1 -0
  207. package/dist/plot/ReferenceLine3D.svelte +132 -107
  208. package/dist/plot/ReferencePlane.svelte +146 -123
  209. package/dist/plot/ScatterPlot.svelte +1880 -1156
  210. package/dist/plot/ScatterPlot.svelte.d.ts +3 -3
  211. package/dist/plot/ScatterPlot3D.svelte +256 -131
  212. package/dist/plot/ScatterPlot3D.svelte.d.ts +2 -2
  213. package/dist/plot/ScatterPlot3DControls.svelte +300 -297
  214. package/dist/plot/ScatterPlot3DControls.svelte.d.ts +2 -1
  215. package/dist/plot/ScatterPlot3DScene.svelte +608 -406
  216. package/dist/plot/ScatterPlot3DScene.svelte.d.ts +2 -2
  217. package/dist/plot/ScatterPlotControls.svelte +150 -70
  218. package/dist/plot/ScatterPlotControls.svelte.d.ts +1 -1
  219. package/dist/plot/ScatterPoint.svelte +98 -26
  220. package/dist/plot/ScatterPoint.svelte.d.ts +1 -0
  221. package/dist/plot/SpacegroupBarPlot.svelte +142 -85
  222. package/dist/plot/Surface3D.svelte +159 -108
  223. package/dist/plot/ZeroLines.svelte +96 -0
  224. package/dist/plot/ZeroLines.svelte.d.ts +32 -0
  225. package/dist/plot/ZoomRect.svelte +23 -0
  226. package/dist/plot/ZoomRect.svelte.d.ts +8 -0
  227. package/dist/plot/axis-utils.d.ts +1 -1
  228. package/dist/plot/axis-utils.js +1 -3
  229. package/dist/plot/data-cleaning.js +12 -28
  230. package/dist/plot/data-transform.js +2 -1
  231. package/dist/plot/fill-utils.js +2 -0
  232. package/dist/plot/index.d.ts +6 -2
  233. package/dist/plot/index.js +6 -2
  234. package/dist/plot/interactions.d.ts +8 -10
  235. package/dist/plot/interactions.js +2 -3
  236. package/dist/plot/layout.d.ts +11 -2
  237. package/dist/plot/layout.js +44 -17
  238. package/dist/plot/reference-line.d.ts +5 -22
  239. package/dist/plot/reference-line.js +12 -84
  240. package/dist/plot/scales.js +24 -36
  241. package/dist/plot/types.d.ts +53 -40
  242. package/dist/plot/types.js +12 -7
  243. package/dist/plot/utils/label-placement.d.ts +32 -15
  244. package/dist/plot/utils/label-placement.js +227 -63
  245. package/dist/plot/utils/series-visibility.js +2 -3
  246. package/dist/plot/utils.d.ts +1 -0
  247. package/dist/plot/utils.js +14 -0
  248. package/dist/rdf/RdfPlot.svelte +173 -132
  249. package/dist/rdf/calc-rdf.js +4 -5
  250. package/dist/sanitize.d.ts +4 -0
  251. package/dist/sanitize.js +107 -0
  252. package/dist/settings.d.ts +21 -6
  253. package/dist/settings.js +63 -19
  254. package/dist/spectral/Bands.svelte +963 -412
  255. package/dist/spectral/Bands.svelte.d.ts +22 -2
  256. package/dist/spectral/BandsAndDos.svelte +90 -49
  257. package/dist/spectral/BrillouinBandsDos.svelte +151 -93
  258. package/dist/spectral/Dos.svelte +389 -258
  259. package/dist/spectral/helpers.d.ts +23 -1
  260. package/dist/spectral/helpers.js +119 -51
  261. package/dist/spectral/types.d.ts +2 -0
  262. package/dist/state.svelte.d.ts +1 -1
  263. package/dist/state.svelte.js +3 -2
  264. package/dist/structure/Arrow.svelte +59 -20
  265. package/dist/structure/AtomLegend.svelte +231 -129
  266. package/dist/structure/AtomLegend.svelte.d.ts +1 -1
  267. package/dist/structure/Bond.svelte +73 -47
  268. package/dist/structure/CanvasTooltip.svelte +10 -2
  269. package/dist/structure/CellSelect.svelte +148 -51
  270. package/dist/structure/Cylinder.svelte +33 -17
  271. package/dist/structure/Lattice.svelte +88 -33
  272. package/dist/structure/Structure.svelte +1077 -821
  273. package/dist/structure/Structure.svelte.d.ts +1 -1
  274. package/dist/structure/StructureControls.svelte +373 -139
  275. package/dist/structure/StructureControls.svelte.d.ts +1 -1
  276. package/dist/structure/StructureExportPane.svelte +124 -89
  277. package/dist/structure/StructureExportPane.svelte.d.ts +1 -1
  278. package/dist/structure/StructureInfoPane.svelte +304 -231
  279. package/dist/structure/StructureScene.svelte +919 -445
  280. package/dist/structure/StructureScene.svelte.d.ts +16 -7
  281. package/dist/structure/atom-properties.d.ts +6 -2
  282. package/dist/structure/atom-properties.js +42 -29
  283. package/dist/structure/bonding.js +6 -7
  284. package/dist/structure/export.js +22 -34
  285. package/dist/structure/ferrox-wasm-types.d.ts +3 -2
  286. package/dist/structure/ferrox-wasm-types.js +0 -3
  287. package/dist/structure/ferrox-wasm.d.ts +3 -2
  288. package/dist/structure/ferrox-wasm.js +2 -3
  289. package/dist/structure/index.d.ts +16 -0
  290. package/dist/structure/index.js +88 -6
  291. package/dist/structure/measure.d.ts +2 -2
  292. package/dist/structure/measure.js +4 -44
  293. package/dist/structure/parse.js +130 -155
  294. package/dist/structure/partial-occupancy.d.ts +25 -0
  295. package/dist/structure/partial-occupancy.js +99 -0
  296. package/dist/structure/pbc.d.ts +1 -0
  297. package/dist/structure/pbc.js +16 -6
  298. package/dist/structure/supercell.d.ts +2 -2
  299. package/dist/structure/supercell.js +12 -22
  300. package/dist/structure/validation.js +5 -3
  301. package/dist/symmetry/SymmetryStats.svelte +94 -37
  302. package/dist/symmetry/WyckoffTable.svelte +42 -14
  303. package/dist/symmetry/cell-transform.js +5 -3
  304. package/dist/symmetry/index.d.ts +7 -4
  305. package/dist/symmetry/index.js +87 -21
  306. package/dist/symmetry/spacegroups.js +148 -148
  307. package/dist/table/HeatmapTable.svelte +1112 -516
  308. package/dist/table/HeatmapTable.svelte.d.ts +12 -1
  309. package/dist/table/ToggleMenu.svelte +125 -90
  310. package/dist/table/index.d.ts +2 -0
  311. package/dist/table/index.js +2 -4
  312. package/dist/theme/ThemeControl.svelte +21 -12
  313. package/dist/time.js +4 -1
  314. package/dist/tooltip/TooltipContent.svelte +33 -8
  315. package/dist/trajectory/Trajectory.svelte +889 -687
  316. package/dist/trajectory/TrajectoryError.svelte +14 -3
  317. package/dist/trajectory/TrajectoryExportPane.svelte +148 -90
  318. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +1 -1
  319. package/dist/trajectory/TrajectoryInfoPane.svelte +272 -143
  320. package/dist/trajectory/constants.d.ts +6 -0
  321. package/dist/trajectory/constants.js +7 -0
  322. package/dist/trajectory/extract.js +13 -31
  323. package/dist/trajectory/format-detect.d.ts +9 -0
  324. package/dist/trajectory/format-detect.js +76 -0
  325. package/dist/trajectory/frame-reader.d.ts +17 -0
  326. package/dist/trajectory/frame-reader.js +332 -0
  327. package/dist/trajectory/helpers.d.ts +14 -0
  328. package/dist/trajectory/helpers.js +172 -0
  329. package/dist/trajectory/index.d.ts +1 -0
  330. package/dist/trajectory/index.js +23 -14
  331. package/dist/trajectory/parse/ase.d.ts +2 -0
  332. package/dist/trajectory/parse/ase.js +77 -0
  333. package/dist/trajectory/parse/hdf5.d.ts +2 -0
  334. package/dist/trajectory/parse/hdf5.js +129 -0
  335. package/dist/trajectory/parse/index.d.ts +12 -0
  336. package/dist/trajectory/parse/index.js +299 -0
  337. package/dist/trajectory/parse/lammps.d.ts +5 -0
  338. package/dist/trajectory/parse/lammps.js +179 -0
  339. package/dist/trajectory/parse/vasp.d.ts +2 -0
  340. package/dist/trajectory/parse/vasp.js +68 -0
  341. package/dist/trajectory/parse/xyz.d.ts +2 -0
  342. package/dist/trajectory/parse/xyz.js +110 -0
  343. package/dist/trajectory/plotting.js +13 -8
  344. package/dist/trajectory/types.d.ts +11 -0
  345. package/dist/trajectory/types.js +1 -0
  346. package/dist/utils.d.ts +3 -0
  347. package/dist/utils.js +17 -0
  348. package/dist/xrd/XrdPlot.svelte +337 -245
  349. package/dist/xrd/broadening.js +14 -9
  350. package/dist/xrd/calc-xrd.js +12 -19
  351. package/dist/xrd/parse.d.ts +1 -1
  352. package/dist/xrd/parse.js +17 -17
  353. package/package.json +103 -101
  354. package/readme.md +4 -4
  355. package/dist/trajectory/parse.d.ts +0 -42
  356. package/dist/trajectory/parse.js +0 -1267
  357. /package/dist/element/{data.json.d.ts → data.json.gz.d.ts} +0 -0
  358. /package/dist/theme/{themes.js → themes.mjs} +0 -0
@@ -1,5 +1,16 @@
1
- <script lang="ts">let { error_msg, on_dismiss, error_snippet, ...rest } = $props();
2
- export {};
1
+ <script lang="ts">
2
+ import { sanitize_html } from '../sanitize'
3
+ import type { Snippet } from 'svelte'
4
+ import type { HTMLAttributes } from 'svelte/elements'
5
+
6
+ let { error_msg, on_dismiss, error_snippet, ...rest }:
7
+ & HTMLAttributes<HTMLDivElement>
8
+ & {
9
+ error_msg: string
10
+ on_dismiss: () => void
11
+ // Custom error snippet for advanced error handling
12
+ error_snippet?: Snippet<[{ error_msg: string; on_dismiss: () => void }]>
13
+ } = $props()
3
14
  </script>
4
15
 
5
16
  <div {...rest}>
@@ -7,7 +18,7 @@ export {};
7
18
  {@render error_snippet({ error_msg, on_dismiss })}
8
19
  {:else if error_msg.startsWith(`<`)}
9
20
  <!-- Render HTML content for unsupported format messages -->
10
- {@html error_msg}
21
+ {@html sanitize_html(error_msg)}
11
22
  <button onclick={on_dismiss}>Dismiss</button>
12
23
  {:else}
13
24
  <h3 id="error">Error</h3>
@@ -1,99 +1,153 @@
1
- <script lang="ts">import SettingsSection from '../layout/SettingsSection.svelte';
2
- import DraggablePane from '../overlays/DraggablePane.svelte';
3
- import { export_trajectory_video, get_ffmpeg_conversion_command, } from '../io/export';
4
- import { tooltip } from 'svelte-multiselect/attachments';
5
- let { export_pane_open = $bindable(false), trajectory = undefined, wrapper = undefined, filename = `trajectory`, video_fps = $bindable(30), resolution_multiplier = $bindable(1), on_step_change = undefined, pane_props = {}, toggle_props = {}, ...rest } = $props();
6
- let is_exporting = $state(false);
7
- let export_progress = $state(0);
8
- let export_format = $state(`webm`);
9
- let export_error = $state(null);
10
- let total_frames_available = $derived(trajectory?.total_frames || trajectory?.frames?.length || 0);
11
- let start_frame = $state(0);
12
- let end_frame = $state(0);
13
- let canvas = $derived(wrapper?.querySelector(`canvas`));
14
- // Estimated file size in MB
15
- let file_size_mb = $derived.by(() => {
16
- if (!canvas)
17
- return 0;
18
- const pixels = canvas.width * canvas.height * resolution_multiplier ** 2;
19
- const bitrate = Math.max(1e6, Math.min(pixels * video_fps * 0.1, 2e8));
20
- return (bitrate * export_frame_count / video_fps) / 8 / 1024 / 1024;
21
- });
22
- // Initialize end_frame when trajectory changes
23
- $effect(() => {
1
+ <script lang="ts">
2
+ import {
3
+ export_trajectory_video,
4
+ get_ffmpeg_conversion_command,
5
+ } from '../io/export'
6
+ import SettingsSection from '../layout/SettingsSection.svelte'
7
+ import DraggablePane from '../overlays/DraggablePane.svelte'
8
+ import type { TrajectoryType } from './'
9
+ import type { ComponentProps } from 'svelte'
10
+ import { tooltip } from 'svelte-multiselect/attachments'
11
+
12
+ let {
13
+ export_pane_open = $bindable(false),
14
+ trajectory = undefined,
15
+ wrapper = undefined,
16
+ filename = `trajectory`,
17
+ video_fps = $bindable(30),
18
+ resolution_multiplier = $bindable(1),
19
+ on_step_change = undefined,
20
+ pane_props = {},
21
+ toggle_props = {},
22
+ ...rest
23
+ }: {
24
+ // Control pane state
25
+ export_pane_open?: boolean
26
+ // Trajectory data for generating filename
27
+ trajectory?: TrajectoryType
28
+ // Canvas wrapper for video export
29
+ wrapper?: HTMLDivElement
30
+ // Filename for export
31
+ filename?: string
32
+ // Export settings
33
+ video_fps?: number
34
+ resolution_multiplier?: number
35
+ // Function to change trajectory step during export
36
+ on_step_change?: (step_idx: number) => Promise<void> | void
37
+ // Pane customization
38
+ pane_props?: ComponentProps<typeof DraggablePane>[`pane_props`]
39
+ toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`]
40
+ } = $props()
41
+
42
+ let is_exporting = $state(false)
43
+ let export_progress = $state(0)
44
+ let export_format = $state<`webm` | `mp4`>(`webm`)
45
+ let export_error = $state<string | null>(null)
46
+
47
+ let total_frames_available = $derived(
48
+ trajectory?.total_frames || trajectory?.frames?.length || 0,
49
+ )
50
+
51
+ let start_frame = $state(0)
52
+ let end_frame = $state(0)
53
+
54
+ let canvas = $derived(wrapper?.querySelector(`canvas`) as HTMLCanvasElement)
55
+
56
+ // Estimated file size in MB
57
+ let file_size_mb = $derived.by(() => {
58
+ if (!canvas) return 0
59
+ const pixels = canvas.width * canvas.height * resolution_multiplier ** 2
60
+ const bitrate = Math.max(1e6, Math.min(pixels * video_fps * 0.1, 2e8))
61
+ return (bitrate * export_frame_count / video_fps) / 8 / 1024 / 1024
62
+ })
63
+
64
+ // Initialize end_frame when trajectory changes
65
+ $effect(() => {
24
66
  if (total_frames_available > 0) {
25
- end_frame = total_frames_available - 1;
67
+ end_frame = total_frames_available - 1
26
68
  }
27
- });
28
- // Validate and constrain frame range
29
- $effect(() => {
30
- if (start_frame < 0)
31
- start_frame = 0;
69
+ })
70
+
71
+ // Validate and constrain frame range
72
+ $effect(() => {
73
+ if (start_frame < 0) start_frame = 0
32
74
  if (start_frame >= total_frames_available) {
33
- start_frame = Math.max(0, total_frames_available - 1);
75
+ start_frame = Math.max(0, total_frames_available - 1)
34
76
  }
35
- if (end_frame < start_frame)
36
- end_frame = start_frame;
77
+ if (end_frame < start_frame) end_frame = start_frame
37
78
  if (end_frame >= total_frames_available) {
38
- end_frame = Math.max(0, total_frames_available - 1);
79
+ end_frame = Math.max(0, total_frames_available - 1)
39
80
  }
40
- });
41
- let export_frame_count = $derived(end_frame >= start_frame ? end_frame - start_frame + 1 : 0);
42
- async function handle_video_export(format = `webm`) {
43
- export_error = null;
81
+ })
82
+
83
+ let export_frame_count = $derived(
84
+ end_frame >= start_frame ? end_frame - start_frame + 1 : 0,
85
+ )
86
+
87
+ async function handle_video_export(format: `webm` | `mp4` = `webm`) {
88
+ export_error = null
89
+
44
90
  // Validate
45
91
  if (!trajectory || !on_step_change || !canvas || export_frame_count === 0) {
46
- export_error = !trajectory
47
- ? `No trajectory`
48
- : !canvas
49
- ? `Canvas not ready`
50
- : `Invalid frame range`;
51
- return;
92
+ export_error = !trajectory
93
+ ? `No trajectory`
94
+ : !canvas
95
+ ? `Canvas not ready`
96
+ : `Invalid frame range`
97
+ return
52
98
  }
53
- export_format = format;
54
- is_exporting = true;
55
- export_progress = 0;
99
+
100
+ export_format = format
101
+ is_exporting = true
102
+ export_progress = 0
103
+
56
104
  try {
57
- await export_trajectory_video(canvas, `${filename}.webm`, {
58
- fps: video_fps,
59
- total_frames: export_frame_count,
60
- resolution_multiplier,
61
- on_progress: (progress) => (export_progress = progress),
62
- on_step: async (idx) => await on_step_change(start_frame + idx),
63
- });
64
- if (format === `mp4`) {
65
- navigator.clipboard
66
- .writeText(get_ffmpeg_conversion_command(`${filename}.webm`))
67
- .catch(console.warn);
68
- }
69
- export_progress = 100;
70
- setTimeout(() => {
71
- is_exporting = false;
72
- export_progress = 0;
73
- }, 1000);
74
- }
75
- catch (error) {
76
- console.error(`Export failed:`, error);
77
- export_error = error instanceof Error ? error.message : String(error);
78
- is_exporting = false;
79
- export_progress = 0;
105
+ await export_trajectory_video(canvas, `${filename}.webm`, {
106
+ fps: video_fps,
107
+ total_frames: export_frame_count,
108
+ resolution_multiplier,
109
+ on_progress: (progress) => (export_progress = progress),
110
+ on_step: async (idx) => await on_step_change(start_frame + idx),
111
+ })
112
+
113
+ if (format === `mp4`) {
114
+ navigator.clipboard
115
+ .writeText(get_ffmpeg_conversion_command(`${filename}.webm`))
116
+ .catch(console.warn)
117
+ }
118
+
119
+ export_progress = 100
120
+ setTimeout(() => {
121
+ is_exporting = false
122
+ export_progress = 0
123
+ }, 1000)
124
+ } catch (error) {
125
+ console.error(`Export failed:`, error)
126
+ export_error = error instanceof Error ? error.message : String(error)
127
+ is_exporting = false
128
+ export_progress = 0
80
129
  }
81
- }
82
- let is_video_supported = $derived(typeof window !== `undefined` &&
83
- typeof MediaRecorder !== `undefined` &&
84
- MediaRecorder.isTypeSupported(`video/webm;codecs=vp9`));
85
- let has_canvas = $state(false);
86
- $effect(() => {
130
+ }
131
+
132
+ let is_video_supported = $derived(
133
+ typeof globalThis !== `undefined` &&
134
+ typeof MediaRecorder !== `undefined` &&
135
+ MediaRecorder.isTypeSupported(`video/webm;codecs=vp9`),
136
+ )
137
+
138
+ let has_canvas = $state(false)
139
+
140
+ $effect(() => {
87
141
  if (!wrapper) {
88
- has_canvas = false;
89
- return;
142
+ has_canvas = false
143
+ return
90
144
  }
91
- const check = () => (has_canvas = Boolean(wrapper.querySelector(`canvas`)));
92
- check();
93
- const observer = new MutationObserver(check);
94
- observer.observe(wrapper, { childList: true, subtree: true });
95
- return () => observer.disconnect();
96
- });
145
+ const check = () => (has_canvas = Boolean(wrapper.querySelector(`canvas`)))
146
+ check()
147
+ const observer = new MutationObserver(check)
148
+ observer.observe(wrapper, { childList: true, subtree: true })
149
+ return () => observer.disconnect()
150
+ })
97
151
  </script>
98
152
 
99
153
  <DraggablePane
@@ -242,8 +296,9 @@ $effect(() => {
242
296
  <style>
243
297
  .field-label {
244
298
  display: flex;
245
- flex-direction: column;
246
- gap: 2pt;
299
+ align-items: center;
300
+ gap: 6pt;
301
+ white-space: nowrap;
247
302
  }
248
303
  .warning, .error-message {
249
304
  padding: 1ex;
@@ -275,13 +330,16 @@ $effect(() => {
275
330
  color: var(--text-color-muted);
276
331
  }
277
332
  .resolution-buttons {
278
- display: flex;
279
- gap: 6pt;
280
- margin: 4pt;
333
+ display: inline-flex;
334
+ gap: 3pt;
335
+ margin: 0;
336
+ margin-left: auto;
337
+ white-space: nowrap;
281
338
  }
282
339
  .resolution-buttons button {
283
- flex: 1;
284
- padding: 1pt 4pt;
340
+ flex: 0 0 auto;
341
+ min-width: 2.8em;
342
+ padding: 1pt 3pt;
285
343
  border: 1px solid var(--border-color, rgba(255, 255, 255, 0.2));
286
344
  background: var(--btn-bg, rgba(255, 255, 255, 0.1));
287
345
  color: var(--text-color);
@@ -12,6 +12,6 @@ type $$ComponentProps = {
12
12
  pane_props?: ComponentProps<typeof DraggablePane>[`pane_props`];
13
13
  toggle_props?: ComponentProps<typeof DraggablePane>[`toggle_props`];
14
14
  };
15
- declare const TrajectoryExportPane: import("svelte").Component<$$ComponentProps, {}, "resolution_multiplier" | "export_pane_open" | "video_fps">;
15
+ declare const TrajectoryExportPane: import("svelte").Component<$$ComponentProps, {}, "export_pane_open" | "resolution_multiplier" | "video_fps">;
16
16
  type TrajectoryExportPane = ReturnType<typeof TrajectoryExportPane>;
17
17
  export default TrajectoryExportPane;