@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.browser.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;
|
|
@@ -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.browser.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.browser.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.browser.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":";;;;;;;;AAYO,SAAS,SAAS,GAAA,EAAa;AAClC,EAAA,OAAO,GAAA;AACX;;;ACRA,SAAS,mBAAA,CACL,OACA,EAAE,EAAA,EAAI,OAAO,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,YAAA,EAAa,EACrC;AACb,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,GAAA,EAAK,KAAA,EAAM;AAAA,EACnC;AAEA,EAAA,OAAO;AAAA,IACH,EAAA;AAAA,IACA,KAAA,EAAO,MAAM,KAAA,IAAS,KAAA;AAAA,IACtB,GAAA,EAAK,MAAM,GAAA,IAAO,UAAA;AAAA,IAClB,KAAA,EAAO,MAAM,KAAA,IAAS;AAAA,GAC1B;AACJ;AAEO,SAAS,kBAAA,CAAmB,QAA2B,+BAAA,EAAgD;AAC1G,EAAA,OAAO,oBAAoB,KAAA,EAAO;AAAA,IAC9B,EAAA,EAAI,eAAA;AAAA,IACJ,KAAA,EAAO,QAAA;AAAA,IACP,KAAK,MAAA,CAAO,OAAO,UAAU,QAAA,GAAW,KAAA,GAAQ,MAAM,GAAG;AAAA,GAC5D,CAAA;AACL;AAEO,SAAS,oBAAA,CAAqB,QAA2B,uBAAA,EAAwC;AACpG,EAAA,MAAM,GAAA,GAAM,OAAO,KAAA,KAAU,QAAA,GAAW,QAAQ,KAAA,CAAM,GAAA;AACtD,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,KAAU,QAAA,GAAY,MAAM,KAAA,IAAS,aAAA,CAAc,GAAG,CAAA,GAAK,MAAA;AAChF,EAAA,OAAO,oBAAoB,KAAA,EAAO;AAAA,IAC9B,EAAA,EAAI,iBAAA;AAAA,IACJ,KAAA,EAAO,UAAA;AAAA,IACP,GAAA,EAAK,SAAS,GAAG,CAAA;AAAA,IACjB;AAAA,GACH,CAAA;AACL;AAEA,SAAS,cAAc,GAAA,EAAa;AAChC,EAAA,OAAO,GAAA,CAAI,QAAA,CAAS,OAAO,CAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,OAAO,CAAA,CAAE,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA,GAAI,MAAA;AACzF;AACO,SAAS,oBAAoB,KAAA,EAAyC;AACzE,EAAA,OAAO,oBAAoB,KAAA,EAAO;AAAA,IAC9B,EAAA,EAAI,gBAAA;AAAA,IACJ,KAAA,EAAO,SAAA;AAAA,IACP,KAAK,OAAA,CAAQ,OAAO,UAAU,QAAA,GAAW,KAAA,GAAQ,MAAM,GAAG;AAAA,GAC7D,CAAA;AACL;AAEO,SAAS,mBAAA,CAAoB,QAA2B,gCAAA,EAAiD;AAC5G,EAAA,OAAO,oBAAoB,KAAA,EAAO;AAAA,IAC9B,EAAA,EAAI,gBAAA;AAAA,IACJ,KAAA,EAAO,SAAA;AAAA,IACP,KAAK,OAAA,CAAQ,OAAO,UAAU,QAAA,GAAW,KAAA,GAAQ,MAAM,GAAG;AAAA,GAC7D,CAAA;AACL;ACzCA,IAAM,sBAAA,GAAyB,CAAA;AAC/B,IAAM,gCAAA,GAA0D,QAAA;AAEzD,SAAS,YAAA,CAAa,KAAA,EAAe,OAAA,GAAyB,EAAC,EAAW;AAC7E,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,sBAAA;AACjC,EAAA,MAAM,eAAA,GAAkB,QAAQ,eAAA,IAAmB,gCAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,EAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,GAAA,EAAK,eAAA,EAAiB,EAAE,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,GAAA,CAAI,OAAO,CAAC,CAAA;AAElG,EAAA,OAAO;AAAA,IACH,MAAA;AAAA,IACA,KAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAM,KAAA,CAAM,MAAA;AAAA,IACZ;AAAA,GACJ;AACJ;;;ACjBA,IAAM,gCAAA,GAAmC,MAAA;AACzC,IAAM,gCAAA,GAAmC,MAAA;AACzC,IAAM,yBAAA,GAA4B,GAAA;AAClC,IAAM,uBAAA,GAA0B,CAAA;AAChC,IAAM,qBAAA,GAAwB,IAAA;AAEvB,SAAS,eAAA,CAAgB,KAAA,EAAe,OAAA,GAA4B,EAAC,EAAW;AACnF,EAAA,MAAM,eAAA,GAAkB,QAAQ,eAAA,IAAmB,gCAAA;AACnD,EAAA,MAAM,eAAA,GAAkB,QAAQ,eAAA,IAAmB,gCAAA;AACnD,EAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,EAAA,MAAM,MAAA,GAAS,aAAa,KAAA,EAAO;AAAA,IAC/B,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,eAAA,EAAiB,OAAA,CAAQ,eAAA,KAAoB,IAAA,GAAO,MAAA,GAAS,MAAA;AAAA,GAChE,CAAA;AACD,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,GAAQ,CAAA,OAAA,EAAU,cAAc,OAAA,CAAQ,KAAK,CAAC,CAAA,QAAA,CAAA,GAAa,EAAA;AACjF,EAAA,MAAM,UAAA,GAAa,CAAA,YAAA,EAAe,kBAAA,CAAmB,eAAe,CAAC,aAAa,MAAA,CAAO,IAAI,CAAA,SAAA,EAAY,MAAA,CAAO,IAAI,CAAA,eAAA,CAAA;AACpH,EAAA,MAAM,UAAA,GAAa,YAAY,mBAAA,CAAoB,MAAA,CAAO,KAAK,CAAC,CAAA,QAAA,EAAW,kBAAA,CAAmB,eAAe,CAAC,CAAA,GAAA,CAAA;AAC9G,EAAA,MAAM,OAAA,GAAU,IAAA,GAAO,mBAAA,CAAoB,EAAE,eAAA,EAAiB,MAAM,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,CAAA,GAAI,EAAA;AAC3F,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,KAAA,GAAQ,YAAA,GAAe,oBAAA;AAErD,EAAA,OAAO,CAAA,KAAA,EAAQ,aAAa,CAAA,2CAAA,EAA8C,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAA,qCAAA,EAAwC,KAAK,CAAA,EAAG,UAAU,CAAA,EAAG,UAAU,GAAG,OAAO,CAAA,MAAA,CAAA;AACzL;AAEA,SAAS,mBAAA,CAAoB;AAAA,EACzB,eAAA;AAAA,EACA,IAAA;AAAA,EACA;AACJ,CAAA,EAIW;AACP,EAAA,MAAM,QAAA,GAAW,IAAA,GAAO,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AACnD,EAAA,MAAM,YAAA,GAAA,CAAgB,OAAO,QAAA,IAAY,CAAA;AACzC,EAAA,MAAM,sBAAA,GAAyB,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,YAAY,IAAI,uBAAuB,CAAA;AAC7F,EAAA,MAAM,iBAAA,GAAoB,KAAK,GAAA,CAAI,IAAA,EAAM,KAAK,IAAA,CAAK,YAAA,GAAe,QAAQ,CAAA,GAAI,uBAAuB,CAAA;AACrG,EAAA,MAAM,qBAAqB,iBAAA,GAAoB,sBAAA;AAC/C,EAAA,MAAM,mBAAA,GAAsB,KAAK,eAAA,IAAmB,eAAA;AAEpD,EAAA,OAAO;AAAA,IACH,eAAe,kBAAA,CAAmB,mBAAmB,CAAC,CAAA,UAAA,EAAa,eAAA,CAAgB,kBAAkB,CAAC,CAAA,SAAA,EAAY,gBAAgB,kBAAkB,CAAC,QAAQ,eAAA,CAAgB,sBAAsB,CAAC,CAAA,KAAA,EAAQ,eAAA,CAAgB,sBAAsB,CAAC,CAAA,GAAA,CAAA;AAAA,IACnP,CAAA,eAAA,EAAkB,gBAAgB,QAAQ,CAAC,WAAW,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAC,CAAA,6CAAA,EAAgD,gBAAgB,QAAQ,CAAC,QAAQ,eAAA,CAAgB,YAAY,CAAC,CAAA,KAAA,EAAQ,eAAA,CAAgB,YAAY,CAAC,CAAA,GAAA;AAAA,GAC1O,CAAE,KAAK,EAAE,CAAA;AACb;AAEA,SAAS,oBAAoB,KAAA,EAA4B;AACrD,EAAA,OAAO,KAAA,CACF,OAAA;AAAA,IAAQ,CAAC,GAAA,EAAK,QAAA,KACX,GAAA,CAAI,GAAA,CAAI,CAAC,IAAA,EAAM,WAAA,KAAiB,IAAA,GAAO,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,EAAI,QAAQ,CAAA,KAAA,EAAQ,WAAW,MAAM,EAAG;AAAA,GAClG,CACC,KAAK,EAAE,CAAA;AAChB;AAEA,SAAS,mBAAmB,KAAA,EAAuB;AAC/C,EAAA,OAAO,MACF,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,MAAM,QAAQ,CAAA,CACtB,QAAQ,IAAA,EAAM,QAAQ,EACtB,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,MAAM,MAAM,CAAA;AAC7B;AAEA,SAAS,cAAc,KAAA,EAAuB;AAC1C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,MAAM,CAAA;AAClF;AAEA,SAAS,gBAAgB,KAAA,EAAuB;AAC5C,EAAA,OAAO,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,EAAE,QAAA,EAAS;AAC7C;AAEA,SAAS,iBAAA,CAAkB,OAAO,yBAAA,EAAmC;AACjE,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,qBAAqB,CAAA;AAC/C;ACpFO,IAAM,UAAN,MAAiB;AAAA,EAGpB,WAAA,CACa,KACA,OAAA,EACX;AAFW,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAET,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA,CAAkB,GAAA,EAAK,OAAA,EAAS,EAAE,MAAA,EAAQ,IAAA,CAAK,KAAA,EAAO,MAAA,EAAQ,IAAA,CAAK,SAAA,EAAW,CAAA;AAAA,EAC9F;AAAA,EAPiB,IAAA;AAAA,EASjB,GAAA,GAAM;AACF,IAAA,OAAO,IAAA,CAAK,KAAK,GAAA,EAAI;AAAA,EACzB;AAAA,EAEA,IAAI,KAAA,EAAU;AACV,IAAA,IAAA,CAAK,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,EACvB;AAAA,EAEA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,IAAA,EAAM,CAAA,KAAA,KAAS,KAAK,CAAA;AAAA,EAC7C;AACJ;;;ACtBO,SAAS,aAAA,CAAiB,EAAE,OAAA,EAAS,GAAA,EAAI,EAAgC;AAC5E,EAAA,OAAO,IAAI,OAAA,CAAQ,GAAA,EAAK,OAAO,CAAA;AACnC;;;ACCO,SAAS,oBAAA,CAAqB;AAAA,EACjC,OAAA;AAAA,EACA;AACJ,CAAA,GAGI,EAAC,EAAmB;AACpB,EAAA,OAAO,aAAA,CAAkC;AAAA,IACrC,OAAA;AAAA,IACA,KAAK,GAAA,IAAO;AAAA,GACf,CAAA;AACL;;;ACVO,SAAS,oBAAA,CAAqB;AAAA,EACjC,OAAA;AAAA,EACA;AACJ,CAAA,GAGI,EAAC,EAAmB;AACpB,EAAA,OAAO,aAAA,CAA+B;AAAA,IAClC,SAAS,OAAA,IAAW,eAAA;AAAA,IACpB,KAAK,GAAA,IAAO;AAAA,GACf,CAAA;AACL;;;ACbO,IAAM,iBAAA,GAAwC,CAAC,QAAA,EAAU,SAAA,EAAW,KAAK;AAazE,SAAS,cAAA,CAAe,EAAE,OAAA,EAAS,IAAA,EAAM,UAAS,EAAwB;AAC7E,EAAA,IAAI,EAAE,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,IAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,IAAK,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,CAAA,EAAI;AACvF,IAAA,MAAM,IAAI,MAAM,4EAA4E,CAAA;AAAA,EAChG;AACA,EAAA,IAAI,CAAC,iBAAA,CAAkB,QAAA,CAAS,QAAQ,CAAA,EAAG;AACvC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,kBAAkB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACvF;AACA,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,kBAAA,CAAmB,QAAQ,CAAC,CAAA;AAChD,EAAA,GAAA,CAAI,QAAA,GAAW,IAAA;AACf,EAAA,MAAM,MAAA,GAAS,kBAAkB,OAAO,CAAA;AACxC,EAAA,IAAI,MAAA,CAAO,QAAQ,MAAA,EAAQ;AACvB,IAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,MAAA,CAAO,OAAO,CAAA;AAAA,EAClD;AACA,EAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAQ;AACzB,IAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,WAAA,EAAa,MAAA,CAAO,SAAS,CAAA;AAAA,EACtD;AACA,EAAA,OAAO,IAAI,QAAA,EAAS;AACxB;AAEA,SAAS,mBAAmB,QAAA,EAA4B;AACpD,EAAA,QAAQ,QAAA;AAAU,IACd,KAAK,KAAA;AACD,MAAA,OAAO,uBAAA;AAAA,IACX,KAAK,SAAA;AACD,MAAA,OAAO,oBAAA;AAAA,IACX;AACI,MAAA,OAAO,6BAAA;AAAA;AAEnB;AAEA,SAAS,kBAAkB,KAAA,EAGzB;AACE,EAAA,QAAQ,MAAM,EAAA;AAAI,IACd,KAAK,eAAA;AACD,MAAA,OAAO,EAAE,OAAA,EAAS,QAAA,EAAU,SAAA,EAAW,EAAA,EAAG;AAAA,IAC9C,KAAK,iBAAA;AACD,MAAA,OAAO,EAAE,OAAA,EAAS,QAAA,EAAU,SAAA,EAAW,MAAM,GAAA,EAAI;AAAA,IACrD,KAAK,gBAAA;AACD,MAAA,OAAO,EAAE,OAAA,EAAS,SAAA,EAAW,SAAA,EAAW,EAAA,EAAG;AAAA,IAC/C;AACI,MAAA,OAAO,EAAE,OAAA,EAAS,EAAA,EAAI,SAAA,EAAW,EAAA,EAAG;AAAA;AAEhD;;;AC7DO,SAAS,eAAe,IAAA,EAAe;AAC1C,EAAA,IAAI,CAAC,IAAA,EAAM;AACP,IAAA;AAAA,EACJ;AACA,EAAA,IACI,OAAO,UAAA,KAAe,WAAA,IACtB,CAAC,WAAW,SAAA,IACZ,CAAC,UAAA,CAAW,SAAA,CAAU,SAAA,IACtB,CAAC,UAAA,CAAW,SAAA,CAAU,UAAU,SAAA,EAClC;AACE,IAAA;AAAA,EACJ;AACA,EAAA,KAAK,UAAA,CAAW,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACtD;;;ACbO,SAAS,mBAAmB,KAAA,EAAwC;AACvE,EAAA,OAAO,iBAAiB,UAAA,GAAa,KAAA,GAAQ,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAC/E","file":"index.browser.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.browser.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"]}
|
|
@@ -6,17 +6,6 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
6
6
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
7
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
8
8
|
|
|
9
|
-
// ../../node_modules/.pnpm/@solana+rpc-types@6.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@6.0.3/node_modules/@solana/rpc-types/dist/index.browser.mjs
|
|
10
|
-
function mainnet(putativeString) {
|
|
11
|
-
return putativeString;
|
|
12
|
-
}
|
|
13
|
-
function devnet(putativeString) {
|
|
14
|
-
return putativeString;
|
|
15
|
-
}
|
|
16
|
-
function testnet(putativeString) {
|
|
17
|
-
return putativeString;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
9
|
// src/types/solana-cluster.ts
|
|
21
10
|
function localnet(url) {
|
|
22
11
|
return url;
|
|
@@ -35,6 +24,15 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
|
35
24
|
urlWs: (_c = props.urlWs) != null ? _c : defaultUrlWs
|
|
36
25
|
};
|
|
37
26
|
}
|
|
27
|
+
function devnet(url) {
|
|
28
|
+
return url;
|
|
29
|
+
}
|
|
30
|
+
function mainnet(url) {
|
|
31
|
+
return url;
|
|
32
|
+
}
|
|
33
|
+
function testnet(url) {
|
|
34
|
+
return url;
|
|
35
|
+
}
|
|
38
36
|
function createSolanaDevnet(props = "https://api.devnet.solana.com") {
|
|
39
37
|
return createSolanaCluster(props, {
|
|
40
38
|
id: "solana:devnet",
|