diff --git a/web/default/src/components/html-content.tsx b/web/default/src/components/html-content.tsx
index e31bf820..c9f9f294 100644
--- a/web/default/src/components/html-content.tsx
+++ b/web/default/src/components/html-content.tsx
@@ -134,6 +134,11 @@ function sanitizeHtmlContent(
return DOMPurify.sanitize(content)
}
+function syncDarkClass(wrapper: HTMLElement): void {
+ const isDark = document.documentElement.classList.contains('dark')
+ wrapper.classList.toggle('dark', isDark)
+}
+
function IsolatedHtmlContent(props: {
className?: string
html: string
@@ -153,13 +158,27 @@ function IsolatedHtmlContent(props: {
'style, link[rel="stylesheet"]'
),
].map((node) => node.cloneNode(true))
+
+ const wrapper = document.createElement('div')
+ syncDarkClass(wrapper)
+ wrapper.innerHTML = props.html
+
const contentTemplate = document.createElement('template')
- contentTemplate.innerHTML = `${isolatedContentBaseStyles}${props.html}`
+ contentTemplate.innerHTML = isolatedContentBaseStyles
shadowRoot.replaceChildren(
...applicationStyleNodes,
- contentTemplate.content
+ contentTemplate.content,
+ wrapper
)
+
+ const observer = new MutationObserver(() => syncDarkClass(wrapper))
+ observer.observe(document.documentElement, {
+ attributes: true,
+ attributeFilter: ['class'],
+ })
+
+ return () => observer.disconnect()
}, [props.html])
return (