svelteplot 0.0.1-alpha.8 → 0.1.3-next.3

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 (251) hide show
  1. package/LICENSE.md +5 -0
  2. package/README.md +3 -36
  3. package/dist/Mark.svelte +292 -0
  4. package/dist/Mark.svelte.d.ts +22 -0
  5. package/dist/Plot.svelte +148 -153
  6. package/dist/Plot.svelte.d.ts +15 -15
  7. package/dist/constants.d.ts +14 -0
  8. package/dist/constants.js +109 -0
  9. package/dist/core/Facet.svelte +59 -0
  10. package/dist/core/Facet.svelte.d.ts +18 -0
  11. package/dist/core/FacetAxes.svelte +66 -0
  12. package/dist/core/FacetAxes.svelte.d.ts +4 -0
  13. package/dist/core/FacetGrid.svelte +86 -0
  14. package/dist/core/FacetGrid.svelte.d.ts +13 -0
  15. package/dist/core/Plot.svelte +567 -0
  16. package/dist/core/Plot.svelte.d.ts +14 -0
  17. package/dist/helpers/arrowPath.d.ts +14 -0
  18. package/dist/helpers/arrowPath.js +129 -0
  19. package/dist/helpers/autoProjection.d.ts +19 -0
  20. package/dist/helpers/autoProjection.js +87 -0
  21. package/dist/helpers/autoScales.d.ts +23 -0
  22. package/dist/helpers/autoScales.js +203 -0
  23. package/dist/helpers/autoTicks.d.ts +3 -0
  24. package/dist/helpers/autoTicks.js +40 -0
  25. package/dist/helpers/autoTimeFormat.d.ts +2 -2
  26. package/dist/helpers/autoTimeFormat.js +34 -5
  27. package/dist/helpers/callWithProps.d.ts +8 -0
  28. package/dist/helpers/callWithProps.js +13 -0
  29. package/dist/helpers/colors.js +17 -2
  30. package/dist/helpers/curves.d.ts +3 -0
  31. package/dist/helpers/curves.js +42 -0
  32. package/dist/helpers/data.d.ts +9 -0
  33. package/dist/helpers/data.js +16 -0
  34. package/dist/helpers/facets.d.ts +12 -0
  35. package/dist/helpers/facets.js +49 -0
  36. package/dist/helpers/formats.d.ts +3 -0
  37. package/dist/helpers/formats.js +3 -0
  38. package/dist/helpers/getBaseStyles.d.ts +7 -2
  39. package/dist/helpers/getBaseStyles.js +34 -10
  40. package/dist/helpers/getLogTicks.js +5 -5
  41. package/dist/helpers/group.d.ts +6 -0
  42. package/dist/helpers/group.js +53 -0
  43. package/dist/helpers/index.d.ts +18 -0
  44. package/dist/helpers/index.js +53 -0
  45. package/dist/helpers/isRawValue.d.ts +2 -0
  46. package/dist/helpers/isRawValue.js +5 -0
  47. package/dist/helpers/isValid.d.ts +6 -0
  48. package/dist/helpers/isValid.js +6 -0
  49. package/dist/helpers/math.d.ts +19 -0
  50. package/dist/helpers/math.js +116 -0
  51. package/dist/helpers/mergeDeep.d.ts +1 -1
  52. package/dist/helpers/noise.d.ts +1 -0
  53. package/dist/helpers/noise.js +72 -0
  54. package/dist/helpers/projection.d.ts +33 -0
  55. package/dist/helpers/projection.js +100 -0
  56. package/dist/helpers/reduce.d.ts +10 -0
  57. package/dist/helpers/reduce.js +85 -0
  58. package/dist/helpers/regressionLoess.d.ts +12 -0
  59. package/dist/helpers/regressionLoess.js +47 -0
  60. package/dist/helpers/removeIdenticalLines.d.ts +8 -1
  61. package/dist/helpers/removeIdenticalLines.js +14 -7
  62. package/dist/helpers/resolve.d.ts +17 -0
  63. package/dist/helpers/resolve.js +152 -0
  64. package/dist/helpers/roundedRect.d.ts +9 -0
  65. package/dist/helpers/roundedRect.js +31 -0
  66. package/dist/helpers/scales.d.ts +42 -0
  67. package/dist/helpers/scales.js +309 -0
  68. package/dist/helpers/time.d.ts +6 -0
  69. package/dist/helpers/time.js +282 -0
  70. package/dist/helpers/typeChecks.d.ts +8 -5
  71. package/dist/helpers/typeChecks.js +27 -6
  72. package/dist/index.d.ts +49 -1
  73. package/dist/index.js +53 -2
  74. package/dist/marks/Area.svelte +146 -0
  75. package/dist/marks/Area.svelte.d.ts +30 -0
  76. package/dist/marks/AreaX.svelte +27 -0
  77. package/dist/marks/AreaX.svelte.d.ts +12 -0
  78. package/dist/marks/AreaY.svelte +38 -0
  79. package/dist/marks/AreaY.svelte.d.ts +19 -0
  80. package/dist/marks/Arrow.svelte +139 -0
  81. package/dist/marks/Arrow.svelte.d.ts +44 -0
  82. package/dist/marks/AxisX.svelte +198 -93
  83. package/dist/marks/AxisX.svelte.d.ts +17 -16
  84. package/dist/marks/AxisY.svelte +176 -62
  85. package/dist/marks/AxisY.svelte.d.ts +17 -14
  86. package/dist/marks/BarX.svelte +81 -0
  87. package/dist/marks/BarX.svelte.d.ts +4 -0
  88. package/dist/marks/BarY.svelte +95 -0
  89. package/dist/marks/BarY.svelte.d.ts +4 -0
  90. package/dist/marks/BollingerX.svelte +44 -0
  91. package/dist/marks/BollingerX.svelte.d.ts +18 -0
  92. package/dist/marks/BollingerY.svelte +39 -0
  93. package/dist/marks/BollingerY.svelte.d.ts +18 -0
  94. package/dist/marks/BoxX.svelte +89 -0
  95. package/dist/marks/BoxX.svelte.d.ts +4 -0
  96. package/dist/marks/BoxY.svelte +110 -0
  97. package/dist/marks/BoxY.svelte.d.ts +29 -0
  98. package/dist/marks/Cell.svelte +110 -0
  99. package/dist/marks/Cell.svelte.d.ts +16 -0
  100. package/dist/marks/CellX.svelte +24 -0
  101. package/dist/marks/CellX.svelte.d.ts +3 -0
  102. package/dist/marks/CellY.svelte +24 -0
  103. package/dist/marks/CellY.svelte.d.ts +3 -0
  104. package/dist/marks/ColorLegend.svelte +148 -27
  105. package/dist/marks/ColorLegend.svelte.d.ts +12 -13
  106. package/dist/marks/CustomMark.svelte +43 -0
  107. package/dist/marks/CustomMark.svelte.d.ts +16 -0
  108. package/dist/marks/CustomMarkHTML.svelte +103 -0
  109. package/dist/marks/CustomMarkHTML.svelte.d.ts +17 -0
  110. package/dist/marks/DifferenceY.svelte +144 -0
  111. package/dist/marks/DifferenceY.svelte.d.ts +30 -0
  112. package/dist/marks/Dot.svelte +128 -73
  113. package/dist/marks/Dot.svelte.d.ts +24 -14
  114. package/dist/marks/DotX.svelte +15 -3
  115. package/dist/marks/DotX.svelte.d.ts +8 -16
  116. package/dist/marks/DotY.svelte +8 -3
  117. package/dist/marks/DotY.svelte.d.ts +5 -17
  118. package/dist/marks/Frame.svelte +32 -31
  119. package/dist/marks/Frame.svelte.d.ts +7 -14
  120. package/dist/marks/Geo.svelte +102 -0
  121. package/dist/marks/Geo.svelte.d.ts +10 -0
  122. package/dist/marks/Graticule.svelte +28 -0
  123. package/dist/marks/Graticule.svelte.d.ts +9 -0
  124. package/dist/marks/GridX.svelte +67 -36
  125. package/dist/marks/GridX.svelte.d.ts +7 -18
  126. package/dist/marks/GridY.svelte +64 -25
  127. package/dist/marks/GridY.svelte.d.ts +7 -14
  128. package/dist/marks/HTMLTooltip.svelte +91 -0
  129. package/dist/marks/HTMLTooltip.svelte.d.ts +11 -0
  130. package/dist/marks/Line.svelte +219 -58
  131. package/dist/marks/Line.svelte.d.ts +30 -14
  132. package/dist/marks/LineX.svelte +8 -8
  133. package/dist/marks/LineX.svelte.d.ts +4 -17
  134. package/dist/marks/LineY.svelte +7 -8
  135. package/dist/marks/LineY.svelte.d.ts +4 -17
  136. package/dist/marks/Link.svelte +173 -0
  137. package/dist/marks/Link.svelte.d.ts +21 -0
  138. package/dist/marks/Pointer.svelte +126 -0
  139. package/dist/marks/Pointer.svelte.d.ts +23 -0
  140. package/dist/marks/Rect.svelte +103 -0
  141. package/dist/marks/Rect.svelte.d.ts +15 -0
  142. package/dist/marks/RectX.svelte +33 -0
  143. package/dist/marks/RectX.svelte.d.ts +15 -0
  144. package/dist/marks/RectY.svelte +33 -0
  145. package/dist/marks/RectY.svelte.d.ts +15 -0
  146. package/dist/marks/RegressionX.svelte +26 -0
  147. package/dist/marks/RegressionX.svelte.d.ts +4 -0
  148. package/dist/marks/RegressionY.svelte +26 -0
  149. package/dist/marks/RegressionY.svelte.d.ts +4 -0
  150. package/dist/marks/RuleX.svelte +52 -28
  151. package/dist/marks/RuleX.svelte.d.ts +14 -14
  152. package/dist/marks/RuleY.svelte +52 -28
  153. package/dist/marks/RuleY.svelte.d.ts +14 -14
  154. package/dist/marks/Sphere.svelte +8 -0
  155. package/dist/marks/Sphere.svelte.d.ts +51 -0
  156. package/dist/marks/Spike.svelte +15 -0
  157. package/dist/marks/Spike.svelte.d.ts +4 -0
  158. package/dist/marks/SymbolLegend.svelte +27 -12
  159. package/dist/marks/SymbolLegend.svelte.d.ts +8 -14
  160. package/dist/marks/Text.svelte +185 -0
  161. package/dist/marks/Text.svelte.d.ts +26 -0
  162. package/dist/marks/TickX.svelte +89 -0
  163. package/dist/marks/TickX.svelte.d.ts +22 -0
  164. package/dist/marks/TickY.svelte +90 -0
  165. package/dist/marks/TickY.svelte.d.ts +22 -0
  166. package/dist/marks/Vector.svelte +213 -0
  167. package/dist/marks/Vector.svelte.d.ts +31 -0
  168. package/dist/marks/helpers/BaseAxisX.svelte +210 -0
  169. package/dist/marks/helpers/BaseAxisX.svelte.d.ts +24 -0
  170. package/dist/marks/helpers/BaseAxisY.svelte +187 -0
  171. package/dist/marks/helpers/BaseAxisY.svelte.d.ts +23 -0
  172. package/dist/marks/helpers/CanvasLayer.svelte +38 -0
  173. package/dist/marks/helpers/CanvasLayer.svelte.d.ts +13 -0
  174. package/dist/marks/helpers/DotCanvas.svelte +184 -0
  175. package/dist/marks/helpers/DotCanvas.svelte.d.ts +11 -0
  176. package/dist/marks/helpers/GeoCanvas.svelte +165 -0
  177. package/dist/marks/helpers/GeoCanvas.svelte.d.ts +13 -0
  178. package/dist/marks/helpers/GroupMultiple.svelte +17 -0
  179. package/dist/marks/helpers/GroupMultiple.svelte.d.ts +9 -0
  180. package/dist/marks/helpers/Marker.svelte +93 -0
  181. package/dist/marks/helpers/Marker.svelte.d.ts +10 -0
  182. package/dist/marks/helpers/MarkerPath.svelte +164 -0
  183. package/dist/marks/helpers/MarkerPath.svelte.d.ts +44 -0
  184. package/dist/marks/helpers/Regression.svelte +174 -0
  185. package/dist/marks/helpers/Regression.svelte.d.ts +26 -0
  186. package/dist/marks/helpers/events.d.ts +8 -0
  187. package/dist/marks/helpers/events.js +64 -0
  188. package/dist/transforms/bin.d.ts +51 -0
  189. package/dist/transforms/bin.js +171 -0
  190. package/dist/transforms/bollinger.d.ts +21 -0
  191. package/dist/transforms/bollinger.js +53 -0
  192. package/dist/transforms/centroid.d.ts +9 -0
  193. package/dist/transforms/centroid.js +13 -0
  194. package/dist/transforms/facet.d.ts +1 -0
  195. package/dist/transforms/facet.js +1 -0
  196. package/dist/transforms/filter.d.ts +2 -0
  197. package/dist/transforms/filter.js +8 -0
  198. package/dist/transforms/group.d.ts +66 -0
  199. package/dist/transforms/group.js +109 -0
  200. package/dist/transforms/interval.d.ts +11 -0
  201. package/dist/transforms/interval.js +34 -0
  202. package/dist/transforms/jitter.d.ts +0 -0
  203. package/dist/transforms/jitter.js +1 -0
  204. package/dist/transforms/map.d.ts +10 -0
  205. package/dist/transforms/map.js +89 -0
  206. package/dist/transforms/normalize.d.ts +9 -0
  207. package/dist/transforms/normalize.js +86 -0
  208. package/dist/transforms/recordize.d.ts +13 -0
  209. package/dist/transforms/recordize.js +75 -0
  210. package/dist/transforms/rename.d.ts +14 -0
  211. package/dist/transforms/rename.js +42 -0
  212. package/dist/transforms/select.d.ts +35 -0
  213. package/dist/transforms/select.js +55 -0
  214. package/dist/transforms/shift.d.ts +13 -0
  215. package/dist/transforms/shift.js +45 -0
  216. package/dist/transforms/sort.d.ts +28 -0
  217. package/dist/transforms/sort.js +61 -0
  218. package/dist/transforms/stack.d.ts +10 -0
  219. package/dist/transforms/stack.js +110 -0
  220. package/dist/transforms/window.d.ts +22 -0
  221. package/dist/transforms/window.js +73 -0
  222. package/dist/types.d.ts +625 -188
  223. package/dist/ui/Checkbox.svelte +6 -0
  224. package/dist/ui/Checkbox.svelte.d.ts +13 -0
  225. package/dist/ui/RadioInput.svelte +27 -0
  226. package/dist/ui/RadioInput.svelte.d.ts +9 -0
  227. package/dist/ui/Select.svelte +27 -0
  228. package/dist/ui/Select.svelte.d.ts +9 -0
  229. package/dist/ui/Slider.svelte +47 -0
  230. package/dist/ui/Slider.svelte.d.ts +11 -0
  231. package/dist/ui/Spiral.svelte +46 -0
  232. package/dist/ui/Spiral.svelte.d.ts +15 -0
  233. package/dist/ui/index.d.ts +4 -0
  234. package/dist/ui/index.js +4 -0
  235. package/package.json +79 -40
  236. package/LICENSE +0 -11
  237. package/dist/classes/Channel.svelte.js +0 -74
  238. package/dist/classes/Mark.svelte.js +0 -17
  239. package/dist/classes/Plot.svelte.js +0 -98
  240. package/dist/contants.d.ts +0 -3
  241. package/dist/contants.js +0 -40
  242. package/dist/helpers/GroupMultiple.svelte +0 -8
  243. package/dist/helpers/GroupMultiple.svelte.d.ts +0 -19
  244. package/dist/helpers/createScale.d.ts +0 -5
  245. package/dist/helpers/createScale.js +0 -57
  246. package/dist/helpers/resolveChannel.d.ts +0 -2
  247. package/dist/helpers/resolveChannel.js +0 -28
  248. package/dist/helpers/wrapArray.d.ts +0 -2
  249. package/dist/helpers/wrapArray.js +0 -4
  250. package/dist/marks/BaseMark.svelte +0 -22
  251. package/dist/marks/BaseMark.svelte.d.ts +0 -19
