@iota/dapp-kit 0.8.3 → 0.9.0

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.
Files changed (46) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/cjs/components/ConnectButton.js +2 -2
  3. package/dist/cjs/components/ConnectButton.js.map +2 -2
  4. package/dist/cjs/components/WalletProvider.js +6 -0
  5. package/dist/cjs/components/WalletProvider.js.map +3 -3
  6. package/dist/cjs/components/connect-modal/ConnectModal.js +2 -2
  7. package/dist/cjs/components/connect-modal/ConnectModal.js.map +2 -2
  8. package/dist/cjs/components/connect-modal/views/ConnectionStatus.js +1 -1
  9. package/dist/cjs/components/connect-modal/views/ConnectionStatus.js.map +2 -2
  10. package/dist/cjs/components/connect-modal/views/index.js +1 -1
  11. package/dist/cjs/components/connect-modal/views/index.js.map +2 -2
  12. package/dist/cjs/components/connect-modal/wallet-list/WalletList.js +1 -1
  13. package/dist/cjs/components/connect-modal/wallet-list/WalletList.js.map +2 -2
  14. package/dist/cjs/components/connect-modal/wallet-list/WalletListItem.js +1 -1
  15. package/dist/cjs/components/connect-modal/wallet-list/WalletListItem.js.map +2 -2
  16. package/dist/cjs/index.js +8 -2
  17. package/dist/cjs/index.js.map +3 -3
  18. package/dist/cjs/walletStore.d.ts +1 -0
  19. package/dist/cjs/walletStore.js +3 -0
  20. package/dist/cjs/walletStore.js.map +3 -3
  21. package/dist/esm/components/ConnectButton.js +2 -2
  22. package/dist/esm/components/ConnectButton.js.map +2 -2
  23. package/dist/esm/components/WalletProvider.js +6 -0
  24. package/dist/esm/components/WalletProvider.js.map +3 -3
  25. package/dist/esm/components/connect-modal/ConnectModal.js +2 -2
  26. package/dist/esm/components/connect-modal/ConnectModal.js.map +2 -2
  27. package/dist/esm/components/connect-modal/views/ConnectionStatus.js +1 -1
  28. package/dist/esm/components/connect-modal/views/ConnectionStatus.js.map +2 -2
  29. package/dist/esm/components/connect-modal/views/index.js +1 -1
  30. package/dist/esm/components/connect-modal/views/index.js.map +2 -2
  31. package/dist/esm/components/connect-modal/wallet-list/WalletList.js +1 -1
  32. package/dist/esm/components/connect-modal/wallet-list/WalletList.js.map +2 -2
  33. package/dist/esm/components/connect-modal/wallet-list/WalletListItem.js +1 -1
  34. package/dist/esm/components/connect-modal/wallet-list/WalletListItem.js.map +2 -2
  35. package/dist/esm/index.js +8 -2
  36. package/dist/esm/index.js.map +3 -3
  37. package/dist/esm/walletStore.d.ts +1 -0
  38. package/dist/esm/walletStore.js +3 -0
  39. package/dist/esm/walletStore.js.map +3 -3
  40. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  41. package/dist/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +4 -4
  43. package/src/components/WalletProvider.tsx +4 -0
  44. package/src/components/connect-modal/views/ConnectionStatus.tsx +7 -5
  45. package/src/components/connect-modal/wallet-list/WalletListItem.tsx +1 -1
  46. package/src/walletStore.ts +4 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/WalletProvider.tsx", "../../../src/utils/stateStorage.ts", "../../../src/constants/walletDefaults.ts", "../../../src/contexts/walletContext.ts", "../../../src/hooks/wallet/useAutoConnectWallet.ts", "../../../src/utils/walletUtils.ts", "../../../src/hooks/wallet/useConnectWallet.ts", "../../../src/constants/walletMutationKeys.ts", "../../../src/hooks/wallet/useWalletStore.ts", "../../../src/hooks/wallet/useCurrentWallet.ts", "../../../src/hooks/wallet/useWallets.ts", "../../../src/hooks/wallet/useUnsafeBurnerWallet.ts", "../../../src/hooks/useIotaClient.ts", "../../../src/components/IotaClientProvider.tsx", "../../../src/hooks/wallet/useWalletPropertiesChanged.ts", "../../../src/hooks/wallet/useWalletsChanged.ts", "../../../src/themes/lightTheme.ts", "../../../src/walletStore.ts", "../../../src/components/styling/InjectedThemeStyles.tsx", "../../../src/constants/styleDataAttribute.ts", "../../../src/themes/themeContract.ts"],
