From cc8e0dbaabfb7b9af2301b7eddd77f21fa0638cf Mon Sep 17 00:00:00 2001 From: awwpotato Date: Fri, 6 Dec 2024 16:17:21 -0800 Subject: [PATCH] layercake init (very broken rn) --- bun.lockb | Bin 158853 -> 162939 bytes package.json | 1 + src/lib/components/layercake/Area.svelte | 40 +++++++ src/lib/components/layercake/AxisX.svelte | 119 ++++++++++++++++++++ src/lib/components/layercake/AxisY.svelte | 119 ++++++++++++++++++++ src/lib/components/layercake/Labels.svelte | 38 +++++++ src/lib/components/layercake/Line.svelte | 31 +++++ src/lib/components/layercake/Scatter.svelte | 65 +++++++++++ src/routes/stats/+page.svelte | 45 ++++++++ 9 files changed, 458 insertions(+) create mode 100644 src/lib/components/layercake/Area.svelte create mode 100644 src/lib/components/layercake/AxisX.svelte create mode 100644 src/lib/components/layercake/AxisY.svelte create mode 100644 src/lib/components/layercake/Labels.svelte create mode 100644 src/lib/components/layercake/Line.svelte create mode 100644 src/lib/components/layercake/Scatter.svelte create mode 100644 src/routes/stats/+page.svelte diff --git a/bun.lockb b/bun.lockb index 79162bdbab35d79d9734512bc92dd94edf3a594f..8ba9d8a064045dfe99afea79d725784ae7596a06 100755 GIT binary patch delta 30733 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 e&=~esb-DgUn+9 delta 28196 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 diff --git a/package.json b/package.json index 6ab1768..c1479a9 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "vite": "^5.4.11" }, "dependencies": { + "layercake": "^8.4.2", "lucide-svelte": "^0.460.1", "socket.io": "^4.8.1", "socket.io-client": "^4.8.1" diff --git a/src/lib/components/layercake/Area.svelte b/src/lib/components/layercake/Area.svelte new file mode 100644 index 0000000..8631902 --- /dev/null +++ b/src/lib/components/layercake/Area.svelte @@ -0,0 +1,40 @@ + + + + diff --git a/src/lib/components/layercake/AxisX.svelte b/src/lib/components/layercake/AxisX.svelte new file mode 100644 index 0000000..3b051ba --- /dev/null +++ b/src/lib/components/layercake/AxisX.svelte @@ -0,0 +1,119 @@ + + + + + {#each tickVals as tick, i (tick)} + {#if baseline === true} + + {/if} + + + {#if gridlines === true} + + {/if} + {#if tickMarks === true} + + {/if} + {format(tick)} + + {/each} + + + diff --git a/src/lib/components/layercake/AxisY.svelte b/src/lib/components/layercake/AxisY.svelte new file mode 100644 index 0000000..4f949ec --- /dev/null +++ b/src/lib/components/layercake/AxisY.svelte @@ -0,0 +1,119 @@ + + + + + {#each tickVals as tick (tick)} + {@const tickValPx = $yScale(tick)} + + {#if gridlines === true} + + {/if} + {#if tickMarks === true} + + {/if} + {format(tick)} + + {/each} + + + diff --git a/src/lib/components/layercake/Labels.svelte b/src/lib/components/layercake/Labels.svelte new file mode 100644 index 0000000..772bd1a --- /dev/null +++ b/src/lib/components/layercake/Labels.svelte @@ -0,0 +1,38 @@ + + + +{#each labels as d} +
+ {formatLabelName(getLabelName(d))} +
+{/each} + + diff --git a/src/lib/components/layercake/Line.svelte b/src/lib/components/layercake/Line.svelte new file mode 100644 index 0000000..2350a94 --- /dev/null +++ b/src/lib/components/layercake/Line.svelte @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/lib/components/layercake/Scatter.svelte b/src/lib/components/layercake/Scatter.svelte new file mode 100644 index 0000000..39d479a --- /dev/null +++ b/src/lib/components/layercake/Scatter.svelte @@ -0,0 +1,65 @@ + + +
+ + + + + + + + + + + + + + + +
+ + diff --git a/src/routes/stats/+page.svelte b/src/routes/stats/+page.svelte new file mode 100644 index 0000000..fedc0fb --- /dev/null +++ b/src/routes/stats/+page.svelte @@ -0,0 +1,45 @@ + + + + +
+ + + + + + + + + + + + + + + +