import type { HTMLArgs, HTMLOptions } from "@sealcode/sealgen"; import { tempstreamAsync } from "tempstream"; import type { Readable } from "stream"; import { toKebabCase } from "js-convert-case"; import { DEFAULT_HTML_LANG } from "./config.js"; import { default_navbar } from "./routes/common/navbar.js"; import { defaultHead } from "./defaultHead.js"; const default_html_options: Partial = { showFooter: true, showBottomNavbar: true, loadHamburgerMenu: true, loadSearchModal: true, }; export default function html({ ctx, title, body, htmlOptions = {}, makeHead = defaultHead, metaImage, canonicalPath, css_clumps = [], description, hideNavigation = false, }: HTMLArgs): Readable { htmlOptions = { ...default_html_options, ...htmlOptions }; ctx.set( "content-type", htmlOptions.canHaveStreams && ctx.get("accept").includes("text/vnd.turbo-stream.html") ? "text/vnd.turbo-stream.html" : "text/html;charset=utf-8" ); const controllers: string[] = []; if (htmlOptions.autoRefreshCSS) { controllers.push("refresh-styles"); controllers.push("refresh-on-ts-changes"); } return tempstreamAsync /* HTML */ ` ${makeHead({ ctx, title: title, htmlOptions: { ...htmlOptions }, metaImage, canonicalPath, css_clumps, description, })} ${!hideNavigation ? (htmlOptions?.navbar || default_navbar)(ctx) : ""} ${body} `; }