4
- "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { WalletWithFeatures, WalletWithRequiredFeatures } from '@iota/wallet-standard';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport type { StateStorage } from 'zustand/middleware';\n\nimport {\n DEFAULT_PREFERRED_WALLETS,\n DEFAULT_STORAGE,\n DEFAULT_STORAGE_KEY,\n DEFAULT_WALLET_FILTER,\n} from '../constants/walletDefaults.js';\nimport { WalletContext } from '../contexts/walletContext.js';\nimport { useAutoConnectWallet } from '../hooks/wallet/useAutoConnectWallet.js';\nimport { useUnsafeBurnerWallet } from '../hooks/wallet/useUnsafeBurnerWallet.js';\nimport { useWalletPropertiesChanged } from '../hooks/wallet/useWalletPropertiesChanged.js';\nimport { useWalletsChanged } from '../hooks/wallet/useWalletsChanged.js';\nimport { lightTheme } from '../themes/lightTheme.js';\nimport type { Theme } from '../themes/themeContract.js';\nimport { createInMemoryStore } from '../utils/stateStorage.js';\nimport { getRegisteredWallets } from '../utils/walletUtils.js';\nimport { createWalletStore } from '../walletStore.js';\nimport { InjectedThemeStyles } from './styling/InjectedThemeStyles.js';\nimport type { ChainType } from '@iota/iota-sdk/client';\n\nexport type WalletProviderProps = {\n /** A list of wallets that are sorted to the top of the wallet list, if they are available to connect to. By default, wallets are sorted by the order they are loaded in. */\n preferredWallets?: string[];\n\n /** A filter function to select wallets that support features required for the dApp to function. This filters the list of wallets presented to users when selecting a wallet to connect from, ensuring that only wallets that meet the dApps requirements can connect. */\n walletFilter?: (wallet: WalletWithRequiredFeatures) => boolean;\n\n /** Enables the development-only unsafe burner wallet, which can be useful for testing. */\n enableUnsafeBurner?: boolean;\n\n /** Enables automatically reconnecting to the most recently used wallet account upon mounting. */\n autoConnect?: boolean;\n\n /** Configures how the most recently connected to wallet account is stored. Set to `null` to disable persisting state entirely. Defaults to using localStorage if it is available. */\n storage?: StateStorage | null;\n\n /** The key to use to store the most recently connected wallet account. */\n storageKey?: string;\n\n /** The theme to use for styling UI components. Defaults to using the light theme. */\n theme?: Theme | null;\n\n chain?: ChainType;\n\n children: ReactNode;\n};\n\nexport type { WalletWithFeatures };\n\nexport function WalletProvider({\n preferredWallets = DEFAULT_PREFERRED_WALLETS,\n walletFilter = DEFAULT_WALLET_FILTER,\n storage = DEFAULT_STORAGE,\n storageKey = DEFAULT_STORAGE_KEY,\n enableUnsafeBurner = false,\n autoConnect = false,\n theme = lightTheme,\n children,\n chain,\n}: WalletProviderProps) {\n const storeRef = useRef(\n createWalletStore({\n autoConnectEnabled: autoConnect,\n wallets: getRegisteredWallets(preferredWallets, walletFilter),\n storage: storage || createInMemoryStore(),\n storageKey,\n chain,\n }),\n );\n\n return (\n <WalletContext.Provider value={storeRef.current}>\n <WalletConnectionManager\n preferredWallets={preferredWallets}\n walletFilter={walletFilter}\n enableUnsafeBurner={enableUnsafeBurner}\n >\n {/* TODO: We ideally don't want to inject styles if people aren't using the UI components */}\n {theme ? <InjectedThemeStyles theme={theme} /> : null}\n {children}\n </WalletConnectionManager>\n </WalletContext.Provider>\n );\n}\n\ntype WalletConnectionManagerProps = Pick<\n WalletProviderProps,\n 'preferredWallets' | 'walletFilter' | 'enableUnsafeBurner' | 'children'\n>;\n\nfunction WalletConnectionManager({\n preferredWallets = DEFAULT_PREFERRED_WALLETS,\n walletFilter = DEFAULT_WALLET_FILTER,\n enableUnsafeBurner = false,\n children,\n}: WalletConnectionManagerProps) {\n useWalletsChanged(preferredWallets, walletFilter);\n useWalletPropertiesChanged();\n useUnsafeBurnerWallet(enableUnsafeBurner);\n useAutoConnectWallet();\n\n return children;\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { StateStorage } from 'zustand/middleware';\n\nexport function createInMemoryStore(): StateStorage {\n const store = new Map();\n return {\n getItem(key: string) {\n return store.get(key);\n },\n setItem(key: string, value: string) {\n store.set(key, value);\n },\n removeItem(key: string) {\n store.delete(key);\n },\n };\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { IotaWalletFeatures, WalletWithRequiredFeatures } from '@iota/wallet-standard';\n\nimport { createInMemoryStore } from '../utils/stateStorage.js';\n\nexport const IOTA_WALLET_NAME = 'IOTA Wallet';\n\nexport const DEFAULT_STORAGE =\n typeof window !== 'undefined' && window.localStorage ? localStorage : createInMemoryStore();\n\nexport const DEFAULT_STORAGE_KEY = 'iota-dapp-kit:wallet-connection-info';\n\nconst SIGN_FEATURES = ['iota:signTransaction'] satisfies (keyof IotaWalletFeatures)[];\n\nexport const DEFAULT_WALLET_FILTER = (wallet: WalletWithRequiredFeatures) =>\n SIGN_FEATURES.some((feature) => wallet.features[feature]);\n\nexport const DEFAULT_PREFERRED_WALLETS = [IOTA_WALLET_NAME];\n\nconst WALLET_CHROME_EXTENSION_ID = 'iidjkmdceolghepehaaddojmnjnkkija';\n\nexport const WALLET_DOWNLOAD_URL =\n 'https://chromewebstore.google.com/detail/' + WALLET_CHROME_EXTENSION_ID;\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createContext } from 'react';\n\nimport type { WalletStore } from '../walletStore.js';\n\nexport const WalletContext = createContext<WalletStore | null>(null);\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useLayoutEffect, useState } from 'react';\n\nimport { getWalletUniqueIdentifier } from '../../utils/walletUtils.js';\nimport { useConnectWallet } from './useConnectWallet.js';\nimport { useCurrentWallet } from './useCurrentWallet.js';\nimport { useWallets } from './useWallets.js';\nimport { useWalletStore } from './useWalletStore.js';\n\nexport function useAutoConnectWallet(): 'disabled' | 'idle' | 'attempted' {\n const { mutateAsync: connectWallet } = useConnectWallet();\n const autoConnectEnabled = useWalletStore((state) => state.autoConnectEnabled);\n const lastConnectedWalletName = useWalletStore((state) => state.lastConnectedWalletName);\n const lastConnectedAccountAddress = useWalletStore(\n (state) => state.lastConnectedAccountAddress,\n );\n const wallets = useWallets();\n const { isConnected } = useCurrentWallet();\n\n const [clientOnly, setClientOnly] = useState(false);\n useLayoutEffect(() => {\n setClientOnly(true);\n }, []);\n\n const { data, isError } = useQuery({\n queryKey: [\n '@iota/dapp-kit',\n 'autoconnect',\n {\n isConnected,\n autoConnectEnabled,\n lastConnectedWalletName,\n lastConnectedAccountAddress,\n walletCount: wallets.length,\n },\n ],\n queryFn: async () => {\n if (!autoConnectEnabled) {\n return 'disabled';\n }\n\n if (!lastConnectedWalletName || !lastConnectedAccountAddress || isConnected) {\n return 'attempted';\n }\n\n const wallet = wallets.find(\n (wallet) => getWalletUniqueIdentifier(wallet) === lastConnectedWalletName,\n );\n if (wallet) {\n await connectWallet({\n wallet,\n accountAddress: lastConnectedAccountAddress,\n silent: true,\n });\n }\n\n return 'attempted';\n },\n enabled: autoConnectEnabled,\n persister: undefined,\n gcTime: 0,\n staleTime: 0,\n networkMode: 'always',\n retry: false,\n retryOnMount: false,\n refetchInterval: false,\n refetchIntervalInBackground: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n });\n\n if (!autoConnectEnabled) {\n return 'disabled';\n }\n\n // We always initialize with \"idle\" so that in SSR environments, we guarantee that the initial render states always agree:\n if (!clientOnly) {\n return 'idle';\n }\n\n if (isConnected) {\n return 'attempted';\n }\n\n if (!lastConnectedWalletName) {\n return 'attempted';\n }\n\n return isError ? 'attempted' : (data ?? 'idle');\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n MinimallyRequiredFeatures,\n Wallet,\n WalletWithFeatures,\n WalletWithRequiredFeatures,\n} from '@iota/wallet-standard';\nimport { getWallets, isWalletWithRequiredFeatureSet } from '@iota/wallet-standard';\n\nexport function getRegisteredWallets<AdditionalFeatures extends Wallet['features']>(\n preferredWallets: string[],\n walletFilter?: (wallet: WalletWithRequiredFeatures) => boolean,\n) {\n const walletsApi = getWallets();\n const wallets = walletsApi.get();\n\n const iotaWallets = wallets.filter(\n (wallet): wallet is WalletWithFeatures<MinimallyRequiredFeatures & AdditionalFeatures> =>\n isWalletWithRequiredFeatureSet(wallet) && (!walletFilter || walletFilter(wallet)),\n );\n\n return [\n // Preferred wallets, in order:\n ...(preferredWallets\n .map((name) => iotaWallets.find((wallet) => wallet.name === name))\n .filter(Boolean) as WalletWithFeatures<\n MinimallyRequiredFeatures & AdditionalFeatures\n >[]),\n\n // Wallets in default order:\n ...iotaWallets.filter((wallet) => !preferredWallets.includes(wallet.name)),\n ];\n}\n\nexport function getWalletUniqueIdentifier(wallet?: Wallet) {\n return wallet?.id ?? wallet?.name;\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { isSupportedChain } from '@iota/wallet-standard';\nimport type {\n StandardConnectInput,\n StandardConnectOutput,\n WalletAccount,\n WalletWithRequiredFeatures,\n} from '@iota/wallet-standard';\nimport type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { walletMutationKeys } from '../../constants/walletMutationKeys.js';\nimport { useWalletStore } from './useWalletStore.js';\n\ntype ConnectWalletArgs = {\n /** The wallet to connect to. */\n wallet: WalletWithRequiredFeatures;\n\n /** An optional account address to connect to. Defaults to the first authorized account. */\n accountAddress?: string;\n} & StandardConnectInput;\n\ntype ConnectWalletResult = StandardConnectOutput;\n\ntype UseConnectWalletMutationOptions = Omit<\n UseMutationOptions<ConnectWalletResult, Error, ConnectWalletArgs, unknown>,\n 'mutationFn'\n> & {\n onConnected?: (params: { wallet: WalletWithRequiredFeatures }) => void;\n};\n\n/**\n * Mutation hook for establishing a connection to a specific wallet.\n */\nexport function useConnectWallet({\n onConnected,\n mutationKey,\n ...mutationOptions\n}: UseConnectWalletMutationOptions = {}): UseMutationResult<\n ConnectWalletResult,\n Error,\n ConnectWalletArgs,\n unknown\n> {\n const setWalletConnected = useWalletStore((state) => state.setWalletConnected);\n const setConnectionStatus = useWalletStore((state) => state.setConnectionStatus);\n\n return useMutation({\n mutationKey: walletMutationKeys.connectWallet(mutationKey),\n mutationFn: async ({ wallet, accountAddress, ...connectArgs }) => {\n try {\n setConnectionStatus('connecting');\n\n const connectResult =\n await wallet.features['standard:connect'].connect(connectArgs);\n const connectedIotaAccounts = connectResult.accounts.filter((account) =>\n account.chains.some(isSupportedChain),\n );\n const selectedAccount = getSelectedAccount(connectedIotaAccounts, accountAddress);\n\n setWalletConnected(\n wallet,\n connectedIotaAccounts,\n selectedAccount,\n connectResult.supportedIntents,\n );\n\n onConnected?.({ wallet });\n\n return { accounts: connectedIotaAccounts };\n } catch (error) {\n setConnectionStatus('disconnected');\n throw error;\n }\n },\n ...mutationOptions,\n });\n}\n\nfunction getSelectedAccount(connectedAccounts: readonly WalletAccount[], accountAddress?: string) {\n if (connectedAccounts.length === 0) {\n return null;\n }\n\n if (accountAddress) {\n const selectedAccount = connectedAccounts.find(\n (account) => account.address === accountAddress,\n );\n return selectedAccount ?? connectedAccounts[0];\n }\n\n return connectedAccounts[0];\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { MutationKey } from '@tanstack/react-query';\n\nexport const walletMutationKeys = {\n all: { baseScope: 'wallet' },\n connectWallet: formMutationKeyFn('connect-wallet'),\n autoconnectWallet: formMutationKeyFn('autoconnect-wallet'),\n disconnectWallet: formMutationKeyFn('disconnect-wallet'),\n signPersonalMessage: formMutationKeyFn('sign-personal-message'),\n signTransaction: formMutationKeyFn('sign-transaction'),\n signAndExecuteTransaction: formMutationKeyFn('sign-and-execute-transaction'),\n switchAccount: formMutationKeyFn('switch-account'),\n reportTransactionEffects: formMutationKeyFn('report-transaction-effects'),\n};\n\nfunction formMutationKeyFn(baseEntity: string) {\n return function mutationKeyFn(additionalKeys: MutationKey = []) {\n return [{ ...walletMutationKeys.all, baseEntity }, ...additionalKeys];\n };\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useContext } from 'react';\nimport { useStore } from 'zustand';\n\nimport { WalletContext } from '../../contexts/walletContext.js';\nimport type { StoreState } from '../../walletStore.js';\n\nexport function useWalletStore<T>(selector: (state: StoreState) => T): T {\n const store = useContext(WalletContext);\n if (!store) {\n throw new Error(\n 'Could not find WalletContext. Ensure that you have set up the WalletProvider.',\n );\n }\n return useStore(store, selector);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet that is currently connected to the dApp, if one exists.\n */\nexport function useCurrentWallet() {\n const currentWallet = useWalletStore((state) => state.currentWallet);\n const connectionStatus = useWalletStore((state) => state.connectionStatus);\n const supportedIntents = useWalletStore((state) => state.supportedIntents);\n\n switch (connectionStatus) {\n case 'connecting':\n return {\n connectionStatus,\n currentWallet: null,\n isDisconnected: false,\n isConnecting: true,\n isConnected: false,\n supportedIntents: [],\n } as const;\n case 'disconnected':\n return {\n connectionStatus,\n currentWallet: null,\n isDisconnected: true,\n isConnecting: false,\n isConnected: false,\n supportedIntents: [],\n } as const;\n case 'connected': {\n return {\n connectionStatus,\n currentWallet: currentWallet!,\n isDisconnected: false,\n isConnecting: false,\n isConnected: true,\n supportedIntents,\n } as const;\n }\n }\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves a list of registered wallets available to the dApp sorted by preference.\n */\nexport function useWallets() {\n return useWalletStore((state) => state.wallets);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { IotaClient } from '@iota/iota-sdk/client';\nimport { Ed25519Keypair } from '@iota/iota-sdk/keypairs/ed25519';\nimport { Transaction } from '@iota/iota-sdk/transactions';\nimport { toBase64 } from '@iota/iota-sdk/utils';\nimport type {\n StandardConnectFeature,\n StandardConnectMethod,\n StandardEventsFeature,\n StandardEventsOnMethod,\n IotaFeatures,\n IotaSignAndExecuteTransactionMethod,\n IotaSignPersonalMessageMethod,\n IotaSignTransactionMethod,\n Wallet,\n} from '@iota/wallet-standard';\nimport { getWallets, ReadonlyWalletAccount, SUPPORTED_CHAINS } from '@iota/wallet-standard';\nimport { useEffect } from 'react';\n\nimport { useIotaClient } from '../useIotaClient.js';\n\nconst WALLET_NAME = 'Unsafe Burner Wallet';\n\nexport function useUnsafeBurnerWallet(enabled: boolean) {\n const iotaClient = useIotaClient();\n\n useEffect(() => {\n if (!enabled) {\n return;\n }\n const unregister = registerUnsafeBurnerWallet(iotaClient);\n return unregister;\n }, [enabled, iotaClient]);\n}\n\nfunction registerUnsafeBurnerWallet(iotaClient: IotaClient) {\n const walletsApi = getWallets();\n const registeredWallets = walletsApi.get();\n\n if (registeredWallets.find((wallet) => wallet.name === WALLET_NAME)) {\n console.warn(\n 'registerUnsafeBurnerWallet: Unsafe Burner Wallet already registered, skipping duplicate registration.',\n );\n return;\n }\n\n console.warn(\n 'Your application is currently using the unsafe burner wallet. Make sure that this wallet is disabled in production.',\n );\n\n const keypair = new Ed25519Keypair();\n const account = new ReadonlyWalletAccount({\n address: keypair.getPublicKey().toIotaAddress(),\n publicKey: keypair.getPublicKey().toIotaBytes(),\n chains: ['iota:unknown'],\n features: ['iota:signTransaction', 'iota:signAndExecuteTransaction'],\n });\n\n class UnsafeBurnerWallet implements Wallet {\n get version() {\n return '1.0.0' as const;\n }\n\n get name() {\n return WALLET_NAME;\n }\n\n get icon() {\n return 'data:image/png;base64,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' as const;\n }\n\n // Return the IOTA chains that your wallet supports.\n get chains() {\n return SUPPORTED_CHAINS;\n }\n\n get accounts() {\n return [account];\n }\n\n get features(): StandardConnectFeature & StandardEventsFeature & IotaFeatures {\n return {\n 'standard:connect': {\n version: '1.0.0',\n connect: this.#connect,\n },\n 'standard:events': {\n version: '1.0.0',\n on: this.#on,\n },\n 'iota:signPersonalMessage': {\n version: '1.0.0',\n signPersonalMessage: this.#signPersonalMessage,\n },\n 'iota:signTransaction': {\n version: '2.0.0',\n signTransaction: this.#signTransaction,\n },\n 'iota:signAndExecuteTransaction': {\n version: '2.0.0',\n signAndExecuteTransaction: this.#signAndExecuteTransaction,\n },\n };\n }\n\n #on: StandardEventsOnMethod = () => {\n return () => {};\n };\n\n #connect: StandardConnectMethod = async () => {\n return { accounts: this.accounts };\n };\n\n #signPersonalMessage: IotaSignPersonalMessageMethod = async (messageInput) => {\n const { bytes, signature } = await keypair.signPersonalMessage(messageInput.message);\n return { bytes, signature };\n };\n\n #signTransaction: IotaSignTransactionMethod = async (transactionInput) => {\n const { bytes, signature } = await Transaction.from(\n await transactionInput.transaction.toJSON(),\n ).sign({\n client: iotaClient,\n signer: keypair,\n });\n\n transactionInput.signal?.throwIfAborted();\n\n return {\n bytes,\n signature: signature,\n };\n };\n\n #signAndExecuteTransaction: IotaSignAndExecuteTransactionMethod = async (\n transactionInput,\n ) => {\n const { bytes, signature } = await Transaction.from(\n await transactionInput.transaction.toJSON(),\n ).sign({\n client: iotaClient,\n signer: keypair,\n });\n\n transactionInput.signal?.throwIfAborted();\n\n const { rawEffects, digest } = await iotaClient.executeTransactionBlock({\n signature,\n transactionBlock: bytes,\n options: {\n showRawEffects: true,\n },\n });\n\n return {\n bytes,\n signature,\n digest,\n effects: toBase64(new Uint8Array(rawEffects!)),\n };\n };\n }\n\n return walletsApi.register(new UnsafeBurnerWallet());\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { IotaClient } from '@iota/iota-sdk/client';\nimport { useContext } from 'react';\n\nimport { IotaClientContext } from '../components/IotaClientProvider.js';\n\nexport function useIotaClientContext() {\n const iotaClient = useContext(IotaClientContext);\n\n if (!iotaClient) {\n throw new Error(\n 'Could not find IotaClientContext. Ensure that you have set up the IotaClientProvider',\n );\n }\n\n return iotaClient;\n}\n\nexport function useIotaClient(): IotaClient {\n return useIotaClientContext().client;\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { getNetwork, isIotaClient, Network, IotaClient } from '@iota/iota-sdk/client';\nimport type { IotaClientOptions } from '@iota/iota-sdk/client';\nimport { createContext, useMemo, useState } from 'react';\n\nimport type { NetworkConfig } from '../hooks/networkConfig.js';\n\ntype NetworkConfigs<T extends NetworkConfig | IotaClient = NetworkConfig | IotaClient> = Record<\n string,\n T\n>;\n\nexport interface IotaClientProviderContext {\n client: IotaClient;\n networks: NetworkConfigs;\n network: string;\n config: NetworkConfig | null;\n selectNetwork: (network: string) => void;\n}\n\nexport const IotaClientContext = createContext<IotaClientProviderContext | null>(null);\n\nexport type IotaClientProviderProps<T extends NetworkConfigs> = {\n createClient?: (name: keyof T, config: T[keyof T]) => IotaClient;\n children: React.ReactNode;\n networks?: T;\n onNetworkChange?: (network: keyof T & string) => void;\n} & (\n | {\n defaultNetwork?: keyof T & string;\n network?: never;\n }\n | {\n defaultNetwork?: never;\n network?: keyof T & string;\n }\n);\n\nconst DEFAULT_NETWORKS = {\n localnet: { url: getNetwork(Network.Localnet)?.url },\n};\n\nconst DEFAULT_CREATE_CLIENT = function createClient(\n _name: string,\n config: NetworkConfig | IotaClient,\n) {\n if (isIotaClient(config)) {\n return config;\n }\n\n return new IotaClient(config);\n};\n\nexport function IotaClientProvider<T extends NetworkConfigs>(props: IotaClientProviderProps<T>) {\n const { onNetworkChange, network, children } = props;\n const networks = (props.networks ?? DEFAULT_NETWORKS) as T;\n const createClient =\n (props.createClient as typeof DEFAULT_CREATE_CLIENT) ?? DEFAULT_CREATE_CLIENT;\n\n const [selectedNetwork, setSelectedNetwork] = useState<keyof T & string>(\n props.network ?? props.defaultNetwork ?? (Object.keys(networks)[0] as keyof T & string),\n );\n\n const currentNetwork = props.network ?? selectedNetwork;\n\n const client = useMemo(() => {\n return createClient(currentNetwork, networks[currentNetwork]);\n }, [createClient, currentNetwork, networks]);\n\n const ctx = useMemo((): IotaClientProviderContext => {\n return {\n client,\n networks,\n network: currentNetwork,\n config:\n networks[currentNetwork] instanceof IotaClient\n ? null\n : (networks[currentNetwork] as IotaClientOptions),\n selectNetwork: (newNetwork) => {\n if (currentNetwork === newNetwork) {\n return;\n }\n\n if (!network && newNetwork !== selectedNetwork) {\n setSelectedNetwork(newNetwork);\n }\n\n onNetworkChange?.(newNetwork);\n },\n };\n }, [client, networks, selectedNetwork, currentNetwork, network, onNetworkChange]);\n\n return <IotaClientContext.Provider value={ctx}>{children}</IotaClientContext.Provider>;\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useEffect } from 'react';\n\nimport { useCurrentWallet } from './useCurrentWallet.js';\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Internal hook for easily handling various changes in properties for a wallet.\n */\nexport function useWalletPropertiesChanged() {\n const { currentWallet } = useCurrentWallet();\n const updateWalletAccounts = useWalletStore((state) => state.updateWalletAccounts);\n\n useEffect(() => {\n const unsubscribeFromEvents = currentWallet?.features['standard:events'].on(\n 'change',\n ({ accounts }) => {\n // TODO: We should handle features changing that might make the list of wallets\n // or even the current wallet incompatible with the dApp.\n if (accounts) {\n updateWalletAccounts(accounts);\n }\n },\n );\n return unsubscribeFromEvents;\n }, [currentWallet?.features, updateWalletAccounts]);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { WalletWithRequiredFeatures } from '@iota/wallet-standard';\nimport { getWallets } from '@iota/wallet-standard';\nimport { useEffect } from 'react';\n\nimport { getRegisteredWallets } from '../../utils/walletUtils.js';\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Internal hook for easily handling the addition and removal of new wallets.\n */\nexport function useWalletsChanged(\n preferredWallets: string[],\n walletFilter?: (wallet: WalletWithRequiredFeatures) => boolean,\n) {\n const setWalletRegistered = useWalletStore((state) => state.setWalletRegistered);\n const setWalletUnregistered = useWalletStore((state) => state.setWalletUnregistered);\n\n useEffect(() => {\n const walletsApi = getWallets();\n setWalletRegistered(getRegisteredWallets(preferredWallets, walletFilter));\n\n const unsubscribeFromRegister = walletsApi.on('register', () => {\n setWalletRegistered(getRegisteredWallets(preferredWallets, walletFilter));\n });\n\n const unsubscribeFromUnregister = walletsApi.on('unregister', (unregisteredWallet) => {\n setWalletUnregistered(\n getRegisteredWallets(preferredWallets, walletFilter),\n unregisteredWallet,\n );\n });\n\n return () => {\n unsubscribeFromRegister();\n unsubscribeFromUnregister();\n };\n }, [preferredWallets, walletFilter, setWalletRegistered, setWalletUnregistered]);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ThemeVars } from './themeContract.js';\n\nexport const lightTheme: ThemeVars = {\n blurs: {\n modalOverlay: 'blur(0)',\n },\n backgroundColors: {\n primaryButton: '#F6F7F9',\n primaryButtonHover: '#F0F2F5',\n outlineButtonHover: '#F4F4F5',\n modalOverlay: 'rgba(24 36 53 / 20%)',\n modalPrimary: 'white',\n modalSecondary: '#F7F8F8',\n iconButton: 'transparent',\n dropdownMenu: '#FFFFFF',\n dropdownMenuSeparator: '#F3F6F8',\n walletItemSelected: 'white',\n walletItemHover: '#3C424226',\n scrollThumb: '#cad4e2',\n },\n borderColors: {\n outlineButton: '#E4E4E7',\n },\n colors: {\n primaryButton: '#373737',\n outlineButtonHover: '#373737',\n iconButton: '#000000',\n body: '#182435',\n bodyMuted: '#767A81',\n bodyDanger: '#FF794B',\n },\n radii: {\n small: '6px',\n medium: '8px',\n large: '12px',\n xlarge: '16px',\n full: '120px',\n },\n fontWeights: {\n normal: '400',\n medium: '500',\n bold: '600',\n },\n fontSizes: {\n small: '14px',\n medium: '16px',\n large: '18px',\n xlarge: '20px',\n },\n typography: {\n fontFamily:\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"',\n fontStyle: 'normal',\n lineHeight: '24px',\n letterSpacing: '0.1px',\n },\n spacing: {\n xxsmall: '4px',\n xsmall: '8px',\n small: '12px',\n medium: '16px',\n large: '24px',\n xlarge: '32px',\n },\n};\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Wallet, WalletAccount, WalletWithRequiredFeatures } from '@iota/wallet-standard';\nimport { createStore } from 'zustand';\nimport type { StateStorage } from 'zustand/middleware';\nimport { createJSONStorage, persist } from 'zustand/middleware';\n\nimport { getWalletUniqueIdentifier } from './utils/walletUtils.js';\nimport type { ChainType } from '@iota/iota-sdk/client';\n\ntype WalletConnectionStatus = 'disconnected' | 'connecting' | 'connected';\n\nexport type WalletActions = {\n setAccountSwitched: (selectedAccount: WalletAccount) => void;\n setConnectionStatus: (connectionStatus: WalletConnectionStatus) => void;\n setWalletConnected: (\n wallet: WalletWithRequiredFeatures,\n connectedAccounts: readonly WalletAccount[],\n selectedAccount: WalletAccount | null,\n supportedIntents?: string[],\n ) => void;\n updateWalletAccounts: (accounts: readonly WalletAccount[]) => void;\n setWalletDisconnected: () => void;\n setWalletRegistered: (updatedWallets: WalletWithRequiredFeatures[]) => void;\n setWalletUnregistered: (\n updatedWallets: WalletWithRequiredFeatures[],\n unregisteredWallet: Wallet,\n ) => void;\n};\n\nexport type WalletStore = ReturnType<typeof createWalletStore>;\n\nexport type StoreState = {\n autoConnectEnabled: boolean;\n wallets: WalletWithRequiredFeatures[];\n accounts: readonly WalletAccount[];\n currentWallet: WalletWithRequiredFeatures | null;\n currentAccount: WalletAccount | null;\n lastConnectedAccountAddress: string | null;\n lastConnectedWalletName: string | null;\n connectionStatus: WalletConnectionStatus;\n supportedIntents: string[];\n chain: ChainType | undefined;\n} & WalletActions;\n\ntype WalletConfiguration = {\n autoConnectEnabled: boolean;\n wallets: WalletWithRequiredFeatures[];\n storage: StateStorage;\n storageKey: string;\n chain?: ChainType;\n};\n\nexport function createWalletStore({\n wallets,\n storage,\n storageKey,\n autoConnectEnabled,\n chain,\n}: WalletConfiguration) {\n return createStore<StoreState>()(\n persist(\n (set, get) => ({\n autoConnectEnabled,\n wallets,\n accounts: [] as WalletAccount[],\n currentWallet: null,\n currentAccount: null,\n lastConnectedAccountAddress: null,\n lastConnectedWalletName: null,\n connectionStatus: 'disconnected',\n supportedIntents: [],\n chain,\n setConnectionStatus(connectionStatus) {\n set(() => ({\n connectionStatus,\n }));\n },\n setWalletConnected(\n wallet,\n connectedAccounts,\n selectedAccount,\n supportedIntents = [],\n ) {\n set(() => ({\n accounts: connectedAccounts,\n currentWallet: wallet,\n currentAccount: selectedAccount,\n lastConnectedWalletName: getWalletUniqueIdentifier(wallet),\n lastConnectedAccountAddress: selectedAccount?.address,\n connectionStatus: 'connected',\n supportedIntents,\n }));\n },\n setWalletDisconnected() {\n set(() => ({\n accounts: [],\n currentWallet: null,\n currentAccount: null,\n lastConnectedWalletName: null,\n lastConnectedAccountAddress: null,\n connectionStatus: 'disconnected',\n supportedIntents: [],\n }));\n },\n setAccountSwitched(selectedAccount) {\n set(() => ({\n currentAccount: selectedAccount,\n lastConnectedAccountAddress: selectedAccount.address,\n }));\n },\n setWalletRegistered(updatedWallets) {\n set(() => ({ wallets: updatedWallets }));\n },\n setWalletUnregistered(updatedWallets, unregisteredWallet) {\n if (unregisteredWallet === get().currentWallet) {\n set(() => ({\n wallets: updatedWallets,\n accounts: [],\n currentWallet: null,\n currentAccount: null,\n lastConnectedWalletName: null,\n lastConnectedAccountAddress: null,\n connectionStatus: 'disconnected',\n supportedIntents: [],\n }));\n } else {\n set(() => ({ wallets: updatedWallets }));\n }\n },\n updateWalletAccounts(accounts) {\n const currentAccount = get().currentAccount;\n\n set(() => ({\n accounts,\n currentAccount:\n (currentAccount &&\n accounts.find(\n ({ address }) => address === currentAccount.address,\n )) ||\n accounts[0],\n }));\n },\n }),\n {\n name: storageKey,\n storage: createJSONStorage(() => storage),\n partialize: ({ lastConnectedWalletName, lastConnectedAccountAddress }) => ({\n lastConnectedWalletName,\n lastConnectedAccountAddress,\n }),\n },\n ),\n );\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\n\nimport { styleDataAttributeSelector } from '../../constants/styleDataAttribute.js';\nimport { themeVars } from '../../themes/themeContract.js';\nimport type { DynamicTheme, Theme, ThemeVars } from '../../themes/themeContract.js';\n\ntype InjectedThemeStylesProps = {\n theme: Theme;\n};\n\nexport function InjectedThemeStyles({ theme }: InjectedThemeStylesProps) {\n const themeStyles = Array.isArray(theme)\n ? getDynamicThemeStyles(theme)\n : getStaticThemeStyles(theme);\n\n return (\n <style\n // @ts-expect-error The precedence prop hasn't made it to the stable release of React, but we\n // don't want this to break in frameworks like Next which use the latest canary build.\n precedence=\"default\"\n href=\"iota-dapp-kit-theme\"\n dangerouslySetInnerHTML={{\n __html: themeStyles,\n }}\n />\n );\n}\n\nfunction getDynamicThemeStyles(themes: DynamicTheme[]) {\n return themes\n .map(({ mediaQuery, selector, variables }) => {\n const themeStyles = getStaticThemeStyles(variables);\n const themeStylesWithSelectorPrefix = selector\n ? `${selector} ${themeStyles}`\n : themeStyles;\n\n return mediaQuery\n ? `@media ${mediaQuery}{${themeStylesWithSelectorPrefix}}`\n : themeStylesWithSelectorPrefix;\n })\n .join(' ');\n}\n\nfunction getStaticThemeStyles(theme: ThemeVars) {\n return `${styleDataAttributeSelector} {${cssStringFromTheme(theme)}}`;\n}\n\nfunction cssStringFromTheme(theme: ThemeVars) {\n return Object.entries(assignInlineVars(themeVars, theme))\n .map(([key, value]) => `${key}:${value};`)\n .join('');\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nexport const styleDataAttributeName = 'data-dapp-kit';\n\nexport const styleDataAttributeSelector = `[${styleDataAttributeName}]`;\n\nexport const styleDataAttribute = { [styleDataAttributeName]: '' };\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createGlobalThemeContract } from '@vanilla-extract/css';\n\nconst themeContractValues = {\n blurs: {\n modalOverlay: '',\n },\n backgroundColors: {\n primaryButton: '',\n primaryButtonHover: '',\n outlineButtonHover: '',\n walletItemHover: '',\n walletItemSelected: '',\n modalOverlay: '',\n modalPrimary: '',\n modalSecondary: '',\n iconButton: '',\n dropdownMenu: '',\n dropdownMenuSeparator: '',\n scrollThumb: '',\n },\n borderColors: {\n outlineButton: '',\n },\n colors: {\n primaryButton: '',\n outlineButtonHover: '',\n body: '',\n bodyMuted: '',\n bodyDanger: '',\n iconButton: '',\n },\n radii: {\n small: '',\n medium: '',\n large: '',\n xlarge: '',\n full: '',\n },\n fontWeights: {\n normal: '',\n medium: '',\n bold: '',\n },\n fontSizes: {\n small: '',\n medium: '',\n large: '',\n xlarge: '',\n },\n typography: {\n fontFamily: '',\n fontStyle: '',\n lineHeight: '',\n letterSpacing: '',\n },\n spacing: {\n xxsmall: '',\n xsmall: '',\n small: '',\n medium: '',\n large: '',\n xlarge: '',\n },\n};\n\nexport type ThemeVars = typeof themeContractValues;\n\n/**\n * A custom theme that is enabled when various conditions are\n */\nexport type DynamicTheme = {\n /**\n * An optional media query required for the given theme to be enabled. This is useful\n * when you want the theme of your application to automatically switch depending on\n * a media feature.\n *\n * @example '(prefers-color-scheme: dark)'\n */\n mediaQuery?: string;\n\n /**\n * An optional CSS selector required for the given theme to be enabled. This is useful\n * when you have a manual theme switcher on your application that sets a top-level\n * class name or data-attribute to control the current theme.\n *\n * @example '.data-dark'\n */\n selector?: string;\n\n /** The theme definitions that will be set when the selector and mediaQuery criteria are matched. */\n variables: ThemeVars;\n};\n\nexport type Theme = ThemeVars | DynamicTheme[];\n\nexport const themeVars = createGlobalThemeContract(\n themeContractValues,\n (_, path) => `dapp-kit-${path.join('-')}`,\n);\n"],
5
- "mappings": "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",
6
- "names": ["wallet", "getWallets", "useContext", "createContext", "useState", "useContext", "getWallets", "useEffect", "useEffect", "getWallets", "useEffect", "useEffect", "getWallets", "jsx", "jsx"]
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { WalletWithFeatures, WalletWithRequiredFeatures } from '@iota/wallet-standard';\nimport type { ReactNode } from 'react';\nimport { useRef } from 'react';\nimport type { StateStorage } from 'zustand/middleware';\n\nimport {\n DEFAULT_PREFERRED_WALLETS,\n DEFAULT_STORAGE,\n DEFAULT_STORAGE_KEY,\n DEFAULT_WALLET_FILTER,\n} from '../constants/walletDefaults.js';\nimport { WalletContext } from '../contexts/walletContext.js';\nimport { useAutoConnectWallet } from '../hooks/wallet/useAutoConnectWallet.js';\nimport { useUnsafeBurnerWallet } from '../hooks/wallet/useUnsafeBurnerWallet.js';\nimport { useWalletPropertiesChanged } from '../hooks/wallet/useWalletPropertiesChanged.js';\nimport { useWalletsChanged } from '../hooks/wallet/useWalletsChanged.js';\nimport { lightTheme } from '../themes/lightTheme.js';\nimport type { Theme } from '../themes/themeContract.js';\nimport { createInMemoryStore } from '../utils/stateStorage.js';\nimport { getRegisteredWallets } from '../utils/walletUtils.js';\nimport { createWalletStore } from '../walletStore.js';\nimport { InjectedThemeStyles } from './styling/InjectedThemeStyles.js';\nimport type { ChainType } from '@iota/iota-sdk/client';\n\nexport type WalletProviderProps = {\n /** A list of wallets that are sorted to the top of the wallet list, if they are available to connect to. By default, wallets are sorted by the order they are loaded in. */\n preferredWallets?: string[];\n\n /** A filter function to select wallets that support features required for the dApp to function. This filters the list of wallets presented to users when selecting a wallet to connect from, ensuring that only wallets that meet the dApps requirements can connect. */\n walletFilter?: (wallet: WalletWithRequiredFeatures) => boolean;\n\n /** Enables the development-only unsafe burner wallet, which can be useful for testing. */\n enableUnsafeBurner?: boolean;\n\n /** Enables automatically reconnecting to the most recently used wallet account upon mounting. */\n autoConnect?: boolean;\n\n /** Configures how the most recently connected to wallet account is stored. Set to `null` to disable persisting state entirely. Defaults to using localStorage if it is available. */\n storage?: StateStorage | null;\n\n /** The key to use to store the most recently connected wallet account. */\n storageKey?: string;\n\n /** The theme to use for styling UI components. Defaults to using the light theme. */\n theme?: Theme | null;\n\n chain?: ChainType;\n\n children: ReactNode;\n};\n\nexport type { WalletWithFeatures };\n\nexport function WalletProvider({\n preferredWallets = DEFAULT_PREFERRED_WALLETS,\n walletFilter = DEFAULT_WALLET_FILTER,\n storage = DEFAULT_STORAGE,\n storageKey = DEFAULT_STORAGE_KEY,\n enableUnsafeBurner = false,\n autoConnect = false,\n theme = lightTheme,\n children,\n chain,\n}: WalletProviderProps) {\n const storeRef = useRef(\n createWalletStore({\n autoConnectEnabled: autoConnect,\n wallets: getRegisteredWallets(preferredWallets, walletFilter),\n storage: storage || createInMemoryStore(),\n storageKey,\n chain,\n }),\n );\n\n if (storeRef.current.getState().chain != chain) {\n storeRef.current.getState().setChain(chain);\n }\n\n return (\n <WalletContext.Provider value={storeRef.current}>\n <WalletConnectionManager\n preferredWallets={preferredWallets}\n walletFilter={walletFilter}\n enableUnsafeBurner={enableUnsafeBurner}\n >\n {/* TODO: We ideally don't want to inject styles if people aren't using the UI components */}\n {theme ? <InjectedThemeStyles theme={theme} /> : null}\n {children}\n </WalletConnectionManager>\n </WalletContext.Provider>\n );\n}\n\ntype WalletConnectionManagerProps = Pick<\n WalletProviderProps,\n 'preferredWallets' | 'walletFilter' | 'enableUnsafeBurner' | 'children'\n>;\n\nfunction WalletConnectionManager({\n preferredWallets = DEFAULT_PREFERRED_WALLETS,\n walletFilter = DEFAULT_WALLET_FILTER,\n enableUnsafeBurner = false,\n children,\n}: WalletConnectionManagerProps) {\n useWalletsChanged(preferredWallets, walletFilter);\n useWalletPropertiesChanged();\n useUnsafeBurnerWallet(enableUnsafeBurner);\n useAutoConnectWallet();\n\n return children;\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { StateStorage } from 'zustand/middleware';\n\nexport function createInMemoryStore(): StateStorage {\n const store = new Map();\n return {\n getItem(key: string) {\n return store.get(key);\n },\n setItem(key: string, value: string) {\n store.set(key, value);\n },\n removeItem(key: string) {\n store.delete(key);\n },\n };\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { IotaWalletFeatures, WalletWithRequiredFeatures } from '@iota/wallet-standard';\n\nimport { createInMemoryStore } from '../utils/stateStorage.js';\n\nexport const IOTA_WALLET_NAME = 'IOTA Wallet';\n\nexport const DEFAULT_STORAGE =\n typeof window !== 'undefined' && window.localStorage ? localStorage : createInMemoryStore();\n\nexport const DEFAULT_STORAGE_KEY = 'iota-dapp-kit:wallet-connection-info';\n\nconst SIGN_FEATURES = ['iota:signTransaction'] satisfies (keyof IotaWalletFeatures)[];\n\nexport const DEFAULT_WALLET_FILTER = (wallet: WalletWithRequiredFeatures) =>\n SIGN_FEATURES.some((feature) => wallet.features[feature]);\n\nexport const DEFAULT_PREFERRED_WALLETS = [IOTA_WALLET_NAME];\n\nconst WALLET_CHROME_EXTENSION_ID = 'iidjkmdceolghepehaaddojmnjnkkija';\n\nexport const WALLET_DOWNLOAD_URL =\n 'https://chromewebstore.google.com/detail/' + WALLET_CHROME_EXTENSION_ID;\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createContext } from 'react';\n\nimport type { WalletStore } from '../walletStore.js';\n\nexport const WalletContext = createContext<WalletStore | null>(null);\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useLayoutEffect, useState } from 'react';\n\nimport { getWalletUniqueIdentifier } from '../../utils/walletUtils.js';\nimport { useConnectWallet } from './useConnectWallet.js';\nimport { useCurrentWallet } from './useCurrentWallet.js';\nimport { useWallets } from './useWallets.js';\nimport { useWalletStore } from './useWalletStore.js';\n\nexport function useAutoConnectWallet(): 'disabled' | 'idle' | 'attempted' {\n const { mutateAsync: connectWallet } = useConnectWallet();\n const autoConnectEnabled = useWalletStore((state) => state.autoConnectEnabled);\n const lastConnectedWalletName = useWalletStore((state) => state.lastConnectedWalletName);\n const lastConnectedAccountAddress = useWalletStore(\n (state) => state.lastConnectedAccountAddress,\n );\n const wallets = useWallets();\n const { isConnected } = useCurrentWallet();\n\n const [clientOnly, setClientOnly] = useState(false);\n useLayoutEffect(() => {\n setClientOnly(true);\n }, []);\n\n const { data, isError } = useQuery({\n queryKey: [\n '@iota/dapp-kit',\n 'autoconnect',\n {\n isConnected,\n autoConnectEnabled,\n lastConnectedWalletName,\n lastConnectedAccountAddress,\n walletCount: wallets.length,\n },\n ],\n queryFn: async () => {\n if (!autoConnectEnabled) {\n return 'disabled';\n }\n\n if (!lastConnectedWalletName || !lastConnectedAccountAddress || isConnected) {\n return 'attempted';\n }\n\n const wallet = wallets.find(\n (wallet) => getWalletUniqueIdentifier(wallet) === lastConnectedWalletName,\n );\n if (wallet) {\n await connectWallet({\n wallet,\n accountAddress: lastConnectedAccountAddress,\n silent: true,\n });\n }\n\n return 'attempted';\n },\n enabled: autoConnectEnabled,\n persister: undefined,\n gcTime: 0,\n staleTime: 0,\n networkMode: 'always',\n retry: false,\n retryOnMount: false,\n refetchInterval: false,\n refetchIntervalInBackground: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n });\n\n if (!autoConnectEnabled) {\n return 'disabled';\n }\n\n // We always initialize with \"idle\" so that in SSR environments, we guarantee that the initial render states always agree:\n if (!clientOnly) {\n return 'idle';\n }\n\n if (isConnected) {\n return 'attempted';\n }\n\n if (!lastConnectedWalletName) {\n return 'attempted';\n }\n\n return isError ? 'attempted' : (data ?? 'idle');\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n MinimallyRequiredFeatures,\n Wallet,\n WalletWithFeatures,\n WalletWithRequiredFeatures,\n} from '@iota/wallet-standard';\nimport { getWallets, isWalletWithRequiredFeatureSet } from '@iota/wallet-standard';\n\nexport function getRegisteredWallets<AdditionalFeatures extends Wallet['features']>(\n preferredWallets: string[],\n walletFilter?: (wallet: WalletWithRequiredFeatures) => boolean,\n) {\n const walletsApi = getWallets();\n const wallets = walletsApi.get();\n\n const iotaWallets = wallets.filter(\n (wallet): wallet is WalletWithFeatures<MinimallyRequiredFeatures & AdditionalFeatures> =>\n isWalletWithRequiredFeatureSet(wallet) && (!walletFilter || walletFilter(wallet)),\n );\n\n return [\n // Preferred wallets, in order:\n ...(preferredWallets\n .map((name) => iotaWallets.find((wallet) => wallet.name === name))\n .filter(Boolean) as WalletWithFeatures<\n MinimallyRequiredFeatures & AdditionalFeatures\n >[]),\n\n // Wallets in default order:\n ...iotaWallets.filter((wallet) => !preferredWallets.includes(wallet.name)),\n ];\n}\n\nexport function getWalletUniqueIdentifier(wallet?: Wallet) {\n return wallet?.id ?? wallet?.name;\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { isSupportedChain } from '@iota/wallet-standard';\nimport type {\n StandardConnectInput,\n StandardConnectOutput,\n WalletAccount,\n WalletWithRequiredFeatures,\n} from '@iota/wallet-standard';\nimport type { UseMutationOptions, UseMutationResult } from '@tanstack/react-query';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { walletMutationKeys } from '../../constants/walletMutationKeys.js';\nimport { useWalletStore } from './useWalletStore.js';\n\ntype ConnectWalletArgs = {\n /** The wallet to connect to. */\n wallet: WalletWithRequiredFeatures;\n\n /** An optional account address to connect to. Defaults to the first authorized account. */\n accountAddress?: string;\n} & StandardConnectInput;\n\ntype ConnectWalletResult = StandardConnectOutput;\n\ntype UseConnectWalletMutationOptions = Omit<\n UseMutationOptions<ConnectWalletResult, Error, ConnectWalletArgs, unknown>,\n 'mutationFn'\n> & {\n onConnected?: (params: { wallet: WalletWithRequiredFeatures }) => void;\n};\n\n/**\n * Mutation hook for establishing a connection to a specific wallet.\n */\nexport function useConnectWallet({\n onConnected,\n mutationKey,\n ...mutationOptions\n}: UseConnectWalletMutationOptions = {}): UseMutationResult<\n ConnectWalletResult,\n Error,\n ConnectWalletArgs,\n unknown\n> {\n const setWalletConnected = useWalletStore((state) => state.setWalletConnected);\n const setConnectionStatus = useWalletStore((state) => state.setConnectionStatus);\n\n return useMutation({\n mutationKey: walletMutationKeys.connectWallet(mutationKey),\n mutationFn: async ({ wallet, accountAddress, ...connectArgs }) => {\n try {\n setConnectionStatus('connecting');\n\n const connectResult =\n await wallet.features['standard:connect'].connect(connectArgs);\n const connectedIotaAccounts = connectResult.accounts.filter((account) =>\n account.chains.some(isSupportedChain),\n );\n const selectedAccount = getSelectedAccount(connectedIotaAccounts, accountAddress);\n\n setWalletConnected(\n wallet,\n connectedIotaAccounts,\n selectedAccount,\n connectResult.supportedIntents,\n );\n\n onConnected?.({ wallet });\n\n return { accounts: connectedIotaAccounts };\n } catch (error) {\n setConnectionStatus('disconnected');\n throw error;\n }\n },\n ...mutationOptions,\n });\n}\n\nfunction getSelectedAccount(connectedAccounts: readonly WalletAccount[], accountAddress?: string) {\n if (connectedAccounts.length === 0) {\n return null;\n }\n\n if (accountAddress) {\n const selectedAccount = connectedAccounts.find(\n (account) => account.address === accountAddress,\n );\n return selectedAccount ?? connectedAccounts[0];\n }\n\n return connectedAccounts[0];\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { MutationKey } from '@tanstack/react-query';\n\nexport const walletMutationKeys = {\n all: { baseScope: 'wallet' },\n connectWallet: formMutationKeyFn('connect-wallet'),\n autoconnectWallet: formMutationKeyFn('autoconnect-wallet'),\n disconnectWallet: formMutationKeyFn('disconnect-wallet'),\n signPersonalMessage: formMutationKeyFn('sign-personal-message'),\n signTransaction: formMutationKeyFn('sign-transaction'),\n signAndExecuteTransaction: formMutationKeyFn('sign-and-execute-transaction'),\n switchAccount: formMutationKeyFn('switch-account'),\n reportTransactionEffects: formMutationKeyFn('report-transaction-effects'),\n};\n\nfunction formMutationKeyFn(baseEntity: string) {\n return function mutationKeyFn(additionalKeys: MutationKey = []) {\n return [{ ...walletMutationKeys.all, baseEntity }, ...additionalKeys];\n };\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useContext } from 'react';\nimport { useStore } from 'zustand';\n\nimport { WalletContext } from '../../contexts/walletContext.js';\nimport type { StoreState } from '../../walletStore.js';\n\nexport function useWalletStore<T>(selector: (state: StoreState) => T): T {\n const store = useContext(WalletContext);\n if (!store) {\n throw new Error(\n 'Could not find WalletContext. Ensure that you have set up the WalletProvider.',\n );\n }\n return useStore(store, selector);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves the wallet that is currently connected to the dApp, if one exists.\n */\nexport function useCurrentWallet() {\n const currentWallet = useWalletStore((state) => state.currentWallet);\n const connectionStatus = useWalletStore((state) => state.connectionStatus);\n const supportedIntents = useWalletStore((state) => state.supportedIntents);\n\n switch (connectionStatus) {\n case 'connecting':\n return {\n connectionStatus,\n currentWallet: null,\n isDisconnected: false,\n isConnecting: true,\n isConnected: false,\n supportedIntents: [],\n } as const;\n case 'disconnected':\n return {\n connectionStatus,\n currentWallet: null,\n isDisconnected: true,\n isConnecting: false,\n isConnected: false,\n supportedIntents: [],\n } as const;\n case 'connected': {\n return {\n connectionStatus,\n currentWallet: currentWallet!,\n isDisconnected: false,\n isConnecting: false,\n isConnected: true,\n supportedIntents,\n } as const;\n }\n }\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Retrieves a list of registered wallets available to the dApp sorted by preference.\n */\nexport function useWallets() {\n return useWalletStore((state) => state.wallets);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { IotaClient } from '@iota/iota-sdk/client';\nimport { Ed25519Keypair } from '@iota/iota-sdk/keypairs/ed25519';\nimport { Transaction } from '@iota/iota-sdk/transactions';\nimport { toBase64 } from '@iota/iota-sdk/utils';\nimport type {\n StandardConnectFeature,\n StandardConnectMethod,\n StandardEventsFeature,\n StandardEventsOnMethod,\n IotaFeatures,\n IotaSignAndExecuteTransactionMethod,\n IotaSignPersonalMessageMethod,\n IotaSignTransactionMethod,\n Wallet,\n} from '@iota/wallet-standard';\nimport { getWallets, ReadonlyWalletAccount, SUPPORTED_CHAINS } from '@iota/wallet-standard';\nimport { useEffect } from 'react';\n\nimport { useIotaClient } from '../useIotaClient.js';\n\nconst WALLET_NAME = 'Unsafe Burner Wallet';\n\nexport function useUnsafeBurnerWallet(enabled: boolean) {\n const iotaClient = useIotaClient();\n\n useEffect(() => {\n if (!enabled) {\n return;\n }\n const unregister = registerUnsafeBurnerWallet(iotaClient);\n return unregister;\n }, [enabled, iotaClient]);\n}\n\nfunction registerUnsafeBurnerWallet(iotaClient: IotaClient) {\n const walletsApi = getWallets();\n const registeredWallets = walletsApi.get();\n\n if (registeredWallets.find((wallet) => wallet.name === WALLET_NAME)) {\n console.warn(\n 'registerUnsafeBurnerWallet: Unsafe Burner Wallet already registered, skipping duplicate registration.',\n );\n return;\n }\n\n console.warn(\n 'Your application is currently using the unsafe burner wallet. Make sure that this wallet is disabled in production.',\n );\n\n const keypair = new Ed25519Keypair();\n const account = new ReadonlyWalletAccount({\n address: keypair.getPublicKey().toIotaAddress(),\n publicKey: keypair.getPublicKey().toIotaBytes(),\n chains: ['iota:unknown'],\n features: ['iota:signTransaction', 'iota:signAndExecuteTransaction'],\n });\n\n class UnsafeBurnerWallet implements Wallet {\n get version() {\n return '1.0.0' as const;\n }\n\n get name() {\n return WALLET_NAME;\n }\n\n get icon() {\n return 'data:image/png;base64,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' as const;\n }\n\n // Return the IOTA chains that your wallet supports.\n get chains() {\n return SUPPORTED_CHAINS;\n }\n\n get accounts() {\n return [account];\n }\n\n get features(): StandardConnectFeature & StandardEventsFeature & IotaFeatures {\n return {\n 'standard:connect': {\n version: '1.0.0',\n connect: this.#connect,\n },\n 'standard:events': {\n version: '1.0.0',\n on: this.#on,\n },\n 'iota:signPersonalMessage': {\n version: '1.0.0',\n signPersonalMessage: this.#signPersonalMessage,\n },\n 'iota:signTransaction': {\n version: '2.0.0',\n signTransaction: this.#signTransaction,\n },\n 'iota:signAndExecuteTransaction': {\n version: '2.0.0',\n signAndExecuteTransaction: this.#signAndExecuteTransaction,\n },\n };\n }\n\n #on: StandardEventsOnMethod = () => {\n return () => {};\n };\n\n #connect: StandardConnectMethod = async () => {\n return { accounts: this.accounts };\n };\n\n #signPersonalMessage: IotaSignPersonalMessageMethod = async (messageInput) => {\n const { bytes, signature } = await keypair.signPersonalMessage(messageInput.message);\n return { bytes, signature };\n };\n\n #signTransaction: IotaSignTransactionMethod = async (transactionInput) => {\n const { bytes, signature } = await Transaction.from(\n await transactionInput.transaction.toJSON(),\n ).sign({\n client: iotaClient,\n signer: keypair,\n });\n\n transactionInput.signal?.throwIfAborted();\n\n return {\n bytes,\n signature: signature,\n };\n };\n\n #signAndExecuteTransaction: IotaSignAndExecuteTransactionMethod = async (\n transactionInput,\n ) => {\n const { bytes, signature } = await Transaction.from(\n await transactionInput.transaction.toJSON(),\n ).sign({\n client: iotaClient,\n signer: keypair,\n });\n\n transactionInput.signal?.throwIfAborted();\n\n const { rawEffects, digest } = await iotaClient.executeTransactionBlock({\n signature,\n transactionBlock: bytes,\n options: {\n showRawEffects: true,\n },\n });\n\n return {\n bytes,\n signature,\n digest,\n effects: toBase64(new Uint8Array(rawEffects!)),\n };\n };\n }\n\n return walletsApi.register(new UnsafeBurnerWallet());\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { IotaClient } from '@iota/iota-sdk/client';\nimport { useContext } from 'react';\n\nimport { IotaClientContext } from '../components/IotaClientProvider.js';\n\nexport function useIotaClientContext() {\n const iotaClient = useContext(IotaClientContext);\n\n if (!iotaClient) {\n throw new Error(\n 'Could not find IotaClientContext. Ensure that you have set up the IotaClientProvider',\n );\n }\n\n return iotaClient;\n}\n\nexport function useIotaClient(): IotaClient {\n return useIotaClientContext().client;\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { getNetwork, isIotaClient, Network, IotaClient } from '@iota/iota-sdk/client';\nimport type { IotaClientOptions } from '@iota/iota-sdk/client';\nimport { createContext, useMemo, useState } from 'react';\n\nimport type { NetworkConfig } from '../hooks/networkConfig.js';\n\ntype NetworkConfigs<T extends NetworkConfig | IotaClient = NetworkConfig | IotaClient> = Record<\n string,\n T\n>;\n\nexport interface IotaClientProviderContext {\n client: IotaClient;\n networks: NetworkConfigs;\n network: string;\n config: NetworkConfig | null;\n selectNetwork: (network: string) => void;\n}\n\nexport const IotaClientContext = createContext<IotaClientProviderContext | null>(null);\n\nexport type IotaClientProviderProps<T extends NetworkConfigs> = {\n createClient?: (name: keyof T, config: T[keyof T]) => IotaClient;\n children: React.ReactNode;\n networks?: T;\n onNetworkChange?: (network: keyof T & string) => void;\n} & (\n | {\n defaultNetwork?: keyof T & string;\n network?: never;\n }\n | {\n defaultNetwork?: never;\n network?: keyof T & string;\n }\n);\n\nconst DEFAULT_NETWORKS = {\n localnet: { url: getNetwork(Network.Localnet)?.url },\n};\n\nconst DEFAULT_CREATE_CLIENT = function createClient(\n _name: string,\n config: NetworkConfig | IotaClient,\n) {\n if (isIotaClient(config)) {\n return config;\n }\n\n return new IotaClient(config);\n};\n\nexport function IotaClientProvider<T extends NetworkConfigs>(props: IotaClientProviderProps<T>) {\n const { onNetworkChange, network, children } = props;\n const networks = (props.networks ?? DEFAULT_NETWORKS) as T;\n const createClient =\n (props.createClient as typeof DEFAULT_CREATE_CLIENT) ?? DEFAULT_CREATE_CLIENT;\n\n const [selectedNetwork, setSelectedNetwork] = useState<keyof T & string>(\n props.network ?? props.defaultNetwork ?? (Object.keys(networks)[0] as keyof T & string),\n );\n\n const currentNetwork = props.network ?? selectedNetwork;\n\n const client = useMemo(() => {\n return createClient(currentNetwork, networks[currentNetwork]);\n }, [createClient, currentNetwork, networks]);\n\n const ctx = useMemo((): IotaClientProviderContext => {\n return {\n client,\n networks,\n network: currentNetwork,\n config:\n networks[currentNetwork] instanceof IotaClient\n ? null\n : (networks[currentNetwork] as IotaClientOptions),\n selectNetwork: (newNetwork) => {\n if (currentNetwork === newNetwork) {\n return;\n }\n\n if (!network && newNetwork !== selectedNetwork) {\n setSelectedNetwork(newNetwork);\n }\n\n onNetworkChange?.(newNetwork);\n },\n };\n }, [client, networks, selectedNetwork, currentNetwork, network, onNetworkChange]);\n\n return <IotaClientContext.Provider value={ctx}>{children}</IotaClientContext.Provider>;\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useEffect } from 'react';\n\nimport { useCurrentWallet } from './useCurrentWallet.js';\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Internal hook for easily handling various changes in properties for a wallet.\n */\nexport function useWalletPropertiesChanged() {\n const { currentWallet } = useCurrentWallet();\n const updateWalletAccounts = useWalletStore((state) => state.updateWalletAccounts);\n\n useEffect(() => {\n const unsubscribeFromEvents = currentWallet?.features['standard:events'].on(\n 'change',\n ({ accounts }) => {\n // TODO: We should handle features changing that might make the list of wallets\n // or even the current wallet incompatible with the dApp.\n if (accounts) {\n updateWalletAccounts(accounts);\n }\n },\n );\n return unsubscribeFromEvents;\n }, [currentWallet?.features, updateWalletAccounts]);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { WalletWithRequiredFeatures } from '@iota/wallet-standard';\nimport { getWallets } from '@iota/wallet-standard';\nimport { useEffect } from 'react';\n\nimport { getRegisteredWallets } from '../../utils/walletUtils.js';\nimport { useWalletStore } from './useWalletStore.js';\n\n/**\n * Internal hook for easily handling the addition and removal of new wallets.\n */\nexport function useWalletsChanged(\n preferredWallets: string[],\n walletFilter?: (wallet: WalletWithRequiredFeatures) => boolean,\n) {\n const setWalletRegistered = useWalletStore((state) => state.setWalletRegistered);\n const setWalletUnregistered = useWalletStore((state) => state.setWalletUnregistered);\n\n useEffect(() => {\n const walletsApi = getWallets();\n setWalletRegistered(getRegisteredWallets(preferredWallets, walletFilter));\n\n const unsubscribeFromRegister = walletsApi.on('register', () => {\n setWalletRegistered(getRegisteredWallets(preferredWallets, walletFilter));\n });\n\n const unsubscribeFromUnregister = walletsApi.on('unregister', (unregisteredWallet) => {\n setWalletUnregistered(\n getRegisteredWallets(preferredWallets, walletFilter),\n unregisteredWallet,\n );\n });\n\n return () => {\n unsubscribeFromRegister();\n unsubscribeFromUnregister();\n };\n }, [preferredWallets, walletFilter, setWalletRegistered, setWalletUnregistered]);\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ThemeVars } from './themeContract.js';\n\nexport const lightTheme: ThemeVars = {\n blurs: {\n modalOverlay: 'blur(0)',\n },\n backgroundColors: {\n primaryButton: '#F6F7F9',\n primaryButtonHover: '#F0F2F5',\n outlineButtonHover: '#F4F4F5',\n modalOverlay: 'rgba(24 36 53 / 20%)',\n modalPrimary: 'white',\n modalSecondary: '#F7F8F8',\n iconButton: 'transparent',\n dropdownMenu: '#FFFFFF',\n dropdownMenuSeparator: '#F3F6F8',\n walletItemSelected: 'white',\n walletItemHover: '#3C424226',\n scrollThumb: '#cad4e2',\n },\n borderColors: {\n outlineButton: '#E4E4E7',\n },\n colors: {\n primaryButton: '#373737',\n outlineButtonHover: '#373737',\n iconButton: '#000000',\n body: '#182435',\n bodyMuted: '#767A81',\n bodyDanger: '#FF794B',\n },\n radii: {\n small: '6px',\n medium: '8px',\n large: '12px',\n xlarge: '16px',\n full: '120px',\n },\n fontWeights: {\n normal: '400',\n medium: '500',\n bold: '600',\n },\n fontSizes: {\n small: '14px',\n medium: '16px',\n large: '18px',\n xlarge: '20px',\n },\n typography: {\n fontFamily:\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"',\n fontStyle: 'normal',\n lineHeight: '24px',\n letterSpacing: '0.1px',\n },\n spacing: {\n xxsmall: '4px',\n xsmall: '8px',\n small: '12px',\n medium: '16px',\n large: '24px',\n xlarge: '32px',\n },\n};\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Wallet, WalletAccount, WalletWithRequiredFeatures } from '@iota/wallet-standard';\nimport { createStore } from 'zustand';\nimport type { StateStorage } from 'zustand/middleware';\nimport { createJSONStorage, persist } from 'zustand/middleware';\n\nimport { getWalletUniqueIdentifier } from './utils/walletUtils.js';\nimport type { ChainType } from '@iota/iota-sdk/client';\n\ntype WalletConnectionStatus = 'disconnected' | 'connecting' | 'connected';\n\nexport type WalletActions = {\n setAccountSwitched: (selectedAccount: WalletAccount) => void;\n setConnectionStatus: (connectionStatus: WalletConnectionStatus) => void;\n setWalletConnected: (\n wallet: WalletWithRequiredFeatures,\n connectedAccounts: readonly WalletAccount[],\n selectedAccount: WalletAccount | null,\n supportedIntents?: string[],\n ) => void;\n updateWalletAccounts: (accounts: readonly WalletAccount[]) => void;\n setWalletDisconnected: () => void;\n setWalletRegistered: (updatedWallets: WalletWithRequiredFeatures[]) => void;\n setWalletUnregistered: (\n updatedWallets: WalletWithRequiredFeatures[],\n unregisteredWallet: Wallet,\n ) => void;\n setChain: (chain: ChainType | undefined) => void;\n};\n\nexport type WalletStore = ReturnType<typeof createWalletStore>;\n\nexport type StoreState = {\n autoConnectEnabled: boolean;\n wallets: WalletWithRequiredFeatures[];\n accounts: readonly WalletAccount[];\n currentWallet: WalletWithRequiredFeatures | null;\n currentAccount: WalletAccount | null;\n lastConnectedAccountAddress: string | null;\n lastConnectedWalletName: string | null;\n connectionStatus: WalletConnectionStatus;\n supportedIntents: string[];\n chain: ChainType | undefined;\n} & WalletActions;\n\ntype WalletConfiguration = {\n autoConnectEnabled: boolean;\n wallets: WalletWithRequiredFeatures[];\n storage: StateStorage;\n storageKey: string;\n chain?: ChainType;\n};\n\nexport function createWalletStore({\n wallets,\n storage,\n storageKey,\n autoConnectEnabled,\n chain,\n}: WalletConfiguration) {\n return createStore<StoreState>()(\n persist(\n (set, get) => ({\n autoConnectEnabled,\n wallets,\n accounts: [] as WalletAccount[],\n currentWallet: null,\n currentAccount: null,\n lastConnectedAccountAddress: null,\n lastConnectedWalletName: null,\n connectionStatus: 'disconnected',\n supportedIntents: [],\n chain,\n setConnectionStatus(connectionStatus) {\n set(() => ({\n connectionStatus,\n }));\n },\n setWalletConnected(\n wallet,\n connectedAccounts,\n selectedAccount,\n supportedIntents = [],\n ) {\n set(() => ({\n accounts: connectedAccounts,\n currentWallet: wallet,\n currentAccount: selectedAccount,\n lastConnectedWalletName: getWalletUniqueIdentifier(wallet),\n lastConnectedAccountAddress: selectedAccount?.address,\n connectionStatus: 'connected',\n supportedIntents,\n }));\n },\n setWalletDisconnected() {\n set(() => ({\n accounts: [],\n currentWallet: null,\n currentAccount: null,\n lastConnectedWalletName: null,\n lastConnectedAccountAddress: null,\n connectionStatus: 'disconnected',\n supportedIntents: [],\n }));\n },\n setAccountSwitched(selectedAccount) {\n set(() => ({\n currentAccount: selectedAccount,\n lastConnectedAccountAddress: selectedAccount.address,\n }));\n },\n setWalletRegistered(updatedWallets) {\n set(() => ({ wallets: updatedWallets }));\n },\n setWalletUnregistered(updatedWallets, unregisteredWallet) {\n if (unregisteredWallet === get().currentWallet) {\n set(() => ({\n wallets: updatedWallets,\n accounts: [],\n currentWallet: null,\n currentAccount: null,\n lastConnectedWalletName: null,\n lastConnectedAccountAddress: null,\n connectionStatus: 'disconnected',\n supportedIntents: [],\n }));\n } else {\n set(() => ({ wallets: updatedWallets }));\n }\n },\n updateWalletAccounts(accounts) {\n const currentAccount = get().currentAccount;\n\n set(() => ({\n accounts,\n currentAccount:\n (currentAccount &&\n accounts.find(\n ({ address }) => address === currentAccount.address,\n )) ||\n accounts[0],\n }));\n },\n setChain(chain) {\n set(() => ({ chain }));\n },\n }),\n {\n name: storageKey,\n storage: createJSONStorage(() => storage),\n partialize: ({ lastConnectedWalletName, lastConnectedAccountAddress }) => ({\n lastConnectedWalletName,\n lastConnectedAccountAddress,\n }),\n },\n ),\n );\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\n\nimport { styleDataAttributeSelector } from '../../constants/styleDataAttribute.js';\nimport { themeVars } from '../../themes/themeContract.js';\nimport type { DynamicTheme, Theme, ThemeVars } from '../../themes/themeContract.js';\n\ntype InjectedThemeStylesProps = {\n theme: Theme;\n};\n\nexport function InjectedThemeStyles({ theme }: InjectedThemeStylesProps) {\n const themeStyles = Array.isArray(theme)\n ? getDynamicThemeStyles(theme)\n : getStaticThemeStyles(theme);\n\n return (\n <style\n // @ts-expect-error The precedence prop hasn't made it to the stable release of React, but we\n // don't want this to break in frameworks like Next which use the latest canary build.\n precedence=\"default\"\n href=\"iota-dapp-kit-theme\"\n dangerouslySetInnerHTML={{\n __html: themeStyles,\n }}\n />\n );\n}\n\nfunction getDynamicThemeStyles(themes: DynamicTheme[]) {\n return themes\n .map(({ mediaQuery, selector, variables }) => {\n const themeStyles = getStaticThemeStyles(variables);\n const themeStylesWithSelectorPrefix = selector\n ? `${selector} ${themeStyles}`\n : themeStyles;\n\n return mediaQuery\n ? `@media ${mediaQuery}{${themeStylesWithSelectorPrefix}}`\n : themeStylesWithSelectorPrefix;\n })\n .join(' ');\n}\n\nfunction getStaticThemeStyles(theme: ThemeVars) {\n return `${styleDataAttributeSelector} {${cssStringFromTheme(theme)}}`;\n}\n\nfunction cssStringFromTheme(theme: ThemeVars) {\n return Object.entries(assignInlineVars(themeVars, theme))\n .map(([key, value]) => `${key}:${value};`)\n .join('');\n}\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nexport const styleDataAttributeName = 'data-dapp-kit';\n\nexport const styleDataAttributeSelector = `[${styleDataAttributeName}]`;\n\nexport const styleDataAttribute = { [styleDataAttributeName]: '' };\n", "// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { createGlobalThemeContract } from '@vanilla-extract/css';\n\nconst themeContractValues = {\n blurs: {\n modalOverlay: '',\n },\n backgroundColors: {\n primaryButton: '',\n primaryButtonHover: '',\n outlineButtonHover: '',\n walletItemHover: '',\n walletItemSelected: '',\n modalOverlay: '',\n modalPrimary: '',\n modalSecondary: '',\n iconButton: '',\n dropdownMenu: '',\n dropdownMenuSeparator: '',\n scrollThumb: '',\n },\n borderColors: {\n outlineButton: '',\n },\n colors: {\n primaryButton: '',\n outlineButtonHover: '',\n body: '',\n bodyMuted: '',\n bodyDanger: '',\n iconButton: '',\n },\n radii: {\n small: '',\n medium: '',\n large: '',\n xlarge: '',\n full: '',\n },\n fontWeights: {\n normal: '',\n medium: '',\n bold: '',\n },\n fontSizes: {\n small: '',\n medium: '',\n large: '',\n xlarge: '',\n },\n typography: {\n fontFamily: '',\n fontStyle: '',\n lineHeight: '',\n letterSpacing: '',\n },\n spacing: {\n xxsmall: '',\n xsmall: '',\n small: '',\n medium: '',\n large: '',\n xlarge: '',\n },\n};\n\nexport type ThemeVars = typeof themeContractValues;\n\n/**\n * A custom theme that is enabled when various conditions are\n */\nexport type DynamicTheme = {\n /**\n * An optional media query required for the given theme to be enabled. This is useful\n * when you want the theme of your application to automatically switch depending on\n * a media feature.\n *\n * @example '(prefers-color-scheme: dark)'\n */\n mediaQuery?: string;\n\n /**\n * An optional CSS selector required for the given theme to be enabled. This is useful\n * when you have a manual theme switcher on your application that sets a top-level\n * class name or data-attribute to control the current theme.\n *\n * @example '.data-dark'\n */\n selector?: string;\n\n /** The theme definitions that will be set when the selector and mediaQuery criteria are matched. */\n variables: ThemeVars;\n};\n\nexport type Theme = ThemeVars | DynamicTheme[];\n\nexport const themeVars = createGlobalThemeContract(\n themeContractValues,\n (_, path) => `dapp-kit-${path.join('-')}`,\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["wallet", "getWallets", "useContext", "createContext", "useState", "useContext", "getWallets", "useEffect", "useEffect", "getWallets", "useEffect", "useEffect", "getWallets", "chain", "jsx", "jsx"]
7
7
  }
@@ -322,7 +322,7 @@ function ConnectionStatus({
322
322
  onRetryConnection
323
323
  }) {
324
324
  return /* @__PURE__ */ jsxs("div", { className: container2, children: [
325
- /* @__PURE__ */ jsx8(
325
+ selectedWallet.icon && /* @__PURE__ */ jsx8(
326
326
  "img",
327
327
  {
328
328
  className: walletIcon,
@@ -453,7 +453,7 @@ function WalletListItem({ name, icon: icon2, onClick, isSelected = false }) {
453
453
  type: "button",
454
454
  onClick,
455
455
  children: [
456
- typeof icon2 === "string" ? /* @__PURE__ */ jsx13("img", { className: walletIcon2, src: icon2, alt: `${name} logo` }) : icon2,
456
+ icon2 && typeof icon2 === "string" ? /* @__PURE__ */ jsx13("img", { className: walletIcon2, src: icon2, alt: `${name} logo` }) : icon2,
457
457
  /* @__PURE__ */ jsx13(Heading, { size: "md", truncate: true, asChild: true, children: /* @__PURE__ */ jsx13("div", { children: name }) })
458
458
  ]
459
459
  }