···11+import { AppLayout } from "$components/layout/AppLayout";
22+import { authStore } from "$lib/store";
33+import DeckNew from "$pages/DeckNew";
44+import DeckView from "$pages/DeckView";
55+import Home from "$pages/Home";
66+import Import from "$pages/Import";
77+import Landing from "$pages/Landing";
88+import Login from "$pages/Login";
99+import NoteNew from "$pages/NoteNew";
1010+import NotFound from "$pages/NotFound";
111import { Route, Router } from "@solidjs/router";
212import type { Component } from "solid-js";
313import { Show } from "solid-js";
44-import { AppLayout } from "./components/layout/AppLayout";
55-import { authStore } from "./lib/store";
66-import DeckNew from "./pages/DeckNew";
77-import DeckView from "./pages/DeckView";
88-import Home from "./pages/Home";
99-import Import from "./pages/Import";
1010-import Landing from "./pages/Landing";
1111-import Login from "./pages/Login";
1212-import NoteNew from "./pages/NoteNew";
1313-import NotFound from "./pages/NotFound";
14141515const ProtectedRoute: Component<{ component: Component }> = (props) => {
1616 return (
+1-1
web/src/components/CardEditor.tsx
···11+import { Button } from "$ui/Button";
12import { createEffect, createSignal, Show } from "solid-js";
22-import { Button } from "./ui/Button";
3344type CardEditorProps = {
55 front?: string;
+2-2
web/src/components/DeckEditor.test.tsx
···11+import { api } from "$lib/api";
12import { cleanup, fireEvent, render, screen } from "@solidjs/testing-library";
23import { afterEach, describe, expect, it, vi } from "vitest";
33-import { api } from "../lib/api";
44import { DeckEditor } from "./DeckEditor";
5566vi.mock(
77- "../lib/api",
77+ "$lib/api",
88 () => ({ api: { post: vi.fn().mockResolvedValue({ ok: true, json: () => Promise.resolve({}) }) } }),
99);
1010
+4-4
web/src/components/DeckEditor.tsx
···11+import { api } from "$lib/api";
22+import type { Card, CreateDeckPayload, Visibility } from "$lib/store";
33+import { toast } from "$lib/toast";
44+import { Button } from "$ui/Button";
15import { createSignal, For, Show } from "solid-js";
22-import { api } from "../lib/api";
33-import type { Card, CreateDeckPayload, Visibility } from "../lib/store";
44-import { toast } from "../lib/toast";
56import { CardEditor } from "./CardEditor";
66-import { Button } from "./ui/Button";
7788export function DeckEditor(props: { onSave?: (deck: CreateDeckPayload) => void }) {
99 const [title, setTitle] = createSignal("");
+3-3
web/src/components/NoteEditor.tsx
···11/* eslint-disable solid/no-innerhtml */
22+import { api } from "$lib/api";
33+import { toast } from "$lib/toast";
44+import { Button } from "$ui/Button";
25import rehypeExternalLinks from "rehype-external-links";
36import rehypeSanitize from "rehype-sanitize";
47import rehypeStringify from "rehype-stringify";
···69import remarkRehype from "remark-rehype";
710import { createEffect, createSignal, Show } from "solid-js";
811import { unified } from "unified";
99-import { api } from "../lib/api";
1010-import { toast } from "../lib/toast";
1111-import { Button } from "./ui/Button";
12121313type NoteEditorProps = { noteId?: string; initialTitle?: string; initialContent?: string };
1414
+1-1
web/src/components/layout/AppLayout.tsx
···11+import { Toaster } from "$ui/Toast";
12import type { Component, JSX } from "solid-js";
22-import { Toaster } from "../ui/Toast";
33import { Header } from "./Header";
4455type AppLayoutProps = { children?: JSX.Element };
+2-2
web/src/components/layout/Header.tsx
···11+import { authStore } from "$lib/store";
22+import { Avatar } from "$ui/Avatar";
13import { A } from "@solidjs/router";
24import { type Component, Show } from "solid-js";
33-import { authStore } from "../../lib/store";
44-import { Avatar } from "../ui/Avatar";
5566const Login: Component = () => (
77 <A href="/login" class="px-4 py-2 bg-white text-gray-900 text-sm font-medium hover:bg-gray-100 transition-colors">
-4
web/src/lib/animations.ts
···11-/**
22- * Animation presets for solid-motionone
33- * @module animations
44- */
51import type { Options as MotionOptions } from "solid-motionone";
6273/** Spring animation config for natural bounce */
+4-4
web/src/pages/DeckNew.tsx
···11+import { DeckEditor } from "$components/DeckEditor";
22+import { api } from "$lib/api";
33+import type { Card, CreateDeckPayload } from "$lib/store";
44+import { toast } from "$lib/toast";
15import { useNavigate } from "@solidjs/router";
26import type { Component } from "solid-js";
33-import { DeckEditor } from "../components/DeckEditor";
44-import { api } from "../lib/api";
55-import type { Card, CreateDeckPayload } from "../lib/store";
66-import { toast } from "../lib/toast";
7788const DeckNew: Component = () => {
99 const navigate = useNavigate();
+2-2
web/src/pages/DeckView.test.tsx
···11+import { api } from "$lib/api";
12import { cleanup, render, screen, waitFor } from "@solidjs/testing-library";
23import { JSX } from "solid-js";
34import { afterEach, describe, expect, it, vi } from "vitest";
44-import { api } from "../lib/api";
55import DeckView from "./DeckView";
6677-vi.mock("../lib/api", () => ({ api: { get: vi.fn() } }));
77+vi.mock("$lib/api", () => ({ api: { get: vi.fn() } }));
8899vi.mock(
1010 "@solidjs/router",
+2-2
web/src/pages/DeckView.tsx
···11+import { api } from "$lib/api";
22+import type { Visibility } from "$lib/store";
13import { A, useParams } from "@solidjs/router";
24import type { Component } from "solid-js";
35import { createResource, For, Show } from "solid-js";
44-import { api } from "../lib/api";
55-import type { Visibility } from "../lib/store";
6677type Deck = {
88 id: string;
+2-2
web/src/pages/Home.tsx
···11+import { api } from "$lib/api";
22+import type { Visibility } from "$lib/store";
13import { A } from "@solidjs/router";
24import type { Component } from "solid-js";
35import { createResource, For, Show } from "solid-js";
44-import { api } from "../lib/api";
55-import type { Visibility } from "../lib/store";
6677type Deck = {
88 id: string;
+4-4
web/src/pages/Import.tsx
···11+import { NoteEditor } from "$components/NoteEditor";
22+import { api } from "$lib/api";
33+import { toast } from "$lib/toast";
44+import { Button } from "$ui/Button";
15import { createSignal, Show } from "solid-js";
22-import { NoteEditor } from "../components/NoteEditor";
33-import { Button } from "../components/ui/Button";
44-import { api } from "../lib/api";
55-import { toast } from "../lib/toast";
6677export default function Import() {
88 const [url, setUrl] = createSignal("");
+2-2
web/src/pages/Login.tsx
···11+import { api } from "$lib/api";
22+import { authStore } from "$lib/store";
13import { useNavigate } from "@solidjs/router";
24import type { Component } from "solid-js";
35import { createSignal } from "solid-js";
44-import { api } from "../lib/api";
55-import { authStore } from "../lib/store";
6677const Login: Component = () => {
88 const [identifier, setIdentifier] = createSignal("");