@@ -0,0 +1,15 @@
1
+ import type { StackOptions } from '../transforms/stack.js';
2
+ import type { DataRecord, BaseMarkProps, ChannelAccessor, BaseRectMarkProps } from '../types.js';
3
+ type RectYMarkProps = BaseMarkProps & {
4
+ data: DataRecord[];
5
+ y?: ChannelAccessor;
6
+ y1?: ChannelAccessor;
7
+ y2?: ChannelAccessor;
8
+ x1?: ChannelAccessor;
9
+ x2?: ChannelAccessor;
10
+ stack?: StackOptions;
11
+ interval?: number | string;
12
+ } & BaseRectMarkProps;
13
+ declare const RectY: import("svelte").Component<RectYMarkProps, {}, "">;
14
+ type RectY = ReturnType<typeof RectY>;
15
+ export default RectY;
@@ -0,0 +1,26 @@
1
+ <script lang="ts">
2
+ import { resolveChannel } from '../helpers/resolve.js';
3
+ import type { ChannelName } from '../types.js';
4
+ import Mark from '../Mark.svelte';
5
+ import Regression, { type RegressionMarkProps } from './helpers/Regression.svelte';
6
+ import { groups as d3Groups } from 'd3-array';
7
+
8
+ let { data = [{}], ...options }: RegressionMarkProps = $props();
9
+
10
+ let groupBy: ChannelName | null =
11
+ options.stroke != null ? 'stroke' : options.z != null ? 'z' : null;
12
+ // separate groups
13
+ let groups = $derived(
14
+ groupBy !== null
15
+ ? d3Groups(data, (d) => resolveChannel(groupBy as ChannelName, d, options)).map(
16
+ (g) => g[1]
17
+ )
18
+ : [data]
19
+ );
20
+ </script>
21
+
22
+ <Mark type="regression">
23
+ {#each groups as group}
24
+ <Regression data={group} dependent="x" {...options} />
25
+ {/each}
26
+ </Mark>
@@ -0,0 +1,4 @@
1
+ import { type RegressionMarkProps } from './helpers/Regression.svelte';
2
+ declare const RegressionX: import("svelte").Component<RegressionMarkProps, {}, "">;
3
+ type RegressionX = ReturnType<typeof RegressionX>;
4
+ export default RegressionX;
@@ -0,0 +1,26 @@
1
+ <script lang="ts">
2
+ import { resolveChannel } from '../helpers/resolve.js';
3
+ import type { ChannelName } from '../types.js';
4
+ import Mark from '../Mark.svelte';
5
+ import Regression, { type RegressionMarkProps } from './helpers/Regression.svelte';
6
+ import { groups as d3Groups } from 'd3-array';
7
+
8
+ let { data = [{}], ...options }: RegressionMarkProps = $props();
9
+
10
+ let groupBy: ChannelName | null =
11
+ options.stroke != null ? 'stroke' : options.z != null ? 'z' : null;
12
+ // separate groups
13
+ let groups = $derived(
14
+ groupBy !== null
15
+ ? d3Groups(data, (d) => resolveChannel(groupBy as ChannelName, d, options)).map(
16
+ (g) => g[1]
17
+ )
18
+ : [data]
19
+ );
20
+ </script>
21
+
22
+ <Mark type="regression">
23
+ {#each groups as group}
24
+ <Regression data={group} dependent="y" {...options} />
25
+ {/each}
26
+ </Mark>
@@ -0,0 +1,4 @@
1
+ import { type RegressionMarkProps } from './helpers/Regression.svelte';
2
+ declare const RegressionY: import("svelte").Component<RegressionMarkProps, {}, "">;
3
+ type RegressionY = ReturnType<typeof RegressionY>;
4
+ export default RegressionY;
@@ -1,30 +1,54 @@
1
- <script>import { getContext } from "svelte";
2
- import BaseMark from "./BaseMark.svelte";
3
- import getBaseStyles from "../helpers/getBaseStyles.js";
4
- import resolveChannel from "../helpers/resolveChannel.js";
5
- const BaseMark_RuleX = BaseMark;
6
- const plot = getContext("svelteplot");
7
- let { data = [], x, y1, y2, ...styleProps } = $props();
8
- let dataWrapped = $derived(x ? data : data.map((d) => ({ x: d, ___orig___: d })));
9
- </script>
1
+ <script lang="ts">
2
+ import Mark from '../Mark.svelte';
3
+ import GroupMultiple from './helpers/GroupMultiple.svelte';
4
+ import { getContext } from 'svelte';
5
+ import { recordizeX } from '../transforms/recordize.js';
6
+ import { resolveProp, resolveStyles } from '../helpers/resolve.js';
7
+ import type {
8
+ PlotContext,
9
+ DataRecord,
10
+ BaseMarkProps,
11
+ ConstantAccessor,
12
+ ChannelAccessor
13
+ } from '../types.js';
14
+
15
+ type RuleXMarkProps = BaseMarkProps & {
16
+ data: DataRecord[];
17
+ x?: ChannelAccessor;
18
+ y1?: ChannelAccessor;
19
+ y2?: ChannelAccessor;
20
+ inset?: ConstantAccessor<number>;
21
+ insetTop?: ConstantAccessor<number>;
22
+ insetBottom?: ConstantAccessor<number>;
23
+ dx?: ConstantAccessor<number>;
24
+ dy?: ConstantAccessor<number>;
25
+ };
10
26
 
11
- <BaseMark_RuleX type="rule-x" data={dataWrapped} channels={['x', 'y']} {x} {y1} {y2}>
12
- <g class="rule-x">
13
- {#each data as datum}
14
- <line
15
- transform="translate({plot.xScale(resolveChannel('x', datum, x))}, {0})"
16
- style={getBaseStyles(datum, styleProps)}
17
- y1={y1 != null ? plot.yScale(resolveChannel('y', datum, y1)) : plot.margins.top}
18
- y2={y2 != null
19
- ? plot.yScale(resolveChannel('y', datum, y2))
20
- : plot.plotHeight + plot.margins.top}
21
- />
22
- {/each}
23
- </g>
24
- </BaseMark_RuleX>
27
+ let { data = [{}], class: className = null, ...options }: RuleXMarkProps = $props();
28
+
29
+ const { getPlotState } = getContext<PlotContext>('svelteplot');
30
+ const plot = $derived(getPlotState());
31
+ const args = $derived(recordizeX({ data, ...options }, { withIndex: false }));
32
+ </script>
25
33
 
26
- <style>
27
- .rule-x line {
28
- stroke: currentColor;
29
- }
30
- </style>
34
+ <Mark type="ruleX" channels={['x', 'y1', 'y2', 'stroke', 'opacity', 'strokeOpacity']} {...args}>
35
+ {#snippet children({ mark, scaledData, usedScales })}
36
+ <GroupMultiple class="rule-x {className || ''}" length={className ? 2 : scaledData.length}>
37
+ {#each scaledData as d}
38
+ {@const inset = resolveProp(args.inset, d.datum, 0)}
39
+ {@const insetTop = resolveProp(args.insetTop, d.datum, 0)}
40
+ {@const insetBottom = resolveProp(args.insetBottom, d.datum, 0)}
41
+ {@const dx = resolveProp(args.dx, d.datum, 0)}
42
+ {@const dy = resolveProp(args.dy, d.datum, 0)}
43
+ {@const [style, styleClass] = resolveStyles(plot, d, args, 'stroke', usedScales)}
44
+ <line
45
+ transform="translate({d.x + dx}, {dy})"
46
+ {style}
47
+ class={[styleClass]}
48
+ y1={(inset || insetTop) + (d.y1 != null ? d.y1 : plot.options.marginTop)}
49
+ y2={(d.y2 != null ? d.y2 : plot.facetHeight + plot.options.marginTop) -
50
+ (inset || insetBottom)} />
51
+ {/each}
52
+ </GroupMultiple>
53
+ {/snippet}
54
+ </Mark>
@@ -1,15 +1,15 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { RuleXMarkProps } from '../types.js';
3
- declare const __propDef: {
4
- props: RuleXMarkProps;
5
- events: {
6
- [evt: string]: CustomEvent<any>;
7
- };
8
- slots: {};
1
+ import type { DataRecord, BaseMarkProps, ConstantAccessor, ChannelAccessor } from '../types.js';
2
+ type RuleXMarkProps = BaseMarkProps & {
3
+ data: DataRecord[];
4
+ x?: ChannelAccessor;
5
+ y1?: ChannelAccessor;
6
+ y2?: ChannelAccessor;
7
+ inset?: ConstantAccessor<number>;
8
+ insetTop?: ConstantAccessor<number>;
9
+ insetBottom?: ConstantAccessor<number>;
10
+ dx?: ConstantAccessor<number>;
11
+ dy?: ConstantAccessor<number>;
9
12
  };
10
- export type RuleXProps = typeof __propDef.props;
11
- export type RuleXEvents = typeof __propDef.events;
12
- export type RuleXSlots = typeof __propDef.slots;
13
- export default class RuleX extends SvelteComponent<RuleXProps, RuleXEvents, RuleXSlots> {
14
- }
15
- export {};
13
+ declare const RuleX: import("svelte").Component<RuleXMarkProps, {}, "">;
14
+ type RuleX = ReturnType<typeof RuleX>;
15
+ export default RuleX;
@@ -1,30 +1,54 @@
1
- <script>import { getContext } from "svelte";
2
- import BaseMark from "./BaseMark.svelte";
3
- import getBaseStyles from "../helpers/getBaseStyles.js";
4
- import resolveChannel from "../helpers/resolveChannel.js";
5
- const BaseMark_RuleY = BaseMark;
6
- const plot = getContext("svelteplot");
7
- let { data = [], y, x1, x2, ...styleProps } = $props();
8
- let dataWrapped = $derived(y ? data : data.map((d) => ({ y: d, ___orig___: d })));
9
- </script>
1
+ <script lang="ts">
2
+ import Mark from '../Mark.svelte';
3
+ import GroupMultiple from './helpers/GroupMultiple.svelte';
4
+ import { getContext } from 'svelte';
5
+ import { recordizeY } from '../transforms/recordize.js';
6
+ import { resolveProp, resolveStyles } from '../helpers/resolve.js';
7
+ import type {
8
+ PlotContext,
9
+ DataRecord,
10
+ BaseMarkProps,
11
+ ConstantAccessor,
12
+ ChannelAccessor
13
+ } from '../types.js';
14
+
15
+ type RuleYMarkProps = BaseMarkProps & {
16
+ data: DataRecord[];
17
+ y?: ChannelAccessor;
18
+ x1?: ChannelAccessor;
19
+ x2?: ChannelAccessor;
20
+ inset?: ConstantAccessor<number>;
21
+ insetLeft?: ConstantAccessor<number>;
22
+ insetRight?: ConstantAccessor<number>;
23
+ dx?: ConstantAccessor<number>;
24
+ dy?: ConstantAccessor<number>;
25
+ };
10
26
 
11
- <BaseMark_RuleY type="rule-y" data={dataWrapped} channels={['y', 'x']} {y} {x1} {x2}>
12
- <g class="rule-y">
13
- {#each data as datum}
14
- <line
15
- transform="translate(0,{plot.yScale(resolveChannel('y', datum, y))})"
16
- style={getBaseStyles(datum, styleProps)}
17
- x1={x1 != null ? plot.xScale(resolveChannel('x', datum, x1)) : plot.margins.left}
18
- x2={x2 != null
19
- ? plot.xScale(resolveChannel('x', datum, x2))
20
- : plot.plotWidth + plot.margins.left}
21
- />
22
- {/each}
23
- </g>
24
- </BaseMark_RuleY>
27
+ let { data = [{}], class: className = null, ...options }: RuleYMarkProps = $props();
28
+
29
+ const { getPlotState } = getContext<PlotContext>('svelteplot');
30
+ const plot = $derived(getPlotState());
31
+ const args = $derived(recordizeY({ data, ...options }, { withIndex: false }));
32
+ </script>
25
33
 
26
- <style>
27
- .rule-y line {
28
- stroke: currentColor;
29
- }
30
- </style>
34
+ <Mark type="ruleY" channels={['y', 'x1', 'x2', 'stroke', 'opacity', 'strokeOpacity']} {...args}>
35
+ {#snippet children({ scaledData, usedScales })}
36
+ <GroupMultiple class="rule-y {className || ''}" length={className ? 2 : args.data.length}>
37
+ {#each scaledData as d}
38
+ {@const inset = resolveProp(args.inset, d.datum, 0)}
39
+ {@const insetLeft = resolveProp(args.insetLeft, d.datum, 0)}
40
+ {@const insetRight = resolveProp(args.insetRight, d.datum, 0)}
41
+ {@const dx = resolveProp(args.dx, d.datum, 0)}
42
+ {@const dy = resolveProp(args.dy, d.datum, 0)}
43
+ {@const [style, styleClass] = resolveStyles(plot, d, args, 'stroke', usedScales)}
44
+ <line
45
+ transform="translate({dx}, {d.y + dy})"
46
+ {style}
47
+ class={[styleClass]}
48
+ x1={(inset || insetLeft) + (d.x1 != null ? d.x1 : plot.options.marginLeft)}
49
+ x2={(d.x2 != null ? d.x2 : plot.facetWidth + plot.options.marginLeft) -
50
+ (inset || insetRight)} />
51
+ {/each}
52
+ </GroupMultiple>
53
+ {/snippet}
54
+ </Mark>
@@ -1,15 +1,15 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { RuleYMarkProps } from '../types.js';
3
- declare const __propDef: {
4
- props: RuleYMarkProps;
5
- events: {
6
- [evt: string]: CustomEvent<any>;
7
- };
8
- slots: {};
1
+ import type { DataRecord, BaseMarkProps, ConstantAccessor, ChannelAccessor } from '../types.js';
2
+ type RuleYMarkProps = BaseMarkProps & {
3
+ data: DataRecord[];
4
+ y?: ChannelAccessor;
5
+ x1?: ChannelAccessor;
6
+ x2?: ChannelAccessor;
7
+ inset?: ConstantAccessor<number>;
8
+ insetLeft?: ConstantAccessor<number>;
9
+ insetRight?: ConstantAccessor<number>;
10
+ dx?: ConstantAccessor<number>;
11
+ dy?: ConstantAccessor<number>;
9
12
  };
10
- export type RuleYProps = typeof __propDef.props;
11
- export type RuleYEvents = typeof __propDef.events;
12
- export type RuleYSlots = typeof __propDef.slots;
13
- export default class RuleY extends SvelteComponent<RuleYProps, RuleYEvents, RuleYSlots> {
14
- }
15
- export {};
13
+ declare const RuleY: import("svelte").Component<RuleYMarkProps, {}, "">;
14
+ type RuleY = ReturnType<typeof RuleY>;
15
+ export default RuleY;
@@ -0,0 +1,8 @@
1
+ <script lang="ts">
2
+ import { type BaseMarkProps } from '../types.js';
3
+ import Geo from './Geo.svelte';
4
+
5
+ let { ...args }: BaseMarkProps = $props();
6
+ </script>
7
+
8
+ <Geo data={[{ type: 'Sphere' }]} {...args} geoType="sphere" />
@@ -0,0 +1,51 @@
1
+ declare const Sphere: import("svelte").Component<Partial<{
2
+ filter?: import("../types.js").ConstantAccessor<boolean>;
3
+ facet?: "auto" | "include" | "exclude";
4
+ fx: import("../types.js").ChannelAccessor;
5
+ fy: import("../types.js").ChannelAccessor;
6
+ dx: import("../types.js").ConstantAccessor<number>;
7
+ dy: import("../types.js").ConstantAccessor<number>;
8
+ fill: import("../types.js").ConstantAccessor<string>;
9
+ fillOpacity: import("../types.js").ConstantAccessor<number>;
10
+ stroke: import("../types.js").ConstantAccessor<string>;
11
+ strokeWidth: import("../types.js").ConstantAccessor<number>;
12
+ strokeOpacity: import("../types.js").ConstantAccessor<number>;
13
+ strokeLinejoin: import("../types.js").ConstantAccessor<"bevel" | "miter" | "miter-clip" | "round">;
14
+ strokeLinecap: import("../types.js").ConstantAccessor<"butt" | "square" | "round">;
15
+ strokeMiterlimit: import("../types.js").ConstantAccessor<number>;
16
+ opacity: import("../types.js").ConstantAccessor<number>;
17
+ strokeDasharray: import("../types.js").ConstantAccessor<string>;
18
+ strokeDashoffset: import("../types.js").ConstantAccessor<number>;
19
+ mixBlendMode: import("../types.js").ConstantAccessor<"normal" | "multiply" | "screen" | "overlay" | "darken" | "lighten" | "color-dodge" | "color-burn" | "hard-light" | "soft-light" | "difference" | "exclusion" | "hue" | "saturation" | "color" | "luminosity" | "plus-darker" | "plus-lighter">;
20
+ clipPath: string;
21
+ imageFilter: import("../types.js").ConstantAccessor<string>;
22
+ shapeRendering: import("../types.js").ConstantAccessor<"crispEdges" | "geometricPrecision" | "optimizeSpeed" | "auto">;
23
+ paintOrder: import("../types.js").ConstantAccessor<string>;
24
+ onclick?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
25
+ ondblclick?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
26
+ onmouseup?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
27
+ onmousedown?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
28
+ onmouseenter?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
29
+ onmousemove?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
30
+ onmouseleave?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
31
+ onmouseout?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
32
+ ondrag?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
33
+ ondrop?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
34
+ ondragstart?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
35
+ ondragenter?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
36
+ ondragleave?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
37
+ ondragover?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
38
+ ondragend?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
39
+ ontouchstart?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
40
+ ontouchmove?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
41
+ ontouchend?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
42
+ ontouchcancel?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
43
+ oncontextmenu?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
44
+ onwheel?: import("svelte/elements").MouseEventHandler<SVGPathElement>;
45
+ title: import("../types.js").ConstantAccessor<string>;
46
+ href: import("../types.js").ConstantAccessor<string>;
47
+ target: import("../types.js").ConstantAccessor<"_self" | "_blank" | string>;
48
+ class: string;
49
+ }>, {}, "">;
50
+ type Sphere = ReturnType<typeof Sphere>;
51
+ export default Sphere;
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ import Vector, { type VectorMarkProps } from './Vector.svelte';
3
+ let { data = [{}], ...options }: VectorMarkProps = $props();
4
+ </script>
5
+
6
+ <Vector
7
+ {data}
8
+ fill={options.stroke || 'currentColor'}
9
+ fillOpacity={0.3}
10
+ strokeWidth={1}
11
+ anchor="start"
12
+ stroke="currentColor"
13
+ sort={{ channel: '-y' }}
14
+ {...options}
15
+ shape="spike" />
@@ -0,0 +1,4 @@
1
+ import { type VectorMarkProps } from './Vector.svelte';
2
+ declare const Spike: import("svelte").Component<VectorMarkProps, {}, "">;
3
+ type Spike = ReturnType<typeof Spike>;
4
+ export default Spike;
@@ -1,24 +1,38 @@
1
- <script>import { getContext } from "svelte";
2
- import { symbol as d3Symbol } from "d3-shape";
3
- import { maybeSymbol } from "../helpers/symbols.js";
4
- const plot = getContext("svelteplot");
1
+ <script lang="ts">
2
+ import { getContext } from 'svelte';
3
+ import { symbol as d3Symbol } from 'd3-shape';
4
+ import { maybeSymbol } from '../helpers/symbols.js';
5
+ import type { PlotContext } from '../types.js';
6
+
7
+ const { getPlotState } = getContext<PlotContext>('svelteplot');
8
+ let plot = $derived(getPlotState());
9
+
10
+ // TODO: allow styling of legend
5
11
  </script>
6
12
 
7
- {#if plot.color.manualActiveMarks.length > 0 && !(plot.options.color?.legend && plot.colorSymbolRedundant)}
13
+ <!--
14
+ @component
15
+ The SymbolLegend is an HTML mark that can be placed in the header, footer and overlay
16
+ snippets. You can activate an implicit SymbolLegend above the chart using the global
17
+ symbol.legend scale option.
18
+ -->
19
+
20
+ {#if plot.scales.color.manualActiveMarks > 0}
8
21
  <div class="symbol-legend">
9
- {#each plot.symbolScale.domain() as value}
10
- {@const symbolV = plot.symbolScale(value)}
22
+ {#each plot.scales.color.domain as value}
23
+ {@const symbolV = plot.scales.symbol.fn(value)}
11
24
  {@const symbolType = maybeSymbol(symbolV)}
12
- {@const color = plot.colorSymbolRedundant ? plot.colorScale(value) : 'currentColor'}
25
+ {@const color = plot.colorSymbolRedundant
26
+ ? plot.scales.color.fn(value)
27
+ : 'currentColor'}
13
28
  <div class="item">
14
29
  <div class="swatch">
15
30
  <svg width="15" height="15">
16
31
  <path
17
32
  transform="translate(7.5,7.5)"
18
- fill={plot.hasFilledDotMarks ? color : 'none'}
19
- stroke={plot.hasFilledDotMarks ? null : color}
20
- d={d3Symbol(symbolType, 40)()}
21
- />
33
+ style:fill={plot.hasFilledDotMarks ? color : 'none'}
34
+ style:stroke={plot.hasFilledDotMarks ? null : color}
35
+ d={d3Symbol(symbolType, 40)()} />
22
36
  </svg>
23
37
  </div>
24
38
  <span class="item-label">{value}</span>
@@ -32,6 +46,7 @@ const plot = getContext("svelteplot");
32
46
  text-align: left;
33
47
  font-size: 12px;
34
48
  display: inline-block;
49
+ margin-right: 2em;
35
50
  }
36
51
  .item {
37
52
  margin: 0 1em 0.5ex 0;
@@ -1,14 +1,8 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: Record<string, never>;
4
- events: {
5
- [evt: string]: CustomEvent<any>;
6
- };
7
- slots: {};
8
- };
9
- export type SymbolLegendProps = typeof __propDef.props;
10
- export type SymbolLegendEvents = typeof __propDef.events;
11
- export type SymbolLegendSlots = typeof __propDef.slots;
12
- export default class SymbolLegend extends SvelteComponent<SymbolLegendProps, SymbolLegendEvents, SymbolLegendSlots> {
13
- }
14
- export {};
1
+ /**
2
+ * The SymbolLegend is an HTML mark that can be placed in the header, footer and overlay
3
+ * snippets. You can activate an implicit SymbolLegend above the chart using the global
4
+ * symbol.legend scale option.
5
+ */
6
+ declare const SymbolLegend: import("svelte").Component<Record<string, never>, {}, "">;
7
+ type SymbolLegend = ReturnType<typeof SymbolLegend>;
8
+ export default SymbolLegend;