From e36914714fc10dbbe7375b5dd85c39446d4363c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Engl=C3=B6f=20Ytterstr=C3=B6m?= Date: Wed, 16 Apr 2025 00:19:52 +0200 Subject: [PATCH] Add Arc component --- src/lib/Arc.svelte | 168 ++++++++++++++++++++++++++++++++++++++++++++ src/lib/svg-path.ts | 31 ++++++++ 2 files changed, 199 insertions(+) create mode 100644 src/lib/Arc.svelte create mode 100644 src/lib/svg-path.ts diff --git a/src/lib/Arc.svelte b/src/lib/Arc.svelte new file mode 100644 index 0000000..ff5a25e --- /dev/null +++ b/src/lib/Arc.svelte @@ -0,0 +1,168 @@ + + +
+ + + + {#each items as { c, progress, level }} + + + {/each} + + + +
+ + diff --git a/src/lib/svg-path.ts b/src/lib/svg-path.ts new file mode 100644 index 0000000..e045a35 --- /dev/null +++ b/src/lib/svg-path.ts @@ -0,0 +1,31 @@ +export default function () { + const commands: string[] = []; + return { + stringify() { + return `${commands.join("\n")}`; + }, + arcTo( + ry: number, + rx: number, + long: boolean, + cw: boolean, + y: number, + x: number, + ) { + commands.push(`A ${rx} ${ry} 0 ${long ? 1 : 0} ${cw ? 1 : 0} ${x} ${y}`); + return this; + }, + moveTo(y: number, x: number) { + commands.push(`M ${x} ${y}`); + return this; + }, + lineTo(y: number, x: number) { + commands.push(`L ${x} ${y}`); + return this; + }, + close() { + commands.push("z"); + return this; + }, + }; +}