matterviz 0.3.1 → 0.3.2
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.
- package/dist/FilePicker.svelte +37 -20
- package/dist/Icon.svelte +2 -2
- package/dist/app.css +29 -0
- package/dist/brillouin/BrillouinZone.svelte +19 -61
- package/dist/brillouin/BrillouinZone.svelte.d.ts +1 -1
- package/dist/brillouin/BrillouinZoneExportPane.svelte +12 -20
- package/dist/brillouin/BrillouinZoneScene.svelte +2 -2
- package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +1 -1
- package/dist/chempot-diagram/ChemPotDiagram.svelte +192 -0
- package/dist/chempot-diagram/ChemPotDiagram.svelte.d.ts +13 -0
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte +677 -0
- package/dist/chempot-diagram/ChemPotDiagram2D.svelte.d.ts +16 -0
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte +2688 -0
- package/dist/chempot-diagram/ChemPotDiagram3D.svelte.d.ts +16 -0
- package/dist/chempot-diagram/ChemPotScene3D.svelte +8 -0
- package/dist/chempot-diagram/ChemPotScene3D.svelte.d.ts +7 -0
- package/dist/chempot-diagram/color.d.ts +10 -0
- package/dist/chempot-diagram/color.js +33 -0
- package/dist/chempot-diagram/compute.d.ts +38 -0
- package/dist/chempot-diagram/compute.js +650 -0
- package/dist/chempot-diagram/index.d.ts +5 -0
- package/dist/chempot-diagram/index.js +5 -0
- package/dist/chempot-diagram/pointer.d.ts +16 -0
- package/dist/chempot-diagram/pointer.js +40 -0
- package/dist/chempot-diagram/temperature.d.ts +15 -0
- package/dist/chempot-diagram/temperature.js +37 -0
- package/dist/chempot-diagram/types.d.ts +83 -0
- package/dist/chempot-diagram/types.js +27 -0
- package/dist/colors/index.d.ts +3 -1
- package/dist/colors/index.js +4 -0
- package/dist/composition/BarChart.svelte +13 -22
- package/dist/composition/BubbleChart.svelte +5 -3
- package/dist/composition/FormulaFilter.svelte +586 -94
- package/dist/composition/FormulaFilter.svelte.d.ts +35 -1
- package/dist/composition/PieChart.svelte +43 -18
- package/dist/composition/PieChart.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull.svelte +4 -2
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull2D.svelte +13 -44
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +16 -7
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +17 -7
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullControls.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullStats.svelte +701 -226
- package/dist/convex-hull/ConvexHullStats.svelte.d.ts +6 -1
- package/dist/convex-hull/ConvexHullTooltip.svelte +1 -0
- package/dist/convex-hull/demo-temperature.d.ts +6 -0
- package/dist/convex-hull/demo-temperature.js +36 -0
- package/dist/convex-hull/helpers.d.ts +1 -1
- package/dist/convex-hull/helpers.js +2 -4
- package/dist/convex-hull/index.d.ts +1 -0
- package/dist/convex-hull/index.js +1 -0
- package/dist/convex-hull/thermodynamics.d.ts +8 -21
- package/dist/convex-hull/thermodynamics.js +106 -17
- package/dist/convex-hull/types.d.ts +5 -0
- package/dist/convex-hull/types.js +5 -0
- package/dist/coordination/CoordinationBarPlot.svelte +29 -46
- package/dist/element/BohrAtom.svelte +1 -1
- package/dist/element/data.js +2 -14
- package/dist/element/data.json.gz +0 -0
- package/dist/element/types.d.ts +1 -0
- package/dist/fermi-surface/FermiSurface.svelte +20 -64
- package/dist/fermi-surface/FermiSurface.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceControls.svelte.d.ts +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte +1 -1
- package/dist/fermi-surface/FermiSurfaceScene.svelte.d.ts +1 -1
- package/dist/fermi-surface/parse.js +16 -22
- package/dist/heatmap-matrix/HeatmapMatrix.svelte +1273 -0
- package/dist/heatmap-matrix/HeatmapMatrix.svelte.d.ts +110 -0
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte +171 -0
- package/dist/heatmap-matrix/HeatmapMatrixControls.svelte.d.ts +31 -0
- package/dist/heatmap-matrix/index.d.ts +53 -0
- package/dist/heatmap-matrix/index.js +100 -0
- package/dist/heatmap-matrix/shared.d.ts +2 -0
- package/dist/heatmap-matrix/shared.js +4 -0
- package/dist/icons.d.ts +111 -0
- package/dist/icons.js +111 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/io/export.js +15 -3
- package/dist/io/file-drop.d.ts +7 -0
- package/dist/io/file-drop.js +43 -0
- package/dist/io/index.d.ts +2 -2
- package/dist/io/index.js +2 -112
- package/dist/io/types.d.ts +1 -0
- package/dist/io/url-drop.d.ts +2 -0
- package/dist/io/url-drop.js +118 -0
- package/dist/isosurface/Isosurface.svelte +101 -45
- package/dist/isosurface/IsosurfaceControls.svelte +19 -0
- package/dist/isosurface/parse.js +73 -30
- package/dist/isosurface/slice.d.ts +2 -1
- package/dist/isosurface/slice.js +3 -3
- package/dist/isosurface/types.d.ts +13 -1
- package/dist/isosurface/types.js +98 -0
- package/dist/labels.d.ts +2 -1
- package/dist/labels.js +1 -0
- package/dist/layout/InfoTag.svelte +62 -62
- package/dist/layout/SubpageGrid.svelte +74 -0
- package/dist/layout/SubpageGrid.svelte.d.ts +14 -0
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.js +1 -0
- package/dist/layout/json-tree/JsonNode.svelte +83 -85
- package/dist/layout/json-tree/JsonTree.svelte +20 -19
- package/dist/layout/json-tree/JsonTree.svelte.d.ts +1 -1
- package/dist/layout/json-tree/JsonValue.svelte +196 -116
- package/dist/layout/json-tree/types.d.ts +10 -2
- package/dist/layout/json-tree/utils.d.ts +2 -0
- package/dist/layout/json-tree/utils.js +33 -0
- package/dist/math.d.ts +7 -0
- package/dist/math.js +358 -7
- package/dist/overlays/ContextMenu.svelte +3 -2
- package/dist/overlays/DraggablePane.svelte +163 -58
- package/dist/overlays/DraggablePane.svelte.d.ts +2 -0
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte +232 -77
- package/dist/phase-diagram/IsobaricBinaryPhaseDiagram.svelte.d.ts +6 -2
- package/dist/phase-diagram/PhaseDiagramControls.svelte +32 -11
- package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +3 -2
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte +103 -0
- package/dist/phase-diagram/PhaseDiagramEditorPane.svelte.d.ts +15 -0
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte +102 -95
- package/dist/phase-diagram/PhaseDiagramExportPane.svelte.d.ts +7 -0
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte +100 -26
- package/dist/phase-diagram/PhaseDiagramTooltip.svelte.d.ts +6 -3
- package/dist/phase-diagram/index.d.ts +2 -0
- package/dist/phase-diagram/index.js +2 -0
- package/dist/phase-diagram/svg-to-diagram.d.ts +2 -0
- package/dist/phase-diagram/svg-to-diagram.js +865 -0
- package/dist/phase-diagram/types.d.ts +10 -0
- package/dist/phase-diagram/utils.d.ts +7 -4
- package/dist/phase-diagram/utils.js +149 -59
- package/dist/plot/AxisLabel.svelte +26 -0
- package/dist/plot/AxisLabel.svelte.d.ts +16 -0
- package/dist/plot/BarPlot.svelte +473 -228
- package/dist/plot/BarPlot.svelte.d.ts +3 -3
- package/dist/plot/BarPlotControls.svelte +3 -2
- package/dist/plot/BarPlotControls.svelte.d.ts +1 -1
- package/dist/plot/ColorBar.svelte +54 -54
- package/dist/plot/ColorBar.svelte.d.ts +1 -1
- package/dist/plot/ColorScaleSelect.svelte +1 -1
- package/dist/plot/ElementScatter.svelte +3 -2
- package/dist/plot/FillArea.svelte +4 -1
- package/dist/plot/Histogram.svelte +320 -230
- package/dist/plot/Histogram.svelte.d.ts +2 -2
- package/dist/plot/HistogramControls.svelte +29 -10
- package/dist/plot/HistogramControls.svelte.d.ts +6 -2
- package/dist/plot/InteractiveAxisLabel.svelte.d.ts +2 -2
- package/dist/plot/PlotControls.svelte +109 -27
- package/dist/plot/PlotControls.svelte.d.ts +1 -1
- package/dist/plot/PlotLegend.svelte +1 -1
- package/dist/plot/PortalSelect.svelte +2 -1
- package/dist/plot/ReferenceLine.svelte +2 -1
- package/dist/plot/ReferenceLine.svelte.d.ts +1 -0
- package/dist/plot/ReferencePlane.svelte +1 -3
- package/dist/plot/ScatterPlot.svelte +343 -209
- package/dist/plot/ScatterPlot.svelte.d.ts +3 -3
- package/dist/plot/ScatterPlot3D.svelte.d.ts +2 -2
- package/dist/plot/ScatterPlot3DControls.svelte +203 -250
- package/dist/plot/ScatterPlot3DScene.svelte +4 -7
- package/dist/plot/ScatterPlot3DScene.svelte.d.ts +2 -2
- package/dist/plot/ScatterPlotControls.svelte +95 -55
- package/dist/plot/ScatterPlotControls.svelte.d.ts +1 -1
- package/dist/plot/ZeroLines.svelte +44 -0
- package/dist/plot/ZeroLines.svelte.d.ts +32 -0
- package/dist/plot/ZoomRect.svelte +21 -0
- package/dist/plot/ZoomRect.svelte.d.ts +8 -0
- package/dist/plot/axis-utils.d.ts +1 -1
- package/dist/plot/index.d.ts +6 -2
- package/dist/plot/index.js +6 -2
- package/dist/plot/interactions.d.ts +8 -10
- package/dist/plot/interactions.js +2 -3
- package/dist/plot/layout.d.ts +7 -1
- package/dist/plot/layout.js +12 -4
- package/dist/plot/reference-line.d.ts +4 -21
- package/dist/plot/reference-line.js +7 -81
- package/dist/plot/types.d.ts +42 -17
- package/dist/plot/types.js +10 -0
- package/dist/plot/utils/label-placement.js +13 -10
- package/dist/plot/utils.d.ts +1 -0
- package/dist/plot/utils.js +14 -0
- package/dist/rdf/RdfPlot.svelte +55 -66
- package/dist/settings.d.ts +3 -0
- package/dist/settings.js +17 -3
- package/dist/spectral/Bands.svelte +515 -143
- package/dist/spectral/Bands.svelte.d.ts +22 -2
- package/dist/spectral/helpers.d.ts +23 -1
- package/dist/spectral/helpers.js +65 -9
- package/dist/spectral/types.d.ts +2 -0
- package/dist/structure/AtomLegend.svelte +29 -8
- package/dist/structure/AtomLegend.svelte.d.ts +1 -1
- package/dist/structure/CellSelect.svelte +92 -22
- package/dist/structure/Structure.svelte +108 -118
- package/dist/structure/Structure.svelte.d.ts +1 -1
- package/dist/structure/StructureControls.svelte +25 -22
- package/dist/structure/StructureControls.svelte.d.ts +1 -1
- package/dist/structure/StructureInfoPane.svelte +7 -1
- package/dist/structure/StructureScene.svelte +104 -66
- package/dist/structure/StructureScene.svelte.d.ts +2 -1
- package/dist/structure/atom-properties.d.ts +6 -2
- package/dist/structure/atom-properties.js +38 -25
- package/dist/structure/export.js +10 -7
- package/dist/structure/ferrox-wasm-types.d.ts +3 -2
- package/dist/structure/ferrox-wasm-types.js +0 -3
- package/dist/structure/ferrox-wasm.d.ts +3 -2
- package/dist/structure/ferrox-wasm.js +1 -2
- package/dist/structure/index.d.ts +6 -0
- package/dist/structure/index.js +22 -0
- package/dist/structure/parse.js +19 -16
- package/dist/structure/partial-occupancy.d.ts +25 -0
- package/dist/structure/partial-occupancy.js +102 -0
- package/dist/structure/validation.js +6 -3
- package/dist/symmetry/SymmetryStats.svelte +18 -4
- package/dist/symmetry/WyckoffTable.svelte +18 -10
- package/dist/symmetry/index.d.ts +7 -4
- package/dist/symmetry/index.js +83 -18
- package/dist/table/HeatmapTable.svelte +425 -65
- package/dist/table/HeatmapTable.svelte.d.ts +12 -1
- package/dist/table/ToggleMenu.svelte +2 -0
- package/dist/table/index.d.ts +2 -0
- package/dist/trajectory/Trajectory.svelte +147 -145
- package/dist/trajectory/TrajectoryExportPane.svelte +13 -9
- package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +1 -1
- package/dist/trajectory/constants.d.ts +6 -0
- package/dist/trajectory/constants.js +7 -0
- package/dist/trajectory/extract.js +3 -5
- package/dist/trajectory/format-detect.d.ts +9 -0
- package/dist/trajectory/format-detect.js +76 -0
- package/dist/trajectory/frame-reader.d.ts +17 -0
- package/dist/trajectory/frame-reader.js +339 -0
- package/dist/trajectory/helpers.d.ts +15 -0
- package/dist/trajectory/helpers.js +187 -0
- package/dist/trajectory/index.d.ts +1 -0
- package/dist/trajectory/index.js +11 -4
- package/dist/trajectory/parse/ase.d.ts +2 -0
- package/dist/trajectory/parse/ase.js +76 -0
- package/dist/trajectory/parse/hdf5.d.ts +2 -0
- package/dist/trajectory/parse/hdf5.js +121 -0
- package/dist/trajectory/parse/index.d.ts +12 -0
- package/dist/trajectory/parse/index.js +304 -0
- package/dist/trajectory/parse/lammps.d.ts +5 -0
- package/dist/trajectory/parse/lammps.js +169 -0
- package/dist/trajectory/parse/vasp.d.ts +2 -0
- package/dist/trajectory/parse/vasp.js +65 -0
- package/dist/trajectory/parse/xyz.d.ts +2 -0
- package/dist/trajectory/parse/xyz.js +109 -0
- package/dist/trajectory/types.d.ts +11 -0
- package/dist/trajectory/types.js +1 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.js +4 -0
- package/dist/xrd/XrdPlot.svelte +6 -4
- package/dist/xrd/calc-xrd.js +0 -1
- package/package.json +30 -24
- package/readme.md +4 -4
- package/dist/trajectory/parse.d.ts +0 -42
- package/dist/trajectory/parse.js +0 -1267
- /package/dist/element/{data.json.d.ts → data.json.gz.d.ts} +0 -0
|
@@ -1,8 +1,49 @@
|
|
|
1
1
|
<script lang="ts">import Icon from '../Icon.svelte';
|
|
2
2
|
import { draggable, tooltip } from 'svelte-multiselect/attachments';
|
|
3
|
-
let { show = $bindable(false), show_pane = true, children, toggle_props = {}, open_icon = `Cross`, closed_icon = `Settings`, icon_style = ``, offset = { x: 5, y: 5 }, max_width = `450px`, pane_props = {}, onclose = () => { }, on_drag_start = () => { }, toggle_pane_btn = $bindable(), pane_div = $bindable(), has_been_dragged = $bindable(false), currently_dragging = $bindable(false), } = $props();
|
|
3
|
+
let { show = $bindable(false), show_pane = true, children, toggle_props = {}, open_icon = `Cross`, closed_icon = `Settings`, icon_style = ``, offset = { x: 5, y: 5 }, max_width = `450px`, pane_props = {}, onclose = () => { }, on_drag_start = () => { }, toggle_pane_btn = $bindable(), pane_div = $bindable(), persistent = false, has_been_dragged = $bindable(false), currently_dragging = $bindable(false), resizable = `none`, } = $props();
|
|
4
4
|
let initial_position = $state({ left: `50px`, top: `50px` });
|
|
5
5
|
let show_control_buttons = $state(false);
|
|
6
|
+
let resizing = $state(false);
|
|
7
|
+
// Resize via bottom-right grip
|
|
8
|
+
function handle_resize_start(event) {
|
|
9
|
+
if (resizable === `none` || !pane_div)
|
|
10
|
+
return;
|
|
11
|
+
event.preventDefault();
|
|
12
|
+
event.stopPropagation();
|
|
13
|
+
resizing = true;
|
|
14
|
+
has_been_dragged = true;
|
|
15
|
+
show_control_buttons = true;
|
|
16
|
+
const start_x = event.clientX;
|
|
17
|
+
const start_y = event.clientY;
|
|
18
|
+
const start_w = pane_div.offsetWidth;
|
|
19
|
+
const start_h = pane_div.offsetHeight;
|
|
20
|
+
function on_move(evt) {
|
|
21
|
+
if (!pane_div)
|
|
22
|
+
return;
|
|
23
|
+
if (resizable !== `height`) {
|
|
24
|
+
pane_div.style.width = `${Math.max(200, start_w + evt.clientX - start_x)}px`;
|
|
25
|
+
}
|
|
26
|
+
if (resizable !== `width`) {
|
|
27
|
+
pane_div.style.maxHeight = `${Math.max(100, start_h + evt.clientY - start_y)}px`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function on_up() {
|
|
31
|
+
document.removeEventListener(`pointermove`, on_move);
|
|
32
|
+
document.removeEventListener(`pointerup`, on_up);
|
|
33
|
+
// Swallow the click that fires after pointerup to prevent the
|
|
34
|
+
// click-outside handler from closing the pane. Use
|
|
35
|
+
// stopImmediatePropagation so same-element bubble listeners
|
|
36
|
+
// (like Svelte's document onclick) are also blocked.
|
|
37
|
+
document.addEventListener(`click`, (evt) => evt.stopImmediatePropagation(), { capture: true, once: true });
|
|
38
|
+
// Delay clearing the resizing flag so any late-arriving click events
|
|
39
|
+
// are still suppressed by the handle_click_outside guard
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
resizing = false;
|
|
42
|
+
}, 150);
|
|
43
|
+
}
|
|
44
|
+
document.addEventListener(`pointermove`, on_move);
|
|
45
|
+
document.addEventListener(`pointerup`, on_up);
|
|
46
|
+
}
|
|
6
47
|
function toggle_pane(event) {
|
|
7
48
|
event.stopPropagation();
|
|
8
49
|
show = !show;
|
|
@@ -24,6 +65,7 @@ function reset_position() {
|
|
|
24
65
|
right: `auto`,
|
|
25
66
|
bottom: `auto`,
|
|
26
67
|
width: ``,
|
|
68
|
+
maxHeight: ``,
|
|
27
69
|
});
|
|
28
70
|
}
|
|
29
71
|
}
|
|
@@ -58,17 +100,18 @@ function calculate_position() {
|
|
|
58
100
|
const top = `${toggle_rect.bottom - ancestor_rect.top + (offset.y ?? 5)}px`;
|
|
59
101
|
return { left, top }; // Position relative to positioned ancestor
|
|
60
102
|
}
|
|
61
|
-
// Click outside handler
|
|
103
|
+
// Click outside handler (skipped when persistent)
|
|
62
104
|
function handle_click_outside(event) {
|
|
63
|
-
if (!show)
|
|
105
|
+
if (!show || persistent)
|
|
64
106
|
return;
|
|
65
107
|
const target = event.target;
|
|
66
|
-
const is_toggle_button = toggle_pane_btn &&
|
|
108
|
+
const is_toggle_button = target instanceof Node && toggle_pane_btn &&
|
|
67
109
|
(target === toggle_pane_btn || toggle_pane_btn.contains(target));
|
|
68
|
-
const is_inside_pane = pane_div &&
|
|
110
|
+
const is_inside_pane = target instanceof Node && pane_div &&
|
|
69
111
|
(target === pane_div || pane_div.contains(target));
|
|
70
|
-
if (!is_toggle_button && !is_inside_pane && !currently_dragging)
|
|
112
|
+
if (!is_toggle_button && !is_inside_pane && !currently_dragging && !resizing) {
|
|
71
113
|
close_pane();
|
|
114
|
+
}
|
|
72
115
|
}
|
|
73
116
|
// Debounced resize handler for better performance
|
|
74
117
|
let resize_timeout = $state(undefined);
|
|
@@ -101,6 +144,7 @@ $effect(() => {
|
|
|
101
144
|
right: `auto`,
|
|
102
145
|
bottom: `auto`,
|
|
103
146
|
width: ``,
|
|
147
|
+
maxHeight: ``,
|
|
104
148
|
});
|
|
105
149
|
}
|
|
106
150
|
}
|
|
@@ -149,16 +193,24 @@ $effect(() => {
|
|
|
149
193
|
{...pane_props}
|
|
150
194
|
class="draggable-pane {show ? `pane-open` : ``} {pane_props.class ?? ``}"
|
|
151
195
|
>
|
|
152
|
-
<div class="control-
|
|
196
|
+
<div class="control-tab">
|
|
197
|
+
<Icon
|
|
198
|
+
icon="DragIndicator"
|
|
199
|
+
class="drag-handle"
|
|
200
|
+
style="width: 1em; height: 1em"
|
|
201
|
+
/>
|
|
153
202
|
{#if show_control_buttons}
|
|
154
203
|
<button
|
|
155
204
|
type="button"
|
|
156
205
|
class="reset-button"
|
|
157
|
-
onclick={
|
|
206
|
+
onclick={(event: MouseEvent) => {
|
|
207
|
+
event.stopPropagation()
|
|
208
|
+
reset_position()
|
|
209
|
+
}}
|
|
158
210
|
title="Reset pane position"
|
|
159
211
|
aria-label="Reset pane position"
|
|
160
212
|
>
|
|
161
|
-
<Icon icon="Reset" style="width:
|
|
213
|
+
<Icon icon="Reset" style="width: 1em; height: 1em" />
|
|
162
214
|
</button>
|
|
163
215
|
<button
|
|
164
216
|
type="button"
|
|
@@ -167,21 +219,47 @@ $effect(() => {
|
|
|
167
219
|
title="Close pane"
|
|
168
220
|
aria-label="Close pane"
|
|
169
221
|
>
|
|
170
|
-
<Icon icon="Cross" style="width:
|
|
222
|
+
<Icon icon="Cross" style="width: 1em; height: 1em" />
|
|
171
223
|
</button>
|
|
172
224
|
{/if}
|
|
173
|
-
<Icon
|
|
174
|
-
icon="DragIndicator"
|
|
175
|
-
class="drag-handle"
|
|
176
|
-
style="width: 1.25em; height: 1.25em"
|
|
177
|
-
/>
|
|
178
225
|
</div>
|
|
179
|
-
|
|
180
|
-
|
|
226
|
+
<div class="pane-content">
|
|
227
|
+
{@render children?.({
|
|
228
|
+
show,
|
|
229
|
+
show_control_buttons,
|
|
230
|
+
has_been_dragged,
|
|
231
|
+
currently_dragging,
|
|
232
|
+
})}
|
|
233
|
+
</div>
|
|
234
|
+
{#if resizable !== `none`}
|
|
235
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
236
|
+
<div
|
|
237
|
+
class="resize-grip"
|
|
238
|
+
class:resize-width={resizable === `width`}
|
|
239
|
+
class:resize-height={resizable === `height`}
|
|
240
|
+
onpointerdown={handle_resize_start}
|
|
241
|
+
ondblclick={() => {
|
|
242
|
+
if (pane_div) {
|
|
243
|
+
pane_div.style.width = ``
|
|
244
|
+
pane_div.style.maxHeight = ``
|
|
245
|
+
}
|
|
246
|
+
}}
|
|
247
|
+
>
|
|
248
|
+
<svg viewBox="0 0 10 10" width="10" height="10">
|
|
249
|
+
<line x1="9" y1="1" x2="1" y2="9" />
|
|
250
|
+
<line x1="9" y1="4" x2="4" y2="9" />
|
|
251
|
+
<line x1="9" y1="7" x2="7" y2="9" />
|
|
252
|
+
</svg>
|
|
253
|
+
</div>
|
|
254
|
+
{/if}
|
|
181
255
|
</div>
|
|
182
256
|
{/if}
|
|
183
257
|
|
|
184
258
|
<style>
|
|
259
|
+
:global(.hover-visible:has(.draggable-pane.pane-open)) {
|
|
260
|
+
opacity: 1;
|
|
261
|
+
pointer-events: auto;
|
|
262
|
+
}
|
|
185
263
|
button.pane-toggle {
|
|
186
264
|
box-sizing: border-box;
|
|
187
265
|
display: flex;
|
|
@@ -190,7 +268,7 @@ $effect(() => {
|
|
|
190
268
|
border-radius: var(--pane-toggle-border-radius, var(--border-radius, 3pt));
|
|
191
269
|
background-color: transparent;
|
|
192
270
|
transition: var(--pane-toggle-transition, background-color 0.2s);
|
|
193
|
-
font-size: var(--pane-toggle-font-size,
|
|
271
|
+
font-size: var(--pane-toggle-font-size, 0.875rem);
|
|
194
272
|
}
|
|
195
273
|
button.pane-toggle:hover {
|
|
196
274
|
background-color: color-mix(in srgb, currentColor 8%, transparent);
|
|
@@ -203,7 +281,6 @@ $effect(() => {
|
|
|
203
281
|
1px solid light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.15))
|
|
204
282
|
);
|
|
205
283
|
border-radius: var(--pane-border-radius, var(--border-radius, 3pt));
|
|
206
|
-
padding: var(--pane-padding, 1ex);
|
|
207
284
|
box-sizing: border-box;
|
|
208
285
|
box-shadow: var(
|
|
209
286
|
--pane-box-shadow,
|
|
@@ -214,18 +291,24 @@ $effect(() => {
|
|
|
214
291
|
);
|
|
215
292
|
z-index: var(--pane-z-index, 10);
|
|
216
293
|
display: grid;
|
|
217
|
-
gap: var(--pane-gap, 4pt);
|
|
218
294
|
text-align: left;
|
|
219
295
|
/* Exclude position from being transitioned to prevent sluggish dragging */
|
|
220
296
|
transition: opacity 0.3s, background-color 0.3s, border-color 0.3s, box-shadow 0.3s;
|
|
221
297
|
width: 28em;
|
|
222
298
|
max-width: var(--pane-max-width, 80cqw);
|
|
223
|
-
overflow
|
|
224
|
-
overflow-y: var(--pane-overflow-y, auto);
|
|
225
|
-
/* Height constraints: use viewport-based max-height as primary constraint */
|
|
299
|
+
overflow: visible; /* Allow control-tab to protrude above the pane border */
|
|
226
300
|
min-height: var(--pane-min-height, auto);
|
|
227
301
|
max-height: var(--pane-max-height, 80vh);
|
|
228
|
-
|
|
302
|
+
}
|
|
303
|
+
.draggable-pane .pane-content {
|
|
304
|
+
padding: var(--pane-padding, 1ex);
|
|
305
|
+
display: grid;
|
|
306
|
+
gap: var(--pane-gap, 4pt);
|
|
307
|
+
overflow-x: var(--pane-overflow-x, hidden);
|
|
308
|
+
overflow-y: var(--pane-overflow-y, auto);
|
|
309
|
+
max-height: inherit;
|
|
310
|
+
box-sizing: border-box;
|
|
311
|
+
overscroll-behavior: contain;
|
|
229
312
|
}
|
|
230
313
|
:global(body.fullscreen) .draggable-pane {
|
|
231
314
|
position: fixed !important; /* In fullscreen, we want viewport-relative positioning */
|
|
@@ -247,15 +330,15 @@ $effect(() => {
|
|
|
247
330
|
margin: var(--pane-hr-margin, 4pt 0);
|
|
248
331
|
height: 1px;
|
|
249
332
|
}
|
|
250
|
-
.draggable-pane :global(
|
|
333
|
+
.draggable-pane :global(section > div) {
|
|
251
334
|
text-align: right; /* right align long line-breaking trajectory file names */
|
|
252
335
|
}
|
|
253
|
-
.draggable-pane :global(label) {
|
|
336
|
+
.draggable-pane :global(:where(label)) {
|
|
254
337
|
display: inline-flex;
|
|
255
338
|
align-items: center;
|
|
256
339
|
gap: var(--pane-label-gap, 2pt);
|
|
257
340
|
}
|
|
258
|
-
.draggable-pane :global(input[type='text']) {
|
|
341
|
+
.draggable-pane :global(:where(input[type='text'])) {
|
|
259
342
|
flex: 1;
|
|
260
343
|
padding: var(--pane-input-padding, 4px 6px);
|
|
261
344
|
margin: var(--pane-input-margin, 0 0 0 5pt);
|
|
@@ -290,14 +373,14 @@ $effect(() => {
|
|
|
290
373
|
.draggable-pane :global(input::-webkit-inner-spin-button) {
|
|
291
374
|
display: none;
|
|
292
375
|
}
|
|
293
|
-
.draggable-pane :global(button) {
|
|
376
|
+
.draggable-pane :global(:where(button)) {
|
|
294
377
|
width: max-content;
|
|
295
378
|
background-color: var(
|
|
296
379
|
--pane-btn-bg,
|
|
297
380
|
var(--btn-bg, light-dark(rgba(0, 0, 0, 0.06), rgba(255, 255, 255, 0.1)))
|
|
298
381
|
);
|
|
299
382
|
}
|
|
300
|
-
.draggable-pane :global(button:hover) {
|
|
383
|
+
.draggable-pane :global(:where(button:hover)) {
|
|
301
384
|
background-color: var(
|
|
302
385
|
--pane-btn-bg-hover,
|
|
303
386
|
var(--btn-bg-hover, light-dark(rgba(0, 0, 0, 0.12), rgba(255, 255, 255, 0.2)))
|
|
@@ -329,59 +412,81 @@ $effect(() => {
|
|
|
329
412
|
.draggable-pane :global(label:has(input[type='range'])) {
|
|
330
413
|
flex: 1;
|
|
331
414
|
}
|
|
332
|
-
.draggable-pane .control-
|
|
415
|
+
.draggable-pane .control-tab {
|
|
416
|
+
position: absolute;
|
|
417
|
+
top: 6px;
|
|
418
|
+
right: -1px;
|
|
419
|
+
transform: translateX(100%);
|
|
333
420
|
display: flex;
|
|
334
|
-
|
|
421
|
+
flex-direction: column;
|
|
335
422
|
align-items: center;
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
z-index: var(--pane-control-buttons-z-index, 1);
|
|
423
|
+
gap: 1px;
|
|
424
|
+
padding: 3px 2px;
|
|
425
|
+
background: var(--pane-bg, var(--page-bg, light-dark(white, black)));
|
|
426
|
+
border: var(
|
|
427
|
+
--pane-border,
|
|
428
|
+
1px solid light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.15))
|
|
429
|
+
);
|
|
430
|
+
border-left: none;
|
|
431
|
+
border-radius: 0 5px 5px 0;
|
|
432
|
+
z-index: var(--pane-control-tab-z-index, var(--pane-control-buttons-z-index, 1));
|
|
347
433
|
}
|
|
348
434
|
.draggable-pane :global(.drag-handle) {
|
|
349
|
-
width: 1.
|
|
350
|
-
height: 1.
|
|
435
|
+
width: 1.1em;
|
|
436
|
+
height: 1.1em;
|
|
351
437
|
cursor: grab;
|
|
352
438
|
border-radius: 3px;
|
|
353
|
-
padding:
|
|
439
|
+
padding: 1px;
|
|
354
440
|
box-sizing: border-box;
|
|
355
|
-
opacity: 0.
|
|
356
|
-
|
|
357
|
-
pointer-events: auto; /* Re-enable pointer events for drag handle */
|
|
441
|
+
opacity: 0.5;
|
|
442
|
+
pointer-events: auto;
|
|
358
443
|
}
|
|
359
444
|
.draggable-pane :global(.drag-handle:hover) {
|
|
360
445
|
opacity: 0.8;
|
|
361
|
-
background-color: color-mix(in srgb, currentColor
|
|
446
|
+
background-color: color-mix(in srgb, currentColor 15%, transparent);
|
|
362
447
|
}
|
|
363
|
-
/* Ensure drag handle cursor changes properly */
|
|
364
448
|
.draggable-pane :global(.drag-handle:active) {
|
|
365
449
|
cursor: grabbing;
|
|
366
450
|
}
|
|
367
|
-
/* Reset and close button styling */
|
|
368
451
|
.draggable-pane :where(.reset-button, .close-button) {
|
|
369
452
|
background: none;
|
|
370
453
|
border: none;
|
|
371
|
-
padding:
|
|
454
|
+
padding: 1px;
|
|
372
455
|
border-radius: 3px;
|
|
373
456
|
box-sizing: border-box;
|
|
374
457
|
display: flex;
|
|
375
458
|
align-items: center;
|
|
376
459
|
justify-content: center;
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
opacity: 0.6;
|
|
381
|
-
background-color: color-mix(in srgb, currentColor 10%, transparent);
|
|
460
|
+
width: 1.1em;
|
|
461
|
+
height: 1.1em;
|
|
462
|
+
opacity: 0.5;
|
|
382
463
|
}
|
|
383
464
|
.draggable-pane :where(.reset-button:hover, .close-button:hover) {
|
|
384
465
|
opacity: 0.8;
|
|
385
|
-
background-color: color-mix(in srgb, currentColor
|
|
466
|
+
background-color: color-mix(in srgb, currentColor 15%, transparent);
|
|
467
|
+
}
|
|
468
|
+
.draggable-pane .resize-grip {
|
|
469
|
+
position: absolute;
|
|
470
|
+
bottom: 0;
|
|
471
|
+
right: 0;
|
|
472
|
+
padding: 2px;
|
|
473
|
+
cursor: nwse-resize;
|
|
474
|
+
opacity: 0.3;
|
|
475
|
+
touch-action: none;
|
|
476
|
+
line-height: 0;
|
|
477
|
+
svg {
|
|
478
|
+
stroke: currentColor;
|
|
479
|
+
stroke-width: 1.5;
|
|
480
|
+
stroke-linecap: round;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
.draggable-pane .resize-grip:hover {
|
|
484
|
+
opacity: 0.6;
|
|
485
|
+
}
|
|
486
|
+
.draggable-pane .resize-grip.resize-width {
|
|
487
|
+
cursor: ew-resize;
|
|
488
|
+
}
|
|
489
|
+
.draggable-pane .resize-grip.resize-height {
|
|
490
|
+
cursor: ns-resize;
|
|
386
491
|
}
|
|
387
492
|
</style>
|
|
@@ -22,6 +22,8 @@ type $$ComponentProps = {
|
|
|
22
22
|
};
|
|
23
23
|
max_width?: string;
|
|
24
24
|
pane_props?: HTMLAttributes<HTMLDivElement>;
|
|
25
|
+
persistent?: boolean;
|
|
26
|
+
resizable?: `both` | `width` | `height` | `none`;
|
|
25
27
|
onclose?: () => void;
|
|
26
28
|
on_drag_start?: () => void;
|
|
27
29
|
toggle_pane_btn?: HTMLButtonElement;
|