matterviz 0.1.12 → 0.1.13

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 (195) hide show
  1. package/dist/ContextMenu.svelte +1 -1
  2. package/dist/ContextMenu.svelte.d.ts +3 -3
  3. package/dist/DraggablePane.svelte +10 -5
  4. package/dist/DraggablePane.svelte.d.ts +3 -3
  5. package/dist/FilePicker.svelte.d.ts +3 -3
  6. package/dist/Icon.svelte.d.ts +3 -3
  7. package/dist/Nav.svelte +76 -31
  8. package/dist/SettingsSection.svelte.d.ts +3 -3
  9. package/dist/Spinner.svelte +18 -29
  10. package/dist/Spinner.svelte.d.ts +3 -3
  11. package/dist/app.css +4 -0
  12. package/dist/bands/Bands.svelte +216 -0
  13. package/dist/bands/Bands.svelte.d.ts +16 -0
  14. package/dist/bands/BandsAndDos.svelte +26 -0
  15. package/dist/bands/BandsAndDos.svelte.d.ts +16 -0
  16. package/dist/bands/Dos.svelte +124 -0
  17. package/dist/bands/Dos.svelte.d.ts +18 -0
  18. package/dist/bands/helpers.d.ts +11 -0
  19. package/dist/bands/helpers.js +195 -0
  20. package/dist/bands/index.d.ts +5 -0
  21. package/dist/bands/index.js +6 -0
  22. package/dist/bands/types.d.ts +54 -0
  23. package/dist/bands/types.js +2 -0
  24. package/dist/brillouin/BrillouinZone.svelte +373 -0
  25. package/dist/brillouin/BrillouinZone.svelte.d.ts +57 -0
  26. package/dist/brillouin/BrillouinZoneControls.svelte +88 -0
  27. package/dist/brillouin/BrillouinZoneControls.svelte.d.ts +14 -0
  28. package/dist/brillouin/BrillouinZoneExportPane.svelte +129 -0
  29. package/dist/brillouin/BrillouinZoneExportPane.svelte.d.ts +15 -0
  30. package/dist/brillouin/BrillouinZoneInfoPane.svelte +115 -0
  31. package/dist/brillouin/BrillouinZoneInfoPane.svelte.d.ts +13 -0
  32. package/dist/brillouin/BrillouinZoneScene.svelte +180 -0
  33. package/dist/brillouin/BrillouinZoneScene.svelte.d.ts +34 -0
  34. package/dist/brillouin/compute.d.ts +7 -0
  35. package/dist/brillouin/compute.js +215 -0
  36. package/dist/brillouin/index.d.ts +7 -0
  37. package/dist/brillouin/index.js +7 -0
  38. package/dist/brillouin/types.d.ts +23 -0
  39. package/dist/brillouin/types.js +1 -0
  40. package/dist/composition/BarChart.svelte.d.ts +3 -3
  41. package/dist/composition/BubbleChart.svelte +7 -6
  42. package/dist/composition/BubbleChart.svelte.d.ts +3 -3
  43. package/dist/composition/Composition.svelte.d.ts +3 -3
  44. package/dist/composition/PieChart.svelte +1 -1
  45. package/dist/composition/PieChart.svelte.d.ts +3 -3
  46. package/dist/composition/parse.d.ts +3 -3
  47. package/dist/coordination/CoordinationBarPlot.svelte +241 -0
  48. package/dist/coordination/CoordinationBarPlot.svelte.d.ts +29 -0
  49. package/dist/coordination/calc-coordination.d.ts +15 -0
  50. package/dist/coordination/calc-coordination.js +66 -0
  51. package/dist/coordination/index.d.ts +8 -0
  52. package/dist/coordination/index.js +7 -0
  53. package/dist/element/BohrAtom.svelte.d.ts +3 -3
  54. package/dist/element/ElementHeading.svelte.d.ts +3 -3
  55. package/dist/element/ElementPhoto.svelte.d.ts +3 -3
  56. package/dist/element/ElementStats.svelte.d.ts +3 -3
  57. package/dist/element/ElementTile.svelte +1 -1
  58. package/dist/element/ElementTile.svelte.d.ts +4 -4
  59. package/dist/element/Nucleus.svelte.d.ts +3 -3
  60. package/dist/icons.d.ts +4 -0
  61. package/dist/icons.js +4 -0
  62. package/dist/index.d.ts +5 -1
  63. package/dist/index.js +5 -1
  64. package/dist/io/export.d.ts +1 -6
  65. package/dist/io/export.js +12 -12
  66. package/dist/labels.d.ts +19 -0
  67. package/dist/labels.js +59 -0
  68. package/dist/math.d.ts +7 -2
  69. package/dist/math.js +24 -12
  70. package/dist/periodic-table/PeriodicTable.svelte.d.ts +3 -3
  71. package/dist/periodic-table/PeriodicTableControls.svelte.d.ts +3 -3
  72. package/dist/periodic-table/PropertySelect.svelte +1 -1
  73. package/dist/periodic-table/PropertySelect.svelte.d.ts +5 -4
  74. package/dist/periodic-table/TableInset.svelte.d.ts +3 -3
  75. package/dist/phase-diagram/PhaseDiagram2D.svelte +44 -107
  76. package/dist/phase-diagram/PhaseDiagram2D.svelte.d.ts +7 -27
  77. package/dist/phase-diagram/PhaseDiagram3D.svelte +67 -170
  78. package/dist/phase-diagram/PhaseDiagram3D.svelte.d.ts +7 -31
  79. package/dist/phase-diagram/PhaseDiagram4D.svelte +87 -145
  80. package/dist/phase-diagram/PhaseDiagram4D.svelte.d.ts +5 -28
  81. package/dist/phase-diagram/PhaseDiagramControls.svelte +9 -9
  82. package/dist/phase-diagram/PhaseDiagramControls.svelte.d.ts +6 -6
  83. package/dist/phase-diagram/PhaseDiagramInfoPane.svelte +4 -4
  84. package/dist/phase-diagram/PhaseDiagramInfoPane.svelte.d.ts +5 -5
  85. package/dist/phase-diagram/PhaseDiagramStats.svelte +9 -16
  86. package/dist/phase-diagram/PhaseDiagramStats.svelte.d.ts +3 -3
  87. package/dist/phase-diagram/StructurePopup.svelte.d.ts +3 -3
  88. package/dist/phase-diagram/barycentric-coords.js +13 -24
  89. package/dist/phase-diagram/helpers.d.ts +12 -14
  90. package/dist/phase-diagram/helpers.js +70 -23
  91. package/dist/phase-diagram/index.d.ts +58 -0
  92. package/dist/phase-diagram/index.js +44 -0
  93. package/dist/phase-diagram/thermodynamics.js +2 -3
  94. package/dist/phase-diagram/types.d.ts +3 -8
  95. package/dist/plot/BarPlot.svelte +474 -240
  96. package/dist/plot/BarPlot.svelte.d.ts +16 -37
  97. package/dist/plot/BarPlotControls.svelte +33 -201
  98. package/dist/plot/BarPlotControls.svelte.d.ts +11 -22
  99. package/dist/plot/ColorBar.svelte.d.ts +3 -3
  100. package/dist/plot/ColorScaleSelect.svelte +1 -1
  101. package/dist/plot/ColorScaleSelect.svelte.d.ts +3 -3
  102. package/dist/plot/ElementScatter.svelte +5 -5
  103. package/dist/plot/ElementScatter.svelte.d.ts +8 -8
  104. package/dist/plot/Histogram.svelte +318 -170
  105. package/dist/plot/Histogram.svelte.d.ts +21 -41
  106. package/dist/plot/HistogramControls.svelte +115 -347
  107. package/dist/plot/HistogramControls.svelte.d.ts +13 -28
  108. package/dist/plot/Line.svelte +1 -1
  109. package/dist/plot/Line.svelte.d.ts +4 -4
  110. package/dist/plot/PlotControls.svelte +280 -0
  111. package/dist/plot/PlotControls.svelte.d.ts +4 -0
  112. package/dist/plot/PlotLegend.svelte +9 -24
  113. package/dist/plot/PlotLegend.svelte.d.ts +3 -3
  114. package/dist/plot/ScatterPlot.svelte +536 -571
  115. package/dist/plot/ScatterPlot.svelte.d.ts +18 -90
  116. package/dist/plot/ScatterPlotControls.svelte +108 -316
  117. package/dist/plot/ScatterPlotControls.svelte.d.ts +11 -38
  118. package/dist/plot/ScatterPoint.svelte +1 -1
  119. package/dist/plot/ScatterPoint.svelte.d.ts +5 -5
  120. package/dist/plot/SpacegroupBarPlot.svelte +235 -0
  121. package/dist/plot/SpacegroupBarPlot.svelte.d.ts +9 -0
  122. package/dist/plot/data-transform.d.ts +2 -2
  123. package/dist/plot/data-transform.js +1 -5
  124. package/dist/plot/index.d.ts +12 -200
  125. package/dist/plot/index.js +14 -6
  126. package/dist/plot/layout.d.ts +10 -16
  127. package/dist/plot/layout.js +40 -25
  128. package/dist/plot/scales.d.ts +7 -8
  129. package/dist/plot/scales.js +22 -7
  130. package/dist/plot/types.d.ts +303 -0
  131. package/dist/plot/types.js +1 -0
  132. package/dist/rdf/RdfPlot.svelte +156 -0
  133. package/dist/rdf/RdfPlot.svelte.d.ts +20 -0
  134. package/dist/rdf/calc-rdf.d.ts +4 -0
  135. package/dist/rdf/calc-rdf.js +107 -0
  136. package/dist/rdf/index.d.ts +22 -0
  137. package/dist/rdf/index.js +2 -0
  138. package/dist/settings.d.ts +86 -75
  139. package/dist/settings.js +257 -155
  140. package/dist/structure/Bond.svelte +126 -110
  141. package/dist/structure/Bond.svelte.d.ts +7 -20
  142. package/dist/structure/CanvasTooltip.svelte.d.ts +4 -4
  143. package/dist/structure/Cylinder.svelte +29 -0
  144. package/dist/structure/Cylinder.svelte.d.ts +10 -0
  145. package/dist/structure/Lattice.svelte +1 -2
  146. package/dist/structure/Lattice.svelte.d.ts +3 -3
  147. package/dist/structure/Structure.svelte +23 -8
  148. package/dist/structure/Structure.svelte.d.ts +10 -7
  149. package/dist/structure/StructureControls.svelte +25 -134
  150. package/dist/structure/StructureControls.svelte.d.ts +4 -9
  151. package/dist/structure/StructureExportPane.svelte +188 -0
  152. package/dist/structure/StructureExportPane.svelte.d.ts +17 -0
  153. package/dist/structure/StructureInfoPane.svelte.d.ts +3 -3
  154. package/dist/structure/StructureLegend.svelte +91 -27
  155. package/dist/structure/StructureLegend.svelte.d.ts +5 -4
  156. package/dist/structure/StructureScene.svelte +93 -100
  157. package/dist/structure/StructureScene.svelte.d.ts +15 -12
  158. package/dist/structure/Vector.svelte +19 -25
  159. package/dist/structure/Vector.svelte.d.ts +3 -3
  160. package/dist/structure/bonding.d.ts +16 -14
  161. package/dist/structure/bonding.js +207 -216
  162. package/dist/structure/export.d.ts +3 -0
  163. package/dist/structure/export.js +120 -0
  164. package/dist/structure/index.d.ts +15 -1
  165. package/dist/structure/index.js +2 -0
  166. package/dist/symmetry/WyckoffTable.svelte.d.ts +3 -3
  167. package/dist/symmetry/index.d.ts +1 -0
  168. package/dist/symmetry/index.js +1 -0
  169. package/dist/symmetry/spacegroups.d.ts +9 -0
  170. package/dist/symmetry/spacegroups.js +397 -0
  171. package/dist/theme/ThemeControl.svelte.d.ts +3 -3
  172. package/dist/theme/themes.js +2 -16
  173. package/dist/trajectory/Trajectory.svelte +52 -78
  174. package/dist/trajectory/Trajectory.svelte.d.ts +5 -5
  175. package/dist/trajectory/TrajectoryError.svelte.d.ts +3 -3
  176. package/dist/trajectory/TrajectoryExportPane.svelte +1 -1
  177. package/dist/trajectory/TrajectoryExportPane.svelte.d.ts +5 -5
  178. package/dist/trajectory/TrajectoryInfoPane.svelte +1 -1
  179. package/dist/trajectory/TrajectoryInfoPane.svelte.d.ts +3 -3
  180. package/dist/trajectory/extract.js +2 -1
  181. package/dist/trajectory/index.d.ts +1 -1
  182. package/dist/trajectory/index.js +1 -1
  183. package/dist/trajectory/parse.js +21 -14
  184. package/dist/utils.d.ts +1 -0
  185. package/dist/utils.js +17 -0
  186. package/dist/xrd/XrdPlot.svelte +14 -11
  187. package/dist/xrd/XrdPlot.svelte.d.ts +6 -5
  188. package/package.json +20 -12
  189. package/readme.md +1 -1
  190. package/dist/material/MaterialCard.svelte +0 -123
  191. package/dist/material/MaterialCard.svelte.d.ts +0 -9
  192. package/dist/material/index.d.ts +0 -1
  193. package/dist/material/index.js +0 -1
  194. package/dist/plot/formatting.d.ts +0 -7
  195. package/dist/plot/formatting.js +0 -53
