first commit
Some checks failed
Build / run (push) Has been cancelled

This commit is contained in:
maher
2025-10-29 11:42:25 +01:00
commit 703f50a09d
4595 changed files with 385164 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
import {FontFaceConfig} from './font-face-config';
import {FontConfig} from '@common/http/value-lists';
import lazyLoader from '@common/utils/http/lazy-loader';
function prefixId(id: string) {
return `be-fonts-${id}`;
}
export function loadFonts(
fonts: (FontFaceConfig | FontConfig)[],
options: {
prefixSrc?: (src?: string) => string;
id: string;
forceAssetLoad?: boolean;
document?: Document;
weights?: number[];
},
): Promise<FontFace[]> {
const doc = options.document || document;
const googleFonts: FontConfig[] = [];
const customFonts: FontFaceConfig[] = [];
let promises = [];
fonts.forEach(font => {
if ('google' in font && font.google) {
googleFonts.push(font);
} else if ('src' in font) {
customFonts.push(font);
}
// native fonts don't need to be loaded, they are already available in the browser
});
if (googleFonts?.length) {
const weights = options.weights || [400];
const families = fonts
.map(f => `${f.family}:${weights.join(',')}`)
.join('|');
const googlePromise = lazyLoader.loadAsset(
`https://fonts.googleapis.com/css?family=${families}&display=swap`,
{
type: 'css',
id: prefixId(options.id),
force: options.forceAssetLoad,
document: doc,
},
);
promises.push(googlePromise);
}
if (customFonts?.length) {
const customFontPromises = customFonts.map(async fontConfig => {
const loadedFont = Array.from(doc.fonts.values()).find(current => {
return current.family === fontConfig.family;
});
if (loadedFont) {
return loadedFont.loaded;
}
const fontFace = new FontFace(
fontConfig.family,
`url(${
options?.prefixSrc
? options.prefixSrc(fontConfig.src)
: fontConfig.src
})`,
fontConfig.descriptors,
);
doc.fonts.add(fontFace);
return fontFace.load();
});
promises = promises.concat(customFontPromises);
}
return Promise.all(promises);
}