@xswap-link/sdk
Version:
JavaScript SDK for XSwap platform
135 lines (124 loc) • 3.65 kB
text/typescript
import {
ModalIntegrationStyles,
ModalIntegrationThemeStyles,
} from "@src/models";
function setCustomProperty(property: string, value: string) {
function applyStyleToHost(hostId: string) {
const host = document.getElementById(hostId);
if (host && host.shadowRoot) {
const sheet = new CSSStyleSheet();
sheet.replaceSync(`:host { ${property}: ${value}; }`);
host.shadowRoot.adoptedStyleSheets = [
...host.shadowRoot.adoptedStyleSheets,
sheet,
];
}
}
const hostIds = ["xpay-root", "xpay-tx-status", "xpay-widget"];
hostIds.forEach(applyStyleToHost);
}
const lightThemeStyles: ModalIntegrationThemeStyles = {
mainAccentLight: "#3681C6",
mainAccentDark: "#2B4A9D",
bgPrimary: "#FFFFFF",
bgSecondary: "#FFFFFF1a",
bgTertiary: "#020202",
textPrimary: "#020202",
textSecondary: "#3681C6",
textRed: "#C62828",
textOrange: "#FF6F00",
textGreen: "#2E7D32",
clickSecondary: "#3681C6",
clickTertiary: "#020202",
buttonPrText: "#ffffff",
buttonPrOffBg: "#0202024D",
buttonPrOffText: "#020202",
labelText: "#FFFFFF",
successDark: "#2E7D32",
successLight: "#4CAF50",
infoDark: "#3C3C3B",
infoLight: "#90A4AE",
warningDark: "#FF6F00",
warningLight: "#FFCA28",
errorDark: "#C62828",
errorLight: "#F44336",
chainlinkLogo: "#375BD2",
};
const darkThemeStyles: ModalIntegrationThemeStyles = {
mainAccentLight: "#3681C6",
mainAccentDark: "#2B4A9D",
bgPrimary: "#020202",
bgSecondary: "#0F0F0F",
bgTertiary: "#ffffff",
textPrimary: "#FFFFFF",
textSecondary: "#3681C6",
textRed: "#F44336",
textOrange: "#FFCA28",
textGreen: "#4CAF50",
clickSecondary: "#3681C6",
clickTertiary: "#FFFFFF",
buttonPrText: "#FFFFFF",
buttonPrOffBg: "#272727",
buttonPrOffText: "#90A4AE",
labelText: "#FFFFFF",
successDark: "#2E7D32",
successLight: "#4CAF50",
infoDark: "#3C3C3B",
infoLight: "#D1D3D4",
warningDark: "#FF6F00",
warningLight: "#FFCA28",
errorDark: "#C62828",
errorLight: "#F44336",
chainlinkLogo: "white",
};
const styleMap: ModalIntegrationThemeStyles & ModalIntegrationStyles = {
mainAccentLight: "--main-accent-light",
mainAccentDark: "--main-accent-dark",
bgPrimary: "--bg-primary",
bgSecondary: "--bg-secondary",
bgTertiary: "--bg-tertiary",
textPrimary: "--text-primary",
textSecondary: "--text-secondary",
textTertiary: "--text-tertiary",
textRed: "--text-red",
textOrange: "--text-orange",
textGreen: "--text-green",
clickPrimary: "--click-primary",
clickSecondary: "--click-secondary",
clickTertiary: "--click-tertiary",
buttonPrBg: "--button-pr-bg",
buttonPrText: "--button-pr-text",
buttonPrOffBg: "--button-pr-off-bg",
buttonPrOffText: "--button-pr-off-text",
labelBg: "--label-bg",
labelText: "--label-text",
successDark: "--success-dark",
successLight: "--success-light",
infoDark: "--info-dark",
infoLight: "--info-light",
warningDark: "--warning-dark",
warningLight: "--warning-light",
errorDark: "--error-dark",
errorLight: "--error-light",
width: "--modal-width",
chainlinkLogo: "--chainlink-logo",
fontFamily: "--font-family",
};
export function changeHostVariableColor(
isLightMode: boolean | undefined,
customStyles: ModalIntegrationStyles | undefined,
) {
const baseStyles: ModalIntegrationThemeStyles = isLightMode
? { ...lightThemeStyles }
: { ...darkThemeStyles };
const styles = {
...baseStyles,
...customStyles,
};
for (const [key, value] of Object.entries(styles)) {
const cssVariable = styleMap[key];
if (cssVariable) {
setCustomProperty(cssVariable, value);
}
}
}