@@ -0,0 +1,280 @@
1
+ <script lang="ts">import { DraggablePane, SettingsSection } from '..';
2
+ import { DEFAULTS } from '../settings';
3
+ import { format } from 'd3-format';
4
+ import { timeFormat } from 'd3-time-format';
5
+ let { show_controls = $bindable(false), controls_open = $bindable(false), children, post_children, x_axis = $bindable({}), y_axis = $bindable({}), y2_axis = $bindable({}), display = $bindable({}), auto_x_range = [0, 1], auto_y_range = [0, 1], auto_y2_range = undefined, has_y2_points = false, show_ticks = false, controls_title = `plot`, controls_class = ``, toggle_props = {}, pane_props = {}, } = $props();
6
+ // Local format state
7
+ let x_format_input = $state(x_axis.format ?? DEFAULTS.plot.x_format);
8
+ let y_format_input = $state(y_axis.format ?? DEFAULTS.plot.y_format);
9
+ let y2_format_input = $state(y2_axis.format ?? DEFAULTS.plot.y2_format);
10
+ // Range input state
11
+ let range_inputs = $state({ x: [null, null], y: [null, null], y2: [null, null] });
12
+ let range_els = $state({});
13
+ // Derived state
14
+ let x_includes_zero = $derived(((x_axis.range?.[0] ?? auto_x_range[0]) <= 0) &&
15
+ ((x_axis.range?.[1] ?? auto_x_range[1]) >= 0));
16
+ let y_includes_zero = $derived(((y_axis.range?.[0] ?? auto_y_range[0]) <= 0) &&
17
+ ((y_axis.range?.[1] ?? auto_y_range[1]) >= 0));
18
+ // Validation function for format specifiers
19
+ function is_valid_format(format_string) {
20
+ if (!format_string)
21
+ return true;
22
+ try {
23
+ if (format_string.startsWith(`%`)) {
24
+ timeFormat(format_string)(new Date());
25
+ return true;
26
+ }
27
+ else {
28
+ format(format_string)(123.456);
29
+ return true;
30
+ }
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ // Handle format input changes
37
+ const format_input_handler = (format_type) => (event) => {
38
+ const input = event.target;
39
+ const inputs = {
40
+ x: () => (x_format_input = input.value),
41
+ y: () => (y_format_input = input.value),
42
+ y2: () => (y2_format_input = input.value),
43
+ };
44
+ const axes = { x: x_axis, y: y_axis, y2: y2_axis };
45
+ inputs[format_type]();
46
+ if (is_valid_format(input.value)) {
47
+ input.classList.remove(`invalid`);
48
+ axes[format_type].format = input.value;
49
+ }
50
+ else
51
+ input.classList.add(`invalid`);
52
+ };
53
+ // Handle range input changes
54
+ const update_range = (axis, bound, value) => {
55
+ const parsed = value === `` ? null : Number(value);
56
+ range_inputs[axis][bound] = Number.isFinite(parsed) ? parsed : null;
57
+ const [min, max] = range_inputs[axis];
58
+ const auto = { x: auto_x_range, y: auto_y_range, y2: auto_y2_range }[axis];
59
+ const invalid = min !== null && max !== null && min >= max;
60
+ range_els[`${axis}-min`]?.classList.toggle(`invalid`, invalid);
61
+ range_els[`${axis}-max`]?.classList.toggle(`invalid`, invalid);
62
+ if (invalid)
63
+ return;
64
+ const axis_config = { x: x_axis, y: y_axis, y2: y2_axis }[axis];
65
+ // If auto range is undefined, only set if both min and max are provided
66
+ if (!auto && (min === null || max === null))
67
+ return;
68
+ axis_config.range = min === null && max === null
69
+ ? undefined
70
+ : [min ?? auto?.[0] ?? 0, max ?? auto?.[1] ?? 1];
71
+ };
72
+ // Sync format inputs
73
+ $effect(() => {
74
+ x_format_input = x_axis.format ?? DEFAULTS.plot.x_format;
75
+ y_format_input = y_axis.format ?? DEFAULTS.plot.y_format;
76
+ y2_format_input = y2_axis.format ?? DEFAULTS.plot.y2_format;
77
+ });
78
+ // Sync range inputs from props
79
+ $effect(() => {
80
+ range_inputs.x = [x_axis.range?.[0] ?? null, x_axis.range?.[1] ?? null];
81
+ range_inputs.y = [y_axis.range?.[0] ?? null, y_axis.range?.[1] ?? null];
82
+ range_inputs.y2 = [y2_axis.range?.[0] ?? null, y2_axis.range?.[1] ?? null];
83
+ });
84
+ </script>
85
+
86
+ {#if show_controls}
87
+ {@const toggle_style =
88
+ `position: absolute; top: var(--ctrl-btn-top, 1ex); right: var(--ctrl-btn-right, 1ex); background-color: transparent;`}
89
+ <DraggablePane
90
+ bind:show={controls_open}
91
+ closed_icon="Settings"
92
+ open_icon="Cross"
93
+ toggle_props={{
94
+ title: `${controls_open ? `Close` : `Open`} ${controls_title} controls`,
95
+ ...toggle_props,
96
+ class: `${controls_class}-controls-toggle ${toggle_props?.class ?? ``}`,
97
+ style: `${toggle_style} ${toggle_props?.style ?? ``}`,
98
+ }}
99
+ pane_props={{
100
+ ...pane_props,
101
+ class: `${controls_class}-controls-pane ${pane_props?.class ?? ``}`,
102
+ style: `--pane-padding: 12px; --pane-gap: 4px; ${pane_props?.style ?? ``}`,
103
+ }}
104
+ >
105
+ <!-- Custom controls before base controls -->
106
+ {@render children?.()}
107
+
108
+ <!-- Base Display controls -->
109
+ <SettingsSection
110
+ title="Display"
111
+ current_values={{
112
+ x_zero_line: display.x_zero_line,
113
+ y_zero_line: display.y_zero_line,
114
+ x_grid: display.x_grid,
115
+ y_grid: display.y_grid,
116
+ y2_grid: display.y2_grid,
117
+ }}
118
+ on_reset={() => {
119
+ display.x_zero_line = false
120
+ display.y_zero_line = false
121
+ display.x_grid = DEFAULTS.plot.show_x_grid
122
+ display.y_grid = DEFAULTS.plot.show_y_grid
123
+ display.y2_grid = DEFAULTS.plot.show_y2_grid
124
+ }}
125
+ style="display: flex; flex-wrap: wrap; gap: 1ex"
126
+ >
127
+ {#if x_includes_zero}<label><input
128
+ type="checkbox"
129
+ bind:checked={display.x_zero_line}
130
+ /> X zero line</label>{/if}
131
+ {#if y_includes_zero}<label><input
132
+ type="checkbox"
133
+ bind:checked={display.y_zero_line}
134
+ /> Y zero line</label>{/if}
135
+ <label><input type="checkbox" bind:checked={display.x_grid} /> X-axis grid</label>
136
+ <label><input type="checkbox" bind:checked={display.y_grid} /> Y-axis grid</label>
137
+ {#if has_y2_points}<label><input
138
+ type="checkbox"
139
+ bind:checked={display.y2_grid}
140
+ /> Y2-axis grid</label>{/if}
141
+ </SettingsSection>
142
+
143
+ <!-- Base Axis Range controls -->
144
+ <SettingsSection
145
+ title="Axis Range"
146
+ current_values={{ x_range: x_axis.range, y_range: y_axis.range, y2_range: y2_axis.range }}
147
+ on_reset={() => {
148
+ x_axis.range = undefined
149
+ y_axis.range = undefined
150
+ y2_axis.range = undefined
151
+ Object.values(range_els).forEach((el) => el.classList.remove(`invalid`))
152
+ }}
153
+ class="pane-grid"
154
+ >
155
+ {#each [
156
+ [`x`, `X-axis`],
157
+ [`y`, `Y-axis`],
158
+ ...(has_y2_points ? [[`y2`, `Y2-axis`]] : []),
159
+ ] as
160
+ [axis_key, label]
161
+ (axis_key)
162
+ }
163
+ {@const axis = axis_key as `x` | `y` | `y2`}
164
+ <label>{label}:
165
+ <input
166
+ type="number"
167
+ value={range_inputs[axis][0] ?? ``}
168
+ bind:this={range_els[`${axis}-min`]}
169
+ placeholder="auto"
170
+ class="range-input"
171
+ oninput={(e) => update_range(axis, 0, e.currentTarget.value)}
172
+ onkeydown={(e) => e.key === `Enter` && e.currentTarget.blur()}
173
+ />
174
+ &nbsp;to
175
+ <input
176
+ type="number"
177
+ value={range_inputs[axis][1] ?? ``}
178
+ bind:this={range_els[`${axis}-max`]}
179
+ placeholder="auto"
180
+ class="range-input"
181
+ oninput={(e) => update_range(axis, 1, e.currentTarget.value)}
182
+ onkeydown={(e) => e.key === `Enter` && e.currentTarget.blur()}
183
+ />
184
+ </label>
185
+ {/each}
186
+ </SettingsSection>
187
+
188
+ <!-- Optional Ticks controls -->
189
+ {#if show_ticks}
190
+ {@const [min_ticks, max_ticks] = [2, 20]}
191
+ <SettingsSection
192
+ title="Ticks"
193
+ current_values={{ x_ticks: x_axis.ticks, y_ticks: y_axis.ticks }}
194
+ on_reset={() => {
195
+ x_axis.ticks = DEFAULTS.plot.x_ticks
196
+ y_axis.ticks = DEFAULTS.plot.y_ticks
197
+ }}
198
+ style="display: flex; flex-wrap: wrap; gap: 1ex"
199
+ >
200
+ <label>X-axis:
201
+ <input
202
+ type="number"
203
+ min={min_ticks}
204
+ max={max_ticks}
205
+ step="1"
206
+ value={typeof x_axis.ticks === `number` ? x_axis.ticks : 8}
207
+ oninput={(e) => {
208
+ const v = parseInt(e.currentTarget.value, 10)
209
+ if (isNaN(v)) return
210
+ x_axis.ticks = Math.max(min_ticks, Math.min(max_ticks, v))
211
+ }}
212
+ />
213
+ </label>
214
+ <label>Y-axis:
215
+ <input
216
+ type="number"
217
+ min={min_ticks}
218
+ max={max_ticks}
219
+ step="1"
220
+ value={typeof y_axis.ticks === `number` ? y_axis.ticks : 6}
221
+ oninput={(e) => {
222
+ const v = parseInt(e.currentTarget.value, 10)
223
+ if (isNaN(v)) return
224
+ y_axis.ticks = Math.max(min_ticks, Math.min(max_ticks, v))
225
+ }}
226
+ />
227
+ </label>
228
+ </SettingsSection>
229
+ {/if}
230
+
231
+ <!-- Base Tick Format controls -->
232
+ <SettingsSection
233
+ title="Tick Format"
234
+ current_values={{
235
+ x_format: x_axis.format,
236
+ y_format: y_axis.format,
237
+ y2_format: y2_axis.format,
238
+ }}
239
+ on_reset={() => {
240
+ x_axis.format = DEFAULTS.plot.x_format
241
+ y_axis.format = DEFAULTS.plot.y_format
242
+ y2_axis.format = DEFAULTS.plot.y2_format
243
+ }}
244
+ class="pane-grid"
245
+ style="grid-template-columns: 1fr 1fr"
246
+ >
247
+ <label style="white-space: nowrap">X-axis:
248
+ <input
249
+ type="text"
250
+ bind:value={x_format_input}
251
+ placeholder=".2~s / .0% / %Y-%m-%d"
252
+ oninput={format_input_handler(`x`)}
253
+ />
254
+ </label>
255
+ <label style="white-space: nowrap">Y-axis:
256
+ <input
257
+ type="text"
258
+ bind:value={y_format_input}
259
+ placeholder="d / .1e / .0%"
260
+ oninput={format_input_handler(`y`)}
261
+ style="width: 100%"
262
+ />
263
+ </label>
264
+ {#if has_y2_points}
265
+ <label style="white-space: nowrap">Y2-axis:
266
+ <input
267
+ type="text"
268
+ bind:value={y2_format_input}
269
+ placeholder=".2f / .1e / .0%"
270
+ oninput={format_input_handler(`y2`)}
271
+ style="width: 100%"
272
+ />
273
+ </label>
274
+ {/if}
275
+ </SettingsSection>
276
+
277
+ <!-- Custom controls after base controls -->
278
+ {@render post_children?.()}
279
+ </DraggablePane>
280
+ {/if}
@@ -0,0 +1,4 @@
1
+ import type { PlotControlsProps } from './index';
2
+ declare const PlotControls: import("svelte").Component<PlotControlsProps, {}, "display" | "show_controls" | "y_axis" | "y2_axis" | "x_axis" | "controls_open">;
3
+ type PlotControls = ReturnType<typeof PlotControls>;
4
+ export default PlotControls;
@@ -104,32 +104,17 @@ let div_style = $derived({
104
104
  {#if series.display_style.symbol_type}
105
105
  <svg width="10" height="10" viewBox="0 0 10 10">
106
106
  {#if series.display_style.symbol_type === `Circle`}
107
- <circle
108
- cx="5"
109
- cy="5"
110
- r="4"
111
- fill={series.display_style.symbol_color ?? `currentColor`}
112
- />
107
+ {@const fill = series.display_style.symbol_color ?? `currentColor`}
108
+ <circle cx="5" cy="5" r="4" {fill} />
113
109
  {:else if series.display_style.symbol_type === `Square`}
114
- <rect
115
- x="1"
116
- y="1"
117
- width="8"
118
- height="8"
119
- fill={series.display_style.symbol_color ?? `currentColor`}
120
- />
110
+ {@const fill = series.display_style.symbol_color ?? `currentColor`}
111
+ <rect x="1" y="1" width="8" height="8" {fill} />
121
112
  {:else if series.display_style.symbol_type === `Triangle`}
122
- <polygon
123
- points="5,1 9,9 1,9"
124
- fill={series.display_style.symbol_color ?? `currentColor`}
125
- />
113
+ {@const fill = series.display_style.symbol_color ?? `currentColor`}
114
+ <polygon points="5,1 9,9 1,9" {fill} />
126
115
  {:else if series.display_style.symbol_type === `Cross`}
127
- <path
128
- d="M2 2 L8 8 M2 8 L8 2"
129
- stroke={series.display_style.symbol_color ?? `currentColor`}
130
- stroke-width="2"
131
- fill="none"
132
- />
116
+ {@const stroke = series.display_style.symbol_color ?? `currentColor`}
117
+ <path d="M2 2 L8 8 M2 8 L8 2" {stroke} stroke-width="2" fill="none" />
133
118
  {:else if series.display_style.symbol_type === `Star`}
134
119
  <polygon
135
120
  points="5,0 6.1,3.5 9.8,4.1 7.4,6.7 7.9,10 5,8.3 2.1,10 2.6,6.7 0.2,4.1 3.9,3.5"
@@ -172,7 +157,7 @@ let div_style = $derived({
172
157
  align-items: center;
173
158
  cursor: pointer;
174
159
  white-space: nowrap;
175
- padding: var(--plot-legend-item-padding, 1px 3px);
160
+ padding: var(--plot-legend-item-padding, 1px 8px 1px 3px);
176
161
  opacity: var(--plot-legend-item-opacity, 1);
177
162
  transition: var(--plot-legend-item-transition, opacity 0.3s ease);
178
163
  color: var(--plot-legend-item-color);
@@ -1,6 +1,6 @@
1
1
  import type { LegendItem, Orientation } from './';
2
2
  import type { HTMLAttributes } from 'svelte/elements';
3
- interface Props extends HTMLAttributes<HTMLDivElement> {
3
+ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
4
4
  series_data: LegendItem[];
5
5
  layout?: Orientation;
6
6
  layout_tracks?: number;
@@ -12,7 +12,7 @@ interface Props extends HTMLAttributes<HTMLDivElement> {
12
12
  on_drag?: (event: MouseEvent) => void;
13
13
  on_drag_end?: (event: MouseEvent) => void;
14
14
  draggable?: boolean;
15
- }
16
- declare const PlotLegend: import("svelte").Component<Props, {}, "">;
15
+ };
16
+ declare const PlotLegend: import("svelte").Component<$$ComponentProps, {}, "">;
17
17
  type PlotLegend = ReturnType<typeof PlotLegend>;
18
18
  export default PlotLegend;