diff --git a/packages/base/src/InitialConfiguration.ts b/packages/base/src/InitialConfiguration.ts index 93eac751df77..3347c75d2470 100644 --- a/packages/base/src/InitialConfiguration.ts +++ b/packages/base/src/InitialConfiguration.ts @@ -23,6 +23,7 @@ type InitialConfig = { noConflict: boolean, formatSettings: FormatSettings, fetchDefaultLanguage: boolean, + fetchDefaultThemingCSSVars: boolean, defaultFontLoading: boolean, enableDefaultTooltips: boolean, }; @@ -39,6 +40,7 @@ let initialConfig: InitialConfig = { noConflict: false, // no URL formatSettings: {}, fetchDefaultLanguage: false, + fetchDefaultThemingCSSVars: true, defaultFontLoading: true, enableDefaultTooltips: true, }; @@ -84,6 +86,16 @@ const getFetchDefaultLanguage = () => { return initialConfig.fetchDefaultLanguage; }; +/** + * Returns if the default language, that is inlined at build time, + * should be fetched over the network instead. + * @returns {Boolean} + */ +const getFetchDefaultThemingCSSVars = () => { + initConfiguration(); + return initialConfig.fetchDefaultThemingCSSVars; +}; + const getNoConflict = () => { initConfiguration(); return initialConfig.noConflict; @@ -257,4 +269,5 @@ export { getDefaultFontLoading, resetConfiguration, getEnableDefaultTooltips, + getFetchDefaultThemingCSSVars, }; diff --git a/packages/base/src/config/Theme.ts b/packages/base/src/config/Theme.ts index 4f5791796a05..bdb79748e3b0 100644 --- a/packages/base/src/config/Theme.ts +++ b/packages/base/src/config/Theme.ts @@ -1,4 +1,4 @@ -import { getTheme as getConfiguredTheme } from "../InitialConfiguration.js"; +import { getTheme as getConfiguredTheme, getFetchDefaultThemingCSSVars as getConfiguredFetchDefaultThemingCSSVars } from "../InitialConfiguration.js"; import { reRenderAllUI5Elements } from "../Render.js"; import applyTheme from "../theming/applyTheme.js"; import getThemeDesignerTheme from "../theming/getThemeDesignerTheme.js"; @@ -7,6 +7,7 @@ import { boot, isBooted } from "../Boot.js"; import { attachConfigurationReset } from "./ConfigurationReset.js"; let curTheme: string | undefined; +let fetchDefaultThemingCSSVars: boolean | undefined; attachConfigurationReset(() => { curTheme = undefined; @@ -91,6 +92,14 @@ const isLegacyThemeFamilyAsync = async () => { const isKnownTheme = (theme: string) => SUPPORTED_THEMES.includes(theme); +const getFetchDefaultThemingCSSVars = (): boolean => { + if (fetchDefaultThemingCSSVars === undefined) { + fetchDefaultThemingCSSVars = getConfiguredFetchDefaultThemingCSSVars(); + } + + return fetchDefaultThemingCSSVars; +}; + export { getTheme, setTheme, @@ -98,4 +107,5 @@ export { isLegacyThemeFamily, isLegacyThemeFamilyAsync, getDefaultTheme, + getFetchDefaultThemingCSSVars, }; diff --git a/packages/base/src/theming/applyTheme.ts b/packages/base/src/theming/applyTheme.ts index c8f7d729c156..1bc6f4903f44 100644 --- a/packages/base/src/theming/applyTheme.ts +++ b/packages/base/src/theming/applyTheme.ts @@ -7,6 +7,7 @@ import { attachCustomThemeStylesToHead, getThemeRoot } from "../config/ThemeRoot import type OpenUI5Support from "../features/OpenUI5Support.js"; import { DEFAULT_THEME } from "../generated/AssetParameters.js"; import { getCurrentRuntimeIndex } from "../Runtimes.js"; +import { getFetchDefaultThemingCSSVars } from "../config/Theme.js"; // eslint-disable-next-line export let _lib = "ui5"; @@ -21,6 +22,11 @@ const isThemeBaseRegistered = () => { }; const loadThemeBase = async (theme: string) => { + // If getFetchDefaultThemingCSSVars is false, do not load theme CSS properties from theming package. + if (!getFetchDefaultThemingCSSVars()) { + return; + } + if (!isThemeBaseRegistered()) { return; } diff --git a/packages/tools/lib/css-processors/shared.mjs b/packages/tools/lib/css-processors/shared.mjs index 0cda3c30d4c1..f4044bd0ebd0 100644 --- a/packages/tools/lib/css-processors/shared.mjs +++ b/packages/tools/lib/css-processors/shared.mjs @@ -18,7 +18,7 @@ const writeFileIfChanged = async (fileName, content) => { const oldContent = await readOldContent(fileName); if (content !== oldContent) { if (!oldContent) { - await mkdir(path.dirname(fileName), {recursive: true}); + await mkdir(path.dirname(fileName), { recursive: true }); } return writeFile(fileName, content); } @@ -27,20 +27,26 @@ const writeFileIfChanged = async (fileName, content) => { const DEFAULT_THEME = assets.themes.default; const getDefaultThemeCode = packageName => { - return `import { registerThemePropertiesLoader } from "@ui5/webcomponents-base/dist/asset-registries/Themes.js"; + return `import { registerThemePropertiesLoader } from "@ui5/webcomponents-base/dist/asset-registries/Themes.js"; +import { getFetchDefaultThemingCSSVars } from "@ui5/webcomponents-base/dist/config/Theme.js"; -import defaultThemeBase from "@ui5/webcomponents-theming/dist/generated/themes/${DEFAULT_THEME}/parameters-bundle.css.js"; import defaultTheme from "./${DEFAULT_THEME}/parameters-bundle.css.js"; -registerThemePropertiesLoader("@" + "ui5" + "/" + "webcomponents-theming", "${DEFAULT_THEME}", async () => defaultThemeBase); -registerThemePropertiesLoader(${ packageName.split("").map(c => `"${c}"`).join (" + ") }, "${DEFAULT_THEME}", async () => defaultTheme); +// If getFetchDefaultThemingCSSVars is false, do not load theme CSS properties from theming package. +if (!getFetchDefaultThemingCSSVars()) { + const defaultThemeBase = (await import("@ui5/webcomponents-theming/dist/generated/themes/${DEFAULT_THEME}/parameters-bundle.css.js")).default; + + registerThemePropertiesLoader("@" + "ui5" + "/" + "webcomponents-theming", "${DEFAULT_THEME}", async () => defaultThemeBase); +} + +registerThemePropertiesLoader(${packageName.split("").map(c => `"${c}"`).join(" + ")}, "${DEFAULT_THEME}", async () => defaultTheme); `; }; const getFileContent = (packageName, css, includeDefaultTheme) => { - const defaultTheme = includeDefaultTheme ? getDefaultThemeCode(packageName) : ""; - return `${defaultTheme}export default ${css.trim()}` + const defaultTheme = includeDefaultTheme ? getDefaultThemeCode(packageName) : ""; + return `${defaultTheme}export default ${css.trim()}` } -export { writeFileIfChanged, getFileContent} \ No newline at end of file +export { writeFileIfChanged, getFileContent } \ No newline at end of file