layerchart 0.0.9 → 0.2.1

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,15 +1,18 @@
1
1
  <script >/*
2
2
  TODO:
3
- - [ ] Chart usage
4
- - [x] Track on/off and pass props
5
- - [x] Text configuration / slot?
6
- - [ ] Pie usage (second dimension?)
7
- - [x] style / class (gradient, etc)
8
3
  - [ ] Allow spring/tweened to be reactive (but ignore value)
9
4
  */
10
5
  // https://caniuse.com/#feat=css-conic-gradients
11
6
  // https://css-tricks.com/snippets/css/css-conic-gradient/
12
7
  // https://developer.mozilla.org/en-US/docs/Web/CSS/conic-gradient
8
+ // https://stackoverflow.com/questions/2465405/svg-angular-gradient
9
+ // https://stackoverflow.com/questions/18206361/svg-multiple-color-on-circle-stroke
10
+ // https://bl.ocks.org/mbostock/4163057
11
+ // https://github.com/d3/d3/issues/2427#issuecomment-100759055
12
+ // https://github.com/mnsht/gradient-path
13
+ // https://svelte.dev/repl/09711e43a1264ba18945d7db7cab9335?version=3.38.2
14
+ // https://codepen.io/simeydotme/pen/rrOEmO/
15
+ import { getContext } from 'svelte';
13
16
  import { arc as d3arc } from 'd3-shape';
14
17
  import { scaleLinear } from 'd3-scale';
15
18
  import { getMotionStore } from '../stores/motionStore';
@@ -20,30 +23,58 @@ export let value = 0;
20
23
  let tweened_value = getMotionStore(value, { spring, tweened });
21
24
  $: tweened_value.set(value);
22
25
  export let domain = [0, 100];
26
+ /**
27
+ * Range [min,max] in degrees. See also startAngle/endAngle
28
+ */
23
29
  export let range = [0, 360]; // degrees
24
- export let innerRadius = 50;
25
- export let outerRadius = 60;
26
- export let cornerRadius = 10;
30
+ /**
31
+ * Start angle in radians
32
+ */
33
+ export let startAngle = undefined;
34
+ /**
35
+ * End angle in radians
36
+ */
37
+ export let endAngle = undefined;
38
+ /**
39
+ * Define innerRadius.
40
+ * value >= 1: discrete value
41
+ * value > 0: percent of `outerRadius`
42
+ * value < 0: offset of `outerRadius`
43
+ * default: yRange min
44
+ */
45
+ export let innerRadius = undefined;
46
+ /**
47
+ * Define outerRadius. Defaults to yRange max/2 (ie. chart height / 2)
48
+ */
49
+ export let outerRadius = undefined;
50
+ export let cornerRadius = 0;
27
51
  export let padAngle = 0;
28
- export let padRadius = 0;
52
+ // export let padRadius = 0;
29
53
  export let track = false;
54
+ const { yRange } = getContext('LayerCake');
30
55
  $: scale = scaleLinear().domain(domain).range(range);
31
- $: startAngle = degreesToRadians(range[0]);
32
- $: endAngle = degreesToRadians(range[1]);
33
- $: valueAngle = degreesToRadians(scale($tweened_value));
56
+ $: _outerRadius = outerRadius ?? $yRange[0] / 2;
57
+ $: _innerRadius =
58
+ (innerRadius > 1
59
+ ? innerRadius
60
+ : innerRadius > 0
61
+ ? _outerRadius * innerRadius
62
+ : innerRadius < 0
63
+ ? _outerRadius - innerRadius
64
+ : innerRadius) ?? $yRange[1];
34
65
  $: arc = d3arc()
35
- .innerRadius(innerRadius)
36
- .outerRadius(outerRadius)
37
- .startAngle(startAngle)
38
- .endAngle(valueAngle)
66
+ .innerRadius(_innerRadius)
67
+ .outerRadius(_outerRadius)
68
+ .startAngle(startAngle ?? degreesToRadians(range[0]))
69
+ .endAngle(endAngle ?? degreesToRadians(scale($tweened_value)))
39
70
  .cornerRadius(cornerRadius)
40
71
  .padAngle(padAngle);
41
72
  // .padRadius(padRadius);
42
73
  $: trackArc = d3arc()
