svelteplot 0.4.9 → 0.5.0

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 (47) hide show
  1. package/dist/Mark.svelte +87 -73
  2. package/dist/Mark.svelte.d.ts +36 -34
  3. package/dist/helpers/scales.js +5 -1
  4. package/dist/marks/Area.svelte.d.ts +36 -34
  5. package/dist/marks/AreaX.svelte.d.ts +36 -34
  6. package/dist/marks/Arrow.svelte.d.ts +36 -34
  7. package/dist/marks/AxisX.svelte.d.ts +36 -34
  8. package/dist/marks/AxisY.svelte.d.ts +36 -34
  9. package/dist/marks/BarX.svelte.d.ts +36 -34
  10. package/dist/marks/BarY.svelte.d.ts +36 -34
  11. package/dist/marks/BollingerX.svelte.d.ts +36 -34
  12. package/dist/marks/BollingerY.svelte.d.ts +36 -34
  13. package/dist/marks/BoxY.svelte.d.ts +36 -34
  14. package/dist/marks/Cell.svelte.d.ts +36 -34
  15. package/dist/marks/CustomMark.svelte.d.ts +36 -34
  16. package/dist/marks/CustomMarkHTML.svelte.d.ts +1 -1
  17. package/dist/marks/DifferenceY.svelte.d.ts +36 -34
  18. package/dist/marks/Dot.svelte +1 -1
  19. package/dist/marks/Dot.svelte.d.ts +36 -34
  20. package/dist/marks/DotX.svelte.d.ts +36 -34
  21. package/dist/marks/DotY.svelte.d.ts +36 -34
  22. package/dist/marks/Geo.svelte.d.ts +36 -34
  23. package/dist/marks/GridX.svelte.d.ts +36 -34
  24. package/dist/marks/GridY.svelte.d.ts +36 -34
  25. package/dist/marks/Line.svelte.d.ts +36 -34
  26. package/dist/marks/LineX.svelte.d.ts +36 -34
  27. package/dist/marks/LineY.svelte.d.ts +36 -34
  28. package/dist/marks/Link.svelte.d.ts +36 -34
  29. package/dist/marks/Rect.svelte.d.ts +36 -34
  30. package/dist/marks/RuleX.svelte.d.ts +36 -34
  31. package/dist/marks/RuleY.svelte.d.ts +36 -34
  32. package/dist/marks/Spike.svelte.d.ts +36 -34
  33. package/dist/marks/Text.svelte.d.ts +37 -35
  34. package/dist/marks/TickX.svelte.d.ts +36 -34
  35. package/dist/marks/TickY.svelte.d.ts +36 -34
  36. package/dist/marks/Vector.svelte.d.ts +36 -34
  37. package/dist/marks/helpers/MarkerPath.svelte.d.ts +72 -68
  38. package/dist/marks/helpers/RectPath.svelte.d.ts +36 -34
  39. package/dist/transforms/bollinger.d.ts +2 -0
  40. package/dist/transforms/dodge.d.ts +17 -0
  41. package/dist/transforms/dodge.js +128 -0
  42. package/dist/transforms/interval.d.ts +4 -0
  43. package/dist/transforms/select.d.ts +14 -0
  44. package/dist/transforms/sort.d.ts +8 -0
  45. package/dist/transforms/window.d.ts +4 -0
  46. package/dist/types/mark.d.ts +37 -34
  47. package/package.json +2 -1
