svelteplot 0.6.0 → 0.7.0-pr-274.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 (87) hide show
  1. package/LICENSE.md +19 -1
  2. package/dist/Mark.svelte +7 -0
  3. package/dist/Mark.svelte.d.ts +5 -4
  4. package/dist/Plot.svelte +10 -2
  5. package/dist/constants.d.ts +1 -1
  6. package/dist/core/FacetAxes.svelte +2 -2
  7. package/dist/core/Plot.svelte +7 -11
  8. package/dist/helpers/colors.d.ts +9 -12
  9. package/dist/helpers/facets.d.ts +1 -1
  10. package/dist/helpers/getBaseStyles.d.ts +4 -4
  11. package/dist/helpers/getBaseStyles.js +8 -0
  12. package/dist/helpers/index.d.ts +3 -3
  13. package/dist/helpers/reduce.d.ts +1 -1
  14. package/dist/helpers/removeIdenticalLines.js +3 -2
  15. package/dist/helpers/scales.d.ts +7 -7
  16. package/dist/helpers/scales.js +2 -2
  17. package/dist/helpers/symbols.d.ts +2 -2
  18. package/dist/helpers/time.d.ts +3 -3
  19. package/dist/helpers/typeChecks.d.ts +8 -8
  20. package/dist/helpers/wordwrap.d.ts +14 -0
  21. package/dist/helpers/wordwrap.js +129 -0
  22. package/dist/marks/Area.svelte.d.ts +5 -4
  23. package/dist/marks/AreaX.svelte.d.ts +6 -5
  24. package/dist/marks/Arrow.svelte.d.ts +5 -4
  25. package/dist/marks/AxisX.svelte +2 -1
  26. package/dist/marks/AxisX.svelte.d.ts +7 -5
  27. package/dist/marks/AxisY.svelte.d.ts +6 -5
  28. package/dist/marks/BarX.svelte.d.ts +5 -4
  29. package/dist/marks/BarY.svelte.d.ts +5 -4
  30. package/dist/marks/BollingerX.svelte.d.ts +2 -76
  31. package/dist/marks/BollingerY.svelte.d.ts +2 -76
  32. package/dist/marks/BoxY.svelte.d.ts +6 -68
  33. package/dist/marks/Brush.svelte +44 -4
  34. package/dist/marks/Cell.svelte.d.ts +5 -4
  35. package/dist/marks/CustomMark.svelte.d.ts +2 -84
  36. package/dist/marks/CustomMarkHTML.svelte.d.ts +1 -1
  37. package/dist/marks/DifferenceY.svelte.d.ts +7 -69
  38. package/dist/marks/Dot.svelte.d.ts +5 -4
  39. package/dist/marks/DotX.svelte.d.ts +6 -5
  40. package/dist/marks/DotY.svelte.d.ts +6 -5
  41. package/dist/marks/Geo.svelte.d.ts +5 -4
  42. package/dist/marks/GridX.svelte.d.ts +5 -4
  43. package/dist/marks/GridY.svelte.d.ts +5 -4
  44. package/dist/marks/Image.svelte.d.ts +2 -75
  45. package/dist/marks/Line.svelte +1 -1
  46. package/dist/marks/Line.svelte.d.ts +6 -5
  47. package/dist/marks/LineX.svelte.d.ts +7 -6
  48. package/dist/marks/LineY.svelte.d.ts +7 -6
  49. package/dist/marks/Link.svelte.d.ts +5 -4
  50. package/dist/marks/Rect.svelte.d.ts +5 -4
  51. package/dist/marks/RuleX.svelte.d.ts +5 -4
  52. package/dist/marks/RuleY.svelte.d.ts +5 -4
  53. package/dist/marks/Spike.svelte.d.ts +6 -5
  54. package/dist/marks/Text.svelte.d.ts +7 -6
  55. package/dist/marks/TickX.svelte.d.ts +5 -4
  56. package/dist/marks/TickY.svelte.d.ts +5 -4
  57. package/dist/marks/Vector.svelte.d.ts +5 -4
  58. package/dist/marks/WaffleX.svelte +115 -0
  59. package/dist/marks/WaffleX.svelte.d.ts +19 -0
  60. package/dist/marks/WaffleY.svelte +119 -0
  61. package/dist/marks/WaffleY.svelte.d.ts +19 -0
  62. package/dist/marks/helpers/Anchor.svelte.d.ts +5 -5
  63. package/dist/marks/helpers/BaseAxisX.svelte +31 -3
  64. package/dist/marks/helpers/BaseAxisX.svelte.d.ts +2 -0
  65. package/dist/marks/helpers/MarkerPath.svelte.d.ts +2 -164
  66. package/dist/marks/helpers/RectPath.svelte.d.ts +3 -65
  67. package/dist/marks/helpers/waffle.d.ts +64 -0
  68. package/dist/marks/helpers/waffle.js +162 -0
  69. package/dist/marks/index.d.ts +3 -1
  70. package/dist/marks/index.js +3 -1
  71. package/dist/transforms/bollinger.d.ts +1 -69
  72. package/dist/transforms/centroid.d.ts +1 -4
  73. package/dist/transforms/group.d.ts +4 -12
  74. package/dist/transforms/group.js +11 -5
  75. package/dist/transforms/interval.d.ts +2 -128
  76. package/dist/transforms/recordize.d.ts +4 -7
  77. package/dist/transforms/select.d.ts +7 -448
  78. package/dist/transforms/sort.d.ts +5 -253
  79. package/dist/transforms/stack.d.ts +3 -23
  80. package/dist/transforms/window.d.ts +2 -134
  81. package/dist/types/data.d.ts +1 -0
  82. package/dist/types/mark.d.ts +1 -1
  83. package/dist/types/plot.d.ts +19 -5
  84. package/dist/types/scale.d.ts +8 -0
  85. package/dist/ui/ExamplesPagePreview.svelte +148 -0
  86. package/dist/ui/ExamplesPagePreview.svelte.d.ts +13 -0
  87. package/package.json +130 -128
