layerchart 0.5.2 → 0.6.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.
- package/components/Circle.svelte +2 -2
- package/components/Circle.svelte.d.ts +2 -2
- package/components/Pack.svelte +19 -0
- package/components/Pack.svelte.d.ts +23 -0
- package/components/Treemap.svelte +4 -18
- package/components/Treemap.svelte.d.ts +2 -3
- package/components/Zoom.svelte +20 -6
- package/components/Zoom.svelte.d.ts +20 -1
- package/package.json +2 -1
package/components/Circle.svelte
CHANGED
|
@@ -3,8 +3,8 @@ import type { spring as springStore, tweened as tweenedStore } from 'svelte/moti
|
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
5
|
[x: string]: any;
|
|
6
|
-
cx
|
|
7
|
-
cy
|
|
6
|
+
cx?: number;
|
|
7
|
+
cy?: number;
|
|
8
8
|
r: number;
|
|
9
9
|
spring?: boolean | Parameters<typeof springStore>[1];
|
|
10
10
|
tweened?: boolean | Parameters<typeof tweenedStore>[1];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script>import { getContext } from 'svelte';
|
|
2
|
+
import { pack as d3Pack } from 'd3-hierarchy';
|
|
3
|
+
const { data, width, height } = getContext('LayerCake');
|
|
4
|
+
export let size = undefined;
|
|
5
|
+
/**
|
|
6
|
+
* see: https://github.com/d3/d3-hierarchy#pack_padding
|
|
7
|
+
*/
|
|
8
|
+
export let padding = undefined;
|
|
9
|
+
let pack;
|
|
10
|
+
$: {
|
|
11
|
+
pack = d3Pack().size(size ?? [$width, $height]);
|
|
12
|
+
if (padding) {
|
|
13
|
+
pack.padding(padding);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
$: packData = pack($data);
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<slot nodes={packData.descendants()} />
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
size?: [number, number] | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* see: https://github.com/d3/d3-hierarchy#pack_padding
|
|
7
|
+
*/ padding?: number | undefined;
|
|
8
|
+
};
|
|
9
|
+
events: {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
};
|
|
12
|
+
slots: {
|
|
13
|
+
default: {
|
|
14
|
+
nodes: import("d3-hierarchy").HierarchyCircularNode<unknown>[];
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export declare type PackProps = typeof __propDef.props;
|
|
19
|
+
export declare type PackEvents = typeof __propDef.events;
|
|
20
|
+
export declare type PackSlots = typeof __propDef.slots;
|
|
21
|
+
export default class Pack extends SvelteComponentTyped<PackProps, PackEvents, PackSlots> {
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
<script
|
|
2
|
-
* TODO:
|
|
3
|
-
* - [ ] Improve zoomable nested (apply extent ratio? const extentRatio = ($extents.y1 - $extents.y0) / $height;
|
|
4
|
-
*/
|
|
5
|
-
import { getContext } from 'svelte';
|
|
1
|
+
<script>import { getContext } from 'svelte';
|
|
6
2
|
import * as d3 from 'd3-hierarchy';
|
|
7
|
-
import { group } from 'd3-array';
|
|
8
3
|
import { aspectTile } from '../utils/treemap';
|
|
9
4
|
const { data, width, height } = getContext('LayerCake');
|
|
10
5
|
export let tile = d3.treemapSquarify;
|
|
@@ -15,7 +10,6 @@ export let paddingTop = 0;
|
|
|
15
10
|
export let paddingBottom = 0;
|
|
16
11
|
export let paddingLeft = undefined;
|
|
17
12
|
export let paddingRight = undefined;
|
|
18
|
-
export let nodeKey = (node, i) => i;
|
|
19
13
|
export let selected = null;
|
|
20
14
|
$: tileFunc =
|
|
21
15
|
tile === 'squarify'
|
|
@@ -56,17 +50,9 @@ $: {
|
|
|
56
50
|
treemap.paddingRight(paddingRight);
|
|
57
51
|
}
|
|
58
52
|
}
|
|
59
|
-
$:
|
|
53
|
+
$: treemapData = treemap($data);
|
|
60
54
|
// TODO: Remove selected
|
|
61
|
-
$: selected =
|
|
62
|
-
// group nodes by depth so can be rendered lowest to highest, to stack properly
|
|
63
|
-
$: nodesByDepth = group(root, (d) => d.depth);
|
|
55
|
+
$: selected = treemapData; // set initial selection
|
|
64
56
|
</script>
|
|
65
57
|
|
|
66
|
-
{
|
|
67
|
-
<g>
|
|
68
|
-
{#each nodes as node, i (nodeKey(node, i))}
|
|
69
|
-
<slot name="node" {node} />
|
|
70
|
-
{/each}
|
|
71
|
-
</g>
|
|
72
|
-
{/each}
|
|
58
|
+
<slot nodes={treemapData.descendants()} />
|
|
@@ -10,15 +10,14 @@ declare const __propDef: {
|
|
|
10
10
|
paddingBottom?: number;
|
|
11
11
|
paddingLeft?: any;
|
|
12
12
|
paddingRight?: any;
|
|
13
|
-
nodeKey?: (node: d3.HierarchyNode<any>, i: number) => any;
|
|
14
13
|
selected?: any;
|
|
15
14
|
};
|
|
16
15
|
events: {
|
|
17
16
|
[evt: string]: CustomEvent<any>;
|
|
18
17
|
};
|
|
19
18
|
slots: {
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
default: {
|
|
20
|
+
nodes: any;
|
|
22
21
|
};
|
|
23
22
|
};
|
|
24
23
|
};
|
package/components/Zoom.svelte
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
<script>import { getContext } from 'svelte';
|
|
2
|
-
import {
|
|
2
|
+
import { motionStore } from '../stores/motionStore';
|
|
3
3
|
const { width, height, padding } = getContext('LayerCake');
|
|
4
|
+
export let spring = undefined;
|
|
5
|
+
export let tweened = undefined;
|
|
4
6
|
let dragging = false;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
const translate = motionStore({ x: 0, y: 0 }, { spring, tweened });
|
|
8
|
+
const scale = motionStore({ x: 1, y: 1 }, { spring, tweened });
|
|
7
9
|
let startPoint;
|
|
8
10
|
let startTranslate;
|
|
9
11
|
let svgEl = null;
|
|
@@ -29,6 +31,18 @@ export function translateCenter() {
|
|
|
29
31
|
y: 0
|
|
30
32
|
};
|
|
31
33
|
}
|
|
34
|
+
export function zoomTo(newTranslate, newScale) {
|
|
35
|
+
$translate = {
|
|
36
|
+
x: $width / 2 - newTranslate.x,
|
|
37
|
+
y: $height / 2 - newTranslate.y
|
|
38
|
+
};
|
|
39
|
+
if (newScale) {
|
|
40
|
+
$scale = {
|
|
41
|
+
x: Math.min($width, $height) / newScale.x,
|
|
42
|
+
y: Math.min($width, $height) / newScale.y
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
32
46
|
function handleMouseDown(e) {
|
|
33
47
|
dragging = true;
|
|
34
48
|
svgEl = e.target.ownerSVGElement;
|
|
@@ -51,7 +65,7 @@ function handleMouseMove(e) {
|
|
|
51
65
|
translate.set({
|
|
52
66
|
x: startTranslate.x + deltaX / $scale.x,
|
|
53
67
|
y: startTranslate.y + deltaY / $scale.y
|
|
54
|
-
}, { hard: true });
|
|
68
|
+
}, spring ? { hard: true } : tweened ? { duration: 0 } : undefined);
|
|
55
69
|
}
|
|
56
70
|
function handleDoubleClick() {
|
|
57
71
|
increase();
|
|
@@ -65,7 +79,7 @@ function handleWheel(e) {
|
|
|
65
79
|
scale.set({
|
|
66
80
|
x: $scale.x * scaleBy,
|
|
67
81
|
y: $scale.y * scaleBy
|
|
68
|
-
}, { hard: true });
|
|
82
|
+
}, spring ? { hard: true } : tweened ? { duration: 0 } : undefined);
|
|
69
83
|
}
|
|
70
84
|
function localPoint(svgEl, e) {
|
|
71
85
|
const screenCTM = svgEl.getScreenCTM();
|
|
@@ -104,5 +118,5 @@ $: newTranslate = {
|
|
|
104
118
|
fill="transparent"
|
|
105
119
|
/>
|
|
106
120
|
<g transform="translate({newTranslate.x},{newTranslate.y}) scale({$scale.x},{$scale.y})">
|
|
107
|
-
<slot />
|
|
121
|
+
<slot scale={$scale} />
|
|
108
122
|
</g>
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import { motionStore } from '../stores/motionStore';
|
|
2
3
|
declare const __propDef: {
|
|
3
4
|
props: {
|
|
5
|
+
spring?: boolean | Parameters<typeof motionStore>[1]['spring'];
|
|
6
|
+
tweened?: boolean | Parameters<typeof motionStore>[1]['tweened'];
|
|
4
7
|
reset?: () => void;
|
|
5
8
|
increase?: () => void;
|
|
6
9
|
decrease?: () => void;
|
|
7
10
|
translateCenter?: () => void;
|
|
11
|
+
zoomTo?: (newTranslate: {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
}, newScale?: {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
}) => void;
|
|
8
18
|
};
|
|
9
19
|
events: {
|
|
10
20
|
[evt: string]: CustomEvent<any>;
|
|
11
21
|
};
|
|
12
22
|
slots: {
|
|
13
|
-
default: {
|
|
23
|
+
default: {
|
|
24
|
+
scale: any;
|
|
25
|
+
};
|
|
14
26
|
};
|
|
15
27
|
};
|
|
16
28
|
export declare type ZoomProps = typeof __propDef.props;
|
|
@@ -21,5 +33,12 @@ export default class Zoom extends SvelteComponentTyped<ZoomProps, ZoomEvents, Zo
|
|
|
21
33
|
get increase(): () => void;
|
|
22
34
|
get decrease(): () => void;
|
|
23
35
|
get translateCenter(): () => void;
|
|
36
|
+
get zoomTo(): (newTranslate: {
|
|
37
|
+
x: number;
|
|
38
|
+
y: number;
|
|
39
|
+
}, newScale?: {
|
|
40
|
+
x: number;
|
|
41
|
+
y: number;
|
|
42
|
+
}) => void;
|
|
24
43
|
}
|
|
25
44
|
export {};
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"author": "Sean Lynch <techniq35@gmail.com>",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": "techniq/layerchart",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.6.0",
|
|
7
7
|
"devDependencies": {
|
|
8
8
|
"@rollup/plugin-dsv": "^2.0.3",
|
|
9
9
|
"@sveltejs/adapter-vercel": "^1.0.0-next.58",
|
|
@@ -70,6 +70,7 @@
|
|
|
70
70
|
"./components/Line.svelte": "./components/Line.svelte",
|
|
71
71
|
"./components/LinearGradient.svelte": "./components/LinearGradient.svelte",
|
|
72
72
|
"./components/Link.svelte": "./components/Link.svelte",
|
|
73
|
+
"./components/Pack.svelte": "./components/Pack.svelte",
|
|
73
74
|
"./components/Partition.svelte": "./components/Partition.svelte",
|
|
74
75
|
"./components/Path.svelte": "./components/Path.svelte",
|
|
75
76
|
"./components/Pattern.svelte": "./components/Pattern.svelte",
|