diff --git a/web/src/components/feedback/FeedbackDialogs.tsx b/web/src/components/feedback/FeedbackDialogs.tsx
index d8af646c03..3eb3f7715e 100644
--- a/web/src/components/feedback/FeedbackDialogs.tsx
+++ b/web/src/components/feedback/FeedbackDialogs.tsx
@@ -7,6 +7,7 @@ import { useTranslation } from 'react-i18next'
import { LazyMarkdown as ReactMarkdown } from '../ui/LazyMarkdown'
import remarkGfm from 'remark-gfm'
import remarkBreaks from 'remark-breaks'
+import rehypeSanitize from 'rehype-sanitize'
import { useRef, useEffect } from 'react'
import { sanitizeUrl } from '@/lib/utils/sanitizeUrl'
@@ -274,7 +275,10 @@ export function FullscreenPreview({ description, onClose }: FullscreenPreviewPro
-
+
{description}
diff --git a/web/src/components/feedback/SubmitTab.tsx b/web/src/components/feedback/SubmitTab.tsx
index 21a4e97cee..f6b5c5c86e 100644
--- a/web/src/components/feedback/SubmitTab.tsx
+++ b/web/src/components/feedback/SubmitTab.tsx
@@ -23,6 +23,7 @@ import { LazyMarkdown as ReactMarkdown } from '../ui/LazyMarkdown'
import { useGlobalFilters } from '../../hooks/useGlobalFilters'
import remarkGfm from 'remark-gfm'
import remarkBreaks from 'remark-breaks'
+import rehypeSanitize from 'rehype-sanitize'
import { REWARD_ACTIONS } from '../../types/rewards'
import { useLocalAgent } from '../../hooks/useLocalAgent'
import type { CreateFeatureRequestInput } from '../../hooks/useFeatureRequests'
@@ -647,7 +648,7 @@ export function SubmitForm({
)}
>
{description.trim() ? (
-
+
{description}
) : (
diff --git a/web/src/components/stellar/MessageBubble.tsx b/web/src/components/stellar/MessageBubble.tsx
index 2b26e62708..efad9549b4 100644
--- a/web/src/components/stellar/MessageBubble.tsx
+++ b/web/src/components/stellar/MessageBubble.tsx
@@ -1,4 +1,6 @@
import { lazy, Suspense } from 'react'
+import rehypeSanitize from 'rehype-sanitize'
+import remarkGfm from 'remark-gfm'
const ReactMarkdown = lazy(() => import('react-markdown'))
@@ -36,7 +38,12 @@ export function MessageBubble({ msg }: { msg: Msg }) {
) : (
{msg.content}
}>
- {msg.content}
+
+ {msg.content}
+
)}
diff --git a/web/src/components/updates/WhatsNewModal.tsx b/web/src/components/updates/WhatsNewModal.tsx
index 2776c9019a..2c0ebcade5 100644
--- a/web/src/components/updates/WhatsNewModal.tsx
+++ b/web/src/components/updates/WhatsNewModal.tsx
@@ -5,6 +5,7 @@ import { Download, Clock, SkipForward, ChevronDown, Copy, Check, Loader2 } from
import { LazyMarkdown as ReactMarkdown } from '../ui/LazyMarkdown'
import remarkGfm from 'remark-gfm'
import remarkBreaks from 'remark-breaks'
+import rehypeSanitize from 'rehype-sanitize'
import { BaseModal } from '../../lib/modals'
import { MS_PER_HOUR, MS_PER_DAY } from '../../lib/constants/time'
import { useVersionCheck } from '../../hooks/useVersionCheck'
@@ -238,6 +239,7 @@ export function WhatsNewModal({ isOpen, onClose }: WhatsNewModalProps) {
{latestRelease?.releaseNotes ?? ''}
@@ -277,7 +279,7 @@ export function WhatsNewModal({ isOpen, onClose }: WhatsNewModalProps) {
) : (
-
+
{'*No release notes available. Pull the latest commits to update.*'}
@@ -308,7 +310,7 @@ export function WhatsNewModal({ isOpen, onClose }: WhatsNewModalProps) {
{expandedRelease === release.tag && release.releaseNotes && (
-
+
{release.releaseNotes}