From 156616b2f605fe44a58783e8021d46b93c7c702e Mon Sep 17 00:00:00 2001 From: Aleksandar Cakalic Date: Mon, 6 Oct 2025 09:52:27 +0200 Subject: [PATCH 1/6] feat: add xverse connector --- package.json | 5 +++++ src/connectors/injected/index.ts | 4 ++++ src/connectors/injected/xverse.ts | 17 +++++++++++++++++ vite.config.ts | 1 + 4 files changed, 27 insertions(+) create mode 100644 src/connectors/injected/xverse.ts diff --git a/package.json b/package.json index dffd691..93091e0 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,11 @@ "import": "./dist/fordefi.js", "require": "./dist/fordefi.cjs" }, + "./xverse": { + "types": "./dist/xverse.d.ts", + "import": "./dist/xverse.js", + "require": "./dist/xverse.cjs" + }, "./braavosMobile": { "types": "./dist/braavosMobile.d.ts", "import": "./dist/braavosMobile.js", diff --git a/src/connectors/injected/index.ts b/src/connectors/injected/index.ts index b60cdef..94cbc63 100644 --- a/src/connectors/injected/index.ts +++ b/src/connectors/injected/index.ts @@ -67,6 +67,10 @@ export const injectedWalletIcons = { light: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzNDk0XzY2MjU0KSI+CjxwYXRoIGQ9Ik0xMC44NzY5IDE1LjYzNzhIMS41VjE4LjM5OUMxLjUgMTkuODAxMyAyLjYzNDQ3IDIwLjkzOCA0LjAzMzkyIDIwLjkzOEg4LjI0OTkyTDEwLjg3NjkgMTUuNjM3OFoiIGZpbGw9IiM3OTk0RkYiLz4KPHBhdGggZD0iTTEuNSA5Ljc3NTUxSDE5LjA1MTZMMTcuMDEzOSAxMy44NzExSDEuNVY5Ljc3NTUxWiIgZmlsbD0iIzQ4NkRGRiIvPgo8cGF0aCBkPSJNNy42NTk5NiAzSDEuNTI0NDFWOC4wMDcwNEgyMi40NjEyVjNIMTYuMzI1NlY2LjczOTQ0SDE1LjA2MDZWM0g4LjkyNTAyVjYuNzM5NDRINy42NTk5NlYzWiIgZmlsbD0iIzVDRDFGQSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzNDk0XzY2MjU0Ij4KPHJlY3Qgd2lkdGg9IjIxIiBoZWlnaHQ9IjE4IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS41IDMpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==", }, + xverse: { + dark: "", + light: "", + }, } export class InjectedConnector extends Connector { diff --git a/src/connectors/injected/xverse.ts b/src/connectors/injected/xverse.ts new file mode 100644 index 0000000..14c7149 --- /dev/null +++ b/src/connectors/injected/xverse.ts @@ -0,0 +1,17 @@ +import { InjectedConnector, type InjectedConnectorOptions } from "./index" + +const id = "xverse" + +export class Xverse extends InjectedConnector { + constructor(options?: Omit) { + super({ options: { id, ...options } }) + } + + static getInjectedWallet() { + return super.getInjectedWallet(id) + } + + static isWalletInjected() { + return super.isWalletInjected(id) + } +} diff --git a/vite.config.ts b/vite.config.ts index e16c430..5431dec 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -49,6 +49,7 @@ export default defineConfig({ metamask: resolve(__dirname, "src/connectors/injected/metamask.ts"), keplr: resolve(__dirname, "src/connectors/injected/keplr.ts"), fordefi: resolve(__dirname, "src/connectors/injected/fordefi.ts"), + xverse: resolve(__dirname, "src/connectors/injected/xverse.ts"), }, formats: ["es", "cjs"], }, From 3315c874b0ad85d21e35b37346346268cbc4eaa0 Mon Sep 17 00:00:00 2001 From: Aleksandar Cakalic Date: Mon, 6 Oct 2025 09:59:43 +0200 Subject: [PATCH 2/6] chore: add xverse dark icon --- src/connectors/injected/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connectors/injected/index.ts b/src/connectors/injected/index.ts index 94cbc63..8193e6d 100644 --- a/src/connectors/injected/index.ts +++ b/src/connectors/injected/index.ts @@ -68,7 +68,7 @@ export const injectedWalletIcons = { "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzNDk0XzY2MjU0KSI+CjxwYXRoIGQ9Ik0xMC44NzY5IDE1LjYzNzhIMS41VjE4LjM5OUMxLjUgMTkuODAxMyAyLjYzNDQ3IDIwLjkzOCA0LjAzMzkyIDIwLjkzOEg4LjI0OTkyTDEwLjg3NjkgMTUuNjM3OFoiIGZpbGw9IiM3OTk0RkYiLz4KPHBhdGggZD0iTTEuNSA5Ljc3NTUxSDE5LjA1MTZMMTcuMDEzOSAxMy44NzExSDEuNVY5Ljc3NTUxWiIgZmlsbD0iIzQ4NkRGRiIvPgo8cGF0aCBkPSJNNy42NTk5NiAzSDEuNTI0NDFWOC4wMDcwNEgyMi40NjEyVjNIMTYuMzI1NlY2LjczOTQ0SDE1LjA2MDZWM0g4LjkyNTAyVjYuNzM5NDRINy42NTk5NlYzWiIgZmlsbD0iIzVDRDFGQSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzNDk0XzY2MjU0Ij4KPHJlY3Qgd2lkdGg9IjIxIiBoZWlnaHQ9IjE4IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS41IDMpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==", }, xverse: { - dark: "", + dark: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyIiBoZWlnaHQ9IjEwMiIgdmlld0JveD0iMCAwIDEwMiAxMDIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSJJY29uX0FydCAoRWRpdCBNZSkiPgo8cmVjdCB3aWR0aD0iMTAyIiBoZWlnaHQ9IjEwMiIgZmlsbD0iIzE4MTgxOCIvPgo8ZyBpZD0iTG9nby9FbWJsZW0iIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8yMF8xMjIzKSI+CjxwYXRoIGlkPSJWZWN0b3IiIGQ9Ik03NC42NTQyIDczLjg4ODNWNjUuMjMxMkM3NC42NTQyIDY0Ljg4OCA3NC41MTc3IDY0LjU2MDYgNzQuMjc0NSA2NC4zMTc0TDM3LjQzOTcgMjcuNDgyNUMzNy4xOTY1IDI3LjIzOTIgMzYuODY5MSAyNy4xMDI4IDM2LjUyNTggMjcuMTAyOEgyNy44NjlDMjcuNDQxNiAyNy4xMDI4IDI3LjA5MzggMjcuNDUwNiAyNy4wOTM4IDI3Ljg3OFYzNS45MjExQzI3LjA5MzggMzYuMjY0NCAyNy4yMzAyIDM2LjU5MTcgMjcuNDczNCAzNi44MzVMNDAuNjk1MiA1MC4wNTY3QzQwLjk5NzUgNTAuMzU5MSA0MC45OTc1IDUwLjg1MDEgNDAuNjk1MiA1MS4xNTI0TDI3LjMyMTEgNjQuNTI2NUMyNy4xNzU2IDY0LjY3MiAyNy4wOTM4IDY0Ljg2OTggMjcuMDkzOCA2NS4wNzQ0VjczLjg4ODNDMjcuMDkzOCA3NC4zMTUzIDI3LjQ0MTYgNzQuNjYzNSAyNy44NjkgNzQuNjYzNUg0Mi4zMzQyQzQyLjc2MTYgNzQuNjYzNSA0My4xMDk0IDc0LjMxNTMgNDMuMTA5NCA3My44ODgzVjY4LjY5NThDNDMuMTA5NCA2OC40OTEyIDQzLjE5MTIgNjguMjkzNSA0My4zMzY4IDY4LjE0NzlMNTAuNTExNCA2MC45NzMzQzUwLjgxMzggNjAuNjcwOSA1MS4zMDQ4IDYwLjY3MDkgNTEuNjA3MiA2MC45NzMzTDY0LjkxOTggNzQuMjg2MUM2NS4xNjMxIDc0LjUyOTMgNjUuNDkwNCA3NC42NjU4IDY1LjgzMzcgNzQuNjY1OEg3My44NzY3Qzc0LjMwNDIgNzQuNjY1OCA3NC42NTE5IDc0LjMxNzYgNzQuNjUxOSA3My44OTA2TDc0LjY1NDIgNzMuODg4M1oiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGlkPSJWZWN0b3JfMiIgZD0iTTU1LjM1OCAzOC41NjcySDYyLjYwMzFDNjMuMDMyOCAzOC41NjcyIDYzLjM4MjkgMzguOTE3MyA2My4zODI5IDM5LjM0NjlWNDYuNTkyMUM2My4zODI5IDQ3LjI4NzcgNjQuMjI0IDQ3LjYzNTUgNjQuNzE1MSA0Ny4xNDIyTDc0LjY1NDEgMzcuMTg3M0M3NC43OTk0IDM3LjA0MTggNzQuODgxNiAzNi44NDQgNzQuODgxNiAzNi42MzcxVjI3LjkxODlDNzQuODgxNiAyNy40ODkyIDc0LjUzMzQgMjcuMTM5MSA3NC4xMDE3IDI3LjEzOTFMNjUuMjUzOCAyNy4xMjc3QzY1LjA0NyAyNy4xMjc3IDY0Ljg0OTIgMjcuMjA5NiA2NC43MDE0IDI3LjM1NTFMNTQuODA1NiAzNy4yMzVDNTQuMzE0NSAzNy43MjYgNTQuNjYyMyAzOC41NjcyIDU1LjM1NTcgMzguNTY3Mkg1NS4zNThaIiBmaWxsPSIjRUU3QTMwIi8+CjwvZz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMF8xMjIzIj4KPHJlY3Qgd2lkdGg9IjQ3LjgxMjUiIGhlaWdodD0iNDcuODEyNSIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3LjA5MzggMjcuMDkzOCkiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K", light: "", }, } From 0645a8b7c40d23c72fdca47a380d72ab4b407449 Mon Sep 17 00:00:00 2001 From: Aleksandar Cakalic Date: Mon, 6 Oct 2025 10:01:24 +0200 Subject: [PATCH 3/6] chore: add xverse to `defaultConnectors.ts` --- src/helpers/defaultConnectors.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/helpers/defaultConnectors.ts b/src/helpers/defaultConnectors.ts index dee8e3e..4ab5ee2 100644 --- a/src/helpers/defaultConnectors.ts +++ b/src/helpers/defaultConnectors.ts @@ -2,22 +2,16 @@ import type { StarknetkitConnector } from "../connectors" import { type ArgentMobileConnectorOptions } from "../connectors/argent/argentMobile" import { BraavosMobileBaseConnector } from "../connectors/braavosMobile" import { ControllerConnector } from "../connectors/controller" -import { WebWalletConnector } from "../connectors/webwallet" import { Braavos } from "../connectors/injected/braavos" import { Fordefi } from "../connectors/injected/fordefi" import { Keplr } from "../connectors/injected/keplr" +import { Xverse } from "../connectors/injected/xverse" import { MetaMask } from "../connectors/injected/metamask" import { isMobileDevice, isSafari } from "./navigator" import { ArgentX } from "../connectors/injected/argentX" -export const defaultConnectors = ({ - argentMobileOptions, - webWalletUrl, -}: { - argentMobileOptions: ArgentMobileConnectorOptions - webWalletUrl?: string -}): StarknetkitConnector[] => { +export const defaultConnectors = (): StarknetkitConnector[] => { // | StarknetkitCompoundConnector const defaultConnectors: StarknetkitConnector[] = // | StarknetkitCompoundConnector @@ -37,6 +31,9 @@ export const defaultConnectors = ({ if (Keplr.isWalletInjected()) { defaultConnectors.push(new Keplr()) } + if (Xverse.isWalletInjected()) { + defaultConnectors.push(new Xverse()) + } } defaultConnectors.push(new ControllerConnector()) From 076920c5d35d99e1f01ff30eac95ba6795fedc53 Mon Sep 17 00:00:00 2001 From: Aleksandar Cakalic Date: Mon, 6 Oct 2025 10:13:09 +0200 Subject: [PATCH 4/6] chore: bump `@starknet-io` packages to latest version --- package.json | 4 ++-- pnpm-lock.yaml | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 93091e0..45a89ff 100644 --- a/package.json +++ b/package.json @@ -102,8 +102,8 @@ "dependencies": { "@argent/x-ui": "^1.109.0", "@cartridge/controller": "^0.10.0", - "@starknet-io/get-starknet": "^4.0.7", - "@starknet-io/get-starknet-core": "^4.0.7", + "@starknet-io/get-starknet": "^4.0.8", + "@starknet-io/get-starknet-core": "^4.0.8", "@starknet-io/types-js": "0.8.4", "@trpc/client": "^10.38.1", "@trpc/server": "^10.38.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc6652e..b542a90 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,11 +15,11 @@ importers: specifier: ^0.10.0 version: 0.10.0(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@starknet-io/get-starknet': - specifier: ^4.0.7 - version: 4.0.7 + specifier: ^4.0.8 + version: 4.0.8 '@starknet-io/get-starknet-core': - specifier: ^4.0.7 - version: 4.0.7 + specifier: ^4.0.8 + version: 4.0.8 '@starknet-io/types-js': specifier: 0.8.4 version: 0.8.4 @@ -1609,11 +1609,11 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@starknet-io/get-starknet-core@4.0.7': - resolution: {integrity: sha512-ocwQTdDvGa+0CvjGygyaTuFkda2R82dofydts8uXr9p0Diy/bmYW1fkuqJfi1nC5M+YcvvuEpl6wFvwXM1og5w==} + '@starknet-io/get-starknet-core@4.0.8': + resolution: {integrity: sha512-UCyaO5T+5IZN1qPiQhLPzCSmoy06FU42tZtDmpj0UifSP7vdSMe+KRnkegiikpPJ8wZmel1o26GQkBFoUrHQlQ==} - '@starknet-io/get-starknet@4.0.7': - resolution: {integrity: sha512-env/ZN5EmDJ6vDtIgjOjsEvvzdKBDaWZ0aLe79IVJ7lq2icqKbX86yR1/CUf4AU31AFYZHWZ3daOaGFT4nHSUQ==} + '@starknet-io/get-starknet@4.0.8': + resolution: {integrity: sha512-51qlJqQMQnpW9MwvVUzOsnuSK0YbP88EEuzFbVDmtvMICuOjZd+Dr7CYgF/yK2sVbX8eA/hmY74/9S1vIWhptg==} '@starknet-io/types-js@0.7.10': resolution: {integrity: sha512-1VtCqX4AHWJlRRSYGSn+4X1mqolI1Tdq62IwzoU2vUuEE72S1OlEeGhpvd6XsdqXcfHmVzYfj8k1XtKBQqwo9w==} @@ -8602,15 +8602,15 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@starknet-io/get-starknet-core@4.0.7': + '@starknet-io/get-starknet-core@4.0.8': dependencies: '@module-federation/runtime': 0.1.21 '@starknet-io/types-js': 0.7.10 async-mutex: 0.5.0 - '@starknet-io/get-starknet@4.0.7': + '@starknet-io/get-starknet@4.0.8': dependencies: - '@starknet-io/get-starknet-core': 4.0.7 + '@starknet-io/get-starknet-core': 4.0.8 bowser: 2.12.1 '@starknet-io/types-js@0.7.10': {} From 2c1b01b41502668e1d9da07fc1ab3d53fe3d435e Mon Sep 17 00:00:00 2001 From: Aleksandar Cakalic Date: Mon, 6 Oct 2025 10:42:05 +0200 Subject: [PATCH 5/6] chore: remove redundant args passed to `defaultConnectors` --- src/main.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main.ts b/src/main.ts index ab232d1..4678bf4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -81,12 +81,7 @@ export const connect = async ({ // force null in case it was disconnected from mobile app selectedConnector = null const availableConnectors = - !connectors || connectors.length === 0 - ? defaultConnectors({ - argentMobileOptions, - webWalletUrl, - }) - : connectors + !connectors || connectors.length === 0 ? defaultConnectors() : connectors if (skipEmit) { // This is ugly but needed fix for useStarknetkitConnectModal From 8a18e3aadde340b2653b7370f2be7fdcb3ca50ad Mon Sep 17 00:00:00 2001 From: Aleksandar Cakalic Date: Mon, 6 Oct 2025 11:15:21 +0200 Subject: [PATCH 6/6] chore: add default icon for `xverse` --- src/connectors/injected/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/connectors/injected/index.ts b/src/connectors/injected/index.ts index 8193e6d..de07c81 100644 --- a/src/connectors/injected/index.ts +++ b/src/connectors/injected/index.ts @@ -68,8 +68,9 @@ export const injectedWalletIcons = { "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzNDk0XzY2MjU0KSI+CjxwYXRoIGQ9Ik0xMC44NzY5IDE1LjYzNzhIMS41VjE4LjM5OUMxLjUgMTkuODAxMyAyLjYzNDQ3IDIwLjkzOCA0LjAzMzkyIDIwLjkzOEg4LjI0OTkyTDEwLjg3NjkgMTUuNjM3OFoiIGZpbGw9IiM3OTk0RkYiLz4KPHBhdGggZD0iTTEuNSA5Ljc3NTUxSDE5LjA1MTZMMTcuMDEzOSAxMy44NzExSDEuNVY5Ljc3NTUxWiIgZmlsbD0iIzQ4NkRGRiIvPgo8cGF0aCBkPSJNNy42NTk5NiAzSDEuNTI0NDFWOC4wMDcwNEgyMi40NjEyVjNIMTYuMzI1NlY2LjczOTQ0SDE1LjA2MDZWM0g4LjkyNTAyVjYuNzM5NDRINy42NTk5NlYzWiIgZmlsbD0iIzVDRDFGQSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzNDk0XzY2MjU0Ij4KPHJlY3Qgd2lkdGg9IjIxIiBoZWlnaHQ9IjE4IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS41IDMpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==", }, xverse: { - dark: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyIiBoZWlnaHQ9IjEwMiIgdmlld0JveD0iMCAwIDEwMiAxMDIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSJJY29uX0FydCAoRWRpdCBNZSkiPgo8cmVjdCB3aWR0aD0iMTAyIiBoZWlnaHQ9IjEwMiIgZmlsbD0iIzE4MTgxOCIvPgo8ZyBpZD0iTG9nby9FbWJsZW0iIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8yMF8xMjIzKSI+CjxwYXRoIGlkPSJWZWN0b3IiIGQ9Ik03NC42NTQyIDczLjg4ODNWNjUuMjMxMkM3NC42NTQyIDY0Ljg4OCA3NC41MTc3IDY0LjU2MDYgNzQuMjc0NSA2NC4zMTc0TDM3LjQzOTcgMjcuNDgyNUMzNy4xOTY1IDI3LjIzOTIgMzYuODY5MSAyNy4xMDI4IDM2LjUyNTggMjcuMTAyOEgyNy44NjlDMjcuNDQxNiAyNy4xMDI4IDI3LjA5MzggMjcuNDUwNiAyNy4wOTM4IDI3Ljg3OFYzNS45MjExQzI3LjA5MzggMzYuMjY0NCAyNy4yMzAyIDM2LjU5MTcgMjcuNDczNCAzNi44MzVMNDAuNjk1MiA1MC4wNTY3QzQwLjk5NzUgNTAuMzU5MSA0MC45OTc1IDUwLjg1MDEgNDAuNjk1MiA1MS4xNTI0TDI3LjMyMTEgNjQuNTI2NUMyNy4xNzU2IDY0LjY3MiAyNy4wOTM4IDY0Ljg2OTggMjcuMDkzOCA2NS4wNzQ0VjczLjg4ODNDMjcuMDkzOCA3NC4zMTUzIDI3LjQ0MTYgNzQuNjYzNSAyNy44NjkgNzQuNjYzNUg0Mi4zMzQyQzQyLjc2MTYgNzQuNjYzNSA0My4xMDk0IDc0LjMxNTMgNDMuMTA5NCA3My44ODgzVjY4LjY5NThDNDMuMTA5NCA2OC40OTEyIDQzLjE5MTIgNjguMjkzNSA0My4zMzY4IDY4LjE0NzlMNTAuNTExNCA2MC45NzMzQzUwLjgxMzggNjAuNjcwOSA1MS4zMDQ4IDYwLjY3MDkgNTEuNjA3MiA2MC45NzMzTDY0LjkxOTggNzQuMjg2MUM2NS4xNjMxIDc0LjUyOTMgNjUuNDkwNCA3NC42NjU4IDY1LjgzMzcgNzQuNjY1OEg3My44NzY3Qzc0LjMwNDIgNzQuNjY1OCA3NC42NTE5IDc0LjMxNzYgNzQuNjUxOSA3My44OTA2TDc0LjY1NDIgNzMuODg4M1oiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGlkPSJWZWN0b3JfMiIgZD0iTTU1LjM1OCAzOC41NjcySDYyLjYwMzFDNjMuMDMyOCAzOC41NjcyIDYzLjM4MjkgMzguOTE3MyA2My4zODI5IDM5LjM0NjlWNDYuNTkyMUM2My4zODI5IDQ3LjI4NzcgNjQuMjI0IDQ3LjYzNTUgNjQuNzE1MSA0Ny4xNDIyTDc0LjY1NDEgMzcuMTg3M0M3NC43OTk0IDM3LjA0MTggNzQuODgxNiAzNi44NDQgNzQuODgxNiAzNi42MzcxVjI3LjkxODlDNzQuODgxNiAyNy40ODkyIDc0LjUzMzQgMjcuMTM5MSA3NC4xMDE3IDI3LjEzOTFMNjUuMjUzOCAyNy4xMjc3QzY1LjA0NyAyNy4xMjc3IDY0Ljg0OTIgMjcuMjA5NiA2NC43MDE0IDI3LjM1NTFMNTQuODA1NiAzNy4yMzVDNTQuMzE0NSAzNy43MjYgNTQuNjYyMyAzOC41NjcyIDU1LjM1NTcgMzguNTY3Mkg1NS4zNThaIiBmaWxsPSIjRUU3QTMwIi8+CjwvZz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMF8xMjIzIj4KPHJlY3Qgd2lkdGg9IjQ3LjgxMjUiIGhlaWdodD0iNDcuODEyNSIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3LjA5MzggMjcuMDkzOCkiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K", - light: "", + dark: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIiBmaWxsPSIjMTgxODE4Ii8+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xNTc4MV82ODc5KSI+CjxwYXRoIGQ9Ik0yOTIuNzYyIDI4OS43NThWMjU1LjgwOUMyOTIuNzYyIDI1NC40NjMgMjkyLjIyNiAyNTMuMTc5IDI5MS4yNzIgMjUyLjIyNUwxNDYuODIyIDEwNy43NzRDMTQ1Ljg2OSAxMDYuODIxIDE0NC41ODUgMTA2LjI4NiAxNDMuMjM4IDEwNi4yODZIMTA5LjI5QzEwNy42MTQgMTA2LjI4NiAxMDYuMjUgMTA3LjY1IDEwNi4yNSAxMDkuMzI2VjE0MC44NjdDMTA2LjI1IDE0Mi4yMTMgMTA2Ljc4NSAxNDMuNDk3IDEwNy43MzkgMTQ0LjQ1MUwxNTkuNTg5IDE5Ni4zMDFDMTYwLjc3NCAxOTcuNDg3IDE2MC43NzQgMTk5LjQxMiAxNTkuNTg5IDIwMC41OThMMTA3LjE0MiAyNTMuMDQ1QzEwNi41NzEgMjUzLjYxNiAxMDYuMjUgMjU0LjM5MSAxMDYuMjUgMjU1LjE5NFYyODkuNzU4QzEwNi4yNSAyOTEuNDMzIDEwNy42MTQgMjkyLjc5OCAxMDkuMjkgMjkyLjc5OEgxNjYuMDE2QzE2Ny42OTIgMjkyLjc5OCAxNjkuMDU2IDI5MS40MzMgMTY5LjA1NiAyODkuNzU4VjI2OS4zOTVDMTY5LjA1NiAyNjguNTkzIDE2OS4zNzcgMjY3LjgxOCAxNjkuOTQ4IDI2Ny4yNDdMMTk4LjA4NCAyMzkuMTExQzE5OS4yNyAyMzcuOTI1IDIwMS4xOTUgMjM3LjkyNSAyMDIuMzgxIDIzOS4xMTFMMjU0LjU4OCAyOTEuMzE4QzI1NS41NDIgMjkyLjI3MiAyNTYuODI1IDI5Mi44MDcgMjU4LjE3MSAyOTIuODA3SDI4OS43MTJDMjkxLjM4OSAyOTIuODA3IDI5Mi43NTIgMjkxLjQ0MiAyOTIuNzUyIDI4OS43NjdMMjkyLjc2MiAyODkuNzU4WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTIxNy4wOSAxNTEuMjQ0SDI0NS41MDNDMjQ3LjE4OCAxNTEuMjQ0IDI0OC41NiAxNTIuNjE3IDI0OC41NiAxNTQuMzAyVjE4Mi43MTRDMjQ4LjU2IDE4NS40NDIgMjUxLjg1OSAxODYuODA2IDI1My43ODUgMTg0Ljg3MUwyOTIuNzYxIDE0NS44MzJDMjkzLjMzMSAxNDUuMjYyIDI5My42NTMgMTQ0LjQ4NiAyOTMuNjUzIDE0My42NzVWMTA5LjQ4NkMyOTMuNjUzIDEwNy44MDEgMjkyLjI4OCAxMDYuNDI4IDI5MC41OTUgMTA2LjQyOEwyNTUuODk4IDEwNi4zODNDMjU1LjA4NiAxMDYuMzgzIDI1NC4zMTEgMTA2LjcwNCAyNTMuNzMxIDEwNy4yNzVMMjE0LjkyNCAxNDYuMDJDMjEyLjk5OCAxNDcuOTQ1IDIxNC4zNjIgMTUxLjI0NCAyMTcuMDgxIDE1MS4yNDRIMjE3LjA5WiIgZmlsbD0iI0VFN0EzMCIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzE1NzgxXzY4NzkiPgo8cmVjdCB3aWR0aD0iMTg3LjUiIGhlaWdodD0iMTg3LjUiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDYuMjUgMTA2LjI1KSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=", + light: + "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIiBmaWxsPSIjMTgxODE4Ii8+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xNTc4MV82ODc5KSI+CjxwYXRoIGQ9Ik0yOTIuNzYyIDI4OS43NThWMjU1LjgwOUMyOTIuNzYyIDI1NC40NjMgMjkyLjIyNiAyNTMuMTc5IDI5MS4yNzIgMjUyLjIyNUwxNDYuODIyIDEwNy43NzRDMTQ1Ljg2OSAxMDYuODIxIDE0NC41ODUgMTA2LjI4NiAxNDMuMjM4IDEwNi4yODZIMTA5LjI5QzEwNy42MTQgMTA2LjI4NiAxMDYuMjUgMTA3LjY1IDEwNi4yNSAxMDkuMzI2VjE0MC44NjdDMTA2LjI1IDE0Mi4yMTMgMTA2Ljc4NSAxNDMuNDk3IDEwNy43MzkgMTQ0LjQ1MUwxNTkuNTg5IDE5Ni4zMDFDMTYwLjc3NCAxOTcuNDg3IDE2MC43NzQgMTk5LjQxMiAxNTkuNTg5IDIwMC41OThMMTA3LjE0MiAyNTMuMDQ1QzEwNi41NzEgMjUzLjYxNiAxMDYuMjUgMjU0LjM5MSAxMDYuMjUgMjU1LjE5NFYyODkuNzU4QzEwNi4yNSAyOTEuNDMzIDEwNy42MTQgMjkyLjc5OCAxMDkuMjkgMjkyLjc5OEgxNjYuMDE2QzE2Ny42OTIgMjkyLjc5OCAxNjkuMDU2IDI5MS40MzMgMTY5LjA1NiAyODkuNzU4VjI2OS4zOTVDMTY5LjA1NiAyNjguNTkzIDE2OS4zNzcgMjY3LjgxOCAxNjkuOTQ4IDI2Ny4yNDdMMTk4LjA4NCAyMzkuMTExQzE5OS4yNyAyMzcuOTI1IDIwMS4xOTUgMjM3LjkyNSAyMDIuMzgxIDIzOS4xMTFMMjU0LjU4OCAyOTEuMzE4QzI1NS41NDIgMjkyLjI3MiAyNTYuODI1IDI5Mi44MDcgMjU4LjE3MSAyOTIuODA3SDI4OS43MTJDMjkxLjM4OSAyOTIuODA3IDI5Mi43NTIgMjkxLjQ0MiAyOTIuNzUyIDI4OS43NjdMMjkyLjc2MiAyODkuNzU4WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTIxNy4wOSAxNTEuMjQ0SDI0NS41MDNDMjQ3LjE4OCAxNTEuMjQ0IDI0OC41NiAxNTIuNjE3IDI0OC41NiAxNTQuMzAyVjE4Mi43MTRDMjQ4LjU2IDE4NS40NDIgMjUxLjg1OSAxODYuODA2IDI1My43ODUgMTg0Ljg3MUwyOTIuNzYxIDE0NS44MzJDMjkzLjMzMSAxNDUuMjYyIDI5My42NTMgMTQ0LjQ4NiAyOTMuNjUzIDE0My42NzVWMTA5LjQ4NkMyOTMuNjUzIDEwNy44MDEgMjkyLjI4OCAxMDYuNDI4IDI5MC41OTUgMTA2LjQyOEwyNTUuODk4IDEwNi4zODNDMjU1LjA4NiAxMDYuMzgzIDI1NC4zMTEgMTA2LjcwNCAyNTMuNzMxIDEwNy4yNzVMMjE0LjkyNCAxNDYuMDJDMjEyLjk5OCAxNDcuOTQ1IDIxNC4zNjIgMTUxLjI0NCAyMTcuMDgxIDE1MS4yNDRIMjE3LjA5WiIgZmlsbD0iI0VFN0EzMCIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzE1NzgxXzY4NzkiPgo8cmVjdCB3aWR0aD0iMTg3LjUiIGhlaWdodD0iMTg3LjUiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDYuMjUgMTA2LjI1KSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=", }, }