matterviz 0.3.0 → 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/MillerIndexInput.svelte +60 -0
- package/dist/MillerIndexInput.svelte.d.ts +7 -0
- package/dist/app.css +38 -2
- package/dist/brillouin/BrillouinZone.svelte +20 -62
- 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 +770 -90
- package/dist/composition/FormulaFilter.svelte.d.ts +37 -1
- package/dist/composition/PieChart.svelte +43 -18
- package/dist/composition/PieChart.svelte.d.ts +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +2 -0
- package/dist/convex-hull/ConvexHull.svelte +14 -1
- package/dist/convex-hull/ConvexHull.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull2D.svelte +14 -45
- package/dist/convex-hull/ConvexHull2D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull3D.svelte +396 -134
- package/dist/convex-hull/ConvexHull3D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHull4D.svelte +93 -42
- package/dist/convex-hull/ConvexHull4D.svelte.d.ts +1 -1
- package/dist/convex-hull/ConvexHullControls.svelte +94 -31
- package/dist/convex-hull/ConvexHullControls.svelte.d.ts +4 -2
- package/dist/convex-hull/ConvexHullStats.svelte +697 -128
- package/dist/convex-hull/ConvexHullStats.svelte.d.ts +6 -1
- package/dist/convex-hull/ConvexHullTooltip.svelte +1 -0
- package/dist/convex-hull/GasPressureControls.svelte +72 -38
- package/dist/convex-hull/GasPressureControls.svelte.d.ts +2 -1
- package/dist/convex-hull/TemperatureSlider.svelte +46 -19
- package/dist/convex-hull/TemperatureSlider.svelte.d.ts +2 -1
- package/dist/convex-hull/demo-temperature.d.ts +6 -0
- package/dist/convex-hull/demo-temperature.js +36 -0
- package/dist/convex-hull/gas-thermodynamics.js +16 -5
- package/dist/convex-hull/helpers.d.ts +7 -1
- package/dist/convex-hull/helpers.js +45 -15
- package/dist/convex-hull/index.d.ts +15 -1
- 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 +7 -0
- package/dist/convex-hull/types.js +11 -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/index.d.ts +1 -1
- package/dist/element/index.js +1 -0
- package/dist/element/types.d.ts +1 -0
- package/dist/fermi-surface/FermiSurface.svelte +21 -65
- 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/compute.js +1 -21
- package/dist/fermi-surface/marching-cubes.d.ts +2 -13
- package/dist/fermi-surface/marching-cubes.js +2 -519
- package/dist/fermi-surface/parse.js +17 -23
- 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 +119 -0
- package/dist/icons.js +119 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.js +6 -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 +231 -0
- package/dist/isosurface/Isosurface.svelte.d.ts +8 -0
- package/dist/isosurface/IsosurfaceControls.svelte +273 -0
- package/dist/isosurface/IsosurfaceControls.svelte.d.ts +9 -0
- package/dist/isosurface/index.d.ts +5 -0
- package/dist/isosurface/index.js +6 -0
- package/dist/isosurface/parse.d.ts +6 -0
- package/dist/isosurface/parse.js +548 -0
- package/dist/isosurface/slice.d.ts +11 -0
- package/dist/isosurface/slice.js +145 -0
- package/dist/isosurface/types.d.ts +55 -0
- package/dist/isosurface/types.js +178 -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 +226 -53
- package/dist/layout/json-tree/JsonTree.svelte +425 -51
- package/dist/layout/json-tree/JsonTree.svelte.d.ts +1 -1
- package/dist/layout/json-tree/JsonValue.svelte +218 -97
- package/dist/layout/json-tree/types.d.ts +27 -2
- package/dist/layout/json-tree/utils.d.ts +14 -1
- package/dist/layout/json-tree/utils.js +254 -0
- package/dist/marching-cubes.d.ts +14 -0
- package/dist/marching-cubes.js +519 -0
- package/dist/math.d.ts +8 -0
- package/dist/math.js +374 -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/ElementScatter.svelte +4 -3
- 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/data-cleaning.js +1 -5
- 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 +10 -19
- 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 +14 -11
- package/dist/plot/utils.d.ts +1 -0
- package/dist/plot/utils.js +14 -0
- package/dist/rdf/RdfPlot.svelte +55 -66
- package/dist/rdf/RdfPlot.svelte.d.ts +1 -1
- package/dist/rdf/index.d.ts +1 -1
- package/dist/rdf/index.js +1 -1
- package/dist/settings.d.ts +5 -0
- package/dist/settings.js +37 -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 +31 -10
- package/dist/structure/AtomLegend.svelte.d.ts +1 -1
- package/dist/structure/CellSelect.svelte +92 -22
- package/dist/structure/Lattice.svelte +2 -0
- package/dist/structure/Structure.svelte +716 -173
- package/dist/structure/Structure.svelte.d.ts +7 -2
- package/dist/structure/StructureControls.svelte +26 -14
- package/dist/structure/StructureControls.svelte.d.ts +5 -1
- package/dist/structure/StructureInfoPane.svelte +7 -1
- package/dist/structure/StructureScene.svelte +386 -95
- package/dist/structure/StructureScene.svelte.d.ts +15 -4
- 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 +7 -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 +468 -69
- package/dist/table/HeatmapTable.svelte.d.ts +13 -1
- package/dist/table/ToggleMenu.svelte +291 -44
- package/dist/table/ToggleMenu.svelte.d.ts +4 -1
- package/dist/table/index.d.ts +3 -0
- package/dist/tooltip/index.d.ts +1 -1
- package/dist/tooltip/index.js +1 -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 +33 -23
- 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
|
@@ -17,6 +17,7 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
17
17
|
default_num_format?: string;
|
|
18
18
|
show_heatmap?: boolean;
|
|
19
19
|
heatmap_class?: string;
|
|
20
|
+
onrowclick?: (event: MouseEvent | KeyboardEvent, row: RowData) => void;
|
|
20
21
|
onrowdblclick?: (event: MouseEvent, row: RowData) => void;
|
|
21
22
|
column_order?: string[];
|
|
22
23
|
export_data?: ExportData;
|
|
@@ -27,11 +28,22 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
27
28
|
selected_rows?: RowData[];
|
|
28
29
|
hidden_columns?: string[];
|
|
29
30
|
scroll_style?: string;
|
|
31
|
+
root_style?: string;
|
|
30
32
|
onsort?: (column: string, dir: `asc` | `desc`) => Promise<RowData[]>;
|
|
31
33
|
onsorterror?: (error: unknown, column: string, dir: `asc` | `desc`) => void;
|
|
32
34
|
loading?: boolean;
|
|
33
35
|
sort_data?: boolean;
|
|
36
|
+
heatmap_opacity?: number;
|
|
37
|
+
empty_message?: string;
|
|
38
|
+
show_row_numbers?: boolean;
|
|
39
|
+
allow_better_toggle?: boolean;
|
|
40
|
+
show_controls?: boolean;
|
|
41
|
+
controls_open?: boolean;
|
|
42
|
+
header_cell?: Snippet<[{
|
|
43
|
+
col: Label;
|
|
44
|
+
}]>;
|
|
45
|
+
footer?: Snippet;
|
|
34
46
|
};
|
|
35
|
-
declare const HeatmapTable: import("svelte").Component<$$ComponentProps, {}, "sort" | "data" | "loading" | "show_heatmap" | "column_order" | "selected_rows" | "hidden_columns">;
|
|
47
|
+
declare const HeatmapTable: import("svelte").Component<$$ComponentProps, {}, "sort" | "data" | "show_controls" | "controls_open" | "loading" | "show_heatmap" | "column_order" | "selected_rows" | "hidden_columns" | "heatmap_opacity">;
|
|
36
48
|
type HeatmapTable = ReturnType<typeof HeatmapTable>;
|
|
37
49
|
export default HeatmapTable;
|
|
@@ -1,12 +1,124 @@
|
|
|
1
1
|
<script lang="ts">import Icon from '../Icon.svelte';
|
|
2
2
|
import { click_outside, tooltip } from 'svelte-multiselect/attachments';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import { slide } from 'svelte/transition';
|
|
4
|
+
let { columns = $bindable([]), column_panel_open = $bindable(false), n_columns, collapsed_sections = $bindable([]), on_reset, } = $props();
|
|
5
|
+
const col_id = (col) => col.key ?? col.label;
|
|
6
|
+
// Snapshot default visibility when column set changes (new dataset).
|
|
7
|
+
// Compare by column keys to avoid re-snapshotting on internal columns = [...columns] reactivity.
|
|
8
|
+
// Intentionally non-reactive: mutated only inside snapshot_defaults() and compared manually.
|
|
9
|
+
let prev_col_keys = ``;
|
|
10
|
+
let default_visibility = {};
|
|
11
|
+
function snapshot_defaults() {
|
|
12
|
+
default_visibility = {};
|
|
13
|
+
for (const col of columns) {
|
|
14
|
+
default_visibility[col_id(col)] = col.visible !== false;
|
|
15
|
+
}
|
|
16
|
+
prev_col_keys = columns.map(col_id).join(`\0`);
|
|
17
|
+
}
|
|
18
|
+
snapshot_defaults();
|
|
19
|
+
$effect(() => {
|
|
20
|
+
const current_keys = columns.map(col_id).join(`\0`);
|
|
21
|
+
if (current_keys !== prev_col_keys) {
|
|
22
|
+
snapshot_defaults();
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
// Check if a column's visibility differs from its default
|
|
26
|
+
const is_changed = (col) => (col.visible !== false) !== (default_visibility[col_id(col)] ?? true);
|
|
27
|
+
let has_any_changes = $derived(columns.some(is_changed));
|
|
28
|
+
// Reset columns to default visibility
|
|
29
|
+
function reset_columns(items) {
|
|
30
|
+
for (const col of items) {
|
|
31
|
+
col.visible = default_visibility[col_id(col)] ?? true;
|
|
32
|
+
}
|
|
33
|
+
columns = [...columns];
|
|
34
|
+
}
|
|
35
|
+
function reset_all() {
|
|
36
|
+
reset_columns(columns);
|
|
37
|
+
on_reset?.();
|
|
38
|
+
}
|
|
39
|
+
function reset_section(section_name) {
|
|
40
|
+
const section = sections.find((sec) => sec.name === section_name);
|
|
41
|
+
if (!section)
|
|
42
|
+
return;
|
|
43
|
+
reset_columns(section.items);
|
|
44
|
+
on_reset?.(section_name);
|
|
7
45
|
}
|
|
46
|
+
// Group columns by their group property
|
|
47
|
+
let sections = $derived.by(() => {
|
|
48
|
+
const grouped = {};
|
|
49
|
+
const ungrouped = [];
|
|
50
|
+
for (const col of columns) {
|
|
51
|
+
if (col.group) {
|
|
52
|
+
grouped[col.group] ??= [];
|
|
53
|
+
grouped[col.group].push(col);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
ungrouped.push(col);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const result = Object.entries(grouped).map(([name, items]) => ({ name, items }));
|
|
60
|
+
if (ungrouped.length > 0)
|
|
61
|
+
result.push({ name: ``, items: ungrouped });
|
|
62
|
+
return result;
|
|
63
|
+
});
|
|
64
|
+
// Check if any column defines a group (to decide whether to show sections)
|
|
65
|
+
let has_sections = $derived(columns.some((col) => col.group));
|
|
66
|
+
function toggle_section(name) {
|
|
67
|
+
collapsed_sections = collapsed_sections.includes(name)
|
|
68
|
+
? collapsed_sections.filter((s) => s !== name)
|
|
69
|
+
: [...collapsed_sections, name];
|
|
70
|
+
}
|
|
71
|
+
function toggle_column_visibility(col, event) {
|
|
72
|
+
if (!(event.target instanceof HTMLInputElement))
|
|
73
|
+
return;
|
|
74
|
+
col.visible = event.target.checked;
|
|
75
|
+
columns = [...columns]; // trigger reactivity on parent binding
|
|
76
|
+
}
|
|
77
|
+
// Grid template for section items
|
|
78
|
+
let grid_template = $derived(n_columns
|
|
79
|
+
? `repeat(${n_columns}, max-content)`
|
|
80
|
+
: `repeat(auto-fill, minmax(135px, 1fr))`);
|
|
81
|
+
// Reposition dropdown: left-aligned by default, switch to right if it overflows viewport
|
|
82
|
+
let details_el;
|
|
83
|
+
$effect(() => {
|
|
84
|
+
if (!column_panel_open || !details_el)
|
|
85
|
+
return;
|
|
86
|
+
// Re-run when section state changes while open
|
|
87
|
+
void n_columns;
|
|
88
|
+
void collapsed_sections;
|
|
89
|
+
void sections;
|
|
90
|
+
const dropdown = details_el.querySelector(`.column-menu, .sections-container`);
|
|
91
|
+
if (!dropdown)
|
|
92
|
+
return;
|
|
93
|
+
// Reset to left-aligned
|
|
94
|
+
dropdown.style.left = `0`;
|
|
95
|
+
dropdown.style.right = `auto`;
|
|
96
|
+
requestAnimationFrame(() => {
|
|
97
|
+
const rect = dropdown.getBoundingClientRect();
|
|
98
|
+
if (rect.right > window.innerWidth) {
|
|
99
|
+
dropdown.style.left = `auto`;
|
|
100
|
+
dropdown.style.right = `0`;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
});
|
|
8
104
|
</script>
|
|
9
105
|
|
|
106
|
+
{#snippet toggle_item(col: Label)}
|
|
107
|
+
<label
|
|
108
|
+
class="toggle-label"
|
|
109
|
+
class:disabled={col.disabled}
|
|
110
|
+
{@attach tooltip({ content: col.description })}
|
|
111
|
+
>
|
|
112
|
+
<input
|
|
113
|
+
type="checkbox"
|
|
114
|
+
checked={col.visible !== false}
|
|
115
|
+
disabled={col.disabled}
|
|
116
|
+
onchange={(event) => toggle_column_visibility(col, event)}
|
|
117
|
+
/>
|
|
118
|
+
{@html col.label}
|
|
119
|
+
</label>
|
|
120
|
+
{/snippet}
|
|
121
|
+
|
|
10
122
|
<svelte:window
|
|
11
123
|
onkeydown={(event) => {
|
|
12
124
|
if (event.key === `Escape` && column_panel_open) {
|
|
@@ -18,65 +130,193 @@ function toggle_column_visibility(idx, event) {
|
|
|
18
130
|
|
|
19
131
|
<details
|
|
20
132
|
class="column-toggles"
|
|
133
|
+
bind:this={details_el}
|
|
21
134
|
bind:open={column_panel_open}
|
|
22
135
|
{@attach click_outside({ callback: () => (column_panel_open = false) })}
|
|
23
136
|
>
|
|
24
137
|
<summary aria-expanded={column_panel_open}>
|
|
25
138
|
Columns <Icon icon="Columns" />
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
139
|
+
{#if has_any_changes}
|
|
140
|
+
<button
|
|
141
|
+
class="reset-btn"
|
|
142
|
+
onclick={(event) => {
|
|
143
|
+
event.stopPropagation()
|
|
144
|
+
event.preventDefault()
|
|
145
|
+
reset_all()
|
|
146
|
+
}}
|
|
147
|
+
type="button"
|
|
148
|
+
aria-label="Reset all columns to defaults"
|
|
32
149
|
{@attach tooltip()}
|
|
33
150
|
>
|
|
34
|
-
<
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
151
|
+
<Icon icon="Reset" width="12px" />
|
|
152
|
+
</button>
|
|
153
|
+
{/if}
|
|
154
|
+
</summary>
|
|
155
|
+
|
|
156
|
+
{#if has_sections}
|
|
157
|
+
<div class="sections-container" role="group">
|
|
158
|
+
{#each sections as section (section.name)}
|
|
159
|
+
{@const is_collapsed = section.name !== `` &&
|
|
160
|
+
collapsed_sections.includes(section.name)}
|
|
161
|
+
<div class="section">
|
|
162
|
+
{#if section.name}
|
|
163
|
+
<div class="section-header-row">
|
|
164
|
+
<button
|
|
165
|
+
class="section-header"
|
|
166
|
+
aria-expanded={!is_collapsed}
|
|
167
|
+
onclick={() => toggle_section(section.name)}
|
|
168
|
+
type="button"
|
|
169
|
+
>
|
|
170
|
+
<span class="collapse-icon">{is_collapsed ? `▶` : `▼`}</span>
|
|
171
|
+
{section.name}
|
|
172
|
+
</button>
|
|
173
|
+
{#if section.items.some(is_changed)}
|
|
174
|
+
<button
|
|
175
|
+
class="reset-btn"
|
|
176
|
+
onclick={() => reset_section(section.name)}
|
|
177
|
+
type="button"
|
|
178
|
+
aria-label="Reset {section.name} to defaults"
|
|
179
|
+
{@attach tooltip()}
|
|
180
|
+
>
|
|
181
|
+
<Icon icon="Reset" width="12px" />
|
|
182
|
+
</button>
|
|
183
|
+
{/if}
|
|
184
|
+
</div>
|
|
185
|
+
{/if}
|
|
186
|
+
{#if !is_collapsed}
|
|
187
|
+
<div
|
|
188
|
+
class="section-items"
|
|
189
|
+
style:grid-template-columns={grid_template}
|
|
190
|
+
transition:slide={{ duration: 200 }}
|
|
191
|
+
>
|
|
192
|
+
{#each section.items as col, idx (col.key ?? col.label ?? idx)}
|
|
193
|
+
{@render toggle_item(col)}
|
|
194
|
+
{/each}
|
|
195
|
+
</div>
|
|
196
|
+
{/if}
|
|
197
|
+
</div>
|
|
198
|
+
{/each}
|
|
199
|
+
</div>
|
|
200
|
+
{:else}
|
|
201
|
+
<div class="column-menu" role="group" style:grid-template-columns={grid_template}>
|
|
202
|
+
{#each columns as col, idx (col.key ?? col.label ?? idx)}
|
|
203
|
+
{@render toggle_item(col)}
|
|
204
|
+
{/each}
|
|
205
|
+
</div>
|
|
206
|
+
{/if}
|
|
43
207
|
</details>
|
|
44
208
|
|
|
45
209
|
<style>
|
|
46
210
|
.column-toggles {
|
|
47
211
|
position: relative;
|
|
212
|
+
summary {
|
|
213
|
+
background: var(--tgl-btn-bg, var(--btn-bg));
|
|
214
|
+
padding: 0 6pt;
|
|
215
|
+
margin: 4pt 0;
|
|
216
|
+
border-radius: var(--tgl-border-radius, 4pt);
|
|
217
|
+
cursor: pointer;
|
|
218
|
+
display: flex;
|
|
219
|
+
align-items: center;
|
|
220
|
+
gap: 4px;
|
|
221
|
+
&:hover {
|
|
222
|
+
background: var(--tgl-hover-bg, var(--nav-bg));
|
|
223
|
+
}
|
|
224
|
+
&::-webkit-details-marker {
|
|
225
|
+
display: none;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/* Shared dropdown styling */
|
|
230
|
+
.column-menu,
|
|
231
|
+
.sections-container {
|
|
232
|
+
font-size: var(--tgl-font-size, 1.1em);
|
|
233
|
+
position: absolute;
|
|
234
|
+
left: 0;
|
|
235
|
+
top: calc(100% + 1pt);
|
|
236
|
+
background: var(--tgl-dropdown-bg, var(--page-bg));
|
|
237
|
+
border: 1px solid
|
|
238
|
+
var(--tgl-dropdown-border, color-mix(in srgb, currentColor 10%, transparent));
|
|
239
|
+
border-radius: var(--tgl-border-radius, 4pt);
|
|
240
|
+
box-shadow: var(
|
|
241
|
+
--tgl-dropdown-shadow,
|
|
242
|
+
0 4px 12px color-mix(in srgb, currentColor 8%, transparent)
|
|
243
|
+
);
|
|
244
|
+
min-width: 150px;
|
|
245
|
+
max-height: var(--tgl-dropdown-max-height, min(70vh, 600px));
|
|
246
|
+
overflow-y: auto;
|
|
247
|
+
z-index: 1;
|
|
248
|
+
}
|
|
249
|
+
.column-menu {
|
|
250
|
+
padding: 3pt 5pt;
|
|
251
|
+
display: grid;
|
|
48
252
|
}
|
|
49
|
-
.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
253
|
+
.sections-container {
|
|
254
|
+
padding: 6pt 8pt;
|
|
255
|
+
display: flex;
|
|
256
|
+
flex-direction: column;
|
|
257
|
+
gap: 8px;
|
|
258
|
+
}
|
|
259
|
+
.reset-btn {
|
|
260
|
+
display: flex;
|
|
261
|
+
align-items: center;
|
|
262
|
+
justify-content: center;
|
|
263
|
+
padding: 2pt;
|
|
264
|
+
border: none;
|
|
265
|
+
border-radius: var(--tgl-border-radius, 3pt);
|
|
266
|
+
background: transparent;
|
|
54
267
|
cursor: pointer;
|
|
268
|
+
color: inherit;
|
|
269
|
+
opacity: 0.5;
|
|
270
|
+
flex-shrink: 0;
|
|
271
|
+
&:hover {
|
|
272
|
+
background: color-mix(in srgb, currentColor 12%, transparent);
|
|
273
|
+
opacity: 1;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
summary .reset-btn {
|
|
277
|
+
margin-left: auto;
|
|
278
|
+
}
|
|
279
|
+
.section-header-row {
|
|
55
280
|
display: flex;
|
|
56
281
|
align-items: center;
|
|
57
282
|
gap: 4px;
|
|
283
|
+
margin-bottom: 4pt;
|
|
284
|
+
padding: 2pt 4pt;
|
|
285
|
+
border-radius: var(--tgl-border-radius, 3pt);
|
|
286
|
+
background: var(
|
|
287
|
+
--tgl-section-header-bg,
|
|
288
|
+
color-mix(in srgb, currentColor 5%, transparent)
|
|
289
|
+
);
|
|
290
|
+
&:hover {
|
|
291
|
+
background: var(
|
|
292
|
+
--tgl-section-header-hover-bg,
|
|
293
|
+
color-mix(in srgb, currentColor 12%, transparent)
|
|
294
|
+
);
|
|
295
|
+
}
|
|
58
296
|
}
|
|
59
|
-
.
|
|
60
|
-
|
|
297
|
+
.section-header {
|
|
298
|
+
display: flex;
|
|
299
|
+
align-items: center;
|
|
300
|
+
gap: 4px;
|
|
301
|
+
font-weight: 600;
|
|
302
|
+
font-size: 0.9em;
|
|
303
|
+
padding: 0;
|
|
304
|
+
border: none;
|
|
305
|
+
background: transparent;
|
|
306
|
+
cursor: pointer;
|
|
307
|
+
flex: 1;
|
|
308
|
+
text-align: left;
|
|
309
|
+
color: inherit;
|
|
61
310
|
}
|
|
62
|
-
.
|
|
63
|
-
|
|
311
|
+
.collapse-icon {
|
|
312
|
+
font-size: 0.7em;
|
|
313
|
+
width: 1em;
|
|
314
|
+
flex-shrink: 0;
|
|
64
315
|
}
|
|
65
|
-
.
|
|
66
|
-
font-size: 1.1em;
|
|
67
|
-
position: absolute;
|
|
68
|
-
right: 0;
|
|
69
|
-
top: calc(100% + 4pt);
|
|
70
|
-
background: var(--page-bg);
|
|
71
|
-
border: 1px solid var(--border);
|
|
72
|
-
border-radius: 4pt;
|
|
73
|
-
padding: 3pt 5pt;
|
|
74
|
-
min-width: 150px;
|
|
316
|
+
.section-items {
|
|
75
317
|
display: grid;
|
|
76
|
-
grid-template-columns: repeat(auto-fill, minmax(135px, 1fr));
|
|
77
|
-
z-index: 1; /* needed to ensure column toggle menu is above HeatmapTable header row */
|
|
78
318
|
}
|
|
79
|
-
.
|
|
319
|
+
.toggle-label {
|
|
80
320
|
display: inline-block;
|
|
81
321
|
margin: 1px 2px;
|
|
82
322
|
border-radius: 3px;
|
|
@@ -85,9 +325,16 @@ function toggle_column_visibility(idx, event) {
|
|
|
85
325
|
white-space: nowrap;
|
|
86
326
|
overflow: hidden;
|
|
87
327
|
text-overflow: ellipsis;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
328
|
+
&:hover:not(.disabled) {
|
|
329
|
+
background: var(--tgl-hover-bg, var(--nav-bg));
|
|
330
|
+
}
|
|
331
|
+
&.disabled {
|
|
332
|
+
opacity: 0.5;
|
|
333
|
+
cursor: not-allowed;
|
|
334
|
+
input {
|
|
335
|
+
cursor: not-allowed;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
91
338
|
}
|
|
92
339
|
details :global(:is(sub, sup)) {
|
|
93
340
|
transform: translate(-3pt, 6pt);
|
|
@@ -2,7 +2,10 @@ import type { Label } from './';
|
|
|
2
2
|
type $$ComponentProps = {
|
|
3
3
|
columns: Label[];
|
|
4
4
|
column_panel_open?: boolean;
|
|
5
|
+
n_columns?: number;
|
|
6
|
+
collapsed_sections?: string[];
|
|
7
|
+
on_reset?: (section?: string) => void;
|
|
5
8
|
};
|
|
6
|
-
declare const ToggleMenu: import("svelte").Component<$$ComponentProps, {}, "columns" | "column_panel_open">;
|
|
9
|
+
declare const ToggleMenu: import("svelte").Component<$$ComponentProps, {}, "columns" | "column_panel_open" | "collapsed_sections">;
|
|
7
10
|
type ToggleMenu = ReturnType<typeof ToggleMenu>;
|
|
8
11
|
export default ToggleMenu;
|
package/dist/table/index.d.ts
CHANGED
|
@@ -22,6 +22,8 @@ export type Label = {
|
|
|
22
22
|
sticky?: boolean;
|
|
23
23
|
visible?: boolean;
|
|
24
24
|
sortable?: boolean;
|
|
25
|
+
show_sort_indicator?: boolean;
|
|
26
|
+
disabled?: boolean;
|
|
25
27
|
style?: string;
|
|
26
28
|
cell_style?: string;
|
|
27
29
|
};
|
|
@@ -50,6 +52,7 @@ export type InitialSort = string | {
|
|
|
50
52
|
};
|
|
51
53
|
export type Pagination = boolean | {
|
|
52
54
|
page_size?: number;
|
|
55
|
+
page_sizes?: number[];
|
|
53
56
|
};
|
|
54
57
|
export type Search = boolean | {
|
|
55
58
|
placeholder?: string;
|
package/dist/tooltip/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { default as TooltipContent } from './TooltipContent.svelte';
|
|
2
|
-
export
|
|
2
|
+
export * from './types';
|
package/dist/tooltip/index.js
CHANGED