svelteplot 0.4.3 → 0.4.4-pr-105.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 (66) hide show
  1. package/README.md +41 -0
  2. package/dist/Mark.svelte +5 -2
  3. package/dist/Mark.svelte.d.ts +2 -1
  4. package/dist/core/Plot.svelte +1 -0
  5. package/dist/helpers/colors.d.ts +1 -1
  6. package/dist/helpers/index.d.ts +2 -2
  7. package/dist/helpers/scales.d.ts +1 -1
  8. package/dist/helpers/scales.js +2 -2
  9. package/dist/helpers/typeChecks.d.ts +4 -4
  10. package/dist/marks/Area.svelte.d.ts +2 -1
  11. package/dist/marks/AreaX.svelte.d.ts +4 -2
  12. package/dist/marks/AreaY.svelte.d.ts +4 -2
  13. package/dist/marks/Arrow.svelte.d.ts +2 -1
  14. package/dist/marks/AxisX.svelte +5 -1
  15. package/dist/marks/AxisX.svelte.d.ts +11 -7
  16. package/dist/marks/AxisY.svelte +3 -2
  17. package/dist/marks/AxisY.svelte.d.ts +9 -7
  18. package/dist/marks/BarX.svelte.d.ts +3 -2
  19. package/dist/marks/BarY.svelte +0 -1
  20. package/dist/marks/BarY.svelte.d.ts +2 -1
  21. package/dist/marks/BollingerX.svelte.d.ts +2 -73
  22. package/dist/marks/BollingerY.svelte.d.ts +2 -73
  23. package/dist/marks/BoxX.svelte +72 -28
  24. package/dist/marks/BoxY.svelte +88 -38
  25. package/dist/marks/BoxY.svelte.d.ts +6 -66
  26. package/dist/marks/Cell.svelte.d.ts +2 -1
  27. package/dist/marks/ColorLegend.svelte +1 -1
  28. package/dist/marks/CustomMark.svelte.d.ts +2 -80
  29. package/dist/marks/DifferenceY.svelte.d.ts +7 -66
  30. package/dist/marks/Dot.svelte.d.ts +2 -1
  31. package/dist/marks/DotX.svelte.d.ts +2 -1
  32. package/dist/marks/DotY.svelte.d.ts +2 -1
  33. package/dist/marks/Geo.svelte.d.ts +2 -1
  34. package/dist/marks/GridX.svelte.d.ts +2 -1
  35. package/dist/marks/GridY.svelte.d.ts +2 -1
  36. package/dist/marks/Line.svelte.d.ts +4 -3
  37. package/dist/marks/LineX.svelte.d.ts +4 -2
  38. package/dist/marks/LineY.svelte.d.ts +4 -2
  39. package/dist/marks/Link.svelte.d.ts +2 -1
  40. package/dist/marks/Rect.svelte +0 -7
  41. package/dist/marks/Rect.svelte.d.ts +2 -1
  42. package/dist/marks/RuleX.svelte.d.ts +2 -1
  43. package/dist/marks/RuleY.svelte.d.ts +2 -1
  44. package/dist/marks/Spike.svelte.d.ts +2 -1
  45. package/dist/marks/Text.svelte.d.ts +2 -1
  46. package/dist/marks/TickX.svelte.d.ts +2 -1
  47. package/dist/marks/TickY.svelte.d.ts +2 -1
  48. package/dist/marks/Vector.svelte.d.ts +2 -1
  49. package/dist/marks/helpers/MultilineText.svelte +10 -10
  50. package/dist/marks/helpers/RectPath.svelte +8 -3
  51. package/dist/marks/helpers/RectPath.svelte.d.ts +3 -62
  52. package/dist/transforms/bollinger.d.ts +1 -66
  53. package/dist/transforms/group.d.ts +4 -12
  54. package/dist/transforms/interval.d.ts +2 -122
  55. package/dist/transforms/recordize.d.ts +1 -4
  56. package/dist/transforms/rename.d.ts +1 -0
  57. package/dist/transforms/rename.js +5 -0
  58. package/dist/transforms/select.d.ts +7 -427
  59. package/dist/transforms/sort.d.ts +3 -242
  60. package/dist/transforms/sort.js +13 -1
  61. package/dist/transforms/stack.d.ts +5 -25
  62. package/dist/transforms/stack.js +96 -41
  63. package/dist/transforms/window.d.ts +2 -128
  64. package/dist/types/mark.d.ts +5 -1
  65. package/dist/ui/Spiral.svelte +0 -15
  66. package/package.json +129 -125
