@fundar/data-chart-telling 0.0.24 → 0.0.26

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 (170) hide show
  1. package/dist/charts/bar/Chart.svelte +2 -0
  2. package/dist/charts/heatmap/Chart.svelte +3 -1
  3. package/dist/charts/heatmap/Chart.svelte.d.ts +1 -2
  4. package/dist/charts/line/Chart.svelte +2 -0
  5. package/dist/charts/pyramid/Chart.svelte +3 -1
  6. package/dist/charts/pyramid/Chart.svelte.d.ts +1 -2
  7. package/dist/charts/scatter/Chart.svelte +95 -0
  8. package/dist/charts/scatter/Chart.svelte.d.ts +28 -0
  9. package/dist/configuration/config.svelte.js +13 -1
  10. package/dist/configuration/themes/index.d.ts +76 -0
  11. package/dist/index.d.ts +20 -14
  12. package/dist/index.js +9 -3
  13. package/dist/layout/coordinates/CoordinatesLayout.svelte +95 -0
  14. package/dist/layout/{plot/RuleLayout.svelte.d.ts → coordinates/CoordinatesLayout.svelte.d.ts} +13 -16
  15. package/dist/layout/coordinates/margins.d.ts +16 -0
  16. package/dist/layout/coordinates/margins.js +11 -0
  17. package/dist/{plots/geo → layout/coordinates}/projections/argentina.d.ts +1 -1
  18. package/dist/layout/{geo → coordinates}/resolveProjection.d.ts +1 -1
  19. package/dist/layout/coordinates/resolveProjection.js +24 -0
  20. package/dist/{plots/geo → layout/coordinates}/zoom.svelte.d.ts +1 -1
  21. package/dist/layout/geometry/GeometryLayout.svelte +231 -0
  22. package/dist/layout/geometry/GeometryLayout.svelte.d.ts +62 -0
  23. package/dist/layout/plot/BasePlotLayout.svelte +142 -155
  24. package/dist/layout/plot/BasePlotLayout.svelte.d.ts +61 -51
  25. package/dist/layout/plot/margins.d.ts +0 -16
  26. package/dist/layout/plot/margins.js +0 -11
  27. package/dist/layout/{plot/AxisLayout.svelte → scales/ScalesLayout.svelte} +23 -16
  28. package/dist/layout/{plot/AxisLayout.svelte.d.ts → scales/ScalesLayout.svelte.d.ts} +4 -5
  29. package/dist/layout/scales/buildScale.d.ts +8 -0
  30. package/dist/layout/scales/buildScale.js +43 -0
  31. package/dist/layout/styles/StylesLayout.svelte +75 -0
  32. package/dist/layout/styles/StylesLayout.svelte.d.ts +15 -0
  33. package/dist/{plots/geo → layout/styles}/TileLayer.svelte +2 -2
  34. package/dist/{plots/geo → layout/styles}/TileLayer.svelte.d.ts +1 -1
  35. package/dist/layout/tooltip/Tooltip.svelte +16 -20
  36. package/dist/layout/tooltip/Tooltip.svelte.d.ts +5 -0
  37. package/dist/layout/tooltip/TooltipLayout.svelte +7 -1
  38. package/dist/layout/tooltip/TooltipLayout.svelte.d.ts +4 -0
  39. package/dist/layout/tooltip/controller.svelte.d.ts +4 -5
  40. package/dist/layout/tooltip/controller.svelte.js +28 -16
  41. package/dist/layout/tooltip/resolveTooltipPlacement.d.ts +24 -0
  42. package/dist/layout/tooltip/resolveTooltipPlacement.js +49 -0
  43. package/dist/layout/tooltip/utils.d.ts +27 -19
  44. package/dist/layout/tooltip/utils.js +16 -15
  45. package/dist/markers/BarMarker.svelte +92 -0
  46. package/dist/markers/BarMarker.svelte.d.ts +7 -0
  47. package/dist/markers/CellMarker.svelte +21 -0
  48. package/dist/markers/CellMarker.svelte.d.ts +7 -0
  49. package/dist/markers/ContourMarker.svelte +28 -0
  50. package/dist/markers/ContourMarker.svelte.d.ts +7 -0
  51. package/dist/markers/DeltaMarker.svelte +32 -39
  52. package/dist/markers/DeltaMarker.svelte.d.ts +4 -5
  53. package/dist/markers/DotMarker.svelte +35 -6
  54. package/dist/markers/DotMarker.svelte.d.ts +11 -2
  55. package/dist/markers/GeoFeaturesMarker.svelte +19 -0
  56. package/dist/markers/GeoFeaturesMarker.svelte.d.ts +7 -0
  57. package/dist/markers/GeoHoverMarker.svelte +25 -0
  58. package/dist/markers/GeoHoverMarker.svelte.d.ts +9 -0
  59. package/dist/markers/GraticuleMarker.svelte +18 -0
  60. package/dist/markers/GraticuleMarker.svelte.d.ts +7 -0
  61. package/dist/markers/HoverMarker.svelte +32 -33
  62. package/dist/markers/HoverMarker.svelte.d.ts +15 -9
  63. package/dist/markers/LineMarker.svelte +19 -0
  64. package/dist/markers/LineMarker.svelte.d.ts +7 -0
  65. package/dist/markers/LinkMarker.svelte +42 -0
  66. package/dist/markers/LinkMarker.svelte.d.ts +7 -0
  67. package/dist/markers/RuleMarker.svelte +24 -0
  68. package/dist/markers/RuleMarker.svelte.d.ts +10 -0
  69. package/dist/markers/SphereMarker.svelte +15 -0
  70. package/dist/markers/SphereMarker.svelte.d.ts +7 -0
  71. package/dist/markers/TextMarker.svelte +1 -1
  72. package/dist/markers/TextMarker.svelte.d.ts +1 -1
  73. package/dist/markers/VectorMarker.svelte +20 -0
  74. package/dist/markers/VectorMarker.svelte.d.ts +7 -0
  75. package/dist/markers/inset/InsetMarker.svelte +38 -45
  76. package/dist/markers/inset/InsetMarker.svelte.d.ts +6 -2
  77. package/dist/plots/bar/Plot.svelte +54 -84
  78. package/dist/plots/bar/Plot.svelte.d.ts +4 -5
  79. package/dist/plots/bar/ValueLabels.svelte +1 -1
  80. package/dist/plots/bar/ValueLabels.svelte.d.ts +1 -1
  81. package/dist/plots/bar/buildBarMarkers.d.ts +30 -0
  82. package/dist/plots/bar/buildBarMarkers.js +100 -0
  83. package/dist/plots/bar/layout.svelte.d.ts +1 -2
  84. package/dist/plots/bar/layout.svelte.js +1 -1
  85. package/dist/plots/geo/Plot.svelte +113 -387
  86. package/dist/plots/geo/Plot.svelte.d.ts +5 -4
  87. package/dist/plots/geo/buildGeoMarkers.d.ts +33 -0
  88. package/dist/plots/geo/buildGeoMarkers.js +47 -0
  89. package/dist/plots/heatmap/Plot.svelte +24 -49
  90. package/dist/plots/heatmap/Plot.svelte.d.ts +4 -5
  91. package/dist/plots/heatmap/ValueLabels.svelte +2 -2
  92. package/dist/plots/heatmap/ValueLabels.svelte.d.ts +2 -2
  93. package/dist/plots/heatmap/buildCellMarkers.d.ts +21 -0
  94. package/dist/plots/heatmap/buildCellMarkers.js +25 -0
  95. package/dist/plots/line/Plot.svelte +68 -141
  96. package/dist/plots/line/Plot.svelte.d.ts +4 -4
  97. package/dist/plots/line/ValueLabels.svelte +94 -49
  98. package/dist/plots/line/ValueLabels.svelte.d.ts +6 -1
  99. package/dist/plots/line/buildLineMarkers.d.ts +15 -0
  100. package/dist/plots/line/buildLineMarkers.js +57 -0
  101. package/dist/plots/pyramid/Plot.svelte +41 -117
  102. package/dist/plots/pyramid/Plot.svelte.d.ts +4 -5
  103. package/dist/plots/pyramid/ValueLabels.svelte +1 -1
  104. package/dist/plots/pyramid/ValueLabels.svelte.d.ts +1 -1
  105. package/dist/plots/pyramid/buildPyramidBarMarkers.d.ts +19 -0
  106. package/dist/plots/pyramid/buildPyramidBarMarkers.js +32 -0
  107. package/dist/plots/scatter/Plot.svelte +206 -0
  108. package/dist/plots/{bar/BarSegments.svelte.d.ts → scatter/Plot.svelte.d.ts} +9 -20
  109. package/dist/plots/scatter/ValueLabels.svelte +106 -0
  110. package/dist/{layout/plot/GridLayout.svelte.d.ts → plots/scatter/ValueLabels.svelte.d.ts} +11 -5
  111. package/dist/plots/scatter/buildScatterMarkers.d.ts +11 -0
  112. package/dist/plots/scatter/buildScatterMarkers.js +37 -0
  113. package/dist/plots/scatter/resolveRadiusPaddedDomain.d.ts +10 -0
  114. package/dist/plots/scatter/resolveRadiusPaddedDomain.js +23 -0
  115. package/dist/plots/utils/declutter.d.ts +82 -33
  116. package/dist/plots/utils/declutter.js +182 -40
  117. package/dist/plots/utils/geoAccessors.d.ts +1 -1
  118. package/dist/plots/utils/geoAccessors.js +1 -1
  119. package/dist/plots/utils/segments.d.ts +17 -10
  120. package/dist/plots/utils/segments.js +26 -16
  121. package/dist/types/charts/common.d.ts +1 -1
  122. package/dist/types/charts/props.d.ts +5 -6
  123. package/dist/types/configuration/styling.d.ts +24 -2
  124. package/dist/types/{plots/scales/geo.d.ts → layout/coordinates.d.ts} +33 -1
  125. package/dist/types/layout/geometry.d.ts +17 -0
  126. package/dist/types/{plots/axis.d.ts → layout/scales.d.ts} +11 -0
  127. package/dist/types/layout/styles.d.ts +126 -0
  128. package/dist/types/layout/tooltip.d.ts +20 -1
  129. package/dist/types/markers/all.d.ts +11 -0
  130. package/dist/types/markers/base.d.ts +45 -0
  131. package/dist/types/markers/base.js +1 -0
  132. package/dist/types/markers/common.d.ts +64 -16
  133. package/dist/types/markers/geo.d.ts +75 -100
  134. package/dist/types/markers/line.d.ts +34 -0
  135. package/dist/types/markers/line.js +1 -0
  136. package/dist/types/markers/props.d.ts +1 -1
  137. package/dist/types/plots/data/common.d.ts +1 -1
  138. package/dist/types/plots/data/scatter.d.ts +13 -0
  139. package/dist/types/plots/data/scatter.js +1 -0
  140. package/dist/types/plots/props.d.ts +46 -74
  141. package/dist/types/plots/segments/common.d.ts +6 -12
  142. package/dist/types/plots/segments/config.d.ts +1 -1
  143. package/dist/types/plots/styling.d.ts +10 -0
  144. package/dist/{plots/utils → utils}/delta.d.ts +2 -2
  145. package/dist/{plots/utils → utils}/delta.js +1 -1
  146. package/dist/utils/edgeAwareAnchor.d.ts +37 -0
  147. package/dist/utils/edgeAwareAnchor.js +65 -0
  148. package/dist/utils/grouping.d.ts +1 -1
  149. package/dist/utils/interpolate.d.ts +1 -1
  150. package/package.json +3 -1
  151. package/dist/layout/geo/GeoLayout.svelte +0 -51
  152. package/dist/layout/geo/GeoLayout.svelte.d.ts +0 -24
  153. package/dist/layout/geo/resolveProjection.js +0 -48
  154. package/dist/layout/plot/GridLayout.svelte +0 -30
  155. package/dist/layout/plot/RuleLayout.svelte +0 -111
  156. package/dist/plots/bar/BarSegments.svelte +0 -69
  157. package/dist/types/plots/delta.d.ts +0 -19
  158. package/dist/types/plots/styles/common.d.ts +0 -52
  159. package/dist/types/plots/styles/geo.d.ts +0 -42
  160. /package/dist/{plots/geo → layout/coordinates}/projections/argentina.js +0 -0
  161. /package/dist/{plots/geo → layout/coordinates}/projections/fit.d.ts +0 -0
  162. /package/dist/{plots/geo → layout/coordinates}/projections/fit.js +0 -0
  163. /package/dist/{plots/geo → layout/coordinates}/rotate.svelte.d.ts +0 -0
  164. /package/dist/{plots/geo → layout/coordinates}/rotate.svelte.js +0 -0
  165. /package/dist/{plots/geo → layout/coordinates}/zoom.svelte.js +0 -0
  166. /package/dist/types/{plots/axis.js → layout/coordinates.js} +0 -0
  167. /package/dist/types/{plots/delta.js → layout/geometry.js} +0 -0
  168. /package/dist/types/{plots/scales/geo.js → layout/scales.js} +0 -0
  169. /package/dist/types/{plots/styles/common.js → layout/styles.js} +0 -0
  170. /package/dist/types/{plots/styles/geo.js → markers/all.js} +0 -0
