From 696027f03cc647193b27b3d45dab4090e2f43ac9 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Mon, 27 Jul 2026 12:45:05 +0100 Subject: [PATCH] web/components: add new issue form --- .../repo/issues/IssueForm.stories.svelte | 60 ++++++++ .../components/repo/issues/IssueForm.svelte | 125 +++++++++++++++++ web/src/lib/components/repo/types.ts | 11 ++ .../testing/MockAuthProvider.svelte | 30 ++++ .../ui/MarkdownEditor.stories.svelte | 23 +++ .../lib/components/ui/MarkdownEditor.svelte | 132 ++++++++++++++++++ web/src/lib/components/ui/Textarea.svelte | 3 + web/src/lib/markup/render.ts | 11 ++ .../[repo]/issues/new/+page.server.ts | 6 + .../[handle]/[repo]/issues/new/+page.svelte | 40 ++++++ 10 files changed, 441 insertions(+) create mode 100644 web/src/lib/components/repo/issues/IssueForm.stories.svelte create mode 100644 web/src/lib/components/repo/issues/IssueForm.svelte create mode 100644 web/src/lib/components/testing/MockAuthProvider.svelte create mode 100644 web/src/lib/components/ui/MarkdownEditor.stories.svelte create mode 100644 web/src/lib/components/ui/MarkdownEditor.svelte create mode 100644 web/src/routes/[handle]/[repo]/issues/new/+page.server.ts create mode 100644 web/src/routes/[handle]/[repo]/issues/new/+page.svelte diff --git a/web/src/lib/components/repo/issues/IssueForm.stories.svelte b/web/src/lib/components/repo/issues/IssueForm.stories.svelte new file mode 100644 index 00000000..6f4bdeaf --- /dev/null +++ b/web/src/lib/components/repo/issues/IssueForm.stories.svelte @@ -0,0 +1,60 @@ + + + + + + + { + const canvas = within(canvasElement); + await userEvent.type(canvas.getByLabelText("Title"), "Something broke"); + await userEvent.type( + canvas.getByPlaceholderText(/describe your issue/i), + "details{Control>}{Enter}{/Control}" + ); + await waitFor(() => + expect(canvas.getByRole("alert")).toHaveTextContent(/network request failed/i) + ); + }} +> + {#snippet template(args)} + + + + {/snippet} + diff --git a/web/src/lib/components/repo/issues/IssueForm.svelte b/web/src/lib/components/repo/issues/IssueForm.svelte new file mode 100644 index 00000000..3cf301b1 --- /dev/null +++ b/web/src/lib/components/repo/issues/IssueForm.svelte @@ -0,0 +1,125 @@ + + +
+
+ + +
+ +
+ Body + + +
+ + {#if error} + + {/if} + +
+ + +
+ diff --git a/web/src/lib/components/repo/types.ts b/web/src/lib/components/repo/types.ts index 142dc2eb..0c3d8622 100644 --- a/web/src/lib/components/repo/types.ts +++ b/web/src/lib/components/repo/types.ts @@ -38,3 +38,14 @@ export interface LanguageSlice { percentage: number; share: number; } + +export interface IssueSummary { + uri: string; + rkey: string; + title: string; + state: "open" | "closed"; + authorHandle: string; + authorDid: string; + createdAt: string; + commentCount: number; +} diff --git a/web/src/lib/components/testing/MockAuthProvider.svelte b/web/src/lib/components/testing/MockAuthProvider.svelte new file mode 100644 index 00000000..21a69a40 --- /dev/null +++ b/web/src/lib/components/testing/MockAuthProvider.svelte @@ -0,0 +1,30 @@ + + +{@render children()} diff --git a/web/src/lib/components/ui/MarkdownEditor.stories.svelte b/web/src/lib/components/ui/MarkdownEditor.stories.svelte new file mode 100644 index 00000000..122c2a3b --- /dev/null +++ b/web/src/lib/components/ui/MarkdownEditor.stories.svelte @@ -0,0 +1,23 @@ + + + + diff --git a/web/src/lib/components/ui/MarkdownEditor.svelte b/web/src/lib/components/ui/MarkdownEditor.svelte new file mode 100644 index 00000000..8b667208 --- /dev/null +++ b/web/src/lib/components/ui/MarkdownEditor.svelte @@ -0,0 +1,132 @@ + + +
+ + + + + + {#if tab === "write"} +