@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
@@ -10,6 +10,7 @@ export type WalletActions = {
10
10
  setWalletDisconnected: () => void;
11
11
  setWalletRegistered: (updatedWallets: WalletWithRequiredFeatures[]) => void;
12
12
  setWalletUnregistered: (updatedWallets: WalletWithRequiredFeatures[], unregisteredWallet: Wallet) => void;
13
+ setChain: (chain: ChainType | undefined) => void;
13
14
  };
14
15
  export type WalletStore = ReturnType<typeof createWalletStore>;
15
16
  export type StoreState = {
@@ -89,6 +89,9 @@ function createWalletStore({
89
89
  ({ address }) => address === currentAccount.address
90
90
  ) || accounts[0]
91
91
  }));
92
+ },
93
+ setChain(chain2) {
94
+ set(() => ({ chain: chain2 }));
92
95
  }
93
96
  }),
94
97
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/walletStore.ts", "../../src/utils/walletUtils.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 { 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 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"],
5
- "mappings": ";AAKA,SAAS,mBAAmB;AAE5B,SAAS,mBAAmB,eAAe;;;ACG3C,SAAS,YAAY,sCAAsC;AA2BpD,SAAS,0BAA0B,QAAiB;AACvD,SAAO,QAAQ,MAAM,QAAQ;AACjC;;;ADgBO,SAAS,kBAAkB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAAwB;AACpB,SAAO,YAAwB;AAAA,IAC3B;AAAA,MACI,CAAC,KAAK,SAAS;AAAA,QACX;AAAA,QACA;AAAA,QACA,UAAU,CAAC;AAAA,QACX,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,6BAA6B;AAAA,QAC7B,yBAAyB;AAAA,QACzB,kBAAkB;AAAA,QAClB,kBAAkB,CAAC;AAAA,QACnB;AAAA,QACA,oBAAoB,kBAAkB;AAClC,cAAI,OAAO;AAAA,YACP;AAAA,UACJ,EAAE;AAAA,QACN;AAAA,QACA,mBACI,QACA,mBACA,iBACA,mBAAmB,CAAC,GACtB;AACE,cAAI,OAAO;AAAA,YACP,UAAU;AAAA,YACV,eAAe;AAAA,YACf,gBAAgB;AAAA,YAChB,yBAAyB,0BAA0B,MAAM;AAAA,YACzD,6BAA6B,iBAAiB;AAAA,YAC9C,kBAAkB;AAAA,YAClB;AAAA,UACJ,EAAE;AAAA,QACN;AAAA,QACA,wBAAwB;AACpB,cAAI,OAAO;AAAA,YACP,UAAU,CAAC;AAAA,YACX,eAAe;AAAA,YACf,gBAAgB;AAAA,YAChB,yBAAyB;AAAA,YACzB,6BAA6B;AAAA,YAC7B,kBAAkB;AAAA,YAClB,kBAAkB,CAAC;AAAA,UACvB,EAAE;AAAA,QACN;AAAA,QACA,mBAAmB,iBAAiB;AAChC,cAAI,OAAO;AAAA,YACP,gBAAgB;AAAA,YAChB,6BAA6B,gBAAgB;AAAA,UACjD,EAAE;AAAA,QACN;AAAA,QACA,oBAAoB,gBAAgB;AAChC,cAAI,OAAO,EAAE,SAAS,eAAe,EAAE;AAAA,QAC3C;AAAA,QACA,sBAAsB,gBAAgB,oBAAoB;AACtD,cAAI,uBAAuB,IAAI,EAAE,eAAe;AAC5C,gBAAI,OAAO;AAAA,cACP,SAAS;AAAA,cACT,UAAU,CAAC;AAAA,cACX,eAAe;AAAA,cACf,gBAAgB;AAAA,cAChB,yBAAyB;AAAA,cACzB,6BAA6B;AAAA,cAC7B,kBAAkB;AAAA,cAClB,kBAAkB,CAAC;AAAA,YACvB,EAAE;AAAA,UACN,OAAO;AACH,gBAAI,OAAO,EAAE,SAAS,eAAe,EAAE;AAAA,UAC3C;AAAA,QACJ;AAAA,QACA,qBAAqB,UAAU;AAC3B,gBAAM,iBAAiB,IAAI,EAAE;AAE7B,cAAI,OAAO;AAAA,YACP;AAAA,YACA,gBACK,kBACG,SAAS;AAAA,cACL,CAAC,EAAE,QAAQ,MAAM,YAAY,eAAe;AAAA,YAChD,KACJ,SAAS,CAAC;AAAA,UAClB,EAAE;AAAA,QACN;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS,kBAAkB,MAAM,OAAO;AAAA,QACxC,YAAY,CAAC,EAAE,yBAAyB,4BAA4B,OAAO;AAAA,UACvE;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;",
6
- "names": []
4
+ "sourcesContent": ["// 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 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"],
5
+ "mappings": ";AAKA,SAAS,mBAAmB;AAE5B,SAAS,mBAAmB,eAAe;;;ACG3C,SAAS,YAAY,sCAAsC;AA2BpD,SAAS,0BAA0B,QAAiB;AACvD,SAAO,QAAQ,MAAM,QAAQ;AACjC;;;ADiBO,SAAS,kBAAkB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAAwB;AACpB,SAAO,YAAwB;AAAA,IAC3B;AAAA,MACI,CAAC,KAAK,SAAS;AAAA,QACX;AAAA,QACA;AAAA,QACA,UAAU,CAAC;AAAA,QACX,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,6BAA6B;AAAA,QAC7B,yBAAyB;AAAA,QACzB,kBAAkB;AAAA,QAClB,kBAAkB,CAAC;AAAA,QACnB;AAAA,QACA,oBAAoB,kBAAkB;AAClC,cAAI,OAAO;AAAA,YACP;AAAA,UACJ,EAAE;AAAA,QACN;AAAA,QACA,mBACI,QACA,mBACA,iBACA,mBAAmB,CAAC,GACtB;AACE,cAAI,OAAO;AAAA,YACP,UAAU;AAAA,YACV,eAAe;AAAA,YACf,gBAAgB;AAAA,YAChB,yBAAyB,0BAA0B,MAAM;AAAA,YACzD,6BAA6B,iBAAiB;AAAA,YAC9C,kBAAkB;AAAA,YAClB;AAAA,UACJ,EAAE;AAAA,QACN;AAAA,QACA,wBAAwB;AACpB,cAAI,OAAO;AAAA,YACP,UAAU,CAAC;AAAA,YACX,eAAe;AAAA,YACf,gBAAgB;AAAA,YAChB,yBAAyB;AAAA,YACzB,6BAA6B;AAAA,YAC7B,kBAAkB;AAAA,YAClB,kBAAkB,CAAC;AAAA,UACvB,EAAE;AAAA,QACN;AAAA,QACA,mBAAmB,iBAAiB;AAChC,cAAI,OAAO;AAAA,YACP,gBAAgB;AAAA,YAChB,6BAA6B,gBAAgB;AAAA,UACjD,EAAE;AAAA,QACN;AAAA,QACA,oBAAoB,gBAAgB;AAChC,cAAI,OAAO,EAAE,SAAS,eAAe,EAAE;AAAA,QAC3C;AAAA,QACA,sBAAsB,gBAAgB,oBAAoB;AACtD,cAAI,uBAAuB,IAAI,EAAE,eAAe;AAC5C,gBAAI,OAAO;AAAA,cACP,SAAS;AAAA,cACT,UAAU,CAAC;AAAA,cACX,eAAe;AAAA,cACf,gBAAgB;AAAA,cAChB,yBAAyB;AAAA,cACzB,6BAA6B;AAAA,cAC7B,kBAAkB;AAAA,cAClB,kBAAkB,CAAC;AAAA,YACvB,EAAE;AAAA,UACN,OAAO;AACH,gBAAI,OAAO,EAAE,SAAS,eAAe,EAAE;AAAA,UAC3C;AAAA,QACJ;AAAA,QACA,qBAAqB,UAAU;AAC3B,gBAAM,iBAAiB,IAAI,EAAE;AAE7B,cAAI,OAAO;AAAA,YACP;AAAA,YACA,gBACK,kBACG,SAAS;AAAA,cACL,CAAC,EAAE,QAAQ,MAAM,YAAY,eAAe;AAAA,YAChD,KACJ,SAAS,CAAC;AAAA,UAClB,EAAE;AAAA,QACN;AAAA,QACA,SAASA,QAAO;AACZ,cAAI,OAAO,EAAE,OAAAA,OAAM,EAAE;AAAA,QACzB;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS,kBAAkB,MAAM,OAAO;AAAA,QACxC,YAAY,CAAC,EAAE,yBAAyB,4BAA4B,OAAO;AAAA,UACvE;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;",
6
+ "names": ["chain"]
7
7
  }