kripke: add stats
This commit is contained in:
@@ -20,6 +20,9 @@
|
||||
"@sveltejs/enhanced-img": "0.4.4",
|
||||
"@sveltejs/kit": "2.20.7",
|
||||
"@sveltejs/vite-plugin-svelte": "6.2.0",
|
||||
"@types/d3-array": "^3",
|
||||
"@types/d3-scale": "^4",
|
||||
"@types/d3-shape": "^3",
|
||||
"@types/prismjs": "1.26.5",
|
||||
"autoprefixer": "10.4.20",
|
||||
"bits-ui": "1.3.3",
|
||||
@@ -49,10 +52,13 @@
|
||||
"@fontsource/zen-kaku-gothic-new": "5.2.5",
|
||||
"@icons-pack/svelte-simple-icons": "6.4.0",
|
||||
"@tailwindcss/typography": "0.5.16",
|
||||
"d3-scale": "4.0.2",
|
||||
"deepmerge": "4.3.1",
|
||||
"layerchart": "1.0.12",
|
||||
"lucide-svelte": "0.475.0",
|
||||
"svelte-persisted-store": "0.12.0",
|
||||
"sveltekit-rate-limiter": "0.7.0",
|
||||
"tailwind-merge": "3.0.2"
|
||||
"tailwind-merge": "3.0.2",
|
||||
"zod": "4.1.11"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ export const buttonVariants = tv({
|
||||
link: "text-primary underline-offset-4 hover:underline",
|
||||
},
|
||||
size: {
|
||||
default: "h-9 px-4 py-2",
|
||||
default: "h-9 px-4 py-2 pb-2.5",
|
||||
sm: "h-8 rounded-md px-3 text-xs",
|
||||
lg: "h-10 rounded-md px-8",
|
||||
icon: "h-9 w-9",
|
||||
|
||||
@@ -1,16 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { Button } from "$lib/components/ui/button";
|
||||
import * as Dialog from "$lib/components/ui/dialog";
|
||||
import { type Formula, isomorphic, validWorlds } from "@cannorin/kripke";
|
||||
import LuRotateCw from "lucide-svelte/icons/rotate-cw";
|
||||
import LuX from "lucide-svelte/icons/x";
|
||||
import { onMount } from "svelte";
|
||||
|
||||
import FrameInput from "./components/frame-input.svelte";
|
||||
import Game, { type GameStatus } from "./components/game.svelte";
|
||||
import Rules from "./components/rules.svelte";
|
||||
import Share from "./components/share.svelte";
|
||||
|
||||
import Template from "./components/template.svelte";
|
||||
import { daily } from "./lib/store";
|
||||
import { getFrameBySeed, getTimeUntilNextGame } from "./lib/system";
|
||||
|
||||
@@ -20,14 +11,9 @@ const { id, frame } = getFrameBySeed(seed);
|
||||
const guess = (frameId: number) => isomorphic[frameId] === id;
|
||||
const check = (formula: Formula) => validWorlds(frame, formula).length;
|
||||
const getAnswer = () => id;
|
||||
const getSeed = () => seed;
|
||||
const relationSize = frame.relations.size;
|
||||
|
||||
let status: GameStatus = $state("playing");
|
||||
let dialogOpen = $state(false);
|
||||
$effect(() => {
|
||||
if (status !== "playing") dialogOpen = true;
|
||||
});
|
||||
|
||||
let timeUntilNextGame = $state(getTimeUntilNextGame());
|
||||
onMount(() => {
|
||||
const interval = setInterval(() => {
|
||||
@@ -39,71 +25,31 @@ onMount(() => {
|
||||
});
|
||||
</script>
|
||||
|
||||
<main class="flex flex-col min-h-screen max-w-full items-center gap-12 lg:gap-16 py-8">
|
||||
<h1 class="font-display text-6xl">KRiPkE</h1>
|
||||
{#snippet title()}
|
||||
<h2 class="text-sm">
|
||||
<span class="font-bold">Daily Challenge: </span>
|
||||
{timeUntilNextGame.hours}:{timeUntilNextGame.minutes}:{timeUntilNextGame.seconds} until the next game.
|
||||
</h2>
|
||||
{/snippet}
|
||||
|
||||
<div class="flex flex-col md:flex-row-reverse gap-x-20 gap-y-8">
|
||||
<section class="flex flex-col gap-2">
|
||||
<h2 class="text-sm">
|
||||
<span class="font-bold">Daily Challenge: </span>
|
||||
{timeUntilNextGame.hours}:{timeUntilNextGame.minutes}:{timeUntilNextGame.seconds} until the next game.
|
||||
</h2>
|
||||
<Game
|
||||
bind:moves={$daily.moves} bind:status relationSize={relationSize}
|
||||
guess={guess} check={check} getAnswer={getAnswer}
|
||||
onShare={() => { dialogOpen = true; }} />
|
||||
</section>
|
||||
{#snippet description()}
|
||||
<h2>Daily Challenge!</h2>
|
||||
<ul>
|
||||
<li>The answer of the game changes every day.</li>
|
||||
<li>The progress of the game persists until the next day ({timeUntilNextGame.hours}:{timeUntilNextGame.minutes}:{timeUntilNextGame.seconds} from now).</li>
|
||||
<li>You can also play <a href="/kripke/random">Random Challenge</a>.</li>
|
||||
</ul>
|
||||
{/snippet}
|
||||
|
||||
<section class="w-[300px] prose prose-sm">
|
||||
<h2>Daily Challenge!</h2>
|
||||
<ul>
|
||||
<li>The answer of the game changes every day.</li>
|
||||
<li>The progress of the game persists until the next day ({timeUntilNextGame.hours}:{timeUntilNextGame.minutes}:{timeUntilNextGame.seconds} from now).</li>
|
||||
<li>You can also play <a href="/kripke/random">Random Challenge</a>.</li>
|
||||
</ul>
|
||||
|
||||
<Rules relationSize={relationSize} />
|
||||
</section>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
{#if status !== "playing"}
|
||||
{#await getAnswer() then answerId}
|
||||
<Dialog.Root bind:open={dialogOpen}>
|
||||
<Dialog.Content class="animate-fade-in">
|
||||
<Dialog.Header>
|
||||
<Dialog.Title>
|
||||
{#if status === "win"}
|
||||
YOU WIN!
|
||||
{:else if status === "lose"}
|
||||
YOU LOSE!
|
||||
{/if}
|
||||
</Dialog.Title>
|
||||
<Dialog.Description>
|
||||
The answer was:
|
||||
</Dialog.Description>
|
||||
</Dialog.Header>
|
||||
|
||||
<div class="flex flex-col items-center w-fit rounded bg-background mx-auto">
|
||||
<span class="text-xs text-muted self-start px-2 py-1">id: {answerId}, seed: <a class="text-primary underline font-medium" href="/kripke/random/{seed}">{seed}</a></span>
|
||||
<FrameInput class="pb-6" disabled width={250} height={250} frame={frame} />
|
||||
</div>
|
||||
|
||||
<Dialog.Footer>
|
||||
<div class="flex flex-col md:flex-row gap-2 w-full justify-end">
|
||||
<Share date={$daily.date} moves={$daily.moves} status={status} />
|
||||
<Button
|
||||
href="/kripke/random">
|
||||
<LuRotateCw class="w-4 h-4 mt-[2px]" /> Play Random Challenge
|
||||
</Button>
|
||||
<Button
|
||||
variant="foreground"
|
||||
onclick={() => (dialogOpen = false)}>
|
||||
<LuX class="w-4 h-4 mt-[2px]" /> Close
|
||||
</Button>
|
||||
</div>
|
||||
</Dialog.Footer>
|
||||
</Dialog.Content>
|
||||
</Dialog.Root>
|
||||
{/await}
|
||||
{/if}
|
||||
<Template
|
||||
bind:moves={$daily.moves}
|
||||
relationSize={relationSize}
|
||||
guess={guess}
|
||||
check={check}
|
||||
getAnswer={getAnswer}
|
||||
getSeed={getSeed}
|
||||
getShareProps={(moves, status) => ({ moves, status, date: $daily.date })}
|
||||
title={title}
|
||||
description={description}
|
||||
newGame={{ href: "/kripke/random", text: "Play Random Challenge" }}
|
||||
/>
|
||||
|
||||
63
apps/web/src/routes/kripke/components/chart.svelte
Normal file
63
apps/web/src/routes/kripke/components/chart.svelte
Normal file
@@ -0,0 +1,63 @@
|
||||
<script lang="ts">
|
||||
import { scaleLog } from "d3-scale";
|
||||
|
||||
import { Area, AreaChart, Axis, Labels, Points, Svg } from "layerchart";
|
||||
|
||||
export type Props = {
|
||||
playerData: number[];
|
||||
};
|
||||
|
||||
let { playerData }: Props = $props();
|
||||
|
||||
const data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((i) => ({
|
||||
move: i,
|
||||
player: playerData[i] ?? 1,
|
||||
}));
|
||||
</script>
|
||||
|
||||
<AreaChart
|
||||
data={data}
|
||||
x="move"
|
||||
series={[
|
||||
{
|
||||
key: "player",
|
||||
label: "You",
|
||||
color: "rgb(var(--primary))"
|
||||
},
|
||||
]}
|
||||
seriesLayout="overlap"
|
||||
yScale={scaleLog()}
|
||||
yDomain={[1, 1000]}
|
||||
renderContext="svg">
|
||||
<Svg>
|
||||
<Axis
|
||||
placement="left"
|
||||
tickLength={10}
|
||||
grid={{ ["class"]: "stroke-muted", style: "stroke-dasharray: 2" }}
|
||||
ticks={[1,10,100,1000]}
|
||||
class="fill-foreground" />
|
||||
<Axis
|
||||
placement="bottom"
|
||||
tickLength={10}
|
||||
class="fill-foreground" />
|
||||
|
||||
<Area
|
||||
y1={(d) => d.player}
|
||||
fill={"rgb(var(--primary))"}
|
||||
fillOpacity={0.3}
|
||||
line={{ class: "stroke-2", stroke: "rgb(var(--primary))" }}
|
||||
/>
|
||||
<Points
|
||||
y={(d) => d.player}
|
||||
r={9}
|
||||
class="fill-primary"
|
||||
/>
|
||||
<Labels
|
||||
y={(d) => d.player}
|
||||
placement="center"
|
||||
offset={-1.1}
|
||||
format={(x) => x}
|
||||
class="text-[10px] fill-background font-bold"
|
||||
/>
|
||||
</Svg>
|
||||
</AreaChart>
|
||||
@@ -5,15 +5,12 @@ import SiMisskey from "@icons-pack/svelte-simple-icons/icons/SiMisskey";
|
||||
import SiX from "@icons-pack/svelte-simple-icons/icons/SiX";
|
||||
import type { GameStatus, Move } from "./game.svelte";
|
||||
|
||||
let {
|
||||
date,
|
||||
moves,
|
||||
status,
|
||||
seed,
|
||||
}: { moves: Move[]; status: GameStatus } & (
|
||||
export type ShareProps = { moves: Move[]; status: GameStatus } & (
|
||||
| { date: string; seed?: undefined }
|
||||
| { seed: number; date?: undefined }
|
||||
) = $props();
|
||||
);
|
||||
|
||||
let { date, moves, status, seed }: ShareProps = $props();
|
||||
|
||||
const numberEmojis = ["0️⃣", "1️⃣", "2️⃣", "3️⃣", "4️⃣"];
|
||||
|
||||
|
||||
172
apps/web/src/routes/kripke/components/template.svelte
Normal file
172
apps/web/src/routes/kripke/components/template.svelte
Normal file
@@ -0,0 +1,172 @@
|
||||
<script lang="ts">
|
||||
import { Button } from "$lib/components/ui/button";
|
||||
import * as Dialog from "$lib/components/ui/dialog";
|
||||
|
||||
import {
|
||||
type Formula,
|
||||
getFrame,
|
||||
nontrivials,
|
||||
tryParse,
|
||||
validWorlds,
|
||||
} from "@cannorin/kripke";
|
||||
import Game, { type GameStatus, type Move } from "./game.svelte";
|
||||
|
||||
import LuRotateCw from "lucide-svelte/icons/rotate-cw";
|
||||
import LuX from "lucide-svelte/icons/x";
|
||||
import type { Snippet } from "svelte";
|
||||
import Chart from "./chart.svelte";
|
||||
import FrameInput from "./frame-input.svelte";
|
||||
import Rules from "./rules.svelte";
|
||||
import Share, { type ShareProps } from "./share.svelte";
|
||||
|
||||
export type Props = {
|
||||
status?: GameStatus;
|
||||
moves?: Move[];
|
||||
relationSize: number;
|
||||
guess: (frameId: number) => boolean | Promise<boolean>;
|
||||
check: (formula: Formula) => number | Promise<number>;
|
||||
getAnswer: () => number | Promise<number>;
|
||||
getSeed?: () => number | Promise<number>;
|
||||
|
||||
getShareProps: (
|
||||
moves: Move[],
|
||||
status: GameStatus,
|
||||
) => ShareProps | Promise<ShareProps>;
|
||||
title: Snippet;
|
||||
description: Snippet;
|
||||
newGame: { href: string; text: string };
|
||||
};
|
||||
|
||||
let {
|
||||
status = $bindable<GameStatus>("playing"),
|
||||
moves = $bindable<Move[]>([]),
|
||||
relationSize,
|
||||
guess,
|
||||
check,
|
||||
getAnswer,
|
||||
getSeed,
|
||||
getShareProps,
|
||||
title,
|
||||
description,
|
||||
newGame,
|
||||
}: Props = $props();
|
||||
|
||||
let dialogOpen = $state(false);
|
||||
$effect(() => {
|
||||
if (status !== "playing") dialogOpen = true;
|
||||
});
|
||||
|
||||
function evaluate() {
|
||||
let frames = nontrivials
|
||||
.map((id) => ({ id, frame: getFrame(id) }))
|
||||
.filter((f) => f.frame.relations.size === relationSize);
|
||||
if (frames.length === 0) return undefined;
|
||||
|
||||
const res: number[] = [frames.length];
|
||||
for (const move of moves) {
|
||||
if (move.type === "guess") {
|
||||
frames = frames.filter((f) => f.id !== move.frameId);
|
||||
}
|
||||
if (move.type === "check") {
|
||||
if (move.valid < 0 || move.valid > 4) return undefined;
|
||||
const formula = tryParse(move.formulaStr);
|
||||
if (!formula) return undefined;
|
||||
frames = frames.filter(
|
||||
(f) => validWorlds(f.frame, formula).length === move.valid,
|
||||
);
|
||||
}
|
||||
|
||||
if (frames.length === 0) return undefined;
|
||||
res.push(frames.length);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
</script>
|
||||
|
||||
<main class="flex flex-col min-h-screen max-w-full items-center gap-12 lg:gap-16 py-8">
|
||||
<h1 class="font-display text-6xl">KRiPkE</h1>
|
||||
|
||||
<div class="flex flex-col md:flex-row-reverse gap-x-20 gap-y-8">
|
||||
<section class="flex flex-col gap-2">
|
||||
{@render title()}
|
||||
<Game
|
||||
bind:moves bind:status relationSize={relationSize}
|
||||
guess={guess} check={check} getAnswer={getAnswer}
|
||||
onShare={() => { dialogOpen = true; }}/>
|
||||
</section>
|
||||
|
||||
<section class="w-[300px] prose prose-sm">
|
||||
{@render description()}
|
||||
|
||||
<Rules relationSize={relationSize} />
|
||||
</section>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
{#if status !== "playing"}
|
||||
{#await getAnswer() then answerId}
|
||||
{#await getShareProps(moves, status) then shareProps}
|
||||
{@const answerFrame = getFrame(answerId)}
|
||||
{@const playerData = evaluate()}
|
||||
<Dialog.Root bind:open={dialogOpen}>
|
||||
<Dialog.Content class="animate-fade-in">
|
||||
<Dialog.Header>
|
||||
<Dialog.Title>
|
||||
{#if status === "win"}
|
||||
YOU WIN!
|
||||
{:else if status === "lose"}
|
||||
YOU LOSE!
|
||||
{/if}
|
||||
</Dialog.Title>
|
||||
<Dialog.Description>
|
||||
The answer was:
|
||||
</Dialog.Description>
|
||||
</Dialog.Header>
|
||||
|
||||
<div class="flex flex-col items-center w-full bg-background mx-auto">
|
||||
<div class="w-fit">
|
||||
<span class="text-xs text-muted self-start px-2 py-1">
|
||||
{#if getSeed}
|
||||
{#await getSeed() then seed}
|
||||
id: {answerId}, seed: <a class="text-primary underline font-medium" href="/kripke/random/{seed}">{seed}</a>
|
||||
{/await}
|
||||
{:else}
|
||||
id: {answerId}
|
||||
{/if}
|
||||
</span>
|
||||
<FrameInput disabled width={250} height={250} frame={answerFrame} />
|
||||
</div>
|
||||
<div class="w-full h-[125px] md:h-[200px] px-2 flex flex-col">
|
||||
<span class="text-xs pb-2">
|
||||
Statistics (frames left / moves)
|
||||
</span>
|
||||
{#if playerData}
|
||||
<Chart playerData={playerData} />
|
||||
{:else}
|
||||
<div class="flex flex-col items-center justify-center">
|
||||
Invalid play data
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Dialog.Footer>
|
||||
<div class="flex flex-col md:flex-row gap-2 w-full justify-end">
|
||||
<Share {...shareProps} />
|
||||
<Button
|
||||
data-sveltekit-reload
|
||||
href={newGame.href}>
|
||||
<LuRotateCw class="w-4 h-4 mt-[2px]" /> {newGame.text}
|
||||
</Button>
|
||||
<Button
|
||||
variant="foreground"
|
||||
onclick={() => (dialogOpen = false)}>
|
||||
<LuX class="w-4 h-4 mt-[2px]" /> Close
|
||||
</Button>
|
||||
</div>
|
||||
</Dialog.Footer>
|
||||
</Dialog.Content>
|
||||
</Dialog.Root>
|
||||
{/await}
|
||||
{/await}
|
||||
{/if}
|
||||
@@ -1,14 +1,6 @@
|
||||
<script lang="ts">
|
||||
import { Button } from "$lib/components/ui/button";
|
||||
import * as Dialog from "$lib/components/ui/dialog";
|
||||
import { type Formula, isomorphic, validWorlds } from "@cannorin/kripke";
|
||||
import LuRotateCw from "lucide-svelte/icons/rotate-cw";
|
||||
import LuX from "lucide-svelte/icons/x";
|
||||
|
||||
import FrameInput from "../../components/frame-input.svelte";
|
||||
import Game, { type GameStatus, type Move } from "../../components/game.svelte";
|
||||
import Rules from "../../components/rules.svelte";
|
||||
import Share from "../../components/share.svelte";
|
||||
import Template from "../../components/template.svelte";
|
||||
import { getFrameBySeed } from "../../lib/system";
|
||||
|
||||
let { data } = $props();
|
||||
@@ -17,88 +9,39 @@ const { id, frame } = getFrameBySeed(seed);
|
||||
const guess = (frameId: number) => isomorphic[frameId] === id;
|
||||
const check = (formula: Formula) => validWorlds(frame, formula).length;
|
||||
const getAnswer = () => id;
|
||||
const getSeed = () => seed;
|
||||
const relationSize = frame.relations.size;
|
||||
|
||||
let moves: Move[] = $state([]);
|
||||
let status: GameStatus = $state("playing");
|
||||
|
||||
let dialogOpen = $state(false);
|
||||
$effect(() => {
|
||||
if (status !== "playing") dialogOpen = true;
|
||||
});
|
||||
</script>
|
||||
|
||||
{#snippet seedNumber()}
|
||||
<a class="text-primary font-medium underline" href={`/kripke/random/${seed}`}>{seed}</a>
|
||||
{/snippet}
|
||||
|
||||
<main class="flex flex-col min-h-screen max-w-full items-center gap-12 lg:gap-16 py-8">
|
||||
<h1 class="font-display text-6xl">KRiPkE</h1>
|
||||
{#snippet title()}
|
||||
<h2 class="text-sm">
|
||||
<span class="font-bold">Random Challenge</span>
|
||||
<span>(seed: {@render seedNumber()})</span>
|
||||
</h2>
|
||||
{/snippet}
|
||||
|
||||
<div class="flex flex-col md:flex-row-reverse gap-x-20 gap-y-8">
|
||||
<section class="flex flex-col gap-2">
|
||||
<h2 class="text-sm">
|
||||
<span class="font-bold">Random Challenge</span>
|
||||
<span>(seed: {@render seedNumber()})</span>
|
||||
</h2>
|
||||
<Game
|
||||
bind:moves bind:status relationSize={relationSize}
|
||||
guess={guess} check={check} getAnswer={getAnswer}
|
||||
onShare={() => { dialogOpen = true; }}/>
|
||||
</section>
|
||||
{#snippet description()}
|
||||
<h2>Random Challenge!</h2>
|
||||
<ul>
|
||||
<li>The answer of the game is determined by a seed number {@render seedNumber()}.</li>
|
||||
<li>You can right-click on the seed number to obtain a permalink to this exact game.</li>
|
||||
<li>Unlike Daily Challenge, the progress of the game does not persist.</li>
|
||||
<li>You can also play <a href="/kripke">Daily Challenge</a>, if you have not yet.</li>
|
||||
</ul>
|
||||
{/snippet}
|
||||
|
||||
<section class="w-[300px] prose prose-sm">
|
||||
<h2>Random Challenge!</h2>
|
||||
<ul>
|
||||
<li>The answer of the game is determined by a seed number {@render seedNumber()}.</li>
|
||||
<li>You can right-click on the seed number to obtain a permalink to this exact game.</li>
|
||||
<li>Unlike Daily Challenge, the progress of the game does not persist.</li>
|
||||
<li>You can also play <a href="/kripke">Daily Challenge</a>, if you have not yet.</li>
|
||||
</ul>
|
||||
|
||||
<Rules relationSize={relationSize} />
|
||||
</section>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
{#if status !== "playing"}
|
||||
{#await getAnswer() then answerId}
|
||||
<Dialog.Root bind:open={dialogOpen}>
|
||||
<Dialog.Content class="animate-fade-in">
|
||||
<Dialog.Header>
|
||||
<Dialog.Title>
|
||||
{#if status === "win"}
|
||||
YOU WIN!
|
||||
{:else if status === "lose"}
|
||||
YOU LOSE!
|
||||
{/if}
|
||||
</Dialog.Title>
|
||||
<Dialog.Description>
|
||||
The answer was:
|
||||
</Dialog.Description>
|
||||
</Dialog.Header>
|
||||
|
||||
<div class="flex flex-col items-center w-fit rounded bg-background mx-auto">
|
||||
<span class="text-xs text-muted self-start px-2 py-1">id: {answerId}, seed: <a class="text-primary underline font-medium" href="/kripke/random/{seed}">{seed}</a></span>
|
||||
<FrameInput class="pb-6" disabled width={250} height={250} frame={frame} />
|
||||
</div>
|
||||
|
||||
<Dialog.Footer>
|
||||
<div class="flex flex-col md:flex-row gap-2 w-full justify-end">
|
||||
<Share seed={seed} moves={moves} status={status} />
|
||||
<Button
|
||||
data-sveltekit-reload
|
||||
href="/kripke/random">
|
||||
<LuRotateCw class="w-4 h-4 mt-[2px]" /> Play New Game
|
||||
</Button>
|
||||
<Button
|
||||
variant="foreground"
|
||||
onclick={() => (dialogOpen = false)}>
|
||||
<LuX class="w-4 h-4 mt-[2px]" /> Close
|
||||
</Button>
|
||||
</div>
|
||||
</Dialog.Footer>
|
||||
</Dialog.Content>
|
||||
</Dialog.Root>
|
||||
{/await}
|
||||
{/if}
|
||||
<Template
|
||||
relationSize={relationSize}
|
||||
guess={guess}
|
||||
check={check}
|
||||
getAnswer={getAnswer}
|
||||
getSeed={getSeed}
|
||||
getShareProps={(moves, status) => ({ moves, status, seed })}
|
||||
title={title}
|
||||
description={description}
|
||||
newGame={{ href: "/kripke/random", text: "Play New Game" }}
|
||||
/>
|
||||
|
||||
@@ -3,7 +3,11 @@ import type { Config } from "tailwindcss";
|
||||
import { fontFamily } from "tailwindcss/defaultTheme";
|
||||
|
||||
export default {
|
||||
content: ["./src/**/*.{html,js,svelte,ts,md}"],
|
||||
content: [
|
||||
"./src/**/*.{html,js,svelte,ts,md}",
|
||||
"../../node_modules/svelte-ux/**/*.{svelte,js}",
|
||||
"../../node_modules/layerchart/**/*.{svelte,js}",
|
||||
],
|
||||
|
||||
theme: {
|
||||
container: {
|
||||
|
||||
543
yarn.lock
543
yarn.lock
@@ -206,6 +206,22 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@dagrejs/dagre@npm:^1.1.4":
|
||||
version: 1.1.5
|
||||
resolution: "@dagrejs/dagre@npm:1.1.5"
|
||||
dependencies:
|
||||
"@dagrejs/graphlib": "npm:2.2.4"
|
||||
checksum: 10c0/738e2d86ee093b99ec96098f1a4d0b6290b6ddaef51db912885df0ab5d09291edb82ef875575a4b321bc13bab78b1cb00347b246aad4099ce4af3202a72a8586
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@dagrejs/graphlib@npm:2.2.4":
|
||||
version: 2.2.4
|
||||
resolution: "@dagrejs/graphlib@npm:2.2.4"
|
||||
checksum: 10c0/14597ea9294c46b2571aee78bcaad3a24e3e5e0ebcdf198b6eae5b3805f99af727ac54a477dd9152e8b0a576efea0528fb7d4919c74801e9f669c90e5e6f5bd9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@emnapi/runtime@npm:^1.2.0":
|
||||
version: 1.3.1
|
||||
resolution: "@emnapi/runtime@npm:1.3.1"
|
||||
@@ -588,6 +604,25 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@floating-ui/core@npm:^1.7.3":
|
||||
version: 1.7.3
|
||||
resolution: "@floating-ui/core@npm:1.7.3"
|
||||
dependencies:
|
||||
"@floating-ui/utils": "npm:^0.2.10"
|
||||
checksum: 10c0/edfc23800122d81df0df0fb780b7328ae6c5f00efbb55bd48ea340f4af8c5b3b121ceb4bb81220966ab0f87b443204d37105abdd93d94846468be3243984144c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@floating-ui/dom@npm:^1.6.13":
|
||||
version: 1.7.4
|
||||
resolution: "@floating-ui/dom@npm:1.7.4"
|
||||
dependencies:
|
||||
"@floating-ui/core": "npm:^1.7.3"
|
||||
"@floating-ui/utils": "npm:^0.2.10"
|
||||
checksum: 10c0/da6166c25f9b0729caa9f498685a73a0e28251613b35d27db8de8014bc9d045158a23c092b405321a3d67c2064909b6e2a7e6c1c9cc0f62967dca5779f5aef30
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@floating-ui/dom@npm:^1.6.7":
|
||||
version: 1.6.13
|
||||
resolution: "@floating-ui/dom@npm:1.6.13"
|
||||
@@ -598,6 +633,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@floating-ui/utils@npm:^0.2.10":
|
||||
version: 0.2.10
|
||||
resolution: "@floating-ui/utils@npm:0.2.10"
|
||||
checksum: 10c0/e9bc2a1730ede1ee25843937e911ab6e846a733a4488623cd353f94721b05ec2c9ec6437613a2ac9379a94c2fd40c797a2ba6fa1df2716f5ce4aa6ddb1cf9ea4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@floating-ui/utils@npm:^0.2.9":
|
||||
version: 0.2.9
|
||||
resolution: "@floating-ui/utils@npm:0.2.9"
|
||||
@@ -902,6 +944,61 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@layerstack/svelte-actions@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "@layerstack/svelte-actions@npm:1.0.1"
|
||||
dependencies:
|
||||
"@floating-ui/dom": "npm:^1.6.13"
|
||||
"@layerstack/utils": "npm:1.0.1"
|
||||
d3-array: "npm:^3.2.4"
|
||||
d3-scale: "npm:^4.0.2"
|
||||
date-fns: "npm:^4.1.0"
|
||||
lodash-es: "npm:^4.17.21"
|
||||
checksum: 10c0/498335fa0fc0ed71f5d64340cd52ba5af6c9c6a1e24c01f18523e79a8e44e37aaba54991aa82090269cb198c0f61ed7c17502551e2e3c1516866108752766178
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@layerstack/svelte-stores@npm:^1.0.2":
|
||||
version: 1.0.2
|
||||
resolution: "@layerstack/svelte-stores@npm:1.0.2"
|
||||
dependencies:
|
||||
"@layerstack/utils": "npm:1.0.1"
|
||||
d3-array: "npm:^3.2.4"
|
||||
date-fns: "npm:^4.1.0"
|
||||
immer: "npm:^10.1.1"
|
||||
lodash-es: "npm:^4.17.21"
|
||||
zod: "npm:^3.24.2"
|
||||
checksum: 10c0/5c163918c10ebec22be3046f56475d2fba7975e4f1bc1f76b304a9e6ca147ee8077fc01cafe05e353fee1d7374df0b015d5ca8e74fc1347f81e7e19c94c0249c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@layerstack/tailwind@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "@layerstack/tailwind@npm:1.0.1"
|
||||
dependencies:
|
||||
"@layerstack/utils": "npm:^1.0.1"
|
||||
clsx: "npm:^2.1.1"
|
||||
culori: "npm:^4.0.1"
|
||||
d3-array: "npm:^3.2.4"
|
||||
date-fns: "npm:^4.1.0"
|
||||
lodash-es: "npm:^4.17.21"
|
||||
tailwind-merge: "npm:^2.5.4"
|
||||
tailwindcss: "npm:^3.4.15"
|
||||
checksum: 10c0/4c9bd396315f768d63ec17953ab0f5612cd8283e48e675e443609d717cb6e2fc48596df0db850b35281ae65f6121d16f1b6556f2c7f2b31fa9b1cc3e651342b6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@layerstack/utils@npm:1.0.1, @layerstack/utils@npm:^1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "@layerstack/utils@npm:1.0.1"
|
||||
dependencies:
|
||||
d3-array: "npm:^3.2.4"
|
||||
date-fns: "npm:^4.1.0"
|
||||
lodash-es: "npm:^4.17.21"
|
||||
checksum: 10c0/2b9b9ca1cee87bb28f4d7efd2b0908ebae729f8079d29bec0c422850ef210c503fd9b4b5e5bc692dd93e1b626426f8b814956cad7d52b2467d1e25f6fd746e7c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@nodelib/fs.scandir@npm:2.1.5":
|
||||
version: 2.1.5
|
||||
resolution: "@nodelib/fs.scandir@npm:2.1.5"
|
||||
@@ -1295,6 +1392,45 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/d3-array@npm:^3":
|
||||
version: 3.2.2
|
||||
resolution: "@types/d3-array@npm:3.2.2"
|
||||
checksum: 10c0/6137cb97302f8a4f18ca22c0560c585cfcb823f276b23d89f2c0c005d72697ec13bca671c08e68b4b0cabd622e3f0e91782ee221580d6774074050be96dd7028
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/d3-path@npm:*":
|
||||
version: 3.1.1
|
||||
resolution: "@types/d3-path@npm:3.1.1"
|
||||
checksum: 10c0/2c36eb31ebaf2ce4712e793fd88087117976f7c4ed69cc2431825f999c8c77cca5cea286f3326432b770739ac6ccd5d04d851eb65e7a4dbcc10c982b49ad2c02
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/d3-scale@npm:^4":
|
||||
version: 4.0.9
|
||||
resolution: "@types/d3-scale@npm:4.0.9"
|
||||
dependencies:
|
||||
"@types/d3-time": "npm:*"
|
||||
checksum: 10c0/4ac44233c05cd50b65b33ecb35d99fdf07566bcdbc55bc1306b2f27d1c5134d8c560d356f2c8e76b096e9125ffb8d26d95f78d56e210d1c542cb255bdf31d6c8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/d3-shape@npm:^3":
|
||||
version: 3.1.7
|
||||
resolution: "@types/d3-shape@npm:3.1.7"
|
||||
dependencies:
|
||||
"@types/d3-path": "npm:*"
|
||||
checksum: 10c0/38e59771c1c4c83b67aa1f941ce350410522a149d2175832fdc06396b2bb3b2c1a2dd549e0f8230f9f24296ee5641a515eaf10f55ee1ef6c4f83749e2dd7dcfd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/d3-time@npm:*":
|
||||
version: 3.0.4
|
||||
resolution: "@types/d3-time@npm:3.0.4"
|
||||
checksum: 10c0/6d9e2255d63f7a313a543113920c612e957d70da4fb0890931da6c2459010291b8b1f95e149a538500c1c99e7e6c89ffcce5554dd29a31ff134a38ea94b6d174
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/deep-eql@npm:*":
|
||||
version: 4.0.2
|
||||
resolution: "@types/deep-eql@npm:4.0.2"
|
||||
@@ -1832,6 +1968,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"commander@npm:7, commander@npm:^7.2.0":
|
||||
version: 7.2.0
|
||||
resolution: "commander@npm:7.2.0"
|
||||
checksum: 10c0/8d690ff13b0356df7e0ebbe6c59b4712f754f4b724d4f473d3cc5b3fdcf978e3a5dc3078717858a2ceb50b0f84d0660a7f22a96cdc50fb877d0c9bb31593d23a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"commander@npm:^4.0.0":
|
||||
version: 4.1.1
|
||||
resolution: "commander@npm:4.1.1"
|
||||
@@ -1839,13 +1982,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"commander@npm:^7.2.0":
|
||||
version: 7.2.0
|
||||
resolution: "commander@npm:7.2.0"
|
||||
checksum: 10c0/8d690ff13b0356df7e0ebbe6c59b4712f754f4b724d4f473d3cc5b3fdcf978e3a5dc3078717858a2ceb50b0f84d0660a7f22a96cdc50fb877d0c9bb31593d23a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"commander@npm:^8.3.0":
|
||||
version: 8.3.0
|
||||
resolution: "commander@npm:8.3.0"
|
||||
@@ -1943,6 +2079,258 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"culori@npm:^4.0.1":
|
||||
version: 4.0.2
|
||||
resolution: "culori@npm:4.0.2"
|
||||
checksum: 10c0/5d3c952b947ac5915409bab513e1d2e8bd813caa491af8ded0c769fdc1186a5ff61fb3c59fc8edf5393237d92074dbc54a492e6e99cb039dd6535d5d96106bfe
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-array@npm:1 - 2":
|
||||
version: 2.12.1
|
||||
resolution: "d3-array@npm:2.12.1"
|
||||
dependencies:
|
||||
internmap: "npm:^1.0.0"
|
||||
checksum: 10c0/7eca10427a9f113a4ca6a0f7301127cab26043fd5e362631ef5a0edd1c4b2dd70c56ed317566700c31e4a6d88b55f3951aaba192291817f243b730cb2352882e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:2.5.0 - 3, d3-array@npm:3, d3-array@npm:^3.2.4":
|
||||
version: 3.2.4
|
||||
resolution: "d3-array@npm:3.2.4"
|
||||
dependencies:
|
||||
internmap: "npm:1 - 2"
|
||||
checksum: 10c0/08b95e91130f98c1375db0e0af718f4371ccacef7d5d257727fe74f79a24383e79aba280b9ffae655483ffbbad4fd1dec4ade0119d88c4749f388641c8bf8c50
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-color@npm:1 - 3, d3-color@npm:^3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "d3-color@npm:3.1.0"
|
||||
checksum: 10c0/a4e20e1115fa696fce041fbe13fbc80dc4c19150fa72027a7c128ade980bc0eeeba4bcf28c9e21f0bce0e0dbfe7ca5869ef67746541dcfda053e4802ad19783c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-delaunay@npm:6, d3-delaunay@npm:^6.0.4":
|
||||
version: 6.0.4
|
||||
resolution: "d3-delaunay@npm:6.0.4"
|
||||
dependencies:
|
||||
delaunator: "npm:5"
|
||||
checksum: 10c0/57c3aecd2525664b07c4c292aa11cf49b2752c0cf3f5257f752999399fe3c592de2d418644d79df1f255471eec8057a9cc0c3062ed7128cb3348c45f69597754
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-dispatch@npm:1 - 3":
|
||||
version: 3.0.1
|
||||
resolution: "d3-dispatch@npm:3.0.1"
|
||||
checksum: 10c0/6eca77008ce2dc33380e45d4410c67d150941df7ab45b91d116dbe6d0a3092c0f6ac184dd4602c796dc9e790222bad3ff7142025f5fd22694efe088d1d941753
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-dsv@npm:^3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "d3-dsv@npm:3.0.1"
|
||||
dependencies:
|
||||
commander: "npm:7"
|
||||
iconv-lite: "npm:0.6"
|
||||
rw: "npm:1"
|
||||
bin:
|
||||
csv2json: bin/dsv2json.js
|
||||
csv2tsv: bin/dsv2dsv.js
|
||||
dsv2dsv: bin/dsv2dsv.js
|
||||
dsv2json: bin/dsv2json.js
|
||||
json2csv: bin/json2dsv.js
|
||||
json2dsv: bin/json2dsv.js
|
||||
json2tsv: bin/json2dsv.js
|
||||
tsv2csv: bin/dsv2dsv.js
|
||||
tsv2json: bin/dsv2json.js
|
||||
checksum: 10c0/10e6af9e331950ed258f34ab49ac1b7060128ef81dcf32afc790bd1f7e8c3cc2aac7f5f875250a83f21f39bb5925fbd0872bb209f8aca32b3b77d32bab8a65ab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-force@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "d3-force@npm:3.0.0"
|
||||
dependencies:
|
||||
d3-dispatch: "npm:1 - 3"
|
||||
d3-quadtree: "npm:1 - 3"
|
||||
d3-timer: "npm:1 - 3"
|
||||
checksum: 10c0/220a16a1a1ac62ba56df61028896e4b52be89c81040d20229c876efc8852191482c233f8a52bb5a4e0875c321b8e5cb6413ef3dfa4d8fe79eeb7d52c587f52cf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-format@npm:1 - 3":
|
||||
version: 3.1.0
|
||||
resolution: "d3-format@npm:3.1.0"
|
||||
checksum: 10c0/049f5c0871ebce9859fc5e2f07f336b3c5bfff52a2540e0bac7e703fce567cd9346f4ad1079dd18d6f1e0eaa0599941c1810898926f10ac21a31fd0a34b4aa75
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-geo-voronoi@npm:^2.1.0":
|
||||
version: 2.1.0
|
||||
resolution: "d3-geo-voronoi@npm:2.1.0"
|
||||
dependencies:
|
||||
d3-array: "npm:3"
|
||||
d3-delaunay: "npm:6"
|
||||
d3-geo: "npm:3"
|
||||
d3-tricontour: "npm:1"
|
||||
checksum: 10c0/e626c64ef01bc06dd52ce11224ab563acb118becd5ef9490d351c6541662948a0f7bd6dd89dd6da14f885ee55b1d1eaf56f1a16afcd269498743141f6b8be91c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-geo@npm:3, d3-geo@npm:^3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "d3-geo@npm:3.1.1"
|
||||
dependencies:
|
||||
d3-array: "npm:2.5.0 - 3"
|
||||
checksum: 10c0/d32270dd2dc8ac3ea63e8805d63239c4c8ec6c0d339d73b5e5a30a87f8f54db22a78fb434369799465eae169503b25f9a107c642c8a16c32a3285bc0e6d8e8c1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-hierarchy@npm:^3.1.2":
|
||||
version: 3.1.2
|
||||
resolution: "d3-hierarchy@npm:3.1.2"
|
||||
checksum: 10c0/6dcdb480539644aa7fc0d72dfc7b03f99dfbcdf02714044e8c708577e0d5981deb9d3e99bbbb2d26422b55bcc342ac89a0fa2ea6c9d7302e2fc0951dd96f89cf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-interpolate-path@npm:^2.3.0":
|
||||
version: 2.3.0
|
||||
resolution: "d3-interpolate-path@npm:2.3.0"
|
||||
checksum: 10c0/5249d35ab903e6955d8a240029b60c84d347d20ab6e730ef99d4ae516996bebf641257b2718779f141a88bd0306840344e5d863d893f662aeeab5cc4d9a87360
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "d3-interpolate@npm:3.0.1"
|
||||
dependencies:
|
||||
d3-color: "npm:1 - 3"
|
||||
checksum: 10c0/19f4b4daa8d733906671afff7767c19488f51a43d251f8b7f484d5d3cfc36c663f0a66c38fe91eee30f40327443d799be17169f55a293a3ba949e84e57a33e6a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-path@npm:1":
|
||||
version: 1.0.9
|
||||
resolution: "d3-path@npm:1.0.9"
|
||||
checksum: 10c0/e35e84df5abc18091f585725b8235e1fa97efc287571585427d3a3597301e6c506dea56b11dfb3c06ca5858b3eb7f02c1bf4f6a716aa9eade01c41b92d497eb5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-path@npm:^3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "d3-path@npm:3.1.0"
|
||||
checksum: 10c0/dc1d58ec87fa8319bd240cf7689995111a124b141428354e9637aa83059eb12e681f77187e0ada5dedfce346f7e3d1f903467ceb41b379bfd01cd8e31721f5da
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-quadtree@npm:1 - 3, d3-quadtree@npm:^3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "d3-quadtree@npm:3.0.1"
|
||||
checksum: 10c0/18302d2548bfecaef788152397edec95a76400fd97d9d7f42a089ceb68d910f685c96579d74e3712d57477ed042b056881b47cd836a521de683c66f47ce89090
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-random@npm:^3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "d3-random@npm:3.0.1"
|
||||
checksum: 10c0/987a1a1bcbf26e6cf01fd89d5a265b463b2cea93560fc17d9b1c45e8ed6ff2db5924601bcceb808de24c94133f000039eb7fa1c469a7a844ccbf1170cbb25b41
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-sankey@npm:^0.12.3":
|
||||
version: 0.12.3
|
||||
resolution: "d3-sankey@npm:0.12.3"
|
||||
dependencies:
|
||||
d3-array: "npm:1 - 2"
|
||||
d3-shape: "npm:^1.2.0"
|
||||
checksum: 10c0/261debb01a13269f6fc53b9ebaef174a015d5ad646242c23995bf514498829ab8b8f920a7873724a7494288b46bea3ce7ebc5a920b745bc8ae4caa5885cf5204
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-scale-chromatic@npm:^3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "d3-scale-chromatic@npm:3.1.0"
|
||||
dependencies:
|
||||
d3-color: "npm:1 - 3"
|
||||
d3-interpolate: "npm:1 - 3"
|
||||
checksum: 10c0/9a3f4671ab0b971f4a411b42180d7cf92bfe8e8584e637ce7e698d705e18d6d38efbd20ec64f60cc0dfe966c20d40fc172565bc28aaa2990c0a006360eed91af
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-scale@npm:4, d3-scale@npm:4.0.2, d3-scale@npm:^4.0.2":
|
||||
version: 4.0.2
|
||||
resolution: "d3-scale@npm:4.0.2"
|
||||
dependencies:
|
||||
d3-array: "npm:2.10.0 - 3"
|
||||
d3-format: "npm:1 - 3"
|
||||
d3-interpolate: "npm:1.2.0 - 3"
|
||||
d3-time: "npm:2.1.1 - 3"
|
||||
d3-time-format: "npm:2 - 4"
|
||||
checksum: 10c0/65d9ad8c2641aec30ed5673a7410feb187a224d6ca8d1a520d68a7d6eac9d04caedbff4713d1e8545be33eb7fec5739983a7ab1d22d4e5ad35368c6729d362f1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-shape@npm:^1.2.0":
|
||||
version: 1.3.7
|
||||
resolution: "d3-shape@npm:1.3.7"
|
||||
dependencies:
|
||||
d3-path: "npm:1"
|
||||
checksum: 10c0/548057ce59959815decb449f15632b08e2a1bdce208f9a37b5f98ec7629dda986c2356bc7582308405ce68aedae7d47b324df41507404df42afaf352907577ae
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-shape@npm:^3.2.0":
|
||||
version: 3.2.0
|
||||
resolution: "d3-shape@npm:3.2.0"
|
||||
dependencies:
|
||||
d3-path: "npm:^3.1.0"
|
||||
checksum: 10c0/f1c9d1f09926daaf6f6193ae3b4c4b5521e81da7d8902d24b38694517c7f527ce3c9a77a9d3a5722ad1e3ff355860b014557b450023d66a944eabf8cfde37132
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-tile@npm:^1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "d3-tile@npm:1.0.0"
|
||||
checksum: 10c0/9abe3654f3a23c5c105f0e89a358b5ae3b130f5eded1e496e80efeb554d889c55d92d2e638d7790326de834b9380b66652830c2803071edd8c19ea221a06fcea
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-time-format@npm:2 - 4":
|
||||
version: 4.1.0
|
||||
resolution: "d3-time-format@npm:4.1.0"
|
||||
dependencies:
|
||||
d3-time: "npm:1 - 3"
|
||||
checksum: 10c0/735e00fb25a7fd5d418fac350018713ae394eefddb0d745fab12bbff0517f9cdb5f807c7bbe87bb6eeb06249662f8ea84fec075f7d0cd68609735b2ceb29d206
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:^3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "d3-time@npm:3.1.0"
|
||||
dependencies:
|
||||
d3-array: "npm:2 - 3"
|
||||
checksum: 10c0/a984f77e1aaeaa182679b46fbf57eceb6ebdb5f67d7578d6f68ef933f8eeb63737c0949991618a8d29472dbf43736c7d7f17c452b2770f8c1271191cba724ca1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-timer@npm:1 - 3":
|
||||
version: 3.0.1
|
||||
resolution: "d3-timer@npm:3.0.1"
|
||||
checksum: 10c0/d4c63cb4bb5461d7038aac561b097cd1c5673969b27cbdd0e87fa48d9300a538b9e6f39b4a7f0e3592ef4f963d858c8a9f0e92754db73116770856f2fc04561a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"d3-tricontour@npm:1":
|
||||
version: 1.0.2
|
||||
resolution: "d3-tricontour@npm:1.0.2"
|
||||
dependencies:
|
||||
d3-delaunay: "npm:6"
|
||||
d3-scale: "npm:4"
|
||||
checksum: 10c0/d417b5978bc370d5cb02d3f68178a5b4824a6a797018d46f56781d94b1d800901cc71c826829b97fc5ba30e725ae8d64e7597c0633e6da49642ee3f6f595db4d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"data-uri-to-buffer@npm:^2.0.0":
|
||||
version: 2.0.2
|
||||
resolution: "data-uri-to-buffer@npm:2.0.2"
|
||||
@@ -1950,6 +2338,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"date-fns@npm:^4.1.0":
|
||||
version: 4.1.0
|
||||
resolution: "date-fns@npm:4.1.0"
|
||||
checksum: 10c0/b79ff32830e6b7faa009590af6ae0fb8c3fd9ffad46d930548fbb5acf473773b4712ae887e156ba91a7b3dc30591ce0f517d69fd83bd9c38650fdc03b4e0bac8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"debug@npm:4, debug@npm:^4.3.4":
|
||||
version: 4.4.0
|
||||
resolution: "debug@npm:4.4.0"
|
||||
@@ -1995,6 +2390,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"delaunator@npm:5":
|
||||
version: 5.0.1
|
||||
resolution: "delaunator@npm:5.0.1"
|
||||
dependencies:
|
||||
robust-predicates: "npm:^3.0.2"
|
||||
checksum: 10c0/3d7ea4d964731c5849af33fec0a271bc6753487b331fd7d43ccb17d77834706e1c383e6ab8fda0032da955e7576d1083b9603cdaf9cbdfd6b3ebd1fb8bb675a5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"dequal@npm:^2.0.0":
|
||||
version: 2.0.3
|
||||
resolution: "dequal@npm:2.0.3"
|
||||
@@ -2759,7 +3163,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"iconv-lite@npm:^0.6.2":
|
||||
"iconv-lite@npm:0.6, iconv-lite@npm:^0.6.2":
|
||||
version: 0.6.3
|
||||
resolution: "iconv-lite@npm:0.6.3"
|
||||
dependencies:
|
||||
@@ -2775,6 +3179,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"immer@npm:^10.1.1":
|
||||
version: 10.1.3
|
||||
resolution: "immer@npm:10.1.3"
|
||||
checksum: 10c0/b3929022c1999935c9c5e9491fce20d883c15a04072628056f3b8c51a63ac0876d1c1f25cec146e325c30c906bc7f15a636c29ed53156f0a3049150f152df4c8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"import-meta-resolve@npm:^4.1.0":
|
||||
version: 4.1.0
|
||||
resolution: "import-meta-resolve@npm:4.1.0"
|
||||
@@ -2796,6 +3207,20 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"internmap@npm:1 - 2":
|
||||
version: 2.0.3
|
||||
resolution: "internmap@npm:2.0.3"
|
||||
checksum: 10c0/8cedd57f07bbc22501516fbfc70447f0c6812871d471096fad9ea603516eacc2137b633633daf432c029712df0baefd793686388ddf5737e3ea15074b877f7ed
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"internmap@npm:^1.0.0":
|
||||
version: 1.0.1
|
||||
resolution: "internmap@npm:1.0.1"
|
||||
checksum: 10c0/60942be815ca19da643b6d4f23bd0bf4e8c97abbd080fb963fe67583b60bdfb3530448ad4486bae40810e92317bded9995cc31411218acc750d72cd4e8646eee
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ip-address@npm:^9.0.5":
|
||||
version: 9.0.5
|
||||
resolution: "ip-address@npm:9.0.5"
|
||||
@@ -2945,6 +3370,58 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"layercake@npm:8.4.3":
|
||||
version: 8.4.3
|
||||
resolution: "layercake@npm:8.4.3"
|
||||
dependencies:
|
||||
d3-array: "npm:^3.2.4"
|
||||
d3-color: "npm:^3.1.0"
|
||||
d3-scale: "npm:^4.0.2"
|
||||
d3-shape: "npm:^3.2.0"
|
||||
peerDependencies:
|
||||
svelte: 3 - 5 || >=5.0.0-next.120
|
||||
typescript: ^5.0.2
|
||||
checksum: 10c0/5955e0a7f8f319fd53e8882a59d971ee5e4decb7710038fafb1c0a17bbb095c6973c1af3d3344baf4bdf82e427cdf1dd5ab79e69ca47aae429829caee38f4b98
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"layerchart@npm:1.0.12":
|
||||
version: 1.0.12
|
||||
resolution: "layerchart@npm:1.0.12"
|
||||
dependencies:
|
||||
"@dagrejs/dagre": "npm:^1.1.4"
|
||||
"@layerstack/svelte-actions": "npm:^1.0.1"
|
||||
"@layerstack/svelte-stores": "npm:^1.0.2"
|
||||
"@layerstack/tailwind": "npm:^1.0.1"
|
||||
"@layerstack/utils": "npm:^1.0.1"
|
||||
d3-array: "npm:^3.2.4"
|
||||
d3-color: "npm:^3.1.0"
|
||||
d3-delaunay: "npm:^6.0.4"
|
||||
d3-dsv: "npm:^3.0.1"
|
||||
d3-force: "npm:^3.0.0"
|
||||
d3-geo: "npm:^3.1.1"
|
||||
d3-geo-voronoi: "npm:^2.1.0"
|
||||
d3-hierarchy: "npm:^3.1.2"
|
||||
d3-interpolate: "npm:^3.0.1"
|
||||
d3-interpolate-path: "npm:^2.3.0"
|
||||
d3-path: "npm:^3.1.0"
|
||||
d3-quadtree: "npm:^3.0.1"
|
||||
d3-random: "npm:^3.0.1"
|
||||
d3-sankey: "npm:^0.12.3"
|
||||
d3-scale: "npm:^4.0.2"
|
||||
d3-scale-chromatic: "npm:^3.1.0"
|
||||
d3-shape: "npm:^3.2.0"
|
||||
d3-tile: "npm:^1.0.0"
|
||||
d3-time: "npm:^3.1.0"
|
||||
date-fns: "npm:^4.1.0"
|
||||
layercake: "npm:8.4.3"
|
||||
lodash-es: "npm:^4.17.21"
|
||||
peerDependencies:
|
||||
svelte: ^3.56.0 || ^4.0.0 || ^5.0.0
|
||||
checksum: 10c0/e1a5d4dd88b688d01e1e689f890259639098aa6e18786ff35a5ce857f144ba956a313db612bf35684353c951c00013e046912f305a2e97fdbc24491fe50c472b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lilconfig@npm:^3.0.0, lilconfig@npm:^3.1.3":
|
||||
version: 3.1.3
|
||||
resolution: "lilconfig@npm:3.1.3"
|
||||
@@ -2966,6 +3443,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash-es@npm:^4.17.21":
|
||||
version: 4.17.21
|
||||
resolution: "lodash-es@npm:4.17.21"
|
||||
checksum: 10c0/fb407355f7e6cd523a9383e76e6b455321f0f153a6c9625e21a8827d10c54c2a2341bd2ae8d034358b60e07325e1330c14c224ff582d04612a46a4f0479ff2f2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash.castarray@npm:^4.4.0":
|
||||
version: 4.4.0
|
||||
resolution: "lodash.castarray@npm:4.4.0"
|
||||
@@ -3811,6 +4295,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"robust-predicates@npm:^3.0.2":
|
||||
version: 3.0.2
|
||||
resolution: "robust-predicates@npm:3.0.2"
|
||||
checksum: 10c0/4ecd53649f1c2d49529c85518f2fa69ffb2f7a4453f7fd19c042421c7b4d76c3efb48bc1c740c8f7049346d7cb58cf08ee0c9adaae595cc23564d360adb1fde4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"rollup@npm:^4.43.0":
|
||||
version: 4.50.2
|
||||
resolution: "rollup@npm:4.50.2"
|
||||
@@ -3909,6 +4400,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"rw@npm:1":
|
||||
version: 1.3.3
|
||||
resolution: "rw@npm:1.3.3"
|
||||
checksum: 10c0/b1e1ef37d1e79d9dc7050787866e30b6ddcb2625149276045c262c6b4d53075ddc35f387a856a8e76f0d0df59f4cd58fe24707e40797ebee66e542b840ed6a53
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"sade@npm:^1.7.4, sade@npm:^1.8.1":
|
||||
version: 1.8.1
|
||||
resolution: "sade@npm:1.8.1"
|
||||
@@ -4359,6 +4857,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tailwind-merge@npm:^2.5.4":
|
||||
version: 2.6.0
|
||||
resolution: "tailwind-merge@npm:2.6.0"
|
||||
checksum: 10c0/fc8a5535524de9f4dacf1c16ab298581c7bb757d68a95faaf28942b1c555a619bba9d4c6726fe83986e44973b315410c1a5226e5354c30ba82353bd6d2288fa5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tailwind-variants@npm:1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "tailwind-variants@npm:1.0.0"
|
||||
@@ -4370,7 +4875,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tailwindcss@npm:3.4.17":
|
||||
"tailwindcss@npm:3.4.17, tailwindcss@npm:^3.4.15":
|
||||
version: 3.4.17
|
||||
resolution: "tailwindcss@npm:3.4.17"
|
||||
dependencies:
|
||||
@@ -5070,11 +5575,16 @@ __metadata:
|
||||
"@sveltejs/kit": "npm:2.20.7"
|
||||
"@sveltejs/vite-plugin-svelte": "npm:6.2.0"
|
||||
"@tailwindcss/typography": "npm:0.5.16"
|
||||
"@types/d3-array": "npm:^3"
|
||||
"@types/d3-scale": "npm:^4"
|
||||
"@types/d3-shape": "npm:^3"
|
||||
"@types/prismjs": "npm:1.26.5"
|
||||
autoprefixer: "npm:10.4.20"
|
||||
bits-ui: "npm:1.3.3"
|
||||
d3-scale: "npm:4.0.2"
|
||||
deepmerge: "npm:4.3.1"
|
||||
katex: "npm:0.16.21"
|
||||
layerchart: "npm:1.0.12"
|
||||
lucide-svelte: "npm:0.475.0"
|
||||
mdsvex: "npm:0.12.5"
|
||||
misskey-js: "npm:2024.11.1-alpha.0"
|
||||
@@ -5096,6 +5606,7 @@ __metadata:
|
||||
typescript: "npm:5.7.3"
|
||||
vite: "npm:7.1.7"
|
||||
wrangler: "npm:4.12.0"
|
||||
zod: "npm:4.1.11"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
@@ -5285,6 +5796,20 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"zod@npm:4.1.11":
|
||||
version: 4.1.11
|
||||
resolution: "zod@npm:4.1.11"
|
||||
checksum: 10c0/ce6a4c4acfbf51d7dd0f2669c82f207d62a1f00264eef608994b94eb99d86a74c99f59b0dd3e61ef82909ee136631378b709e0908f0a02a2d5c21d0c497de5db
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"zod@npm:^3.24.2":
|
||||
version: 3.25.76
|
||||
resolution: "zod@npm:3.25.76"
|
||||
checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"zwitch@npm:^2.0.0":
|
||||
version: 2.0.4
|
||||
resolution: "zwitch@npm:2.0.4"
|
||||
|
||||
Reference in New Issue
Block a user