@@ -3,253 +3,14 @@ export declare const SORT_KEY: unique symbol;
3
3
  export declare const IS_SORTED: unique symbol;
4
4
  export declare function sort<T>({ data, ...channels }: TransformArg<T>, options?: {
5
5
  reverse?: boolean;
6
- }): {
7
- [IS_SORTED]: string | number | true | symbol | Date | {
8
- channel: string;
9
- order?: "ascending" | "descending";
10
- } | ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | ((d: T, index: number) => import("../types/index.js").RawValue);
11
- sort: null;
12
- filter?: import("../types/index.js").ConstantAccessor<boolean, T>;
13
- facet?: "auto" | "include" | "exclude" | undefined;
14
- fx?: import("../types/index.js").ChannelAccessor<T>;
15
- fy?: import("../types/index.js").ChannelAccessor<T>;
16
- dx?: import("../types/index.js").ConstantAccessor<number, T>;
17
- dy?: import("../types/index.js").ConstantAccessor<number, T>;
18
- fill?: import("../types/index.js").ChannelAccessor<T>;
19
- fillOpacity?: import("../types/index.js").ConstantAccessor<number, T>;
20
- stroke?: import("../types/index.js").ChannelAccessor<T>;
21
- strokeWidth?: import("../types/index.js").ConstantAccessor<number, T>;
22
- strokeOpacity?: import("../types/index.js").ConstantAccessor<number, T>;
23
- strokeLinejoin?: import("../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinejoin, T>;
24
- strokeLinecap?: import("../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinecap, T>;
25
- strokeMiterlimit?: import("../types/index.js").ConstantAccessor<number, T>;
26
- opacity?: import("../types/index.js").ChannelAccessor<T>;
27
- strokeDasharray?: import("../types/index.js").ConstantAccessor<string, T>;
28
- strokeDashoffset?: import("../types/index.js").ConstantAccessor<number, T>;
29
- mixBlendMode?: import("../types/index.js").ConstantAccessor<import("csstype").Property.MixBlendMode, T>;
30
- clipPath?: string | undefined;
31
- imageFilter?: import("../types/index.js").ConstantAccessor<string, T>;
32
- shapeRendering?: import("../types/index.js").ConstantAccessor<import("csstype").Property.ShapeRendering, T>;
33
- paintOrder?: import("../types/index.js").ConstantAccessor<string, T>;
34
- onclick?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
35
- ondblclick?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
36
- onmouseup?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
37
- onmousedown?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
38
- onmouseenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
39
- onmousemove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
40
- onmouseleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
41
- onmouseout?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
42
- onmouseover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
43
- onpointercancel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
44
- onpointerdown?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
45
- onpointerup?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
46
- onpointerenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
47
- onpointerleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
48
- onpointermove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
49
- onpointerover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
50
- onpointerout?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
51
- ondrag?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
52
- ondrop?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
53
- ondragstart?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
54
- ondragenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
55
- ondragleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
56
- ondragover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
57
- ondragend?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
58
- ontouchstart?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
59
- ontouchmove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
60
- ontouchend?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
61
- ontouchcancel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
62
- oncontextmenu?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
63
- onwheel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
64
- class?: string | null | undefined;
65
- cursor?: import("../types/index.js").ConstantAccessor<import("csstype").Property.Cursor, T>;
66
- data: T[] | Omit<T & {
67
- [SORT_KEY]: number | Date | string;
68
- }, typeof SORT_KEY>[];
69
- } | {
70
- filter?: import("../types/index.js").ConstantAccessor<boolean, T>;
71
- facet?: "auto" | "include" | "exclude" | undefined;
72
- fx?: import("../types/index.js").ChannelAccessor<T>;
73
- fy?: import("../types/index.js").ChannelAccessor<T>;
74
- dx?: import("../types/index.js").ConstantAccessor<number, T>;
75
- dy?: import("../types/index.js").ConstantAccessor<number, T>;
76
- fill?: import("../types/index.js").ChannelAccessor<T>;
77
- fillOpacity?: import("../types/index.js").ConstantAccessor<number, T>;
78
- sort?: {
79
- channel: string;
80
- order?: "ascending" | "descending";
81
- } | ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | import("../types/index.js").ConstantAccessor<import("../types/index.js").RawValue, T>;
82
- stroke?: import("../types/index.js").ChannelAccessor<T>;
83
- strokeWidth?: import("../types/index.js").ConstantAccessor<number, T>;
84
- strokeOpacity?: import("../types/index.js").ConstantAccessor<number, T>;
85
- strokeLinejoin?: import("../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinejoin, T>;
86
- strokeLinecap?: import("../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinecap, T>;
87
- strokeMiterlimit?: import("../types/index.js").ConstantAccessor<number, T>;
88
- opacity?: import("../types/index.js").ChannelAccessor<T>;
89
- strokeDasharray?: import("../types/index.js").ConstantAccessor<string, T>;
90
- strokeDashoffset?: import("../types/index.js").ConstantAccessor<number, T>;
91
- mixBlendMode?: import("../types/index.js").ConstantAccessor<import("csstype").Property.MixBlendMode, T>;
92
- clipPath?: string | undefined;
93
- imageFilter?: import("../types/index.js").ConstantAccessor<string, T>;
94
- shapeRendering?: import("../types/index.js").ConstantAccessor<import("csstype").Property.ShapeRendering, T>;
95
- paintOrder?: import("../types/index.js").ConstantAccessor<string, T>;
96
- onclick?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
97
- ondblclick?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
98
- onmouseup?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
99
- onmousedown?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
100
- onmouseenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
101
- onmousemove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
102
- onmouseleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
103
- onmouseout?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
104
- onmouseover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
105
- onpointercancel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
106
- onpointerdown?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
107
- onpointerup?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
108
- onpointerenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
109
- onpointerleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
110
- onpointermove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
111
- onpointerover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
112
- onpointerout?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
113
- ondrag?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
114
- ondrop?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
115
- ondragstart?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
116
- ondragenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
117
- ondragleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
118
- ondragover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
119
- ondragend?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
120
- ontouchstart?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
121
- ontouchmove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
122
- ontouchend?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
123
- ontouchcancel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
124
- oncontextmenu?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
125
- onwheel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
126
- class?: string | null | undefined;
127
- cursor?: import("../types/index.js").ConstantAccessor<import("csstype").Property.Cursor, T>;
128
- data: T[];
129
- };
6
+ }): any;
130
7
  /**
131
8
  * shuffles the data row order
132
9
  */
133
10
  export declare function shuffle({ data, ...channels }: TransformArg<DataRow[]>, options?: {
134
11
  seed?: number;
135
- }): {
136
- sort: null;
137
- [IS_SORTED]: boolean;
138
- filter?: import("../types/index.js").ConstantAccessor<boolean, DataRow[]>;
139
- facet?: "auto" | "include" | "exclude" | undefined;
140
- fx?: import("../types/index.js").ChannelAccessor<DataRow[]>;
141
- fy?: import("../types/index.js").ChannelAccessor<DataRow[]>;
142
- dx?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
143
- dy?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
144
- fill?: import("../types/index.js").ChannelAccessor<DataRow[]>;
145
- fillOpacity?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
146
- stroke?: import("../types/index.js").ChannelAccessor<DataRow[]>;
147
- strokeWidth?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
148
- strokeOpacity?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
149
- strokeLinejoin?: import("../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinejoin, DataRow[]>;
150
- strokeLinecap?: import("../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinecap, DataRow[]>;
151
- strokeMiterlimit?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
152
- opacity?: import("../types/index.js").ChannelAccessor<DataRow[]>;
153
- strokeDasharray?: import("../types/index.js").ConstantAccessor<string, DataRow[]>;
154
- strokeDashoffset?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
155
- mixBlendMode?: import("../types/index.js").ConstantAccessor<import("csstype").Property.MixBlendMode, DataRow[]>;
156
- clipPath?: string | undefined;
157
- imageFilter?: import("../types/index.js").ConstantAccessor<string, DataRow[]>;
158
- shapeRendering?: import("../types/index.js").ConstantAccessor<import("csstype").Property.ShapeRendering, DataRow[]>;
159
- paintOrder?: import("../types/index.js").ConstantAccessor<string, DataRow[]>;
160
- onclick?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
161
- ondblclick?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
162
- onmouseup?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
163
- onmousedown?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
164
- onmouseenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
165
- onmousemove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
166
- onmouseleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
167
- onmouseout?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
168
- onmouseover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
169
- onpointercancel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
170
- onpointerdown?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
171
- onpointerup?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
172
- onpointerenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
173
- onpointerleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
174
- onpointermove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
175
- onpointerover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
176
- onpointerout?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
177
- ondrag?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
178
- ondrop?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
179
- ondragstart?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
180
- ondragenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
181
- ondragleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
182
- ondragover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
183
- ondragend?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
184
- ontouchstart?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
185
- ontouchmove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
186
- ontouchend?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
187
- ontouchcancel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
188
- oncontextmenu?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
189
- onwheel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
190
- class?: string | null | undefined;
191
- cursor?: import("../types/index.js").ConstantAccessor<import("csstype").Property.Cursor, DataRow[]>;
192
- data: DataRow[][];
193
- };
12
+ }): any;
194
13
  /**
195
14
  * reverses the data row order
196
15
  */
197
- export declare function reverse({ data, ...channels }: TransformArg<DataRow[]>): {
198
- sort: null;
199
- [IS_SORTED]: boolean;
200
- filter?: import("../types/index.js").ConstantAccessor<boolean, DataRow[]>;
201
- facet?: "auto" | "include" | "exclude" | undefined;
202
- fx?: import("../types/index.js").ChannelAccessor<DataRow[]>;
203
- fy?: import("../types/index.js").ChannelAccessor<DataRow[]>;
204
- dx?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
205
- dy?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
206
- fill?: import("../types/index.js").ChannelAccessor<DataRow[]>;
207
- fillOpacity?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
208
- stroke?: import("../types/index.js").ChannelAccessor<DataRow[]>;
209
- strokeWidth?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
210
- strokeOpacity?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
211
- strokeLinejoin?: import("../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinejoin, DataRow[]>;
212
- strokeLinecap?: import("../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinecap, DataRow[]>;
213
- strokeMiterlimit?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
214
- opacity?: import("../types/index.js").ChannelAccessor<DataRow[]>;
215
- strokeDasharray?: import("../types/index.js").ConstantAccessor<string, DataRow[]>;
216
- strokeDashoffset?: import("../types/index.js").ConstantAccessor<number, DataRow[]>;
217
- mixBlendMode?: import("../types/index.js").ConstantAccessor<import("csstype").Property.MixBlendMode, DataRow[]>;
218
- clipPath?: string | undefined;
219
- imageFilter?: import("../types/index.js").ConstantAccessor<string, DataRow[]>;
220
- shapeRendering?: import("../types/index.js").ConstantAccessor<import("csstype").Property.ShapeRendering, DataRow[]>;
221
- paintOrder?: import("../types/index.js").ConstantAccessor<string, DataRow[]>;
222
- onclick?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
223
- ondblclick?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
224
- onmouseup?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
225
- onmousedown?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
226
- onmouseenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
227
- onmousemove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
228
- onmouseleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
229
- onmouseout?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
230
- onmouseover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
231
- onpointercancel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
232
- onpointerdown?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
233
- onpointerup?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
234
- onpointerenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
235
- onpointerleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
236
- onpointermove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
237
- onpointerover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
238
- onpointerout?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
239
- ondrag?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
240
- ondrop?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
241
- ondragstart?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
242
- ondragenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
243
- ondragleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
244
- ondragover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
245
- ondragend?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
246
- ontouchstart?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
247
- ontouchmove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
248
- ontouchend?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
249
- ontouchcancel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
250
- oncontextmenu?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
251
- onwheel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
252
- class?: string | null | undefined;
253
- cursor?: import("../types/index.js").ConstantAccessor<import("csstype").Property.Cursor, DataRow[]>;
254
- data: DataRow[][];
255
- };
16
+ export declare function reverse({ data, ...channels }: TransformArg<DataRow[]>): any;
@@ -27,7 +27,19 @@ export function sort({ data, ...channels }, options = {}) {
27
27
  ...d,
28
28
  [SORT_KEY]: resolveChannel('sort', d, { ...channels, sort })
29
29
  }))
30
- .toSorted((a, b) => (a[SORT_KEY] > b[SORT_KEY] ? 1 : a[SORT_KEY] < b[SORT_KEY] ? -1 : 0) *
30
+ .map((d) => ({
31
+ ...d,
32
+ [SORT_KEY]: typeof d[SORT_KEY] === 'number' && !Number.isFinite(d[SORT_KEY])
33
+ ? Number.POSITIVE_INFINITY
34
+ : d[SORT_KEY]
35
+ }))
36
+ .toSorted((a, b) => (typeof a[SORT_KEY] === 'string' && typeof b[SORT_KEY] === 'string'
37
+ ? a[SORT_KEY].localeCompare(b[SORT_KEY])
38
+ : a[SORT_KEY] > b[SORT_KEY]
39
+ ? 1
40
+ : a[SORT_KEY] < b[SORT_KEY]
41
+ ? -1
42
+ : 0) *
31
43
  (options.reverse ||
32
44
  (isDataRecord(sort) && sort?.order === 'descending')
33
45
  ? -1
@@ -1,4 +1,4 @@
1
- import type { ChannelAccessor, TransformArg } from '../types/index.js';
1
+ import type { TransformArg } from '../types/index.js';
2
2
  export type StackOrder = 'none' | 'appearance' | 'inside-out' | 'sum';
3
3
  export type StackOffset = 'none' | 'wiggle' | 'center' | 'normalize' | 'diverging';
4
4
  export type StackOptions = {
@@ -6,27 +6,7 @@ export type StackOptions = {
6
6
  order: null | StackOrder;
7
7
  reverse: boolean;
8
8
  };
9
- export declare function stackY<T>({ data, ...channels }: T, opts?: Partial<StackOptions>): T;
10
- export declare function stackX({ data, ...channels }: TransformArg, opts?: Partial<StackOptions>): TransformArg;
11
- export declare function stackMosaicX<T>(args: any, opts: any): {
12
- fx: ChannelAccessor<unknown>;
13
- fy: ChannelAccessor<unknown>;
14
- data: unknown[];
15
- x: symbol;
16
- x1: symbol;
17
- x2: symbol;
18
- y: symbol;
19
- y1: symbol;
20
- y2: symbol;
21
- };
22
- export declare function stackMosaicY<T>(args: any, opts: any): {
23
- fx: ChannelAccessor<unknown>;
24
- fy: ChannelAccessor<unknown>;
25
- data: unknown[];
26
- x: symbol;
27
- x1: symbol;
28
- x2: symbol;
29
- y: symbol;
30
- y1: symbol;
31
- y2: symbol;
32
- };
9
+ export declare function stackY<T>({ data, ...channels }: TransformArg<T>, opts?: Partial<StackOptions>): TransformArg<T>;
10
+ export declare function stackX<T>({ data, ...channels }: TransformArg<T>, opts?: Partial<StackOptions>): TransformArg<T>;
11
+ export declare function stackMosaicX<T>(args: any, opts: any): any;
12
+ export declare function stackMosaicY<T>(args: any, opts: any): any;
@@ -1,12 +1,22 @@
1
1
  import isDataRecord from '../helpers/isDataRecord.js';
2
2
  import { resolveChannel, resolveProp } from '../helpers/resolve.js';
3
3
  import { stack, stackOffsetExpand, stackOffsetSilhouette, stackOffsetWiggle, stackOrderAppearance, stackOrderAscending, stackOrderInsideOut, stackOrderNone, stackOffsetDiverging } from 'd3-shape';
4
- import { index, union, sum, groups as d3Groups, extent, min } from 'd3-array';
4
+ import { sum, groups as d3Groups, min, range } from 'd3-array';
5
5
  import { groupFacetsAndZ } from '../helpers/group';
6
6
  import { filter } from './filter.js';
7
7
  import { sort } from './sort.js';
8
+ import { INDEX } from '../constants.js';
9
+ import { indexData, RAW_VALUE } from './recordize.js';
10
+ const S = {
11
+ x: Symbol('x'),
12
+ x1: Symbol('x1'),
13
+ x2: Symbol('x2'),
14
+ y: Symbol('y'),
15
+ y1: Symbol('y1'),
16
+ y2: Symbol('y2')
17
+ };
8
18
  const GROUP = Symbol('group');
9
- const FACET = Symbol('group');
19
+ const FACET = Symbol('facet');
10
20
  const DEFAULT_STACK_OPTIONS = {
11
21
  order: null,
12
22
  offset: null,
@@ -41,16 +51,16 @@ function stackXY(byDim, data, channels, options) {
41
51
  channels[`${byLow}`] === undefined &&
42
52
  channels[`${byHigh}`] === undefined) {
43
53
  // resolve all channels for easier computation below
44
- const resolvedData = data.map((d) => ({
45
- ...(isDataRecord(d) ? d : { __orig: d }),
46
- [`__${secondDim}`]: resolveChannel(secondDim, d, channels),
54
+ const resolvedData = indexData(data).map((d, i) => ({
55
+ ...(isDataRecord(d) ? d : { [RAW_VALUE]: d }),
56
+ [S[secondDim]]: resolveChannel(secondDim, d, channels),
47
57
  [GROUP]: groupBy === true ? 'G' : resolveChannel(groupBy, d, channels),
48
58
  [FACET]: groupFacetsBy.length > 0
49
59
  ? groupFacetsBy
50
60
  .map((channel) => String(resolveChannel(channel, d, channels)))
51
61
  .join('---')
52
62
  : 'F',
53
- [`__${byDim}`]: resolveChannel(byDim, d, channels)
63
+ [S[byDim]]: resolveChannel(byDim, d, channels)
54
64
  }));
55
65
  // the final data ends up here
56
66
  const out = [];
@@ -58,9 +68,53 @@ function stackXY(byDim, data, channels, options) {
58
68
  // in separate panels
59
69
  const groups = d3Groups(resolvedData, (d) => d[FACET]);
60
70
  for (const [, facetData] of groups) {
61
- // now we index the data on the second dimension, e.g. over x
62
- // when stacking over y
63
- const indexed = index(facetData, (d) => d[`__${secondDim}`], (d) => d[GROUP]);
71
+ // create a temporary dataset for stacking
72
+ // If we have a grouping channel (fill/stroke/z), build objects keyed by group value
73
+ // so that series identities remain consistent across the secondary dimension.
74
+ // This is required for offsets like 'wiggle' and 'inside-out'.
75
+ let keys;
76
+ const groupedBySecondDim = d3Groups(facetData, (d) => d[S[secondDim]]);
77
+ let stackData;
78
+ const hasUniqueGroups = groupBy !== true &&
79
+ groupedBySecondDim.every(([, items]) => {
80
+ const groupSet = new Set(items.map((d) => d[GROUP]));
81
+ return groupSet.size === items.length;
82
+ });
83
+ if (groupBy === true || !hasUniqueGroups) {
84
+ // Unit stacking: map each secondary-dimension bucket to an array of values.
85
+ // Series are positional (0..N-1) within each bucket.
86
+ let maxKeys = 0;
87
+ stackData = groupedBySecondDim.map(([k, items]) => {
88
+ const values = items
89
+ // keep original order within bucket; no stable series identity across buckets
90
+ .map((d) => ({ i: d[INDEX], v: d[S[byDim]] }));
91
+ if (values.length > maxKeys)
92
+ maxKeys = values.length;
93
+ return values;
94
+ });
95
+ keys = range(maxKeys);
96
+ }
97
+ else {
98
+ // Grouped stacking: keep consistent series identities using the group key
99
+ const keySet = new Set(facetData.map((d) => d[GROUP]));
100
+ stackData = groupedBySecondDim.map(([k, items]) => {
101
+ const obj = {};
102
+ items.forEach((d) => {
103
+ const key = d[GROUP];
104
+ // If duplicates exist for the same (secondDim, group) pair, sum values
105
+ // and keep the latest index for back-reference.
106
+ if (obj[key] == null)
107
+ obj[key] = { i: d[INDEX], v: d[S[byDim]] };
108
+ else
109
+ obj[key] = {
110
+ i: d[INDEX],
111
+ v: obj[key].v + d[S[byDim]]
112
+ };
113
+ });
114
+ return obj;
115
+ });
116
+ keys = Array.from(keySet);
117
+ }
64
118
  const stackOrder = (series) => {
65
119
  const f = STACK_ORDER[options.order || 'none'];
66
120
  return options.reverse ? f(series).reverse() : f(series);
@@ -68,35 +122,31 @@ function stackXY(byDim, data, channels, options) {
68
122
  // now stack the values for each index
69
123
  const series = stack()
70
124
  .order(stackOrder)
71
- .offset(STACK_OFFSET[options.offset])
72
- .keys(union(facetData.map((d) => d[GROUP])))
73
- .value(([, group], key) => (group.get(key) ? group.get(key)[`__${byDim}`] : 0))(indexed);
125
+ // Wiggle requires consistent series identities; fall back to 'center' for unit stacking
126
+ .offset(groupBy === true && options.offset === 'wiggle'
127
+ ? STACK_OFFSET['center']
128
+ : STACK_OFFSET[options.offset])
129
+ .keys(keys)
130
+ .value((d, key, i, data) => {
131
+ return d[key]?.v;
132
+ })(stackData);
74
133
  // and combine it all back into a flat array
75
134
  const newData = series
76
- .map((values) => {
77
- const groupKey = values.key;
78
- return values
79
- .filter((d) => d.data[1].get(groupKey))
80
- .map((d) => {
81
- const datum = d.data[1].get(groupKey);
82
- // cleanup our internal keys
83
- delete datum[GROUP];
84
- delete datum[FACET];
85
- return { ...datum, [`__${byLow}`]: d[0], [`__${byHigh}`]: d[1] };
86
- });
87
- })
88
- .flat(1);
135
+ .flatMap((s) => s.map((d) => [d[0], d[1], d.data[s.key]?.i]))
136
+ .filter((d) => d[2] !== undefined)
137
+ .map((d) => ({ [S[byLow]]: d[0], [S[byHigh]]: d[1], ...resolvedData[d[2]] }));
138
+ out.push(...newData);
89
139
  // which we then add to the output data
90
- out.push(newData);
140
+ // out.push(...newData);
91
141
  }
92
142
  return {
93
- data: out.flat(1),
143
+ data: out,
94
144
  ...channels,
95
145
  [byDim]: undefined,
96
146
  ...(typeof channels[byDim] === 'string' && !channels[`__${byDim}_origField`]
97
147
  ? { [`__${byDim}_origField`]: channels[byDim] }
98
148
  : {}),
99
- ...{ [byLow]: `__${byLow}`, [byHigh]: `__${byHigh}` }
149
+ ...{ [byLow]: S[byLow], [byHigh]: S[byHigh] }
100
150
  };
101
151
  }
102
152
  return { data, ...channels };
@@ -113,12 +163,6 @@ function applyDefaults(opts) {
113
163
  }
114
164
  return { ...DEFAULT_STACK_OPTIONS, ...opts };
115
165
  }
116
- const X = Symbol('x');
117
- const X1 = Symbol('x1');
118
- const X2 = Symbol('x2');
119
- const Y = Symbol('y');
120
- const Y1 = Symbol('y1');
121
- const Y2 = Symbol('y2');
122
166
  function stackMosaic({ data, x, y, value, fx, fy, ...rest }, { outer, inner }, { x: xOpt, y: yOpt } = {}) {
123
167
  const out = [];
124
168
  const { data: filtered, ...restArgs } = sort(filter({ data, x, y, value, fx, fy, ...rest }));
@@ -137,10 +181,10 @@ function stackMosaic({ data, x, y, value, fx, fy, ...rest }, { outer, inner }, {
137
181
  let outerPos = 0;
138
182
  const outerChannel = outer === 'x' ? x : y;
139
183
  const innerChannel = inner === 'x' ? x : y;
140
- const outerSym1 = outer === 'x' ? X1 : Y1;
141
- const outerSym2 = outer === 'x' ? X2 : Y2;
142
- const innerSym1 = inner === 'x' ? X1 : Y1;
143
- const innerSym2 = inner === 'x' ? X2 : Y2;
184
+ const outerSym1 = outer === 'x' ? S.x1 : S.y1;
185
+ const outerSym2 = outer === 'x' ? S.x2 : S.y2;
186
+ const innerSym1 = inner === 'x' ? S.x1 : S.y1;
187
+ const innerSym2 = inner === 'x' ? S.x2 : S.y2;
144
188
  const outerOpt = outer === 'x' ? xOpt : yOpt;
145
189
  const innerOpt = inner === 'x' ? xOpt : yOpt;
146
190
  const grouped = d3Groups(data, (d) => resolveProp(d[outerChannel], d));
@@ -165,13 +209,24 @@ function stackMosaic({ data, x, y, value, fx, fy, ...rest }, { outer, inner }, {
165
209
  result[outerSym2] = normO2;
166
210
  result[innerSym1] = normI1;
167
211
  result[innerSym2] = normI2;
168
- result[X] = (result[X1] + result[X2]) / 2;
169
- result[Y] = (result[Y1] + result[Y2]) / 2;
212
+ result[S.x] = (result[S.x1] + result[S.x2]) / 2;
213
+ result[S.y] = (result[S.y1] + result[S.y2]) / 2;
170
214
  out.push(result);
171
215
  });
172
216
  });
173
217
  });
174
- return { ...rest, fx, fy, data: out, x: X, x1: X1, x2: X2, y: Y, y1: Y1, y2: Y2 };
218
+ return {
219
+ ...rest,
220
+ fx,
221
+ fy,
222
+ data: out,
223
+ x: S.x,
224
+ x1: S.x1,
225
+ x2: S.x2,
226
+ y: S.y,
227
+ y1: S.y1,
228
+ y2: S.y2
229
+ };
175
230
  }
176
231
  export function stackMosaicX(args, opts) {
177
232
  return stackMosaic(args, { outer: 'x', inner: 'y' }, opts);