feat(admin): standardize Safety pages (LC-510, PR3) #479

Merged
longjacksonle merged 3 commits from feat/LC-510-admin-safety-tables into main 2026-06-28 05:40:44 +02:00

PR3 of the Admin panel redesign (LC-510). Standardizes the Safety pages on the shell (PR1, #477) and the shared .lc-table (PR2, #478).

  • Quarantine / Mod log / Link filter list pages -> card-wrapped .lc-table with row hover and shared empty states (replacing the ad-hoc colspan "empty" rows). Per-page <h1> removed (the shell renders the title).
  • Anti-spam -> standardized cards: the rate-limit field uses .input; the link-filter and honeypot checkboxes become .lc-toggle switches; the save returns the shared SettingsFeedback (inline status + toast) on the htmx path, with the no-JS ?saved redirect fallback.
  • Link filter add-rule form -> a card with .lc-set-field inputs and a .btn-primary; the error banner uses the standard danger-callout.
  • Reports -> report cards use .card; Resolve/Dismiss use .btn (primary/secondary); the empty queue uses the shared empty-state. The live OOB region id (#admin-reports-list) and the nav badge are unchanged.

Destructive confirmations

Quarantine reject and link-filter delete are plain-POST forms, so they get a native onsubmit confirm (the established pattern for non-htmx forms) plus the danger-outline button. (Report resolve/dismiss are low-stakes and reversible, so no confirm - matching the "ban/delete/quarantine" destructive set.)

i18n

New keys (en+es): admin-quarantine-reject-confirm, admin-linkfilter-delete-confirm, admin-modlog-empty.

Checks

just check, just test, just test-saas (incl. en/es i18n parity), just build-css all pass.

Next (LC-510)

PR4: Integrations (Commands, Bots, Webhooks, Bridges) + Branding/Backup - the last batch.

PR3 of the Admin panel redesign (LC-510). Standardizes the Safety pages on the shell (PR1, #477) and the shared `.lc-table` (PR2, #478). ## Scope: Quarantine, Mod log, Anti-spam, Link filter, Reports - **Quarantine / Mod log / Link filter** list pages -> card-wrapped `.lc-table` with row hover and shared empty states (replacing the ad-hoc colspan "empty" rows). Per-page `<h1>` removed (the shell renders the title). - **Anti-spam** -> standardized cards: the rate-limit field uses `.input`; the link-filter and honeypot checkboxes become `.lc-toggle` switches; the save returns the shared `SettingsFeedback` (inline status + toast) on the htmx path, with the no-JS `?saved` redirect fallback. - **Link filter** add-rule form -> a card with `.lc-set-field` inputs and a `.btn-primary`; the error banner uses the standard danger-callout. - **Reports** -> report cards use `.card`; Resolve/Dismiss use `.btn` (primary/secondary); the empty queue uses the shared empty-state. The live OOB region id (`#admin-reports-list`) and the nav badge are unchanged. ## Destructive confirmations Quarantine **reject** and link-filter **delete** are plain-POST forms, so they get a native `onsubmit confirm` (the established pattern for non-htmx forms) plus the danger-outline button. (Report resolve/dismiss are low-stakes and reversible, so no confirm - matching the "ban/delete/quarantine" destructive set.) ## i18n New keys (en+es): `admin-quarantine-reject-confirm`, `admin-linkfilter-delete-confirm`, `admin-modlog-empty`. ## Checks `just check`, `just test`, `just test-saas` (incl. en/es i18n parity), `just build-css` all pass. ## Next (LC-510) PR4: Integrations (Commands, Bots, Webhooks, Bridges) + Branding/Backup - the last batch.
Dual-mode like the Settings page: htmx gets the shared inline status + toast,
no-JS keeps the redirect-with-?saved fallback.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Card-wrapped .lc-table lists with row hover + shared empty states; drop per-page
<h1> (shell renders it); anti-spam becomes cards with .lc-toggle switches + save
feedback; link-filter add-rule + report cards use .card and .btn actions.
Destructive actions confirmed + danger-styled: quarantine reject and link-filter
delete (native confirm on the plain-POST forms).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
i18n(admin): reject/delete confirmations + mod-log empty state (LC-510) (en+es)
All checks were successful
check-secrets / TruffleHog (push) Successful in 5s
check-secrets / Nosey parker (push) Successful in 3s
check-secrets / Kingfisher (push) Successful in 6s
check-secrets / Nosey parker (pull_request) Successful in 4s
check-secrets / Kingfisher (pull_request) Successful in 5s
check-secrets / TruffleHog (pull_request) Successful in 7s
Check / clippy + fmt + tests (pull_request) Successful in 3m1s
Create release / Create release from merged PR (pull_request) Has been skipped
a86b83b31b
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
longjacksonle scheduled this pull request to auto merge when all checks succeed 2026-06-28 05:39:26 +02:00
longjacksonle deleted branch feat/LC-510-admin-safety-tables 2026-06-28 05:40:44 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/lets-chat!479
No description provided.