layerchart 0.7.3 → 0.7.6

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.
@@ -35,7 +35,7 @@ $: {
35
35
  </script>
36
36
 
37
37
  {#if line}
38
- <Path {curve} {defined} {color} {tweened} {...line} />
38
+ <Path {data} {curve} {defined} {color} {tweened} {...line} />
39
39
  {/if}
40
40
 
41
41
  <path
@@ -10,7 +10,7 @@ import Text from './Text.svelte';
10
10
  import { formatNumberAsStyle } from 'svelte-ux/utils/number';
11
11
  import { isScaleBand } from '../utils/scales';
12
12
  import { greatestAbs, unique } from 'svelte-ux/utils/array';
13
- const { data, flatData, xGet, yRange, xScale, yScale, x, y, custom } = getContext('LayerCake');
13
+ const { flatData, xGet, yRange, xScale, yScale, x, y, custom } = getContext('LayerCake');
14
14
  export let orientation = 'auto';
15
15
  export let significantDigits = 3;
16
16
  export let formatStyle = null;
@@ -82,7 +82,7 @@ $: getValue = (item) => {
82
82
  </script>
83
83
 
84
84
  <g class="label-group">
85
- {#each $data as item, index}
85
+ {#each $flatData as item, index}
86
86
  <Text
87
87
  class="group-rect"
88
88
  textAnchor="middle"
@@ -7,7 +7,7 @@ import { line as d3Line } from 'd3-shape';
7
7
  // import { interpolateString } from 'd3-interpolate';
8
8
  import { interpolatePath } from 'd3-interpolate-path';
9
9
  import { motionStore } from '../stores/motionStore';
10
- const { data: contextData, xGet, yGet, zGet } = getContext('LayerCake');
10
+ const { data: contextData, xGet, yGet } = getContext('LayerCake');
11
11
  // Properties to override what is used from context
12
12
  export let data = undefined; // TODO: Update Type
13
13
  export let x = undefined; // TODO: Update Type
@@ -1,14 +1,14 @@
1
- <script>import { motionStore } from '../stores/motionStore';
1
+ <script>import { motionStore, resolveOptions } from '../stores/motionStore';
2
2
  export let x = 0;
3
3
  export let y = 0;
4
4
  export let width;
5
5
  export let height;
6
6
  export let spring = undefined;
7
7
  export let tweened = undefined;
8
- let tweened_x = motionStore(x, { spring, tweened });
9
- let tweened_y = motionStore(y, { spring, tweened });
10
- let tweened_width = motionStore(width, { spring, tweened });
11
- let tweened_height = motionStore(height, { spring, tweened });
8
+ let tweened_x = motionStore(x, resolveOptions('x', { spring, tweened }));
9
+ let tweened_y = motionStore(y, resolveOptions('y', { spring, tweened }));
10
+ let tweened_width = motionStore(width, resolveOptions('width', { spring, tweened }));
11
+ let tweened_height = motionStore(height, resolveOptions('height', { spring, tweened }));
12
12
  $: tweened_x.set(x);
13
13
  $: tweened_y.set(y);
14
14
  $: tweened_width.set(width);
@@ -13,31 +13,32 @@
13
13
 
14
14
  <script>
15
15
  // frontmatter: https://mdsvex.com/docs#frontmatter-1
16
- export let component;
17
- export let filename;
16
+ export let name;
17
+ export let sourceUrl;
18
+ export let docUrl;
18
19
  export let description;
19
20
  </script>
20
21
 
21
- {#if component}
22
+ {#if name}
22
23
  <div class="flex items-center gap-2">
23
- <span class="text-2xl font-bold">{component}</span>
24
- {#if component}
24
+ <span class="text-2xl font-bold">{name}</span>
25
+ {#if sourceUrl}
25
26
  <Tooltip title="View source">
26
27
  <Button
27
28
  class="text-black/50"
28
29
  icon={mdiCodeTags}
29
- href="https://github.com/techniq/layerchart/blob/master/src/lib/components/{component}.svelte"
30
+ href="https://github.com/techniq/layerchart/blob/master/{sourceUrl}"
30
31
  target="_blank"
31
32
  />
32
33
  </Tooltip>
33
34
  {/if}
34
35
 
35
- {#if filename}
36
+ {#if docUrl}
36
37
  <Tooltip title="Edit this page">
37
38
  <Button
38
39
  class="text-black/50"
39
40
  icon={mdiFileDocumentEditOutline}
40
- href="https://github.com/techniq/layerchart/blob/master/{filename}"
41
+ href="https://github.com/techniq/layerchart/blob/master/{docUrl}"
41
42
  target="_blank"
42
43
  />
43
44
  </Tooltip>
@@ -2,8 +2,9 @@
2
2
  /** @typedef {typeof __propDef.events} LayoutEvents */
3
3
  /** @typedef {typeof __propDef.slots} LayoutSlots */
4
4
  export default class Layout extends SvelteComponentTyped<{
5
- component: any;
6
- filename: any;
5
+ name: any;
6
+ sourceUrl: any;
7
+ docUrl: any;
7
8
  description: any;
8
9
  }, {
9
10
  [evt: string]: CustomEvent<any>;
@@ -21,8 +22,9 @@ import h1 from "./Header1.svelte";
21
22
  import { SvelteComponentTyped } from "svelte";
22
23
  declare const __propDef: {
23
24
  props: {
24
- component: any;
25
- filename: any;
25
+ name: any;
26
+ sourceUrl: any;
27
+ docUrl: any;
26
28
  description: any;
27
29
  };
28
30
  events: {
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.7.3",
6
+ "version": "0.7.6",
7
7
  "devDependencies": {
8
8
  "@rollup/plugin-dsv": "^2.0.3",
9
9
  "@sveltejs/adapter-vercel": "^1.0.0-next.59",
@@ -49,7 +49,7 @@
49
49
  "date-fns": "^2.28.0",
50
50
  "layercake": "^6.1.0",
51
51
  "lodash-es": "^4.17.21",
52
- "svelte-ux": "^0.6.10"
52
+ "svelte-ux": "^0.7.0"
53
53
  },
54
54
  "exports": {
55
55
  "./package.json": "./package.json",
@@ -1,9 +1,26 @@
1
1
  import { spring, tweened } from 'svelte/motion';
2
+ export declare type SpringOptions = Parameters<typeof spring>[1];
3
+ export declare type TweenedOptions = Parameters<typeof tweened>[1];
2
4
  export declare type MotionOptions = {
3
- spring?: boolean | Parameters<typeof spring>[1];
4
- tweened?: boolean | Parameters<typeof tweened>[1];
5
+ spring?: boolean | SpringOptions;
6
+ tweened?: boolean | TweenedOptions;
7
+ };
8
+ export declare type PropMotionOptions = {
9
+ spring?: boolean | SpringOptions | {
10
+ [prop: string]: SpringOptions;
11
+ };
12
+ tweened?: boolean | TweenedOptions | {
13
+ [prop: string]: TweenedOptions;
14
+ };
5
15
  };
6
16
  /**
7
17
  * Convenient wrapper to create a motion store (spring(), tweened()) based on properties, or fall back to basic writable() store
8
18
  */
9
19
  export declare function motionStore(value: any, options: MotionOptions): import("svelte/motion").Tweened<unknown> | import("svelte/motion").Spring<any> | import("svelte/store").Writable<any>;
20
+ /**
21
+ * Helper to resolve motion options with specific property option (useful for specifying per-prop delays)
22
+ */
23
+ export declare function resolveOptions(prop: string, options: PropMotionOptions): {
24
+ spring: any;
25
+ tweened: any;
26
+ };
@@ -14,3 +14,20 @@ export function motionStore(value, options) {
14
14
  return writable(value);
15
15
  }
16
16
  }
17
+ /**
18
+ * Helper to resolve motion options with specific property option (useful for specifying per-prop delays)
19
+ */
20
+ export function resolveOptions(prop, options) {
21
+ return {
22
+ spring: typeof options.spring === 'boolean' || options.spring == null
23
+ ? options.spring
24
+ : prop in options.spring
25
+ ? options.spring[prop]
26
+ : options.spring,
27
+ tweened: typeof options.tweened === 'boolean' || options.tweened == null
28
+ ? options.tweened
29
+ : prop in options.tweened
30
+ ? options.tweened[prop]
31
+ : options.tweened
32
+ };
33
+ }
package/utils/scales.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { derived } from 'svelte/store';
2
2
  import { tweened, spring } from 'svelte/motion';
3
- import { min } from 'd3-array';
4
3
  import { motionStore } from '../stores/motionStore';
5
4
  /**
6
5
  * Implemenation for missing `scaleBand().invert()`
@@ -14,8 +13,8 @@ import { motionStore } from '../stores/motionStore';
14
13
  */
15
14
  export function scaleBandInvert(scale) {
16
15
  const domain = scale.domain();
17
- const paddingOuter = scale(min(domain));
18
16
  const eachBand = scale.step();
17
+ const paddingOuter = eachBand * (scale.paddingOuter?.() ?? scale.padding()); // `scaleBand` uses paddingOuter(), while `scalePoint` uses padding() for outer paddding - https://github.com/d3/d3-scale#point_padding
19
18
  return function (value) {
20
19
  // TODO: Should this use Math.round to better select? https://stackoverflow.com/questions/38633082/d3-getting-invert-value-of-band-scales/50846323#comment104743795_50846323
21
20
  const index = Math.floor((value - paddingOuter) / eachBand);
package/utils/stack.js CHANGED
@@ -1,4 +1,4 @@
1
- import { flatGroup, max, sum } from 'd3-array';
1
+ import { flatGroup, max, rollup, sum } from 'd3-array';
2
2
  import { stack } from 'd3-shape';
3
3
  import { pivotWider } from './pivot';
4
4
  export function createStackData(data, options) {
@@ -42,8 +42,13 @@ export function createStackData(data, options) {
42
42
  return result;
43
43
  }
44
44
  else {
45
- // TODO: Do anything if no group or stack? Convert to { ...d, keys: [...}, values: [...] ]}?
46
- return data;
45
+ // No grouping or stacking. Aggregate based on `xKey`
46
+ return Array.from(rollup(data, (items) => {
47
+ return {
48
+ keys: [items[0][options.xKey]],
49
+ values: [0, sum(items, (d) => d.value)]
50
+ };
51
+ }, (d) => d[options.xKey]).values());
47
52
  }
48
53
  }
49
54
  /**
@@ -1,27 +0,0 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- import type { spring as springStore, tweened as tweenedStore } from 'svelte/motion';
3
- declare const __propDef: {
4
- props: {
5
- [x: string]: any;
6
- x?: number;
7
- y?: number;
8
- width: number;
9
- height: number;
10
- spring?: boolean | Parameters<typeof springStore>[1];
11
- tweened?: boolean | Parameters<typeof tweenedStore>[1];
12
- };
13
- events: {
14
- click: MouseEvent;
15
- mouseover: MouseEvent;
16
- mouseout: MouseEvent;
17
- } & {
18
- [evt: string]: CustomEvent<any>;
19
- };
20
- slots: {};
21
- };
22
- export declare type RectProps = typeof __propDef.props;
23
- export declare type RectEvents = typeof __propDef.events;
24
- export declare type RectSlots = typeof __propDef.slots;
25
- export default class Rect extends SvelteComponentTyped<RectProps, RectEvents, RectSlots> {
26
- }
27
- export {};