From cd28085d11a42955a38865beece242de768e0306 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Mon, 22 Jun 2026 13:36:57 -0700 Subject: [PATCH] Add roles --- AGENTS.md | 3 + src/app.css | 4 +- src/app/components/ProfileDetail.svelte | 20 +- src/app/components/ReportMenu.svelte | 7 +- ...embersAdd.svelte => RoleAddMembers.svelte} | 43 ++-- src/app/components/RoleBadge.svelte | 17 ++ src/app/components/RoleCreate.svelte | 49 +++++ src/app/components/RoleEdit.svelte | 49 +++++ src/app/components/RoleForm.svelte | 86 ++++++++ src/app/components/RoleItem.svelte | 17 ++ src/app/components/SpaceBar.svelte | 2 +- src/app/components/SpaceDetail.svelte | 104 ---------- src/app/components/SpaceEdit.svelte | 2 +- src/app/components/SpaceInvite.svelte | 63 +++++- src/app/components/SpaceMemberRoles.svelte | 114 ++++++++++ src/app/components/SpaceMembers.svelte | 181 ---------------- src/app/components/SpaceMembersBanned.svelte | 3 + src/app/components/SpaceMenu.svelte | 40 ++-- src/app/components/SpaceProfileCard.svelte | 168 +++++++++++++++ src/app/components/SpaceRoles.svelte | 100 +++++++++ src/app/content.ts | 6 + src/app/members.ts | 167 +++++++++++++++ src/app/sync.ts | 5 +- src/routes/spaces/[relay]/about/+page.svelte | 96 +++++++++ .../spaces/[relay]/directory/+page.svelte | 194 ++++++++++++++++++ 25 files changed, 1183 insertions(+), 357 deletions(-) rename src/app/components/{SpaceMembersAdd.svelte => RoleAddMembers.svelte} (62%) create mode 100644 src/app/components/RoleBadge.svelte create mode 100644 src/app/components/RoleCreate.svelte create mode 100644 src/app/components/RoleEdit.svelte create mode 100644 src/app/components/RoleForm.svelte create mode 100644 src/app/components/RoleItem.svelte delete mode 100644 src/app/components/SpaceDetail.svelte create mode 100644 src/app/components/SpaceMemberRoles.svelte delete mode 100644 src/app/components/SpaceMembers.svelte create mode 100644 src/app/components/SpaceProfileCard.svelte create mode 100644 src/app/components/SpaceRoles.svelte create mode 100644 src/routes/spaces/[relay]/about/+page.svelte create mode 100644 src/routes/spaces/[relay]/directory/+page.svelte diff --git a/AGENTS.md b/AGENTS.md index 0939c90b..614fc69f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -170,6 +170,9 @@ src/ - Do not define svelte event handlers inline, instead name them and put them in the script section of templates - Avoid using `as`, except where necessary. Instead, annotate function parameters, and ensure upstream values are typed correctly. - Instead of `getTag(tagName, event.tags)?.[1] || ""`, use `getTagValue(tagName, event.tags)` +- Do not render a profile's `about` directly (e.g. `profile.about`); use the `ProfileInfo` component instead. +- Use `type Props` instead of interface when defining props for svelte components. +- When a component's value/prop shape mirrors a subset of an existing type, derive it with `Pick`/`Partial` and `export` that type from the component's ` - Add Members - to {displayRelayUrl(url)} + Add to {role.label || "Role"} + Assign members to this role {#snippet label()} @@ -64,7 +75,7 @@ Go back - diff --git a/src/app/components/RoleBadge.svelte b/src/app/components/RoleBadge.svelte new file mode 100644 index 00000000..b561de4a --- /dev/null +++ b/src/app/components/RoleBadge.svelte @@ -0,0 +1,17 @@ + + +
+ {role.label || "Untitled Role"} +
diff --git a/src/app/components/RoleCreate.svelte b/src/app/components/RoleCreate.svelte new file mode 100644 index 00000000..d4ac2472 --- /dev/null +++ b/src/app/components/RoleCreate.svelte @@ -0,0 +1,49 @@ + + + + + + Create Role + in + + + + diff --git a/src/app/components/RoleEdit.svelte b/src/app/components/RoleEdit.svelte new file mode 100644 index 00000000..d32b99a9 --- /dev/null +++ b/src/app/components/RoleEdit.svelte @@ -0,0 +1,49 @@ + + + + + + Edit Role + in + + + + diff --git a/src/app/components/RoleForm.svelte b/src/app/components/RoleForm.svelte new file mode 100644 index 00000000..061fc0d9 --- /dev/null +++ b/src/app/components/RoleForm.svelte @@ -0,0 +1,86 @@ + + + + +
+ + {#snippet label()} +

Name

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ + {#snippet label()} +

Description

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ + {#snippet label()} +

Color

+ {/snippet} + {#snippet input()} +
+
+
+ +
+ {/snippet} +
+
+ + + + diff --git a/src/app/components/RoleItem.svelte b/src/app/components/RoleItem.svelte new file mode 100644 index 00000000..208ecb88 --- /dev/null +++ b/src/app/components/RoleItem.svelte @@ -0,0 +1,17 @@ + + +
+ + {#if role.description} +

{role.description}

+ {/if} +
diff --git a/src/app/components/SpaceBar.svelte b/src/app/components/SpaceBar.svelte index b1db7245..1315bacf 100644 --- a/src/app/components/SpaceBar.svelte +++ b/src/app/components/SpaceBar.svelte @@ -33,7 +33,7 @@
-