├── .npmrc
├── src
├── global.d.ts
├── routes
│ ├── __layout.svelte
│ ├── index.svelte
│ └── examples
│ │ ├── line-area.svelte
│ │ └── bar.svelte
├── lib
│ └── layercake-components
│ │ ├── ArrowheadDef.svelte
│ │ ├── Bar.svelte
│ │ ├── Line.svelte
│ │ ├── AreaStacked.svelte
│ │ ├── Tooltip.svelte
│ │ ├── Area.svelte
│ │ ├── Scatter.svg.svelte
│ │ ├── BarStacked.svelte
│ │ ├── ColumnStacked.svelte
│ │ ├── MultiLine.svelte
│ │ ├── MapPoints.svelte
│ │ ├── ColumnLinear.svelte
│ │ ├── Annotations.svelte
│ │ ├── Scatter.html.svelte
│ │ ├── Voronoi.svelte
│ │ ├── Column.svelte
│ │ ├── ClevelandDotPlot.svelte
│ │ ├── Labels.svelte
│ │ ├── Scatter.canvas.svelte
│ │ ├── SmallMultipleWrapper.svelte
│ │ ├── SmallMultipleWrapper.percent-range.svelte
│ │ ├── BeeswarmForce.svelte
│ │ ├── ClevelandDotPlot.html.svelte
│ │ ├── QuadTree.svelte
│ │ ├── QuadTree.percent-range.svelte
│ │ ├── BeeswarmForce.html.svelte
│ │ ├── AxisRadial.svelte
│ │ ├── Map.canvas.svelte
│ │ ├── Radar.svelte
│ │ ├── Sankey.svelte
│ │ ├── Key.svelte
│ │ ├── AxisY.svelte
│ │ ├── Beeswarm.svelte
│ │ ├── CalendarMonth.svelte
│ │ ├── AxisX.html.svelte
│ │ ├── CirclePackForce.svelte
│ │ ├── Beeswarm.html.svelte
│ │ ├── AxisX.svelte
│ │ ├── AxisY.html.svelte
│ │ ├── Map.svg.svelte
│ │ ├── SyncedBrushWrapper.svelte
│ │ ├── SharedTooltip.svelte
│ │ ├── SyncedBrushWrapper.percent-range.svelte
│ │ ├── SharedTooltip.percent-range.svelte
│ │ ├── ForceDirectedGraph.svelte
│ │ ├── Arrows.svelte
│ │ ├── Brush.svelte
│ │ ├── CirclePack.html.svelte
│ │ └── Scatter.webgl.svelte
└── app.html
├── .gitignore
├── jsconfig.json
├── svelte.config.js
├── package.json
└── README.md
/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/src/global.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /.svelte-kit
4 | /build
5 | /functions
6 |
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": ".",
4 | "paths": {
5 | "$lib/*": ["src/lib/*"]
6 | }
7 | },
8 | "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"]
9 | }
10 |
--------------------------------------------------------------------------------
/src/routes/__layout.svelte:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/routes/index.svelte:
--------------------------------------------------------------------------------
1 | Layercake + Svelte kit template
2 |
3 | Visit layercake.graphics for more information.
4 |
5 | This repo mostly for trying to get the examples to work with SvelteKit, pull requests welcome with more examples!
6 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/ArrowheadDef.svelte:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | %svelte.head%
8 |
9 |
10 | %svelte.body%
11 |
12 |
13 |
--------------------------------------------------------------------------------
/svelte.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('@sveltejs/kit').Config} */
2 | const config = {
3 | kit: {
4 | target: '#svelte',
5 |
6 | vite: {
7 | ssr: {
8 | noExternal: []
9 | },
10 | optimizeDeps: {
11 | include: ['layercake']
12 | }
13 | }
14 | }
15 | };
16 |
17 | export default config;
--------------------------------------------------------------------------------
/src/lib/layercake-components/Bar.svelte:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 | {#each $data as d, i}
10 |
19 | {/each}
20 |
21 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Line.svelte:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/AreaStacked.svelte:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 | {#each $data as d}
17 |
22 | {/each}
23 |
24 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "layercake-sveltekit-template",
3 | "version": "0.0.1",
4 | "scripts": {
5 | "dev": "svelte-kit dev",
6 | "build": "svelte-kit build",
7 | "preview": "svelte-kit preview"
8 | },
9 | "devDependencies": {
10 | "@sveltejs/kit": "next",
11 | "svelte-preprocess": "^4.7.3",
12 | "svelte": "^3.34.0",
13 | "d3-color": "^2.0.0",
14 | "d3-format": "^2.0.0",
15 | "d3-interpolate": "^2.0.1",
16 | "d3-time-format": "^3.0.0"
17 | },
18 | "type": "module",
19 | "dependencies": {
20 | "layercake": "^4.1.0"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Tooltip.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 |
18 |
19 | {#if evt.detail}
20 |
27 |
28 |
29 | {/if}
30 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Area.svelte:
--------------------------------------------------------------------------------
1 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Scatter.svg.svelte:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 | {#each $data as d}
16 |
24 | {/each}
25 |
26 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/BarStacked.svelte:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 | {#each $data as series}
15 | {#each series as d, i}
16 |
25 | {/each}
26 | {/each}
27 |
28 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/ColumnStacked.svelte:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 | {#each $data as series, i}
15 | {#each series as d}
16 |
25 | {/each}
26 | {/each}
27 |
28 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/MultiLine.svelte:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 | {#each $data as group}
17 |
22 | {/each}
23 |
24 |
25 |
33 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/MapPoints.svelte:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 | {#each pointsData as d}
20 |
25 |
26 | {/each}
27 |
28 |
29 |
36 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/ColumnLinear.svelte:
--------------------------------------------------------------------------------
1 |
22 |
23 | {#each $data as d, i}
24 |
35 | {/each}
36 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Annotations.svelte:
--------------------------------------------------------------------------------
1 |
23 |
24 |
25 | {#each annotations as d, i}
26 |
{d.text}
31 | {/each}
32 |
33 |
34 |
39 |
40 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Scatter.html.svelte:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 | {#each $data as d}
16 |
27 | {/each}
28 |
29 |
30 |
37 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Voronoi.svelte:
--------------------------------------------------------------------------------
1 |
23 |
24 |
35 |
36 | {#each uniquePoints as point, i}
37 |
38 | {/each}
39 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Column.svelte:
--------------------------------------------------------------------------------
1 |
23 |
24 |
25 | {#each $data as d, i}
26 |
37 | {/each}
38 |
39 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/ClevelandDotPlot.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 | {#each $data as row}
14 |
15 |
21 |
22 | {#each $xGet(row) as circleX, i}
23 |
29 | {/each}
30 |
31 | {/each}
32 |
33 |
34 |
44 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Labels.svelte:
--------------------------------------------------------------------------------
1 |
18 |
19 | {#each $data as group}
20 | {cap(group.key)}
27 | {/each}
28 |
29 |
36 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Scatter.canvas.svelte:
--------------------------------------------------------------------------------
1 |
35 |
--------------------------------------------------------------------------------
/src/routes/examples/line-area.svelte:
--------------------------------------------------------------------------------
1 |
18 |
19 |
29 |
30 |
31 |
36 |
37 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/SmallMultipleWrapper.svelte:
--------------------------------------------------------------------------------
1 |
27 |
28 | d.field === 'x').accessor}
31 | y={extentGetters.find(d => d.field === 'y').accessor}
32 | {data}
33 | xDomain={$xDomain}
34 | yDomain={$yDomain}
35 | >
36 |
41 |
42 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # create-svelte
2 |
3 | Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte);
4 |
5 | ## Creating a project
6 |
7 | If you're seeing this, you've probably already done this step. Congrats!
8 |
9 | ```bash
10 | # create a new project in the current directory
11 | npm init svelte@next
12 |
13 | # create a new project in my-app
14 | npm init svelte@next my-app
15 | ```
16 |
17 | > Note: the `@next` is temporary
18 |
19 | ## Developing
20 |
21 | Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
22 |
23 | ```bash
24 | npm run dev
25 |
26 | # or start the server and open the app in a new browser tab
27 | npm run dev -- --open
28 | ```
29 |
30 | ## Building
31 |
32 | Before creating a production version of your app, install an [adapter](https://kit.svelte.dev/docs#adapters) for your target environment. Then:
33 |
34 | ```bash
35 | npm run build
36 | ```
37 |
38 | > You can preview the built app with `npm run preview`, regardless of whether you installed an adapter. This should _not_ be used to serve your app in production.
39 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/SmallMultipleWrapper.percent-range.svelte:
--------------------------------------------------------------------------------
1 |
27 |
28 | d.field === 'x').accessor}
33 | y={extentGetters.find(d => d.field === 'y').accessor}
34 | {data}
35 | xDomain={$xDomain}
36 | yDomain={$yDomain}
37 | >
38 |
39 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/BeeswarmForce.svelte:
--------------------------------------------------------------------------------
1 |
30 |
31 |
32 | {#each simulation.nodes() as node}
33 |
41 | {$custom.getTitle(node)}
42 |
43 | {/each}
44 |
45 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/ClevelandDotPlot.html.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 | {#each $data as row}
14 |
15 |
23 |
24 | {#each $xGet(row) as circleX, i}
25 |
35 | {/each}
36 |
37 | {/each}
38 |
39 |
40 |
53 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/QuadTree.svelte:
--------------------------------------------------------------------------------
1 |
36 |
37 |
46 |
47 |
52 |
59 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/QuadTree.percent-range.svelte:
--------------------------------------------------------------------------------
1 |
40 |
41 |
50 |
51 |
56 |
63 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/BeeswarmForce.html.svelte:
--------------------------------------------------------------------------------
1 |
30 |
31 |
32 | {#each simulation.nodes() as node}
33 |
45 |
{$custom.getTitle(node)}
46 |
47 | {/each}
48 |
49 |
50 |
58 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/AxisRadial.svelte:
--------------------------------------------------------------------------------
1 |
22 |
23 |
26 |
35 |
43 |
44 | {#each $config.x as label, i}
45 |
54 |
55 | {label}
61 | {/each}
62 |
63 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Map.canvas.svelte:
--------------------------------------------------------------------------------
1 |
55 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Radar.svelte:
--------------------------------------------------------------------------------
1 |
29 |
30 |
33 | {#each $data as row}
34 |
35 |
42 |
43 |
44 | {#each $xGet(row) as circleR, i}
45 |
53 | {/each}
54 | {/each}
55 |
56 |
57 |
64 |
--------------------------------------------------------------------------------
/src/routes/examples/bar.svelte:
--------------------------------------------------------------------------------
1 |
39 |
40 |
54 |
55 |
56 |
65 |
76 |
77 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Sankey.svelte:
--------------------------------------------------------------------------------
1 |
34 |
35 |
40 |
41 |
42 |
43 | {#each sankeyData.links as d}
44 |
50 | {/each}
51 |
52 |
53 | {#each sankeyData.nodes as d, i}
54 |
60 |
67 | {d.id}
68 |
69 | {/each}
70 |
71 |
72 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Key.svelte:
--------------------------------------------------------------------------------
1 |
37 |
38 |
68 |
69 |
70 | {#each $zDomain as item}
71 |
72 |
79 |
{displayName(item)}
80 |
81 | {/each}
82 |
83 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/AxisY.svelte:
--------------------------------------------------------------------------------
1 |
25 |
26 |
27 | {#each tickVals as tick, i}
28 |
29 | {#if gridlines !== false}
30 |
36 | {/if}
37 | {#if tickMarks === true}
38 |
45 | {/if}
46 | {formatTick(tick)}
53 |
54 | {/each}
55 |
56 |
57 |
78 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Beeswarm.svelte:
--------------------------------------------------------------------------------
1 |
57 |
58 |
59 | {#each circles as d}
60 |
68 | {$custom.getTitle(d)}
69 |
70 | {/each}
71 |
72 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/CalendarMonth.svelte:
--------------------------------------------------------------------------------
1 |
59 |
60 | {#each days as day}
61 |
70 | {/each}
71 |
72 |
79 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/AxisX.html.svelte:
--------------------------------------------------------------------------------
1 |
24 |
25 |
26 | {#each tickVals as tick, i}
27 | {#if gridlines !== false}
28 |
29 | {/if}
30 | {#if tickMarks === true}
31 |
32 | {/if}
33 |
36 |
{formatTick(tick)}
39 |
40 | {/each}
41 | {#if baseline === true}
42 |
43 | {/if}
44 |
45 |
46 |
88 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/CirclePackForce.svelte:
--------------------------------------------------------------------------------
1 |
60 | {#each nodes as point}
61 |
70 |
71 |
72 | {/each}
73 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Beeswarm.html.svelte:
--------------------------------------------------------------------------------
1 |
57 |
58 |
59 | {#each circles as d}
60 |
72 |
{$custom.getTitle(d)}
73 |
74 | {/each}
75 |
76 |
77 |
85 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/AxisX.svelte:
--------------------------------------------------------------------------------
1 |
38 |
39 |
40 | {#each tickVals as tick, i}
41 |
42 | {#if gridlines !== false}
43 |
44 | {/if}
45 | {#if tickMarks === true}
46 |
47 | {/if}
48 | {formatTick(tick)}
54 |
55 | {/each}
56 | {#if baseline === true}
57 |
58 | {/if}
59 |
60 |
61 |
89 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/AxisY.html.svelte:
--------------------------------------------------------------------------------
1 |
26 |
27 |
28 | {#each tickVals as tick, i}
29 |
30 | {#if gridlines !== false}
31 |
32 | {/if}
33 | {#if baseline !== false && i === 0}
34 |
35 | {/if}
36 | {#if tickMarks === true}
37 |
38 | {/if}
39 |
{formatTick(tick)}
47 |
48 | {/each}
49 |
50 |
51 |
85 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Map.svg.svelte:
--------------------------------------------------------------------------------
1 |
53 |
54 | dispatch('mouseout')}
57 | >
58 | {#each features as feature}
59 | dispatch('mousemove', { e, props: feature.properties })}
66 | on:mousemove={handleMousemove(feature)}
67 | >
68 | {/each}
69 |
70 |
71 |
81 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/SyncedBrushWrapper.svelte:
--------------------------------------------------------------------------------
1 |
24 |
25 |
45 |
46 |
47 |
48 |
55 |
75 |
76 |
77 |
78 |
79 |
86 |
94 |
95 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/SharedTooltip.svelte:
--------------------------------------------------------------------------------
1 |
37 |
38 |
69 |
70 |
79 | {#if visible === true}
80 |
83 |
96 | {/if}
97 |
98 |
99 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/SyncedBrushWrapper.percent-range.svelte:
--------------------------------------------------------------------------------
1 |
24 |
25 |
45 |
46 |
47 |
48 |
57 |
58 | {
60 | const filtered = ticks.filter(t => t % 1 === 0);
61 | if (filtered.length > 7) {
62 | return filtered.filter((t, i) => i % 2 === 0);
63 | }
64 | return filtered;
65 | }}
66 | />
67 |
70 |
71 |
72 |
75 |
78 |
79 |
80 |
81 |
82 |
83 |
92 |
93 |
96 |
99 |
100 |
101 |
105 |
106 |
107 |
108 |
109 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/SharedTooltip.percent-range.svelte:
--------------------------------------------------------------------------------
1 |
37 |
38 |
68 |
69 |
78 | {#if visible === true}
79 |
82 |
95 | {/if}
96 |
97 |
98 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/ForceDirectedGraph.svelte:
--------------------------------------------------------------------------------
1 |
68 | {#each links as link}
69 |
70 |
76 | {$x(link.source)}
77 |
78 |
79 | {/each}
80 |
81 | {#each nodes as point}
82 |
91 | {$x(point)}
92 |
93 | {/each}
94 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Arrows.svelte:
--------------------------------------------------------------------------------
1 |
70 |
71 |
72 | {#if annotations.length}
73 |
74 | {#each annotations as anno, i}
75 | {#if anno.arrows}
76 | {#each anno.arrows as arrow}
77 |
80 | {/each}
81 | {/if}
82 | {/each}
83 |
84 | {/if}
85 |
86 |
98 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Brush.svelte:
--------------------------------------------------------------------------------
1 |
86 |
87 |
88 | {#if min !== null}
89 |
90 |
91 |
92 | {/if}
93 |
94 |
95 |
128 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/CirclePack.html.svelte:
--------------------------------------------------------------------------------
1 |
62 |
63 |
64 | {#each descendants as d}
65 |
70 |
74 |
87 |
{titleCase(d.data.id)}
88 | {#if d.data.data[valueKey]}
89 |
{commas(d.data.data[valueKey])}
90 | {/if}
91 |
92 |
93 | {/each}
94 |
95 |
96 |
156 |
--------------------------------------------------------------------------------
/src/lib/layercake-components/Scatter.webgl.svelte:
--------------------------------------------------------------------------------
1 |
154 |
--------------------------------------------------------------------------------