@@ -101,6 +101,8 @@
101
101
  sync: tip.sync,
102
102
  series: tip.series,
103
103
  content: tip.content,
104
+ anchorX: tip.anchorX,
105
+ anchorY: tip.anchorY,
104
106
  }
105
107
  : undefined}
106
108
  />
@@ -9,7 +9,7 @@
9
9
  } from '../../layout/tooltip/utils';
10
10
  import { resolveAccessor } from '../../plots/utils/accessors';
11
11
  import type { Accessor } from '../../types/plots/data/common';
12
- import type { AxisBasedScalesConfig } from '../../types/plots/props';
12
+ import type { AxisBasedScalesConfig } from '../../types/layout/scales';
13
13
  import type { CellSegmentStyle } from '../../types/plots/segments/common';
14
14
  import type { ChartProps } from '../../types/charts/props';
15
15
 
@@ -105,6 +105,8 @@
105
105
  sync: tip.sync,
106
106
  series: tip.series,
107
107
  content: tip.content,
108
+ anchorX: tip.anchorX,
109
+ anchorY: tip.anchorY,
108
110
  }
109
111
  : undefined}
110
112
  />
@@ -1,8 +1,7 @@
1
1
  import type { Accessor } from '../../types/plots/data/common';
2
- import type { CellSegmentStyle } from '../../types/plots/segments/common';
3
2
  import type { ChartProps } from '../../types/charts/props';
