From 7e0e5be14b6add5919f6e951ba41b1454ceb0c07 Mon Sep 17 00:00:00 2001 From: tdgao Date: Tue, 27 Oct 2026 19:20:49 -0600 Subject: [PATCH 1/4] feat: add more status badges and add user status badges in user page, tech rev cards and report cards --- .../src/components/CreatorStatusStats.vue | 28 +++++ .../src/components/ProjectStatusStats.vue | 115 ++++++++++++++---- .../stories/ProjectStatusStats.stories.ts | 76 ++++++++++++ .../ui/moderation/ModerationItemHeader.vue | 22 +++- .../ui/moderation/ModerationReportCard.vue | 10 ++ .../settings/ModerationSettings.vue | 22 +++- .../src/composables/creator-project-stats.ts | 53 +++++++- apps/frontend/src/pages/[type]/[project].vue | 11 +- apps/frontend/src/pages/settings.vue | 16 ++- .../src/pages/settings/moderation/index.vue | 9 +- .../pages/settings/moderation/keybinds.vue | 15 +++ apps/frontend/src/pages/user/[user].vue | 13 ++ packages/assets/generated-icons.ts | 4 + packages/assets/icons/user-lock.svg | 18 +++ packages/assets/icons/user-round-x.svg | 18 +++ packages/moderation/src/data/settings.ts | 8 ++ .../ui/src/components/user/UserPageHeader.vue | 3 +- .../layouts/shared/user-profile/layout.vue | 3 + 18 files changed, 401 insertions(+), 43 deletions(-) create mode 100644 apps/frontend/src/components/CreatorStatusStats.vue create mode 100644 apps/frontend/src/components/stories/ProjectStatusStats.stories.ts create mode 100644 apps/frontend/src/pages/settings/moderation/keybinds.vue create mode 100644 packages/assets/icons/user-lock.svg create mode 100644 packages/assets/icons/user-round-x.svg diff --git a/apps/frontend/src/components/CreatorStatusStats.vue b/apps/frontend/src/components/CreatorStatusStats.vue new file mode 100644 index 00000000000..31b949948a4 --- /dev/null +++ b/apps/frontend/src/components/CreatorStatusStats.vue @@ -0,0 +1,28 @@ + + + diff --git a/apps/frontend/src/components/ProjectStatusStats.vue b/apps/frontend/src/components/ProjectStatusStats.vue index a60e7b96c0e..2ec83a959e6 100644 --- a/apps/frontend/src/components/ProjectStatusStats.vue +++ b/apps/frontend/src/components/ProjectStatusStats.vue @@ -3,24 +3,42 @@ diff --git a/apps/frontend/src/components/stories/ProjectStatusStats.stories.ts b/apps/frontend/src/components/stories/ProjectStatusStats.stories.ts new file mode 100644 index 00000000000..e9b28b849b1 --- /dev/null +++ b/apps/frontend/src/components/stories/ProjectStatusStats.stories.ts @@ -0,0 +1,76 @@ +import type { Meta, StoryObj } from '@storybook/vue3-vite' + +import ProjectStatusStats from '../ProjectStatusStats.vue' + +const projectStats = [ + { status: 'tech_review_failed', count: 2 }, + { status: 'approved', count: 24 }, + { status: 'unlisted', count: 3 }, + { status: 'private', count: 4 }, + { status: 'withheld', count: 2 }, + { status: 'rejected', count: 5 }, + { status: 'draft', count: 6 }, + { status: 'processing', count: 1 }, + { status: 'archived', count: 7 }, + { status: 'scheduled', count: 1 }, + { status: 'unknown', count: 1 }, +] +const accountStats = [ + { status: 'shared_instances_banned', count: 1 }, + { + status: 'account_restricted', + count: 1, + details: ['Create new projects', 'Upload new versions', 'Repeated policy violations'], + }, + { + status: 'account_locked', + count: 1, + details: 'Account compromised; contact support to restore access.', + }, +] + +const meta = { + title: 'Website/Moderation/ProjectStatusStats', + component: ProjectStatusStats, + args: { + stats: [ + { status: 'approved', count: 12 }, + { status: 'rejected', count: 2 }, + ], + }, + parameters: { layout: 'centered' }, +} satisfies Meta + +export default meta +type Story = StoryObj + +export const Default: Story = {} + +export const AllBadges: StoryObj = { + render: () => ({ + components: { ProjectStatusStats }, + setup: () => ({ projectStats, accountStats }), + template: /* html */ ` +
+
+

Project statuses

+ +
+
+

Account restrictions

+ +
+
+

Combined

+ +
+

Hover or focus a badge to see its label and restriction details.

+
+ `, + }), +} + +export const Empty: Story = { args: { stats: [] } } +export const ZeroCounts: Story = { + args: { stats: [...projectStats, ...accountStats].map((stat) => ({ ...stat, count: 0 })) }, +} diff --git a/apps/frontend/src/components/ui/moderation/ModerationItemHeader.vue b/apps/frontend/src/components/ui/moderation/ModerationItemHeader.vue index 5666f690fbc..49f70e957ed 100644 --- a/apps/frontend/src/components/ui/moderation/ModerationItemHeader.vue +++ b/apps/frontend/src/components/ui/moderation/ModerationItemHeader.vue @@ -1,17 +1,22 @@