@wallet-ui/core 4.2.0 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.browser.cjs +12 -6
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.mjs +9 -3
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.development.js +9 -11
- package/dist/index.development.js.map +1 -1
- package/dist/index.native.mjs +9 -3
- package/dist/index.native.mjs.map +1 -1
- package/dist/index.node.cjs +12 -6
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +9 -3
- package/dist/index.node.mjs.map +1 -1
- package/dist/index.production.min.js +1 -1
- package/dist/types/clusters.d.ts +1 -1
- package/dist/types/clusters.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/index.native.mjs
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { devnet, mainnet, testnet } from '@solana/kit';
|
|
2
1
|
import encodeQR from 'qr';
|
|
3
2
|
import { persistentAtom } from '@nanostores/persistent';
|
|
4
3
|
import { computed } from 'nanostores';
|
|
5
4
|
|
|
6
|
-
// src/clusters.ts
|
|
7
|
-
|
|
8
5
|
// src/types/solana-cluster.ts
|
|
9
6
|
function localnet(url) {
|
|
10
7
|
return url;
|
|
@@ -22,6 +19,15 @@ function createSolanaCluster(props, { id, label, url: defaultUrl, urlWs: default
|
|
|
22
19
|
urlWs: props.urlWs ?? defaultUrlWs
|
|
23
20
|
};
|
|
24
21
|
}
|
|
22
|
+
function devnet(url) {
|
|
23
|
+
return url;
|
|
24
|
+
}
|
|
25
|
+
function mainnet(url) {
|
|
26
|
+
return url;
|
|
27
|
+
}
|
|
28
|
+
function testnet(url) {
|
|
29
|
+
return url;
|
|
30
|
+
}
|
|
25
31
|
function createSolanaDevnet(props = "https://api.devnet.solana.com") {
|
|
26
32
|
return createSolanaCluster(props, {
|
|
27
33
|
id: "solana:devnet",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/solana-cluster.ts","../src/clusters.ts","../src/create-qr-code.ts","../src/create-qr-code-svg.ts","../src/storage.ts","../src/create-storage.ts","../src/create-storage-account.ts","../src/create-storage-cluster.ts","../src/get-explorer-url.ts","../src/handle-copy-text.ts","../src/string-to-uint8-array.ts"],"names":[],"mappings":"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","file":"index.native.mjs","sourcesContent":["import type {\n DevnetUrl as SolanaDevnetUrl,\n MainnetUrl as SolanaMainnetUrl,\n TestnetUrl as SolanaTestnetUrl,\n} from '@solana/kit';\n\nimport { SolanaClusterId } from './solana-cluster-id';\n\nexport type { SolanaDevnetUrl, SolanaMainnetUrl, SolanaTestnetUrl };\n\nexport type SolanaLocalnetUrl = string & { '~cluster': 'localnet' };\n\nexport function localnet(url: string) {\n return url as SolanaLocalnetUrl;\n}\n\nexport interface SolanaCluster {\n id: SolanaClusterId;\n label: string;\n url: SolanaDevnetUrl | SolanaLocalnetUrl | SolanaMainnetUrl | SolanaTestnetUrl | string;\n urlWs?: string;\n}\n","import { devnet, mainnet, testnet } from '@solana/kit';\n\nimport { localnet, SolanaCluster } from './types/solana-cluster';\n\nexport type CreateSolanaProps = string | (Partial<Pick<SolanaCluster, 'label' | 'url' | 'urlWs'>> & { url: string });\n\nfunction createSolanaCluster(\n props: CreateSolanaProps,\n { id, label, url: defaultUrl, urlWs: defaultUrlWs }: Pick<SolanaCluster, 'id' | 'label' | 'url' | 'urlWs'>,\n): SolanaCluster {\n if (typeof props === 'string') {\n return { id, label, url: props };\n }\n\n return {\n id,\n label: props.label ?? label,\n url: props.url ?? defaultUrl,\n urlWs: props.urlWs ?? defaultUrlWs,\n };\n}\n\nexport function createSolanaDevnet(props: CreateSolanaProps = 'https://api.devnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:devnet',\n label: 'Devnet',\n url: devnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaLocalnet(props: CreateSolanaProps = 'http://localhost:8899'): SolanaCluster {\n const url = typeof props === 'string' ? props : props.url;\n const urlWs = typeof props !== 'string' ? (props.urlWs ?? getLocalUrlWs(url)) : undefined;\n return createSolanaCluster(props, {\n id: 'solana:localnet',\n label: 'Localnet',\n url: localnet(url),\n urlWs,\n });\n}\n\nfunction getLocalUrlWs(url: string) {\n return url.endsWith(':8899') ? url.replace(':8899', ':8900').replace('http', 'ws') : undefined;\n}\nexport function createSolanaMainnet(props: CreateSolanaProps): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:mainnet',\n label: 'Mainnet',\n url: mainnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaTestnet(props: CreateSolanaProps = 'https://api.testnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:testnet',\n label: 'Testnet',\n url: testnet(typeof props === 'string' ? props : props.url),\n });\n}\n","import encodeQR from 'qr';\n\nexport type QrCodeErrorCorrection = 'high' | 'low' | 'medium' | 'quartile';\n\nexport interface QrCode {\n border: number;\n cells: boolean[][];\n errorCorrection: QrCodeErrorCorrection;\n size: number;\n value: string;\n}\n\nexport interface QrCodeOptions {\n border?: number;\n errorCorrection?: QrCodeErrorCorrection;\n}\n\nconst DEFAULT_QR_CODE_BORDER = 4;\nconst DEFAULT_QR_CODE_ERROR_CORRECTION: QrCodeErrorCorrection = 'medium';\n\nexport function createQrCode(value: string, options: QrCodeOptions = {}): QrCode {\n const border = options.border ?? DEFAULT_QR_CODE_BORDER;\n const errorCorrection = options.errorCorrection ?? DEFAULT_QR_CODE_ERROR_CORRECTION;\n const cells = encodeQR(value, 'raw', { border, ecc: errorCorrection }).map(row => row.map(Boolean));\n\n return {\n border,\n cells,\n errorCorrection,\n size: cells.length,\n value,\n };\n}\n","import { createQrCode, type QrCodeOptions } from './create-qr-code';\n\nexport interface QrCodeLogoOptions {\n backgroundColor?: string;\n href: string;\n size?: number;\n}\n\nexport interface QrCodeSvgOptions extends QrCodeOptions {\n backgroundColor?: string;\n foregroundColor?: string;\n logo?: QrCodeLogoOptions;\n title?: string;\n}\n\nconst DEFAULT_QR_CODE_BACKGROUND_COLOR = '#fff';\nconst DEFAULT_QR_CODE_FOREGROUND_COLOR = '#000';\nconst DEFAULT_QR_CODE_LOGO_SIZE = 0.2;\nconst LOGO_BACKGROUND_PADDING = 1;\nconst MAX_QR_CODE_LOGO_SIZE = 0.25;\n\nexport function createQrCodeSvg(value: string, options: QrCodeSvgOptions = {}): string {\n const backgroundColor = options.backgroundColor ?? DEFAULT_QR_CODE_BACKGROUND_COLOR;\n const foregroundColor = options.foregroundColor ?? DEFAULT_QR_CODE_FOREGROUND_COLOR;\n const logo = options.logo;\n const qrCode = createQrCode(value, {\n border: options.border,\n errorCorrection: options.errorCorrection ?? (logo ? 'high' : undefined),\n });\n const title = options.title ? `<title>${escapeSvgText(options.title)}</title>` : '';\n const background = `<rect fill=\"${escapeSvgAttribute(backgroundColor)}\" height=\"${qrCode.size}\" width=\"${qrCode.size}\" x=\"0\" y=\"0\"/>`;\n const foreground = `<path d=\"${createQrCodeSvgPath(qrCode.cells)}\" fill=\"${escapeSvgAttribute(foregroundColor)}\"/>`;\n const logoSvg = logo ? createQrCodeLogoSvg({ backgroundColor, logo, size: qrCode.size }) : '';\n const accessibility = options.title ? 'role=\"img\"' : 'aria-hidden=\"true\"';\n\n return `<svg ${accessibility} shape-rendering=\"crispEdges\" viewBox=\"0 0 ${qrCode.size} ${qrCode.size}\" xmlns=\"http://www.w3.org/2000/svg\">${title}${background}${foreground}${logoSvg}</svg>`;\n}\n\nfunction createQrCodeLogoSvg({\n backgroundColor,\n logo,\n size,\n}: {\n backgroundColor: string;\n logo: QrCodeLogoOptions;\n size: number;\n}): string {\n const logoSize = size * getQrCodeLogoSize(logo.size);\n const logoPosition = (size - logoSize) / 2;\n const logoBackgroundPosition = Math.max(0, Math.floor(logoPosition) - LOGO_BACKGROUND_PADDING);\n const logoBackgroundEnd = Math.min(size, Math.ceil(logoPosition + logoSize) + LOGO_BACKGROUND_PADDING);\n const logoBackgroundSize = logoBackgroundEnd - logoBackgroundPosition;\n const logoBackgroundColor = logo.backgroundColor ?? backgroundColor;\n\n return [\n `<rect fill=\"${escapeSvgAttribute(logoBackgroundColor)}\" height=\"${formatSvgNumber(logoBackgroundSize)}\" width=\"${formatSvgNumber(logoBackgroundSize)}\" x=\"${formatSvgNumber(logoBackgroundPosition)}\" y=\"${formatSvgNumber(logoBackgroundPosition)}\"/>`,\n `<image height=\"${formatSvgNumber(logoSize)}\" href=\"${escapeSvgAttribute(logo.href)}\" preserveAspectRatio=\"xMidYMid meet\" width=\"${formatSvgNumber(logoSize)}\" x=\"${formatSvgNumber(logoPosition)}\" y=\"${formatSvgNumber(logoPosition)}\"/>`,\n ].join('');\n}\n\nfunction createQrCodeSvgPath(cells: boolean[][]): string {\n return cells\n .flatMap((row, rowIndex) =>\n row.map((cell, columnIndex) => (cell ? `M${columnIndex} ${rowIndex}h1v1H${columnIndex}z` : '')),\n )\n .join('');\n}\n\nfunction escapeSvgAttribute(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\nfunction escapeSvgText(value: string): string {\n return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n}\n\nfunction formatSvgNumber(value: number): string {\n return Number(value.toFixed(6)).toString();\n}\n\nfunction getQrCodeLogoSize(size = DEFAULT_QR_CODE_LOGO_SIZE): number {\n return Math.min(size, MAX_QR_CODE_LOGO_SIZE);\n}\n","import { persistentAtom } from '@nanostores/persistent';\nimport { computed, WritableAtom } from 'nanostores';\n\nexport class Storage<T> {\n private readonly atom: WritableAtom<T>;\n\n constructor(\n readonly key: string,\n readonly initial: T,\n ) {\n this.atom = persistentAtom<T>(key, initial, { decode: JSON.parse, encode: JSON.stringify });\n }\n\n get() {\n return this.atom.get();\n }\n\n set(value: T) {\n this.atom.set(value);\n }\n\n get value() {\n return computed(this.atom, value => value);\n }\n}\n","import { Storage } from './storage';\n\nexport function createStorage<T>({ initial, key }: { initial: T; key: string }) {\n return new Storage(key, initial);\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\n\nexport type StorageAccount = Storage<string | undefined>;\n\nexport function createStorageAccount({\n initial,\n key,\n}: {\n initial?: string | undefined;\n key?: string;\n} = {}): StorageAccount {\n return createStorage<string | undefined>({\n initial,\n key: key ?? 'wallet-ui:account',\n });\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\nimport { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type StorageCluster = Storage<SolanaClusterId>;\n\nexport function createStorageCluster({\n initial,\n key,\n}: {\n initial?: SolanaClusterId;\n key?: string;\n} = {}): StorageCluster {\n return createStorage<SolanaClusterId>({\n initial: initial ?? 'solana:devnet',\n key: key ?? 'wallet-ui:cluster',\n });\n}\n","import { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type ExplorerPath = `/address/${string}` | `/block/${string}` | `/tx/${string}`;\nexport type ExplorerProvider = 'orb' | 'solana' | 'solscan';\nexport const explorerProviders: ExplorerProvider[] = ['solana', 'solscan', 'orb'] as const;\n\nexport interface GetNetworkSuffixProps {\n id: SolanaClusterId;\n url: string;\n}\n\nexport interface GetExplorerUrlProps {\n network: GetNetworkSuffixProps;\n path: ExplorerPath;\n provider: ExplorerProvider;\n}\n\nexport function getExplorerUrl({ network, path, provider }: GetExplorerUrlProps) {\n if (!(path.startsWith('/address') || path.startsWith('/block') || path.startsWith('/tx'))) {\n throw new Error('Invalid path. Must be /address/{address}, /block/{id}, or /tx/{signature}.');\n }\n if (!explorerProviders.includes(provider)) {\n throw new Error(`Invalid provider. Must be one of ${explorerProviders.join(', ')}.`);\n }\n const url = new URL(getExplorerBaseUrl(provider));\n url.pathname = path;\n const params = getExplorerSuffix(network);\n if (params.cluster.length) {\n url.searchParams.set('cluster', params.cluster);\n }\n if (params.customUrl.length) {\n url.searchParams.set('customUrl', params.customUrl);\n }\n return url.toString();\n}\n\nfunction getExplorerBaseUrl(provider: ExplorerProvider) {\n switch (provider) {\n case 'orb':\n return 'https://orbmarkets.io';\n case 'solscan':\n return 'https://solscan.io';\n default:\n return 'https://explorer.solana.com';\n }\n}\n\nfunction getExplorerSuffix(props: GetNetworkSuffixProps): {\n cluster: string;\n customUrl: string;\n} {\n switch (props.id) {\n case 'solana:devnet':\n return { cluster: 'devnet', customUrl: '' };\n case 'solana:localnet':\n return { cluster: 'custom', customUrl: props.url };\n case 'solana:testnet':\n return { cluster: 'testnet', customUrl: '' };\n default:\n return { cluster: '', customUrl: '' };\n }\n}\n","export function handleCopyText(text?: string) {\n if (!text) {\n return;\n }\n if (\n typeof globalThis === 'undefined' ||\n !globalThis.navigator ||\n !globalThis.navigator.clipboard ||\n !globalThis.navigator.clipboard.writeText\n ) {\n return;\n }\n void globalThis.navigator.clipboard.writeText(text);\n}\n","export function stringToUint8Array(value: Uint8Array | string): Uint8Array {\n return value instanceof Uint8Array ? value : new TextEncoder().encode(value);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/solana-cluster.ts","../src/clusters.ts","../src/create-qr-code.ts","../src/create-qr-code-svg.ts","../src/storage.ts","../src/create-storage.ts","../src/create-storage-account.ts","../src/create-storage-cluster.ts","../src/get-explorer-url.ts","../src/handle-copy-text.ts","../src/string-to-uint8-array.ts"],"names":[],"mappings":"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","file":"index.native.mjs","sourcesContent":["import type {\n DevnetUrl as SolanaDevnetUrl,\n MainnetUrl as SolanaMainnetUrl,\n TestnetUrl as SolanaTestnetUrl,\n} from '@solana/kit';\n\nimport { SolanaClusterId } from './solana-cluster-id';\n\nexport type { SolanaDevnetUrl, SolanaMainnetUrl, SolanaTestnetUrl };\n\nexport type SolanaLocalnetUrl = string & { '~cluster': 'localnet' };\n\nexport function localnet(url: string) {\n return url as SolanaLocalnetUrl;\n}\n\nexport interface SolanaCluster {\n id: SolanaClusterId;\n label: string;\n url: SolanaDevnetUrl | SolanaLocalnetUrl | SolanaMainnetUrl | SolanaTestnetUrl | string;\n urlWs?: string;\n}\n","import {\n localnet,\n type SolanaCluster,\n type SolanaDevnetUrl,\n type SolanaMainnetUrl,\n type SolanaTestnetUrl,\n} from './types/solana-cluster';\n\nexport type CreateSolanaProps = string | (Partial<Pick<SolanaCluster, 'label' | 'url' | 'urlWs'>> & { url: string });\n\nfunction createSolanaCluster(\n props: CreateSolanaProps,\n { id, label, url: defaultUrl, urlWs: defaultUrlWs }: Pick<SolanaCluster, 'id' | 'label' | 'url' | 'urlWs'>,\n): SolanaCluster {\n if (typeof props === 'string') {\n return { id, label, url: props };\n }\n\n return {\n id,\n label: props.label ?? label,\n url: props.url ?? defaultUrl,\n urlWs: props.urlWs ?? defaultUrlWs,\n };\n}\n\nfunction devnet(url: string) {\n return url as SolanaDevnetUrl;\n}\n\nfunction mainnet(url: string) {\n return url as SolanaMainnetUrl;\n}\n\nfunction testnet(url: string) {\n return url as SolanaTestnetUrl;\n}\n\nexport function createSolanaDevnet(props: CreateSolanaProps = 'https://api.devnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:devnet',\n label: 'Devnet',\n url: devnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaLocalnet(props: CreateSolanaProps = 'http://localhost:8899'): SolanaCluster {\n const url = typeof props === 'string' ? props : props.url;\n const urlWs = typeof props !== 'string' ? (props.urlWs ?? getLocalUrlWs(url)) : undefined;\n return createSolanaCluster(props, {\n id: 'solana:localnet',\n label: 'Localnet',\n url: localnet(url),\n urlWs,\n });\n}\n\nfunction getLocalUrlWs(url: string) {\n return url.endsWith(':8899') ? url.replace(':8899', ':8900').replace('http', 'ws') : undefined;\n}\nexport function createSolanaMainnet(props: CreateSolanaProps): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:mainnet',\n label: 'Mainnet',\n url: mainnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaTestnet(props: CreateSolanaProps = 'https://api.testnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:testnet',\n label: 'Testnet',\n url: testnet(typeof props === 'string' ? props : props.url),\n });\n}\n","import encodeQR from 'qr';\n\nexport type QrCodeErrorCorrection = 'high' | 'low' | 'medium' | 'quartile';\n\nexport interface QrCode {\n border: number;\n cells: boolean[][];\n errorCorrection: QrCodeErrorCorrection;\n size: number;\n value: string;\n}\n\nexport interface QrCodeOptions {\n border?: number;\n errorCorrection?: QrCodeErrorCorrection;\n}\n\nconst DEFAULT_QR_CODE_BORDER = 4;\nconst DEFAULT_QR_CODE_ERROR_CORRECTION: QrCodeErrorCorrection = 'medium';\n\nexport function createQrCode(value: string, options: QrCodeOptions = {}): QrCode {\n const border = options.border ?? DEFAULT_QR_CODE_BORDER;\n const errorCorrection = options.errorCorrection ?? DEFAULT_QR_CODE_ERROR_CORRECTION;\n const cells = encodeQR(value, 'raw', { border, ecc: errorCorrection }).map(row => row.map(Boolean));\n\n return {\n border,\n cells,\n errorCorrection,\n size: cells.length,\n value,\n };\n}\n","import { createQrCode, type QrCodeOptions } from './create-qr-code';\n\nexport interface QrCodeLogoOptions {\n backgroundColor?: string;\n href: string;\n size?: number;\n}\n\nexport interface QrCodeSvgOptions extends QrCodeOptions {\n backgroundColor?: string;\n foregroundColor?: string;\n logo?: QrCodeLogoOptions;\n title?: string;\n}\n\nconst DEFAULT_QR_CODE_BACKGROUND_COLOR = '#fff';\nconst DEFAULT_QR_CODE_FOREGROUND_COLOR = '#000';\nconst DEFAULT_QR_CODE_LOGO_SIZE = 0.2;\nconst LOGO_BACKGROUND_PADDING = 1;\nconst MAX_QR_CODE_LOGO_SIZE = 0.25;\n\nexport function createQrCodeSvg(value: string, options: QrCodeSvgOptions = {}): string {\n const backgroundColor = options.backgroundColor ?? DEFAULT_QR_CODE_BACKGROUND_COLOR;\n const foregroundColor = options.foregroundColor ?? DEFAULT_QR_CODE_FOREGROUND_COLOR;\n const logo = options.logo;\n const qrCode = createQrCode(value, {\n border: options.border,\n errorCorrection: options.errorCorrection ?? (logo ? 'high' : undefined),\n });\n const title = options.title ? `<title>${escapeSvgText(options.title)}</title>` : '';\n const background = `<rect fill=\"${escapeSvgAttribute(backgroundColor)}\" height=\"${qrCode.size}\" width=\"${qrCode.size}\" x=\"0\" y=\"0\"/>`;\n const foreground = `<path d=\"${createQrCodeSvgPath(qrCode.cells)}\" fill=\"${escapeSvgAttribute(foregroundColor)}\"/>`;\n const logoSvg = logo ? createQrCodeLogoSvg({ backgroundColor, logo, size: qrCode.size }) : '';\n const accessibility = options.title ? 'role=\"img\"' : 'aria-hidden=\"true\"';\n\n return `<svg ${accessibility} shape-rendering=\"crispEdges\" viewBox=\"0 0 ${qrCode.size} ${qrCode.size}\" xmlns=\"http://www.w3.org/2000/svg\">${title}${background}${foreground}${logoSvg}</svg>`;\n}\n\nfunction createQrCodeLogoSvg({\n backgroundColor,\n logo,\n size,\n}: {\n backgroundColor: string;\n logo: QrCodeLogoOptions;\n size: number;\n}): string {\n const logoSize = size * getQrCodeLogoSize(logo.size);\n const logoPosition = (size - logoSize) / 2;\n const logoBackgroundPosition = Math.max(0, Math.floor(logoPosition) - LOGO_BACKGROUND_PADDING);\n const logoBackgroundEnd = Math.min(size, Math.ceil(logoPosition + logoSize) + LOGO_BACKGROUND_PADDING);\n const logoBackgroundSize = logoBackgroundEnd - logoBackgroundPosition;\n const logoBackgroundColor = logo.backgroundColor ?? backgroundColor;\n\n return [\n `<rect fill=\"${escapeSvgAttribute(logoBackgroundColor)}\" height=\"${formatSvgNumber(logoBackgroundSize)}\" width=\"${formatSvgNumber(logoBackgroundSize)}\" x=\"${formatSvgNumber(logoBackgroundPosition)}\" y=\"${formatSvgNumber(logoBackgroundPosition)}\"/>`,\n `<image height=\"${formatSvgNumber(logoSize)}\" href=\"${escapeSvgAttribute(logo.href)}\" preserveAspectRatio=\"xMidYMid meet\" width=\"${formatSvgNumber(logoSize)}\" x=\"${formatSvgNumber(logoPosition)}\" y=\"${formatSvgNumber(logoPosition)}\"/>`,\n ].join('');\n}\n\nfunction createQrCodeSvgPath(cells: boolean[][]): string {\n return cells\n .flatMap((row, rowIndex) =>\n row.map((cell, columnIndex) => (cell ? `M${columnIndex} ${rowIndex}h1v1H${columnIndex}z` : '')),\n )\n .join('');\n}\n\nfunction escapeSvgAttribute(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\nfunction escapeSvgText(value: string): string {\n return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n}\n\nfunction formatSvgNumber(value: number): string {\n return Number(value.toFixed(6)).toString();\n}\n\nfunction getQrCodeLogoSize(size = DEFAULT_QR_CODE_LOGO_SIZE): number {\n return Math.min(size, MAX_QR_CODE_LOGO_SIZE);\n}\n","import { persistentAtom } from '@nanostores/persistent';\nimport { computed, WritableAtom } from 'nanostores';\n\nexport class Storage<T> {\n private readonly atom: WritableAtom<T>;\n\n constructor(\n readonly key: string,\n readonly initial: T,\n ) {\n this.atom = persistentAtom<T>(key, initial, { decode: JSON.parse, encode: JSON.stringify });\n }\n\n get() {\n return this.atom.get();\n }\n\n set(value: T) {\n this.atom.set(value);\n }\n\n get value() {\n return computed(this.atom, value => value);\n }\n}\n","import { Storage } from './storage';\n\nexport function createStorage<T>({ initial, key }: { initial: T; key: string }) {\n return new Storage(key, initial);\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\n\nexport type StorageAccount = Storage<string | undefined>;\n\nexport function createStorageAccount({\n initial,\n key,\n}: {\n initial?: string | undefined;\n key?: string;\n} = {}): StorageAccount {\n return createStorage<string | undefined>({\n initial,\n key: key ?? 'wallet-ui:account',\n });\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\nimport { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type StorageCluster = Storage<SolanaClusterId>;\n\nexport function createStorageCluster({\n initial,\n key,\n}: {\n initial?: SolanaClusterId;\n key?: string;\n} = {}): StorageCluster {\n return createStorage<SolanaClusterId>({\n initial: initial ?? 'solana:devnet',\n key: key ?? 'wallet-ui:cluster',\n });\n}\n","import { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type ExplorerPath = `/address/${string}` | `/block/${string}` | `/tx/${string}`;\nexport type ExplorerProvider = 'orb' | 'solana' | 'solscan';\nexport const explorerProviders: ExplorerProvider[] = ['solana', 'solscan', 'orb'] as const;\n\nexport interface GetNetworkSuffixProps {\n id: SolanaClusterId;\n url: string;\n}\n\nexport interface GetExplorerUrlProps {\n network: GetNetworkSuffixProps;\n path: ExplorerPath;\n provider: ExplorerProvider;\n}\n\nexport function getExplorerUrl({ network, path, provider }: GetExplorerUrlProps) {\n if (!(path.startsWith('/address') || path.startsWith('/block') || path.startsWith('/tx'))) {\n throw new Error('Invalid path. Must be /address/{address}, /block/{id}, or /tx/{signature}.');\n }\n if (!explorerProviders.includes(provider)) {\n throw new Error(`Invalid provider. Must be one of ${explorerProviders.join(', ')}.`);\n }\n const url = new URL(getExplorerBaseUrl(provider));\n url.pathname = path;\n const params = getExplorerSuffix(network);\n if (params.cluster.length) {\n url.searchParams.set('cluster', params.cluster);\n }\n if (params.customUrl.length) {\n url.searchParams.set('customUrl', params.customUrl);\n }\n return url.toString();\n}\n\nfunction getExplorerBaseUrl(provider: ExplorerProvider) {\n switch (provider) {\n case 'orb':\n return 'https://orbmarkets.io';\n case 'solscan':\n return 'https://solscan.io';\n default:\n return 'https://explorer.solana.com';\n }\n}\n\nfunction getExplorerSuffix(props: GetNetworkSuffixProps): {\n cluster: string;\n customUrl: string;\n} {\n switch (props.id) {\n case 'solana:devnet':\n return { cluster: 'devnet', customUrl: '' };\n case 'solana:localnet':\n return { cluster: 'custom', customUrl: props.url };\n case 'solana:testnet':\n return { cluster: 'testnet', customUrl: '' };\n default:\n return { cluster: '', customUrl: '' };\n }\n}\n","export function handleCopyText(text?: string) {\n if (!text) {\n return;\n }\n if (\n typeof globalThis === 'undefined' ||\n !globalThis.navigator ||\n !globalThis.navigator.clipboard ||\n !globalThis.navigator.clipboard.writeText\n ) {\n return;\n }\n void globalThis.navigator.clipboard.writeText(text);\n}\n","export function stringToUint8Array(value: Uint8Array | string): Uint8Array {\n return value instanceof Uint8Array ? value : new TextEncoder().encode(value);\n}\n"]}
|
package/dist/index.node.cjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var kit = require('@solana/kit');
|
|
4
3
|
var encodeQR = require('qr');
|
|
5
4
|
var persistent = require('@nanostores/persistent');
|
|
6
5
|
var nanostores = require('nanostores');
|
|
@@ -9,8 +8,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
9
8
|
|
|
10
9
|
var encodeQR__default = /*#__PURE__*/_interopDefault(encodeQR);
|
|
11
10
|
|
|
12
|
-
// src/clusters.ts
|
|
13
|
-
|
|
14
11
|
// src/types/solana-cluster.ts
|
|
15
12
|
function localnet(url) {
|
|
16
13
|
return url;
|
|
@@ -28,11 +25,20 @@ function createSolanaCluster(props, { id, label, url: defaultUrl, urlWs: default
|
|
|
28
25
|
urlWs: props.urlWs ?? defaultUrlWs
|
|
29
26
|
};
|
|
30
27
|
}
|
|
28
|
+
function devnet(url) {
|
|
29
|
+
return url;
|
|
30
|
+
}
|
|
31
|
+
function mainnet(url) {
|
|
32
|
+
return url;
|
|
33
|
+
}
|
|
34
|
+
function testnet(url) {
|
|
35
|
+
return url;
|
|
36
|
+
}
|
|
31
37
|
function createSolanaDevnet(props = "https://api.devnet.solana.com") {
|
|
32
38
|
return createSolanaCluster(props, {
|
|
33
39
|
id: "solana:devnet",
|
|
34
40
|
label: "Devnet",
|
|
35
|
-
url:
|
|
41
|
+
url: devnet(typeof props === "string" ? props : props.url)
|
|
36
42
|
});
|
|
37
43
|
}
|
|
38
44
|
function createSolanaLocalnet(props = "http://localhost:8899") {
|
|
@@ -52,14 +58,14 @@ function createSolanaMainnet(props) {
|
|
|
52
58
|
return createSolanaCluster(props, {
|
|
53
59
|
id: "solana:mainnet",
|
|
54
60
|
label: "Mainnet",
|
|
55
|
-
url:
|
|
61
|
+
url: mainnet(typeof props === "string" ? props : props.url)
|
|
56
62
|
});
|
|
57
63
|
}
|
|
58
64
|
function createSolanaTestnet(props = "https://api.testnet.solana.com") {
|
|
59
65
|
return createSolanaCluster(props, {
|
|
60
66
|
id: "solana:testnet",
|
|
61
67
|
label: "Testnet",
|
|
62
|
-
url:
|
|
68
|
+
url: testnet(typeof props === "string" ? props : props.url)
|
|
63
69
|
});
|
|
64
70
|
}
|
|
65
71
|
var DEFAULT_QR_CODE_BORDER = 4;
|
package/dist/index.node.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/solana-cluster.ts","../src/clusters.ts","../src/create-qr-code.ts","../src/create-qr-code-svg.ts","../src/storage.ts","../src/create-storage.ts","../src/create-storage-account.ts","../src/create-storage-cluster.ts","../src/get-explorer-url.ts","../src/handle-copy-text.ts","../src/string-to-uint8-array.ts"],"names":["devnet","mainnet","testnet","encodeQR","persistentAtom","computed"],"mappings":"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","file":"index.node.cjs","sourcesContent":["import type {\n DevnetUrl as SolanaDevnetUrl,\n MainnetUrl as SolanaMainnetUrl,\n TestnetUrl as SolanaTestnetUrl,\n} from '@solana/kit';\n\nimport { SolanaClusterId } from './solana-cluster-id';\n\nexport type { SolanaDevnetUrl, SolanaMainnetUrl, SolanaTestnetUrl };\n\nexport type SolanaLocalnetUrl = string & { '~cluster': 'localnet' };\n\nexport function localnet(url: string) {\n return url as SolanaLocalnetUrl;\n}\n\nexport interface SolanaCluster {\n id: SolanaClusterId;\n label: string;\n url: SolanaDevnetUrl | SolanaLocalnetUrl | SolanaMainnetUrl | SolanaTestnetUrl | string;\n urlWs?: string;\n}\n","import { devnet, mainnet, testnet } from '@solana/kit';\n\nimport { localnet, SolanaCluster } from './types/solana-cluster';\n\nexport type CreateSolanaProps = string | (Partial<Pick<SolanaCluster, 'label' | 'url' | 'urlWs'>> & { url: string });\n\nfunction createSolanaCluster(\n props: CreateSolanaProps,\n { id, label, url: defaultUrl, urlWs: defaultUrlWs }: Pick<SolanaCluster, 'id' | 'label' | 'url' | 'urlWs'>,\n): SolanaCluster {\n if (typeof props === 'string') {\n return { id, label, url: props };\n }\n\n return {\n id,\n label: props.label ?? label,\n url: props.url ?? defaultUrl,\n urlWs: props.urlWs ?? defaultUrlWs,\n };\n}\n\nexport function createSolanaDevnet(props: CreateSolanaProps = 'https://api.devnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:devnet',\n label: 'Devnet',\n url: devnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaLocalnet(props: CreateSolanaProps = 'http://localhost:8899'): SolanaCluster {\n const url = typeof props === 'string' ? props : props.url;\n const urlWs = typeof props !== 'string' ? (props.urlWs ?? getLocalUrlWs(url)) : undefined;\n return createSolanaCluster(props, {\n id: 'solana:localnet',\n label: 'Localnet',\n url: localnet(url),\n urlWs,\n });\n}\n\nfunction getLocalUrlWs(url: string) {\n return url.endsWith(':8899') ? url.replace(':8899', ':8900').replace('http', 'ws') : undefined;\n}\nexport function createSolanaMainnet(props: CreateSolanaProps): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:mainnet',\n label: 'Mainnet',\n url: mainnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaTestnet(props: CreateSolanaProps = 'https://api.testnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:testnet',\n label: 'Testnet',\n url: testnet(typeof props === 'string' ? props : props.url),\n });\n}\n","import encodeQR from 'qr';\n\nexport type QrCodeErrorCorrection = 'high' | 'low' | 'medium' | 'quartile';\n\nexport interface QrCode {\n border: number;\n cells: boolean[][];\n errorCorrection: QrCodeErrorCorrection;\n size: number;\n value: string;\n}\n\nexport interface QrCodeOptions {\n border?: number;\n errorCorrection?: QrCodeErrorCorrection;\n}\n\nconst DEFAULT_QR_CODE_BORDER = 4;\nconst DEFAULT_QR_CODE_ERROR_CORRECTION: QrCodeErrorCorrection = 'medium';\n\nexport function createQrCode(value: string, options: QrCodeOptions = {}): QrCode {\n const border = options.border ?? DEFAULT_QR_CODE_BORDER;\n const errorCorrection = options.errorCorrection ?? DEFAULT_QR_CODE_ERROR_CORRECTION;\n const cells = encodeQR(value, 'raw', { border, ecc: errorCorrection }).map(row => row.map(Boolean));\n\n return {\n border,\n cells,\n errorCorrection,\n size: cells.length,\n value,\n };\n}\n","import { createQrCode, type QrCodeOptions } from './create-qr-code';\n\nexport interface QrCodeLogoOptions {\n backgroundColor?: string;\n href: string;\n size?: number;\n}\n\nexport interface QrCodeSvgOptions extends QrCodeOptions {\n backgroundColor?: string;\n foregroundColor?: string;\n logo?: QrCodeLogoOptions;\n title?: string;\n}\n\nconst DEFAULT_QR_CODE_BACKGROUND_COLOR = '#fff';\nconst DEFAULT_QR_CODE_FOREGROUND_COLOR = '#000';\nconst DEFAULT_QR_CODE_LOGO_SIZE = 0.2;\nconst LOGO_BACKGROUND_PADDING = 1;\nconst MAX_QR_CODE_LOGO_SIZE = 0.25;\n\nexport function createQrCodeSvg(value: string, options: QrCodeSvgOptions = {}): string {\n const backgroundColor = options.backgroundColor ?? DEFAULT_QR_CODE_BACKGROUND_COLOR;\n const foregroundColor = options.foregroundColor ?? DEFAULT_QR_CODE_FOREGROUND_COLOR;\n const logo = options.logo;\n const qrCode = createQrCode(value, {\n border: options.border,\n errorCorrection: options.errorCorrection ?? (logo ? 'high' : undefined),\n });\n const title = options.title ? `<title>${escapeSvgText(options.title)}</title>` : '';\n const background = `<rect fill=\"${escapeSvgAttribute(backgroundColor)}\" height=\"${qrCode.size}\" width=\"${qrCode.size}\" x=\"0\" y=\"0\"/>`;\n const foreground = `<path d=\"${createQrCodeSvgPath(qrCode.cells)}\" fill=\"${escapeSvgAttribute(foregroundColor)}\"/>`;\n const logoSvg = logo ? createQrCodeLogoSvg({ backgroundColor, logo, size: qrCode.size }) : '';\n const accessibility = options.title ? 'role=\"img\"' : 'aria-hidden=\"true\"';\n\n return `<svg ${accessibility} shape-rendering=\"crispEdges\" viewBox=\"0 0 ${qrCode.size} ${qrCode.size}\" xmlns=\"http://www.w3.org/2000/svg\">${title}${background}${foreground}${logoSvg}</svg>`;\n}\n\nfunction createQrCodeLogoSvg({\n backgroundColor,\n logo,\n size,\n}: {\n backgroundColor: string;\n logo: QrCodeLogoOptions;\n size: number;\n}): string {\n const logoSize = size * getQrCodeLogoSize(logo.size);\n const logoPosition = (size - logoSize) / 2;\n const logoBackgroundPosition = Math.max(0, Math.floor(logoPosition) - LOGO_BACKGROUND_PADDING);\n const logoBackgroundEnd = Math.min(size, Math.ceil(logoPosition + logoSize) + LOGO_BACKGROUND_PADDING);\n const logoBackgroundSize = logoBackgroundEnd - logoBackgroundPosition;\n const logoBackgroundColor = logo.backgroundColor ?? backgroundColor;\n\n return [\n `<rect fill=\"${escapeSvgAttribute(logoBackgroundColor)}\" height=\"${formatSvgNumber(logoBackgroundSize)}\" width=\"${formatSvgNumber(logoBackgroundSize)}\" x=\"${formatSvgNumber(logoBackgroundPosition)}\" y=\"${formatSvgNumber(logoBackgroundPosition)}\"/>`,\n `<image height=\"${formatSvgNumber(logoSize)}\" href=\"${escapeSvgAttribute(logo.href)}\" preserveAspectRatio=\"xMidYMid meet\" width=\"${formatSvgNumber(logoSize)}\" x=\"${formatSvgNumber(logoPosition)}\" y=\"${formatSvgNumber(logoPosition)}\"/>`,\n ].join('');\n}\n\nfunction createQrCodeSvgPath(cells: boolean[][]): string {\n return cells\n .flatMap((row, rowIndex) =>\n row.map((cell, columnIndex) => (cell ? `M${columnIndex} ${rowIndex}h1v1H${columnIndex}z` : '')),\n )\n .join('');\n}\n\nfunction escapeSvgAttribute(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\nfunction escapeSvgText(value: string): string {\n return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n}\n\nfunction formatSvgNumber(value: number): string {\n return Number(value.toFixed(6)).toString();\n}\n\nfunction getQrCodeLogoSize(size = DEFAULT_QR_CODE_LOGO_SIZE): number {\n return Math.min(size, MAX_QR_CODE_LOGO_SIZE);\n}\n","import { persistentAtom } from '@nanostores/persistent';\nimport { computed, WritableAtom } from 'nanostores';\n\nexport class Storage<T> {\n private readonly atom: WritableAtom<T>;\n\n constructor(\n readonly key: string,\n readonly initial: T,\n ) {\n this.atom = persistentAtom<T>(key, initial, { decode: JSON.parse, encode: JSON.stringify });\n }\n\n get() {\n return this.atom.get();\n }\n\n set(value: T) {\n this.atom.set(value);\n }\n\n get value() {\n return computed(this.atom, value => value);\n }\n}\n","import { Storage } from './storage';\n\nexport function createStorage<T>({ initial, key }: { initial: T; key: string }) {\n return new Storage(key, initial);\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\n\nexport type StorageAccount = Storage<string | undefined>;\n\nexport function createStorageAccount({\n initial,\n key,\n}: {\n initial?: string | undefined;\n key?: string;\n} = {}): StorageAccount {\n return createStorage<string | undefined>({\n initial,\n key: key ?? 'wallet-ui:account',\n });\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\nimport { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type StorageCluster = Storage<SolanaClusterId>;\n\nexport function createStorageCluster({\n initial,\n key,\n}: {\n initial?: SolanaClusterId;\n key?: string;\n} = {}): StorageCluster {\n return createStorage<SolanaClusterId>({\n initial: initial ?? 'solana:devnet',\n key: key ?? 'wallet-ui:cluster',\n });\n}\n","import { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type ExplorerPath = `/address/${string}` | `/block/${string}` | `/tx/${string}`;\nexport type ExplorerProvider = 'orb' | 'solana' | 'solscan';\nexport const explorerProviders: ExplorerProvider[] = ['solana', 'solscan', 'orb'] as const;\n\nexport interface GetNetworkSuffixProps {\n id: SolanaClusterId;\n url: string;\n}\n\nexport interface GetExplorerUrlProps {\n network: GetNetworkSuffixProps;\n path: ExplorerPath;\n provider: ExplorerProvider;\n}\n\nexport function getExplorerUrl({ network, path, provider }: GetExplorerUrlProps) {\n if (!(path.startsWith('/address') || path.startsWith('/block') || path.startsWith('/tx'))) {\n throw new Error('Invalid path. Must be /address/{address}, /block/{id}, or /tx/{signature}.');\n }\n if (!explorerProviders.includes(provider)) {\n throw new Error(`Invalid provider. Must be one of ${explorerProviders.join(', ')}.`);\n }\n const url = new URL(getExplorerBaseUrl(provider));\n url.pathname = path;\n const params = getExplorerSuffix(network);\n if (params.cluster.length) {\n url.searchParams.set('cluster', params.cluster);\n }\n if (params.customUrl.length) {\n url.searchParams.set('customUrl', params.customUrl);\n }\n return url.toString();\n}\n\nfunction getExplorerBaseUrl(provider: ExplorerProvider) {\n switch (provider) {\n case 'orb':\n return 'https://orbmarkets.io';\n case 'solscan':\n return 'https://solscan.io';\n default:\n return 'https://explorer.solana.com';\n }\n}\n\nfunction getExplorerSuffix(props: GetNetworkSuffixProps): {\n cluster: string;\n customUrl: string;\n} {\n switch (props.id) {\n case 'solana:devnet':\n return { cluster: 'devnet', customUrl: '' };\n case 'solana:localnet':\n return { cluster: 'custom', customUrl: props.url };\n case 'solana:testnet':\n return { cluster: 'testnet', customUrl: '' };\n default:\n return { cluster: '', customUrl: '' };\n }\n}\n","export function handleCopyText(text?: string) {\n if (!text) {\n return;\n }\n if (\n typeof globalThis === 'undefined' ||\n !globalThis.navigator ||\n !globalThis.navigator.clipboard ||\n !globalThis.navigator.clipboard.writeText\n ) {\n return;\n }\n void globalThis.navigator.clipboard.writeText(text);\n}\n","export function stringToUint8Array(value: Uint8Array | string): Uint8Array {\n return value instanceof Uint8Array ? value : new TextEncoder().encode(value);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/solana-cluster.ts","../src/clusters.ts","../src/create-qr-code.ts","../src/create-qr-code-svg.ts","../src/storage.ts","../src/create-storage.ts","../src/create-storage-account.ts","../src/create-storage-cluster.ts","../src/get-explorer-url.ts","../src/handle-copy-text.ts","../src/string-to-uint8-array.ts"],"names":["encodeQR","persistentAtom","computed"],"mappings":"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","file":"index.node.cjs","sourcesContent":["import type {\n DevnetUrl as SolanaDevnetUrl,\n MainnetUrl as SolanaMainnetUrl,\n TestnetUrl as SolanaTestnetUrl,\n} from '@solana/kit';\n\nimport { SolanaClusterId } from './solana-cluster-id';\n\nexport type { SolanaDevnetUrl, SolanaMainnetUrl, SolanaTestnetUrl };\n\nexport type SolanaLocalnetUrl = string & { '~cluster': 'localnet' };\n\nexport function localnet(url: string) {\n return url as SolanaLocalnetUrl;\n}\n\nexport interface SolanaCluster {\n id: SolanaClusterId;\n label: string;\n url: SolanaDevnetUrl | SolanaLocalnetUrl | SolanaMainnetUrl | SolanaTestnetUrl | string;\n urlWs?: string;\n}\n","import {\n localnet,\n type SolanaCluster,\n type SolanaDevnetUrl,\n type SolanaMainnetUrl,\n type SolanaTestnetUrl,\n} from './types/solana-cluster';\n\nexport type CreateSolanaProps = string | (Partial<Pick<SolanaCluster, 'label' | 'url' | 'urlWs'>> & { url: string });\n\nfunction createSolanaCluster(\n props: CreateSolanaProps,\n { id, label, url: defaultUrl, urlWs: defaultUrlWs }: Pick<SolanaCluster, 'id' | 'label' | 'url' | 'urlWs'>,\n): SolanaCluster {\n if (typeof props === 'string') {\n return { id, label, url: props };\n }\n\n return {\n id,\n label: props.label ?? label,\n url: props.url ?? defaultUrl,\n urlWs: props.urlWs ?? defaultUrlWs,\n };\n}\n\nfunction devnet(url: string) {\n return url as SolanaDevnetUrl;\n}\n\nfunction mainnet(url: string) {\n return url as SolanaMainnetUrl;\n}\n\nfunction testnet(url: string) {\n return url as SolanaTestnetUrl;\n}\n\nexport function createSolanaDevnet(props: CreateSolanaProps = 'https://api.devnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:devnet',\n label: 'Devnet',\n url: devnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaLocalnet(props: CreateSolanaProps = 'http://localhost:8899'): SolanaCluster {\n const url = typeof props === 'string' ? props : props.url;\n const urlWs = typeof props !== 'string' ? (props.urlWs ?? getLocalUrlWs(url)) : undefined;\n return createSolanaCluster(props, {\n id: 'solana:localnet',\n label: 'Localnet',\n url: localnet(url),\n urlWs,\n });\n}\n\nfunction getLocalUrlWs(url: string) {\n return url.endsWith(':8899') ? url.replace(':8899', ':8900').replace('http', 'ws') : undefined;\n}\nexport function createSolanaMainnet(props: CreateSolanaProps): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:mainnet',\n label: 'Mainnet',\n url: mainnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaTestnet(props: CreateSolanaProps = 'https://api.testnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:testnet',\n label: 'Testnet',\n url: testnet(typeof props === 'string' ? props : props.url),\n });\n}\n","import encodeQR from 'qr';\n\nexport type QrCodeErrorCorrection = 'high' | 'low' | 'medium' | 'quartile';\n\nexport interface QrCode {\n border: number;\n cells: boolean[][];\n errorCorrection: QrCodeErrorCorrection;\n size: number;\n value: string;\n}\n\nexport interface QrCodeOptions {\n border?: number;\n errorCorrection?: QrCodeErrorCorrection;\n}\n\nconst DEFAULT_QR_CODE_BORDER = 4;\nconst DEFAULT_QR_CODE_ERROR_CORRECTION: QrCodeErrorCorrection = 'medium';\n\nexport function createQrCode(value: string, options: QrCodeOptions = {}): QrCode {\n const border = options.border ?? DEFAULT_QR_CODE_BORDER;\n const errorCorrection = options.errorCorrection ?? DEFAULT_QR_CODE_ERROR_CORRECTION;\n const cells = encodeQR(value, 'raw', { border, ecc: errorCorrection }).map(row => row.map(Boolean));\n\n return {\n border,\n cells,\n errorCorrection,\n size: cells.length,\n value,\n };\n}\n","import { createQrCode, type QrCodeOptions } from './create-qr-code';\n\nexport interface QrCodeLogoOptions {\n backgroundColor?: string;\n href: string;\n size?: number;\n}\n\nexport interface QrCodeSvgOptions extends QrCodeOptions {\n backgroundColor?: string;\n foregroundColor?: string;\n logo?: QrCodeLogoOptions;\n title?: string;\n}\n\nconst DEFAULT_QR_CODE_BACKGROUND_COLOR = '#fff';\nconst DEFAULT_QR_CODE_FOREGROUND_COLOR = '#000';\nconst DEFAULT_QR_CODE_LOGO_SIZE = 0.2;\nconst LOGO_BACKGROUND_PADDING = 1;\nconst MAX_QR_CODE_LOGO_SIZE = 0.25;\n\nexport function createQrCodeSvg(value: string, options: QrCodeSvgOptions = {}): string {\n const backgroundColor = options.backgroundColor ?? DEFAULT_QR_CODE_BACKGROUND_COLOR;\n const foregroundColor = options.foregroundColor ?? DEFAULT_QR_CODE_FOREGROUND_COLOR;\n const logo = options.logo;\n const qrCode = createQrCode(value, {\n border: options.border,\n errorCorrection: options.errorCorrection ?? (logo ? 'high' : undefined),\n });\n const title = options.title ? `<title>${escapeSvgText(options.title)}</title>` : '';\n const background = `<rect fill=\"${escapeSvgAttribute(backgroundColor)}\" height=\"${qrCode.size}\" width=\"${qrCode.size}\" x=\"0\" y=\"0\"/>`;\n const foreground = `<path d=\"${createQrCodeSvgPath(qrCode.cells)}\" fill=\"${escapeSvgAttribute(foregroundColor)}\"/>`;\n const logoSvg = logo ? createQrCodeLogoSvg({ backgroundColor, logo, size: qrCode.size }) : '';\n const accessibility = options.title ? 'role=\"img\"' : 'aria-hidden=\"true\"';\n\n return `<svg ${accessibility} shape-rendering=\"crispEdges\" viewBox=\"0 0 ${qrCode.size} ${qrCode.size}\" xmlns=\"http://www.w3.org/2000/svg\">${title}${background}${foreground}${logoSvg}</svg>`;\n}\n\nfunction createQrCodeLogoSvg({\n backgroundColor,\n logo,\n size,\n}: {\n backgroundColor: string;\n logo: QrCodeLogoOptions;\n size: number;\n}): string {\n const logoSize = size * getQrCodeLogoSize(logo.size);\n const logoPosition = (size - logoSize) / 2;\n const logoBackgroundPosition = Math.max(0, Math.floor(logoPosition) - LOGO_BACKGROUND_PADDING);\n const logoBackgroundEnd = Math.min(size, Math.ceil(logoPosition + logoSize) + LOGO_BACKGROUND_PADDING);\n const logoBackgroundSize = logoBackgroundEnd - logoBackgroundPosition;\n const logoBackgroundColor = logo.backgroundColor ?? backgroundColor;\n\n return [\n `<rect fill=\"${escapeSvgAttribute(logoBackgroundColor)}\" height=\"${formatSvgNumber(logoBackgroundSize)}\" width=\"${formatSvgNumber(logoBackgroundSize)}\" x=\"${formatSvgNumber(logoBackgroundPosition)}\" y=\"${formatSvgNumber(logoBackgroundPosition)}\"/>`,\n `<image height=\"${formatSvgNumber(logoSize)}\" href=\"${escapeSvgAttribute(logo.href)}\" preserveAspectRatio=\"xMidYMid meet\" width=\"${formatSvgNumber(logoSize)}\" x=\"${formatSvgNumber(logoPosition)}\" y=\"${formatSvgNumber(logoPosition)}\"/>`,\n ].join('');\n}\n\nfunction createQrCodeSvgPath(cells: boolean[][]): string {\n return cells\n .flatMap((row, rowIndex) =>\n row.map((cell, columnIndex) => (cell ? `M${columnIndex} ${rowIndex}h1v1H${columnIndex}z` : '')),\n )\n .join('');\n}\n\nfunction escapeSvgAttribute(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\nfunction escapeSvgText(value: string): string {\n return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n}\n\nfunction formatSvgNumber(value: number): string {\n return Number(value.toFixed(6)).toString();\n}\n\nfunction getQrCodeLogoSize(size = DEFAULT_QR_CODE_LOGO_SIZE): number {\n return Math.min(size, MAX_QR_CODE_LOGO_SIZE);\n}\n","import { persistentAtom } from '@nanostores/persistent';\nimport { computed, WritableAtom } from 'nanostores';\n\nexport class Storage<T> {\n private readonly atom: WritableAtom<T>;\n\n constructor(\n readonly key: string,\n readonly initial: T,\n ) {\n this.atom = persistentAtom<T>(key, initial, { decode: JSON.parse, encode: JSON.stringify });\n }\n\n get() {\n return this.atom.get();\n }\n\n set(value: T) {\n this.atom.set(value);\n }\n\n get value() {\n return computed(this.atom, value => value);\n }\n}\n","import { Storage } from './storage';\n\nexport function createStorage<T>({ initial, key }: { initial: T; key: string }) {\n return new Storage(key, initial);\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\n\nexport type StorageAccount = Storage<string | undefined>;\n\nexport function createStorageAccount({\n initial,\n key,\n}: {\n initial?: string | undefined;\n key?: string;\n} = {}): StorageAccount {\n return createStorage<string | undefined>({\n initial,\n key: key ?? 'wallet-ui:account',\n });\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\nimport { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type StorageCluster = Storage<SolanaClusterId>;\n\nexport function createStorageCluster({\n initial,\n key,\n}: {\n initial?: SolanaClusterId;\n key?: string;\n} = {}): StorageCluster {\n return createStorage<SolanaClusterId>({\n initial: initial ?? 'solana:devnet',\n key: key ?? 'wallet-ui:cluster',\n });\n}\n","import { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type ExplorerPath = `/address/${string}` | `/block/${string}` | `/tx/${string}`;\nexport type ExplorerProvider = 'orb' | 'solana' | 'solscan';\nexport const explorerProviders: ExplorerProvider[] = ['solana', 'solscan', 'orb'] as const;\n\nexport interface GetNetworkSuffixProps {\n id: SolanaClusterId;\n url: string;\n}\n\nexport interface GetExplorerUrlProps {\n network: GetNetworkSuffixProps;\n path: ExplorerPath;\n provider: ExplorerProvider;\n}\n\nexport function getExplorerUrl({ network, path, provider }: GetExplorerUrlProps) {\n if (!(path.startsWith('/address') || path.startsWith('/block') || path.startsWith('/tx'))) {\n throw new Error('Invalid path. Must be /address/{address}, /block/{id}, or /tx/{signature}.');\n }\n if (!explorerProviders.includes(provider)) {\n throw new Error(`Invalid provider. Must be one of ${explorerProviders.join(', ')}.`);\n }\n const url = new URL(getExplorerBaseUrl(provider));\n url.pathname = path;\n const params = getExplorerSuffix(network);\n if (params.cluster.length) {\n url.searchParams.set('cluster', params.cluster);\n }\n if (params.customUrl.length) {\n url.searchParams.set('customUrl', params.customUrl);\n }\n return url.toString();\n}\n\nfunction getExplorerBaseUrl(provider: ExplorerProvider) {\n switch (provider) {\n case 'orb':\n return 'https://orbmarkets.io';\n case 'solscan':\n return 'https://solscan.io';\n default:\n return 'https://explorer.solana.com';\n }\n}\n\nfunction getExplorerSuffix(props: GetNetworkSuffixProps): {\n cluster: string;\n customUrl: string;\n} {\n switch (props.id) {\n case 'solana:devnet':\n return { cluster: 'devnet', customUrl: '' };\n case 'solana:localnet':\n return { cluster: 'custom', customUrl: props.url };\n case 'solana:testnet':\n return { cluster: 'testnet', customUrl: '' };\n default:\n return { cluster: '', customUrl: '' };\n }\n}\n","export function handleCopyText(text?: string) {\n if (!text) {\n return;\n }\n if (\n typeof globalThis === 'undefined' ||\n !globalThis.navigator ||\n !globalThis.navigator.clipboard ||\n !globalThis.navigator.clipboard.writeText\n ) {\n return;\n }\n void globalThis.navigator.clipboard.writeText(text);\n}\n","export function stringToUint8Array(value: Uint8Array | string): Uint8Array {\n return value instanceof Uint8Array ? value : new TextEncoder().encode(value);\n}\n"]}
|
package/dist/index.node.mjs
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { devnet, mainnet, testnet } from '@solana/kit';
|
|
2
1
|
import encodeQR from 'qr';
|
|
3
2
|
import { persistentAtom } from '@nanostores/persistent';
|
|
4
3
|
import { computed } from 'nanostores';
|
|
5
4
|
|
|
6
|
-
// src/clusters.ts
|
|
7
|
-
|
|
8
5
|
// src/types/solana-cluster.ts
|
|
9
6
|
function localnet(url) {
|
|
10
7
|
return url;
|
|
@@ -22,6 +19,15 @@ function createSolanaCluster(props, { id, label, url: defaultUrl, urlWs: default
|
|
|
22
19
|
urlWs: props.urlWs ?? defaultUrlWs
|
|
23
20
|
};
|
|
24
21
|
}
|
|
22
|
+
function devnet(url) {
|
|
23
|
+
return url;
|
|
24
|
+
}
|
|
25
|
+
function mainnet(url) {
|
|
26
|
+
return url;
|
|
27
|
+
}
|
|
28
|
+
function testnet(url) {
|
|
29
|
+
return url;
|
|
30
|
+
}
|
|
25
31
|
function createSolanaDevnet(props = "https://api.devnet.solana.com") {
|
|
26
32
|
return createSolanaCluster(props, {
|
|
27
33
|
id: "solana:devnet",
|
package/dist/index.node.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/solana-cluster.ts","../src/clusters.ts","../src/create-qr-code.ts","../src/create-qr-code-svg.ts","../src/storage.ts","../src/create-storage.ts","../src/create-storage-account.ts","../src/create-storage-cluster.ts","../src/get-explorer-url.ts","../src/handle-copy-text.ts","../src/string-to-uint8-array.ts"],"names":[],"mappings":"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","file":"index.node.mjs","sourcesContent":["import type {\n DevnetUrl as SolanaDevnetUrl,\n MainnetUrl as SolanaMainnetUrl,\n TestnetUrl as SolanaTestnetUrl,\n} from '@solana/kit';\n\nimport { SolanaClusterId } from './solana-cluster-id';\n\nexport type { SolanaDevnetUrl, SolanaMainnetUrl, SolanaTestnetUrl };\n\nexport type SolanaLocalnetUrl = string & { '~cluster': 'localnet' };\n\nexport function localnet(url: string) {\n return url as SolanaLocalnetUrl;\n}\n\nexport interface SolanaCluster {\n id: SolanaClusterId;\n label: string;\n url: SolanaDevnetUrl | SolanaLocalnetUrl | SolanaMainnetUrl | SolanaTestnetUrl | string;\n urlWs?: string;\n}\n","import { devnet, mainnet, testnet } from '@solana/kit';\n\nimport { localnet, SolanaCluster } from './types/solana-cluster';\n\nexport type CreateSolanaProps = string | (Partial<Pick<SolanaCluster, 'label' | 'url' | 'urlWs'>> & { url: string });\n\nfunction createSolanaCluster(\n props: CreateSolanaProps,\n { id, label, url: defaultUrl, urlWs: defaultUrlWs }: Pick<SolanaCluster, 'id' | 'label' | 'url' | 'urlWs'>,\n): SolanaCluster {\n if (typeof props === 'string') {\n return { id, label, url: props };\n }\n\n return {\n id,\n label: props.label ?? label,\n url: props.url ?? defaultUrl,\n urlWs: props.urlWs ?? defaultUrlWs,\n };\n}\n\nexport function createSolanaDevnet(props: CreateSolanaProps = 'https://api.devnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:devnet',\n label: 'Devnet',\n url: devnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaLocalnet(props: CreateSolanaProps = 'http://localhost:8899'): SolanaCluster {\n const url = typeof props === 'string' ? props : props.url;\n const urlWs = typeof props !== 'string' ? (props.urlWs ?? getLocalUrlWs(url)) : undefined;\n return createSolanaCluster(props, {\n id: 'solana:localnet',\n label: 'Localnet',\n url: localnet(url),\n urlWs,\n });\n}\n\nfunction getLocalUrlWs(url: string) {\n return url.endsWith(':8899') ? url.replace(':8899', ':8900').replace('http', 'ws') : undefined;\n}\nexport function createSolanaMainnet(props: CreateSolanaProps): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:mainnet',\n label: 'Mainnet',\n url: mainnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaTestnet(props: CreateSolanaProps = 'https://api.testnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:testnet',\n label: 'Testnet',\n url: testnet(typeof props === 'string' ? props : props.url),\n });\n}\n","import encodeQR from 'qr';\n\nexport type QrCodeErrorCorrection = 'high' | 'low' | 'medium' | 'quartile';\n\nexport interface QrCode {\n border: number;\n cells: boolean[][];\n errorCorrection: QrCodeErrorCorrection;\n size: number;\n value: string;\n}\n\nexport interface QrCodeOptions {\n border?: number;\n errorCorrection?: QrCodeErrorCorrection;\n}\n\nconst DEFAULT_QR_CODE_BORDER = 4;\nconst DEFAULT_QR_CODE_ERROR_CORRECTION: QrCodeErrorCorrection = 'medium';\n\nexport function createQrCode(value: string, options: QrCodeOptions = {}): QrCode {\n const border = options.border ?? DEFAULT_QR_CODE_BORDER;\n const errorCorrection = options.errorCorrection ?? DEFAULT_QR_CODE_ERROR_CORRECTION;\n const cells = encodeQR(value, 'raw', { border, ecc: errorCorrection }).map(row => row.map(Boolean));\n\n return {\n border,\n cells,\n errorCorrection,\n size: cells.length,\n value,\n };\n}\n","import { createQrCode, type QrCodeOptions } from './create-qr-code';\n\nexport interface QrCodeLogoOptions {\n backgroundColor?: string;\n href: string;\n size?: number;\n}\n\nexport interface QrCodeSvgOptions extends QrCodeOptions {\n backgroundColor?: string;\n foregroundColor?: string;\n logo?: QrCodeLogoOptions;\n title?: string;\n}\n\nconst DEFAULT_QR_CODE_BACKGROUND_COLOR = '#fff';\nconst DEFAULT_QR_CODE_FOREGROUND_COLOR = '#000';\nconst DEFAULT_QR_CODE_LOGO_SIZE = 0.2;\nconst LOGO_BACKGROUND_PADDING = 1;\nconst MAX_QR_CODE_LOGO_SIZE = 0.25;\n\nexport function createQrCodeSvg(value: string, options: QrCodeSvgOptions = {}): string {\n const backgroundColor = options.backgroundColor ?? DEFAULT_QR_CODE_BACKGROUND_COLOR;\n const foregroundColor = options.foregroundColor ?? DEFAULT_QR_CODE_FOREGROUND_COLOR;\n const logo = options.logo;\n const qrCode = createQrCode(value, {\n border: options.border,\n errorCorrection: options.errorCorrection ?? (logo ? 'high' : undefined),\n });\n const title = options.title ? `<title>${escapeSvgText(options.title)}</title>` : '';\n const background = `<rect fill=\"${escapeSvgAttribute(backgroundColor)}\" height=\"${qrCode.size}\" width=\"${qrCode.size}\" x=\"0\" y=\"0\"/>`;\n const foreground = `<path d=\"${createQrCodeSvgPath(qrCode.cells)}\" fill=\"${escapeSvgAttribute(foregroundColor)}\"/>`;\n const logoSvg = logo ? createQrCodeLogoSvg({ backgroundColor, logo, size: qrCode.size }) : '';\n const accessibility = options.title ? 'role=\"img\"' : 'aria-hidden=\"true\"';\n\n return `<svg ${accessibility} shape-rendering=\"crispEdges\" viewBox=\"0 0 ${qrCode.size} ${qrCode.size}\" xmlns=\"http://www.w3.org/2000/svg\">${title}${background}${foreground}${logoSvg}</svg>`;\n}\n\nfunction createQrCodeLogoSvg({\n backgroundColor,\n logo,\n size,\n}: {\n backgroundColor: string;\n logo: QrCodeLogoOptions;\n size: number;\n}): string {\n const logoSize = size * getQrCodeLogoSize(logo.size);\n const logoPosition = (size - logoSize) / 2;\n const logoBackgroundPosition = Math.max(0, Math.floor(logoPosition) - LOGO_BACKGROUND_PADDING);\n const logoBackgroundEnd = Math.min(size, Math.ceil(logoPosition + logoSize) + LOGO_BACKGROUND_PADDING);\n const logoBackgroundSize = logoBackgroundEnd - logoBackgroundPosition;\n const logoBackgroundColor = logo.backgroundColor ?? backgroundColor;\n\n return [\n `<rect fill=\"${escapeSvgAttribute(logoBackgroundColor)}\" height=\"${formatSvgNumber(logoBackgroundSize)}\" width=\"${formatSvgNumber(logoBackgroundSize)}\" x=\"${formatSvgNumber(logoBackgroundPosition)}\" y=\"${formatSvgNumber(logoBackgroundPosition)}\"/>`,\n `<image height=\"${formatSvgNumber(logoSize)}\" href=\"${escapeSvgAttribute(logo.href)}\" preserveAspectRatio=\"xMidYMid meet\" width=\"${formatSvgNumber(logoSize)}\" x=\"${formatSvgNumber(logoPosition)}\" y=\"${formatSvgNumber(logoPosition)}\"/>`,\n ].join('');\n}\n\nfunction createQrCodeSvgPath(cells: boolean[][]): string {\n return cells\n .flatMap((row, rowIndex) =>\n row.map((cell, columnIndex) => (cell ? `M${columnIndex} ${rowIndex}h1v1H${columnIndex}z` : '')),\n )\n .join('');\n}\n\nfunction escapeSvgAttribute(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\nfunction escapeSvgText(value: string): string {\n return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n}\n\nfunction formatSvgNumber(value: number): string {\n return Number(value.toFixed(6)).toString();\n}\n\nfunction getQrCodeLogoSize(size = DEFAULT_QR_CODE_LOGO_SIZE): number {\n return Math.min(size, MAX_QR_CODE_LOGO_SIZE);\n}\n","import { persistentAtom } from '@nanostores/persistent';\nimport { computed, WritableAtom } from 'nanostores';\n\nexport class Storage<T> {\n private readonly atom: WritableAtom<T>;\n\n constructor(\n readonly key: string,\n readonly initial: T,\n ) {\n this.atom = persistentAtom<T>(key, initial, { decode: JSON.parse, encode: JSON.stringify });\n }\n\n get() {\n return this.atom.get();\n }\n\n set(value: T) {\n this.atom.set(value);\n }\n\n get value() {\n return computed(this.atom, value => value);\n }\n}\n","import { Storage } from './storage';\n\nexport function createStorage<T>({ initial, key }: { initial: T; key: string }) {\n return new Storage(key, initial);\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\n\nexport type StorageAccount = Storage<string | undefined>;\n\nexport function createStorageAccount({\n initial,\n key,\n}: {\n initial?: string | undefined;\n key?: string;\n} = {}): StorageAccount {\n return createStorage<string | undefined>({\n initial,\n key: key ?? 'wallet-ui:account',\n });\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\nimport { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type StorageCluster = Storage<SolanaClusterId>;\n\nexport function createStorageCluster({\n initial,\n key,\n}: {\n initial?: SolanaClusterId;\n key?: string;\n} = {}): StorageCluster {\n return createStorage<SolanaClusterId>({\n initial: initial ?? 'solana:devnet',\n key: key ?? 'wallet-ui:cluster',\n });\n}\n","import { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type ExplorerPath = `/address/${string}` | `/block/${string}` | `/tx/${string}`;\nexport type ExplorerProvider = 'orb' | 'solana' | 'solscan';\nexport const explorerProviders: ExplorerProvider[] = ['solana', 'solscan', 'orb'] as const;\n\nexport interface GetNetworkSuffixProps {\n id: SolanaClusterId;\n url: string;\n}\n\nexport interface GetExplorerUrlProps {\n network: GetNetworkSuffixProps;\n path: ExplorerPath;\n provider: ExplorerProvider;\n}\n\nexport function getExplorerUrl({ network, path, provider }: GetExplorerUrlProps) {\n if (!(path.startsWith('/address') || path.startsWith('/block') || path.startsWith('/tx'))) {\n throw new Error('Invalid path. Must be /address/{address}, /block/{id}, or /tx/{signature}.');\n }\n if (!explorerProviders.includes(provider)) {\n throw new Error(`Invalid provider. Must be one of ${explorerProviders.join(', ')}.`);\n }\n const url = new URL(getExplorerBaseUrl(provider));\n url.pathname = path;\n const params = getExplorerSuffix(network);\n if (params.cluster.length) {\n url.searchParams.set('cluster', params.cluster);\n }\n if (params.customUrl.length) {\n url.searchParams.set('customUrl', params.customUrl);\n }\n return url.toString();\n}\n\nfunction getExplorerBaseUrl(provider: ExplorerProvider) {\n switch (provider) {\n case 'orb':\n return 'https://orbmarkets.io';\n case 'solscan':\n return 'https://solscan.io';\n default:\n return 'https://explorer.solana.com';\n }\n}\n\nfunction getExplorerSuffix(props: GetNetworkSuffixProps): {\n cluster: string;\n customUrl: string;\n} {\n switch (props.id) {\n case 'solana:devnet':\n return { cluster: 'devnet', customUrl: '' };\n case 'solana:localnet':\n return { cluster: 'custom', customUrl: props.url };\n case 'solana:testnet':\n return { cluster: 'testnet', customUrl: '' };\n default:\n return { cluster: '', customUrl: '' };\n }\n}\n","export function handleCopyText(text?: string) {\n if (!text) {\n return;\n }\n if (\n typeof globalThis === 'undefined' ||\n !globalThis.navigator ||\n !globalThis.navigator.clipboard ||\n !globalThis.navigator.clipboard.writeText\n ) {\n return;\n }\n void globalThis.navigator.clipboard.writeText(text);\n}\n","export function stringToUint8Array(value: Uint8Array | string): Uint8Array {\n return value instanceof Uint8Array ? value : new TextEncoder().encode(value);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/solana-cluster.ts","../src/clusters.ts","../src/create-qr-code.ts","../src/create-qr-code-svg.ts","../src/storage.ts","../src/create-storage.ts","../src/create-storage-account.ts","../src/create-storage-cluster.ts","../src/get-explorer-url.ts","../src/handle-copy-text.ts","../src/string-to-uint8-array.ts"],"names":[],"mappings":"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","file":"index.node.mjs","sourcesContent":["import type {\n DevnetUrl as SolanaDevnetUrl,\n MainnetUrl as SolanaMainnetUrl,\n TestnetUrl as SolanaTestnetUrl,\n} from '@solana/kit';\n\nimport { SolanaClusterId } from './solana-cluster-id';\n\nexport type { SolanaDevnetUrl, SolanaMainnetUrl, SolanaTestnetUrl };\n\nexport type SolanaLocalnetUrl = string & { '~cluster': 'localnet' };\n\nexport function localnet(url: string) {\n return url as SolanaLocalnetUrl;\n}\n\nexport interface SolanaCluster {\n id: SolanaClusterId;\n label: string;\n url: SolanaDevnetUrl | SolanaLocalnetUrl | SolanaMainnetUrl | SolanaTestnetUrl | string;\n urlWs?: string;\n}\n","import {\n localnet,\n type SolanaCluster,\n type SolanaDevnetUrl,\n type SolanaMainnetUrl,\n type SolanaTestnetUrl,\n} from './types/solana-cluster';\n\nexport type CreateSolanaProps = string | (Partial<Pick<SolanaCluster, 'label' | 'url' | 'urlWs'>> & { url: string });\n\nfunction createSolanaCluster(\n props: CreateSolanaProps,\n { id, label, url: defaultUrl, urlWs: defaultUrlWs }: Pick<SolanaCluster, 'id' | 'label' | 'url' | 'urlWs'>,\n): SolanaCluster {\n if (typeof props === 'string') {\n return { id, label, url: props };\n }\n\n return {\n id,\n label: props.label ?? label,\n url: props.url ?? defaultUrl,\n urlWs: props.urlWs ?? defaultUrlWs,\n };\n}\n\nfunction devnet(url: string) {\n return url as SolanaDevnetUrl;\n}\n\nfunction mainnet(url: string) {\n return url as SolanaMainnetUrl;\n}\n\nfunction testnet(url: string) {\n return url as SolanaTestnetUrl;\n}\n\nexport function createSolanaDevnet(props: CreateSolanaProps = 'https://api.devnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:devnet',\n label: 'Devnet',\n url: devnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaLocalnet(props: CreateSolanaProps = 'http://localhost:8899'): SolanaCluster {\n const url = typeof props === 'string' ? props : props.url;\n const urlWs = typeof props !== 'string' ? (props.urlWs ?? getLocalUrlWs(url)) : undefined;\n return createSolanaCluster(props, {\n id: 'solana:localnet',\n label: 'Localnet',\n url: localnet(url),\n urlWs,\n });\n}\n\nfunction getLocalUrlWs(url: string) {\n return url.endsWith(':8899') ? url.replace(':8899', ':8900').replace('http', 'ws') : undefined;\n}\nexport function createSolanaMainnet(props: CreateSolanaProps): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:mainnet',\n label: 'Mainnet',\n url: mainnet(typeof props === 'string' ? props : props.url),\n });\n}\n\nexport function createSolanaTestnet(props: CreateSolanaProps = 'https://api.testnet.solana.com'): SolanaCluster {\n return createSolanaCluster(props, {\n id: 'solana:testnet',\n label: 'Testnet',\n url: testnet(typeof props === 'string' ? props : props.url),\n });\n}\n","import encodeQR from 'qr';\n\nexport type QrCodeErrorCorrection = 'high' | 'low' | 'medium' | 'quartile';\n\nexport interface QrCode {\n border: number;\n cells: boolean[][];\n errorCorrection: QrCodeErrorCorrection;\n size: number;\n value: string;\n}\n\nexport interface QrCodeOptions {\n border?: number;\n errorCorrection?: QrCodeErrorCorrection;\n}\n\nconst DEFAULT_QR_CODE_BORDER = 4;\nconst DEFAULT_QR_CODE_ERROR_CORRECTION: QrCodeErrorCorrection = 'medium';\n\nexport function createQrCode(value: string, options: QrCodeOptions = {}): QrCode {\n const border = options.border ?? DEFAULT_QR_CODE_BORDER;\n const errorCorrection = options.errorCorrection ?? DEFAULT_QR_CODE_ERROR_CORRECTION;\n const cells = encodeQR(value, 'raw', { border, ecc: errorCorrection }).map(row => row.map(Boolean));\n\n return {\n border,\n cells,\n errorCorrection,\n size: cells.length,\n value,\n };\n}\n","import { createQrCode, type QrCodeOptions } from './create-qr-code';\n\nexport interface QrCodeLogoOptions {\n backgroundColor?: string;\n href: string;\n size?: number;\n}\n\nexport interface QrCodeSvgOptions extends QrCodeOptions {\n backgroundColor?: string;\n foregroundColor?: string;\n logo?: QrCodeLogoOptions;\n title?: string;\n}\n\nconst DEFAULT_QR_CODE_BACKGROUND_COLOR = '#fff';\nconst DEFAULT_QR_CODE_FOREGROUND_COLOR = '#000';\nconst DEFAULT_QR_CODE_LOGO_SIZE = 0.2;\nconst LOGO_BACKGROUND_PADDING = 1;\nconst MAX_QR_CODE_LOGO_SIZE = 0.25;\n\nexport function createQrCodeSvg(value: string, options: QrCodeSvgOptions = {}): string {\n const backgroundColor = options.backgroundColor ?? DEFAULT_QR_CODE_BACKGROUND_COLOR;\n const foregroundColor = options.foregroundColor ?? DEFAULT_QR_CODE_FOREGROUND_COLOR;\n const logo = options.logo;\n const qrCode = createQrCode(value, {\n border: options.border,\n errorCorrection: options.errorCorrection ?? (logo ? 'high' : undefined),\n });\n const title = options.title ? `<title>${escapeSvgText(options.title)}</title>` : '';\n const background = `<rect fill=\"${escapeSvgAttribute(backgroundColor)}\" height=\"${qrCode.size}\" width=\"${qrCode.size}\" x=\"0\" y=\"0\"/>`;\n const foreground = `<path d=\"${createQrCodeSvgPath(qrCode.cells)}\" fill=\"${escapeSvgAttribute(foregroundColor)}\"/>`;\n const logoSvg = logo ? createQrCodeLogoSvg({ backgroundColor, logo, size: qrCode.size }) : '';\n const accessibility = options.title ? 'role=\"img\"' : 'aria-hidden=\"true\"';\n\n return `<svg ${accessibility} shape-rendering=\"crispEdges\" viewBox=\"0 0 ${qrCode.size} ${qrCode.size}\" xmlns=\"http://www.w3.org/2000/svg\">${title}${background}${foreground}${logoSvg}</svg>`;\n}\n\nfunction createQrCodeLogoSvg({\n backgroundColor,\n logo,\n size,\n}: {\n backgroundColor: string;\n logo: QrCodeLogoOptions;\n size: number;\n}): string {\n const logoSize = size * getQrCodeLogoSize(logo.size);\n const logoPosition = (size - logoSize) / 2;\n const logoBackgroundPosition = Math.max(0, Math.floor(logoPosition) - LOGO_BACKGROUND_PADDING);\n const logoBackgroundEnd = Math.min(size, Math.ceil(logoPosition + logoSize) + LOGO_BACKGROUND_PADDING);\n const logoBackgroundSize = logoBackgroundEnd - logoBackgroundPosition;\n const logoBackgroundColor = logo.backgroundColor ?? backgroundColor;\n\n return [\n `<rect fill=\"${escapeSvgAttribute(logoBackgroundColor)}\" height=\"${formatSvgNumber(logoBackgroundSize)}\" width=\"${formatSvgNumber(logoBackgroundSize)}\" x=\"${formatSvgNumber(logoBackgroundPosition)}\" y=\"${formatSvgNumber(logoBackgroundPosition)}\"/>`,\n `<image height=\"${formatSvgNumber(logoSize)}\" href=\"${escapeSvgAttribute(logo.href)}\" preserveAspectRatio=\"xMidYMid meet\" width=\"${formatSvgNumber(logoSize)}\" x=\"${formatSvgNumber(logoPosition)}\" y=\"${formatSvgNumber(logoPosition)}\"/>`,\n ].join('');\n}\n\nfunction createQrCodeSvgPath(cells: boolean[][]): string {\n return cells\n .flatMap((row, rowIndex) =>\n row.map((cell, columnIndex) => (cell ? `M${columnIndex} ${rowIndex}h1v1H${columnIndex}z` : '')),\n )\n .join('');\n}\n\nfunction escapeSvgAttribute(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\nfunction escapeSvgText(value: string): string {\n return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n}\n\nfunction formatSvgNumber(value: number): string {\n return Number(value.toFixed(6)).toString();\n}\n\nfunction getQrCodeLogoSize(size = DEFAULT_QR_CODE_LOGO_SIZE): number {\n return Math.min(size, MAX_QR_CODE_LOGO_SIZE);\n}\n","import { persistentAtom } from '@nanostores/persistent';\nimport { computed, WritableAtom } from 'nanostores';\n\nexport class Storage<T> {\n private readonly atom: WritableAtom<T>;\n\n constructor(\n readonly key: string,\n readonly initial: T,\n ) {\n this.atom = persistentAtom<T>(key, initial, { decode: JSON.parse, encode: JSON.stringify });\n }\n\n get() {\n return this.atom.get();\n }\n\n set(value: T) {\n this.atom.set(value);\n }\n\n get value() {\n return computed(this.atom, value => value);\n }\n}\n","import { Storage } from './storage';\n\nexport function createStorage<T>({ initial, key }: { initial: T; key: string }) {\n return new Storage(key, initial);\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\n\nexport type StorageAccount = Storage<string | undefined>;\n\nexport function createStorageAccount({\n initial,\n key,\n}: {\n initial?: string | undefined;\n key?: string;\n} = {}): StorageAccount {\n return createStorage<string | undefined>({\n initial,\n key: key ?? 'wallet-ui:account',\n });\n}\n","import { createStorage } from './create-storage';\nimport { Storage } from './storage';\nimport { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type StorageCluster = Storage<SolanaClusterId>;\n\nexport function createStorageCluster({\n initial,\n key,\n}: {\n initial?: SolanaClusterId;\n key?: string;\n} = {}): StorageCluster {\n return createStorage<SolanaClusterId>({\n initial: initial ?? 'solana:devnet',\n key: key ?? 'wallet-ui:cluster',\n });\n}\n","import { SolanaClusterId } from './types/solana-cluster-id';\n\nexport type ExplorerPath = `/address/${string}` | `/block/${string}` | `/tx/${string}`;\nexport type ExplorerProvider = 'orb' | 'solana' | 'solscan';\nexport const explorerProviders: ExplorerProvider[] = ['solana', 'solscan', 'orb'] as const;\n\nexport interface GetNetworkSuffixProps {\n id: SolanaClusterId;\n url: string;\n}\n\nexport interface GetExplorerUrlProps {\n network: GetNetworkSuffixProps;\n path: ExplorerPath;\n provider: ExplorerProvider;\n}\n\nexport function getExplorerUrl({ network, path, provider }: GetExplorerUrlProps) {\n if (!(path.startsWith('/address') || path.startsWith('/block') || path.startsWith('/tx'))) {\n throw new Error('Invalid path. Must be /address/{address}, /block/{id}, or /tx/{signature}.');\n }\n if (!explorerProviders.includes(provider)) {\n throw new Error(`Invalid provider. Must be one of ${explorerProviders.join(', ')}.`);\n }\n const url = new URL(getExplorerBaseUrl(provider));\n url.pathname = path;\n const params = getExplorerSuffix(network);\n if (params.cluster.length) {\n url.searchParams.set('cluster', params.cluster);\n }\n if (params.customUrl.length) {\n url.searchParams.set('customUrl', params.customUrl);\n }\n return url.toString();\n}\n\nfunction getExplorerBaseUrl(provider: ExplorerProvider) {\n switch (provider) {\n case 'orb':\n return 'https://orbmarkets.io';\n case 'solscan':\n return 'https://solscan.io';\n default:\n return 'https://explorer.solana.com';\n }\n}\n\nfunction getExplorerSuffix(props: GetNetworkSuffixProps): {\n cluster: string;\n customUrl: string;\n} {\n switch (props.id) {\n case 'solana:devnet':\n return { cluster: 'devnet', customUrl: '' };\n case 'solana:localnet':\n return { cluster: 'custom', customUrl: props.url };\n case 'solana:testnet':\n return { cluster: 'testnet', customUrl: '' };\n default:\n return { cluster: '', customUrl: '' };\n }\n}\n","export function handleCopyText(text?: string) {\n if (!text) {\n return;\n }\n if (\n typeof globalThis === 'undefined' ||\n !globalThis.navigator ||\n !globalThis.navigator.clipboard ||\n !globalThis.navigator.clipboard.writeText\n ) {\n return;\n }\n void globalThis.navigator.clipboard.writeText(text);\n}\n","export function stringToUint8Array(value: Uint8Array | string): Uint8Array {\n return value instanceof Uint8Array ? value : new TextEncoder().encode(value);\n}\n"]}
|
|
@@ -2,7 +2,7 @@ this.globalThis = this.globalThis || {};
|
|
|
2
2
|
this.globalThis.solanaWeb3 = (function (exports) {
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
5
|
-
var xe=Object.defineProperty;var ye=(t,e,r)=>e in t?xe(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var S=(t,e,r)=>ye(t,typeof e!="symbol"?e+"":e,r);function nt(t){return t}function N(t,{id:e,label:r,url:n,urlWs:o}){var i,s,l;return typeof t=="string"?{id:e,label:r,url:t}:{id:e,label:(i=t.label)!=null?i:r,url:(s=t.url)!=null?s:n,urlWs:(l=t.urlWs)!=null?l:o}}function it(t="https://api.devnet.solana.com"){return N(t,{id:"solana:devnet",label:"Devnet",url:typeof t=="string"?t:t.url})}function st(t="http://localhost:8899"){var n;let e=typeof t=="string"?t:t.url,r=typeof t!="string"?(n=t.urlWs)!=null?n:be(e):void 0;return N(t,{id:"solana:localnet",label:"Localnet",url:e,urlWs:r})}function be(t){return t.endsWith(":8899")?t.replace(":8899",":8900").replace("http","ws"):void 0}function lt(t){return N(t,{id:"solana:mainnet",label:"Mainnet",url:typeof t=="string"?t:t.url})}function at(t="https://api.testnet.solana.com"){return N(t,{id:"solana:testnet",label:"Testnet",url:typeof t=="string"?t:t.url})}var I={newline:10,reset:27};function ve(t){if(!Number.isSafeInteger(t))throw new Error(`integer expected: ${t}`)}function Se(t){if(!Number.isSafeInteger(t)||t<1||t>40)throw new Error(`Invalid version=${t}. Expected number [1..40]`)}function T(t,e){return t.toString(2).padStart(e,"0")}function H(t,e){let r=t%e;return r>=0?r:e+r}function E(t,e){return new Array(t).fill(e)}function F(t){return t=t-(t>>>1&1431655765),t=(t&858993459)+(t>>>2&858993459),(t+(t>>>4)&252645135)*16843009>>>24}function X(t){let e=0,r=0;for(let i of t)e=Math.max(e,i.length),r+=i.length;let n=new Uint8Array(r),o=0;for(let i=0;i<e;i++)for(let s of t)i<s.length&&(n[o++]=s[i]);return n}function Ee(){let t,e=1/0;return {add(r,n){r>=e||(t=n,e=r);},get:()=>t,score:()=>e}}function Z(t){return Object.freeze({has:e=>t.includes(e),decode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="string")throw new Error("alphabet.decode input should be array of strings");return e.map(r=>{if(typeof r!="string")throw new Error(`alphabet.decode: not string element=${r}`);let n=t.indexOf(r);if(n===-1)throw new Error(`Unknown letter: "${r}". Allowed: ${t}`);return n})},encode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="number")throw new Error("alphabet.encode input should be an array of numbers");return e.map(r=>{if(ve(r),r<0||r>=t.length)throw new Error(`Digit index outside alphabet: ${r} (alphabet: ${t.length})`);return t[r]})}})}function J(t){if(t.length!==32)throw new Error("expects 32 element matrix");let e=[1431655765,858993459,252645135,16711935,65535];for(let r=0;r<5;r++){let n=e[r]>>>0,o=1<<r,i=o<<1;for(let s=0;s<32;s+=i)for(let l=0;l<o;l++){let d=s+l,f=d+o,u=t[d]>>>0,a=t[f]>>>0,c=(u>>>o^a)&n;t[d]=(u^c<<o)>>>0,t[f]=(a^c)>>>0;}}}var O=t=>1<<(t&31)>>>0,M=(t,e)=>e===0?0:e===32?4294967295:(1<<e)-1<<t>>>0,L=class t{constructor(e,r){S(this,"defined");S(this,"value");S(this,"tailMask");S(this,"words");S(this,"fullWords");S(this,"height");S(this,"width");let{height:n,width:o}=t.size(e);if(!Number.isSafeInteger(n)||n<=0)throw new Error(`Bitmap: invalid height=${n}, expected positive safe integer dimension`);if(!Number.isSafeInteger(o)||o<=0)throw new Error(`Bitmap: invalid width=${o}, expected positive safe integer dimension`);if(this.height=n,this.width=o,this.tailMask=M(0,o&31||32),this.words=Math.ceil(o/32)|0,this.fullWords=Math.floor(o/32)|0,this.value=new Uint32Array(this.words*n),this.defined=new Uint32Array(this.value.length),r){if(r.length!==n)throw new Error(`Bitmap: data height mismatch: exp=${n} got=${r.length}`);for(let i=0;i<n;i++){let s=r[i];if(!s||s.length!==o)throw new Error(`Bitmap: data width mismatch at y=${i}: exp=${o} got=${s==null?void 0:s.length}`);for(let l=0;l<o;l++)this.set(l,i,s[l]);}}}static size(e,r){if(typeof e=="number"&&(e={height:e,width:e}),!Number.isSafeInteger(e.height)&&e.height!==1/0)throw new Error(`Bitmap: invalid height=${e.height} (${typeof e.height})`);if(!Number.isSafeInteger(e.width)&&e.width!==1/0)throw new Error(`Bitmap: invalid width=${e.width} (${typeof e.width})`);return r!==void 0&&(e={width:Math.min(e.width,r.width),height:Math.min(e.height,r.height)}),e}static fromString(e){e=e.replace(/^\n+/g,"").replace(/\n+$/g,"");let r=e.split(String.fromCharCode(I.newline)),n=r.length,o,i=[];for(let s of r){let l=s.split("").map(d=>{if(d==="X")return true;if(d===" ")return false;if(d!=="?")throw new Error(`Bitmap.fromString: unknown symbol=${d}`)});if(o!==void 0&&l.length!==o)throw new Error(`Bitmap.fromString different row sizes: width=${o} cur=${l.length}`);o=l.length,i.push(l);}return o===void 0&&(o=0),new t({height:n,width:o},i)}point(e){return this.get(e.x,e.y)}isInside(e){return 0<=e.x&&e.x<this.width&&0<=e.y&&e.y<this.height}size(e){if(!e)return {height:this.height,width:this.width};let{x:r,y:n}=this.xy(e);return {height:this.height-n,width:this.width-r}}xy(e){if(typeof e=="number"&&(e={x:e,y:e}),!Number.isSafeInteger(e.x))throw new Error(`Bitmap: invalid x=${e.x}`);if(!Number.isSafeInteger(e.y))throw new Error(`Bitmap: invalid y=${e.y}`);return e.x=H(e.x,this.width),e.y=H(e.y,this.height),e}wordIndex(e,r){return r*this.words+(e>>>5)}bitIndex(e,r){return {word:this.wordIndex(e,r),bit:e&31}}isDefined(e,r){let n=this.wordIndex(e,r),o=O(e);return (this.defined[n]&o)!==0}get(e,r){let n=this.wordIndex(e,r),o=O(e);return (this.value[n]&o)!==0}maskWord(e,r,n){let{defined:o,value:i}=this;o[e]|=r,i[e]=i[e]&~r|-n&r;}set(e,r,n){n!==void 0&&this.maskWord(this.wordIndex(e,r),O(e),n);}fillRectConst(e,r,n,o,i){if(n<=0||o<=0||i===void 0)return;let{value:s,defined:l,words:d}=this,f=e>>>5,u=e+n-1>>>5,a=e&31,c=e+n-1&31;for(let h=0;h<o;h++){let m=(r+h)*d;if(f===u){let p=M(a,c-a+1);this.maskWord(m+f,p,i);continue}this.maskWord(m+f,M(a,32-a),i);for(let p=f+1;p<u;p++)l[m+p]=4294967295,s[m+p]=i?4294967295:0;this.maskWord(m+u,M(0,c+1),i);}}rectWords(e,r,n,o,i){for(let s=0;s<o;s++){let l=r+s;for(let d=0;d<n;){let f=e+d,{bit:u,word:a}=this.bitIndex(f,l),c=Math.min(32-u,n-d);i(a,f,d,s,c),d+=c;}}}rect(e,r,n){let{x:o,y:i}=this.xy(e),{height:s,width:l}=t.size(r,this.size({x:o,y:i}));if(typeof n!="function")return this.fillRectConst(o,i,l,s,n),this;let{defined:d,value:f}=this;return this.rectWords(o,i,l,s,(u,a,c,h,m)=>{let p=0,w=f[u];for(let x=0;x<m;x++){let b=O(a+x),C=n({x:c+x,y:h},(w&b)!==0);C!==void 0&&(p|=b,w=w&~b|-C&b);}d[u]|=p,f[u]=w;}),this}rectRead(e,r,n){let{x:o,y:i}=this.xy(e),{height:s,width:l}=t.size(r,this.size({x:o,y:i})),{value:d}=this;return this.rectWords(o,i,l,s,(f,u,a,c,h)=>{let m=d[f];for(let p=0;p<h;p++){let w=O(u+p);n({x:a+p,y:c},(m&w)!==0);}}),this}hLine(e,r,n){return this.rect(e,{width:r,height:1},n)}vLine(e,r,n){return this.rect(e,{width:1,height:r},n)}border(e=2,r){if(!Number.isSafeInteger(e)||e<=0)throw new Error(`Bitmap.border: invalid size=${e}`);let n=this.height+2*e,o=this.width+2*e,i=new t({height:n,width:o});return i.rect(0,1/0,r),i.embed({x:e,y:e},this),i}embed(e,r){let{x:n,y:o}=this.xy(e),{height:i,width:s}=t.size(r.size(),this.size({x:n,y:o}));if(s<=0||i<=0)return this;let{value:l,defined:d}=this,{words:f,value:u}=r;for(let a=0;a<i;a++){let c=a*f;for(let h=0;h<s;){let m=n+h,{word:p,bit:w}=this.bitIndex(m,o+a),{word:x,bit:b}=r.bitIndex(h,a),C=Math.min(32-w,s-h),V=u[x],me=b&&x+1<c+f?u[x+1]:0,pe=b?(V>>>b|me<<32-b)>>>0:V,Y=M(w,C),we=(pe&M(0,C))<<w>>>0;d[p]|=Y,l[p]=l[p]&~Y|we,h+=C;}}return this}rectSlice(e,r=this.size()){let{x:n,y:o}=this.xy(e),{height:i,width:s}=t.size(r,this.size({x:n,y:o})),l=new t({height:i,width:s});return this.rectRead({x:n,y:o},{height:i,width:s},(d,f)=>{this.isDefined(n+d.x,o+d.y)&&l.set(d.x,d.y,f);}),l}transpose(){let{height:e,width:r,value:n,defined:o,words:i}=this,s=new t({height:r,width:e}),{words:l,value:d,defined:f,tailMask:u}=s,a=new Uint32Array(32),c=new Uint32Array(32);for(let h=0;h<e;h+=32)for(let m=0;m<i;m++){let p=Math.min(32,e-h);for(let w=0;w<p;w++){let x=this.wordIndex(32*m,h+w);a[w]=n[x],c[w]=o[x];}a.fill(0,p),c.fill(0,p),J(a),J(c);for(let w=0;w<32;w++){let x=m*32+w;if(x>=r)break;let b=s.wordIndex(h,x),C=h>>>5===l-1?u:4294967295;d[b]=a[w]&C,f[b]=c[w]&C;}}return s}negate(){let e=this.defined.length;for(let r=0;r<e;r++)this.value[r]=~this.value[r],this.defined[r]=4294967295;return this}scale(e){if(!Number.isSafeInteger(e)||e>1024)throw new Error(`invalid scale factor: ${e}`);let{height:r,width:n}=this;return new t({height:e*r,width:e*n}).rect({x:0,y:0},1/0,({x:i,y:s})=>this.get(i/e|0,s/e|0))}clone(){let e=new t(this.size());return e.defined.set(this.defined),e.value.set(this.value),e}assertDrawn(){let{height:e,width:r,defined:n,tailMask:o,fullWords:i,words:s}=this;if(!(!e||!r))for(let l=0;l<e;l++){let d=l*s;for(let f=0;f<i;f++)if(n[d+f]!==4294967295)throw new Error("Invalid color type=undefined");if(s!==i&&(n[d+i]&o)!==o)throw new Error("Invalid color type=undefined")}}countPatternInRow(e,r,...n){if(!Number.isSafeInteger(r)||r<=0||r>=32)throw new Error("wrong patternLen");let o=(1<<r)-1,{height:i,width:s,value:l,words:d}=this;if(!Number.isSafeInteger(e)||e<0||e>=i)return 0;let f=0,u=this.wordIndex(0,e);for(let a=0,c=0;a<d;a++){let h=l[u+a],m=a===d-1&&s&31||32;for(let p=0;p<m;p++)if(c=(c<<1|h>>>p&1)&o,!(a*32+p+1<r)){for(let w of n)if(c===w){f++;break}}}return f}getRuns(e,r){let{height:n,width:o,value:i,words:s}=this;if(o===0||!Number.isSafeInteger(e)||e<0||e>=n)return;let l=0,d,f=this.wordIndex(0,e);for(let u=0;u<s;u++){let a=i[f+u],c=u===s-1&&o&31||32;for(let h=0;h<c;h++){let m=(a&1<<h)!==0;if(m===d){l++;continue}d!==void 0&&r(l,d),d=m,l=1;}}d!==void 0&&r(l,d);}popcnt(){let{height:e,width:r,words:n,fullWords:o,tailMask:i}=this;if(!e||!r)return 0;let s=0;for(let l=0;l<e;l++){let d=l*n;for(let f=0;f<o;f++)s+=F(this.value[d+f]);n!==o&&(s+=F(this.value[d+o]&i));}return s}countBoxes2x2(e){let{height:r,width:n,words:o}=this;if(n<2||!Number.isSafeInteger(e)||e<0||e+1>=r)return 0;let i=this.wordIndex(0,e),s=this.wordIndex(0,e+1),d=(n&31)===0?2147483647:M(0,n-1&31),f=0;for(let u=0;u<o;u++){let a=this.value[i+u],c=this.value[s+u],h=~(a^c)>>>0,m=u+1<o?this.value[i+u+1]>>>0:0,p=~(a^(a>>>1|(m&1)<<31)>>>0)>>>0,w=u+1<o?this.value[s+u+1]>>>0:0,x=~(c^(c>>>1|(w&1)<<31)>>>0)>>>0,b=(h&p&x)>>>0;u===o-1&&(b&=d),f+=F(b);}return f}toString(){let e=String.fromCharCode(I.newline),r="";for(let n=0;n<this.height;n++){let o="";for(let i=0;i<this.width;i++){let s=this.get(i,n);o+=this.isDefined(i,n)?s?"X":" ":"?";}r+=o+(n+1===this.height?"":e);}return r}toRaw(){let e=Array.from({length:this.height},()=>new Array(this.width));for(let r=0;r<this.height;r++){let n=e[r];for(let o=0;o<this.width;o++)n[o]=this.get(o,r);}return e}toASCII(){let{height:e,width:r}=this,n="";for(let o=0;o<e;o+=2){for(let i=0;i<r;i++){let s=this.get(i,o),l=o+1>=e?true:this.get(i,o+1);!s&&!l?n+="\u2588":!s&&l?n+="\u2580":s&&!l?n+="\u2584":s&&l&&(n+=" ");}n+=String.fromCharCode(I.newline);}return n}toTerm(){let e=String.fromCharCode(I.reset),r=e+"[0m",n=e+"[1;47m "+r,o=e+"[40m "+r,i=String.fromCharCode(I.newline),s="";for(let l=0;l<this.height;l++){for(let d=0;d<this.width;d++){let f=this.get(d,l);s+=f?o:n;}s+=i;}return s}toSVG(e=true){let r=`<svg viewBox="0 0 ${this.width} ${this.height}" xmlns="http://www.w3.org/2000/svg">`,n="",o;return this.rectRead(0,1/0,(i,s)=>{if(!s)return;let{x:l,y:d}=i;if(!e){r+=`<rect x="${l}" y="${d}" width="1" height="1" />`;return}let f=`M${l} ${d}`;if(o){let a=`m${l-o.x} ${d-o.y}`;a.length<=f.length&&(f=a);}let u=l<10?`H${l}`:"h-1";n+=`${f}h1v1${u}Z`,o=i;}),e&&(r+=`<path d="${n}"/>`),r+="</svg>",r}toGIF(){let e=l=>[l&255,l>>>8&255],r=[...e(this.width),...e(this.height)],n=[];this.rectRead(0,1/0,(l,d)=>n.push(+(d===true)));let o=126,i=[71,73,70,56,55,97,...r,246,0,0,255,255,255,...E(381,0),44,0,0,0,0,...r,0,7],s=Math.floor(n.length/o);for(let l=0;l<s;l++)i.push(o+1,128,...n.slice(o*l,o*(l+1)).map(d=>+d));return i.push(n.length%o+1,128,...n.slice(s*o).map(l=>+l)),i.push(1,129,0,59),new Uint8Array(i)}toImage(e=false){let{height:r,width:n}=this.size(),o=new Uint8Array(r*n*(e?3:4)),i=0;for(let s=0;s<r;s++)for(let l=0;l<n;l++){let d=this.get(l,s)?0:255;o[i++]=d,o[i++]=d,o[i++]=d,e||(o[i++]=255);}return {height:r,width:n,data:o}}},ee=Object.freeze(["low","medium","quartile","high"]),te=Object.freeze(["numeric","alphanumeric","byte","kanji","eci"]),Ce=[26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706],ke={low:[7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],medium:[10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],quartile:[13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],high:[17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]},Pe={low:[1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],medium:[1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],quartile:[1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],high:[1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]},y=Object.freeze({size:Object.freeze({encode:t=>21+4*(t-1),decode:t=>(t-17)/4}),sizeType:t=>Math.floor((t+7)/17),alignmentPatterns(t){if(t===1)return [];let e=6,r=y.size.encode(t)-e-1,n=r-e,o=Math.ceil(n/28),i=Math.floor(n/o);i%2?i+=1:n%o*2>=o&&(i+=2);let s=[e];for(let l=1;l<o;l++)s.push(r-(o-l)*i);return s.push(r),s},ECCode:Object.freeze({low:1,medium:0,quartile:3,high:2}),formatMask:21522,formatBits(t,e){let r=y.ECCode[t]<<3|e,n=r;for(let o=0;o<10;o++)n=n<<1^(n>>9)*1335;return (r<<10|n)^y.formatMask},versionBits(t){let e=t;for(let r=0;r<12;r++)e=e<<1^(e>>11)*7973;return t<<12|e},alphabet:Object.freeze({numeric:Z("0123456789"),alphanumerc:Z("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:")}),lengthBits(t,e){return {numeric:[10,12,14],alphanumeric:[9,11,13],byte:[8,16,16],kanji:[8,10,12],eci:[0,0,0]}[e][y.sizeType(t)]},modeBits:Object.freeze({numeric:"0001",alphanumeric:"0010",byte:"0100",kanji:"1000",eci:"0111"}),capacity(t,e){let r=Ce[t-1],n=ke[e][t-1],o=Pe[e][t-1],i=Math.floor(r/o)-n,s=o-r%o;return {words:n,numBlocks:o,shortBlocks:s,blockLen:i,capacity:(r-n*o)*8,total:(n+i)*o+o-s}}}),j=Object.freeze([(t,e)=>(t+e)%2==0,(t,e)=>e%2==0,(t,e)=>t%3==0,(t,e)=>(t+e)%3==0,(t,e)=>(Math.floor(e/2)+Math.floor(t/3))%2==0,(t,e)=>t*e%2+t*e%3==0,(t,e)=>(t*e%2+t*e%3)%2==0,(t,e)=>((t+e)%2+t*e%3)%2==0]),g={tables:(t=>{let e=E(256,0),r=E(256,0);for(let n=0,o=1;n<256;n++)e[n]=o,r[o]=n,o<<=1,o&256&&(o^=t);return {exp:e,log:r}})(285),exp:t=>g.tables.exp[t],log(t){if(t===0)throw new Error(`GF.log: invalid arg=${t}`);return g.tables.log[t]%255},mul(t,e){return t===0||e===0?0:g.tables.exp[(g.tables.log[t]+g.tables.log[e])%255]},add:(t,e)=>t^e,pow:(t,e)=>g.tables.exp[g.tables.log[t]*e%255],inv(t){if(t===0)throw new Error(`GF.inverse: invalid arg=${t}`);return g.tables.exp[255-g.tables.log[t]]},polynomial(t){if(t.length==0)throw new Error("GF.polymomial: invalid length");if(t[0]!==0)return t;let e=0;for(;e<t.length-1&&t[e]==0;e++);return t.slice(e)},monomial(t,e){if(t<0)throw new Error(`GF.monomial: invalid degree=${t}`);if(e==0)return [0];let r=E(t+1,0);return r[0]=e,g.polynomial(r)},degree:t=>t.length-1,coefficient:(t,e)=>t[g.degree(t)-e],mulPoly(t,e){if(t[0]===0||e[0]===0)return [0];let r=E(t.length+e.length-1,0);for(let n=0;n<t.length;n++)for(let o=0;o<e.length;o++)r[n+o]=g.add(r[n+o],g.mul(t[n],e[o]));return g.polynomial(r)},mulPolyScalar(t,e){if(e==0)return [0];if(e==1)return t;let r=E(t.length,0);for(let n=0;n<t.length;n++)r[n]=g.mul(t[n],e);return g.polynomial(r)},mulPolyMonomial(t,e,r){if(e<0)throw new Error("GF.mulPolyMonomial: invalid degree");if(r==0)return [0];let n=E(t.length+e,0);for(let o=0;o<t.length;o++)n[o]=g.mul(t[o],r);return g.polynomial(n)},addPoly(t,e){if(t[0]===0)return e;if(e[0]===0)return t;let r=t,n=e;r.length>n.length&&([r,n]=[n,r]);let o=E(n.length,0),i=n.length-r.length,s=n.slice(0,i);for(let l=0;l<s.length;l++)o[l]=s[l];for(let l=i;l<n.length;l++)o[l]=g.add(r[l-i],n[l]);return g.polynomial(o)},remainderPoly(t,e){let r=Array.from(t);for(let n=0;n<t.length-e.length+1;n++){let o=r[n];if(o!==0)for(let i=1;i<e.length;i++)e[i]!==0&&(r[n+i]=g.add(r[n+i],g.mul(e[i],o)));}return r.slice(t.length-e.length+1,r.length)},divisorPoly(t){let e=[1];for(let r=0;r<t;r++)e=g.mulPoly(e,[1,g.pow(2,r)]);return e},evalPoly(t,e){if(e==0)return g.coefficient(t,0);let r=t[0];for(let n=1;n<t.length;n++)r=g.add(g.mul(e,r),t[n]);return r},euclidian(t,e,r){g.degree(t)<g.degree(e)&&([t,e]=[e,t]);let n=t,o=e,i=[0],s=[1];for(;2*g.degree(o)>=r;){let f=n,u=i;if(n=o,i=s,n[0]===0)throw new Error("rLast[0] === 0");o=f;let a=[0],c=g.inv(n[0]);for(;g.degree(o)>=g.degree(n)&&o[0]!==0;){let h=g.degree(o)-g.degree(n),m=g.mul(o[0],c);a=g.addPoly(a,g.monomial(h,m)),o=g.addPoly(o,g.mulPolyMonomial(n,h,m));}if(a=g.mulPoly(a,i),s=g.addPoly(a,u),g.degree(o)>=g.degree(n))throw new Error(`Division failed r: ${o}, rLast: ${n}`)}let l=g.coefficient(s,0);if(l==0)throw new Error("sigmaTilde(0) was zero");let d=g.inv(l);return [g.mulPolyScalar(s,d),g.mulPolyScalar(o,d)]}};function Te(t){return {encode(e){let r=g.divisorPoly(t),n=Array.from(e);return n.push(...r.slice(0,-1).fill(0)),Uint8Array.from(g.remainderPoly(n,r))},decode(e){let r=e.slice(),n=g.polynomial(Array.from(e)),o=E(t,0),i=false;for(let a=0;a<t;a++){let c=g.evalPoly(n,g.exp(a));o[o.length-1-a]=c,c!==0&&(i=true);}if(!i)return r;o=g.polynomial(o);let s=g.monomial(t,1),[l,d]=g.euclidian(s,o,t),f=E(g.degree(l),0),u=0;for(let a=1;a<256&&u<f.length;a++)g.evalPoly(l,a)===0&&(f[u++]=g.inv(a));if(u!==f.length)throw new Error("RS.decode: invalid errors number");for(let a=0;a<f.length;a++){let c=r.length-1-g.log(f[a]);if(c<0)throw new Error("RS.decode: invalid error location");let h=g.inv(f[a]),m=1;for(let p=0;p<f.length;p++)a!==p&&(m=g.mul(m,g.add(1,g.mul(f[p],h))));r[c]=g.add(r[c],g.mul(g.evalPoly(d,h),g.inv(m)));}return r}}}function Me(t,e){let{words:r,shortBlocks:n,numBlocks:o,blockLen:i,total:s}=y.capacity(t,e),l=Te(r);return {encode(d){let f=[],u=[];for(let m=0;m<o;m++){let p=m<n,w=i+(p?0:1);f.push(d.subarray(0,w)),u.push(l.encode(d.subarray(0,w))),d=d.subarray(w);}let a=X(f),c=X(u),h=new Uint8Array(a.length+c.length);return h.set(a),h.set(c,a.length),h},decode(d){if(d.length!==s)throw new Error(`interleave.decode: len(data)=${d.length}, total=${s}`);let f=[];for(let c=0;c<o;c++){let h=c<n;f.push(new Uint8Array(r+i+(h?0:1)));}let u=0;for(let c=0;c<i;c++)for(let h=0;h<o;h++)f[h][c]=d[u++];for(let c=n;c<o;c++)f[c][i]=d[u++];for(let c=i;c<i+r;c++)for(let h=0;h<o;h++){let m=h<n;f[h][c+(m?0:1)]=d[u++];}let a=[];for(let c of f)a.push(...Array.from(l.decode(c)).slice(0,-r));return Uint8Array.from(a)}}}function Ue(t,e,r,n=false){let o=y.size.encode(t),i=new L(o+2),s=new L(3).rect(0,3,true).border(1,false).border(1,true).border(1,false);i=i.embed(0,s).embed({x:-s.width,y:0},s).embed({x:0,y:-s.height},s),i=i.rectSlice(1,o);let l=new L(1).rect(0,1,true).border(1,false).border(1,true),d=y.alignmentPatterns(t);for(let f of d)for(let u of d)i.isDefined(u,f)||i.embed({x:u-2,y:f-2},l);i=i.hLine({x:0,y:6},1/0,({x:f})=>i.isDefined(f,6)?void 0:f%2==0).vLine({x:6,y:0},1/0,({y:f})=>i.isDefined(6,f)?void 0:f%2==0);{let f=y.formatBits(e,r),u=a=>!n&&(f>>a&1)==1;for(let a=0;a<6;a++)i.set(8,a,u(a));for(let a=6;a<8;a++)i.set(8,a+1,u(a));for(let a=8;a<15;a++)i.set(8,o-15+a,u(a));for(let a=0;a<8;a++)i.set(o-a-1,8,u(a));for(let a=8;a<9;a++)i.set(15-a-1+1,8,u(a));for(let a=9;a<15;a++)i.set(15-a-1,8,u(a));i.set(8,o-8,!n);}if(t>=7){let f=y.versionBits(t);for(let u=0;u<18;u+=1){let a=!n&&(f>>u&1)==1,c=Math.floor(u/3),h=u%3+o-8-3;i.set(h,c,a),i.set(c,h,a);}}return i}function Ie(t,e,r){let n=t,o=n.height,i=j[e],s=-1,l=o-1;for(let d=o-1;d>0;d-=2){for(d==6&&(d=5);;l+=s){for(let f=0;f<2;f+=1){let u=d-f;n.isDefined(u,l)||r(u,l,i(u,l));}if(l+s<0||l+s>=o)break}s=-s;}}function Oe(t){let e="numeric";for(let r of t)if(!y.alphabet.numeric.has(r)&&(e="alphanumeric",!y.alphabet.alphanumerc.has(r)))return "byte";return e}function Le(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function re(t,e,r,n,o=Le){let i="",s=r.length;if(n==="numeric"){let c=y.alphabet.numeric.decode(r.split("")),h=c.length;for(let m=0;m<h-2;m+=3)i+=T(c[m]*100+c[m+1]*10+c[m+2],10);h%3===1?i+=T(c[h-1],4):h%3===2&&(i+=T(c[h-2]*10+c[h-1],7));}else if(n==="alphanumeric"){let c=y.alphabet.alphanumerc.decode(r.split("")),h=c.length;for(let m=0;m<h-1;m+=2)i+=T(c[m]*45+c[m+1],11);h%2==1&&(i+=T(c[h-1],6));}else if(n==="byte"){let c=o(r);s=c.length,i=Array.from(c).map(h=>T(h,8)).join("");}else throw new Error("encode: unsupported type");let{capacity:l}=y.capacity(t,e),d=T(s,y.lengthBits(t,n)),f=y.modeBits[n]+d+i;if(f.length>l)throw new Error("Capacity overflow");f+="0".repeat(Math.min(4,Math.max(0,l-f.length))),f.length%8&&(f+="0".repeat(8-f.length%8));let u="1110110000010001";for(let c=0;f.length!==l;c++)f+=u[c%u.length];let a=Uint8Array.from(f.match(/(.{8})/g).map(c=>+`0b${c}`));return Me(t,e).encode(a)}function ne(t,e,r,n,o=false){let i=Ue(t,e,n,o),s=0,l=8*r.length;if(Ie(i,n,(d,f,u)=>{let a=false;s<l&&(a=(r[s>>>3]>>(7-s&7)&1)!==0,s++),i.set(d,f,a!==u);}),s!==l)throw new Error("QR: bytes left after draw");return i}var ie=t=>{let e=t.map(r=>r?"1":"0").join("");return {len:e.length,n:+`0b${e}`}},se=[true,false,true,true,true,false,true],le=[false,false,false,false],R=ie([...se,...le]),oe=ie([...le,...se]);function Ae(t){let e=t,{width:r,height:n}=e,o=e.transpose(),i=0;for(let c=0;c<n;c++)e.getRuns(c,h=>{h>=5&&(i+=3+(h-5));});for(let c=0;c<r;c++)o.getRuns(c,h=>{h>=5&&(i+=3+(h-5));});let s=0;for(let c=0;c<n-1;c++)s+=3*e.countBoxes2x2(c);let l=0;for(let c=0;c<n;c++)l+=40*e.countPatternInRow(c,R.len,R.n,oe.n);for(let c=0;c<r;c++)l+=40*o.countPatternInRow(c,R.len,R.n,oe.n);let d=n*r,f=e.popcnt(),a=10*Math.ceil(Math.max(0,Math.abs(f*100-d*50)-d*5)/(d*5));return i+s+l+a}function Be(t,e,r,n){if(n===void 0){let o=Ee();for(let i=0;i<j.length;i++)o.add(Ae(ne(t,e,r,i,true)),i);n=o.get();}if(n===void 0)throw new Error("Cannot find mask");return ne(t,e,r,n)}function $e(t){if(!ee.includes(t))throw new Error(`Invalid error correction mode=${t}. Expected: ${ee}`)}function Ne(t){if(!te.includes(t))throw new Error(`Encoding: invalid mode=${t}. Expected: ${te}`);if(t==="kanji"||t==="eci")throw new Error(`Encoding: ${t} is not supported (yet?).`)}function Re(t){if(![0,1,2,3,4,5,6,7].includes(t)||!j[t])throw new Error(`Invalid mask=${t}. Expected number [0..7]`)}function De(t,e="raw",r={}){let n=r,o=n.ecc!==void 0?n.ecc:"medium";$e(o);let i=n.encoding!==void 0?n.encoding:Oe(t);Ne(i),n.mask!==void 0&&Re(n.mask);let s=n.version,l,d=new Error("Unknown error");if(s!==void 0)Se(s),l=re(s,o,t,i,n.textEncoder);else for(let a=1;a<=40;a++)try{l=re(a,o,t,i,n.textEncoder),s=a;break}catch(c){d=c;}if(!s||!l)throw d;let f=Be(s,o,l,n.mask);f.assertDrawn();let u=n.border===void 0?2:n.border;if(!Number.isSafeInteger(u)||u<=0)throw new Error(`invalid border=${u}`);if(f=f.border(u,false),n.scale!==void 0&&(f=f.scale(n.scale)),e==="raw")return f.toRaw();if(e==="ascii")return f.toASCII();if(e==="svg")return f.toSVG(n.optimize);if(e==="gif")return f.toGIF();if(e==="term")return f.toTerm();throw new Error(`Unknown output: ${e}`)}var ae=De;var ze=4,Qe="medium";function fe(t,e={}){var i,s;let r=(i=e.border)!=null?i:ze,n=(s=e.errorCorrection)!=null?s:Qe,o=ae(t,"raw",{border:r,ecc:n}).map(l=>l.map(Boolean));return {border:r,cells:o,errorCorrection:n,size:o.length,value:t}}var We="#fff",_e="#000",Ge=.2,ce=1,Fe=.25;function mt(t,e={}){var a,c,h;let r=(a=e.backgroundColor)!=null?a:We,n=(c=e.foregroundColor)!=null?c:_e,o=e.logo,i=fe(t,{border:e.border,errorCorrection:(h=e.errorCorrection)!=null?h:o?"high":void 0}),s=e.title?`<title>${qe(e.title)}</title>`:"",l=`<rect fill="${D(r)}" height="${i.size}" width="${i.size}" x="0" y="0"/>`,d=`<path d="${Ke(i.cells)}" fill="${D(n)}"/>`,f=o?je({backgroundColor:r,logo:o,size:i.size}):"";return `<svg ${e.title?'role="img"':'aria-hidden="true"'} shape-rendering="crispEdges" viewBox="0 0 ${i.size} ${i.size}" xmlns="http://www.w3.org/2000/svg">${s}${l}${d}${f}</svg>`}function je({backgroundColor:t,logo:e,size:r}){var f;let n=r*Ve(e.size),o=(r-n)/2,i=Math.max(0,Math.floor(o)-ce),l=Math.min(r,Math.ceil(o+n)+ce)-i,d=(f=e.backgroundColor)!=null?f:t;return [`<rect fill="${D(d)}" height="${k(l)}" width="${k(l)}" x="${k(i)}" y="${k(i)}"/>`,`<image height="${k(n)}" href="${D(e.href)}" preserveAspectRatio="xMidYMid meet" width="${k(n)}" x="${k(o)}" y="${k(o)}"/>`].join("")}function Ke(t){return t.flatMap((e,r)=>e.map((n,o)=>n?`M${o} ${r}h1v1H${o}z`:"")).join("")}function D(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}function qe(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function k(t){return Number(t.toFixed(6)).toString()}function Ve(t=Ge){return Math.min(t,Fe)}var v=[],P=0,z=4,A=0,B=t=>{let e=[],r={get(){return r.lc||r.listen(()=>{})(),r.value},init:t,lc:0,listen(n){return r.lc=e.push(n),()=>{for(let i=P+z;i<v.length;)v[i]===n?v.splice(i,z):i+=z;let o=e.indexOf(n);~o&&(e.splice(o,1),--r.lc||r.off());}},notify(n,o){A++;let i=!v.length;for(let s of e)v.push(s,r.value,n,o);if(i){for(P=0;P<v.length;P+=z)v[P](v[P+1],v[P+2],v[P+3]);v.length=0;}},off(){},set(n){let o=r.value;o!==n&&(r.value=n,r.notify(o));},subscribe(n){let o=r.listen(n);return n(r.value),o},value:t};return r};var Ye=5,Q=6,W=10,He=(t,e,r,n)=>(t.events=t.events||{},t.events[r+W]||(t.events[r+W]=n(o=>{t.events[r].reduceRight((i,s)=>(s(i),i),{shared:{},...o});})),t.events[r]=t.events[r]||[],t.events[r].push(e),()=>{let o=t.events[r],i=o.indexOf(e);o.splice(i,1),o.length||(delete t.events[r],t.events[r+W](),delete t.events[r+W]);});var de=1e3,$=(t,e)=>He(t,n=>{let o=e(n);o&&t.events[Q].push(o);},Ye,n=>{let o=t.listen;t.listen=(...s)=>(!t.lc&&!t.active&&(t.active=true,n()),o(...s));let i=t.off;return t.events[Q]=[],t.off=()=>{i(),setTimeout(()=>{if(t.active&&!t.lc){t.active=false;for(let s of t.events[Q])s();t.events[Q]=[];}},de);},()=>{t.listen=o,t.off=i;}});var Xe=(t,e,r)=>{Array.isArray(t)||(t=[t]);let n,o,i=()=>{if(o===A)return;o=A;let u=t.map(a=>a.get());if(!n||u.some((a,c)=>a!==n[c])){n=u;let a=e(...u);a&&a.then&&a.t?a.then(c=>{n===u&&s.set(c);}):(s.set(a),o=A);}},s=B(void 0),l=s.get;s.get=()=>(i(),l());let f=i;return $(s,()=>{let u=t.map(a=>a.listen(f));return i(),()=>{for(let a of u)a();}}),s},K=(t,e)=>Xe(t,e);var ue=t=>t,U={},q={addEventListener(){},removeEventListener(){}};function Ze(){try{return typeof localStorage<"u"}catch{return false}}Ze()&&(U=localStorage);var Je={addEventListener(t,e,r){window.addEventListener("storage",e),window.addEventListener("pageshow",r);},removeEventListener(t,e,r){window.removeEventListener("storage",e),window.removeEventListener("pageshow",r);}};typeof window<"u"&&(q=Je);function he(t,e=void 0,r={}){let n=r.encode||ue,o=r.decode||ue,i=B(e),s=i.set;i.set=f=>{let u=n(f);typeof u>"u"?delete U[t]:U[t]=u,s(f);};function l(f){f.key===t?f.newValue===null?s(e):s(o(f.newValue)):U[t]||s(e);}function d(){i.set(U[t]?o(U[t]):e);}return $(i,()=>{if(d(),r.listen!==false)return q.addEventListener(t,l,d),()=>{q.removeEventListener(t,l,d);}}),i}var _=class{constructor(e,r){this.key=e;this.initial=r;S(this,"atom");this.atom=he(e,r,{decode:JSON.parse,encode:JSON.stringify});}get(){return this.atom.get()}set(e){this.atom.set(e);}get value(){return K(this.atom,e=>e)}};function G({initial:t,key:e}){return new _(e,t)}function Gt({initial:t,key:e}={}){return G({initial:t,key:e!=null?e:"wallet-ui:account"})}function Kt({initial:t,key:e}={}){return G({initial:t!=null?t:"solana:devnet",key:e!=null?e:"wallet-ui:cluster"})}var ge=["solana","solscan","orb"];function Vt({network:t,path:e,provider:r}){if(!(e.startsWith("/address")||e.startsWith("/block")||e.startsWith("/tx")))throw new Error("Invalid path. Must be /address/{address}, /block/{id}, or /tx/{signature}.");if(!ge.includes(r))throw new Error(`Invalid provider. Must be one of ${ge.join(", ")}.`);let n=new URL(et(r));n.pathname=e;let o=tt(t);return o.cluster.length&&n.searchParams.set("cluster",o.cluster),o.customUrl.length&&n.searchParams.set("customUrl",o.customUrl),n.toString()}function et(t){switch(t){case "orb":return "https://orbmarkets.io";case "solscan":return "https://solscan.io";default:return "https://explorer.solana.com"}}function tt(t){switch(t.id){case "solana:devnet":return {cluster:"devnet",customUrl:""};case "solana:localnet":return {cluster:"custom",customUrl:t.url};case "solana:testnet":return {cluster:"testnet",customUrl:""};default:return {cluster:"",customUrl:""}}}function Ht(t){t&&(typeof globalThis>"u"||!globalThis.navigator||!globalThis.navigator.clipboard||!globalThis.navigator.clipboard.writeText||globalThis.navigator.clipboard.writeText(t));}function Zt(t){return t instanceof Uint8Array?t:new TextEncoder().encode(t)}/*! Bundled license information:
|
|
5
|
+
var xe=Object.defineProperty;var ye=(t,e,r)=>e in t?xe(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var S=(t,e,r)=>ye(t,typeof e!="symbol"?e+"":e,r);function nt(t){return t}function N(t,{id:e,label:r,url:n,urlWs:o}){var i,s,l;return typeof t=="string"?{id:e,label:r,url:t}:{id:e,label:(i=t.label)!=null?i:r,url:(s=t.url)!=null?s:n,urlWs:(l=t.urlWs)!=null?l:o}}function it(t="https://api.devnet.solana.com"){return N(t,{id:"solana:devnet",label:"Devnet",url:typeof t=="string"?t:t.url})}function st(t="http://localhost:8899"){var n;let e=typeof t=="string"?t:t.url,r=typeof t!="string"?(n=t.urlWs)!=null?n:be(e):void 0;return N(t,{id:"solana:localnet",label:"Localnet",url:e,urlWs:r})}function be(t){return t.endsWith(":8899")?t.replace(":8899",":8900").replace("http","ws"):void 0}function lt(t){return N(t,{id:"solana:mainnet",label:"Mainnet",url:typeof t=="string"?t:t.url})}function at(t="https://api.testnet.solana.com"){return N(t,{id:"solana:testnet",label:"Testnet",url:typeof t=="string"?t:t.url})}var I={newline:10,reset:27};function ve(t){if(!Number.isSafeInteger(t))throw new Error(`integer expected: ${t}`)}function Se(t){if(!Number.isSafeInteger(t)||t<1||t>40)throw new Error(`Invalid version=${t}. Expected number [1..40]`)}function P(t,e){return t.toString(2).padStart(e,"0")}function H(t,e){let r=t%e;return r>=0?r:e+r}function E(t,e){return new Array(t).fill(e)}function F(t){return t=t-(t>>>1&1431655765),t=(t&858993459)+(t>>>2&858993459),(t+(t>>>4)&252645135)*16843009>>>24}function X(t){let e=0,r=0;for(let i of t)e=Math.max(e,i.length),r+=i.length;let n=new Uint8Array(r),o=0;for(let i=0;i<e;i++)for(let s of t)i<s.length&&(n[o++]=s[i]);return n}function Ee(){let t,e=1/0;return {add(r,n){r>=e||(t=n,e=r);},get:()=>t,score:()=>e}}function Z(t){return Object.freeze({has:e=>t.includes(e),decode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="string")throw new Error("alphabet.decode input should be array of strings");return e.map(r=>{if(typeof r!="string")throw new Error(`alphabet.decode: not string element=${r}`);let n=t.indexOf(r);if(n===-1)throw new Error(`Unknown letter: "${r}". Allowed: ${t}`);return n})},encode:e=>{if(!Array.isArray(e)||e.length&&typeof e[0]!="number")throw new Error("alphabet.encode input should be an array of numbers");return e.map(r=>{if(ve(r),r<0||r>=t.length)throw new Error(`Digit index outside alphabet: ${r} (alphabet: ${t.length})`);return t[r]})}})}function J(t){if(t.length!==32)throw new Error("expects 32 element matrix");let e=[1431655765,858993459,252645135,16711935,65535];for(let r=0;r<5;r++){let n=e[r]>>>0,o=1<<r,i=o<<1;for(let s=0;s<32;s+=i)for(let l=0;l<o;l++){let d=s+l,f=d+o,u=t[d]>>>0,a=t[f]>>>0,c=(u>>>o^a)&n;t[d]=(u^c<<o)>>>0,t[f]=(a^c)>>>0;}}}var O=t=>1<<(t&31)>>>0,T=(t,e)=>e===0?0:e===32?4294967295:(1<<e)-1<<t>>>0,L=class t{constructor(e,r){S(this,"defined");S(this,"value");S(this,"tailMask");S(this,"words");S(this,"fullWords");S(this,"height");S(this,"width");let{height:n,width:o}=t.size(e);if(!Number.isSafeInteger(n)||n<=0)throw new Error(`Bitmap: invalid height=${n}, expected positive safe integer dimension`);if(!Number.isSafeInteger(o)||o<=0)throw new Error(`Bitmap: invalid width=${o}, expected positive safe integer dimension`);if(this.height=n,this.width=o,this.tailMask=T(0,o&31||32),this.words=Math.ceil(o/32)|0,this.fullWords=Math.floor(o/32)|0,this.value=new Uint32Array(this.words*n),this.defined=new Uint32Array(this.value.length),r){if(r.length!==n)throw new Error(`Bitmap: data height mismatch: exp=${n} got=${r.length}`);for(let i=0;i<n;i++){let s=r[i];if(!s||s.length!==o)throw new Error(`Bitmap: data width mismatch at y=${i}: exp=${o} got=${s==null?void 0:s.length}`);for(let l=0;l<o;l++)this.set(l,i,s[l]);}}}static size(e,r){if(typeof e=="number"&&(e={height:e,width:e}),!Number.isSafeInteger(e.height)&&e.height!==1/0)throw new Error(`Bitmap: invalid height=${e.height} (${typeof e.height})`);if(!Number.isSafeInteger(e.width)&&e.width!==1/0)throw new Error(`Bitmap: invalid width=${e.width} (${typeof e.width})`);return r!==void 0&&(e={width:Math.min(e.width,r.width),height:Math.min(e.height,r.height)}),e}static fromString(e){e=e.replace(/^\n+/g,"").replace(/\n+$/g,"");let r=e.split(String.fromCharCode(I.newline)),n=r.length,o,i=[];for(let s of r){let l=s.split("").map(d=>{if(d==="X")return true;if(d===" ")return false;if(d!=="?")throw new Error(`Bitmap.fromString: unknown symbol=${d}`)});if(o!==void 0&&l.length!==o)throw new Error(`Bitmap.fromString different row sizes: width=${o} cur=${l.length}`);o=l.length,i.push(l);}return o===void 0&&(o=0),new t({height:n,width:o},i)}point(e){return this.get(e.x,e.y)}isInside(e){return 0<=e.x&&e.x<this.width&&0<=e.y&&e.y<this.height}size(e){if(!e)return {height:this.height,width:this.width};let{x:r,y:n}=this.xy(e);return {height:this.height-n,width:this.width-r}}xy(e){if(typeof e=="number"&&(e={x:e,y:e}),!Number.isSafeInteger(e.x))throw new Error(`Bitmap: invalid x=${e.x}`);if(!Number.isSafeInteger(e.y))throw new Error(`Bitmap: invalid y=${e.y}`);return e.x=H(e.x,this.width),e.y=H(e.y,this.height),e}wordIndex(e,r){return r*this.words+(e>>>5)}bitIndex(e,r){return {word:this.wordIndex(e,r),bit:e&31}}isDefined(e,r){let n=this.wordIndex(e,r),o=O(e);return (this.defined[n]&o)!==0}get(e,r){let n=this.wordIndex(e,r),o=O(e);return (this.value[n]&o)!==0}maskWord(e,r,n){let{defined:o,value:i}=this;o[e]|=r,i[e]=i[e]&~r|-n&r;}set(e,r,n){n!==void 0&&this.maskWord(this.wordIndex(e,r),O(e),n);}fillRectConst(e,r,n,o,i){if(n<=0||o<=0||i===void 0)return;let{value:s,defined:l,words:d}=this,f=e>>>5,u=e+n-1>>>5,a=e&31,c=e+n-1&31;for(let h=0;h<o;h++){let m=(r+h)*d;if(f===u){let p=T(a,c-a+1);this.maskWord(m+f,p,i);continue}this.maskWord(m+f,T(a,32-a),i);for(let p=f+1;p<u;p++)l[m+p]=4294967295,s[m+p]=i?4294967295:0;this.maskWord(m+u,T(0,c+1),i);}}rectWords(e,r,n,o,i){for(let s=0;s<o;s++){let l=r+s;for(let d=0;d<n;){let f=e+d,{bit:u,word:a}=this.bitIndex(f,l),c=Math.min(32-u,n-d);i(a,f,d,s,c),d+=c;}}}rect(e,r,n){let{x:o,y:i}=this.xy(e),{height:s,width:l}=t.size(r,this.size({x:o,y:i}));if(typeof n!="function")return this.fillRectConst(o,i,l,s,n),this;let{defined:d,value:f}=this;return this.rectWords(o,i,l,s,(u,a,c,h,m)=>{let p=0,w=f[u];for(let x=0;x<m;x++){let b=O(a+x),C=n({x:c+x,y:h},(w&b)!==0);C!==void 0&&(p|=b,w=w&~b|-C&b);}d[u]|=p,f[u]=w;}),this}rectRead(e,r,n){let{x:o,y:i}=this.xy(e),{height:s,width:l}=t.size(r,this.size({x:o,y:i})),{value:d}=this;return this.rectWords(o,i,l,s,(f,u,a,c,h)=>{let m=d[f];for(let p=0;p<h;p++){let w=O(u+p);n({x:a+p,y:c},(m&w)!==0);}}),this}hLine(e,r,n){return this.rect(e,{width:r,height:1},n)}vLine(e,r,n){return this.rect(e,{width:1,height:r},n)}border(e=2,r){if(!Number.isSafeInteger(e)||e<=0)throw new Error(`Bitmap.border: invalid size=${e}`);let n=this.height+2*e,o=this.width+2*e,i=new t({height:n,width:o});return i.rect(0,1/0,r),i.embed({x:e,y:e},this),i}embed(e,r){let{x:n,y:o}=this.xy(e),{height:i,width:s}=t.size(r.size(),this.size({x:n,y:o}));if(s<=0||i<=0)return this;let{value:l,defined:d}=this,{words:f,value:u}=r;for(let a=0;a<i;a++){let c=a*f;for(let h=0;h<s;){let m=n+h,{word:p,bit:w}=this.bitIndex(m,o+a),{word:x,bit:b}=r.bitIndex(h,a),C=Math.min(32-w,s-h),V=u[x],me=b&&x+1<c+f?u[x+1]:0,pe=b?(V>>>b|me<<32-b)>>>0:V,Y=T(w,C),we=(pe&T(0,C))<<w>>>0;d[p]|=Y,l[p]=l[p]&~Y|we,h+=C;}}return this}rectSlice(e,r=this.size()){let{x:n,y:o}=this.xy(e),{height:i,width:s}=t.size(r,this.size({x:n,y:o})),l=new t({height:i,width:s});return this.rectRead({x:n,y:o},{height:i,width:s},(d,f)=>{this.isDefined(n+d.x,o+d.y)&&l.set(d.x,d.y,f);}),l}transpose(){let{height:e,width:r,value:n,defined:o,words:i}=this,s=new t({height:r,width:e}),{words:l,value:d,defined:f,tailMask:u}=s,a=new Uint32Array(32),c=new Uint32Array(32);for(let h=0;h<e;h+=32)for(let m=0;m<i;m++){let p=Math.min(32,e-h);for(let w=0;w<p;w++){let x=this.wordIndex(32*m,h+w);a[w]=n[x],c[w]=o[x];}a.fill(0,p),c.fill(0,p),J(a),J(c);for(let w=0;w<32;w++){let x=m*32+w;if(x>=r)break;let b=s.wordIndex(h,x),C=h>>>5===l-1?u:4294967295;d[b]=a[w]&C,f[b]=c[w]&C;}}return s}negate(){let e=this.defined.length;for(let r=0;r<e;r++)this.value[r]=~this.value[r],this.defined[r]=4294967295;return this}scale(e){if(!Number.isSafeInteger(e)||e>1024)throw new Error(`invalid scale factor: ${e}`);let{height:r,width:n}=this;return new t({height:e*r,width:e*n}).rect({x:0,y:0},1/0,({x:i,y:s})=>this.get(i/e|0,s/e|0))}clone(){let e=new t(this.size());return e.defined.set(this.defined),e.value.set(this.value),e}assertDrawn(){let{height:e,width:r,defined:n,tailMask:o,fullWords:i,words:s}=this;if(!(!e||!r))for(let l=0;l<e;l++){let d=l*s;for(let f=0;f<i;f++)if(n[d+f]!==4294967295)throw new Error("Invalid color type=undefined");if(s!==i&&(n[d+i]&o)!==o)throw new Error("Invalid color type=undefined")}}countPatternInRow(e,r,...n){if(!Number.isSafeInteger(r)||r<=0||r>=32)throw new Error("wrong patternLen");let o=(1<<r)-1,{height:i,width:s,value:l,words:d}=this;if(!Number.isSafeInteger(e)||e<0||e>=i)return 0;let f=0,u=this.wordIndex(0,e);for(let a=0,c=0;a<d;a++){let h=l[u+a],m=a===d-1&&s&31||32;for(let p=0;p<m;p++)if(c=(c<<1|h>>>p&1)&o,!(a*32+p+1<r)){for(let w of n)if(c===w){f++;break}}}return f}getRuns(e,r){let{height:n,width:o,value:i,words:s}=this;if(o===0||!Number.isSafeInteger(e)||e<0||e>=n)return;let l=0,d,f=this.wordIndex(0,e);for(let u=0;u<s;u++){let a=i[f+u],c=u===s-1&&o&31||32;for(let h=0;h<c;h++){let m=(a&1<<h)!==0;if(m===d){l++;continue}d!==void 0&&r(l,d),d=m,l=1;}}d!==void 0&&r(l,d);}popcnt(){let{height:e,width:r,words:n,fullWords:o,tailMask:i}=this;if(!e||!r)return 0;let s=0;for(let l=0;l<e;l++){let d=l*n;for(let f=0;f<o;f++)s+=F(this.value[d+f]);n!==o&&(s+=F(this.value[d+o]&i));}return s}countBoxes2x2(e){let{height:r,width:n,words:o}=this;if(n<2||!Number.isSafeInteger(e)||e<0||e+1>=r)return 0;let i=this.wordIndex(0,e),s=this.wordIndex(0,e+1),d=(n&31)===0?2147483647:T(0,n-1&31),f=0;for(let u=0;u<o;u++){let a=this.value[i+u],c=this.value[s+u],h=~(a^c)>>>0,m=u+1<o?this.value[i+u+1]>>>0:0,p=~(a^(a>>>1|(m&1)<<31)>>>0)>>>0,w=u+1<o?this.value[s+u+1]>>>0:0,x=~(c^(c>>>1|(w&1)<<31)>>>0)>>>0,b=(h&p&x)>>>0;u===o-1&&(b&=d),f+=F(b);}return f}toString(){let e=String.fromCharCode(I.newline),r="";for(let n=0;n<this.height;n++){let o="";for(let i=0;i<this.width;i++){let s=this.get(i,n);o+=this.isDefined(i,n)?s?"X":" ":"?";}r+=o+(n+1===this.height?"":e);}return r}toRaw(){let e=Array.from({length:this.height},()=>new Array(this.width));for(let r=0;r<this.height;r++){let n=e[r];for(let o=0;o<this.width;o++)n[o]=this.get(o,r);}return e}toASCII(){let{height:e,width:r}=this,n="";for(let o=0;o<e;o+=2){for(let i=0;i<r;i++){let s=this.get(i,o),l=o+1>=e?true:this.get(i,o+1);!s&&!l?n+="\u2588":!s&&l?n+="\u2580":s&&!l?n+="\u2584":s&&l&&(n+=" ");}n+=String.fromCharCode(I.newline);}return n}toTerm(){let e=String.fromCharCode(I.reset),r=e+"[0m",n=e+"[1;47m "+r,o=e+"[40m "+r,i=String.fromCharCode(I.newline),s="";for(let l=0;l<this.height;l++){for(let d=0;d<this.width;d++){let f=this.get(d,l);s+=f?o:n;}s+=i;}return s}toSVG(e=true){let r=`<svg viewBox="0 0 ${this.width} ${this.height}" xmlns="http://www.w3.org/2000/svg">`,n="",o;return this.rectRead(0,1/0,(i,s)=>{if(!s)return;let{x:l,y:d}=i;if(!e){r+=`<rect x="${l}" y="${d}" width="1" height="1" />`;return}let f=`M${l} ${d}`;if(o){let a=`m${l-o.x} ${d-o.y}`;a.length<=f.length&&(f=a);}let u=l<10?`H${l}`:"h-1";n+=`${f}h1v1${u}Z`,o=i;}),e&&(r+=`<path d="${n}"/>`),r+="</svg>",r}toGIF(){let e=l=>[l&255,l>>>8&255],r=[...e(this.width),...e(this.height)],n=[];this.rectRead(0,1/0,(l,d)=>n.push(+(d===true)));let o=126,i=[71,73,70,56,55,97,...r,246,0,0,255,255,255,...E(381,0),44,0,0,0,0,...r,0,7],s=Math.floor(n.length/o);for(let l=0;l<s;l++)i.push(o+1,128,...n.slice(o*l,o*(l+1)).map(d=>+d));return i.push(n.length%o+1,128,...n.slice(s*o).map(l=>+l)),i.push(1,129,0,59),new Uint8Array(i)}toImage(e=false){let{height:r,width:n}=this.size(),o=new Uint8Array(r*n*(e?3:4)),i=0;for(let s=0;s<r;s++)for(let l=0;l<n;l++){let d=this.get(l,s)?0:255;o[i++]=d,o[i++]=d,o[i++]=d,e||(o[i++]=255);}return {height:r,width:n,data:o}}},ee=Object.freeze(["low","medium","quartile","high"]),te=Object.freeze(["numeric","alphanumeric","byte","kanji","eci"]),Ce=[26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706],ke={low:[7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],medium:[10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],quartile:[13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],high:[17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]},Ue={low:[1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],medium:[1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],quartile:[1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],high:[1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]},y=Object.freeze({size:Object.freeze({encode:t=>21+4*(t-1),decode:t=>(t-17)/4}),sizeType:t=>Math.floor((t+7)/17),alignmentPatterns(t){if(t===1)return [];let e=6,r=y.size.encode(t)-e-1,n=r-e,o=Math.ceil(n/28),i=Math.floor(n/o);i%2?i+=1:n%o*2>=o&&(i+=2);let s=[e];for(let l=1;l<o;l++)s.push(r-(o-l)*i);return s.push(r),s},ECCode:Object.freeze({low:1,medium:0,quartile:3,high:2}),formatMask:21522,formatBits(t,e){let r=y.ECCode[t]<<3|e,n=r;for(let o=0;o<10;o++)n=n<<1^(n>>9)*1335;return (r<<10|n)^y.formatMask},versionBits(t){let e=t;for(let r=0;r<12;r++)e=e<<1^(e>>11)*7973;return t<<12|e},alphabet:Object.freeze({numeric:Z("0123456789"),alphanumerc:Z("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:")}),lengthBits(t,e){return {numeric:[10,12,14],alphanumeric:[9,11,13],byte:[8,16,16],kanji:[8,10,12],eci:[0,0,0]}[e][y.sizeType(t)]},modeBits:Object.freeze({numeric:"0001",alphanumeric:"0010",byte:"0100",kanji:"1000",eci:"0111"}),capacity(t,e){let r=Ce[t-1],n=ke[e][t-1],o=Ue[e][t-1],i=Math.floor(r/o)-n,s=o-r%o;return {words:n,numBlocks:o,shortBlocks:s,blockLen:i,capacity:(r-n*o)*8,total:(n+i)*o+o-s}}}),j=Object.freeze([(t,e)=>(t+e)%2==0,(t,e)=>e%2==0,(t,e)=>t%3==0,(t,e)=>(t+e)%3==0,(t,e)=>(Math.floor(e/2)+Math.floor(t/3))%2==0,(t,e)=>t*e%2+t*e%3==0,(t,e)=>(t*e%2+t*e%3)%2==0,(t,e)=>((t+e)%2+t*e%3)%2==0]),g={tables:(t=>{let e=E(256,0),r=E(256,0);for(let n=0,o=1;n<256;n++)e[n]=o,r[o]=n,o<<=1,o&256&&(o^=t);return {exp:e,log:r}})(285),exp:t=>g.tables.exp[t],log(t){if(t===0)throw new Error(`GF.log: invalid arg=${t}`);return g.tables.log[t]%255},mul(t,e){return t===0||e===0?0:g.tables.exp[(g.tables.log[t]+g.tables.log[e])%255]},add:(t,e)=>t^e,pow:(t,e)=>g.tables.exp[g.tables.log[t]*e%255],inv(t){if(t===0)throw new Error(`GF.inverse: invalid arg=${t}`);return g.tables.exp[255-g.tables.log[t]]},polynomial(t){if(t.length==0)throw new Error("GF.polymomial: invalid length");if(t[0]!==0)return t;let e=0;for(;e<t.length-1&&t[e]==0;e++);return t.slice(e)},monomial(t,e){if(t<0)throw new Error(`GF.monomial: invalid degree=${t}`);if(e==0)return [0];let r=E(t+1,0);return r[0]=e,g.polynomial(r)},degree:t=>t.length-1,coefficient:(t,e)=>t[g.degree(t)-e],mulPoly(t,e){if(t[0]===0||e[0]===0)return [0];let r=E(t.length+e.length-1,0);for(let n=0;n<t.length;n++)for(let o=0;o<e.length;o++)r[n+o]=g.add(r[n+o],g.mul(t[n],e[o]));return g.polynomial(r)},mulPolyScalar(t,e){if(e==0)return [0];if(e==1)return t;let r=E(t.length,0);for(let n=0;n<t.length;n++)r[n]=g.mul(t[n],e);return g.polynomial(r)},mulPolyMonomial(t,e,r){if(e<0)throw new Error("GF.mulPolyMonomial: invalid degree");if(r==0)return [0];let n=E(t.length+e,0);for(let o=0;o<t.length;o++)n[o]=g.mul(t[o],r);return g.polynomial(n)},addPoly(t,e){if(t[0]===0)return e;if(e[0]===0)return t;let r=t,n=e;r.length>n.length&&([r,n]=[n,r]);let o=E(n.length,0),i=n.length-r.length,s=n.slice(0,i);for(let l=0;l<s.length;l++)o[l]=s[l];for(let l=i;l<n.length;l++)o[l]=g.add(r[l-i],n[l]);return g.polynomial(o)},remainderPoly(t,e){let r=Array.from(t);for(let n=0;n<t.length-e.length+1;n++){let o=r[n];if(o!==0)for(let i=1;i<e.length;i++)e[i]!==0&&(r[n+i]=g.add(r[n+i],g.mul(e[i],o)));}return r.slice(t.length-e.length+1,r.length)},divisorPoly(t){let e=[1];for(let r=0;r<t;r++)e=g.mulPoly(e,[1,g.pow(2,r)]);return e},evalPoly(t,e){if(e==0)return g.coefficient(t,0);let r=t[0];for(let n=1;n<t.length;n++)r=g.add(g.mul(e,r),t[n]);return r},euclidian(t,e,r){g.degree(t)<g.degree(e)&&([t,e]=[e,t]);let n=t,o=e,i=[0],s=[1];for(;2*g.degree(o)>=r;){let f=n,u=i;if(n=o,i=s,n[0]===0)throw new Error("rLast[0] === 0");o=f;let a=[0],c=g.inv(n[0]);for(;g.degree(o)>=g.degree(n)&&o[0]!==0;){let h=g.degree(o)-g.degree(n),m=g.mul(o[0],c);a=g.addPoly(a,g.monomial(h,m)),o=g.addPoly(o,g.mulPolyMonomial(n,h,m));}if(a=g.mulPoly(a,i),s=g.addPoly(a,u),g.degree(o)>=g.degree(n))throw new Error(`Division failed r: ${o}, rLast: ${n}`)}let l=g.coefficient(s,0);if(l==0)throw new Error("sigmaTilde(0) was zero");let d=g.inv(l);return [g.mulPolyScalar(s,d),g.mulPolyScalar(o,d)]}};function Pe(t){return {encode(e){let r=g.divisorPoly(t),n=Array.from(e);return n.push(...r.slice(0,-1).fill(0)),Uint8Array.from(g.remainderPoly(n,r))},decode(e){let r=e.slice(),n=g.polynomial(Array.from(e)),o=E(t,0),i=false;for(let a=0;a<t;a++){let c=g.evalPoly(n,g.exp(a));o[o.length-1-a]=c,c!==0&&(i=true);}if(!i)return r;o=g.polynomial(o);let s=g.monomial(t,1),[l,d]=g.euclidian(s,o,t),f=E(g.degree(l),0),u=0;for(let a=1;a<256&&u<f.length;a++)g.evalPoly(l,a)===0&&(f[u++]=g.inv(a));if(u!==f.length)throw new Error("RS.decode: invalid errors number");for(let a=0;a<f.length;a++){let c=r.length-1-g.log(f[a]);if(c<0)throw new Error("RS.decode: invalid error location");let h=g.inv(f[a]),m=1;for(let p=0;p<f.length;p++)a!==p&&(m=g.mul(m,g.add(1,g.mul(f[p],h))));r[c]=g.add(r[c],g.mul(g.evalPoly(d,h),g.inv(m)));}return r}}}function Te(t,e){let{words:r,shortBlocks:n,numBlocks:o,blockLen:i,total:s}=y.capacity(t,e),l=Pe(r);return {encode(d){let f=[],u=[];for(let m=0;m<o;m++){let p=m<n,w=i+(p?0:1);f.push(d.subarray(0,w)),u.push(l.encode(d.subarray(0,w))),d=d.subarray(w);}let a=X(f),c=X(u),h=new Uint8Array(a.length+c.length);return h.set(a),h.set(c,a.length),h},decode(d){if(d.length!==s)throw new Error(`interleave.decode: len(data)=${d.length}, total=${s}`);let f=[];for(let c=0;c<o;c++){let h=c<n;f.push(new Uint8Array(r+i+(h?0:1)));}let u=0;for(let c=0;c<i;c++)for(let h=0;h<o;h++)f[h][c]=d[u++];for(let c=n;c<o;c++)f[c][i]=d[u++];for(let c=i;c<i+r;c++)for(let h=0;h<o;h++){let m=h<n;f[h][c+(m?0:1)]=d[u++];}let a=[];for(let c of f)a.push(...Array.from(l.decode(c)).slice(0,-r));return Uint8Array.from(a)}}}function Me(t,e,r,n=false){let o=y.size.encode(t),i=new L(o+2),s=new L(3).rect(0,3,true).border(1,false).border(1,true).border(1,false);i=i.embed(0,s).embed({x:-s.width,y:0},s).embed({x:0,y:-s.height},s),i=i.rectSlice(1,o);let l=new L(1).rect(0,1,true).border(1,false).border(1,true),d=y.alignmentPatterns(t);for(let f of d)for(let u of d)i.isDefined(u,f)||i.embed({x:u-2,y:f-2},l);i=i.hLine({x:0,y:6},1/0,({x:f})=>i.isDefined(f,6)?void 0:f%2==0).vLine({x:6,y:0},1/0,({y:f})=>i.isDefined(6,f)?void 0:f%2==0);{let f=y.formatBits(e,r),u=a=>!n&&(f>>a&1)==1;for(let a=0;a<6;a++)i.set(8,a,u(a));for(let a=6;a<8;a++)i.set(8,a+1,u(a));for(let a=8;a<15;a++)i.set(8,o-15+a,u(a));for(let a=0;a<8;a++)i.set(o-a-1,8,u(a));for(let a=8;a<9;a++)i.set(15-a-1+1,8,u(a));for(let a=9;a<15;a++)i.set(15-a-1,8,u(a));i.set(8,o-8,!n);}if(t>=7){let f=y.versionBits(t);for(let u=0;u<18;u+=1){let a=!n&&(f>>u&1)==1,c=Math.floor(u/3),h=u%3+o-8-3;i.set(h,c,a),i.set(c,h,a);}}return i}function Ie(t,e,r){let n=t,o=n.height,i=j[e],s=-1,l=o-1;for(let d=o-1;d>0;d-=2){for(d==6&&(d=5);;l+=s){for(let f=0;f<2;f+=1){let u=d-f;n.isDefined(u,l)||r(u,l,i(u,l));}if(l+s<0||l+s>=o)break}s=-s;}}function Oe(t){let e="numeric";for(let r of t)if(!y.alphabet.numeric.has(r)&&(e="alphanumeric",!y.alphabet.alphanumerc.has(r)))return "byte";return e}function Le(t){if(typeof t!="string")throw new Error(`utf8ToBytes expected string, got ${typeof t}`);return new Uint8Array(new TextEncoder().encode(t))}function re(t,e,r,n,o=Le){let i="",s=r.length;if(n==="numeric"){let c=y.alphabet.numeric.decode(r.split("")),h=c.length;for(let m=0;m<h-2;m+=3)i+=P(c[m]*100+c[m+1]*10+c[m+2],10);h%3===1?i+=P(c[h-1],4):h%3===2&&(i+=P(c[h-2]*10+c[h-1],7));}else if(n==="alphanumeric"){let c=y.alphabet.alphanumerc.decode(r.split("")),h=c.length;for(let m=0;m<h-1;m+=2)i+=P(c[m]*45+c[m+1],11);h%2==1&&(i+=P(c[h-1],6));}else if(n==="byte"){let c=o(r);s=c.length,i=Array.from(c).map(h=>P(h,8)).join("");}else throw new Error("encode: unsupported type");let{capacity:l}=y.capacity(t,e),d=P(s,y.lengthBits(t,n)),f=y.modeBits[n]+d+i;if(f.length>l)throw new Error("Capacity overflow");f+="0".repeat(Math.min(4,Math.max(0,l-f.length))),f.length%8&&(f+="0".repeat(8-f.length%8));let u="1110110000010001";for(let c=0;f.length!==l;c++)f+=u[c%u.length];let a=Uint8Array.from(f.match(/(.{8})/g).map(c=>+`0b${c}`));return Te(t,e).encode(a)}function ne(t,e,r,n,o=false){let i=Me(t,e,n,o),s=0,l=8*r.length;if(Ie(i,n,(d,f,u)=>{let a=false;s<l&&(a=(r[s>>>3]>>(7-s&7)&1)!==0,s++),i.set(d,f,a!==u);}),s!==l)throw new Error("QR: bytes left after draw");return i}var ie=t=>{let e=t.map(r=>r?"1":"0").join("");return {len:e.length,n:+`0b${e}`}},se=[true,false,true,true,true,false,true],le=[false,false,false,false],R=ie([...se,...le]),oe=ie([...le,...se]);function Ae(t){let e=t,{width:r,height:n}=e,o=e.transpose(),i=0;for(let c=0;c<n;c++)e.getRuns(c,h=>{h>=5&&(i+=3+(h-5));});for(let c=0;c<r;c++)o.getRuns(c,h=>{h>=5&&(i+=3+(h-5));});let s=0;for(let c=0;c<n-1;c++)s+=3*e.countBoxes2x2(c);let l=0;for(let c=0;c<n;c++)l+=40*e.countPatternInRow(c,R.len,R.n,oe.n);for(let c=0;c<r;c++)l+=40*o.countPatternInRow(c,R.len,R.n,oe.n);let d=n*r,f=e.popcnt(),a=10*Math.ceil(Math.max(0,Math.abs(f*100-d*50)-d*5)/(d*5));return i+s+l+a}function Be(t,e,r,n){if(n===void 0){let o=Ee();for(let i=0;i<j.length;i++)o.add(Ae(ne(t,e,r,i,true)),i);n=o.get();}if(n===void 0)throw new Error("Cannot find mask");return ne(t,e,r,n)}function $e(t){if(!ee.includes(t))throw new Error(`Invalid error correction mode=${t}. Expected: ${ee}`)}function Ne(t){if(!te.includes(t))throw new Error(`Encoding: invalid mode=${t}. Expected: ${te}`);if(t==="kanji"||t==="eci")throw new Error(`Encoding: ${t} is not supported (yet?).`)}function Re(t){if(![0,1,2,3,4,5,6,7].includes(t)||!j[t])throw new Error(`Invalid mask=${t}. Expected number [0..7]`)}function De(t,e="raw",r={}){let n=r,o=n.ecc!==void 0?n.ecc:"medium";$e(o);let i=n.encoding!==void 0?n.encoding:Oe(t);Ne(i),n.mask!==void 0&&Re(n.mask);let s=n.version,l,d=new Error("Unknown error");if(s!==void 0)Se(s),l=re(s,o,t,i,n.textEncoder);else for(let a=1;a<=40;a++)try{l=re(a,o,t,i,n.textEncoder),s=a;break}catch(c){d=c;}if(!s||!l)throw d;let f=Be(s,o,l,n.mask);f.assertDrawn();let u=n.border===void 0?2:n.border;if(!Number.isSafeInteger(u)||u<=0)throw new Error(`invalid border=${u}`);if(f=f.border(u,false),n.scale!==void 0&&(f=f.scale(n.scale)),e==="raw")return f.toRaw();if(e==="ascii")return f.toASCII();if(e==="svg")return f.toSVG(n.optimize);if(e==="gif")return f.toGIF();if(e==="term")return f.toTerm();throw new Error(`Unknown output: ${e}`)}var ae=De;var ze=4,Qe="medium";function fe(t,e={}){var i,s;let r=(i=e.border)!=null?i:ze,n=(s=e.errorCorrection)!=null?s:Qe,o=ae(t,"raw",{border:r,ecc:n}).map(l=>l.map(Boolean));return {border:r,cells:o,errorCorrection:n,size:o.length,value:t}}var We="#fff",_e="#000",Ge=.2,ce=1,Fe=.25;function mt(t,e={}){var a,c,h;let r=(a=e.backgroundColor)!=null?a:We,n=(c=e.foregroundColor)!=null?c:_e,o=e.logo,i=fe(t,{border:e.border,errorCorrection:(h=e.errorCorrection)!=null?h:o?"high":void 0}),s=e.title?`<title>${qe(e.title)}</title>`:"",l=`<rect fill="${D(r)}" height="${i.size}" width="${i.size}" x="0" y="0"/>`,d=`<path d="${Ke(i.cells)}" fill="${D(n)}"/>`,f=o?je({backgroundColor:r,logo:o,size:i.size}):"";return `<svg ${e.title?'role="img"':'aria-hidden="true"'} shape-rendering="crispEdges" viewBox="0 0 ${i.size} ${i.size}" xmlns="http://www.w3.org/2000/svg">${s}${l}${d}${f}</svg>`}function je({backgroundColor:t,logo:e,size:r}){var f;let n=r*Ve(e.size),o=(r-n)/2,i=Math.max(0,Math.floor(o)-ce),l=Math.min(r,Math.ceil(o+n)+ce)-i,d=(f=e.backgroundColor)!=null?f:t;return [`<rect fill="${D(d)}" height="${k(l)}" width="${k(l)}" x="${k(i)}" y="${k(i)}"/>`,`<image height="${k(n)}" href="${D(e.href)}" preserveAspectRatio="xMidYMid meet" width="${k(n)}" x="${k(o)}" y="${k(o)}"/>`].join("")}function Ke(t){return t.flatMap((e,r)=>e.map((n,o)=>n?`M${o} ${r}h1v1H${o}z`:"")).join("")}function D(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}function qe(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function k(t){return Number(t.toFixed(6)).toString()}function Ve(t=Ge){return Math.min(t,Fe)}var v=[],U=0,z=4,A=0,B=t=>{let e=[],r={get(){return r.lc||r.listen(()=>{})(),r.value},init:t,lc:0,listen(n){return r.lc=e.push(n),()=>{for(let i=U+z;i<v.length;)v[i]===n?v.splice(i,z):i+=z;let o=e.indexOf(n);~o&&(e.splice(o,1),--r.lc||r.off());}},notify(n,o){A++;let i=!v.length;for(let s of e)v.push(s,r.value,n,o);if(i){for(U=0;U<v.length;U+=z)v[U](v[U+1],v[U+2],v[U+3]);v.length=0;}},off(){},set(n){let o=r.value;o!==n&&(r.value=n,r.notify(o));},subscribe(n){let o=r.listen(n);return n(r.value),o},value:t};return r};var Ye=5,Q=6,W=10,He=(t,e,r,n)=>(t.events=t.events||{},t.events[r+W]||(t.events[r+W]=n(o=>{t.events[r].reduceRight((i,s)=>(s(i),i),{shared:{},...o});})),t.events[r]=t.events[r]||[],t.events[r].push(e),()=>{let o=t.events[r],i=o.indexOf(e);o.splice(i,1),o.length||(delete t.events[r],t.events[r+W](),delete t.events[r+W]);});var de=1e3,$=(t,e)=>He(t,n=>{let o=e(n);o&&t.events[Q].push(o);},Ye,n=>{let o=t.listen;t.listen=(...s)=>(!t.lc&&!t.active&&(t.active=true,n()),o(...s));let i=t.off;return t.events[Q]=[],t.off=()=>{i(),setTimeout(()=>{if(t.active&&!t.lc){t.active=false;for(let s of t.events[Q])s();t.events[Q]=[];}},de);},()=>{t.listen=o,t.off=i;}});var Xe=(t,e,r)=>{Array.isArray(t)||(t=[t]);let n,o,i=()=>{if(o===A)return;o=A;let u=t.map(a=>a.get());if(!n||u.some((a,c)=>a!==n[c])){n=u;let a=e(...u);a&&a.then&&a.t?a.then(c=>{n===u&&s.set(c);}):(s.set(a),o=A);}},s=B(void 0),l=s.get;s.get=()=>(i(),l());let f=i;return $(s,()=>{let u=t.map(a=>a.listen(f));return i(),()=>{for(let a of u)a();}}),s},K=(t,e)=>Xe(t,e);var ue=t=>t,M={},q={addEventListener(){},removeEventListener(){}};function Ze(){try{return typeof localStorage<"u"}catch{return false}}Ze()&&(M=localStorage);var Je={addEventListener(t,e,r){window.addEventListener("storage",e),window.addEventListener("pageshow",r);},removeEventListener(t,e,r){window.removeEventListener("storage",e),window.removeEventListener("pageshow",r);}};typeof window<"u"&&(q=Je);function he(t,e=void 0,r={}){let n=r.encode||ue,o=r.decode||ue,i=B(e),s=i.set;i.set=f=>{let u=n(f);typeof u>"u"?delete M[t]:M[t]=u,s(f);};function l(f){f.key===t?f.newValue===null?s(e):s(o(f.newValue)):M[t]||s(e);}function d(){i.set(M[t]?o(M[t]):e);}return $(i,()=>{if(d(),r.listen!==false)return q.addEventListener(t,l,d),()=>{q.removeEventListener(t,l,d);}}),i}var _=class{constructor(e,r){this.key=e;this.initial=r;S(this,"atom");this.atom=he(e,r,{decode:JSON.parse,encode:JSON.stringify});}get(){return this.atom.get()}set(e){this.atom.set(e);}get value(){return K(this.atom,e=>e)}};function G({initial:t,key:e}){return new _(e,t)}function Gt({initial:t,key:e}={}){return G({initial:t,key:e!=null?e:"wallet-ui:account"})}function Kt({initial:t,key:e}={}){return G({initial:t!=null?t:"solana:devnet",key:e!=null?e:"wallet-ui:cluster"})}var ge=["solana","solscan","orb"];function Vt({network:t,path:e,provider:r}){if(!(e.startsWith("/address")||e.startsWith("/block")||e.startsWith("/tx")))throw new Error("Invalid path. Must be /address/{address}, /block/{id}, or /tx/{signature}.");if(!ge.includes(r))throw new Error(`Invalid provider. Must be one of ${ge.join(", ")}.`);let n=new URL(et(r));n.pathname=e;let o=tt(t);return o.cluster.length&&n.searchParams.set("cluster",o.cluster),o.customUrl.length&&n.searchParams.set("customUrl",o.customUrl),n.toString()}function et(t){switch(t){case "orb":return "https://orbmarkets.io";case "solscan":return "https://solscan.io";default:return "https://explorer.solana.com"}}function tt(t){switch(t.id){case "solana:devnet":return {cluster:"devnet",customUrl:""};case "solana:localnet":return {cluster:"custom",customUrl:t.url};case "solana:testnet":return {cluster:"testnet",customUrl:""};default:return {cluster:"",customUrl:""}}}function Ht(t){t&&(typeof globalThis>"u"||!globalThis.navigator||!globalThis.navigator.clipboard||!globalThis.navigator.clipboard.writeText||globalThis.navigator.clipboard.writeText(t));}function Zt(t){return t instanceof Uint8Array?t:new TextEncoder().encode(t)}/*! Bundled license information:
|
|
6
6
|
|
|
7
7
|
qr/index.js:
|
|
8
8
|
(*!
|
package/dist/types/clusters.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clusters.d.ts","sourceRoot":"","sources":["../../src/clusters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"clusters.d.ts","sourceRoot":"","sources":["../../src/clusters.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,aAAa,EAIrB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AA8BrH,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,iBAAmD,GAAG,aAAa,CAM5G;AAED,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,iBAA2C,GAAG,aAAa,CAStG;AAKD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,aAAa,CAM3E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,iBAAoD,GAAG,aAAa,CAM9G"}
|