layerchart 0.0.4 → 0.0.5

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 (44) hide show
  1. package/README.md +2 -37
  2. package/components/Arc.svelte +77 -0
  3. package/components/Arc.svelte.d.ts +34 -0
  4. package/components/Area.svelte +19 -10
  5. package/components/Area.svelte.d.ts +4 -1
  6. package/components/AxisX.svelte +1 -1
  7. package/components/AxisY.svelte +1 -4
  8. package/components/{Bar.svelte → Bars.svelte} +23 -14
  9. package/components/{Bar.svelte.d.ts → Bars.svelte.d.ts} +7 -4
  10. package/components/ConnectedPoints.svelte +68 -0
  11. package/components/ConnectedPoints.svelte.d.ts +18 -0
  12. package/components/Group.svelte +26 -0
  13. package/components/Group.svelte.d.ts +21 -0
  14. package/components/{HighlightBar.svelte → HighlightRect.svelte} +0 -0
  15. package/components/HighlightRect.svelte.d.ts +18 -0
  16. package/components/{Label.svelte → Labels.svelte} +0 -0
  17. package/components/{Label.svelte.d.ts → Labels.svelte.d.ts} +4 -4
  18. package/components/LinearGradient.svelte +27 -0
  19. package/components/LinearGradient.svelte.d.ts +27 -0
  20. package/components/Path.svelte +19 -15
  21. package/components/Path.svelte.d.ts +4 -2
  22. package/components/Points.svelte +58 -0
  23. package/components/Points.svelte.d.ts +19 -0
  24. package/components/Threshold.svelte +25 -22
  25. package/components/index.d.ts +3 -3
  26. package/components/index.js +3 -3
  27. package/docs/Preview.svelte +7 -3
  28. package/docs/Preview.svelte.d.ts +2 -0
  29. package/package.json +17 -10
  30. package/stores/motionStore.d.ts +2 -2
  31. package/utils/genData.d.ts +13 -0
  32. package/utils/genData.js +24 -0
  33. package/utils/math.d.ts +4 -0
  34. package/utils/math.js +6 -0
  35. package/utils/path.d.ts +5 -0
  36. package/utils/path.js +14 -0
  37. package/utils/pivot.js +1 -1
  38. package/utils/stack.d.ts +14 -0
  39. package/utils/stack.js +69 -0
  40. package/components/ClevelandDotPlot.svelte +0 -44
  41. package/components/ClevelandDotPlot.svelte.d.ts +0 -21
  42. package/components/HighlightBar.svelte.d.ts +0 -18
  43. package/components/Scatter.svelte +0 -25
  44. package/components/Scatter.svelte.d.ts +0 -33
@@ -0,0 +1,58 @@
1
+ <script >import { getContext } from 'svelte';
2
+ import Circle from './Circle.svelte';
3
+ const context = getContext('LayerCake');
4
+ const { data, xGet, yGet, config } = context;
5
+ export let r = 5;
6
+ export let offsetX = 0;
7
+ export let offsetY = 0;
8
+ function getOffset(value, offset) {
9
+ if (typeof offset === 'function') {
10
+ return offset(value, context);
11
+ }
12
+ else {
13
+ return offset;
14
+ }
15
+ }
16
+ $: points = $data.flatMap((d) => {
17
+ if (Array.isArray($config.x)) {
18
+ /*
19
+ x={["prop1" ,"prop2"]}
20
+ y="prop3"
21
+ */
22
+ return $xGet(d).map((x) => {
23
+ return {
24
+ x: x + getOffset(x, offsetX),
25
+ y: $yGet(d) + getOffset($yGet(d), offsetY)
26
+ };
27
+ });
28
+ }
29
+ else if (Array.isArray($config.y)) {
30
+ /*
31
+ x="prop1"
32
+ y={["prop2" ,"prop3"]}
33
+ */
34
+ return $yGet(d).map((y) => {
35
+ return {
36
+ x: $xGet(d) + getOffset($xGet(d), offsetX),
37
+ y: y + getOffset(y, offsetY)
38
+ };
39
+ });
40
+ }
41
+ else {
42
+ /*
43
+ x="prop1"
44
+ y="prop2"
45
+ */
46
+ return {
47
+ x: $xGet(d) + getOffset($xGet(d), offsetX),
48
+ y: $yGet(d) + getOffset($yGet(d), offsetY)
49
+ };
50
+ }
51
+ });
52
+ </script>
53
+
54
+ <g class="point-group">
55
+ {#each points as p}
56
+ <Circle cx={p.x} cy={p.y} {r} {...$$restProps} />
57
+ {/each}
58
+ </g>
@@ -0,0 +1,19 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ r?: number;
6
+ offsetX?: number | ((value: number, context: any) => number);
7
+ offsetY?: number | ((value: number, context: any) => number);
8
+ };
9
+ events: {
10
+ [evt: string]: CustomEvent<any>;
11
+ };
12
+ slots: {};
13
+ };
14
+ export declare type PointsProps = typeof __propDef.props;
15
+ export declare type PointsEvents = typeof __propDef.events;
16
+ export declare type PointsSlots = typeof __propDef.slots;
17
+ export default class Points extends SvelteComponentTyped<PointsProps, PointsEvents, PointsSlots> {
18
+ }
19
+ export {};
@@ -54,30 +54,33 @@ $: if (defined)
54
54
  linePathBelow.defined(defined);
