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.
@@ -1,6 +1,6 @@
1
1
  <script>import { motionStore } from '../stores/motionStore';
2
- export let cx;
3
- export let cy;
2
+ export let cx = 0;
3
+ export let cy = 0;
4
4
  export let r;
5
5
  export let spring = undefined;
6
6
  export let tweened = undefined;
@@ -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: number;
7
- cy: number;
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
- $: root = treemap($data);
53
+ $: treemapData = treemap($data);
60
54
  // TODO: Remove selected
61
- $: selected = root; // set initial selection
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
- {#each Array.from(nodesByDepth) as [depth, nodes]}
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
- node: {
21
- node: unknown;
19
+ default: {
20
+ nodes: any;
22
21
  };
23
22
  };
24
23
  };
@@ -1,9 +1,11 @@
1
1
  <script>import { getContext } from 'svelte';
2
- import { spring } from 'svelte/motion';
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
- let translate = spring({ x: 0, y: 0 });
6
- let scale = spring({ x: 1, y: 1 });
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.5.2",
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",