@@ -10,12 +10,14 @@ declare class __sveltets_Render<Datum extends DataRecord> {
10
10
  width: number;
11
11
  height: number;
12
12
  options: BaseRectMarkProps<Datum> & Partial<{
13
- filter?: import("../../types/index.js").ConstantAccessor<boolean, Datum>;
14
- facet?: "auto" | "include" | "exclude";
13
+ filter: import("../../types/index.js").ConstantAccessor<boolean, Datum>;
14
+ facet: "auto" | "include" | "exclude";
15
15
  fx: import("../../types/index.js").ChannelAccessor<Datum>;
16
16
  fy: import("../../types/index.js").ChannelAccessor<Datum>;
17
17
  dx: import("../../types/index.js").ConstantAccessor<number, Datum>;
18
18
  dy: import("../../types/index.js").ConstantAccessor<number, Datum>;
19
+ dodgeX: import("../../transforms/dodge.js").DodgeXOptions;
20
+ dodgeY: import("../../transforms/dodge.js").DodgeYOptions;
19
21
  fill: import("../../types/index.js").ChannelAccessor<Datum>;
20
22
  fillOpacity: import("../../types/index.js").ConstantAccessor<number, Datum>;
21
23
  sort: ((a: import("../../types/data.js").RawValue, b: import("../../types/data.js").RawValue) => number) | {
@@ -36,38 +38,38 @@ declare class __sveltets_Render<Datum extends DataRecord> {
36
38
  imageFilter: import("../../types/index.js").ConstantAccessor<string, Datum>;
37
39
  shapeRendering: import("../../types/index.js").ConstantAccessor<import("csstype").Property.ShapeRendering, Datum>;
38
40
  paintOrder: import("../../types/index.js").ConstantAccessor<string, Datum>;
39
- onclick?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
40
- ondblclick?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
41
- onmouseup?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
42
- onmousedown?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
43
- onmouseenter?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
44
- onmousemove?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
45
- onmouseleave?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
46
- onmouseout?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
47
- onmouseover?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
48
- onpointercancel?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
49
- onpointerdown?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
50
- onpointerup?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
51
- onpointerenter?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
52
- onpointerleave?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
53
- onpointermove?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
54
- onpointerover?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
55
- onpointerout?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
56
- ondrag?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
57
- ondrop?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
58
- ondragstart?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
59
- ondragenter?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
60
- ondragleave?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
61
- ondragover?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
62
- ondragend?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
63
- ontouchstart?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
64
- ontouchmove?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
65
- ontouchend?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
66
- ontouchcancel?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
67
- oncontextmenu?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
68
- onwheel?: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
69
- class?: string;
70
- style?: string;
41
+ onclick: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
42
+ ondblclick: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
43
+ onmouseup: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
44
+ onmousedown: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
45
+ onmouseenter: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
46
+ onmousemove: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
47
+ onmouseleave: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
48
+ onmouseout: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
49
+ onmouseover: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
50
+ onpointercancel: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
51
+ onpointerdown: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
52
+ onpointerup: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
53
+ onpointerenter: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
54
+ onpointerleave: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
55
+ onpointermove: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
56
+ onpointerover: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
57
+ onpointerout: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
58
+ ondrag: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
59
+ ondrop: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
60
+ ondragstart: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
61
+ ondragenter: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
62
+ ondragleave: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
63
+ ondragover: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
64
+ ondragend: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
65
+ ontouchstart: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
66
+ ontouchmove: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
67
+ ontouchend: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
68
+ ontouchcancel: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
69
+ oncontextmenu: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
70
+ onwheel: import("svelte/elements.js").MouseEventHandler<SVGPathElement>;
71
+ class: string;
72
+ style: string;
71
73
  cursor: import("../../types/index.js").ConstantAccessor<import("csstype").Property.Cursor, Datum>;
72
74
  }>;
73
75
  /**
@@ -18,6 +18,8 @@ export declare function bollingerDim(dim: 'x' | 'y', { data, ...channels }: Tran
18
18
  fy?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
19
19
  dx?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
20
20
  dy?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
21
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
22
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
21
23
  fill?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
22
24
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
23
25
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -0,0 +1,17 @@
1
+ import type { ScaledDataRecord, TransformArg, PlotState } from '../types';
2
+ type BaseDodgeOptions = {
3
+ anchor?: string;
4
+ padding?: number;
5
+ r?: number;
6
+ };
7
+ type AnchorX = 'left' | 'right' | 'middle';
8
+ type AnchorY = 'top' | 'bottom' | 'middle';
9
+ export type DodgeXOptions = AnchorX | (BaseDodgeOptions & {
10
+ anchor?: 'left' | 'right' | 'middle';
11
+ });
12
+ export type DodgeYOptions = AnchorY | (BaseDodgeOptions & {
13
+ anchor?: 'top' | 'bottom' | 'middle';
14
+ });
15
+ export declare function dodgeX(args: TransformArg<ScaledDataRecord>, plotState: PlotState): ScaledDataRecord[];
16
+ export declare function dodgeY(args: TransformArg<ScaledDataRecord>, plotState: PlotState): ScaledDataRecord[];
17
+ export {};
@@ -0,0 +1,128 @@
1
+ import IntervalTree from 'interval-tree-1d';
2
+ import { groupFacetsAndZ } from '../helpers/group';
3
+ export function dodgeX(args, plotState) {
4
+ if (!args.dodgeX)
5
+ return args.data;
6
+ let { anchor = 'left', padding = 1, r = args.dodgeX.r } = maybeAnchor(args.dodgeX);
7
+ let anchorFunction;
8
+ switch (`${anchor}`.toLowerCase()) {
9
+ case 'left':
10
+ anchorFunction = anchorXLeft;
11
+ break;
12
+ case 'right':
13
+ anchorFunction = anchorXRight;
14
+ break;
15
+ case 'middle':
16
+ anchorFunction = anchorXMiddle;
17
+ break;
18
+ default:
19
+ throw new Error(`unknown dodge anchor: ${anchor}`);
20
+ }
21
+ return dodge('x', 'y', anchorFunction, Number(padding), r, args, plotState);
22
+ }
23
+ export function dodgeY(args, plotState) {
24
+ if (!args.dodgeY)
25
+ return args.data;
26
+ let { anchor = 'bottom', padding = 1, r = args.dodgeY.r } = maybeAnchor(args.dodgeY);
27
+ let anchorFunction;
28
+ switch (`${anchor}`.toLowerCase()) {
29
+ case 'top':
30
+ anchorFunction = anchorYTop;
31
+ break;
32
+ case 'bottom':
33
+ anchorFunction = anchorYBottom;
34
+ break;
35
+ case 'middle':
36
+ anchorFunction = anchorYMiddle;
37
+ break;
38
+ default:
39
+ throw new Error(`unknown dodge anchor: ${anchor}`);
40
+ }
41
+ return dodge('y', 'x', anchorFunction, Number(padding), r, args, plotState);
42
+ }
43
+ function dodge(y, x, anchor, padding, r, { data, ...channels }, plotState) {
44
+ if (r != null && typeof r !== 'number') {
45
+ // use the r channel
46
+ // let { channels, sort, reverse } = options;
47
+ // channels = maybeNamed(channels);
48
+ // if (channels?.r === undefined)
49
+ // options = { ...options, channels: { ...channels, r: { value: r, scale: 'r' } } };
50
+ // if (sort === undefined && reverse === undefined) options.sort = { channel: '-r' };
51
+ }
52
+ const { fx, fy } = channels;
53
+ let [ky, ty] = anchor(plotState);
54
+ const compare = ky ? compareAscending : compareSymmetric;
55
+ const cr = r !== undefined ? r : 3; // default radius if no r channel
56
+ // group data by facets
57
+ groupFacetsAndZ(data, { fx, fy }, (items) => {
58
+ // apply dodge within each facet
59
+ const tree = IntervalTree();
60
+ const data = items.filter((d) => (typeof d.r !== 'number' || d.r >= 0) && isFinite(d[x]) && isFinite(d[y]));
61
+ const intervals = new Float64Array(2 * data.length + 2);
62
+ data.forEach((d, i) => {
63
+ const ri = d.r ?? r ?? 3;
64
+ const y0 = ky ? ri + padding : 0; // offset baseline for varying radius
65
+ const l = d[x] - ri;
66
+ const h = d[x] + ri;
67
+ // The first two positions are 0 to test placing the dot on the baseline.
68
+ let k = 2;
69
+ // For any previously placed circles that may overlap this circle, compute
70
+ // the y-positions that place this circle tangent to these other circles.
71
+ // https://observablehq.com/@mbostock/circle-offset-along-line
72
+ tree.queryInterval(l - padding, h + padding, ([, , j]) => {
73
+ const yj = data[j][y] - y0;
74
+ const dx = d[x] - data[j][x];
75
+ const dr = padding + (channels.r ? d.r + data[j].r : 2 * cr);
76
+ const dy = Math.sqrt(dr * dr - dx * dx);
77
+ intervals[k++] = yj - dy;
78
+ intervals[k++] = yj + dy;
79
+ });
80
+ // Find the best y-value where this circle can fit.
81
+ let candidates = intervals.slice(0, k);
82
+ if (ky)
83
+ candidates = candidates.filter((y) => y >= 0);
84
+ out: for (const diff of candidates.sort(compare)) {
85
+ for (let j = 0; j < k; j += 2) {
86
+ if (intervals[j] + 1e-6 < diff && diff < intervals[j + 1] - 1e-6) {
87
+ continue out;
88
+ }
89
+ }
90
+ d[y] = diff + y0;
91
+ break;
92
+ }
93
+ // Insert the placed circle into the interval tree.
94
+ tree.insert([l, h, i]);
95
+ });
96
+ if (!ky)
97
+ ky = 1;
98
+ data.forEach((d) => (d[y] = d[y] * ky + ty));
99
+ });
100
+ return data;
101
+ }
102
+ function maybeAnchor(anchor) {
103
+ return typeof anchor === 'string' ? { anchor } : anchor;
104
+ }
105
+ function anchorXLeft({ options: { marginLeft } }) {
106
+ return [1, marginLeft];
107
+ }
108
+ function anchorXRight({ facetWidth: width, options: { marginLeft } }) {
109
+ return [-1, marginLeft + width];
110
+ }
111
+ function anchorXMiddle({ facetWidth: width, options: { marginLeft } }) {
112
+ return [0, marginLeft + width / 2];
113
+ }
114
+ function anchorYTop({ options: { marginTop } }) {
115
+ return [1, marginTop];
116
+ }
117
+ function anchorYBottom({ facetHeight: height }) {
118
+ return [-1, height];
119
+ }
120
+ function anchorYMiddle({ facetHeight: height, options: { marginTop, marginBottom } }) {
121
+ return [0, (marginTop + height) / 2];
122
+ }
123
+ function compareSymmetric(a, b) {
124
+ return Math.abs(a) - Math.abs(b);
125
+ }
126
+ function compareAscending(a, b) {
127
+ return a - b;
128
+ }
@@ -8,6 +8,8 @@ export declare function intervalX<T>(args: TransformArg<T>, { plot }: {
8
8
  fy?: import("../types/index.js").ChannelAccessor<T>;
9
9
  dx?: import("../types/index.js").ConstantAccessor<number, T>;
10
10
  dy?: import("../types/index.js").ConstantAccessor<number, T>;
11
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
12
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
11
13
  fill?: import("../types/index.js").ChannelAccessor<T>;
12
14
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, T>;
13
15
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -72,6 +74,8 @@ export declare function intervalY<T>(args: TransformArg<T>, { plot }: {
72
74
  fy?: import("../types/index.js").ChannelAccessor<T>;
73
75
  dx?: import("../types/index.js").ConstantAccessor<number, T>;
74
76
  dy?: import("../types/index.js").ConstantAccessor<number, T>;
77
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
78
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
75
79
  fill?: import("../types/index.js").ChannelAccessor<T>;
76
80
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, T>;
77
81
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -12,6 +12,8 @@ export declare function select({ data, ...channels }: TransformArg<DataRecord>,
12
12
  fy?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
13
13
  dx?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
14
14
  dy?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
15
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
16
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
15
17
  fill?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
16
18
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
17
19
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -77,6 +79,8 @@ export declare function selectFirst(args: TransformArg<DataRecord>): {
77
79
  fy?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
78
80
  dx?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
79
81
  dy?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
82
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
83
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
80
84
  fill?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
81
85
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
82
86
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -142,6 +146,8 @@ export declare function selectLast(args: TransformArg<DataRecord>): {
142
146
  fy?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
143
147
  dx?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
144
148
  dy?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
149
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
150
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
145
151
  fill?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
146
152
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
147
153
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -204,6 +210,8 @@ export declare function selectMinX(args: TransformArg<DataRecord>): {
204
210
  fy?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
205
211
  dx?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
206
212
  dy?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
213
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
214
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
207
215
  fill?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
208
216
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
209
217
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -266,6 +274,8 @@ export declare function selectMaxX(args: TransformArg<DataRecord>): {
266
274
  fy?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
267
275
  dx?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
268
276
  dy?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
277
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
278
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
269
279
  fill?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
270
280
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
271
281
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -328,6 +338,8 @@ export declare function selectMinY(args: TransformArg<DataRecord>): {
328
338
  fy?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
329
339
  dx?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
330
340
  dy?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
341
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
342
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
331
343
  fill?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
332
344
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
333
345
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -390,6 +402,8 @@ export declare function selectMaxY(args: TransformArg<DataRecord>): {
390
402
  fy?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
391
403
  dx?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
392
404
  dy?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
405
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
406
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
393
407
  fill?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
394
408
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
395
409
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -15,6 +15,8 @@ export declare function sort<T>({ data, ...channels }: TransformArg<T>, options?
15
15
  fy?: import("../types/index.js").ChannelAccessor<T>;
16
16
  dx?: import("../types/index.js").ConstantAccessor<number, T>;
17
17
  dy?: import("../types/index.js").ConstantAccessor<number, T>;
18
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
19
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
18
20
  fill?: import("../types/index.js").ChannelAccessor<T>;
19
21
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, T>;
20
22
  stroke?: import("../types/index.js").ChannelAccessor<T>;
@@ -74,6 +76,8 @@ export declare function sort<T>({ data, ...channels }: TransformArg<T>, options?
74
76
  fy?: import("../types/index.js").ChannelAccessor<T>;
75
77
  dx?: import("../types/index.js").ConstantAccessor<number, T>;
76
78
  dy?: import("../types/index.js").ConstantAccessor<number, T>;
79
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
80
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
77
81
  fill?: import("../types/index.js").ChannelAccessor<T>;
78
82
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, T>;
79
83
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -143,6 +147,8 @@ export declare function shuffle({ data, ...channels }: TransformArg<DataRow[]>,
143
147
  fy?: import("../types/index.js").ChannelAccessor<DataRow[]>;
144
148
  dx?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
145
149
  dy?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
150
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
151
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
146
152
  fill?: import("../types/index.js").ChannelAccessor<DataRow[]>;
147
153
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
148
154
  stroke?: import("../types/index.js").ChannelAccessor<DataRow[]>;
@@ -206,6 +212,8 @@ export declare function reverse({ data, ...channels }: TransformArg<DataRow[]>):
206
212
  fy?: import("../types/index.js").ChannelAccessor<DataRow[]>;
207
213
  dx?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
208
214
  dy?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
215
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
216
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
209
217
  fill?: import("../types/index.js").ChannelAccessor<DataRow[]>;
210
218
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
211
219
  stroke?: import("../types/index.js").ChannelAccessor<DataRow[]>;
@@ -14,6 +14,8 @@ export declare function windowX(args: TransformArg<DataRecord>, options: WindowO
14
14
  fy?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
15
15
  dx?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
16
16
  dy?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
17
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
18
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
17
19
  fill?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
18
20
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
19
21
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -79,6 +81,8 @@ export declare function windowY(args: TransformArg<DataRecord>, options: WindowO
79
81
  fy?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
80
82
  dx?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
81
83
  dy?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
84
+ dodgeX?: import("./dodge").DodgeXOptions | undefined;
85
+ dodgeY?: import("./dodge").DodgeYOptions | undefined;
82
86
  fill?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
83
87
  fillOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
84
88
  sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
@@ -12,16 +12,19 @@ import type { MouseEventHandler } from 'svelte/elements';
12
12
  import type { ChannelAccessor, ConstantAccessor, DataRecord, RawValue } from './index.js';
13
13
  import type * as CSS from 'csstype';
14
14
  import type { ScaledChannelName, ScaleName } from './scale.js';
15
+ import type { DodgeXOptions, DodgeYOptions } from '../transforms/dodge.js';
15
16
  export type BaseMarkProps<T> = Partial<{
16
17
  /**
17
18
  * Filter the data without modifying the inferred scales
18
19
  */
19
- filter?: ConstantAccessor<boolean, T>;
20
- facet?: 'auto' | 'include' | 'exclude';
20
+ filter: ConstantAccessor<boolean, T>;
21
+ facet: 'auto' | 'include' | 'exclude';
21
22
  fx: ChannelAccessor<T>;
22
23
  fy: ChannelAccessor<T>;
23
24
  dx: ConstantAccessor<number, T>;
24
25
  dy: ConstantAccessor<number, T>;
26
+ dodgeX: DodgeXOptions;
27
+ dodgeY: DodgeYOptions;
25
28
  fill: ChannelAccessor<T>;
26
29
  fillOpacity: ConstantAccessor<number, T>;
27
30
  sort: string | ConstantAccessor<RawValue, T> | ((a: RawValue, b: RawValue) => number) | {
@@ -44,44 +47,44 @@ export type BaseMarkProps<T> = Partial<{
44
47
  imageFilter: ConstantAccessor<string, T>;
45
48
  shapeRendering: ConstantAccessor<CSS.Property.ShapeRendering, T>;
46
49
  paintOrder: ConstantAccessor<string, T>;
47
- onclick?: MouseEventHandler<SVGPathElement>;
48
- ondblclick?: MouseEventHandler<SVGPathElement>;
49
- onmouseup?: MouseEventHandler<SVGPathElement>;
50
- onmousedown?: MouseEventHandler<SVGPathElement>;
51
- onmouseenter?: MouseEventHandler<SVGPathElement>;
52
- onmousemove?: MouseEventHandler<SVGPathElement>;
53
- onmouseleave?: MouseEventHandler<SVGPathElement>;
54
- onmouseout?: MouseEventHandler<SVGPathElement>;
55
- onmouseover?: MouseEventHandler<SVGPathElement>;
56
- onpointercancel?: MouseEventHandler<SVGPathElement>;
57
- onpointerdown?: MouseEventHandler<SVGPathElement>;
58
- onpointerup?: MouseEventHandler<SVGPathElement>;
59
- onpointerenter?: MouseEventHandler<SVGPathElement>;
60
- onpointerleave?: MouseEventHandler<SVGPathElement>;
61
- onpointermove?: MouseEventHandler<SVGPathElement>;
62
- onpointerover?: MouseEventHandler<SVGPathElement>;
63
- onpointerout?: MouseEventHandler<SVGPathElement>;
64
- ondrag?: MouseEventHandler<SVGPathElement>;
65
- ondrop?: MouseEventHandler<SVGPathElement>;
66
- ondragstart?: MouseEventHandler<SVGPathElement>;
67
- ondragenter?: MouseEventHandler<SVGPathElement>;
68
- ondragleave?: MouseEventHandler<SVGPathElement>;
69
- ondragover?: MouseEventHandler<SVGPathElement>;
70
- ondragend?: MouseEventHandler<SVGPathElement>;
71
- ontouchstart?: MouseEventHandler<SVGPathElement>;
72
- ontouchmove?: MouseEventHandler<SVGPathElement>;
73
- ontouchend?: MouseEventHandler<SVGPathElement>;
74
- ontouchcancel?: MouseEventHandler<SVGPathElement>;
75
- oncontextmenu?: MouseEventHandler<SVGPathElement>;
76
- onwheel?: MouseEventHandler<SVGPathElement>;
50
+ onclick: MouseEventHandler<SVGPathElement>;
51
+ ondblclick: MouseEventHandler<SVGPathElement>;
52
+ onmouseup: MouseEventHandler<SVGPathElement>;
53
+ onmousedown: MouseEventHandler<SVGPathElement>;
54
+ onmouseenter: MouseEventHandler<SVGPathElement>;
55
+ onmousemove: MouseEventHandler<SVGPathElement>;
56
+ onmouseleave: MouseEventHandler<SVGPathElement>;
57
+ onmouseout: MouseEventHandler<SVGPathElement>;
58
+ onmouseover: MouseEventHandler<SVGPathElement>;
59
+ onpointercancel: MouseEventHandler<SVGPathElement>;
60
+ onpointerdown: MouseEventHandler<SVGPathElement>;
61
+ onpointerup: MouseEventHandler<SVGPathElement>;
62
+ onpointerenter: MouseEventHandler<SVGPathElement>;
63
+ onpointerleave: MouseEventHandler<SVGPathElement>;
64
+ onpointermove: MouseEventHandler<SVGPathElement>;
65
+ onpointerover: MouseEventHandler<SVGPathElement>;
66
+ onpointerout: MouseEventHandler<SVGPathElement>;
67
+ ondrag: MouseEventHandler<SVGPathElement>;
68
+ ondrop: MouseEventHandler<SVGPathElement>;
69
+ ondragstart: MouseEventHandler<SVGPathElement>;
70
+ ondragenter: MouseEventHandler<SVGPathElement>;
71
+ ondragleave: MouseEventHandler<SVGPathElement>;
72
+ ondragover: MouseEventHandler<SVGPathElement>;
73
+ ondragend: MouseEventHandler<SVGPathElement>;
74
+ ontouchstart: MouseEventHandler<SVGPathElement>;
75
+ ontouchmove: MouseEventHandler<SVGPathElement>;
76
+ ontouchend: MouseEventHandler<SVGPathElement>;
77
+ ontouchcancel: MouseEventHandler<SVGPathElement>;
78
+ oncontextmenu: MouseEventHandler<SVGPathElement>;
79
+ onwheel: MouseEventHandler<SVGPathElement>;
77
80
  /**
78
81
  * if you want to give your mark element an extra CSS class
79
82
  */
80
- class?: string;
83
+ class: string;
81
84
  /**
82
85
  * if you want to give your mark element an extra inline style
83
86
  */
84
- style?: string;
87
+ style: string;
85
88
  cursor: ConstantAccessor<CSS.Property.Cursor, T>;
86
89
  }>;
87
90
  export type LinkableMarkProps<T> = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelteplot",
3
- "version": "0.4.9",
3
+ "version": "0.5.0",
4
4
  "license": "ISC",
5
5
  "author": {
6
6
  "name": "Gregor Aisch",
@@ -110,6 +110,7 @@
110
110
  "d3-time": "^3.1.0",
111
111
  "es-toolkit": "^1.39.10",
112
112
  "fast-equals": "^5.3.2",
113
+ "interval-tree-1d": "^1.0.4",
113
114
  "merge-deep": "^3.0.3",
114
115
  "svelte": "5.39.8"
115
116
  },