layerchart 0.5.2 → 0.6.2

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,12 @@
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;
6
+ export let disablePointer = false;
4
7
  let dragging = false;
5
- let translate = spring({ x: 0, y: 0 });
6
- let scale = spring({ x: 1, y: 1 });
8
+ const translate = motionStore({ x: 0, y: 0 }, { spring, tweened });
9
+ const scale = motionStore({ x: 1, y: 1 }, { spring, tweened });
7
10
  let startPoint;
8
11
  let startTranslate;
9
12
  let svgEl = null;
@@ -29,7 +32,21 @@ export function translateCenter() {
29
32
  y: 0
30
33
  };
31
34
  }
35
+ export function zoomTo(newTranslate, newScale) {
36
+ $translate = {
37
+ x: $width / 2 - newTranslate.x,
38
+ y: $height / 2 - newTranslate.y
39
+ };
40
+ if (newScale) {
41
+ $scale = {
42
+ x: Math.min($width, $height) / newScale.x,
43
+ y: Math.min($width, $height) / newScale.y
44
+ };
45
+ }
46
+ }
32
47
  function handleMouseDown(e) {
48
+ if (disablePointer)
49
+ return;
33
50
  dragging = true;
34
51
  svgEl = e.target.ownerSVGElement;
35
52
  startPoint = localPoint(svgEl, e);
@@ -51,12 +68,16 @@ function handleMouseMove(e) {
51
68
  translate.set({
52
69
  x: startTranslate.x + deltaX / $scale.x,
53
70
  y: startTranslate.y + deltaY / $scale.y
54
- }, { hard: true });
71
+ }, spring ? { hard: true } : tweened ? { duration: 0 } : undefined);
55
72
  }
56
73
  function handleDoubleClick() {
74
+ if (disablePointer)
75
+ return;
57
76
  increase();
58
77
  }
59
78
  function handleWheel(e) {
79
+ if (disablePointer)
80
+ return;
60
81
  e.preventDefault();
61
82
  const scaleBy = -e.deltaY > 0 ? 1.1 : 0.9;
62
83
  // TODO: Update to match d3-zoom delta
@@ -65,7 +86,7 @@ function handleWheel(e) {
65
86
  scale.set({
66
87
  x: $scale.x * scaleBy,
67
88
  y: $scale.y * scaleBy
68
- }, { hard: true });
89
+ }, spring ? { hard: true } : tweened ? { duration: 0 } : undefined);
69
90
  }
70
91
  function localPoint(svgEl, e) {
71
92
  const screenCTM = svgEl.getScreenCTM();
@@ -104,5 +125,5 @@ $: newTranslate = {
104
125
  fill="transparent"
105
126
  />
106
127
  <g transform="translate({newTranslate.x},{newTranslate.y}) scale({$scale.x},{$scale.y})">
107
- <slot />
128
+ <slot scale={$scale} />
108
129
  </g>
@@ -1,16 +1,29 @@
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'];
7
+ disablePointer?: boolean;
4
8
  reset?: () => void;
5
9
  increase?: () => void;
6
10
  decrease?: () => void;
7
11
  translateCenter?: () => void;
12
+ zoomTo?: (newTranslate: {
13
+ x: number;
14
+ y: number;
15
+ }, newScale?: {
16
+ x: number;
17
+ y: number;
18
+ }) => void;
8
19
  };
9
20
  events: {
10
21
  [evt: string]: CustomEvent<any>;
11
22
  };
12
23
  slots: {
13
- default: {};
24
+ default: {
25
+ scale: any;
26
+ };
14
27
  };
15
28
  };
16
29
  export declare type ZoomProps = typeof __propDef.props;
@@ -21,5 +34,12 @@ export default class Zoom extends SvelteComponentTyped<ZoomProps, ZoomEvents, Zo
21
34
  get increase(): () => void;
22
35
  get decrease(): () => void;
23
36
  get translateCenter(): () => void;
37
+ get zoomTo(): (newTranslate: {
38
+ x: number;
39
+ y: number;
40
+ }, newScale?: {
41
+ x: number;
42
+ y: number;
43
+ }) => void;
24
44
  }
25
45
  export {};
@@ -19,6 +19,7 @@ export { default as Labels } from './Labels.svelte';
19
19
  export { default as Line } from './Line.svelte';
20
20
  export { default as LinearGradient } from './LinearGradient.svelte';
21
21
  export { default as Link } from './Link.svelte';
22
+ export { default as Pack } from './Pack.svelte';
22
23
  export { default as Partition } from './Partition.svelte';
23
24
  export { default as Path } from './Path.svelte';
24
25
  export { default as Pattern } from './Pattern.svelte';
@@ -19,6 +19,7 @@ export { default as Labels } from './Labels.svelte';
19
19
  export { default as Line } from './Line.svelte';
20
20
  export { default as LinearGradient } from './LinearGradient.svelte';
21
21
  export { default as Link } from './Link.svelte';
22
+ export { default as Pack } from './Pack.svelte';
22
23
  export { default as Partition } from './Partition.svelte';
23
24
  export { default as Path } from './Path.svelte';
24
25
  export { default as Pattern } from './Pattern.svelte';
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.2",
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",