4
3
  declare function $$render<TRow extends Record<string, unknown>>(): {
5
- props: ChartProps<TRow, CellSegmentStyle> & {
4
+ props: ChartProps<TRow, import("../..").AreaStyle> & {
6
5
  z: Accessor<TRow, number>;
7
6
  };
8
7
  exports: {};
@@ -103,6 +103,8 @@
103
103
  sync: tip.sync,
104
104
  series: tip.series,
105
105
  content: tip.content,
106
+ anchorX: tip.anchorX,
107
+ anchorY: tip.anchorY,
106
108
  }
107
109
  : undefined}
108
110
  />
@@ -9,7 +9,7 @@
9
9
  } from '../../layout/tooltip/utils';
10
10
  import { resolveAccessor } from '../../plots/utils/accessors';
11
11
  import { resolveTimelineInterpolation } from '../../utils/interpolate';
12
- import type { AxisValue } from '../../types/plots/axis';
12
+ import type { AxisValue } from '../../types/layout/scales';
13
13
  import type { Accessor } from '../../types/plots/data/common';
14
14
  import type { BarSegmentStyle } from '../../types/plots/segments/common';
15
15
  import type { ChartProps } from '../../types/charts/props';
@@ -125,6 +125,8 @@
125
125
  sync: tip.sync,
126
126
  series: tip.series,
127
127
  content: tip.content,
128
+ anchorX: tip.anchorX,
129
+ anchorY: tip.anchorY,
128
130
  }
129
131
  : undefined}
130
132
  />
@@ -1,8 +1,7 @@
1
1
  import type { Accessor } from '../../types/plots/data/common';
2
- import type { BarSegmentStyle } from '../../types/plots/segments/common';
3
2
  import type { ChartProps } from '../../types/charts/props';
