UNPKG

@descope/sdk-mixins

Version:
78 lines (75 loc) 2.89 kB
import { UI_COMPONENTS_URL_KEY } from '../descopeUiMixin/constants.js'; const isSafeCssVarSegment = (segment) => /^[a-zA-Z0-9-]+$/.test(segment); const serializeOverrideCssValue = (value) => { if (typeof value === 'number') { return Number.isFinite(value) ? String(value) : null; } if (typeof value !== 'string') return null; if (/[;{}]/.test(value)) return null; return value.trim(); }; const flattenToVars = (obj, onError, prefix = '') => Object.entries(obj).reduce((css, [key, value]) => { if (!isSafeCssVarSegment(key)) { onError('Ignoring invalid override-css token path segment'); return css; } const path = prefix ? `${prefix}-${key}` : key; if (typeof value === 'object' && value !== null) { return css + flattenToVars(value, onError, path); } const serializedValue = serializeOverrideCssValue(value); if (serializedValue === null) { onError('Ignoring invalid override-css token value'); return css; } return `${css}--descope-${path}:${serializedValue};`; }, ''); const loadFont = (url) => { const font = document.createElement('link'); font.href = url; font.rel = 'stylesheet'; document.head.appendChild(font); }; const loadDevTheme = async () => { const componentsUrl = localStorage.getItem(UI_COMPONENTS_URL_KEY); const descopeDevUrl = componentsUrl === null || componentsUrl === void 0 ? void 0 : componentsUrl.replace(/[^\/]+$/, 'DescopeDev.js'); // eslint-disable-next-line no-console console.warn('Trying to load DescopeDev.js from', descopeDevUrl); const scriptEle = document.createElement('script'); scriptEle.src = descopeDevUrl; document.body.appendChild(scriptEle); await new Promise((resolve, reject) => { scriptEle.onload = resolve; scriptEle.onerror = reject; }); if (globalThis.DescopeDev) { const { themeToStyle, defaultTheme, darkTheme } = globalThis.DescopeDev; return { light: themeToStyle(defaultTheme), dark: themeToStyle(darkTheme), }; } }; function deepMergeNonEmpty(base, override) { const merged = Object.assign({}, base); for (const [key, value] of Object.entries(override || {})) { if (value === null || value === undefined) continue; if (typeof value === 'object') { if (Object.keys(value).length === 0) continue; merged[key] = deepMergeNonEmpty(merged[key] || {}, value); } else if (typeof value === 'string') { merged[key] = (merged[key] || '') + value; } else { merged[key] = value; } } return merged; } export { deepMergeNonEmpty, flattenToVars, isSafeCssVarSegment, loadDevTheme, loadFont, serializeOverrideCssValue }; //# sourceMappingURL=helpers.js.map