From df075630fb5b5cf5e9605252474c829f45656283 Mon Sep 17 00:00:00 2001 From: Maurice Date: Thu, 16 Apr 2026 22:25:03 +0200 Subject: [PATCH] feat(system-notices): add personal thank-you notice for v3.0.0 Personal note from the creator shown as the first page in the 3.0 upgrade modal. Includes community links (Discord, Ko-fi) and a special shout-out to jubnl. Modal UX improved: users must click through all pages before dismissing, wider layout, enhanced markdown rendering with styled links, signature, and HR separator. i18n coverage across all 15 languages. --- .../SystemNotices/SystemNoticeModal.tsx | 95 ++++++++++++++----- client/src/i18n/translations/ar.ts | 4 + client/src/i18n/translations/br.ts | 4 + client/src/i18n/translations/cs.ts | 4 + client/src/i18n/translations/de.ts | 4 + client/src/i18n/translations/en.ts | 4 + client/src/i18n/translations/es.ts | 4 + client/src/i18n/translations/fr.ts | 4 + client/src/i18n/translations/hu.ts | 4 + client/src/i18n/translations/id.ts | 4 + client/src/i18n/translations/it.ts | 4 + client/src/i18n/translations/nl.ts | 4 + client/src/i18n/translations/pl.ts | 4 + client/src/i18n/translations/ru.ts | 4 + client/src/i18n/translations/zh.ts | 4 + client/src/i18n/translations/zhTw.ts | 4 + server/src/systemNotices/registry.ts | 14 +++ 17 files changed, 144 insertions(+), 25 deletions(-) diff --git a/client/src/components/SystemNotices/SystemNoticeModal.tsx b/client/src/components/SystemNotices/SystemNoticeModal.tsx index 10d0a13f..e010bc24 100644 --- a/client/src/components/SystemNotices/SystemNoticeModal.tsx +++ b/client/src/components/SystemNotices/SystemNoticeModal.tsx @@ -62,6 +62,7 @@ interface ContentProps { function NoticeContent({ notice, title, body, ctaLabel, titleId, bodyId, isDark, onDismiss, onDismissAll, onCTA, total, currentPage, canPage, onPrev, onNext, onGoto }: ContentProps) { const { t } = useTranslation(); + const isLastPage = total <= 1 || currentPage === total - 1; const DefaultIcon = SEVERITY_ICONS[notice.severity] ?? Info; const LucideIcon: React.ElementType = notice.icon @@ -70,8 +71,8 @@ function NoticeContent({ notice, title, body, ctaLabel, titleId, bodyId, isDark, return (
- {/* Dismiss X button */} - {notice.dismissible && ( + {/* Dismiss X button — only on last page so users read all notices */} + {notice.dismissible && isLastPage && ( + ) : ctaLabel ? (