diff --git a/src/command/render/pandoc-html.ts b/src/command/render/pandoc-html.ts index 86ade028ae..75b0eedc1e 100644 --- a/src/command/render/pandoc-html.ts +++ b/src/command/render/pandoc-html.ts @@ -123,12 +123,12 @@ export async function resolveSassBundles( } return bundle as SassBundle; }); - if (!foundBrand.light || !foundBrand.dark) { + if (maybeBrandBundle && (!foundBrand.light || !foundBrand.dark)) { bundles.unshift({ dependency, key: "brand", - user: !foundBrand.light && maybeBrandBundle?.user as SassLayer[] || [], - dark: !foundBrand.dark && maybeBrandBundle?.dark?.user && { + user: !foundBrand.light && maybeBrandBundle.user as SassLayer[] || [], + dark: !foundBrand.dark && maybeBrandBundle.dark?.user && { user: maybeBrandBundle.dark.user as SassLayer[], default: maybeBrandBundle.dark.default, } || undefined, diff --git a/src/core/sass/brand.ts b/src/core/sass/brand.ts index 2cd027b518..93c1a2effa 100644 --- a/src/core/sass/brand.ts +++ b/src/core/sass/brand.ts @@ -582,14 +582,16 @@ export async function brandSassLayers( dark: [] }; - for (const layer of [sassLayers.light, sassLayers.dark]) { - layer.push({ - defaults: '$theme: "brand" !default;', - uses: "", - functions: "", - mixins: "", - rules: "", - }); + for (const mode of ["light", "dark"] as Array<"dark" | "light">) { + if (brand && brand[mode]) { + sassLayers[mode].push({ + defaults: '$theme: "brand" !default;', + uses: "", + functions: "", + mixins: "", + rules: "", + }); + } } if (brand?.light?.data.color) { sassLayers.light.push(brandColorLayer(brand?.light, nameMap)); @@ -658,10 +660,10 @@ export async function brandSassFormatExtras( key: "brand", dependency: "bootstrap", user: htmlSassBundleLayers.light, - dark: { + dark: htmlSassBundleLayers.dark.length ? { user: htmlSassBundleLayers.dark, default: darkModeDefault(format.metadata) - } + } : undefined }, ], }, diff --git a/src/project/project-shared.ts b/src/project/project-shared.ts index a8dd1f4300..bef495a34d 100644 --- a/src/project/project-shared.ts +++ b/src/project/project-shared.ts @@ -602,18 +602,18 @@ export async function projectResolveBrand( let light, dark; if (typeof brand.light === "string") { light = await loadRelativeBrand(brand.light); - } else { + } else if (brand.light) { light = new Brand( - brand.light!, + brand.light, dirname(fileName), project.dir, ); } if (typeof brand.dark === "string") { dark = await loadRelativeBrand(brand.dark); - } else { + } else if(brand.dark) { dark = new Brand( - brand.dark!, + brand.dark, dirname(fileName), project.dir, ); diff --git a/tests/docs/smoke-all/dark-mode/light-brand.qmd b/tests/docs/smoke-all/dark-mode/light-brand.qmd new file mode 100644 index 0000000000..54f3a18261 --- /dev/null +++ b/tests/docs/smoke-all/dark-mode/light-brand.qmd @@ -0,0 +1,17 @@ +--- +format: html +brand: + light: united-brand.yml +_quarto: + tests: + html: + ensureHtmlElements: + - [] + - ["link[href*=\"-dark-\"]"] +--- + +## Hello + +```markdown +![asdf](asd.png) +``` \ No newline at end of file diff --git a/tests/docs/smoke-all/dark-mode/light-theme.qmd b/tests/docs/smoke-all/dark-mode/light-theme.qmd new file mode 100644 index 0000000000..3c40b9a36d --- /dev/null +++ b/tests/docs/smoke-all/dark-mode/light-theme.qmd @@ -0,0 +1,17 @@ +--- +format: html +theme: + light: united +_quarto: + tests: + html: + ensureHtmlElements: + - [] + - ["link[href*=\"-dark-\"]"] +--- + +## Hello + +```markdown +![asdf](asd.png) +``` diff --git a/tests/docs/smoke-all/dark-mode/no-brand.qmd b/tests/docs/smoke-all/dark-mode/no-brand.qmd new file mode 100644 index 0000000000..1c56313dce --- /dev/null +++ b/tests/docs/smoke-all/dark-mode/no-brand.qmd @@ -0,0 +1,15 @@ +--- +format: html +_quarto: + tests: + html: + ensureHtmlElements: + - [] + - ["link[href*=\"-dark-\"]"] +--- + +## Hello + +```markdown +![asdf](asd.png) +``` \ No newline at end of file