@@ -1,168 +1,6 @@
1
- import { type MarkerShape } from './Marker.svelte';
2
- import type { ConstantAccessor, DataRecord, Mark, PlotScales } from '../../types/index.js';
1
+ import type { DataRecord } from '../../types/index.js';
3
2
  declare class __sveltets_Render<Datum extends DataRecord> {
4
- props(): Partial<{
5
- filter: ConstantAccessor<boolean, Datum>;
6
- facet: "auto" | "include" | "exclude";
7
- fx: import("../../types/index.js").ChannelAccessor<Datum>;
8
- fy: import("../../types/index.js").ChannelAccessor<Datum>;
9
- dx: ConstantAccessor<number, Datum>;
10
- dy: ConstantAccessor<number, Datum>;
11
- dodgeX: import("../../transforms/dodge").DodgeXOptions;
12
- dodgeY: import("../../transforms/dodge").DodgeYOptions;
13
- fill: import("../../types/index.js").ChannelAccessor<Datum>;
14
- fillOpacity: ConstantAccessor<number, Datum>;
15
- sort: ((a: import("../../types/index.js").RawValue, b: import("../../types/index.js").RawValue) => number) | {
16
- channel: string;
17
- order?: "ascending" | "descending";
18
- } | ConstantAccessor<import("../../types/index.js").RawValue, Datum>;
19
- stroke: import("../../types/index.js").ChannelAccessor<Datum>;
20
- strokeWidth: ConstantAccessor<number, Datum>;
21
- strokeOpacity: ConstantAccessor<number, Datum>;
22
- strokeLinejoin: ConstantAccessor<import("csstype").Property.StrokeLinejoin, Datum>;
23
- strokeLinecap: ConstantAccessor<import("csstype").Property.StrokeLinecap, Datum>;
24
- strokeMiterlimit: ConstantAccessor<number, Datum>;
25
- opacity: import("../../types/index.js").ChannelAccessor<Datum>;
26
- strokeDasharray: ConstantAccessor<string, Datum>;
27
- strokeDashoffset: ConstantAccessor<number, Datum>;
28
- mixBlendMode: ConstantAccessor<import("csstype").Property.MixBlendMode, Datum>;
29
- clipPath: string;
30
- imageFilter: ConstantAccessor<string, Datum>;
31
- shapeRendering: ConstantAccessor<import("csstype").Property.ShapeRendering, Datum>;
32
- paintOrder: ConstantAccessor<string, Datum>;
33
- onclick: import("svelte/elements").MouseEventHandler<SVGPathElement>;
34
- ondblclick: import("svelte/elements").MouseEventHandler<SVGPathElement>;
35
- onmouseup: import("svelte/elements").MouseEventHandler<SVGPathElement>;
36
- onmousedown: import("svelte/elements").MouseEventHandler<SVGPathElement>;
37
- onmouseenter: import("svelte/elements").MouseEventHandler<SVGPathElement>;
38
- onmousemove: import("svelte/elements").MouseEventHandler<SVGPathElement>;
39
- onmouseleave: import("svelte/elements").MouseEventHandler<SVGPathElement>;
40
- onmouseout: import("svelte/elements").MouseEventHandler<SVGPathElement>;
41
- onmouseover: import("svelte/elements").MouseEventHandler<SVGPathElement>;
42
- onpointercancel: import("svelte/elements").MouseEventHandler<SVGPathElement>;
43
- onpointerdown: import("svelte/elements").MouseEventHandler<SVGPathElement>;
44
- onpointerup: import("svelte/elements").MouseEventHandler<SVGPathElement>;
45
- onpointerenter: import("svelte/elements").MouseEventHandler<SVGPathElement>;
46
- onpointerleave: import("svelte/elements").MouseEventHandler<SVGPathElement>;
47
- onpointermove: import("svelte/elements").MouseEventHandler<SVGPathElement>;
48
- onpointerover: import("svelte/elements").MouseEventHandler<SVGPathElement>;
49
- onpointerout: import("svelte/elements").MouseEventHandler<SVGPathElement>;
50
- ondrag: import("svelte/elements").MouseEventHandler<SVGPathElement>;
51
- ondrop: import("svelte/elements").MouseEventHandler<SVGPathElement>;
52
- ondragstart: import("svelte/elements").MouseEventHandler<SVGPathElement>;
53
- ondragenter: import("svelte/elements").MouseEventHandler<SVGPathElement>;
54
- ondragleave: import("svelte/elements").MouseEventHandler<SVGPathElement>;
55
- ondragover: import("svelte/elements").MouseEventHandler<SVGPathElement>;
56
- ondragend: import("svelte/elements").MouseEventHandler<SVGPathElement>;
57
- ontouchstart: import("svelte/elements").MouseEventHandler<SVGPathElement>;
58
- ontouchmove: import("svelte/elements").MouseEventHandler<SVGPathElement>;
59
- ontouchend: import("svelte/elements").MouseEventHandler<SVGPathElement>;
60
- ontouchcancel: import("svelte/elements").MouseEventHandler<SVGPathElement>;
61
- oncontextmenu: import("svelte/elements").MouseEventHandler<SVGPathElement>;
62
- onwheel: import("svelte/elements").MouseEventHandler<SVGPathElement>;
63
- class: string;
64
- style: string;
65
- cursor: ConstantAccessor<import("csstype").Property.Cursor, Datum>;
66
- }> & {
67
- /**
68
- * the datum associated with this path, usually the first
69
- * element of the data array group
70
- */
71
- datum: Datum;
72
- /**
73
- * the marker shape to use at the start of the path, defaults to
74
- * circle
75
- */
76
- markerStart?: boolean | MarkerShape;
77
- /**
78
- * the marker shape to use at the middle of the path, defaults to circle
79
- */
80
- markerMid?: boolean | MarkerShape;
81
- /**
82
- * the marker shape to use at the end of the path, defaults to circle
83
- */
84
- markerEnd?: boolean | MarkerShape;
85
- /**
86
- * shorthand for setting all markers
87
- */
88
- marker?: boolean | MarkerShape;
89
- /**
90
- * path string
91
- */
92
- d: string;
93
- style: string;
94
- startOffset: string;
95
- textStyle: string;
96
- textStyleClass?: string | null;
97
- text: string;
98
- transform: string;
99
- color: string;
100
- strokeWidth: ConstantAccessor<number>;
101
- mark: Mark<Partial<{
102
- filter: ConstantAccessor<boolean, Datum>;
103
- facet: "auto" | "include" | "exclude";
104
- fx: import("../../types/index.js").ChannelAccessor<Datum>;
105
- fy: import("../../types/index.js").ChannelAccessor<Datum>;
106
- dx: ConstantAccessor<number, Datum>;
107
- dy: ConstantAccessor<number, Datum>;
108
- dodgeX: import("../../transforms/dodge").DodgeXOptions;
109
- dodgeY: import("../../transforms/dodge").DodgeYOptions;
110
- fill: import("../../types/index.js").ChannelAccessor<Datum>;
111
- fillOpacity: ConstantAccessor<number, Datum>;
112
- sort: ((a: import("../../types/index.js").RawValue, b: import("../../types/index.js").RawValue) => number) | {
113
- channel: string;
114
- order?: "ascending" | "descending";
115
- } | ConstantAccessor<import("../../types/index.js").RawValue, Datum>;
116
- stroke: import("../../types/index.js").ChannelAccessor<Datum>;
117
- strokeWidth: ConstantAccessor<number, Datum>;
118
- strokeOpacity: ConstantAccessor<number, Datum>;
119
- strokeLinejoin: ConstantAccessor<import("csstype").Property.StrokeLinejoin, Datum>;
120
- strokeLinecap: ConstantAccessor<import("csstype").Property.StrokeLinecap, Datum>;
121
- strokeMiterlimit: ConstantAccessor<number, Datum>;
122
- opacity: import("../../types/index.js").ChannelAccessor<Datum>;
123
- strokeDasharray: ConstantAccessor<string, Datum>;
124
- strokeDashoffset: ConstantAccessor<number, Datum>;
125
- mixBlendMode: ConstantAccessor<import("csstype").Property.MixBlendMode, Datum>;
126
- clipPath: string;
127
- imageFilter: ConstantAccessor<string, Datum>;
128
- shapeRendering: ConstantAccessor<import("csstype").Property.ShapeRendering, Datum>;
129
- paintOrder: ConstantAccessor<string, Datum>;
130
- onclick: import("svelte/elements").MouseEventHandler<SVGPathElement>;
131
- ondblclick: import("svelte/elements").MouseEventHandler<SVGPathElement>;
132
- onmouseup: import("svelte/elements").MouseEventHandler<SVGPathElement>;
133
- onmousedown: import("svelte/elements").MouseEventHandler<SVGPathElement>;
134
- onmouseenter: import("svelte/elements").MouseEventHandler<SVGPathElement>;
135
- onmousemove: import("svelte/elements").MouseEventHandler<SVGPathElement>;
136
- onmouseleave: import("svelte/elements").MouseEventHandler<SVGPathElement>;
137
- onmouseout: import("svelte/elements").MouseEventHandler<SVGPathElement>;
138
- onmouseover: import("svelte/elements").MouseEventHandler<SVGPathElement>;
139
- onpointercancel: import("svelte/elements").MouseEventHandler<SVGPathElement>;
140
- onpointerdown: import("svelte/elements").MouseEventHandler<SVGPathElement>;
141
- onpointerup: import("svelte/elements").MouseEventHandler<SVGPathElement>;
142
- onpointerenter: import("svelte/elements").MouseEventHandler<SVGPathElement>;
143
- onpointerleave: import("svelte/elements").MouseEventHandler<SVGPathElement>;
144
- onpointermove: import("svelte/elements").MouseEventHandler<SVGPathElement>;
145
- onpointerover: import("svelte/elements").MouseEventHandler<SVGPathElement>;
146
- onpointerout: import("svelte/elements").MouseEventHandler<SVGPathElement>;
147
- ondrag: import("svelte/elements").MouseEventHandler<SVGPathElement>;
148
- ondrop: import("svelte/elements").MouseEventHandler<SVGPathElement>;
149
- ondragstart: import("svelte/elements").MouseEventHandler<SVGPathElement>;
150
- ondragenter: import("svelte/elements").MouseEventHandler<SVGPathElement>;
151
- ondragleave: import("svelte/elements").MouseEventHandler<SVGPathElement>;
152
- ondragover: import("svelte/elements").MouseEventHandler<SVGPathElement>;
153
- ondragend: import("svelte/elements").MouseEventHandler<SVGPathElement>;
154
- ontouchstart: import("svelte/elements").MouseEventHandler<SVGPathElement>;
155
- ontouchmove: import("svelte/elements").MouseEventHandler<SVGPathElement>;
156
- ontouchend: import("svelte/elements").MouseEventHandler<SVGPathElement>;
157
- ontouchcancel: import("svelte/elements").MouseEventHandler<SVGPathElement>;
158
- oncontextmenu: import("svelte/elements").MouseEventHandler<SVGPathElement>;
159
- onwheel: import("svelte/elements").MouseEventHandler<SVGPathElement>;
160
- class: string;
161
- style: string;
162
- cursor: ConstantAccessor<import("csstype").Property.Cursor, Datum>;
163
- }>>;
164
- scales: PlotScales;
165
- };
3
+ props(): any;
166
4
  events(): {};
167
5
  slots(): {};
168
6
  bindings(): "";
@@ -1,77 +1,15 @@
1
- import type { BaseRectMarkProps } from '../../types/mark.js';
1
+ import type { BaseMarkProps, BaseRectMarkProps } from '../../types/mark.js';
2
2
  import type { DataRecord, ScaledDataRecord } from '../../types/data.js';
3
3
  import type { UsedScales } from '../../types/index.js';
4
4
  declare class __sveltets_Render<Datum extends DataRecord> {
5
5
  props(): {
6
- datum: ScaledDataRecord<Datum>;
6
+ datum: ScaledDataRecord<Datum_1>;
7
7
  class: string | null;
8
8
  x: number;
9
9
  y: number;
10
10
  width: number;
11
11
  height: number;
12
- options: BaseRectMarkProps<Datum> & Partial<{
13
- filter: import("../../types/index.js").ConstantAccessor<boolean, Datum>;
14
- facet: "auto" | "include" | "exclude";
15
- fx: import("../../types/index.js").ChannelAccessor<Datum>;
16
- fy: import("../../types/index.js").ChannelAccessor<Datum>;
17
- dx: import("../../types/index.js").ConstantAccessor<number, Datum>;
18
- dy: import("../../types/index.js").ConstantAccessor<number, Datum>;
19
- dodgeX: import("../../transforms/dodge.js").DodgeXOptions;
20
- dodgeY: import("../../transforms/dodge.js").DodgeYOptions;
21
- fill: import("../../types/index.js").ChannelAccessor<Datum>;
22
- fillOpacity: import("../../types/index.js").ConstantAccessor<number, Datum>;
23
- sort: ((a: import("../../types/data.js").RawValue, b: import("../../types/data.js").RawValue) => number) | {
24
- channel: string;
25
- order?: "ascending" | "descending";
26
- } | import("../../types/index.js").ConstantAccessor<import("../../types/data.js").RawValue, Datum>;
27
- stroke: import("../../types/index.js").ChannelAccessor<Datum>;
28
- strokeWidth: import("../../types/index.js").ConstantAccessor<number, Datum>;
29
- strokeOpacity: import("../../types/index.js").ConstantAccessor<number, Datum>;
30
- strokeLinejoin: import("../../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinejoin, Datum>;
31
- strokeLinecap: import("../../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinecap, Datum>;
32
- strokeMiterlimit: import("../../types/index.js").ConstantAccessor<number, Datum>;
33
- opacity: import("../../types/index.js").ChannelAccessor<Datum>;
34
- strokeDasharray: import("../../types/index.js").ConstantAccessor<string, Datum>;
35
- strokeDashoffset: import("../../types/index.js").ConstantAccessor<number, Datum>;
36
- mixBlendMode: import("../../types/index.js").ConstantAccessor<import("csstype").Property.MixBlendMode, Datum>;
37
- clipPath: string;
38
- imageFilter: import("../../types/index.js").ConstantAccessor<string, Datum>;
39
- shapeRendering: import("../../types/index.js").ConstantAccessor<import("csstype").Property.ShapeRendering, Datum>;
40
- paintOrder: import("../../types/index.js").ConstantAccessor<string, Datum>;
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;
73
- cursor: import("../../types/index.js").ConstantAccessor<import("csstype").Property.Cursor, Datum>;
74
- }>;
12
+ options: BaseRectMarkProps<Datum_1> & BaseMarkProps<Datum_1>;
75
13
  /**
76
14
  * By default, the `inset` property is applied to all four insets. Mark components
77
15
  * can tweak this behavior for insetTop and insetBottom by setting the
@@ -0,0 +1,64 @@
1
+ /**
2
+ * This implementation is based on the waffle chart implementation in Observable Plot!
3
+ * https://github.com/observablehq/plot/blob/main/src/marks/waffle.js
4
+ *
5
+ * Kept the comments from the original implementation for clarity.
6
+ */
7
+ import type { Snippet } from 'svelte';
8
+ import type { StackOptions } from '../../transforms/stack';
9
+ import type { BorderRadius, ConstantAccessor, PlotScales, ScaledDataRecord } from '../../types';
10
+ type Point = [number, number];
11
+ export type WaffleOptions<T> = {
12
+ /**
13
+ * the quantity represented by each square in the waffle chart, defaults to 1
14
+ */
15
+ unit?: number;
16
+ /**
17
+ * the number of cells per row (or column); defaults to undefined
18
+ */
19
+ multiple?: number;
20
+ /**
21
+ * the separation between adjacent cells, in pixels; defaults to 1
22
+ */
23
+ gap?: number;
24
+ /**
25
+ * whether to round values to avoid partial cells; defaults to false
26
+ */
27
+ round?: boolean;
28
+ stack?: StackOptions;
29
+ borderRadius?: ConstantAccessor<BorderRadius, T>;
30
+ symbol?: Snippet<[
31
+ {
32
+ x: number;
33
+ y: number;
34
+ width: number;
35
+ height: number;
36
+ style: string | null;
37
+ styleClass: string | null;
38
+ datum: T;
39
+ }
40
+ ]>;
41
+ };
42
+ type WaffleProps = {
43
+ pattern: {
44
+ id: string;
45
+ patternUnits: 'userSpaceOnUse';
46
+ width: number;
47
+ height: number;
48
+ };
49
+ rect: {
50
+ x: number;
51
+ y: number;
52
+ width: number;
53
+ height: number;
54
+ };
55
+ path: {
56
+ fill: string;
57
+ transform: string;
58
+ d: string;
59
+ };
60
+ };
61
+ export declare function wafflePolygon(y: 'x' | 'y', options: WaffleOptions, scales: PlotScales): (d: ScaledDataRecord) => WaffleProps;
62
+ export declare function wafflePoints(i1: number, i2: number, columns: number): Point[];
63
+ export declare function maybeRound(round: boolean | ((x: number) => number) | undefined): (x: number) => number;
64
+ export {};
@@ -0,0 +1,162 @@
1
+ /**
2
+ * This implementation is based on the waffle chart implementation in Observable Plot!
3
+ * https://github.com/observablehq/plot/blob/main/src/marks/waffle.js
4
+ *
5
+ * Kept the comments from the original implementation for clarity.
6
+ */
7
+ import { getPatternId } from '../../helpers/getBaseStyles';
8
+ export function wafflePolygon(y, options, scales) {
9
+ const x = y === 'y' ? 'x' : 'y';
10
+ const y1 = `${y}1`;
11
+ const y2 = `${y}2`;
12
+ const xScale = scales[x];
13
+ const yScale = scales[y];
14
+ const barwidth = xScale.fn.bandwidth();
15
+ const { unit = 1, gap = 1 } = options;
16
+ const round = maybeRound(options.round);
17
+ // The length of a unit along y in pixels.
18
+ const scale = Math.abs(yScale.fn(unit) - yScale.fn(0));
19
+ // The number of cells on each row (or column) of the waffle.
20
+ const multiple = options.multiple ?? Math.max(1, Math.floor(Math.sqrt(barwidth / scale)));
21
+ // The outer size of each square cell, in pixels, including the gap.
22
+ const cx = Math.min(barwidth / multiple, scale * multiple);
23
+ const cy = scale * multiple;
24
+ // The reference position.
25
+ const tx = (barwidth - multiple * cx) / 2;
26
+ const transform = y === 'y' ? ([x, y]) => [x * cx, -y * cy] : ([x, y]) => [y * cy, x * cx];
27
+ // const mx = typeof x0 === 'function' ? (i) => x0(i) - barwidth / 2 : () => x0;
28
+ const [ix, iy] = y === 'y' ? [0, 1] : [1, 0];
29
+ const y0 = yScale.fn(0);
30
+ const mx = -barwidth / 2;
31
+ return (d) => {
32
+ const y1val = d.resolved[y1];
33
+ const y2val = d.resolved[y2];
34
+ const P = wafflePoints(round(y1val / unit), round(y2val / unit), multiple).map(transform);
35
+ P.pop();
36
+ const id = getPatternId();
37
+ const pos = [d[x] + tx + mx, y0];
38
+ return {
39
+ pattern: {
40
+ id,
41
+ patternUnits: 'userSpaceOnUse',
42
+ width: cx,
43
+ height: cy
44
+ },
45
+ rect: {
46
+ x: gap / 2,
47
+ y: gap / 2,
48
+ width: cx - gap,
49
+ height: cy - gap
50
+ },
51
+ path: {
52
+ fill: `url(#${id})`,
53
+ transform: `translate(${pos[ix]},${pos[iy]})`,
54
+ d: `M${P.join('L')}Z`
55
+ }
56
+ };
57
+ // return `M${P.join('L')}Z`;
58
+ };
59
+ // const points = wafflePoints(i1, i2, columns);
60
+ // return dimension === 'x' ? points : points.map(([x, y]: Point): Point => [y, x]);
61
+ }
62
+ export function wafflePoints(i1, i2, columns) {
63
+ if (i2 < i1)
64
+ return wafflePoints(i2, i1, columns); // ensure i1 <= i2
65
+ if (i1 < 0)
66
+ return wafflePointsOffset(i1, i2, columns, Math.ceil(-Math.min(i1, i2) / columns)); // ensure i1 >= 0
67
+ const x1f = Math.floor(i1 % columns);
68
+ const x1c = Math.ceil(i1 % columns);
69
+ const x2f = Math.floor(i2 % columns);
70
+ const x2c = Math.ceil(i2 % columns);
71
+ const y1f = Math.floor(i1 / columns);
72
+ const y1c = Math.ceil(i1 / columns);
73
+ const y2f = Math.floor(i2 / columns);
74
+ const y2c = Math.ceil(i2 / columns);
75
+ const points = [];
76
+ if (y2c > y1c)
77
+ points.push([0, y1c]);
78
+ points.push([x1f, y1c], [x1f, y1f + (i1 % 1)], [x1c, y1f + (i1 % 1)]);
79
+ if (!(i1 % columns > columns - 1)) {
80
+ points.push([x1c, y1f]);
81
+ if (y2f > y1f)
82
+ points.push([columns, y1f]);
83
+ }
84
+ if (y2f > y1f)
85
+ points.push([columns, y2f]);
86
+ points.push([x2c, y2f], [x2c, y2f + (i2 % 1)], [x2f, y2f + (i2 % 1)]);
87
+ if (!(i2 % columns < 1)) {
88
+ points.push([x2f, y2c]);
89
+ if (y2c > y1c)
90
+ points.push([0, y2c]);
91
+ }
92
+ points.push(waffleCentroid(i1, i2, columns));
93
+ return points;
94
+ }
95
+ /**
96
+ * Compute waffle points when indices start in negative rows by applying a row offset.
97
+ * - Shifts both indices down by `k` rows (adding `k * columns`) so they are non-negative,
98
+ * delegates to `wafflePoints`, then translates the resulting points back up by `k` on y.
99
+ * - `k` is the number of rows of vertical offset applied.
100
+ */
101
+ function wafflePointsOffset(i1, i2, columns, k) {
102
+ return wafflePoints(i1 + k * columns, i2 + k * columns, columns).map(([x, y]) => [x, y - k]);
103
+ }
104
+ /**
105
+ * Centroid of the waffle region representing the interval [i1, i2).
106
+ * Chooses a strategy based on how many rows the interval spans:
107
+ * - Single row: delegate to `waffleRowCentroid`.
108
+ * - Two rows: if the projected columns overlap, return the midpoint of the overlap;
109
+ * otherwise, return the centroid of the larger partial row.
110
+ * - >= 3 rows: return the center column and halfway between the middle rows.
111
+ */
112
+ function waffleCentroid(i1, i2, columns) {
113
+ const r = Math.floor(i2 / columns) - Math.floor(i1 / columns);
114
+ return r === 0
115
+ ? // Single row
116
+ waffleRowCentroid(i1, i2, columns)
117
+ : r === 1
118
+ ? // Two incomplete rows; use the midpoint of their overlap if any, otherwise the larger row
119
+ Math.floor(i2 % columns) > Math.ceil(i1 % columns)
120
+ ? [(Math.floor(i2 % columns) + Math.ceil(i1 % columns)) / 2, Math.floor(i2 / columns)]
121
+ : i2 % columns > columns - (i1 % columns)
122
+ ? waffleRowCentroid(i2 - (i2 % columns), i2, columns)
123
+ : waffleRowCentroid(i1, columns * Math.ceil(i1 / columns), columns)
124
+ : // At least one full row; take the midpoint of all the rows that include the middle
125
+ [columns / 2, (Math.round(i1 / columns) + Math.round(i2 / columns)) / 2];
126
+ }
127
+ /**
128
+ * Centroid of a waffle segment constrained to a single row.
129
+ * Cases:
130
+ * - c === 0: both endpoints fall into the same cell; center on x, average fractional y.
131
+ * - c === 1: two adjacent partial cells; use the overlap center if > 0.5 cell,
132
+ * otherwise the center of the larger partial cell.
133
+ * - c >= 2: at least one full cell between; x is the midpoint of full cells,
134
+ * y is the row center (0.5) if there’s a full cell spanned, otherwise average fractional y.
135
+ */
136
+ function waffleRowCentroid(i1, i2, columns) {
137
+ const c = Math.floor(i2) - Math.floor(i1);
138
+ return c === 0
139
+ ? // Single cell
140
+ [Math.floor(i1 % columns) + 0.5, Math.floor(i1 / columns) + (((i1 + i2) / 2) % 1)]
141
+ : c === 1
142
+ ? // Two incomplete cells; use the overlap if large enough, otherwise use the largest
143
+ (i2 % 1) - (i1 % 1) > 0.5
144
+ ? [Math.ceil(i1 % columns), Math.floor(i2 / columns) + ((i1 % 1) + (i2 % 1)) / 2]
145
+ : i2 % 1 > 1 - (i1 % 1)
146
+ ? [Math.floor(i2 % columns) + 0.5, Math.floor(i2 / columns) + (i2 % 1) / 2]
147
+ : [Math.floor(i1 % columns) + 0.5, Math.floor(i1 / columns) + (1 + (i1 % 1)) / 2]
148
+ : // At least one full cell; take the midpoint
149
+ [
150
+ Math.ceil(i1 % columns) + Math.ceil(Math.floor(i2) - Math.ceil(i1)) / 2,
151
+ Math.floor(i1 / columns) + (i2 >= 1 + i1 ? 0.5 : ((i1 + i2) / 2) % 1)
152
+ ];
153
+ }
154
+ export function maybeRound(round) {
155
+ if (round === undefined || round === false)
156
+ return Number;
157
+ if (round === true)
158
+ return Math.round;
159
+ if (typeof round !== 'function')
160
+ throw new Error(`invalid round: ${round}`);
161
+ return round;
162
+ }
@@ -33,7 +33,6 @@ export { default as LineX } from './LineX.svelte';
33
33
  export { default as LineY } from './LineY.svelte';
34
34
  export { default as Link } from './Link.svelte';
35
35
  export { default as Pointer } from './Pointer.svelte';
36
- export { default as Vector } from './Vector.svelte';
37
36
  export { default as Rect } from './Rect.svelte';
38
37
  export { default as RectX } from './RectX.svelte';
39
38
  export { default as RectY } from './RectY.svelte';
@@ -46,6 +45,9 @@ export { default as Spike } from './Spike.svelte';
46
45
  export { default as Text } from './Text.svelte';
47
46
  export { default as TickX } from './TickX.svelte';
48
47
  export { default as TickY } from './TickY.svelte';
48
+ export { default as Vector } from './Vector.svelte';
49
+ export { default as WaffleX } from './WaffleX.svelte';
50
+ export { default as WaffleY } from './WaffleY.svelte';
49
51
  export { default as ColorLegend } from './ColorLegend.svelte';
50
52
  export { default as HTMLTooltip } from './HTMLTooltip.svelte';
51
53
  export { default as SymbolLegend } from './SymbolLegend.svelte';
@@ -33,7 +33,6 @@ export { default as LineX } from './LineX.svelte';
33
33
  export { default as LineY } from './LineY.svelte';
34
34
  export { default as Link } from './Link.svelte';
35
35
  export { default as Pointer } from './Pointer.svelte';
36
- export { default as Vector } from './Vector.svelte';
37
36
  export { default as Rect } from './Rect.svelte';
38
37
  export { default as RectX } from './RectX.svelte';
39
38
  export { default as RectY } from './RectY.svelte';
@@ -46,6 +45,9 @@ export { default as Spike } from './Spike.svelte';
46
45
  export { default as Text } from './Text.svelte';
47
46
  export { default as TickX } from './TickX.svelte';
48
47
  export { default as TickY } from './TickY.svelte';
48
+ export { default as Vector } from './Vector.svelte';
49
+ export { default as WaffleX } from './WaffleX.svelte';
50
+ export { default as WaffleY } from './WaffleY.svelte';
49
51
  // HTML marks
50
52
  export { default as ColorLegend } from './ColorLegend.svelte';
51
53
  export { default as HTMLTooltip } from './HTMLTooltip.svelte';
@@ -11,72 +11,4 @@ export type BollingerOptions = {
11
11
  };
12
12
  export declare function bollingerX(args: TransformArg<DataRecord>, options?: BollingerOptions): TransformArg<DataRecord>;
13
13
  export declare function bollingerY(args: TransformArg<DataRecord>, options?: BollingerOptions): TransformArg<DataRecord>;
14
- export declare function bollingerDim(dim: 'x' | 'y', { data, ...channels }: TransformArg<DataRecord>, options?: BollingerOptions): {
15
- filter?: import("../types/index.js").ConstantAccessor<boolean, Record<string | symbol, import("../types/index.js").RawValue>>;
16
- facet?: "auto" | "include" | "exclude" | undefined;
17
- fx?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
18
- fy?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
19
- dx?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
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;
23
- fill?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
24
- fillOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
25
- sort?: ((a: import("../types/index.js").RawValue, b: import("../types/index.js").RawValue) => number) | {
26
- channel: string;
27
- order?: "ascending" | "descending";
28
- } | import("../types/index.js").ConstantAccessor<import("../types/index.js").RawValue, Record<string | symbol, import("../types/index.js").RawValue>>;
29
- stroke?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
30
- strokeWidth?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
31
- strokeOpacity?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
32
- strokeLinejoin?: import("../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinejoin, Record<string | symbol, import("../types/index.js").RawValue>>;
33
- strokeLinecap?: import("../types/index.js").ConstantAccessor<import("csstype").Property.StrokeLinecap, Record<string | symbol, import("../types/index.js").RawValue>>;
34
- strokeMiterlimit?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
35
- opacity?: import("../types/index.js").ChannelAccessor<Record<string | symbol, import("../types/index.js").RawValue>>;
36
- strokeDasharray?: import("../types/index.js").ConstantAccessor<string, Record<string | symbol, import("../types/index.js").RawValue>>;
37
- strokeDashoffset?: import("../types/index.js").ConstantAccessor<number, Record<string | symbol, import("../types/index.js").RawValue>>;
38
- mixBlendMode?: import("../types/index.js").ConstantAccessor<import("csstype").Property.MixBlendMode, Record<string | symbol, import("../types/index.js").RawValue>>;
39
- clipPath?: string | undefined;
40
- imageFilter?: import("../types/index.js").ConstantAccessor<string, Record<string | symbol, import("../types/index.js").RawValue>>;
41
- shapeRendering?: import("../types/index.js").ConstantAccessor<import("csstype").Property.ShapeRendering, Record<string | symbol, import("../types/index.js").RawValue>>;
42
- paintOrder?: import("../types/index.js").ConstantAccessor<string, Record<string | symbol, import("../types/index.js").RawValue>>;
43
- onclick?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
44
- ondblclick?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
45
- onmouseup?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
46
- onmousedown?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
47
- onmouseenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
48
- onmousemove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
49
- onmouseleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
50
- onmouseout?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
51
- onmouseover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
52
- onpointercancel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
53
- onpointerdown?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
54
- onpointerup?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
55
- onpointerenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
56
- onpointerleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
57
- onpointermove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
58
- onpointerover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
59
- onpointerout?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
60
- ondrag?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
61
- ondrop?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
62
- ondragstart?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
63
- ondragenter?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
64
- ondragleave?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
65
- ondragover?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
66
- ondragend?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
67
- ontouchstart?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
68
- ontouchmove?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
69
- ontouchend?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
70
- ontouchcancel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
71
- oncontextmenu?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
72
- onwheel?: import("svelte/elements").MouseEventHandler<SVGPathElement> | undefined;
73
- class?: string | undefined;
74
- style?: string | undefined;
75
- cursor?: import("../types/index.js").ConstantAccessor<import("csstype").Property.Cursor, Record<string | symbol, import("../types/index.js").RawValue>>;
76
- data: {
77
- __x: import("../types/index.js").RawValue;
78
- __lo: number;
79
- __avg: number;
80
- __hi: number;
81
- }[];
82
- };
14
+ export declare function bollingerDim(dim: 'x' | 'y', { data, ...channels }: TransformArg<DataRecord>, options?: BollingerOptions): any;
@@ -1,8 +1,5 @@
1
1
  import type { DataRecord, TransformArg } from '../types/index.js';
2
- declare const CENTROID: unique symbol;
3
- type WithCentroid<T> = T & {
4
- [CENTROID]: [number, number];
5
- };
2
+ type WithCentroid<T> = T & {};
6
3
  export declare function geoCentroid<Datum extends DataRecord>({ data, ...options }: {
7
4
  data: Datum[];
8
5
  } & TransformArg<Datum>): TransformArg<WithCentroid<Datum>>;
@@ -38,29 +38,21 @@ type GroupZOptions = GroupXOptions | GroupYOptions;
38
38
  * groups the dataset by x and y channel and optionally reduces the group items
39
39
  * to output channels fill, stroke, r, opacity, fillOpacity, or strokeOpacity
40
40
  */
41
- export declare function group({ data, ...channels }: TransformArg<T, DataRecord>, options?: GroupXOptions): {
42
- data: Record<string | symbol, RawValue>[];
43
- };
41
+ export declare function group({ data, ...channels }: TransformArg<T, DataRecord>, options?: GroupXOptions): any;
44
42
  /**
45
43
  * groups the dataset by the x channel and optionally reduces the group items
46
44
  * to output channels y, y1, y2, fill, stroke, r, opacity, fillOpacity, or strokeOpacity
47
45
  */
48
- export declare function groupX(input: TransformArg<T, DataRecord>, options?: GroupXOptions): {
49
- data: Record<string | symbol, RawValue>[];
50
- };
46
+ export declare function groupX(input: TransformArg<T, DataRecord>, options?: GroupXOptions): any;
51
47
  /**
52
48
  * groups the dataset by the y channel and optionally reduces the group items
53
49
  * to output channels x, x1, x2, fill, stroke, r, opacity, fillOpacity, or strokeOpacity
54
50
  */
55
- export declare function groupY(input: TransformArg<T, DataRecord>, options?: GroupYOptions): {
56
- data: Record<string | symbol, RawValue>[];
57
- };
51
+ export declare function groupY(input: TransformArg<T, DataRecord>, options?: GroupYOptions): any;
58
52
  /**
59
53
  * groups the dataset by the z channel and optionally reduces the group items
60
54
  * to output channels x, x1, x2, y, y1, y2, fill, stroke, r, opacity, fillOpacity,
61
55
  * or strokeOpacity
62
56
  */
63
- export declare function groupZ(input: TransformArg<T, DataRecord>, options?: GroupZOptions): {
64
- data: Record<string | symbol, RawValue>[];
65
- };
57
+ export declare function groupZ(input: TransformArg<T, DataRecord>, options?: GroupZOptions): any;
66
58
  export {};