43
- .innerRadius(innerRadius)
44
- .outerRadius(outerRadius)
45
- .startAngle(startAngle)
46
- .endAngle(endAngle)
74
+ .innerRadius(_innerRadius)
75
+ .outerRadius(_outerRadius)
76
+ .startAngle(startAngle ?? degreesToRadians(range[0]))
77
+ .endAngle(endAngle ?? degreesToRadians(range[1]))
47
78
  .cornerRadius(cornerRadius)
48
79
  .padAngle(padAngle);
49
80
  // .padRadius(padRadius);
@@ -66,12 +97,19 @@ $: labelArcBottomOffset = {
66
97
  y: (outerRadius - boundingBox.height) * -1
67
98
  };
68
99
  // $: console.log(labelArcBottomOffset)
100
+ /**
101
+ * Offset arc from center
102
+ */
103
+ export let offset = 0;
104
+ $: angle = (startAngle + endAngle) / 2;
105
+ $: xOffset = Math.sin(angle) * offset;
106
+ $: yOffset = -Math.cos(angle) * offset;
69
107
  </script>
70
108
 
71
109
  {#if track}
72
110
  <path d={trackArc()} class="track" bind:this={trackArcEl} {...track} />
73
111
  {/if}
74
112
 
75
- <path d={arc()} {...$$restProps} />
113
+ <path d={arc()} transform="translate({xOffset}, {yOffset})" {...$$restProps} />
76
114
 
77
115
  <slot value={$tweened_value} centroid={trackArcCentroid} {boundingBox} />
@@ -8,12 +8,14 @@ declare const __propDef: {
8
8
  value?: number;
9
9
  domain?: number[];
10
10
  range?: number[];
11
- innerRadius?: number;
12
- outerRadius?: number;
11
+ startAngle?: number;
12
+ endAngle?: number;
13
+ innerRadius?: any;
14
+ outerRadius?: any;
13
15
  cornerRadius?: number;
14
16
  padAngle?: number;
15
- padRadius?: number;
16
17
  track?: boolean | svelte.JSX.SVGProps<SVGPathElement>;
18
+ offset?: number;
17
19
  };
18
20
  events: {
19
21
  [evt: string]: CustomEvent<any>;
@@ -32,7 +32,7 @@ $: tickVals = Array.isArray(ticks)
32
32
  rotate={315}
33
33
  textAnchor="end"
34
34
  verticalAnchor="middle"
35
- style="font-size: 10px;"
35
+ style="font-size: 10px; stroke: red;"
36
36
  value={format(tick, formatTick ?? $xScale.tickFormat?.())}
37
37
  />
38
38
  </g>
@@ -6,17 +6,24 @@
6
6
  import { getContext } from 'svelte';
7
7
  import { extent } from 'd3-array';
8
8
  import Line from './Line.svelte';
9
+ import { isScaleBand } from '../utils/scales';
9
10
  const context = getContext('LayerCake');
10
- const { data, xGet, yGet, config } = context;
11
- export let offsetX = 0;
12
- export let offsetY = 0;
13
- function getOffset(value, offset) {
11
+ const { data, xGet, yGet, xScale, yScale, config } = context;
12
+ export let offsetX = undefined;
13
+ export let offsetY = undefined;
14
+ function getOffset(value, offset, scale) {
14
15
  if (typeof offset === 'function') {
15
16
  return offset(value, context);
16
17
  }
17
- else {
18
+ else if (offset != null) {
18
19
  return offset;
19
20
  }
21
+ else if (isScaleBand(scale)) {
22
+ return scale.bandwidth() / 2;
23
+ }
24
+ else {
25
+ return 0;
26
+ }
20
27
  }
21
28
  $: points = $data.flatMap((d) => {
22
29
  if (Array.isArray($config.x)) {
@@ -26,10 +33,10 @@ $: points = $data.flatMap((d) => {
26
33
  */
27
34
  const [xMin, xMax] = extent($xGet(d));
28
35
  return {
29
- x1: xMin + getOffset(xMin, offsetX),
30
- y1: $yGet(d) + getOffset($yGet(d), offsetY),
31
- x2: xMax + getOffset(xMax, offsetX),
32
- y2: $yGet(d) + getOffset($yGet(d), offsetY)
36
+ x1: xMin + getOffset(xMin, offsetX, $xScale),
37
+ y1: $yGet(d) + getOffset($yGet(d), offsetY, $yScale),
38
+ x2: xMax + getOffset(xMax, offsetX, $xScale),
39
+ y2: $yGet(d) + getOffset($yGet(d), offsetY, $yScale)
33
40
  };
34
41
  }
35
42
  else if (Array.isArray($config.y)) {
@@ -39,10 +46,10 @@ $: points = $data.flatMap((d) => {
39
46
  */
40
47
  const [yMin, yMax] = extent($yGet(d));
41
48
  return {
42
- x1: $xGet(d) + getOffset($xGet(d), offsetX),
43
- y1: yMin + getOffset(yMin, offsetY),
44
- x2: $xGet(d) + getOffset($xGet(d), offsetX),
45
- y2: yMax + getOffset(yMax, offsetY)
49
+ x1: $xGet(d) + getOffset($xGet(d), offsetX, $xScale),
50
+ y1: yMin + getOffset(yMin, offsetY, $yScale),
51
+ x2: $xGet(d) + getOffset($xGet(d), offsetX, $xScale),
52
+ y2: yMax + getOffset(yMax, offsetY, $yScale)
46
53
  };
47
54
  }
48
55
  else {
@@ -52,10 +59,10 @@ $: points = $data.flatMap((d) => {
52
59
  */
53
60
  // Not really supported (nothing to connect...)
54
61
  return {
55
- x1: $xGet(d) + getOffset($xGet(d), offsetX),
56
- y1: $yGet(d) + getOffset($yGet(d), offsetY),
57
- x2: $xGet(d) + getOffset($xGet(d), offsetX),
58
- y2: $yGet(d) + getOffset($yGet(d), offsetY)
62
+ x1: $xGet(d) + getOffset($xGet(d), offsetX, $xScale),
63
+ y1: $yGet(d) + getOffset($yGet(d), offsetY, $yScale),
64
+ x2: $xGet(d) + getOffset($xGet(d), offsetX, $xScale),
65
+ y2: $yGet(d) + getOffset($yGet(d), offsetY, $yScale)
59
66
  };
60
67
  }
61
68
  });
@@ -2,15 +2,15 @@
2
2
  /**
3
3
  * Translate x
4
4
  */
5
- export let x;
5
+ export let x = undefined;
6
6
  /**
7
7
  * Translate x
8
8
  */
9
- export let y;
9
+ export let y = undefined;
10
10
  /**
11
11
  * Center within chart
12
12
  */
13
- export let center;
13
+ export let center = false;
14
14
  const { width, height } = getContext('LayerCake');
15
15
  let transform = undefined;
16
16
  $: if (x != null || y != null) {
@@ -2,9 +2,9 @@ import { SvelteComponentTyped } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
4
  [x: string]: any;
5
- x: number;
6
- y: number;
7
- center: boolean;
5
+ x?: number;
6
+ y?: number;
7
+ center?: boolean;
8
8
  };
9
9
  events: {
10
10
  [evt: string]: CustomEvent<any>;
@@ -1,5 +1,6 @@
1
1
  <script >export let id;
2
2
  export let from;
3
+ export let via; // TODO: Currently --tw-gradient-via is not the color but the full stops
3
4
  export let to;
4
5
  export let vertical = false;
5
6
  export let x1 = '0%';
@@ -20,8 +21,18 @@ export let rotate = undefined;
20
21
  {...$$restProps}
21
22
  >
22
23
  <slot>
23
- <stop offset="0%" stop-color={from} />
24
- <stop offset="100%" stop-color={to} />
24
+ {#if from}
25
+ <stop offset="0%" stop-color={from === true ? 'var(--tw-gradient-from)' : from} />
26
+ {/if}
27
+
28
+ {#if via}
29
+ <!-- <stop offset="50%" stop-color={via === true ? 'var(--tw-gradient-via)' : via} /> -->
30
+ <stop offset="50%" stop-color={via} />
31
+ {/if}
32
+
33
+ {#if to}
34
+ <stop offset="100%" stop-color={to === true ? 'var(--tw-gradient-to)' : to} />
35
+ {/if}
25
36
  </slot>
26
37
  </linearGradient>
27
38
  </defs>
@@ -3,8 +3,9 @@ declare const __propDef: {
3
3
  props: {
4
4
  [x: string]: any;
5
5
  id: string;
6
- from: string;
7
- to: string;
6
+ from: string | boolean;
7
+ via: string;
8
+ to: string | boolean;
8
9
  vertical?: boolean;
9
10
  x1?: string;
10
11
  y1?: string;
@@ -1,4 +1,8 @@
1
- <script >import { getContext } from 'svelte';
1
+ <script >/*
2
+ TODO:
3
+ - [ ] Show path progressively show / animated in on load. Also fix sliding in from left side (at last in from bottom)
4
+ */
5
+ import { getContext } from 'svelte';
2
6
  import { line as d3Line } from 'd3-shape';
3
7
  // import { interpolateString } from 'd3-interpolate';
4
8
  import { interpolatePath } from 'd3-interpolate-path';
@@ -0,0 +1,13 @@
1
+ <script >// https://developer.mozilla.org/en-US/docs/Web/SVG/Element/pattern
2
+ // https://airbnb.io/visx/patterns
3
+ // https://github.com/airbnb/visx/tree/master/packages/visx-pattern/src/patterns
4
+ export let id;
5
+ export let width;
6
+ export let height;
7
+ </script>
8
+
9
+ <defs>
10
+ <pattern {id} {width} {height} patternUnits="userSpaceOnUse" {...$$restProps}>
11
+ <slot />
12
+ </pattern>
13
+ </defs>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ id: string;
6
+ width: number;
7
+ height: number;
8
+ };
9
+ events: {
10
+ [evt: string]: CustomEvent<any>;
11
+ };
12
+ slots: {
13
+ default: {};
14
+ };
15
+ };
16
+ export declare type PatternProps = typeof __propDef.props;
17
+ export declare type PatternEvents = typeof __propDef.events;
18
+ export declare type PatternSlots = typeof __propDef.slots;
19
+ export default class Pattern extends SvelteComponentTyped<PatternProps, PatternEvents, PatternSlots> {
20
+ }
21
+ export {};
@@ -0,0 +1,88 @@
1
+ <script >import { getContext } from 'svelte';
2
+ import { pie as d3pie } from 'd3-shape';
3
+ import Arc from './Arc.svelte';
4
+ import Group from './Group.svelte';
5
+ import { degreesToRadians } from '../utils/math';
6
+ import { getMotionStore } from '../stores/motionStore';
7
+ /*
8
+ TODO:
9
+ - [ ] Offset (always, on hover)
10
+ - [ ] Labels
11
+ - [ ] Multiple nested circles (zScale, or take in data to override context data). See Path/Area/Threshold
12
+ - [ ] Hover events / change innerRadius / outerRadius, etc
13
+ */
14
+ export let data = undefined; // TODO: Update Type
15
+ /**
16
+ * Range [min,max] in degrees. See also startAngle/endAngle
17
+ */
18
+ export let range = [0, 360]; // degrees
19
+ /**
20
+ * Start angle in radians
21
+ */
22
+ export let startAngle = undefined;
23
+ /**
24
+ * End angle in radians
25
+ */
26
+ export let endAngle = undefined;
27
+ /**
28
+ * Define innerRadius.
29
+ * value >= 1: discrete value
30
+ * value > 0: percent of `outerRadius`
31
+ * value < 0: offset of `outerRadius`
32
+ * default: yRange min
33
+ */
34
+ export let innerRadius = undefined;
35
+ /**
36
+ * Define outerRadius. Defaults to yRange max/2 (ie. chart height / 2)
37
+ */
38
+ export let outerRadius = undefined;
39
+ export let cornerRadius = 0;
40
+ export let padAngle = 0;
41
+ // export let padRadius = 0;
42
+ export let color = 'black';
43
+ export let spring = undefined;
44
+ export let tweened = undefined;
45
+ /**
46
+ * Offset all arcs from center
47
+ */
48
+ export let offset = 0;
49
+ const { data: contextData, x, y, xRange, rGet, config } = getContext('LayerCake');
50
+ $: resolved_endAngle = endAngle ?? degreesToRadians($config.xRange ? $xRange[1] : range[1]);
51
+ let tweened_endAngle = getMotionStore(0, { spring, tweened });
52
+ $: tweened_endAngle.set(resolved_endAngle);
53
+ $: pie = d3pie()
54
+ .startAngle(startAngle ?? degreesToRadians($config.xRange ? $xRange[0] : range[0]))
55
+ .endAngle($tweened_endAngle)
56
+ .padAngle(padAngle)
57
+ .value($x);
58
+ $: arcs = pie(data ?? $contextData);
59
+ // $: console.log({ arcs, $yRange });
60
+ function getColor(item, index) {
61
+ if (typeof color === 'function') {
62
+ return color({ value: $y(item), item, index });
63
+ }
64
+ else if ($config.r) {
65
+ return $rGet(item);
66
+ }
67
+ else {
68
+ return color;
69
+ }
70
+ }
71
+ </script>
72
+
73
+ <Group center>
74
+ <slot {arcs}>
75
+ {#each arcs as arc, index}
76
+ <Arc
77
+ startAngle={arc.startAngle}
78
+ endAngle={arc.endAngle}
79
+ padAngle={arc.padAngle}
80
+ {innerRadius}
81
+ {outerRadius}
82
+ {cornerRadius}
83
+ {offset}
84
+ fill={getColor(arc.data, index)}
85
+ />
86
+ {/each}
87
+ </slot>
88
+ </Group>
@@ -0,0 +1,54 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import type { spring as springStore, tweened as tweenedStore } from 'svelte/motion';
3
+ declare const __propDef: {
4
+ props: {
5
+ data?: any;
6
+ /**
7
+ * Range [min,max] in degrees. See also startAngle/endAngle
8
+ */ range?: number[];
9
+ /**
10
+ * Start angle in radians
11
+ */ startAngle?: number;
12
+ /**
13
+ * End angle in radians
14
+ */ endAngle?: number;
15
+ /**
16
+ * Define innerRadius.
17
+ * value >= 1: discrete value
18
+ * value > 0: percent of `outerRadius`
19
+ * value < 0: offset of `outerRadius`
20
+ * default: yRange min
21
+ */ innerRadius?: any;
22
+ /**
23
+ * Define outerRadius. Defaults to yRange max/2 (ie. chart height / 2)
24
+ */ outerRadius?: any;
25
+ cornerRadius?: number;
26
+ padAngle?: number;
27
+ color?: string | ((obj: {
28
+ value: any;
29
+ item: any;
30
+ index: number;
31
+ }) => string);
32
+ spring?: boolean | Parameters<typeof springStore>[1];
33
+ tweened?: boolean | Parameters<typeof tweenedStore>[1];
34
+ /**
35
+ * Offset all arcs from center
36
+ */ offset?: number;
37
+ };
38
+ events: {
39
+ [evt: string]: CustomEvent<any>;
40
+ };
41
+ slots: {
42
+ default: {
43
+ arcs: import("d3-shape").PieArcDatum<number | {
44
+ valueOf(): number;
45
+ }>[];
46
+ };
47
+ };
48
+ };
49
+ export declare type PieProps = typeof __propDef.props;
50
+ export declare type PieEvents = typeof __propDef.events;
51
+ export declare type PieSlots = typeof __propDef.slots;
52
+ export default class Pie extends SvelteComponentTyped<PieProps, PieEvents, PieSlots> {
53
+ }
54
+ export {};
@@ -1,17 +1,24 @@
1
1
  <script >import { getContext } from 'svelte';
2
2
  import Circle from './Circle.svelte';
3
+ import { isScaleBand } from '../utils/scales';
3
4
  const context = getContext('LayerCake');
4
- const { data, xGet, yGet, config } = context;
5
+ const { data, xGet, yGet, xScale, yScale, config } = context;
5
6
  export let r = 5;
6
- export let offsetX = 0;
7
- export let offsetY = 0;
8
- function getOffset(value, offset) {
7
+ export let offsetX = undefined;
8
+ export let offsetY = undefined;
9
+ function getOffset(value, offset, scale) {
9
10
  if (typeof offset === 'function') {
10
11
  return offset(value, context);
11
12
  }
12
- else {
13
+ else if (offset != null) {
13
14
  return offset;
14
15
  }
16
+ else if (isScaleBand(scale)) {
17
+ return scale.bandwidth() / 2;
18
+ }
19
+ else {
20
+ return 0;
21
+ }
15
22
  }
16
23
  $: points = $data.flatMap((d) => {
17
24
  if (Array.isArray($config.x)) {
@@ -21,8 +28,8 @@ $: points = $data.flatMap((d) => {
21
28
  */
22
29
  return $xGet(d).map((x) => {
23
30
  return {
24
- x: x + getOffset(x, offsetX),
25
- y: $yGet(d) + getOffset($yGet(d), offsetY)
31
+ x: x + getOffset(x, offsetX, $xScale),
32
+ y: $yGet(d) + getOffset($yGet(d), offsetY, $yScale)
26
33
  };
27
34
  });
28
35
  }
@@ -33,8 +40,8 @@ $: points = $data.flatMap((d) => {
33
40
  */
34
41
  return $yGet(d).map((y) => {
35
42
  return {
36
- x: $xGet(d) + getOffset($xGet(d), offsetX),
37
- y: y + getOffset(y, offsetY)
43
+ x: $xGet(d) + getOffset($xGet(d), offsetX, $xScale),
44
+ y: y + getOffset(y, offsetY, $yScale)
38
45
  };
39
46
  });
40
47
  }
@@ -44,8 +51,8 @@ $: points = $data.flatMap((d) => {
44
51
  y="prop2"
45
52
  */
46
53
  return {
47
- x: $xGet(d) + getOffset($xGet(d), offsetX),
48
- y: $yGet(d) + getOffset($yGet(d), offsetY)
54
+ x: $xGet(d) + getOffset($xGet(d), offsetX, $xScale),
55
+ y: $yGet(d) + getOffset($yGet(d), offsetY, $yScale)
49
56
  };
50
57
  }
51
58
  });
@@ -2,6 +2,9 @@
2
2
  /*
3
3
  TODO:
4
4
  - [ ] Handle styled text (use <slot /> to measure?)
5
+ - [ ] Simplify by using `alignment-baseline` / `dominant-baseline`, rework multiline or drop support, etc
6
+ - https://svelte.dev/repl/f12d3003313a43ba8a0be53e5786f1c7?version=3.44.3
7
+ - https://observablehq.com/@neocartocnrs/cheat-sheet-on-texts-in-svg
5
8
 
6
9
  Reference:
7
10
  - https://bl.ocks.org/mbostock/7555321
@@ -116,7 +119,9 @@ function isValidXOrY(xOrY) {
116
119
  }
117
120
  </script>
118
121
 
119
- <svg x={dx} y={dy} style="overflow: visible">
122
+ <!-- overflow: visible; allow contents to be shown outside element -->
123
+ <!-- paint-order: stroke; support stroke outlining text -->
124
+ <svg x={dx} y={dy} style="overflow: visible; paint-order: stroke;">
120
125
  {#if isValidXOrY(x) && isValidXOrY(y)}
121
126
  <text {x} {y} {transform} text-anchor={textAnchor} {...$$restProps}>
122
127
  {#each wordsByLines as line, index}
@@ -0,0 +1,14 @@
1
+ <script>
2
+ import { SectionDivider } from 'svelte-ux';
3
+ </script>
4
+
5
+ <!--
6
+ TODO:
7
+ - [ ] Set id based on slot value
8
+ - Needed for #examples, #api, etc
9
+ - Maybe possible to set/get props from markdown/mdsvex
10
+ - Example: `#API { id: 'api' }
11
+ -->
12
+ <SectionDivider {...$$restProps}>
13
+ <slot />
14
+ </SectionDivider>
@@ -0,0 +1,27 @@
1
+ /** @typedef {typeof __propDef.props} Header1Props */
2
+ /** @typedef {typeof __propDef.events} Header1Events */
3
+ /** @typedef {typeof __propDef.slots} Header1Slots */
4
+ export default class Header1 extends SvelteComponentTyped<{
5
+ [x: string]: any;
6
+ }, {
7
+ [evt: string]: CustomEvent<any>;
8
+ }, {
9
+ default: {};
10
+ }> {
11
+ }
12
+ export type Header1Props = typeof __propDef.props;
13
+ export type Header1Events = typeof __propDef.events;
14
+ export type Header1Slots = typeof __propDef.slots;
15
+ import { SvelteComponentTyped } from "svelte";
16
+ declare const __propDef: {
17
+ props: {
18
+ [x: string]: any;
19
+ };
20
+ events: {
21
+ [evt: string]: CustomEvent<any>;
22
+ };
23
+ slots: {
24
+ default: {};
25
+ };
26
+ };
27
+ export {};
@@ -2,19 +2,53 @@
2
2
  // Custom components: https://mdsvex.com/docs#custom-components
3
3
  import blockquote from './Blockquote.svelte';
4
4
  import a from './Link.svelte';
5
+ import h1 from './Header1.svelte';
5
6
 
6
- export { a, blockquote };
7
+ // Used by injected info via svelte preprocessor
8
+ import { mdiCodeTags, mdiFileDocumentEditOutline } from '@mdi/js';
9
+ import { Button, Tooltip } from 'svelte-ux';
10
+
11
+ export { a, blockquote, h1 };
7
12
  </script>
8
13
 
9
14
  <script>
10
- import { AppBar } from 'svelte-ux';
11
-
12
15
  // frontmatter: https://mdsvex.com/docs#frontmatter-1
13
- export let title;
16
+ export let component;
17
+ export let filename;
18
+ export let description;
14
19
  </script>
15
20
 
16
- <AppBar {title} />
21
+ {#if component}
22
+ <div class="flex items-center gap-2">
23
+ <span class="text-2xl font-bold">{component}</span>
24
+ {#if component}
25
+ <Tooltip title="View source">
26
+ <Button
27
+ class="text-black/50"
28
+ icon={mdiCodeTags}
29
+ href="https://github.com/techniq/svelte-ux/blob/master/src/lib/components/{component}.svelte"
30
+ target="_blank"
31
+ />
32
+ </Tooltip>
33
+ {/if}
34
+
35
+ {#if filename}
36
+ <Tooltip title="Edit this page">
37
+ <Button
38
+ class="text-black/50"
39
+ icon={mdiFileDocumentEditOutline}
40
+ href="https://github.com/techniq/svelte-ux/blob/master/{filename}"
41
+ target="_blank"
42
+ />
43
+ </Tooltip>
44
+ {/if}
45
+ </div>
46
+ {/if}
47
+
48
+ {#if description}
49
+ {description}
50
+ {/if}
51
+
52
+ <slot name="toc" />
17
53
 
18
- <main class="p-2">
19
- <slot />
20
- </main>
54
+ <slot />
@@ -2,10 +2,13 @@
2
2
  /** @typedef {typeof __propDef.events} LayoutEvents */
3
3
  /** @typedef {typeof __propDef.slots} LayoutSlots */
4
4
  export default class Layout extends SvelteComponentTyped<{
5
- title: any;
5
+ component: any;
6
+ filename: any;
7
+ description: any;
6
8
  }, {
7
9
  [evt: string]: CustomEvent<any>;
8
10
  }, {
11
+ toc: {};
9
12
  default: {};
10
13
  }> {
11
14
  }
@@ -14,16 +17,20 @@ export type LayoutEvents = typeof __propDef.events;
14
17
  export type LayoutSlots = typeof __propDef.slots;
15
18
  import a from "./Link.svelte";
16
19
  import blockquote from "./Blockquote.svelte";
20
+ import h1 from "./Header1.svelte";
17
21
  import { SvelteComponentTyped } from "svelte";
18
22
  declare const __propDef: {
19
23
  props: {
20
- title: any;
24
+ component: any;
25
+ filename: any;
26
+ description: any;
21
27
  };
22
28
  events: {
23
29
  [evt: string]: CustomEvent<any>;
24
30
  };
25
31
  slots: {
32
+ toc: {};
26
33
  default: {};
27
34
  };
28
35
  };
29
- export { a, blockquote };
36
+ export { a, blockquote, h1 };
@@ -12,12 +12,8 @@ $: displayCode = highlight ? Prism.highlight(code, Prism.languages.svelte, 'svel
12
12
  </div>
13
13
 
14
14
  {#if displayCode}
15
- <pre
16
- class="language-{language} rounded"
17
- style="margin: 0">
18
- <code class="language-{language}">
19
- {@html displayCode}
20
- </code>
21
- </pre>
15
+ <pre class="language-{language} rounded" style="margin: 0; white-space: normal;">
16
+ <code class="language-{language}">{@html displayCode}</code>
17
+ </pre>
22
18
  {/if}
23
19
  </div>
package/package.json CHANGED
@@ -3,40 +3,42 @@
3
3
  "author": "Sean Lynch <techniq35@gmail.com>",
4
4
  "license": "MIT",
5
5
  "repository": "techniq/layerchart",
6
- "version": "0.0.9",
6
+ "version": "0.2.1",
7
7
  "devDependencies": {
8
- "@sveltejs/adapter-static": "^1.0.0-next.22",
9
- "@sveltejs/kit": "^1.0.0-next.202",
8
+ "@sveltejs/adapter-static": "^1.0.0-next.29",
9
+ "@sveltejs/kit": "^1.0.0-next.303",
10
+ "@tailwindcss/typography": "^0.5.2",
10
11
  "@types/d3-array": "^3.0.2",
11
12
  "@types/d3-scale": "^4.0.2",
12
13
  "@types/d3-shape": "^3.0.2",
13
- "@types/lodash-es": "^4.17.5",
14
- "autoprefixer": "^10.4.0",
15
- "mdsvex": "^0.9.8",
16
- "prettier": "^2.5.1",
17
- "prettier-plugin-svelte": "^2.5.1",
14
+ "@types/lodash-es": "^4.17.6",
15
+ "autoprefixer": "^10.4.4",
16
+ "mdsvex": "^0.10.5",
17
+ "prettier": "^2.6.1",
18
+ "prettier-plugin-svelte": "^2.6.0",
18
19
  "prism-themes": "^1.9.0",
19
- "svelte": "^3.44.3",
20
- "svelte-check": "^2.2.10",
21
- "svelte-preprocess": "^4.10.0",
22
- "svelte2tsx": "^0.4.11",
23
- "tailwindcss": "^2.2.19",
20
+ "svelte": "^3.46.6",
21
+ "svelte-check": "^2.4.6",
22
+ "svelte-preprocess": "^4.10.4",
23
+ "svelte2tsx": "^0.5.6",
24
+ "tailwindcss": "^3.0.23",
24
25
  "tailwindcss-elevation": "^1.0.1",
25
26
  "tslib": "^2.3.1",
26
- "typescript": "^4.5.4",
27
- "unist-util-visit": "^4.1.0"
27
+ "typescript": "^4.6.3",
28
+ "unist-util-visit": "^4.1.0",
29
+ "vite-plugin-sveld": "^1.0.3"
28
30
  },
29
31
  "type": "module",
30
32
  "dependencies": {
31
- "@mdi/js": "^6.5.95",
33
+ "@mdi/js": "^6.6.96",
32
34
  "d3-array": "^3.1.1",
33
35
  "d3-interpolate-path": "^2.2.3",
34
36
  "d3-scale": "^4.0.2",
35
- "d3-shape": "^3.0.1",
36
- "date-fns": "^2.27.0",
37
- "layercake": "^5.0.2",
37
+ "d3-shape": "^3.1.0",
38
+ "date-fns": "^2.28.0",
39
+ "layercake": "^6.1.0",
38
40
  "lodash-es": "^4.17.21",
39
- "svelte-ux": "^0.0.112"
41
+ "svelte-ux": "^0.3.2"
40
42
  },
41
43
  "exports": {
42
44
  "./package.json": "./package.json",
@@ -57,6 +59,8 @@
57
59
  "./components/Line.svelte": "./components/Line.svelte",
58
60
  "./components/LinearGradient.svelte": "./components/LinearGradient.svelte",
59
61
  "./components/Path.svelte": "./components/Path.svelte",
62
+ "./components/Pattern.svelte": "./components/Pattern.svelte",
63
+ "./components/Pie.svelte": "./components/Pie.svelte",
60
64
  "./components/Points.svelte": "./components/Points.svelte",
61
65
  "./components/Rect.svelte": "./components/Rect.svelte",
62
66
  "./components/Text.svelte": "./components/Text.svelte",
@@ -65,6 +69,7 @@
65
69
  "./components": "./components/index.js",
66
70
  "./docs/Blockquote.svelte": "./docs/Blockquote.svelte",
67
71
  "./docs/Code.svelte": "./docs/Code.svelte",
72
+ "./docs/Header1.svelte": "./docs/Header1.svelte",
68
73
  "./docs/Layout.svelte": "./docs/Layout.svelte",
69
74
  "./docs/Link.svelte": "./docs/Link.svelte",
70
75
  "./docs/Preview.svelte": "./docs/Preview.svelte",