@@ -222,6 +222,43 @@ const brandColorBundle = (
222222 return colorBundle ;
223223} ;
224224
225+ const brandBootstrapBundle = (
226+ brand : Brand ,
227+ key : string
228+ ) : SassBundleLayers | void => {
229+ const brandBootstrap = ( brand ?. data ?. defaults ?. bootstrap as unknown as Record <
230+ string ,
231+ Record < string , string | boolean | number | null >
232+ > ) ;
233+
234+ const bsVariables : string [ ] = [
235+ "/* Bootstrap variables from _brand.yml */" ,
236+ '// quarto-scss-analysis-annotation { "action": "push", "origin": "_brand.yml defaults.bootstrap" }' ,
237+ ] ;
238+ for ( const bsVar of Object . keys ( brandBootstrap ) ) {
239+ if ( bsVar === "version" ) {
240+ continue ;
241+ }
242+ bsVariables . push (
243+ `$${ bsVar } : ${ brandBootstrap [ bsVar ] } !default;` ,
244+ ) ;
245+ }
246+ // const colorEntries = Object.keys(brand.color);
247+ bsVariables . push ( '// quarto-scss-analysis-annotation { "action": "pop" }' ) ;
248+ const bsBundle : SassBundleLayers = {
249+ key,
250+ // dependency: "bootstrap",
251+ quarto : {
252+ defaults : bsVariables . join ( "\n" ) ,
253+ uses : "" ,
254+ functions : "" ,
255+ mixins : "" ,
256+ rules : "" ,
257+ } ,
258+ } ;
259+ return bsBundle ;
260+ } ;
261+
225262const brandTypographyBundle = (
226263 brand : Brand ,
227264 key : string ,
@@ -446,7 +483,7 @@ const brandTypographyBundle = (
446483 return typographyBundle ;
447484} ;
448485
449- export async function brandBootstrapSassBundleLayers (
486+ export async function brandSassBundleLayers (
450487 fileName : string | undefined ,
451488 project : ProjectContext ,
452489 key : string ,
@@ -466,12 +503,33 @@ export async function brandBootstrapSassBundleLayers(
466503 return sassBundles ;
467504}
468505
506+ export async function brandBootstrapSassBundleLayers (
507+ fileName : string | undefined ,
508+ project : ProjectContext ,
509+ key : string ,
510+ nameMap : Record < string , string > = { } ,
511+ ) : Promise < SassBundleLayers [ ] > {
512+ const brand = await project . resolveBrand ( fileName ) ;
513+ const sassBundles = await brandSassBundleLayers ( fileName , project , key , nameMap ) ;
514+
515+ if ( brand ?. data ?. defaults ?. bootstrap ) {
516+ const bsBundle = brandBootstrapBundle ( brand , key ) ;
517+ if ( bsBundle ) {
518+ // Add bsBundle to the beginning of the array so that defaults appear
519+ // *after* the rest of the brand variables.
520+ sassBundles . unshift ( bsBundle ) ;
521+ }
522+ }
523+
524+ return sassBundles ;
525+ }
526+
469527export async function brandRevealSassBundleLayers (
470528 input : string | undefined ,
471529 _format : Format ,
472530 project : ProjectContext ,
473531) : Promise < SassBundleLayers [ ] > {
474- return brandBootstrapSassBundleLayers (
532+ return brandSassBundleLayers (
475533 input ,
476534 project ,
477535 "reveal-theme" ,
0 commit comments