@walletconnect/modal
Version:
#### 🔎 [Examples](https://github.com/WalletConnect/web3modal-examples)
803 lines (798 loc) • 26.5 kB
JavaScript
const t=Symbol();const s=Object.getPrototypeOf,c=new WeakMap,l=e=>e&&(c.has(e)?c.get(e):s(e)===Object.prototype||s(e)===Array.prototype),y=e=>l(e)&&e[t]||null,h=(e,t=!0)=>{c.set(e,t);};
const isObject = (x) => typeof x === "object" && x !== null;
const proxyStateMap = /* @__PURE__ */ new WeakMap();
const refSet = /* @__PURE__ */ new WeakSet();
const buildProxyFunction = (objectIs = Object.is, newProxy = (target, handler) => new Proxy(target, handler), canProxy = (x) => isObject(x) && !refSet.has(x) && (Array.isArray(x) || !(Symbol.iterator in x)) && !(x instanceof WeakMap) && !(x instanceof WeakSet) && !(x instanceof Error) && !(x instanceof Number) && !(x instanceof Date) && !(x instanceof String) && !(x instanceof RegExp) && !(x instanceof ArrayBuffer), defaultHandlePromise = (promise) => {
switch (promise.status) {
case "fulfilled":
return promise.value;
case "rejected":
throw promise.reason;
default:
throw promise;
}
}, snapCache = /* @__PURE__ */ new WeakMap(), createSnapshot = (target, version, handlePromise = defaultHandlePromise) => {
const cache = snapCache.get(target);
if ((cache == null ? void 0 : cache[0]) === version) {
return cache[1];
}
const snap = Array.isArray(target) ? [] : Object.create(Object.getPrototypeOf(target));
h(snap, true);
snapCache.set(target, [version, snap]);
Reflect.ownKeys(target).forEach((key) => {
if (Object.getOwnPropertyDescriptor(snap, key)) {
return;
}
const value = Reflect.get(target, key);
const desc = {
value,
enumerable: true,
// This is intentional to avoid copying with proxy-compare.
// It's still non-writable, so it avoids assigning a value.
configurable: true
};
if (refSet.has(value)) {
h(value, false);
} else if (value instanceof Promise) {
delete desc.value;
desc.get = () => handlePromise(value);
} else if (proxyStateMap.has(value)) {
const [target2, ensureVersion] = proxyStateMap.get(
value
);
desc.value = createSnapshot(
target2,
ensureVersion(),
handlePromise
);
}
Object.defineProperty(snap, key, desc);
});
return Object.preventExtensions(snap);
}, proxyCache = /* @__PURE__ */ new WeakMap(), versionHolder = [1, 1], proxyFunction = (initialObject) => {
if (!isObject(initialObject)) {
throw new Error("object required");
}
const found = proxyCache.get(initialObject);
if (found) {
return found;
}
let version = versionHolder[0];
const listeners = /* @__PURE__ */ new Set();
const notifyUpdate = (op, nextVersion = ++versionHolder[0]) => {
if (version !== nextVersion) {
version = nextVersion;
listeners.forEach((listener) => listener(op, nextVersion));
}
};
let checkVersion = versionHolder[1];
const ensureVersion = (nextCheckVersion = ++versionHolder[1]) => {
if (checkVersion !== nextCheckVersion && !listeners.size) {
checkVersion = nextCheckVersion;
propProxyStates.forEach(([propProxyState]) => {
const propVersion = propProxyState[1](nextCheckVersion);
if (propVersion > version) {
version = propVersion;
}
});
}
return version;
};
const createPropListener = (prop) => (op, nextVersion) => {
const newOp = [...op];
newOp[1] = [prop, ...newOp[1]];
notifyUpdate(newOp, nextVersion);
};
const propProxyStates = /* @__PURE__ */ new Map();
const addPropListener = (prop, propProxyState) => {
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && propProxyStates.has(prop)) {
throw new Error("prop listener already exists");
}
if (listeners.size) {
const remove = propProxyState[3](createPropListener(prop));
propProxyStates.set(prop, [propProxyState, remove]);
} else {
propProxyStates.set(prop, [propProxyState]);
}
};
const removePropListener = (prop) => {
var _a;
const entry = propProxyStates.get(prop);
if (entry) {
propProxyStates.delete(prop);
(_a = entry[1]) == null ? void 0 : _a.call(entry);
}
};
const addListener = (listener) => {
listeners.add(listener);
if (listeners.size === 1) {
propProxyStates.forEach(([propProxyState, prevRemove], prop) => {
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && prevRemove) {
throw new Error("remove already exists");
}
const remove = propProxyState[3](createPropListener(prop));
propProxyStates.set(prop, [propProxyState, remove]);
});
}
const removeListener = () => {
listeners.delete(listener);
if (listeners.size === 0) {
propProxyStates.forEach(([propProxyState, remove], prop) => {
if (remove) {
remove();
propProxyStates.set(prop, [propProxyState]);
}
});
}
};
return removeListener;
};
const baseObject = Array.isArray(initialObject) ? [] : Object.create(Object.getPrototypeOf(initialObject));
const handler = {
deleteProperty(target, prop) {
const prevValue = Reflect.get(target, prop);
removePropListener(prop);
const deleted = Reflect.deleteProperty(target, prop);
if (deleted) {
notifyUpdate(["delete", [prop], prevValue]);
}
return deleted;
},
set(target, prop, value, receiver) {
const hasPrevValue = Reflect.has(target, prop);
const prevValue = Reflect.get(target, prop, receiver);
if (hasPrevValue && (objectIs(prevValue, value) || proxyCache.has(value) && objectIs(prevValue, proxyCache.get(value)))) {
return true;
}
removePropListener(prop);
if (isObject(value)) {
value = y(value) || value;
}
let nextValue = value;
if (value instanceof Promise) {
value.then((v) => {
value.status = "fulfilled";
value.value = v;
notifyUpdate(["resolve", [prop], v]);
}).catch((e) => {
value.status = "rejected";
value.reason = e;
notifyUpdate(["reject", [prop], e]);
});
} else {
if (!proxyStateMap.has(value) && canProxy(value)) {
nextValue = proxyFunction(value);
}
const childProxyState = !refSet.has(nextValue) && proxyStateMap.get(nextValue);
if (childProxyState) {
addPropListener(prop, childProxyState);
}
}
Reflect.set(target, prop, nextValue, receiver);
notifyUpdate(["set", [prop], value, prevValue]);
return true;
}
};
const proxyObject = newProxy(baseObject, handler);
proxyCache.set(initialObject, proxyObject);
const proxyState = [
baseObject,
ensureVersion,
createSnapshot,
addListener
];
proxyStateMap.set(proxyObject, proxyState);
Reflect.ownKeys(initialObject).forEach((key) => {
const desc = Object.getOwnPropertyDescriptor(
initialObject,
key
);
if ("value" in desc) {
proxyObject[key] = initialObject[key];
delete desc.value;
delete desc.writable;
}
Object.defineProperty(baseObject, key, desc);
});
return proxyObject;
}) => [
// public functions
proxyFunction,
// shared state
proxyStateMap,
refSet,
// internal things
objectIs,
newProxy,
canProxy,
defaultHandlePromise,
snapCache,
createSnapshot,
proxyCache,
versionHolder
];
const [defaultProxyFunction] = buildProxyFunction();
function proxy(initialObject = {}) {
return defaultProxyFunction(initialObject);
}
function subscribe(proxyObject, callback, notifyInSync) {
const proxyState = proxyStateMap.get(proxyObject);
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && !proxyState) {
console.warn("Please use proxy object");
}
let promise;
const ops = [];
const addListener = proxyState[3];
let isListenerActive = false;
const listener = (op) => {
ops.push(op);
if (notifyInSync) {
callback(ops.splice(0));
return;
}
if (!promise) {
promise = Promise.resolve().then(() => {
promise = void 0;
if (isListenerActive) {
callback(ops.splice(0));
}
});
}
};
const removeListener = addListener(listener);
isListenerActive = true;
return () => {
isListenerActive = false;
removeListener();
};
}
function snapshot(proxyObject, handlePromise) {
const proxyState = proxyStateMap.get(proxyObject);
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && !proxyState) {
console.warn("Please use proxy object");
}
const [target, ensureVersion, createSnapshot] = proxyState;
return createSnapshot(target, ensureVersion(), handlePromise);
}
const state$7 = proxy({
history: ["ConnectWallet"],
view: "ConnectWallet",
data: void 0
});
const RouterCtrl = {
state: state$7,
subscribe(callback) {
return subscribe(state$7, () => callback(state$7));
},
push(view, data) {
if (view !== state$7.view) {
state$7.view = view;
if (data) {
state$7.data = data;
}
state$7.history.push(view);
}
},
reset(view) {
state$7.view = view;
state$7.history = [view];
},
replace(view) {
if (state$7.history.length > 1) {
state$7.history[state$7.history.length - 1] = view;
state$7.view = view;
}
},
goBack() {
if (state$7.history.length > 1) {
state$7.history.pop();
const [last] = state$7.history.slice(-1);
state$7.view = last;
}
},
setData(data) {
state$7.data = data;
}
};
const CoreUtil = {
WALLETCONNECT_DEEPLINK_CHOICE: "WALLETCONNECT_DEEPLINK_CHOICE",
WCM_VERSION: "WCM_VERSION",
RECOMMENDED_WALLET_AMOUNT: 9,
isMobile() {
if (typeof window !== "undefined") {
return Boolean(
window.matchMedia("(pointer:coarse)").matches || /Android|webOS|iPhone|iPad|iPod|BlackBerry|Opera Mini/u.test(navigator.userAgent)
);
}
return false;
},
isAndroid() {
return CoreUtil.isMobile() && navigator.userAgent.toLowerCase().includes("android");
},
isIos() {
const ua = navigator.userAgent.toLowerCase();
return CoreUtil.isMobile() && (ua.includes("iphone") || ua.includes("ipad"));
},
isHttpUrl(url) {
return url.startsWith("http://") || url.startsWith("https://");
},
isArray(data) {
return Array.isArray(data) && data.length > 0;
},
isTelegram() {
return typeof window !== "undefined" && // eslint-disable-next-line @typescript-eslint/no-explicit-any
(Boolean(window.TelegramWebviewProxy) || // eslint-disable-next-line @typescript-eslint/no-explicit-any
Boolean(window.Telegram) || // eslint-disable-next-line @typescript-eslint/no-explicit-any
Boolean(window.TelegramWebviewProxyProto));
},
formatNativeUrl(appUrl, wcUri, name) {
if (CoreUtil.isHttpUrl(appUrl)) {
return this.formatUniversalUrl(appUrl, wcUri, name);
}
let safeAppUrl = appUrl;
if (!safeAppUrl.includes("://")) {
safeAppUrl = appUrl.replaceAll("/", "").replaceAll(":", "");
safeAppUrl = `${safeAppUrl}://`;
}
if (!safeAppUrl.endsWith("/")) {
safeAppUrl = `${safeAppUrl}/`;
}
this.setWalletConnectDeepLink(safeAppUrl, name);
const encodedWcUrl = encodeURIComponent(wcUri);
return `${safeAppUrl}wc?uri=${encodedWcUrl}`;
},
formatUniversalUrl(appUrl, wcUri, name) {
if (!CoreUtil.isHttpUrl(appUrl)) {
return this.formatNativeUrl(appUrl, wcUri, name);
}
let safeAppUrl = appUrl;
if (safeAppUrl.startsWith("https://t.me")) {
const formattedUri = Buffer.from(wcUri).toString("base64").replace(/[=]/g, "");
if (safeAppUrl.endsWith("/")) {
safeAppUrl = safeAppUrl.slice(0, -1);
}
this.setWalletConnectDeepLink(safeAppUrl, name);
const url = new URL(safeAppUrl);
url.searchParams.set("startapp", formattedUri);
const link = url.toString();
return link;
}
if (!safeAppUrl.endsWith("/")) {
safeAppUrl = `${safeAppUrl}/`;
}
this.setWalletConnectDeepLink(safeAppUrl, name);
const encodedWcUrl = encodeURIComponent(wcUri);
return `${safeAppUrl}wc?uri=${encodedWcUrl}`;
},
async wait(miliseconds) {
return new Promise((resolve) => {
setTimeout(resolve, miliseconds);
});
},
openHref(href, target) {
const adjustedTarget = this.isTelegram() ? "_blank" : target;
window.open(href, adjustedTarget, "noreferrer noopener");
},
setWalletConnectDeepLink(href, name) {
try {
localStorage.setItem(CoreUtil.WALLETCONNECT_DEEPLINK_CHOICE, JSON.stringify({ href, name }));
} catch (e) {
console.info("Unable to set WalletConnect deep link");
}
},
setWalletConnectAndroidDeepLink(wcUri) {
try {
const [href] = wcUri.split("?");
localStorage.setItem(
CoreUtil.WALLETCONNECT_DEEPLINK_CHOICE,
JSON.stringify({ href, name: "Android" })
);
} catch (e) {
console.info("Unable to set WalletConnect android deep link");
}
},
removeWalletConnectDeepLink() {
try {
localStorage.removeItem(CoreUtil.WALLETCONNECT_DEEPLINK_CHOICE);
} catch (e) {
console.info("Unable to remove WalletConnect deep link");
}
},
setModalVersionInStorage() {
try {
if (typeof localStorage !== "undefined") {
localStorage.setItem(CoreUtil.WCM_VERSION, "2.7.0");
}
} catch (e) {
console.info("Unable to set Web3Modal version in storage");
}
},
getWalletRouterData() {
var _a;
const routerData = (_a = RouterCtrl.state.data) == null ? void 0 : _a.Wallet;
if (!routerData) {
throw new Error('Missing "Wallet" view data');
}
return routerData;
}
};
const isEnabled = typeof location !== "undefined" && (location.hostname.includes("localhost") || location.protocol.includes("https"));
const state$6 = proxy({
enabled: isEnabled,
userSessionId: "",
events: [],
connectedWalletId: void 0
});
const EventsCtrl = {
state: state$6,
subscribe(callback) {
return subscribe(state$6.events, () => callback(snapshot(state$6.events[state$6.events.length - 1])));
},
initialize() {
if (state$6.enabled && typeof (crypto == null ? void 0 : crypto.randomUUID) !== "undefined") {
state$6.userSessionId = crypto.randomUUID();
}
},
setConnectedWalletId(connectedWalletId) {
state$6.connectedWalletId = connectedWalletId;
},
click(data) {
if (state$6.enabled) {
const event = {
type: "CLICK",
name: data.name,
userSessionId: state$6.userSessionId,
timestamp: Date.now(),
data
};
state$6.events.push(event);
}
},
track(data) {
if (state$6.enabled) {
const event = {
type: "TRACK",
name: data.name,
userSessionId: state$6.userSessionId,
timestamp: Date.now(),
data
};
state$6.events.push(event);
}
},
view(data) {
if (state$6.enabled) {
const event = {
type: "VIEW",
name: data.name,
userSessionId: state$6.userSessionId,
timestamp: Date.now(),
data
};
state$6.events.push(event);
}
}
};
const state$5 = proxy({
chains: void 0,
walletConnectUri: void 0,
isAuth: false,
isCustomDesktop: false,
isCustomMobile: false,
isDataLoaded: false,
isUiLoaded: false
});
const OptionsCtrl = {
state: state$5,
subscribe(callback) {
return subscribe(state$5, () => callback(state$5));
},
setChains(chains) {
state$5.chains = chains;
},
setWalletConnectUri(walletConnectUri) {
state$5.walletConnectUri = walletConnectUri;
},
setIsCustomDesktop(isCustomDesktop) {
state$5.isCustomDesktop = isCustomDesktop;
},
setIsCustomMobile(isCustomMobile) {
state$5.isCustomMobile = isCustomMobile;
},
setIsDataLoaded(isDataLoaded) {
state$5.isDataLoaded = isDataLoaded;
},
setIsUiLoaded(isUiLoaded) {
state$5.isUiLoaded = isUiLoaded;
},
setIsAuth(isAuth) {
state$5.isAuth = isAuth;
}
};
const state$4 = proxy({
projectId: "",
mobileWallets: void 0,
desktopWallets: void 0,
walletImages: void 0,
chains: void 0,
enableAuthMode: false,
enableExplorer: true,
explorerExcludedWalletIds: void 0,
explorerRecommendedWalletIds: void 0,
termsOfServiceUrl: void 0,
privacyPolicyUrl: void 0
});
const ConfigCtrl = {
state: state$4,
subscribe(callback) {
return subscribe(state$4, () => callback(state$4));
},
setConfig(config) {
var _a, _b;
EventsCtrl.initialize();
OptionsCtrl.setChains(config.chains);
OptionsCtrl.setIsAuth(Boolean(config.enableAuthMode));
OptionsCtrl.setIsCustomMobile(Boolean((_a = config.mobileWallets) == null ? void 0 : _a.length));
OptionsCtrl.setIsCustomDesktop(Boolean((_b = config.desktopWallets) == null ? void 0 : _b.length));
CoreUtil.setModalVersionInStorage();
Object.assign(state$4, config);
}
};
var __defProp$2 = Object.defineProperty;
var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues$2 = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp$2.call(b, prop))
__defNormalProp$2(a, prop, b[prop]);
if (__getOwnPropSymbols$2)
for (var prop of __getOwnPropSymbols$2(b)) {
if (__propIsEnum$2.call(b, prop))
__defNormalProp$2(a, prop, b[prop]);
}
return a;
};
const W3M_API = "https://explorer-api.walletconnect.com";
const SDK_TYPE = "wcm";
const SDK_VERSION = `js-${"2.7.0"}`;
async function fetchListings(endpoint, params) {
const allParams = __spreadValues$2({ sdkType: SDK_TYPE, sdkVersion: SDK_VERSION }, params);
const url = new URL(endpoint, W3M_API);
url.searchParams.append("projectId", ConfigCtrl.state.projectId);
Object.entries(allParams).forEach(([key, value]) => {
if (value) {
url.searchParams.append(key, String(value));
}
});
const request = await fetch(url);
return request.json();
}
const ExplorerUtil = {
async getDesktopListings(params) {
return fetchListings("/w3m/v1/getDesktopListings", params);
},
async getMobileListings(params) {
return fetchListings("/w3m/v1/getMobileListings", params);
},
async getInjectedListings(params) {
return fetchListings("/w3m/v1/getInjectedListings", params);
},
async getAllListings(params) {
return fetchListings("/w3m/v1/getAllListings", params);
},
getWalletImageUrl(imageId) {
return `${W3M_API}/w3m/v1/getWalletImage/${imageId}?projectId=${ConfigCtrl.state.projectId}&sdkType=${SDK_TYPE}&sdkVersion=${SDK_VERSION}`;
},
getAssetImageUrl(imageId) {
return `${W3M_API}/w3m/v1/getAssetImage/${imageId}?projectId=${ConfigCtrl.state.projectId}&sdkType=${SDK_TYPE}&sdkVersion=${SDK_VERSION}`;
}
};
var __defProp$1 = Object.defineProperty;
var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues$1 = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp$1.call(b, prop))
__defNormalProp$1(a, prop, b[prop]);
if (__getOwnPropSymbols$1)
for (var prop of __getOwnPropSymbols$1(b)) {
if (__propIsEnum$1.call(b, prop))
__defNormalProp$1(a, prop, b[prop]);
}
return a;
};
const isMobile = CoreUtil.isMobile();
const state$3 = proxy({
wallets: { listings: [], total: 0, page: 1 },
search: { listings: [], total: 0, page: 1 },
recomendedWallets: []
});
const ExplorerCtrl = {
state: state$3,
async getRecomendedWallets() {
const { explorerRecommendedWalletIds, explorerExcludedWalletIds } = ConfigCtrl.state;
if (explorerRecommendedWalletIds === "NONE" || explorerExcludedWalletIds === "ALL" && !explorerRecommendedWalletIds) {
return state$3.recomendedWallets;
}
if (CoreUtil.isArray(explorerRecommendedWalletIds)) {
const recommendedIds = explorerRecommendedWalletIds.join(",");
const params = { recommendedIds };
const { listings } = await ExplorerUtil.getAllListings(params);
const listingsArr = Object.values(listings);
listingsArr.sort((a, b) => {
const aIndex = explorerRecommendedWalletIds.indexOf(a.id);
const bIndex = explorerRecommendedWalletIds.indexOf(b.id);
return aIndex - bIndex;
});
state$3.recomendedWallets = listingsArr;
} else {
const { chains, isAuth } = OptionsCtrl.state;
const chainsFilter = chains == null ? void 0 : chains.join(",");
const isExcluded = CoreUtil.isArray(explorerExcludedWalletIds);
const params = {
page: 1,
sdks: isAuth ? "auth_v1" : void 0,
entries: CoreUtil.RECOMMENDED_WALLET_AMOUNT,
chains: chainsFilter,
version: 2,
excludedIds: isExcluded ? explorerExcludedWalletIds.join(",") : void 0
};
const { listings } = isMobile ? await ExplorerUtil.getMobileListings(params) : await ExplorerUtil.getDesktopListings(params);
state$3.recomendedWallets = Object.values(listings);
}
return state$3.recomendedWallets;
},
async getWallets(params) {
const extendedParams = __spreadValues$1({}, params);
const { explorerRecommendedWalletIds, explorerExcludedWalletIds } = ConfigCtrl.state;
const { recomendedWallets } = state$3;
if (explorerExcludedWalletIds === "ALL") {
return state$3.wallets;
}
if (recomendedWallets.length) {
extendedParams.excludedIds = recomendedWallets.map((wallet) => wallet.id).join(",");
} else if (CoreUtil.isArray(explorerRecommendedWalletIds)) {
extendedParams.excludedIds = explorerRecommendedWalletIds.join(",");
}
if (CoreUtil.isArray(explorerExcludedWalletIds)) {
extendedParams.excludedIds = [extendedParams.excludedIds, explorerExcludedWalletIds].filter(Boolean).join(",");
}
if (OptionsCtrl.state.isAuth) {
extendedParams.sdks = "auth_v1";
}
const { page, search } = params;
const { listings: listingsObj, total } = isMobile ? await ExplorerUtil.getMobileListings(extendedParams) : await ExplorerUtil.getDesktopListings(extendedParams);
const listings = Object.values(listingsObj);
const type = search ? "search" : "wallets";
state$3[type] = {
listings: [...state$3[type].listings, ...listings],
total,
page: page != null ? page : 1
};
return { listings, total };
},
getWalletImageUrl(imageId) {
return ExplorerUtil.getWalletImageUrl(imageId);
},
getAssetImageUrl(imageId) {
return ExplorerUtil.getAssetImageUrl(imageId);
},
resetSearch() {
state$3.search = { listings: [], total: 0, page: 1 };
}
};
const state$2 = proxy({
open: false
});
const ModalCtrl = {
state: state$2,
subscribe(callback) {
return subscribe(state$2, () => callback(state$2));
},
async open(options) {
return new Promise((resolve) => {
const { isUiLoaded, isDataLoaded } = OptionsCtrl.state;
CoreUtil.removeWalletConnectDeepLink();
OptionsCtrl.setWalletConnectUri(options == null ? void 0 : options.uri);
OptionsCtrl.setChains(options == null ? void 0 : options.chains);
RouterCtrl.reset("ConnectWallet");
if (isUiLoaded && isDataLoaded) {
state$2.open = true;
resolve();
} else {
const interval = setInterval(() => {
const opts = OptionsCtrl.state;
if (opts.isUiLoaded && opts.isDataLoaded) {
clearInterval(interval);
state$2.open = true;
resolve();
}
}, 200);
}
});
},
close() {
state$2.open = false;
}
};
var __defProp = Object.defineProperty;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
function isDarkMode() {
return typeof matchMedia !== "undefined" && matchMedia("(prefers-color-scheme: dark)").matches;
}
const state$1 = proxy({
themeMode: isDarkMode() ? "dark" : "light"
});
const ThemeCtrl = {
state: state$1,
subscribe(callback) {
return subscribe(state$1, () => callback(state$1));
},
setThemeConfig(theme) {
const { themeMode, themeVariables } = theme;
if (themeMode) {
state$1.themeMode = themeMode;
}
if (themeVariables) {
state$1.themeVariables = __spreadValues({}, themeVariables);
}
}
};
const state = proxy({
open: false,
message: "",
variant: "success"
});
const ToastCtrl = {
state,
subscribe(callback) {
return subscribe(state, () => callback(state));
},
openToast(message, variant) {
state.open = true;
state.message = message;
state.variant = variant;
},
closeToast() {
state.open = false;
}
};
class WalletConnectModal {
constructor(config) {
this.openModal = ModalCtrl.open;
this.closeModal = ModalCtrl.close;
this.subscribeModal = ModalCtrl.subscribe;
this.setTheme = ThemeCtrl.setThemeConfig;
ThemeCtrl.setThemeConfig(config);
ConfigCtrl.setConfig(config);
this.initUi();
}
async initUi() {
if (typeof window !== "undefined") {
await import('./index-2f182d7e.js');
const modal = document.createElement("wcm-modal");
document.body.insertAdjacentElement("beforeend", modal);
OptionsCtrl.setIsUiLoaded(true);
}
}
}
export { CoreUtil as C, EventsCtrl as E, ModalCtrl as M, OptionsCtrl as O, RouterCtrl as R, ThemeCtrl as T, WalletConnectModal as W, ToastCtrl as a, ExplorerCtrl as b, ConfigCtrl as c };
//# sourceMappingURL=bundle-6897c25a.js.map