diff --git a/web/src/lib/components/organization/MemberPicker.stories.svelte b/web/src/lib/components/organization/MemberPicker.stories.svelte
new file mode 100644
index 000000000..59c6ab47b
--- /dev/null
+++ b/web/src/lib/components/organization/MemberPicker.stories.svelte
@@ -0,0 +1,109 @@
+
+
+ {
+ const list = within(canvas.getByRole("list"));
+ const boxes = list.getAllByRole("checkbox");
+ await userEvent.click(list.getByText("oppi.tld"));
+ await expect(boxes[0]).toBeChecked();
+ await userEvent.keyboard("{Shift>}");
+ await userEvent.click(list.getByText("akshay.tld"));
+ await userEvent.keyboard("{/Shift}");
+ for (const box of boxes.slice(0, 3)) await expect(box).toBeChecked();
+ await expect(boxes[3]).not.toBeChecked();
+ await userEvent.keyboard("{Control>}");
+ await userEvent.click(list.getByText("icyphox.sh"));
+ await userEvent.keyboard("{/Control}");
+ await expect(boxes[0]).toBeChecked();
+ await expect(boxes[1]).not.toBeChecked();
+ await expect(boxes[2]).toBeChecked();
+ await userEvent.keyboard("{Meta>}");
+ await userEvent.click(list.getByText("natalie.tld"));
+ await userEvent.keyboard("{/Meta}");
+ await expect(boxes[0]).toBeChecked();
+ await expect(boxes[2]).toBeChecked();
+ await expect(boxes[3]).toBeChecked();
+ await userEvent.click(list.getByText("akshay.tld"));
+ await expect(boxes[0]).not.toBeChecked();
+ await expect(boxes[1]).not.toBeChecked();
+ await expect(boxes[2]).toBeChecked();
+ await expect(boxes[3]).not.toBeChecked();
+ }}
+/>
+
+ {
+ const boxes = canvas.getAllByRole("checkbox");
+ await userEvent.click(boxes[0]);
+ await userEvent.click(boxes[0]);
+ await expect(boxes[0]).toBeChecked();
+ await userEvent.keyboard("{Shift>}");
+ await userEvent.click(boxes[2]);
+ await userEvent.keyboard("{/Shift}");
+ for (const box of boxes.slice(0, 3)) await expect(box).toBeChecked();
+ await userEvent.keyboard("{Control>}");
+ await userEvent.click(boxes[1]);
+ await expect(boxes[1]).not.toBeChecked();
+ await userEvent.click(boxes[1]);
+ await expect(boxes[1]).toBeChecked();
+ await userEvent.keyboard("{/Control}");
+ await userEvent.tab();
+ await expect(boxes[2]).toHaveFocus();
+ await userEvent.keyboard(" ");
+ await expect(boxes[0]).not.toBeChecked();
+ await expect(boxes[1]).not.toBeChecked();
+ await expect(boxes[2]).toBeChecked();
+ await userEvent.keyboard("{Control>} {/Control}");
+ await expect(boxes[2]).not.toBeChecked();
+ await userEvent.keyboard(" ");
+ await expect(boxes[2]).toBeChecked();
+ }}
+/>
+
+ {
+ const list = within(canvas.getByRole("list"));
+ const search = canvas.getByRole("searchbox");
+ await userEvent.click(list.getByText("akshay.tld"));
+ await userEvent.type(search, ".tld");
+ await expect(list.getByRole("checkbox", { name: "akshay.tld" })).toBeChecked();
+ await userEvent.keyboard("{Shift>}");
+ await userEvent.click(list.getByText("oppi.tld"));
+ await userEvent.keyboard("{/Shift}");
+ await expect(list.getByRole("checkbox", { name: "oppi.tld" })).toBeChecked();
+ await expect(list.getByRole("checkbox", { name: "akshay.tld" })).toBeChecked();
+ await expect(list.getByRole("checkbox", { name: "natalie.tld" })).not.toBeChecked();
+ await userEvent.clear(search);
+ await expect(list.getByRole("checkbox", { name: "icyphox.sh" })).not.toBeChecked();
+ await userEvent.type(search, "icyphox");
+ await userEvent.keyboard("{Shift>}");
+ await userEvent.click(list.getByText("icyphox.sh"));
+ await userEvent.keyboard("{/Shift}");
+ await expect(list.getByRole("checkbox", { name: "icyphox.sh" })).toBeChecked();
+ await expect(canvas.getByRole("button", { name: "Invite (3) members" })).toBeVisible();
+ await userEvent.clear(search);
+ await userEvent.keyboard("{Shift>}");
+ await userEvent.click(list.getByText("akshay.tld"));
+ await userEvent.keyboard("{/Shift}");
+ await expect(list.getByRole("checkbox", { name: "oppi.tld" })).not.toBeChecked();
+ await expect(list.getByRole("checkbox", { name: "icyphox.sh" })).toBeChecked();
+ await expect(list.getByRole("checkbox", { name: "akshay.tld" })).toBeChecked();
+ await expect(list.getByRole("checkbox", { name: "natalie.tld" })).not.toBeChecked();
+ await userEvent.click(canvas.getByRole("button", { name: "Invite (2) members" }));
+ await expect(args.onInvite).toHaveBeenCalledExactlyOnceWith(memberCandidates.slice(1, 3));
+ }}
+/>
diff --git a/web/src/lib/components/organization/MemberPicker.svelte b/web/src/lib/components/organization/MemberPicker.svelte
index 62a528fff..b64a11e38 100644
--- a/web/src/lib/components/organization/MemberPicker.svelte
+++ b/web/src/lib/components/organization/MemberPicker.svelte
@@ -1,4 +1,5 @@