feat: pinned topics UI with scope selector and visual indicators (#179)
* feat(types): add isPinned, isLocked, pinnedScope to Topic interface
* feat(api): add pinTopic, lockTopic, deleteTopicMod client functions
Add typed API client functions for moderation action endpoints so the
ModerationControls component can call pin, lock, and delete operations.
* feat(web): add pin icon and visual indicator to pinned TopicCard rows
* feat(web): add pinned/regular section separator to TopicList
* feat(web): wire moderation controls to API in topic detail
TopicDetailClient now derives isLocked from topic.isLocked and
determines moderator status from useAuth() role. Passes isModerator,
isPinned, isLocked, and onModerationAction to TopicView, which
renders ModerationControls with pin/lock/delete buttons.
handleModerationAction calls pinTopic, lockTopic, or deleteTopicMod
via the API client, then refreshes the page via router.refresh().
Removes the standalone isLocked prop from TopicDetailClientProps.
* feat(web): add pin scope selector (category/forum-wide) to moderation controls
Pin confirmation dialog now shows radio buttons for selecting pin scope.
Forum-wide option only visible to admins. ConfirmDialog extended with
children prop. TopicView and TopicDetailClient updated to pass isAdmin
and scope options through the action chain.
* feat(web): soft warning when 5+ topics pinned in category
authored by