4
3
  declare function $$render<TRow extends Record<string, unknown>>(): {
5
- props: ChartProps<TRow, BarSegmentStyle> & {
4
+ props: ChartProps<TRow, import("../..").AreaStyle> & {
6
5
  x: Accessor<TRow, number>;
7
6
  z: Accessor<TRow, unknown>;
8
7
  };
@@ -0,0 +1,95 @@
1
+ <script lang="ts" generics="TRow extends Record<string, unknown>">
2
+ import BaseChart from '../BaseChart.svelte';
3
+ import ScatterPlot from '../../plots/scatter/Plot.svelte';
4
+ import {
5
+ resolveTooltip,
6
+ resolveHoverStrategy,
7
+ resolveHoverSync,
8
+ hasHoverMarker
9
+ } from '../../layout/tooltip/utils';
10
+ import { resolveAccessor } from '../../plots/utils/accessors';
11
+ import type { Accessor } from '../../types/plots/data/common';
12
+ import type { ScatterSegmentStyle } from '../../types/plots/segments/common';
13
+ import type { ChartProps } from '../../types/charts/props';
14
+
15
+ /**
16
+ * High-level scatter chart. Groups flat rows by `z` into one point cloud
17
+ * per group and delegates all chrome to {@link BaseChart}. `r` gives every
18
+ * point a per-row radius (bubble sizing), independent of `z` grouping.
19
+ */
20
+ let {
21
+ width,
22
+ height,
23
+ title,
24
+ subtitle,
25
+ caption,
26
+ legend,
27
+ header,
28
+ footer,
29
+ data,
30
+ x,
31
+ y,
32
+ z,
33
+ r,
34
+ styles = {},
35
+ segments,
36
+ markers = [],
37
+ scales = {},
38
+ margins,
39
+ facet,
40
+ timeline,
41
+ tooltip,
42
+ }: ChartProps<TRow, ScatterSegmentStyle> & { r?: Accessor<TRow, number> | number } = $props();
43
+
44
+ const tip = $derived(resolveTooltip(tooltip, 'punctual'));
45
+ const hoverEnabled = $derived(tip.enabled || hasHoverMarker(markers));
46
+ const resolvedStrategy = $derived(resolveHoverStrategy(tip.enabled ? tip.strategy : undefined, markers, 'punctual'));
47
+ const resolvedSync = $derived(resolveHoverSync(tip.enabled ? tip.sync : undefined, markers));
48
+ const getX = $derived(resolveAccessor<TRow>(x));
49
+ const getY = $derived(resolveAccessor<TRow>(y));
50
+ const defaultFormat = $derived((row: TRow) => `${String(getX(row))}, ${String(getY(row))}`);
51
+ </script>
52
+
53
+ <BaseChart
54
+ {width}
55
+ {height}
56
+ {title}
57
+ {subtitle}
58
+ {caption}
59
+ {legend}
60
+ {header}
61
+ {footer}
62
+ {data}
63
+ {facet}
64
+ {timeline}
65
+ hover={hoverEnabled ? { strategy: resolvedStrategy, sync: resolvedSync } : undefined}
66
+ >
67
+ {#snippet plot({ data: rows, width: w, height: h, facetValue })}
68
+ <ScatterPlot
69
+ width={w}
70
+ height={h}
71
+ data={rows}
72
+ {x}
73
+ {y}
74
+ {z}
75
+ {r}
76
+ {styles}
77
+ {segments}
78
+ {markers}
79
+ {scales}
80
+ {margins}
81
+ tooltip={tip.enabled
82
+ ? {
83
+ format: tip.format ?? defaultFormat,
84
+ facetId: facetValue ?? '',
85
+ strategy: tip.strategy,
86
+ sync: tip.sync,
87
+ series: tip.series,
88
+ content: tip.content,
89
+ anchorX: tip.anchorX,
90
+ anchorY: tip.anchorY,
91
+ }
92
+ : undefined}
93
+ />
94
+ {/snippet}
95
+ </BaseChart>
@@ -0,0 +1,28 @@
1
+ import type { Accessor } from '../../types/plots/data/common';
2
+ import type { ChartProps } from '../../types/charts/props';
3
+ declare function $$render<TRow extends Record<string, unknown>>(): {
4
+ props: ChartProps<TRow, import("../..").DotStyle> & {
5
+ r?: Accessor<TRow, number> | number;
6
+ };
7
+ exports: {};
8
+ bindings: "";
9
+ slots: {};
10
+ events: {};
11
+ };
12
+ declare class __sveltets_Render<TRow extends Record<string, unknown>> {
13
+ props(): ReturnType<typeof $$render<TRow>>['props'];
14
+ events(): ReturnType<typeof $$render<TRow>>['events'];
15
+ slots(): ReturnType<typeof $$render<TRow>>['slots'];
16
+ bindings(): "";
17
+ exports(): {};
18
+ }
19
+ interface $$IsomorphicComponent {
20
+ new <TRow extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TRow>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TRow>['props']>, ReturnType<__sveltets_Render<TRow>['events']>, ReturnType<__sveltets_Render<TRow>['slots']>> & {
21
+ $$bindings?: ReturnType<__sveltets_Render<TRow>['bindings']>;
22
+ } & ReturnType<__sveltets_Render<TRow>['exports']>;
23
+ <TRow extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<TRow>['props']> & {}): ReturnType<__sveltets_Render<TRow>['exports']>;
24
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
25
+ }
26
+ declare const Chart: $$IsomorphicComponent;
27
+ type Chart<TRow extends Record<string, unknown>> = InstanceType<typeof Chart<TRow>>;
28
+ export default Chart;
@@ -70,12 +70,24 @@ export const DEFAULT_CONFIG = {
70
70
  margins: { top: 'auto', right: 'auto', bottom: 'auto', left: 'auto' },
71
71
  palette: ['#4f46e5', '#e6580d', '#16a34a', '#dc2626', '#0891b2', '#9333ea', '#ca8a04', '#db2777'],
72
72
  continuous: { min: '#e0e7ff', max: '#4f46e5', labelColor: '#111827' },
73
- line: { strokeWidth: 3, dotRadius: 4 },
73
+ line: {
74
+ strokeWidth: 3,
75
+ dotRadius: 4,
76
+ valueLabels: {
77
+ elbowGap: 10,
78
+ laneStep: 7,
79
+ labelGap: 6,
80
+ connectorColor: '#94a3b8',
81
+ connectorWidth: 0.5,
82
+ },
83
+ },
84
+ scatter: { dotRadius: 5 },
74
85
  timeline: { axisColor: 'currentColor', activeColor: '#e6580d', thickness: 60 },
75
86
  hover: {
76
87
  rule: { stroke: '#e6580d', strokeOpacity: 0.35, strokeWidth: 1.5, strokeDasharray: '4 4' },
77
88
  dot: { dotRadius: 5, dotFill: 'currentColor' },
78
89
  font: { fill: 'currentColor', fontSize: 12, dy: -18 },
90
+ area: { stroke: '#e6580d', strokeWidth: 2, fillOpacity: 0 },
79
91
  },
80
92
  };
81
93
  // ── Merge ─────────────────────────────────────────────────────────────────────
@@ -84,6 +84,16 @@ export declare const THEMES: {
84
84
  line?: {
85
85
  strokeWidth?: number | undefined;
86
86
  dotRadius?: number | undefined;
87
+ valueLabels?: {
88
+ elbowGap?: number | undefined;
89
+ laneStep?: number | undefined;
90
+ labelGap?: number | undefined;
91
+ connectorColor?: string | undefined;
92
+ connectorWidth?: number | undefined;
93
+ } | undefined;
94
+ } | undefined;
95
+ scatter?: {
96
+ dotRadius?: number | undefined;
87
97
  } | undefined;
88
98
  timeline?: {
89
99
  axisColor?: string | undefined;
@@ -126,6 +136,15 @@ export declare const THEMES: {
126
136
  class?: string | undefined;
127
137
  textClass?: string | undefined;
128
138
  } | undefined;
139
+ area?: {
140
+ fill?: string | undefined;
141
+ fillOpacity?: number | undefined;
142
+ stroke?: string | undefined;
143
+ strokeWidth?: number | undefined;
144
+ strokeOpacity?: number | undefined;
145
+ strokeDasharray?: (string | import("../..").LineStyle) | undefined;
146
+ borderRadius?: number | undefined;
147
+ } | undefined;
129
148
  } | undefined;
130
149
  };
131
150
  Editorial: {
@@ -207,6 +226,16 @@ export declare const THEMES: {
207
226
  line?: {
208
227
  strokeWidth?: number | undefined;
209
228
  dotRadius?: number | undefined;
229
+ valueLabels?: {
230
+ elbowGap?: number | undefined;
231
+ laneStep?: number | undefined;
232
+ labelGap?: number | undefined;
233
+ connectorColor?: string | undefined;
234
+ connectorWidth?: number | undefined;
235
+ } | undefined;
236
+ } | undefined;
237
+ scatter?: {
238
+ dotRadius?: number | undefined;
210
239
  } | undefined;
211
240
  timeline?: {
212
241
  axisColor?: string | undefined;
@@ -249,6 +278,15 @@ export declare const THEMES: {
249
278
  class?: string | undefined;
250
279
  textClass?: string | undefined;
251
280
  } | undefined;
281
+ area?: {
282
+ fill?: string | undefined;
283
+ fillOpacity?: number | undefined;
284
+ stroke?: string | undefined;
285
+ strokeWidth?: number | undefined;
286
+ strokeOpacity?: number | undefined;
287
+ strokeDasharray?: (string | import("../..").LineStyle) | undefined;
288
+ borderRadius?: number | undefined;
289
+ } | undefined;
252
290
  } | undefined;
253
291
  };
254
292
  Dark: {
@@ -330,6 +368,16 @@ export declare const THEMES: {
330
368
  line?: {
331
369
  strokeWidth?: number | undefined;
332
370
  dotRadius?: number | undefined;
371
+ valueLabels?: {
372
+ elbowGap?: number | undefined;
373
+ laneStep?: number | undefined;
374
+ labelGap?: number | undefined;
375
+ connectorColor?: string | undefined;
376
+ connectorWidth?: number | undefined;
377
+ } | undefined;
378
+ } | undefined;
379
+ scatter?: {
380
+ dotRadius?: number | undefined;
333
381
  } | undefined;
334
382
  timeline?: {
335
383
  axisColor?: string | undefined;
@@ -372,6 +420,15 @@ export declare const THEMES: {
372
420
  class?: string | undefined;
373
421
  textClass?: string | undefined;
374
422
  } | undefined;
423
+ area?: {
424
+ fill?: string | undefined;
425
+ fillOpacity?: number | undefined;
426
+ stroke?: string | undefined;
427
+ strokeWidth?: number | undefined;
428
+ strokeOpacity?: number | undefined;
429
+ strokeDasharray?: (string | import("../..").LineStyle) | undefined;
430
+ borderRadius?: number | undefined;
431
+ } | undefined;
375
432
  } | undefined;
376
433
  };
377
434
  Compact: {
@@ -453,6 +510,16 @@ export declare const THEMES: {
453
510
  line?: {
454
511
  strokeWidth?: number | undefined;
455
512
  dotRadius?: number | undefined;
513
+ valueLabels?: {
514
+ elbowGap?: number | undefined;
515
+ laneStep?: number | undefined;
516
+ labelGap?: number | undefined;
517
+ connectorColor?: string | undefined;
518
+ connectorWidth?: number | undefined;
519
+ } | undefined;
520
+ } | undefined;
521
+ scatter?: {
522
+ dotRadius?: number | undefined;
456
523
  } | undefined;
457
524
  timeline?: {
458
525
  axisColor?: string | undefined;
@@ -495,6 +562,15 @@ export declare const THEMES: {
495
562
  class?: string | undefined;
496
563
  textClass?: string | undefined;
497
564
  } | undefined;
565
+ area?: {
566
+ fill?: string | undefined;
567
+ fillOpacity?: number | undefined;
568
+ stroke?: string | undefined;
569
+ strokeWidth?: number | undefined;
570
+ strokeOpacity?: number | undefined;
571
+ strokeDasharray?: (string | import("../..").LineStyle) | undefined;
572
+ borderRadius?: number | undefined;
573
+ } | undefined;
498
574
  } | undefined;
499
575
  };
500
576
  };
package/dist/index.d.ts CHANGED
@@ -2,49 +2,55 @@ export { default as BarPlot } from './plots/bar/Plot.svelte';
2
2
  export { default as HeatmapPlot } from './plots/heatmap/Plot.svelte';
3
3
  export { default as LinePlot } from './plots/line/Plot.svelte';
4
4
  export { default as PyramidPlot } from './plots/pyramid/Plot.svelte';
5
+ export { default as ScatterPlot } from './plots/scatter/Plot.svelte';
5
6
  export { default as GeoPlot } from './plots/geo/Plot.svelte';
6
7
  export { default as BaseChart } from './charts/BaseChart.svelte';
7
8
  export { default as BarChart } from './charts/bar/Chart.svelte';
8
9
  export { default as HeatmapChart } from './charts/heatmap/Chart.svelte';
9
10
  export { default as LineChart } from './charts/line/Chart.svelte';
10
11
  export { default as PyramidChart } from './charts/pyramid/Chart.svelte';
12
+ export { default as ScatterChart } from './charts/scatter/Chart.svelte';
11
13
  export { default as ChartContainer } from './charts/container/ChartContainer.svelte';
12
14
  export { default as BasePlotLayout } from './layout/plot/BasePlotLayout.svelte';
13
- export { default as GeoLayout } from './layout/geo/GeoLayout.svelte';
14
- export { default as TileLayer } from './plots/geo/TileLayer.svelte';
15
- export { argentinaBicontinental } from './plots/geo/projections/argentina';
15
+ export { default as CoordinatesLayout } from './layout/coordinates/CoordinatesLayout.svelte';
16
+ export { default as TileLayer } from './layout/styles/TileLayer.svelte';
17
+ export { argentinaBicontinental } from './layout/coordinates/projections/argentina';
16
18
  export { default as Timeline } from './layout/timeline/Timeline.svelte';
17
19
  export { default as TimelineLayout } from './layout/timeline/TimelineLayout.svelte';
18
20
  export { default as FacetLayout } from './layout/facet/FacetLayout.svelte';
19
21
  export { default as LegendLayout } from './layout/legend/LegendLayout.svelte';
20
22
  export { default as Tooltip } from './layout/tooltip/Tooltip.svelte';
23
+ export { default as BarMarker } from './markers/BarMarker.svelte';
24
+ export { default as CellMarker } from './markers/CellMarker.svelte';
21
25
  export { default as DeltaMarker } from './markers/DeltaMarker.svelte';
22
26
  export { default as DotMarker } from './markers/DotMarker.svelte';
23
27
  export { default as HoverMarker } from './markers/HoverMarker.svelte';
28
+ export { default as LineMarker } from './markers/LineMarker.svelte';
24
29
  export { default as PeakMarker } from './markers/PeakMarker.svelte';
30
+ export { default as RuleMarker } from './markers/RuleMarker.svelte';
25
31
  export { default as TextMarker } from './markers/TextMarker.svelte';
26
32
  export { setConfiguration, getConfiguration, resetConfiguration, configToCssVars, cssVarsStyle, DEFAULT_CONFIG, } from './configuration/config.svelte';
27
33
  export { THEMES } from './configuration/themes';
28
34
  export type { ThemeName } from './configuration/themes';
29
35
  export { groupBy, buildSeries } from './utils/grouping';
30
36
  export { makeColorScale, normalize, resolveCssColor, paletteColor } from './utils/color';
31
- export type { AxisValue, AxisScale } from './types/plots/axis';
37
+ export type { AxisValue, AxisScale, AxisBasedScalesConfig } from './types/layout/scales';
32
38
  export type { Accessor, Series, SeriesProps, DataProps } from './types/plots/data/common';
33
- export type { BasePlotProps, StylesConfig, MarkersConfig, SegmentsConfig, AxisBasedScalesConfig, GeoScalesConfig, ScalesConfig, MarginConfig, TooltipConfig, } from './types/plots/props';
34
- export type { DeltaConfig, } from './types/plots/delta';
35
- export type { ValuesStyle, ColorsStyle, BasePlotStyles, } from './types/plots/styles/common';
36
- export type { LineSegmentStyle, BarSegmentStyle, CellSegmentStyle, GeoSegmentStyle } from './types/plots/segments/common';
39
+ export type { BasePlotProps, StylesConfig, MarkersConfig, SegmentsConfig, ScalesConfig, MarginConfig, TooltipConfig, HoverConfig, PointMatchingStrategy, } from './types/plots/props';
40
+ export type { ValuesStyle, ColorsStyle, FrameStyle, FrameProp, BasePlotStylesConfig, GeoStylesConfig, GeoTileLayerConfig, } from './types/layout/styles';
41
+ export type { LineSegmentStyle, BarSegmentStyle, CellSegmentStyle, GeoSegmentStyle, ScatterSegmentStyle } from './types/plots/segments/common';
37
42
  export type { Range, Area, Segment } from './types/plots/segments/config';
38
43
  export type { ValueAnchor, SymbolType, LineStyle, LineCap, LineJoin, FontWeight, FontStyleKeyword, TextAnchor, LineAnchor, } from './types/plots/constants';
39
- export type { FontStyle, StrokeStyle, DotStyle } from './types/plots/styling';
40
- export type { Marker } from './types/markers/common';
44
+ export type { FontStyle, StrokeStyle, DotStyle, AreaStyle } from './types/plots/styling';
45
+ export type { AxisBasedMarkersConfig } from './types/markers/common';
46
+ export type { LineMarkersConfig, DeltaMarkerConfig, DeltaConfig, DeltaTarget } from './types/markers/line';
41
47
  export type { MarkerProps } from './types/markers/props';
42
48
  export type { GeoFeature, GeoJsonInput, GeoDataProps, Topology } from './types/plots/data/geo';
43
- export type { GeoProjectionName, GeoProjectionConfig, GeoCustomProjection, GeoCustomProjectionFactory, } from './types/plots/scales/geo';
44
- export type { GeoStyles, GeoTileLayerConfig, GeoZoomConfig } from './types/plots/styles/geo';
45
- export type { GeoMarker, GeoInsetMarker, GeoInsetLocation, GeoInsetProjectionName, GeoInsetProjectionConfig, } from './types/markers/geo';
49
+ export type { ScatterDataProps } from './types/plots/data/scatter';
50
+ export type { GeoProjectionName, GeoProjectionConfig, GeoCustomProjection, GeoCustomProjectionFactory, GeoScalesConfig, GeoZoomConfig, CoordinatesConfig, } from './types/layout/coordinates';
51
+ export type { GeoMarkersConfig, GeoInsetMarkerConfig, GeoInsetTooltipConfig, GeoInsetLocation, GeoInsetProjectionName, GeoInsetProjectionConfig, } from './types/markers/geo';
46
52
  export type { TimeValue, Orientation, FacetColumns, FacetConfig, TimelineConfig, ChartPlotContext, ChartPlotSnippet, } from './types/charts/common';
47
53
  export type { LegendSection, DiscreteLegendSection, ContinuousLegendSection, LegendItem, LegendDisabledStyle, } from './types/charts/legend';
48
- export type { HoverStrategy, TooltipOptions, TooltipProp, } from './types/layout/tooltip';
54
+ export type { HoverStrategy, TooltipOptions, TooltipProp, TooltipAnchorX, TooltipAnchorY, } from './types/layout/tooltip';
49
55
  export type { ChartConfig, ChartConfigInput, TextStyle } from './types/configuration/styling';
50
56
  export type { ChartProps } from './types/charts/props';
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@ export { default as BarPlot } from './plots/bar/Plot.svelte';
4
4
  export { default as HeatmapPlot } from './plots/heatmap/Plot.svelte';
5
5
  export { default as LinePlot } from './plots/line/Plot.svelte';
6
6
  export { default as PyramidPlot } from './plots/pyramid/Plot.svelte';
7
+ export { default as ScatterPlot } from './plots/scatter/Plot.svelte';
7
8
  export { default as GeoPlot } from './plots/geo/Plot.svelte';
8
9
  // ── Charts ──────────────────────────────────────────────────────────────────
9
10
  // High-level, plot-agnostic chrome plus ready-made chart kinds.
@@ -12,23 +13,28 @@ export { default as BarChart } from './charts/bar/Chart.svelte';
12
13
  export { default as HeatmapChart } from './charts/heatmap/Chart.svelte';
13
14
  export { default as LineChart } from './charts/line/Chart.svelte';
14
15
  export { default as PyramidChart } from './charts/pyramid/Chart.svelte';
16
+ export { default as ScatterChart } from './charts/scatter/Chart.svelte';
15
17
  // Interchangeable layout primitives (compose your own chart kinds with these).
16
18
  export { default as ChartContainer } from './charts/container/ChartContainer.svelte';
17
19
  export { default as BasePlotLayout } from './layout/plot/BasePlotLayout.svelte';
18
- export { default as GeoLayout } from './layout/geo/GeoLayout.svelte';
19
- export { default as TileLayer } from './plots/geo/TileLayer.svelte';
20
+ export { default as CoordinatesLayout } from './layout/coordinates/CoordinatesLayout.svelte';
21
+ export { default as TileLayer } from './layout/styles/TileLayer.svelte';
20
22
  // Custom geo projections — usable as `scales.projection.type`.
21
- export { argentinaBicontinental } from './plots/geo/projections/argentina';
23
+ export { argentinaBicontinental } from './layout/coordinates/projections/argentina';
22
24
  export { default as Timeline } from './layout/timeline/Timeline.svelte';
23
25
  export { default as TimelineLayout } from './layout/timeline/TimelineLayout.svelte';
24
26
  export { default as FacetLayout } from './layout/facet/FacetLayout.svelte';
25
27
  export { default as LegendLayout } from './layout/legend/LegendLayout.svelte';
26
28
  export { default as Tooltip } from './layout/tooltip/Tooltip.svelte';
27
29
  // Markers
30
+ export { default as BarMarker } from './markers/BarMarker.svelte';
31
+ export { default as CellMarker } from './markers/CellMarker.svelte';
28
32
  export { default as DeltaMarker } from './markers/DeltaMarker.svelte';
29
33
  export { default as DotMarker } from './markers/DotMarker.svelte';
30
34
  export { default as HoverMarker } from './markers/HoverMarker.svelte';
35
+ export { default as LineMarker } from './markers/LineMarker.svelte';
31
36
  export { default as PeakMarker } from './markers/PeakMarker.svelte';
37
+ export { default as RuleMarker } from './markers/RuleMarker.svelte';
32
38
  export { default as TextMarker } from './markers/TextMarker.svelte';
33
39
  export { setConfiguration, getConfiguration, resetConfiguration, configToCssVars, cssVarsStyle, DEFAULT_CONFIG, } from './configuration/config.svelte';
34
40
  export { THEMES } from './configuration/themes';
@@ -0,0 +1,95 @@
1
+ <script lang="ts" generics="TData extends Record<string, unknown>">
2
+ import type { ComponentProps, Snippet } from 'svelte';
3
+ import { Plot } from 'svelteplot';
4
+ import { resolveProjection } from './resolveProjection';
5
+ import { createGeoZoom } from './zoom.svelte';
6
+ import { createGeoRotate, type GeoRotate } from './rotate.svelte';
7
+ import type { CoordinatesConfig } from '../../types/layout/coordinates';
8
+
9
+ type SveltePlotProps = ComponentProps<typeof Plot>;
10
+
11
+ /**
12
+ * The Coordinates layer, rendered — resolves the active coordinate system
13
+ * (today, only a `d3-geo` projection; svelteplot has no other coordinate
14
+ * abstraction, cartesian is implicit elsewhere) and owns `<Plot>` itself,
15
+ * since `<Plot projection>` must be known before `<Plot>` mounts — nothing
16
+ * nested inside it could supply that prop after the fact. Also owns the
17
+ * pan/zoom/rotate gesture state and applies the resulting transform as a
18
+ * `<g>` wrapper around `children`. A no-op identity transform, no
19
+ * projection, for every plot kind but `GeoPlot`.
20
+ */
21
+ let {
22
+ width,
23
+ height,
24
+ margin,
25
+ x,
26
+ y,
27
+ coordinates = undefined,
28
+ data,
29
+ containerEl,
30
+ children,
31
+ }: {
32
+ width: number;
33
+ height: number;
34
+ margin: SveltePlotProps['margin'];
35
+ x: SveltePlotProps['x'];
36
+ y: SveltePlotProps['y'];
37
+ coordinates?: CoordinatesConfig;
38
+ /** Fed to `resolveProjection`'s `domain: 'data'` sentinel — the same rows `BasePlotLayout` uses for hover matching. */
39
+ data: TData[];
40
+ containerEl?: HTMLDivElement;
41
+ children: Snippet;
42
+ } = $props();
43
+
44
+ const resolvedProjection = $derived(
45
+ coordinates?.projection ? resolveProjection(coordinates.projection, data) : undefined,
46
+ );
47
+
48
+ const zoomEnabled = $derived(coordinates?.zoom !== false && coordinates?.zoom != null);
49
+ const zoomConfig = $derived(typeof coordinates?.zoom === 'object' ? coordinates.zoom : undefined);
50
+
51
+ /**
52
+ * Orthographic (and other azimuthal, hemisphere-style) projections don't
53
+ * gain anything from drag-to-*pan* — panning just slides the same globe a
54
+ * few pixels within the frame — so when zoom is enabled on one, drag
55
+ * instead rotates the globe (`createGeoRotate`) and wheel/pinch keeps
56
+ * scaling it (`createGeoZoom`, with its own drag disabled below so the two
57
+ * gestures don't fight over the same pointer events).
58
+ */
59
+ const projectionType = $derived(
60
+ typeof resolvedProjection === 'string' ? resolvedProjection : resolvedProjection?.type,
61
+ );
62
+ const rotateEnabled = $derived(zoomEnabled && projectionType === 'orthographic');
63
+ const baseRotate = $derived.by((): GeoRotate => {
64
+ const configured = typeof resolvedProjection === 'object' ? resolvedProjection?.rotate : undefined;
65
+ return [configured?.[0] ?? 0, configured?.[1] ?? 0, configured?.[2] ?? 0];
66
+ });
67
+
68
+ const geoZoom = createGeoZoom({
69
+ enabled: () => zoomEnabled,
70
+ config: () => zoomConfig,
71
+ node: () => containerEl ?? null,
72
+ disableDrag: () => rotateEnabled,
73
+ });
74
+
75
+ const geoRotate = createGeoRotate({
76
+ enabled: () => rotateEnabled,
77
+ baseRotate: () => baseRotate,
78
+ scale: () => geoZoom.transform.k,
79
+ node: () => containerEl ?? null,
80
+ });
81
+
82
+ const finalProjection = $derived.by(() => {
83
+ if (!rotateEnabled) return resolvedProjection;
84
+ return {
85
+ ...(typeof resolvedProjection === 'string' ? { type: resolvedProjection } : resolvedProjection),
86
+ rotate: geoRotate.rotate,
87
+ };
88
+ });
89
+ </script>
90
+
91
+ <Plot {width} {height} {margin} {x} {y} projection={finalProjection as SveltePlotProps['projection']}>
92
+ <g transform="translate({geoZoom.transform.x}, {geoZoom.transform.y}) scale({geoZoom.transform.k})">
93
+ {@render children()}
94
+ </g>
95
+ </Plot>
@@ -1,19 +1,16 @@
1
1
  import type { Snippet } from 'svelte';
2
- import type { AxisValue } from '../../types/plots/axis';
3
- import type { Series } from '../../types/plots/data/common';
4
- import type { Marker } from '../../types/markers/common';
5
- import type { HoverPoint } from '../../types/layout/tooltip';
2
+ import type { CoordinatesConfig } from '../../types/layout/coordinates';
6
3
  declare function $$render<TData extends Record<string, unknown>>(): {
7
4
  props: {
8
- markers?: Marker[];
9
- /** All resolved series, forwarded to unscoped component markers (e.g. DeltaMarker). */
10
- seriesData?: Series<TData>[];
11
- matchedPoints: HoverPoint<TData>[];
12
- ruleX: AxisValue | null;
13
- ruleY: AxisValue | null;
14
- impliesRuleX: boolean;
15
- impliesRuleY: boolean;
16
- showHoverLabels?: boolean;
5
+ width: number;
6
+ height: number;
7
+ margin: number | "auto" | import("svelteplot/types/plot.js").PlotMargin | undefined;
8
+ x: false | import("svelteplot/types/data.js").RawValue[] | Partial<import("svelteplot/types/scale.js").XScaleOptions> | undefined;
9
+ y: false | import("svelteplot/types/data.js").RawValue[] | Partial<import("svelteplot/types/scale.js").YScaleOptions> | undefined;
10
+ coordinates?: CoordinatesConfig;
11
+ /** Fed to `resolveProjection`'s `domain: 'data'` sentinel — the same rows `BasePlotLayout` uses for hover matching. */
12
+ data: TData[];
13
+ containerEl?: HTMLDivElement;
17
14
  children: Snippet;
18
15
  };
19
16
  exports: {};
@@ -35,6 +32,6 @@ interface $$IsomorphicComponent {
35
32
  <TData extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<TData>['props']> & {}): ReturnType<__sveltets_Render<TData>['exports']>;
36
33
  z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
37
34
  }
38
- declare const RuleLayout: $$IsomorphicComponent;
39
- type RuleLayout<TData extends Record<string, unknown>> = InstanceType<typeof RuleLayout<TData>>;
40
- export default RuleLayout;
35
+ declare const CoordinatesLayout: $$IsomorphicComponent;
36
+ type CoordinatesLayout<TData extends Record<string, unknown>> = InstanceType<typeof CoordinatesLayout<TData>>;
37
+ export default CoordinatesLayout;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * GeoPlot's own margin default — a small, uniform gap on every side, unlike
3
+ * `AUTO_MARGIN_ESTIMATE`'s asymmetric axis-tick-label estimate (extra room
4
+ * on the left/bottom for y tick labels and an x-axis title). A map has no
5
+ * axes to make room for, so borrowing that estimate just left GeoPlot with
6
+ * a lopsided, oversized margin — most visibly a much taller gap under the
7
+ * map than an `inset` marker's own default `margin` (see `insetLayout.ts`),
8
+ * even though both are meant to read as the same edge gap. Matching this
9
+ * constant to that 8px inset default keeps the two visually aligned.
10
+ */
11
+ export declare const GEO_MARGIN_ESTIMATE: {
12
+ readonly top: 8;
13
+ readonly right: 8;
14
+ readonly bottom: 8;
15
+ readonly left: 8;
16
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * GeoPlot's own margin default — a small, uniform gap on every side, unlike
3
+ * `AUTO_MARGIN_ESTIMATE`'s asymmetric axis-tick-label estimate (extra room
4
+ * on the left/bottom for y tick labels and an x-axis title). A map has no
5
+ * axes to make room for, so borrowing that estimate just left GeoPlot with
6
+ * a lopsided, oversized margin — most visibly a much taller gap under the
7
+ * map than an `inset` marker's own default `margin` (see `insetLayout.ts`),
8
+ * even though both are meant to read as the same edge gap. Matching this
9
+ * constant to that 8px inset default keeps the two visually aligned.
10
+ */
11
+ export const GEO_MARGIN_ESTIMATE = { top: 8, right: 8, bottom: 8, left: 8 };
@@ -1,4 +1,4 @@
1
- import type { GeoCustomProjectionFactory } from '../../../types/plots/scales/geo';
1
+ import type { GeoCustomProjectionFactory } from '../../../types/layout/coordinates';
2
2
  /**
3
3
  * Argentina's territory in one unbroken frame: the mainland and the
4
4
  * Antarctic/South Atlantic sector both visible, related to each other at