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
+
+```
\ 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
+
+```
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
+
+```
\ No newline at end of file