/**
* `@nifrajs/web-react/content` - render pre-rendered HTML (e.g. a `@nifrajs/content` collection entry's
* `.html`, or any Markdown→HTML string) into the DOM via `dangerouslySetInnerHTML`. Pairs with content
* collections: ``.
*
* Security: this injects raw HTML, so the `html` MUST be trusted (your own Markdown/content, rendered
* at build/server time) - never pass user-supplied HTML without sanitizing it first.
*/
import {
type ComponentPropsWithoutRef,
createElement,
type ElementType,
type ReactElement,
} from "react"
export interface ContentProps
extends Omit, "dangerouslySetInnerHTML" | "children"> {
/** Trusted, pre-rendered HTML (e.g. `entry.html`). */
readonly html: string
/** Wrapper element (default `"div"`). */
readonly as?: ElementType
}
/** Render trusted HTML into a wrapper element. Extra props (`className`, `id`, `style`, …) pass through. */
export function Content({ html, as, ...rest }: ContentProps): ReactElement {
return createElement(as ?? "div", { ...rest, dangerouslySetInnerHTML: { __html: html } })
}