55
55
  </script>
56
56
 
57
- <g class="clip-paths">
58
- <defs>
59
- <clipPath id="threshold-clip-below-{id}">
60
- <path d={clipPathBelow(data ?? $contextData)} />
61
- </clipPath>
62
- <clipPath id="threshold-clip-above-{id}">
63
- <path d={clipPathAbove(data ?? $contextData)} />
64
- </clipPath>
65
- </defs>
66
- </g>
57
+ <!-- Recreate on curve change as otherwise is 1 state change behind for some reason -->
58
+ {#key curve}
59
+ <g class="clip-paths">
60
+ <defs>
61
+ <clipPath id="threshold-clip-below-{id}">
62
+ <path d={clipPathBelow(data ?? $contextData)} />
63
+ </clipPath>
64
+ <clipPath id="threshold-clip-above-{id}">
65
+ <path d={clipPathAbove(data ?? $contextData)} />
66
+ </clipPath>
67
+ </defs>
68
+ </g>
67
69
 
68
- <slot
69
- name="pathAbove"
70
- areaPathData={areaPath(data ?? $contextData)}
71
- clipPath="url(#threshold-clip-below-{id})"
72
- linePathData={linePathAbove(data ?? $contextData)}
73
- />
70
+ <slot
71
+ name="pathAbove"
72
+ areaPathData={areaPath(data ?? $contextData)}
73
+ clipPath="url(#threshold-clip-below-{id})"
74
+ linePathData={linePathAbove(data ?? $contextData)}
75
+ />
74
76
 
75
- <slot
76
- name="pathBelow"
77
- areaPathData={areaPath(data ?? $contextData)}
78
- clipPath="url(#threshold-clip-above-{id})"
79
- linePathData={linePathBelow(data ?? $contextData)}
80
- />
77
+ <slot
78
+ name="pathBelow"
79
+ areaPathData={areaPath(data ?? $contextData)}
80
+ clipPath="url(#threshold-clip-above-{id})"
81
+ linePathData={linePathBelow(data ?? $contextData)}
82
+ />
83
+ {/key}
81
84
 
82
85
  <!-- Fix `<Threshold> received an unexpected slot "default".` warning -->
83
86
  <slot />
@@ -2,14 +2,14 @@ export { default as Area } from './Area.svelte';
2
2
  export { default as AreaStack } from './AreaStack.svelte';
3
3
  export { default as AxisX } from './AxisX.svelte';
4
4
  export { default as AxisY } from './AxisY.svelte';
5
- export { default as Bar } from './Bar.svelte';
5
+ export { default as Bars } from './Bars.svelte';
6
6
  export { default as Baseline } from './Baseline.svelte';
7
7
  export { default as Chart } from './Chart.svelte';
8
8
  export { default as Circle } from './Circle.svelte';
9
9
  export { default as ClevelandDotPlot } from './ClevelandDotPlot.svelte';
10
- export { default as HighlightBar } from './HighlightBar.svelte';
10
+ export { default as HighlightRect } from './HighlightRect.svelte';
11
11
  export { default as HighlightLine } from './HighlightLine.svelte';
12
- export { default as Label } from './Label.svelte';
12
+ export { default as Labels } from './Labels.svelte';
13
13
  export { default as Line } from './Line.svelte';
14
14
  export { default as Path } from './Path.svelte';
15
15
  export { default as Rect } from './Rect.svelte';
@@ -2,14 +2,14 @@ export { default as Area } from './Area.svelte';
2
2
  export { default as AreaStack } from './AreaStack.svelte';
3
3
  export { default as AxisX } from './AxisX.svelte';
4
4
  export { default as AxisY } from './AxisY.svelte';
5
- export { default as Bar } from './Bar.svelte';
5
+ export { default as Bars } from './Bars.svelte';
6
6
  export { default as Baseline } from './Baseline.svelte';
7
7
  export { default as Chart } from './Chart.svelte';
8
8
  export { default as Circle } from './Circle.svelte';
9
9
  export { default as ClevelandDotPlot } from './ClevelandDotPlot.svelte';
10
- export { default as HighlightBar } from './HighlightBar.svelte';
10
+ export { default as HighlightRect } from './HighlightRect.svelte';
11
11
  export { default as HighlightLine } from './HighlightLine.svelte';
12
- export { default as Label } from './Label.svelte';
12
+ export { default as Labels } from './Labels.svelte';
13
13
  export { default as Line } from './Line.svelte';
14
14
  export { default as Path } from './Path.svelte';
15
15
  export { default as Rect } from './Rect.svelte';
@@ -1,5 +1,9 @@
1
- <script >export let code = null;
1
+ <script >import Prism from 'prismjs';
2
+ import 'prism-svelte';
3
+ export let code = null;
2
4
  export let language = 'svelte';
5
+ export let highlight = false;
6
+ $: displayCode = highlight ? Prism.highlight(code, Prism.languages.svelte, 'svelte') : code;
3
7
  </script>
4
8
 
5
9
  <div class="border border-black/20 rounded bg-white">
@@ -7,12 +11,12 @@ export let language = 'svelte';
7
11
  <slot />
8
12
  </div>
9
13
 
10
- {#if code}
14
+ {#if displayCode}
11
15
  <pre
12
16
  class="language-{language} rounded"
13
17
  style="margin: 0">
14
18
  <code class="language-{language}">
15
- {@html code}
19
+ {@html displayCode}
16
20
  </code>
17
21
  </pre>
18
22
  {/if}
@@ -1,8 +1,10 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
+ import 'prism-svelte';
2
3
  declare const __propDef: {
3
4
  props: {
4
5
  code?: any;
5
6
  language?: string;
7
+ highlight?: boolean;
6
8
  };
7
9
  events: {
8
10
  [evt: string]: CustomEvent<any>;
package/package.json CHANGED
@@ -3,17 +3,17 @@
3
3
  "author": "Sean Lynch <techniq35@gmail.com>",
4
4
  "license": "MIT",
5
5
  "repository": "techniq/layerchart",
6
- "version": "0.0.4",
6
+ "version": "0.0.5",
7
7
  "devDependencies": {
8
8
  "@sveltejs/adapter-static": "^1.0.0-next.21",
9
- "@sveltejs/kit": "1.0.0-next.196",
9
+ "@sveltejs/kit": "^1.0.0-next.201",
10
10
  "@types/d3-array": "^3.0.2",
11
11
  "@types/d3-scale": "^4.0.2",
12
12
  "@types/d3-shape": "^3.0.2",
13
13
  "@types/lodash-es": "^4.17.5",
14
14
  "autoprefixer": "^10.4.0",
15
15
  "mdsvex": "^0.9.8",
16
- "prettier": "^2.4.1",
16
+ "prettier": "^2.5.0",
17
17
  "prettier-plugin-svelte": "^2.5.0",
18
18
  "prism-themes": "^1.9.0",
19
19
  "svelte": "^3.44.2",
@@ -30,31 +30,35 @@
30
30
  "dependencies": {
31
31
  "@mdi/js": "^6.5.95",
32
32
  "d3-array": "^3.1.1",
33
+ "d3-interpolate-path": "^2.2.3",
33
34
  "d3-scale": "^4.0.2",
34
35
  "d3-shape": "^3.0.1",
35
36
  "date-fns": "^2.26.0",
36
- "layercake": "^5.0.0",
37
+ "layercake": "^5.0.1",
37
38
  "lodash-es": "^4.17.21",
38
- "svelte-ux": "^0.0.102"
39
+ "svelte-ux": "^0.0.105"
39
40
  },
40
41
  "exports": {
41
42
  "./package.json": "./package.json",
43
+ "./components/Arc.svelte": "./components/Arc.svelte",
42
44
  "./components/Area.svelte": "./components/Area.svelte",
43
45
  "./components/AreaStack.svelte": "./components/AreaStack.svelte",
44
46
  "./components/AxisX.svelte": "./components/AxisX.svelte",
45
47
  "./components/AxisY.svelte": "./components/AxisY.svelte",
46
- "./components/Bar.svelte": "./components/Bar.svelte",
48
+ "./components/Bars.svelte": "./components/Bars.svelte",
47
49
  "./components/Baseline.svelte": "./components/Baseline.svelte",
48
50
  "./components/Chart.svelte": "./components/Chart.svelte",
49
51
  "./components/Circle.svelte": "./components/Circle.svelte",
50
- "./components/ClevelandDotPlot.svelte": "./components/ClevelandDotPlot.svelte",
51
- "./components/HighlightBar.svelte": "./components/HighlightBar.svelte",
52
+ "./components/ConnectedPoints.svelte": "./components/ConnectedPoints.svelte",
53
+ "./components/Group.svelte": "./components/Group.svelte",
52
54
  "./components/HighlightLine.svelte": "./components/HighlightLine.svelte",
53
- "./components/Label.svelte": "./components/Label.svelte",
55
+ "./components/HighlightRect.svelte": "./components/HighlightRect.svelte",
56
+ "./components/Labels.svelte": "./components/Labels.svelte",
54
57
  "./components/Line.svelte": "./components/Line.svelte",
58
+ "./components/LinearGradient.svelte": "./components/LinearGradient.svelte",
55
59
  "./components/Path.svelte": "./components/Path.svelte",
60
+ "./components/Points.svelte": "./components/Points.svelte",
56
61
  "./components/Rect.svelte": "./components/Rect.svelte",
57
- "./components/Scatter.svelte": "./components/Scatter.svelte",
58
62
  "./components/Text.svelte": "./components/Text.svelte",
59
63
  "./components/Threshold.svelte": "./components/Threshold.svelte",
60
64
  "./components/Tooltip.svelte": "./components/Tooltip.svelte",
@@ -69,8 +73,11 @@
69
73
  "./utils/event": "./utils/event.js",
70
74
  "./utils/genData": "./utils/genData.js",
71
75
  "./utils": "./utils/index.js",
76
+ "./utils/math": "./utils/math.js",
77
+ "./utils/path": "./utils/path.js",
72
78
  "./utils/pivot": "./utils/pivot.js",
73
79
  "./utils/scales": "./utils/scales.js",
80
+ "./utils/stack": "./utils/stack.js",
74
81
  "./utils/string": "./utils/string.js",
75
82
  "./utils/ticks": "./utils/ticks.js"
76
83
  },
@@ -3,6 +3,6 @@ import { spring, tweened } from 'svelte/motion';
3
3
  * Convenient wrapper to get motion store based on properties, or fall back to basic writable() store
4
4
  */
5
5
  export declare function getMotionStore(value: any, options: {
6
- spring: boolean | Parameters<typeof spring>[1];
7
- tweened: boolean | Parameters<typeof tweened>[1];
6
+ spring?: boolean | Parameters<typeof spring>[1];
7
+ tweened?: boolean | Parameters<typeof tweened>[1];
8
8
  }): import("svelte/motion").Tweened<unknown> | import("svelte/motion").Spring<any> | import("svelte/store").Writable<any>;
@@ -17,3 +17,16 @@ export declare function createDateSeries(options: {
17
17
  }): {
18
18
  date: Date;
19
19
  }[];
20
+ export declare const wideData: {
21
+ year: string;
22
+ apples: number;
23
+ bananas: number;
24
+ cherries: number;
25
+ dates: number;
26
+ }[];
27
+ export declare const longData: {
28
+ year: string;
29
+ basket: number;
30
+ fruit: string;
31
+ value: number;
32
+ }[];
package/utils/genData.js CHANGED
@@ -33,3 +33,27 @@ export function createDateSeries(options) {
33
33
  };
34
34
  });
35
35
  }
36
+ export const wideData = [
37
+ { year: '2019', apples: 3840, bananas: 1920, cherries: 960, dates: 400 },
38
+ { year: '2018', apples: 1600, bananas: 1440, cherries: 960, dates: 400 },
39
+ { year: '2017', apples: 820, bananas: 1000, cherries: 640, dates: 400 },
40
+ { year: '2016', apples: 820, bananas: 560, cherries: 720, dates: 400 }
41
+ ];
42
+ export const longData = [
43
+ { year: '2019', basket: 1, fruit: 'apples', value: 3840 },
44
+ { year: '2019', basket: 1, fruit: 'bananas', value: 1920 },
45
+ { year: '2019', basket: 2, fruit: 'cherries', value: 960 },
46
+ { year: '2019', basket: 2, fruit: 'dates', value: 400 },
47
+ { year: '2018', basket: 1, fruit: 'apples', value: 1600 },
48
+ { year: '2018', basket: 1, fruit: 'bananas', value: 1440 },
49
+ { year: '2018', basket: 2, fruit: 'cherries', value: 960 },
50
+ { year: '2018', basket: 2, fruit: 'dates', value: 400 },
51
+ { year: '2017', basket: 1, fruit: 'apples', value: 820 },
52
+ { year: '2017', basket: 1, fruit: 'bananas', value: 1000 },
53
+ { year: '2017', basket: 2, fruit: 'cherries', value: 640 },
54
+ { year: '2017', basket: 2, fruit: 'dates', value: 400 },
55
+ { year: '2016', basket: 1, fruit: 'apples', value: 820 },
56
+ { year: '2016', basket: 1, fruit: 'bananas', value: 560 },
57
+ { year: '2016', basket: 2, fruit: 'cherries', value: 720 },
58
+ { year: '2016', basket: 2, fruit: 'dates', value: 400 }
59
+ ];
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Convert degrees to radians
3
+ */
4
+ export declare function degreesToRadians(degrees: number): number;
package/utils/math.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Convert degrees to radians
3
+ */
4
+ export function degreesToRadians(degrees) {
5
+ return (degrees * Math.PI) / 180;
6
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Convert easing into path data with number of points
3
+ * see: https://svelte.dev/examples#easing
4
+ */
5
+ export declare function getEasingPath(easing: (t: number) => number, count?: number): string;
package/utils/path.js ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Convert easing into path data with number of points
3
+ * see: https://svelte.dev/examples#easing
4
+ */
5
+ export function getEasingPath(easing, count = 1000) {
6
+ let pathData = `M0 ${count}`;
7
+ for (let i = 1; i <= count; i++) {
8
+ pathData += `
9
+ L${(i / count) * count}
10
+ ${count - easing(i / count) * count}
11
+ `;
12
+ }
13
+ return pathData;
14
+ }
package/utils/pivot.js CHANGED
@@ -13,7 +13,7 @@ export function getAccessor(key) {
13
13
  * - see also: https://observablehq.com/d/ac2a320cf2b0adc4 as generator
14
14
  */
15
15
  export function pivotLonger(data, columns, name, value) {
16
- const keep = data.columns.filter((c) => !columns.includes(c));
16
+ const keep = Object.keys(data[0]).filter((c) => !columns.includes(c));
17
17
  return data.flatMap((d) => {
18
18
  const base = keep.map((k) => [k, d[k]]);
19
19
  return columns.map((column) => {
@@ -0,0 +1,14 @@
1
+ import { stackOffsetNone } from 'd3-shape';
2
+ declare type OffsetType = typeof stackOffsetNone;
3
+ export declare function createStackData(data: any[], options: {
4
+ xKey: string;
5
+ groupBy?: string;
6
+ stackBy?: string;
7
+ offset?: OffsetType;
8
+ }): any[];
9
+ /**
10
+ * Function to offset each layer by the maximum of the previous layer
11
+ * - see: https://observablehq.com/@mkfreeman/separated-bar-chart
12
+ */
13
+ export declare function stackOffsetSeparated(series: any, order: any): void;
14
+ export {};
package/utils/stack.js ADDED
@@ -0,0 +1,69 @@
1
+ import { flatGroup, max, sum } from 'd3-array';
2
+ import { stack } from 'd3-shape';
3
+ import { pivotWider } from './pivot';
4
+ export function createStackData(data, options) {
5
+ if (options.groupBy) {
6
+ // Group then Stack (if needed)
7
+ const groupedData = flatGroup(data, (d) => d[options.xKey], (d) => d[options.groupBy]);
8
+ const result = groupedData.flatMap((d, i) => {
9
+ const groupKeys = d.slice(0, -1); // all but last item
10
+ const itemData = d.slice(-1)[0]; // last item
11
+ const pivotData = pivotWider(itemData, options.xKey, options.stackBy, 'value');
12
+ const stackKeys = [...new Set(itemData.map((d) => d[options.stackBy]))];
13
+ const stackData = stack().keys(stackKeys).offset(options.offset)(pivotData);
14
+ //console.log({ pivotData, stackData })
15
+ return stackData.flatMap((series) => {
16
+ //console.log({ series })
17
+ return series.flatMap((s) => {
18
+ return {
19
+ ...itemData[0],
20
+ keys: options.stackBy ? [...groupKeys, series.key] : groupKeys,
21
+ values: options.stackBy ? [s[0], s[1]] : [0, sum(itemData, (d) => d.value)]
22
+ };
23
+ });
24
+ });
25
+ });
26
+ return result;
27
+ }
28
+ else if (options.stackBy) {
29
+ // Stack only
30
+ const pivotData = pivotWider(data, options.xKey, options.stackBy, 'value');
31
+ const stackKeys = [...new Set(data.map((d) => d[options.stackBy]))];
32
+ const stackData = stack().keys(stackKeys).offset(options.offset)(pivotData);
33
+ const result = stackData.flatMap((series) => {
34
+ return series.flatMap((s) => {
35
+ return {
36
+ ...s.data,
37
+ keys: [s.data[options.xKey], series.key],
38
+ values: [s[0], s[1]]
39
+ };
40
+ });
41
+ });
42
+ return result;
43
+ }
44
+ else {
45
+ // TODO: Do anything if no group or stack? Convert to { ...d, keys: [...}, values: [...] ]}?
46
+ return data;
47
+ }
48
+ }
49
+ /**
50
+ * Function to offset each layer by the maximum of the previous layer
51
+ * - see: https://observablehq.com/@mkfreeman/separated-bar-chart
52
+ */
53
+ // TODO: Try to find way to support separated with createStackData() (which has isolated stacked per group)
54
+ export function stackOffsetSeparated(series, order) {
55
+ const gap = 200; // TODO: Determine way to pass in as option (curry?)
56
+ if (!((n = series.length) > 1))
57
+ return;
58
+ // Standard series
59
+ for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
60
+ (s0 = s1), (s1 = series[order[i]]);
61
+ let base = max(s0, (d) => d[1]) + gap; // here is where you calculate the maximum of the previous layer
62
+ for (var j = 0; j < m; ++j) {
63
+ // Set the height based on the data values, shifted up by the previous layer
64
+ let diff = s1[j][1] - s1[j][0];
65
+ s1[j][0] = base;
66
+ s1[j][1] = base + diff;
67
+ }
68
+ }
69
+ }
@@ -1,44 +0,0 @@
1
- <script >import { getContext } from 'svelte';
2
- const { data, xGet, yGet, y, yScale, rGet, config } = getContext('LayerCake');
3
- export let color = 'var(--color-blue-500)';
4
- export let radius = 5;
5
- $: midHeight = $yScale.bandwidth() / 2;
6
- function getColor(item, index) {
7
- if (typeof color == 'function') {
8
- return color({ value: $y(item), item, index });
9
- }
10
- else if ($config.r) {
11
- return $rGet(item);
12
- }
13
- else {
14
- return color;
15
- }
16
- }
17
- </script>
18
-
19
- <g class="dot-plot">
20
- {#each $data as row}
21
- <g class="dot-row">
22
- <line
23
- x1={Math.min(...$xGet(row))}
24
- y1={$yGet(row) + midHeight}
25
- x2={Math.max(...$xGet(row))}
26
- y2={$yGet(row) + midHeight}
27
- />
28
- {#each $xGet(row) as circleX, i}
29
- <circle cx={circleX} cy={$yGet(row) + midHeight} r={radius} fill={getColor(row, i)} />
30
- {/each}
31
- </g>
32
- {/each}
33
- </g>
34
-
35
- <style >
36
- line {
37
- stroke-width: 1px;
38
- stroke: #000;
39
- }
40
- circle {
41
- stroke: #000;
42
- stroke-width: 1px;
43
- }
44
- </style>
@@ -1,21 +0,0 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- color?: string | ((obj: {
5
- value: any;
6
- item: any;
7
- index: number;
8
- }) => string);
9
- radius?: number;
10
- };
11
- events: {
12
- [evt: string]: CustomEvent<any>;
13
- };
14
- slots: {};
15
- };
16
- export declare type ClevelandDotPlotProps = typeof __propDef.props;
17
- export declare type ClevelandDotPlotEvents = typeof __propDef.events;
18
- export declare type ClevelandDotPlotSlots = typeof __propDef.slots;
19
- export default class ClevelandDotPlot extends SvelteComponentTyped<ClevelandDotPlotProps, ClevelandDotPlotEvents, ClevelandDotPlotSlots> {
20
- }
21
- export {};
@@ -1,18 +0,0 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- data: any;
5
- };
6
- events: {
7
- click: MouseEvent;
8
- } & {
9
- [evt: string]: CustomEvent<any>;
10
- };
11
- slots: {};
12
- };
13
- export declare type HighlightBarProps = typeof __propDef.props;
14
- export declare type HighlightBarEvents = typeof __propDef.events;
15
- export declare type HighlightBarSlots = typeof __propDef.slots;
16
- export default class HighlightBar extends SvelteComponentTyped<HighlightBarProps, HighlightBarEvents, HighlightBarSlots> {
17
- }
18
- export {};
@@ -1,25 +0,0 @@
1
- <script>
2
- import { getContext } from 'svelte';
3
-
4
- const { data, xGet, yGet, xScale, yScale } = getContext('LayerCake');
5
-
6
- export let r = 5;
7
- export let fill = '#000';
8
- export let stroke = '#0cf';
9
- export let strokeWidth = 0;
10
- export let dx = 0;
11
- export let dy = 0;
12
- </script>
13
-
14
- <g class="scatter-group">
15
- {#each $data as d}
16
- <circle
17
- cx={$xGet(d) + (typeof dx === 'function' ? dx($xScale) : dx)}
18
- cy={$yGet(d) + (typeof dy === 'function' ? dy($yScale) : dy)}
19
- {r}
20
- {fill}
21
- {stroke}
22
- stroke-width={strokeWidth}
23
- />
24
- {/each}
25
- </g>
@@ -1,33 +0,0 @@
1
- /** @typedef {typeof __propDef.props} ScatterProps */
2
- /** @typedef {typeof __propDef.events} ScatterEvents */
3
- /** @typedef {typeof __propDef.slots} ScatterSlots */
4
- export default class Scatter extends SvelteComponentTyped<{
5
- dx?: number;
6
- dy?: number;
7
- stroke?: string;
8
- strokeWidth?: number;
9
- r?: number;
10
- fill?: string;
11
- }, {
12
- [evt: string]: CustomEvent<any>;
13
- }, {}> {
14
- }
15
- export type ScatterProps = typeof __propDef.props;
16
- export type ScatterEvents = typeof __propDef.events;
17
- export type ScatterSlots = typeof __propDef.slots;
18
- import { SvelteComponentTyped } from "svelte";
19
- declare const __propDef: {
20
- props: {
21
- dx?: number;
22
- dy?: number;
23
- stroke?: string;
24
- strokeWidth?: number;
25
- r?: number;
26
- fill?: string;
27
- };
28
- events: {
29
- [evt: string]: CustomEvent<any>;
30
- };
31
- slots: {};
32
- };
33
- export {};