@mysten-incubation/dev-wallet 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/CHANGELOG.md +76 -2
  2. package/dist/_virtual/{_@oxc-project_runtime@0.127.0/helpers → _@oxc-project_runtime@0.135.0/helpers/esm}/decorate.mjs +1 -1
  3. package/dist/adapters/base-adapter.d.mts.map +1 -1
  4. package/dist/adapters/base-adapter.mjs.map +1 -1
  5. package/dist/adapters/build-managed-account.mjs.map +1 -1
  6. package/dist/adapters/devstack-adapter.d.mts.map +1 -1
  7. package/dist/adapters/devstack-adapter.mjs.map +1 -1
  8. package/dist/adapters/devstack-paths.d.mts.map +1 -1
  9. package/dist/adapters/devstack-paths.mjs.map +1 -1
  10. package/dist/adapters/fork-relay.d.mts.map +1 -1
  11. package/dist/adapters/fork-relay.mjs.map +1 -1
  12. package/dist/adapters/idb-store.mjs.map +1 -1
  13. package/dist/adapters/in-memory-adapter.d.mts.map +1 -1
  14. package/dist/adapters/in-memory-adapter.mjs.map +1 -1
  15. package/dist/adapters/passkey-adapter.d.mts.map +1 -1
  16. package/dist/adapters/passkey-adapter.mjs.map +1 -1
  17. package/dist/adapters/remote-cli-adapter.d.mts.map +1 -1
  18. package/dist/adapters/remote-cli-adapter.mjs.map +1 -1
  19. package/dist/adapters/webcrypto-adapter.d.mts.map +1 -1
  20. package/dist/adapters/webcrypto-adapter.mjs.map +1 -1
  21. package/dist/bin/cli.mjs.map +1 -1
  22. package/dist/client/dev-wallet-client.d.mts.map +1 -1
  23. package/dist/client/dev-wallet-client.mjs.map +1 -1
  24. package/dist/client/request-handler.d.mts.map +1 -1
  25. package/dist/client/request-handler.mjs.map +1 -1
  26. package/dist/index.d.mts +2 -1
  27. package/dist/index.mjs +2 -1
  28. package/dist/inject/index.d.mts +61 -0
  29. package/dist/inject/index.d.mts.map +1 -0
  30. package/dist/inject/index.mjs +67 -0
  31. package/dist/inject/index.mjs.map +1 -0
  32. package/dist/react/components.d.mts +6 -8
  33. package/dist/react/components.d.mts.map +1 -1
  34. package/dist/react/components.mjs.map +1 -1
  35. package/dist/react/context.d.mts +2 -3
  36. package/dist/react/context.d.mts.map +1 -1
  37. package/dist/react/context.mjs.map +1 -1
  38. package/dist/react/useDevWallet.d.mts +3 -11
  39. package/dist/react/useDevWallet.d.mts.map +1 -1
  40. package/dist/react/useDevWallet.mjs +14 -36
  41. package/dist/react/useDevWallet.mjs.map +1 -1
  42. package/dist/server/cli-signing-middleware.d.mts.map +1 -1
  43. package/dist/server/cli-signing-middleware.mjs.map +1 -1
  44. package/dist/standalone/assets/base-adapter-DET6CP7z.js +1 -0
  45. package/dist/standalone/assets/in-memory-adapter-CX7xym4e.js +1 -0
  46. package/dist/standalone/assets/main-CuOnBmaa.js +7 -0
  47. package/dist/standalone/assets/webcrypto-adapter-CUQmbHDy.js +1 -0
  48. package/dist/standalone/bookmarklet.js +5 -5
  49. package/dist/standalone/index.html +2 -1
  50. package/dist/types.d.mts.map +1 -1
  51. package/dist/ui/copy-controller.mjs.map +1 -1
  52. package/dist/ui/dev-wallet-account-selector.d.mts +2 -3
  53. package/dist/ui/dev-wallet-account-selector.d.mts.map +1 -1
  54. package/dist/ui/dev-wallet-account-selector.mjs +1 -1
  55. package/dist/ui/dev-wallet-account-selector.mjs.map +1 -1
  56. package/dist/ui/dev-wallet-accounts.d.mts +2 -3
  57. package/dist/ui/dev-wallet-accounts.d.mts.map +1 -1
  58. package/dist/ui/dev-wallet-accounts.mjs +1 -1
  59. package/dist/ui/dev-wallet-accounts.mjs.map +1 -1
  60. package/dist/ui/dev-wallet-balances.d.mts +2 -3
  61. package/dist/ui/dev-wallet-balances.d.mts.map +1 -1
  62. package/dist/ui/dev-wallet-balances.mjs +1 -1
  63. package/dist/ui/dev-wallet-balances.mjs.map +1 -1
  64. package/dist/ui/dev-wallet-connect.d.mts +2 -3
  65. package/dist/ui/dev-wallet-connect.d.mts.map +1 -1
  66. package/dist/ui/dev-wallet-connect.mjs +1 -1
  67. package/dist/ui/dev-wallet-connect.mjs.map +1 -1
  68. package/dist/ui/dev-wallet-dropdown.d.mts +2 -3
  69. package/dist/ui/dev-wallet-dropdown.d.mts.map +1 -1
  70. package/dist/ui/dev-wallet-dropdown.mjs +1 -1
  71. package/dist/ui/dev-wallet-dropdown.mjs.map +1 -1
  72. package/dist/ui/dev-wallet-fork-panel.d.mts +2 -3
  73. package/dist/ui/dev-wallet-fork-panel.d.mts.map +1 -1
  74. package/dist/ui/dev-wallet-fork-panel.mjs +1 -1
  75. package/dist/ui/dev-wallet-fork-panel.mjs.map +1 -1
  76. package/dist/ui/dev-wallet-network-badge.d.mts +2 -3
  77. package/dist/ui/dev-wallet-network-badge.d.mts.map +1 -1
  78. package/dist/ui/dev-wallet-network-badge.mjs +1 -1
  79. package/dist/ui/dev-wallet-network-badge.mjs.map +1 -1
  80. package/dist/ui/dev-wallet-new-account.d.mts +2 -3
  81. package/dist/ui/dev-wallet-new-account.d.mts.map +1 -1
  82. package/dist/ui/dev-wallet-new-account.mjs +1 -1
  83. package/dist/ui/dev-wallet-new-account.mjs.map +1 -1
  84. package/dist/ui/dev-wallet-objects.d.mts +2 -3
  85. package/dist/ui/dev-wallet-objects.d.mts.map +1 -1
  86. package/dist/ui/dev-wallet-objects.mjs +1 -1
  87. package/dist/ui/dev-wallet-objects.mjs.map +1 -1
  88. package/dist/ui/dev-wallet-panel.d.mts +2 -3
  89. package/dist/ui/dev-wallet-panel.d.mts.map +1 -1
  90. package/dist/ui/dev-wallet-panel.mjs +1 -1
  91. package/dist/ui/dev-wallet-panel.mjs.map +1 -1
  92. package/dist/ui/dev-wallet-popup.d.mts +2 -3
  93. package/dist/ui/dev-wallet-popup.d.mts.map +1 -1
  94. package/dist/ui/dev-wallet-popup.mjs +1 -1
  95. package/dist/ui/dev-wallet-popup.mjs.map +1 -1
  96. package/dist/ui/dev-wallet-settings.d.mts +2 -3
  97. package/dist/ui/dev-wallet-settings.d.mts.map +1 -1
  98. package/dist/ui/dev-wallet-settings.mjs +1 -1
  99. package/dist/ui/dev-wallet-settings.mjs.map +1 -1
  100. package/dist/ui/dev-wallet-signing-modal.d.mts +2 -3
  101. package/dist/ui/dev-wallet-signing-modal.d.mts.map +1 -1
  102. package/dist/ui/dev-wallet-signing-modal.mjs +1 -1
  103. package/dist/ui/dev-wallet-signing-modal.mjs.map +1 -1
  104. package/dist/ui/dev-wallet-signing.d.mts +2 -3
  105. package/dist/ui/dev-wallet-signing.d.mts.map +1 -1
  106. package/dist/ui/dev-wallet-signing.mjs +2 -1
  107. package/dist/ui/dev-wallet-signing.mjs.map +1 -1
  108. package/dist/ui/dev-wallet-standalone.d.mts +2 -3
  109. package/dist/ui/dev-wallet-standalone.d.mts.map +1 -1
  110. package/dist/ui/dev-wallet-standalone.mjs +1 -1
  111. package/dist/ui/dev-wallet-standalone.mjs.map +1 -1
  112. package/dist/ui/dev-wallet-tab-bar.d.mts +1 -2
  113. package/dist/ui/dev-wallet-tab-bar.d.mts.map +1 -1
  114. package/dist/ui/dev-wallet-tab-bar.mjs +1 -1
  115. package/dist/ui/dev-wallet-tab-bar.mjs.map +1 -1
  116. package/dist/ui/mount.mjs.map +1 -1
  117. package/dist/ui/styles.mjs.map +1 -1
  118. package/dist/ui/transaction-analyzer.mjs.map +1 -1
  119. package/dist/ui/utils.d.mts.map +1 -1
  120. package/dist/ui/utils.mjs.map +1 -1
  121. package/dist/ui/wallet-controller.mjs.map +1 -1
  122. package/dist/wallet/constants.d.mts.map +1 -1
  123. package/dist/wallet/constants.mjs.map +1 -1
  124. package/dist/wallet/dev-wallet.d.mts +19 -0
  125. package/dist/wallet/dev-wallet.d.mts.map +1 -1
  126. package/dist/wallet/dev-wallet.mjs +58 -2
  127. package/dist/wallet/dev-wallet.mjs.map +1 -1
  128. package/dist/wallet/initializer.d.mts.map +1 -1
  129. package/dist/wallet/initializer.mjs +10 -26
  130. package/dist/wallet/initializer.mjs.map +1 -1
  131. package/dist/wallet/mount-and-register.d.mts +44 -0
  132. package/dist/wallet/mount-and-register.d.mts.map +1 -0
  133. package/dist/wallet/mount-and-register.mjs +46 -0
  134. package/dist/wallet/mount-and-register.mjs.map +1 -0
  135. package/dist/wallet/signing.d.mts.map +1 -1
  136. package/dist/wallet/signing.mjs.map +1 -1
  137. package/package.json +26 -22
  138. package/src/index.ts +5 -0
  139. package/src/inject/index.ts +200 -0
  140. package/src/react/useDevWallet.ts +26 -71
  141. package/src/ui/dev-wallet-signing.ts +2 -0
  142. package/src/wallet/dev-wallet.ts +75 -2
  143. package/src/wallet/initializer.ts +16 -42
  144. package/src/wallet/mount-and-register.ts +93 -0
  145. package/dist/standalone/assets/in-memory-adapter-qRkNfj9O.js +0 -1
  146. package/dist/standalone/assets/main-DDltQnzR.js +0 -3954
  147. package/dist/standalone/assets/webcrypto-adapter-FejcrL9x.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-connect.mjs","names":["#toggleAccount","#reject","#approve"],"sources":["../../src/ui/dev-wallet-connect.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { actionButtonStyles, sharedStyles } from './styles.js';\nimport { emitEvent, formatAddress, toggleSetItem } from './utils.js';\n\ninterface AccountInfo {\n\taddress: string;\n\tlabel?: string;\n\tadapterName?: string;\n}\n\n@customElement('dev-wallet-connect')\nexport class DevWalletConnect extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tactionButtonStyles,\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex: 1;\n\t\t\t\tflex-direction: column;\n\t\t\t\tmin-height: 0;\n\t\t\t}\n\n\t\t\t.connect-content {\n\t\t\t\tflex: 1;\n\t\t\t\tmin-height: 0;\n\t\t\t\tpadding: 16px;\n\t\t\t\tbackground: var(--dev-wallet-bg-0);\n\t\t\t}\n\n\t\t\t.connect-header {\n\t\t\t\ttext-align: left;\n\t\t\t\tmargin-bottom: 14px;\n\t\t\t}\n\n\t\t\t.connect-title {\n\t\t\t\tfont-size: 13px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.connect-desc {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tmargin-top: 4px;\n\t\t\t}\n\n\t\t\t.app-info {\n\t\t\t\tmargin-top: 8px;\n\t\t\t}\n\n\t\t\t.app-name {\n\t\t\t\tfont-size: 13px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t.app-url {\n\t\t\t\tfont-size: 11px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tword-break: break-all;\n\t\t\t}\n\n\t\t\t.account-list {\n\t\t\t\tmax-height: 240px;\n\t\t\t\toverflow-y: auto;\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tgap: 6px;\n\t\t\t}\n\n\t\t\t.account-item {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 8px;\n\t\t\t\tpadding: 10px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-lg);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tbackground: var(--dev-wallet-surface);\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\n\t\t\t.account-item:hover {\n\t\t\t\tbackground: var(--dev-wallet-bg-hover);\n\t\t\t\tborder-color: var(--dev-wallet-border-strong);\n\t\t\t}\n\n\t\t\t.account-item input[type='checkbox'] {\n\t\t\t\taccent-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.account-label {\n\t\t\t\tfont-size: 13px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.account-address {\n\t\t\t\tfont-size: 11px;\n\t\t\t\tfont-family: var(--dev-wallet-font-mono);\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t}\n\n\t\t\t.account-adapter {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tfont-size: 9px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\tletter-spacing: 0.3px;\n\t\t\t\tpadding: 1px 5px;\n\t\t\t\tborder-radius: 999px;\n\t\t\t\tborder: 1px solid var(--dev-wallet-border-strong);\n\t\t\t\tbackground: var(--dev-wallet-accent-fade);\n\t\t\t\tcolor: var(--dev-wallet-primary);\n\t\t\t\tmargin-left: 6px;\n\t\t\t}\n\n\t\t\t.connect-footer {\n\t\t\t\tpadding: 12px 16px;\n\t\t\t\tborder-top: 1px solid var(--dev-wallet-border);\n\t\t\t\tbackground: var(--dev-wallet-surface);\n\t\t\t}\n\n\t\t\t/* Override: connect uses --primary instead of --positive for approve */\n\t\t\t.btn-approve {\n\t\t\t\tbackground: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.btn-approve:hover {\n\t\t\t\tbackground: oklab(from var(--dev-wallet-primary) calc(l - 0.03) a b);\n\t\t\t}\n\n\t\t\t.btn-approve:disabled {\n\t\t\t\tcursor: default;\n\t\t\t}\n\n\t\t\t.error-message {\n\t\t\t\tcolor: var(--dev-wallet-destructive);\n\t\t\t\tfont-size: 12px;\n\t\t\t\tmargin-top: 8px;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ type: String })\n\tappName = '';\n\n\t@property({ type: String })\n\tappUrl = '';\n\n\t@property({ attribute: false })\n\taccounts: AccountInfo[] = [];\n\n\t@state()\n\tprivate _connecting = false;\n\n\t@state()\n\tprivate _error: string | null = null;\n\n\t@state()\n\tprivate _selectedAddresses: Set<string> = new Set();\n\n\toverride willUpdate(changedProperties: Map<string, unknown>) {\n\t\tif (\n\t\t\tchangedProperties.has('accounts') &&\n\t\t\tthis.accounts.length > 0 &&\n\t\t\tthis._selectedAddresses.size === 0\n\t\t) {\n\t\t\tthis._selectedAddresses = new Set(this.accounts.map((a) => a.address));\n\t\t}\n\t}\n\n\toverride render() {\n\t\treturn html`\n\t\t\t<div class=\"connect-content\">\n\t\t\t\t<div class=\"connect-header\">\n\t\t\t\t\t<div class=\"connect-title\">Connection Request</div>\n\t\t\t\t\t<div class=\"connect-desc\">Select accounts to share with the app</div>\n\t\t\t\t\t${this.appName\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<div class=\"app-info\">\n\t\t\t\t\t\t\t\t\t<span class=\"app-name\">${this.appName}</span>\n\t\t\t\t\t\t\t\t\t<span class=\"app-url\">${this.appUrl}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: nothing}\n\t\t\t\t</div>\n\t\t\t\t${this.accounts.length > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"account-list\" part=\"account-list\">\n\t\t\t\t\t\t\t\t${this.accounts.map(\n\t\t\t\t\t\t\t\t\t(account) => html`\n\t\t\t\t\t\t\t\t\t\t<label class=\"account-item\">\n\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\t\t\t.checked=${this._selectedAddresses.has(account.address)}\n\t\t\t\t\t\t\t\t\t\t\t\t@change=${() => this.#toggleAccount(account.address)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t\t${account.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<div class=\"account-label\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t${account.label}${account.adapterName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<span class=\"account-adapter\">${account.adapterName}</span>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: nothing}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: nothing}\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"account-address\">${formatAddress(account.address)}</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\t\t\t<div class=\"connect-footer\">\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<button class=\"btn btn-reject\" part=\"reject-button\" @click=${this.#reject}>Reject</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"btn btn-approve\"\n\t\t\t\t\t\tpart=\"approve-button\"\n\t\t\t\t\t\t?disabled=${this._connecting || this._selectedAddresses.size === 0}\n\t\t\t\t\t\t@click=${this.#approve}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this._connecting ? 'Connecting...' : `Connect (${this._selectedAddresses.size})`}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t${this._error\n\t\t\t\t\t? html`<p class=\"error-message\" part=\"error-message\">${this._error}</p>`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\t\t`;\n\t}\n\n\tget selectedAddresses(): string[] {\n\t\treturn [...this._selectedAddresses];\n\t}\n\n\t#toggleAccount(address: string) {\n\t\tthis._selectedAddresses = toggleSetItem(this._selectedAddresses, address);\n\t}\n\n\t#approve() {\n\t\tthis._connecting = true;\n\t\tthis._error = null;\n\t\temitEvent(this, 'approve', { selectedAddresses: this.selectedAddresses });\n\t}\n\n\t#reject() {\n\t\temitEvent(this, 'reject');\n\t}\n\n\tshowError(message: string) {\n\t\tthis._connecting = false;\n\t\tthis._error = message;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-connect': DevWalletConnect;\n\t}\n}\n"],"mappings":";;;;;;AAgBO,IAAA,mBAAA,MAAM,yBAAyB,WAAW;;;iBAwItC;gBAGD;kBAGiB,EAAE;qBAGN;gBAGU;4CAGU,IAAI,KAAK;;;gBAtJ1B;GACxB;GACA;GACA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiIH;;CAoBD,WAAoB,mBAAyC;AAC5D,MACC,kBAAkB,IAAI,WAAW,IACjC,KAAK,SAAS,SAAS,KACvB,KAAK,mBAAmB,SAAS,EAEjC,MAAK,qBAAqB,IAAI,IAAI,KAAK,SAAS,KAAK,MAAM,EAAE,QAAQ,CAAC;;CAIxE,SAAkB;AACjB,SAAO,IAAI;;;;;OAKN,KAAK,UACJ,IAAI;;kCAEsB,KAAK,QAAQ;iCACd,KAAK,OAAO;;WAGrC,QAAQ;;MAEV,KAAK,SAAS,SAAS,IACtB,IAAI;;UAED,KAAK,SAAS,KACd,YAAY,IAAI;;;;uBAIH,KAAK,mBAAmB,IAAI,QAAQ,QAAQ,CAAC;4BACxC,MAAA,cAAoB,QAAQ,QAAQ,CAAC;;;cAGnD,QAAQ,QACP,IAAI;iBACF,QAAQ,QAAQ,QAAQ,cACvB,IAAI,iCAAiC,QAAQ,YAAY,WACzD,QAAQ;wBAEX,QAAQ;2CACoB,cAAc,QAAQ,QAAQ,CAAC;;;WAIjE,CAAC;;UAGH,QAAQ;;;;kEAImD,MAAA,OAAa;;;;kBAI7D,KAAK,eAAe,KAAK,mBAAmB,SAAS,EAAE;eAC1D,MAAA,QAAc;;QAErB,KAAK,cAAc,kBAAkB,YAAY,KAAK,mBAAmB,KAAK,GAAG;;;MAGnF,KAAK,SACJ,IAAI,iDAAiD,KAAK,OAAO,QACjE,QAAQ;;;;CAKd,IAAI,oBAA8B;AACjC,SAAO,CAAC,GAAG,KAAK,mBAAmB;;CAGpC,eAAe,SAAiB;AAC/B,OAAK,qBAAqB,cAAc,KAAK,oBAAoB,QAAQ;;CAG1E,WAAW;AACV,OAAK,cAAc;AACnB,OAAK,SAAS;AACd,YAAU,MAAM,WAAW,EAAE,mBAAmB,KAAK,mBAAmB,CAAC;;CAG1E,UAAU;AACT,YAAU,MAAM,SAAS;;CAG1B,UAAU,SAAiB;AAC1B,OAAK,cAAc;AACnB,OAAK,SAAS;;;YA9Gd,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,EAAA,iBAAA,WAAA,WAAA,KAAA,EAAA;YAG1B,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,EAAA,iBAAA,WAAA,UAAA,KAAA,EAAA;YAG1B,SAAS,EAAE,WAAW,OAAO,CAAC,CAAA,EAAA,iBAAA,WAAA,YAAA,KAAA,EAAA;YAG9B,OAAO,CAAA,EAAA,iBAAA,WAAA,eAAA,KAAA,EAAA;YAGP,OAAO,CAAA,EAAA,iBAAA,WAAA,UAAA,KAAA,EAAA;YAGP,OAAO,CAAA,EAAA,iBAAA,WAAA,sBAAA,KAAA,EAAA;+BAvJR,cAAc,qBAAqB,CAAA,EAAA,iBAAA"}
1
+ {"version":3,"file":"dev-wallet-connect.mjs","names":["#toggleAccount","#reject","#approve"],"sources":["../../src/ui/dev-wallet-connect.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { actionButtonStyles, sharedStyles } from './styles.js';\nimport { emitEvent, formatAddress, toggleSetItem } from './utils.js';\n\ninterface AccountInfo {\n\taddress: string;\n\tlabel?: string;\n\tadapterName?: string;\n}\n\n@customElement('dev-wallet-connect')\nexport class DevWalletConnect extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tactionButtonStyles,\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex: 1;\n\t\t\t\tflex-direction: column;\n\t\t\t\tmin-height: 0;\n\t\t\t}\n\n\t\t\t.connect-content {\n\t\t\t\tflex: 1;\n\t\t\t\tmin-height: 0;\n\t\t\t\tpadding: 16px;\n\t\t\t\tbackground: var(--dev-wallet-bg-0);\n\t\t\t}\n\n\t\t\t.connect-header {\n\t\t\t\ttext-align: left;\n\t\t\t\tmargin-bottom: 14px;\n\t\t\t}\n\n\t\t\t.connect-title {\n\t\t\t\tfont-size: 13px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.connect-desc {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tmargin-top: 4px;\n\t\t\t}\n\n\t\t\t.app-info {\n\t\t\t\tmargin-top: 8px;\n\t\t\t}\n\n\t\t\t.app-name {\n\t\t\t\tfont-size: 13px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t.app-url {\n\t\t\t\tfont-size: 11px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tword-break: break-all;\n\t\t\t}\n\n\t\t\t.account-list {\n\t\t\t\tmax-height: 240px;\n\t\t\t\toverflow-y: auto;\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tgap: 6px;\n\t\t\t}\n\n\t\t\t.account-item {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 8px;\n\t\t\t\tpadding: 10px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-lg);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tbackground: var(--dev-wallet-surface);\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\n\t\t\t.account-item:hover {\n\t\t\t\tbackground: var(--dev-wallet-bg-hover);\n\t\t\t\tborder-color: var(--dev-wallet-border-strong);\n\t\t\t}\n\n\t\t\t.account-item input[type='checkbox'] {\n\t\t\t\taccent-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.account-label {\n\t\t\t\tfont-size: 13px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.account-address {\n\t\t\t\tfont-size: 11px;\n\t\t\t\tfont-family: var(--dev-wallet-font-mono);\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t}\n\n\t\t\t.account-adapter {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tfont-size: 9px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\tletter-spacing: 0.3px;\n\t\t\t\tpadding: 1px 5px;\n\t\t\t\tborder-radius: 999px;\n\t\t\t\tborder: 1px solid var(--dev-wallet-border-strong);\n\t\t\t\tbackground: var(--dev-wallet-accent-fade);\n\t\t\t\tcolor: var(--dev-wallet-primary);\n\t\t\t\tmargin-left: 6px;\n\t\t\t}\n\n\t\t\t.connect-footer {\n\t\t\t\tpadding: 12px 16px;\n\t\t\t\tborder-top: 1px solid var(--dev-wallet-border);\n\t\t\t\tbackground: var(--dev-wallet-surface);\n\t\t\t}\n\n\t\t\t/* Override: connect uses --primary instead of --positive for approve */\n\t\t\t.btn-approve {\n\t\t\t\tbackground: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.btn-approve:hover {\n\t\t\t\tbackground: oklab(from var(--dev-wallet-primary) calc(l - 0.03) a b);\n\t\t\t}\n\n\t\t\t.btn-approve:disabled {\n\t\t\t\tcursor: default;\n\t\t\t}\n\n\t\t\t.error-message {\n\t\t\t\tcolor: var(--dev-wallet-destructive);\n\t\t\t\tfont-size: 12px;\n\t\t\t\tmargin-top: 8px;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ type: String })\n\tappName = '';\n\n\t@property({ type: String })\n\tappUrl = '';\n\n\t@property({ attribute: false })\n\taccounts: AccountInfo[] = [];\n\n\t@state()\n\tprivate _connecting = false;\n\n\t@state()\n\tprivate _error: string | null = null;\n\n\t@state()\n\tprivate _selectedAddresses: Set<string> = new Set();\n\n\toverride willUpdate(changedProperties: Map<string, unknown>) {\n\t\tif (\n\t\t\tchangedProperties.has('accounts') &&\n\t\t\tthis.accounts.length > 0 &&\n\t\t\tthis._selectedAddresses.size === 0\n\t\t) {\n\t\t\tthis._selectedAddresses = new Set(this.accounts.map((a) => a.address));\n\t\t}\n\t}\n\n\toverride render() {\n\t\treturn html`\n\t\t\t<div class=\"connect-content\">\n\t\t\t\t<div class=\"connect-header\">\n\t\t\t\t\t<div class=\"connect-title\">Connection Request</div>\n\t\t\t\t\t<div class=\"connect-desc\">Select accounts to share with the app</div>\n\t\t\t\t\t${this.appName\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<div class=\"app-info\">\n\t\t\t\t\t\t\t\t\t<span class=\"app-name\">${this.appName}</span>\n\t\t\t\t\t\t\t\t\t<span class=\"app-url\">${this.appUrl}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: nothing}\n\t\t\t\t</div>\n\t\t\t\t${this.accounts.length > 0\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"account-list\" part=\"account-list\">\n\t\t\t\t\t\t\t\t${this.accounts.map(\n\t\t\t\t\t\t\t\t\t(account) => html`\n\t\t\t\t\t\t\t\t\t\t<label class=\"account-item\">\n\t\t\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\t\t\t.checked=${this._selectedAddresses.has(account.address)}\n\t\t\t\t\t\t\t\t\t\t\t\t@change=${() => this.#toggleAccount(account.address)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t\t\t\t${account.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<div class=\"account-label\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t${account.label}${account.adapterName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<span class=\"account-adapter\">${account.adapterName}</span>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: nothing}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>`\n\t\t\t\t\t\t\t\t\t\t\t\t\t: nothing}\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"account-address\">${formatAddress(account.address)}</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\t\t\t<div class=\"connect-footer\">\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<button class=\"btn btn-reject\" part=\"reject-button\" @click=${this.#reject}>Reject</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"btn btn-approve\"\n\t\t\t\t\t\tpart=\"approve-button\"\n\t\t\t\t\t\t?disabled=${this._connecting || this._selectedAddresses.size === 0}\n\t\t\t\t\t\t@click=${this.#approve}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this._connecting ? 'Connecting...' : `Connect (${this._selectedAddresses.size})`}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t${this._error\n\t\t\t\t\t? html`<p class=\"error-message\" part=\"error-message\">${this._error}</p>`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\t\t`;\n\t}\n\n\tget selectedAddresses(): string[] {\n\t\treturn [...this._selectedAddresses];\n\t}\n\n\t#toggleAccount(address: string) {\n\t\tthis._selectedAddresses = toggleSetItem(this._selectedAddresses, address);\n\t}\n\n\t#approve() {\n\t\tthis._connecting = true;\n\t\tthis._error = null;\n\t\temitEvent(this, 'approve', { selectedAddresses: this.selectedAddresses });\n\t}\n\n\t#reject() {\n\t\temitEvent(this, 'reject');\n\t}\n\n\tshowError(message: string) {\n\t\tthis._connecting = false;\n\t\tthis._error = message;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-connect': DevWalletConnect;\n\t}\n}\n"],"mappings":";;;;;;AAgBO,IAAA,mBAAA,MAAM,yBAAyB,WAAW;;;iBAwItC;gBAGD;kBAGiB,CAAC;qBAGL;gBAGU;4CAGU,IAAI,IAAI;;;gBAtJzB;GACxB;GACA;GACA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiIJ;;CAoBA,WAAoB,mBAAyC;EAC5D,IACC,kBAAkB,IAAI,UAAU,KAChC,KAAK,SAAS,SAAS,KACvB,KAAK,mBAAmB,SAAS,GAEjC,KAAK,qBAAqB,IAAI,IAAI,KAAK,SAAS,KAAK,MAAM,EAAE,OAAO,CAAC;CAEvE;CAEA,SAAkB;EACjB,OAAO,IAAI;;;;;OAKN,KAAK,UACJ,IAAI;;kCAEsB,KAAK,QAAQ;iCACd,KAAK,OAAO;;WAGrC,QAAQ;;MAEV,KAAK,SAAS,SAAS,IACtB,IAAI;;UAED,KAAK,SAAS,KACd,YAAY,IAAI;;;;uBAIH,KAAK,mBAAmB,IAAI,QAAQ,OAAO,EAAE;4BACxC,KAAKA,eAAe,QAAQ,OAAO,EAAE;;;cAGnD,QAAQ,QACP,IAAI;iBACF,QAAQ,QAAQ,QAAQ,cACvB,IAAI,iCAAiC,QAAQ,YAAY,WACzD,QAAQ;wBAEX,QAAQ;2CACoB,cAAc,QAAQ,OAAO,EAAE;;;UAIlE,EAAE;;UAGH,QAAQ;;;;kEAImD,KAAKC,QAAQ;;;;kBAI7D,KAAK,eAAe,KAAK,mBAAmB,SAAS,EAAE;eAC1D,KAAKC,SAAS;;QAErB,KAAK,cAAc,kBAAkB,YAAY,KAAK,mBAAmB,KAAK,GAAG;;;MAGnF,KAAK,SACJ,IAAI,iDAAiD,KAAK,OAAO,QACjE,QAAQ;;;CAGd;CAEA,IAAI,oBAA8B;EACjC,OAAO,CAAC,GAAG,KAAK,kBAAkB;CACnC;CAEA,eAAe,SAAiB;EAC/B,KAAK,qBAAqB,cAAc,KAAK,oBAAoB,OAAO;CACzE;CAEA,WAAW;EACV,KAAK,cAAc;EACnB,KAAK,SAAS;EACd,UAAU,MAAM,WAAW,EAAE,mBAAmB,KAAK,kBAAkB,CAAC;CACzE;CAEA,UAAU;EACT,UAAU,MAAM,QAAQ;CACzB;CAEA,UAAU,SAAiB;EAC1B,KAAK,cAAc;EACnB,KAAK,SAAS;CACf;AACD;YAhHE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,iBAAA,WAAA,WAAA,KAAA,CAAA;YAGzB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,iBAAA,WAAA,UAAA,KAAA,CAAA;YAGzB,SAAS,EAAE,WAAW,MAAM,CAAC,CAAA,GAAA,iBAAA,WAAA,YAAA,KAAA,CAAA;YAG7B,MAAM,CAAA,GAAA,iBAAA,WAAA,eAAA,KAAA,CAAA;YAGN,MAAM,CAAA,GAAA,iBAAA,WAAA,UAAA,KAAA,CAAA;YAGN,MAAM,CAAA,GAAA,iBAAA,WAAA,sBAAA,KAAA,CAAA;+BAvJP,cAAc,oBAAoB,CAAA,GAAA,gBAAA"}
@@ -1,4 +1,3 @@
1
- import * as _$lit from "lit";
2
1
  import { LitElement } from "lit";
3
2
 
4
3
  //#region src/ui/dev-wallet-dropdown.d.ts
@@ -8,10 +7,10 @@ import { LitElement } from "lit";
8
7
  */
9
8
  declare class DevWalletDropdown extends LitElement {
10
9
  #private;
11
- static styles: (_$lit.CSSResult | _$lit.CSSResult[])[];
10
+ static styles: (import("lit").CSSResult | import("lit").CSSResult[])[];
12
11
  open: boolean;
13
12
  fullWidth: boolean;
14
- render(): _$lit.TemplateResult<1>;
13
+ render(): import("lit").TemplateResult<1>;
15
14
  close(): void;
16
15
  connectedCallback(): void;
17
16
  disconnectedCallback(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-dropdown.d.mts","names":[],"sources":["../../src/ui/dev-wallet-dropdown.ts"],"mappings":";;;;;;;AAaA;cACa,iBAAA,SAA0B,UAAA;EAAA;SACtB,MAAA,GADc,KAAA,CACR,SAAA,GAAA,KAAA,CAAA,SAAA;EAqCtB,IAAA;EAGA,SAAA;EAES,MAAA,CAAA,GA1Ca,KAAA,CA0CP,cAAA;EAOf,KAAA,CAAA;EA8CS,iBAAA,CAAA;EAQA,oBAAA,CAAA;EAMA,UAAA,CAAW,OAAA,EAAS,GAAA;AAAA;AAAA,QAWtB,MAAA;EAAA,UACG,qBAAA;IACT,qBAAA,EAAuB,iBAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"dev-wallet-dropdown.d.mts","names":[],"sources":["../../src/ui/dev-wallet-dropdown.ts"],"mappings":";;;;;AAaA;;cACa,iBAAA,SAA0B,UAAU;EAAA;SAChC,MAAA,iBAAM,SAAA,iBAAA,SAAA;EAqCtB,IAAA;EAGA,SAAA;EAES,MAAA,kBAAM,cAAA;EAOf,KAAA;EA8CS,iBAAA;EAQA,oBAAA;EAMA,UAAA,CAAW,OAAA,EAAS,GAAA;AAAA;AAAA,QAWtB,MAAA;EAAA,UACG,qBAAA;IACT,qBAAA,EAAuB,iBAAiB;EAAA;AAAA"}
@@ -1,6 +1,6 @@
1
1
  import { sharedStyles } from "./styles.mjs";
2
2
  import { emitEvent } from "./utils.mjs";
3
- import { __decorate } from "../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.mjs";
3
+ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.135.0/helpers/esm/decorate.mjs";
4
4
  import { LitElement, css, html, nothing } from "lit";
5
5
  import { customElement, property } from "lit/decorators.js";
6
6
  //#region src/ui/dev-wallet-dropdown.ts
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-dropdown.mjs","names":["#handleKeydown","#handleDocClick"],"sources":["../../src/ui/dev-wallet-dropdown.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { sharedStyles } from './styles.js';\nimport { emitEvent } from './utils.js';\n\n/**\n * @slot trigger - The element that opens the dropdown (parent handles click to toggle)\n * @slot popover - The dropdown content\n */\n@customElement('dev-wallet-dropdown')\nexport class DevWalletDropdown extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tposition: relative;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t:host([full-width]) {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t.popover {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 100%;\n\t\t\t\tleft: 0;\n\t\t\t\tmargin-top: 6px;\n\t\t\t\tmin-width: 100%;\n\t\t\t\tbackground: var(--dev-wallet-bg-2);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border-2);\n\t\t\t\tborder-radius: var(--dev-wallet-radius-lg);\n\t\t\t\tbox-shadow: var(--dev-wallet-shadow-lg);\n\t\t\t\tz-index: 10;\n\t\t\t\toverflow: hidden;\n\t\t\t\tmax-height: var(--dropdown-max-height, none);\n\t\t\t\toverflow-y: auto;\n\t\t\t\tpadding: 4px;\n\t\t\t\tanimation: popin 120ms ease-out;\n\t\t\t}\n\n\t\t\t:host([full-width]) .popover {\n\t\t\t\tright: 0;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ type: Boolean, reflect: true })\n\topen = false;\n\n\t@property({ type: Boolean, reflect: true, attribute: 'full-width' })\n\tfullWidth = false;\n\n\toverride render() {\n\t\treturn html`\n\t\t\t<slot name=\"trigger\"></slot>\n\t\t\t${this.open ? html`<div class=\"popover\"><slot name=\"popover\"></slot></div>` : nothing}\n\t\t`;\n\t}\n\n\tclose() {\n\t\tif (this.open) {\n\t\t\tthis.open = false;\n\t\t\temitEvent(this, 'close');\n\t\t}\n\t}\n\n\t#handleDocClick = (e: Event) => {\n\t\tif (this.open && !e.composedPath().includes(this)) {\n\t\t\tthis.close();\n\t\t}\n\t};\n\n\t#handleKeydown = (e: KeyboardEvent) => {\n\t\tif (!this.open) return;\n\n\t\tif (e.key === 'Escape') {\n\t\t\te.preventDefault();\n\t\t\tthis.close();\n\t\t\tconst trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n\t\t\ttrigger?.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n\t\t\te.preventDefault();\n\t\t\tconst items = Array.from(\n\t\t\t\tthis.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'[slot=\"popover\"] button, [slot=\"popover\"] [role=\"option\"]',\n\t\t\t\t),\n\t\t\t);\n\t\t\tif (items.length === 0) return;\n\n\t\t\tconst focused = items.find((el) => el === document.activeElement);\n\t\t\tlet index = focused ? items.indexOf(focused) : -1;\n\n\t\t\tif (e.key === 'ArrowDown') {\n\t\t\t\tindex = index < items.length - 1 ? index + 1 : 0;\n\t\t\t} else {\n\t\t\t\tindex = index > 0 ? index - 1 : items.length - 1;\n\t\t\t}\n\n\t\t\titems[index]?.focus();\n\t\t}\n\t};\n\n\toverride connectedCallback() {\n\t\tsuper.connectedCallback();\n\t\tthis.addEventListener('keydown', this.#handleKeydown);\n\t\tif (this.open) {\n\t\t\tdocument.addEventListener('click', this.#handleDocClick, true);\n\t\t}\n\t}\n\n\toverride disconnectedCallback() {\n\t\tsuper.disconnectedCallback();\n\t\tdocument.removeEventListener('click', this.#handleDocClick, true);\n\t\tthis.removeEventListener('keydown', this.#handleKeydown);\n\t}\n\n\toverride willUpdate(changed: Map<string, unknown>) {\n\t\tif (changed.has('open')) {\n\t\t\tif (this.open) {\n\t\t\t\tdocument.addEventListener('click', this.#handleDocClick, true);\n\t\t\t} else {\n\t\t\t\tdocument.removeEventListener('click', this.#handleDocClick, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-dropdown': DevWalletDropdown;\n\t}\n}\n"],"mappings":";;;;;;AAcO,IAAA,oBAAA,MAAM,0BAA0B,WAAW;;;cAsC1C;mBAGK;0BAgBO,MAAa;AAC/B,OAAI,KAAK,QAAQ,CAAC,EAAE,cAAc,CAAC,SAAS,KAAK,CAChD,MAAK,OAAO;;yBAII,MAAqB;AACtC,OAAI,CAAC,KAAK,KAAM;AAEhB,OAAI,EAAE,QAAQ,UAAU;AACvB,MAAE,gBAAgB;AAClB,SAAK,OAAO;AAEZ,IADgB,KAAK,cAAc,qBACnC,EAAS,OAAO;AAChB;;AAGD,OAAI,EAAE,QAAQ,eAAe,EAAE,QAAQ,WAAW;AACjD,MAAE,gBAAgB;IAClB,MAAM,QAAQ,MAAM,KACnB,KAAK,iBACJ,kEACA,CACD;AACD,QAAI,MAAM,WAAW,EAAG;IAExB,MAAM,UAAU,MAAM,MAAM,OAAO,OAAO,SAAS,cAAc;IACjE,IAAI,QAAQ,UAAU,MAAM,QAAQ,QAAQ,GAAG;AAE/C,QAAI,EAAE,QAAQ,YACb,SAAQ,QAAQ,MAAM,SAAS,IAAI,QAAQ,IAAI;QAE/C,SAAQ,QAAQ,IAAI,QAAQ,IAAI,MAAM,SAAS;AAGhD,UAAM,QAAQ,OAAO;;;;;gBA3FE,CACxB,cACA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgCH;;CAQD,SAAkB;AACjB,SAAO,IAAI;;KAER,KAAK,OAAO,IAAI,4DAA4D,QAAQ;;;CAIxF,QAAQ;AACP,MAAI,KAAK,MAAM;AACd,QAAK,OAAO;AACZ,aAAU,MAAM,QAAQ;;;CAI1B;CAMA;CAiCA,oBAA6B;AAC5B,QAAM,mBAAmB;AACzB,OAAK,iBAAiB,WAAW,MAAA,cAAoB;AACrD,MAAI,KAAK,KACR,UAAS,iBAAiB,SAAS,MAAA,gBAAsB,KAAK;;CAIhE,uBAAgC;AAC/B,QAAM,sBAAsB;AAC5B,WAAS,oBAAoB,SAAS,MAAA,gBAAsB,KAAK;AACjE,OAAK,oBAAoB,WAAW,MAAA,cAAoB;;CAGzD,WAAoB,SAA+B;AAClD,MAAI,QAAQ,IAAI,OAAO,CACtB,KAAI,KAAK,KACR,UAAS,iBAAiB,SAAS,MAAA,gBAAsB,KAAK;MAE9D,UAAS,oBAAoB,SAAS,MAAA,gBAAsB,KAAK;;;YA9EnE,SAAS;CAAE,MAAM;CAAS,SAAS;CAAM,CAAC,CAAA,EAAA,kBAAA,WAAA,QAAA,KAAA,EAAA;YAG1C,SAAS;CAAE,MAAM;CAAS,SAAS;CAAM,WAAW;CAAc,CAAC,CAAA,EAAA,kBAAA,WAAA,aAAA,KAAA,EAAA;gCAzCpE,cAAc,sBAAsB,CAAA,EAAA,kBAAA"}
1
+ {"version":3,"file":"dev-wallet-dropdown.mjs","names":["#handleKeydown","#handleDocClick"],"sources":["../../src/ui/dev-wallet-dropdown.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { sharedStyles } from './styles.js';\nimport { emitEvent } from './utils.js';\n\n/**\n * @slot trigger - The element that opens the dropdown (parent handles click to toggle)\n * @slot popover - The dropdown content\n */\n@customElement('dev-wallet-dropdown')\nexport class DevWalletDropdown extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tposition: relative;\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t:host([full-width]) {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t.popover {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 100%;\n\t\t\t\tleft: 0;\n\t\t\t\tmargin-top: 6px;\n\t\t\t\tmin-width: 100%;\n\t\t\t\tbackground: var(--dev-wallet-bg-2);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border-2);\n\t\t\t\tborder-radius: var(--dev-wallet-radius-lg);\n\t\t\t\tbox-shadow: var(--dev-wallet-shadow-lg);\n\t\t\t\tz-index: 10;\n\t\t\t\toverflow: hidden;\n\t\t\t\tmax-height: var(--dropdown-max-height, none);\n\t\t\t\toverflow-y: auto;\n\t\t\t\tpadding: 4px;\n\t\t\t\tanimation: popin 120ms ease-out;\n\t\t\t}\n\n\t\t\t:host([full-width]) .popover {\n\t\t\t\tright: 0;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ type: Boolean, reflect: true })\n\topen = false;\n\n\t@property({ type: Boolean, reflect: true, attribute: 'full-width' })\n\tfullWidth = false;\n\n\toverride render() {\n\t\treturn html`\n\t\t\t<slot name=\"trigger\"></slot>\n\t\t\t${this.open ? html`<div class=\"popover\"><slot name=\"popover\"></slot></div>` : nothing}\n\t\t`;\n\t}\n\n\tclose() {\n\t\tif (this.open) {\n\t\t\tthis.open = false;\n\t\t\temitEvent(this, 'close');\n\t\t}\n\t}\n\n\t#handleDocClick = (e: Event) => {\n\t\tif (this.open && !e.composedPath().includes(this)) {\n\t\t\tthis.close();\n\t\t}\n\t};\n\n\t#handleKeydown = (e: KeyboardEvent) => {\n\t\tif (!this.open) return;\n\n\t\tif (e.key === 'Escape') {\n\t\t\te.preventDefault();\n\t\t\tthis.close();\n\t\t\tconst trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n\t\t\ttrigger?.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n\t\t\te.preventDefault();\n\t\t\tconst items = Array.from(\n\t\t\t\tthis.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'[slot=\"popover\"] button, [slot=\"popover\"] [role=\"option\"]',\n\t\t\t\t),\n\t\t\t);\n\t\t\tif (items.length === 0) return;\n\n\t\t\tconst focused = items.find((el) => el === document.activeElement);\n\t\t\tlet index = focused ? items.indexOf(focused) : -1;\n\n\t\t\tif (e.key === 'ArrowDown') {\n\t\t\t\tindex = index < items.length - 1 ? index + 1 : 0;\n\t\t\t} else {\n\t\t\t\tindex = index > 0 ? index - 1 : items.length - 1;\n\t\t\t}\n\n\t\t\titems[index]?.focus();\n\t\t}\n\t};\n\n\toverride connectedCallback() {\n\t\tsuper.connectedCallback();\n\t\tthis.addEventListener('keydown', this.#handleKeydown);\n\t\tif (this.open) {\n\t\t\tdocument.addEventListener('click', this.#handleDocClick, true);\n\t\t}\n\t}\n\n\toverride disconnectedCallback() {\n\t\tsuper.disconnectedCallback();\n\t\tdocument.removeEventListener('click', this.#handleDocClick, true);\n\t\tthis.removeEventListener('keydown', this.#handleKeydown);\n\t}\n\n\toverride willUpdate(changed: Map<string, unknown>) {\n\t\tif (changed.has('open')) {\n\t\t\tif (this.open) {\n\t\t\t\tdocument.addEventListener('click', this.#handleDocClick, true);\n\t\t\t} else {\n\t\t\t\tdocument.removeEventListener('click', this.#handleDocClick, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-dropdown': DevWalletDropdown;\n\t}\n}\n"],"mappings":";;;;;;AAcO,IAAA,oBAAA,MAAM,0BAA0B,WAAW;;;cAsC1C;mBAGK;0BAgBO,MAAa;GAC/B,IAAI,KAAK,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,SAAS,IAAI,GAC/C,KAAK,MAAM;EAEb;yBAEkB,MAAqB;GACtC,IAAI,CAAC,KAAK,MAAM;GAEhB,IAAI,EAAE,QAAQ,UAAU;IACvB,EAAE,eAAe;IACjB,KAAK,MAAM;IAEX,AADgB,KAAK,cAAc,oBACnC,CAAA,EAAS,MAAM;IACf;GACD;GAEA,IAAI,EAAE,QAAQ,eAAe,EAAE,QAAQ,WAAW;IACjD,EAAE,eAAe;IACjB,MAAM,QAAQ,MAAM,KACnB,KAAK,iBACJ,iEACD,CACD;IACA,IAAI,MAAM,WAAW,GAAG;IAExB,MAAM,UAAU,MAAM,MAAM,OAAO,OAAO,SAAS,aAAa;IAChE,IAAI,QAAQ,UAAU,MAAM,QAAQ,OAAO,IAAI;IAE/C,IAAI,EAAE,QAAQ,aACb,QAAQ,QAAQ,MAAM,SAAS,IAAI,QAAQ,IAAI;SAE/C,QAAQ,QAAQ,IAAI,QAAQ,IAAI,MAAM,SAAS;IAGhD,MAAM,MAAM,EAAE,MAAM;GACrB;EACD;;;gBA7FyB,CACxB,cACA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCJ;;CAQA,SAAkB;EACjB,OAAO,IAAI;;KAER,KAAK,OAAO,IAAI,4DAA4D,QAAQ;;CAExF;CAEA,QAAQ;EACP,IAAI,KAAK,MAAM;GACd,KAAK,OAAO;GACZ,UAAU,MAAM,OAAO;EACxB;CACD;CAEA;CAMA;CAiCA,oBAA6B;EAC5B,MAAM,kBAAkB;EACxB,KAAK,iBAAiB,WAAW,KAAKA,cAAc;EACpD,IAAI,KAAK,MACR,SAAS,iBAAiB,SAAS,KAAKC,iBAAiB,IAAI;CAE/D;CAEA,uBAAgC;EAC/B,MAAM,qBAAqB;EAC3B,SAAS,oBAAoB,SAAS,KAAKA,iBAAiB,IAAI;EAChE,KAAK,oBAAoB,WAAW,KAAKD,cAAc;CACxD;CAEA,WAAoB,SAA+B;EAClD,IAAI,QAAQ,IAAI,MAAM,GACrB,IAAI,KAAK,MACR,SAAS,iBAAiB,SAAS,KAAKC,iBAAiB,IAAI;OAE7D,SAAS,oBAAoB,SAAS,KAAKA,iBAAiB,IAAI;CAGnE;AACD;YAlFE,SAAS;CAAE,MAAM;CAAS,SAAS;AAAK,CAAC,CAAA,GAAA,kBAAA,WAAA,QAAA,KAAA,CAAA;YAGzC,SAAS;CAAE,MAAM;CAAS,SAAS;CAAM,WAAW;AAAa,CAAC,CAAA,GAAA,kBAAA,WAAA,aAAA,KAAA,CAAA;gCAzCnE,cAAc,qBAAqB,CAAA,GAAA,iBAAA"}
@@ -1,11 +1,10 @@
1
1
  import { ForkRelay } from "../adapters/fork-relay.mjs";
2
- import * as _$lit from "lit";
3
2
  import { LitElement } from "lit";
4
3
 
5
4
  //#region src/ui/dev-wallet-fork-panel.d.ts
6
5
  declare class DevWalletForkPanel extends LitElement {
7
6
  #private;
8
- static styles: (_$lit.CSSResult | _$lit.CSSResult[])[];
7
+ static styles: (import("lit").CSSResult | import("lit").CSSResult[])[];
9
8
  /** Fork relay client. Provided by the parent (`wallet-controller`)
10
9
  * when the active manifest exposes a forked stack. When `null`,
11
10
  * the panel renders an empty state — the tab gating in the
@@ -27,7 +26,7 @@ declare class DevWalletForkPanel extends LitElement {
27
26
  connectedCallback(): void;
28
27
  disconnectedCallback(): void;
29
28
  willUpdate(changed: Map<string, unknown>): void;
30
- render(): _$lit.TemplateResult<1>;
29
+ render(): import("lit").TemplateResult<1>;
31
30
  /** Public hook for tests + external consumers (e.g. signing-modal
32
31
  * wants to re-read slots after a transaction lands). Resolves once
33
32
  * both status + slots have refreshed. */
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-fork-panel.d.mts","names":[],"sources":["../../src/ui/dev-wallet-fork-panel.ts"],"mappings":";;;;;cA+Ba,kBAAA,SAA2B,UAAA;EAAA;SACvB,MAAA,GADe,KAAA,CACT,SAAA,GAAA,KAAA,CAAA,SAAA;EADV;;;;EA+KZ,KAAA,EAAO,SAAA;EAAA;;EAKP,QAAA;EAAA,QAGQ,OAAA;EAAA,QAGA,YAAA;EAAA,QAGA,cAAA;EAAA,QAGA,eAAA;EAAA,QAGA,YAAA;EAAA,QAGA,MAAA;EAAA,QAGA,WAAA;EAAA,QAGA,mBAAA;EAAA,QAGA,aAAA;EAAA,QAGA,qBAAA;EAIC,iBAAA,CAAA;EAMA,oBAAA,CAAA;EAKA,UAAA,CAAW,OAAA,EAAS,GAAA;EAYpB,MAAA,CAAA,GAZuB,KAAA,CAYjB,cAAA;EAhDP;;;EAyWF,OAAA,CAAA,GAAW,OAAA;AAAA;AAAA,QAKV,MAAA;EAAA,UACG,qBAAA;IACT,uBAAA,EAAyB,kBAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"dev-wallet-fork-panel.d.mts","names":[],"sources":["../../src/ui/dev-wallet-fork-panel.ts"],"mappings":";;;;cA+Ba,kBAAA,SAA2B,UAAA;EAAA;SACvB,MAAA,iBAAM,SAAA,iBAAA,SAAA;EADS;;;;EA+K/B,KAAA,EAAO,SAAA;EA/KgC;;EAoLvC,QAAA;EAAA,QAGQ,OAAA;EAAA,QAGA,YAAA;EAAA,QAGA,cAAA;EAAA,QAGA,eAAA;EAAA,QAGA,YAAA;EAAA,QAGA,MAAA;EAAA,QAGA,WAAA;EAAA,QAGA,mBAAA;EAAA,QAGA,aAAA;EAAA,QAGA,qBAAA;EAIC,iBAAA;EAMA,oBAAA;EAKA,UAAA,CAAW,OAAA,EAAS,GAAA;EAYpB,MAAA,kBAAM,cAAA;EApCP;;;EA6VF,OAAA,IAAW,OAAA;AAAA;AAAA,QAKV,MAAA;EAAA,UACG,qBAAA;IACT,uBAAA,EAAyB,kBAAkB;EAAA;AAAA"}
@@ -1,6 +1,6 @@
1
1
  import { actionButtonStyles, cardItemStyles, formInputStyles, inlineErrorStyles, listContainerStyles, monoTruncateStyles, sectionHeaderStyles, sharedStyles, stateStyles, subLabelStyles } from "./styles.mjs";
2
2
  import { formatAddress, getErrorMessage } from "./utils.mjs";
3
- import { __decorate } from "../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.mjs";
3
+ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.135.0/helpers/esm/decorate.mjs";
4
4
  import { LitElement, css, html, nothing } from "lit";
5
5
  import { customElement, property, state } from "lit/decorators.js";
6
6
  //#region src/ui/dev-wallet-fork-panel.ts
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-fork-panel.mjs","names":["#parseClock","#parseCheckpointCount","#startPolling","#refreshAll","#stopPolling","#renderStatus","#onClockInput","#onAdvanceClock","#onCheckpointInput","#onAdvanceCheckpoint","#renderSlots","#onToggleSlot","#pollTimer","#refreshStatus","#refreshSlots"],"sources":["../../src/ui/dev-wallet-fork-panel.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n//\n// Dev-wallet fork-controls panel. Renders when the active stack is in\n// `runtime === 'forked'` mode and surfaces a curated slice of the\n// sui-fork admin API to the operator: status read, advance-clock,\n// advance-checkpoint, and impersonation slot toggles.\n\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport type { ForkImpersonationSlot, ForkRelay, ForkStatus } from '../adapters/fork-relay.js';\nimport {\n\tactionButtonStyles,\n\tcardItemStyles,\n\tformInputStyles,\n\tinlineErrorStyles,\n\tlistContainerStyles,\n\tmonoTruncateStyles,\n\tsectionHeaderStyles,\n\tsubLabelStyles,\n\tsharedStyles,\n\tstateStyles,\n} from './styles.js';\nimport { formatAddress, getErrorMessage } from './utils.js';\n\n/** Default polling cadence for `GetStatus`. Slow on purpose — the panel\n * also refreshes after every action verb lands. */\nconst STATUS_POLL_MS = 4000;\n\n@customElement('dev-wallet-fork-panel')\nexport class DevWalletForkPanel extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tsectionHeaderStyles,\n\t\tactionButtonStyles,\n\t\tstateStyles,\n\t\tcardItemStyles,\n\t\tlistContainerStyles,\n\t\tformInputStyles,\n\t\tinlineErrorStyles,\n\t\tmonoTruncateStyles,\n\t\tsubLabelStyles,\n\t\tcss`\n\t\t\t.section {\n\t\t\t\tmargin-bottom: 18px;\n\t\t\t}\n\n\t\t\t.section:last-child {\n\t\t\t\tmargin-bottom: 0;\n\t\t\t}\n\n\t\t\t.status-grid {\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-columns: max-content 1fr;\n\t\t\t\tcolumn-gap: 12px;\n\t\t\t\trow-gap: 6px;\n\t\t\t\tfont-size: 12px;\n\t\t\t\tpadding: 10px 12px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-md);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tbackground: var(--dev-wallet-secondary);\n\t\t\t}\n\n\t\t\t.status-label {\n\t\t\t\tfont-size: 10px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\talign-self: center;\n\t\t\t}\n\n\t\t\t.status-value {\n\t\t\t\tfont-family: var(--dev-wallet-font-mono);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tword-break: break-all;\n\t\t\t}\n\n\t\t\t.status-value.dim {\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t}\n\n\t\t\t.action-row {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 6px;\n\t\t\t\talign-items: stretch;\n\t\t\t}\n\n\t\t\t.action-input {\n\t\t\t\tflex: 1;\n\t\t\t\tmin-width: 0;\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-family: var(--dev-wallet-font-mono);\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tbackground: var(--dev-wallet-background);\n\t\t\t}\n\n\t\t\t.btn-action {\n\t\t\t\tmin-width: 96px;\n\t\t\t\tpadding: 0 14px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t\tbackground: var(--dev-wallet-primary);\n\t\t\t\tcolor: var(--dev-wallet-primary-foreground);\n\t\t\t\ttransition: background-color 0.15s;\n\t\t\t}\n\n\t\t\t.btn-action:hover:not(:disabled) {\n\t\t\t\tbackground: oklab(from var(--dev-wallet-primary) calc(l - 0.03) a b);\n\t\t\t}\n\n\t\t\t.btn-action:disabled {\n\t\t\t\topacity: 0.55;\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\n\t\t\t.slot-list {\n\t\t\t\tgap: 6px;\n\t\t\t}\n\n\t\t\t.slot-item {\n\t\t\t\tgap: 8px;\n\t\t\t\tpadding: 8px 10px;\n\t\t\t}\n\n\t\t\t.slot-meta {\n\t\t\t\tflex: 1;\n\t\t\t\tmin-width: 0;\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tgap: 2px;\n\t\t\t}\n\n\t\t\t.slot-label {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t}\n\n\t\t\t.slot-address {\n\t\t\t\tfont-size: 10px;\n\t\t\t}\n\n\t\t\t.slot-toggle {\n\t\t\t\tpadding: 4px 10px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-xs);\n\t\t\t\tbackground: var(--dev-wallet-background);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t}\n\n\t\t\t.slot-toggle.on {\n\t\t\t\tbackground: var(--dev-wallet-primary);\n\t\t\t\tcolor: var(--dev-wallet-primary-foreground);\n\t\t\t\tborder-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.slot-toggle:hover:not(:disabled) {\n\t\t\t\tfilter: brightness(1.05);\n\t\t\t}\n\n\t\t\t.slot-toggle:disabled {\n\t\t\t\topacity: 0.55;\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\n\t\t\t.helper-text {\n\t\t\t\tfont-size: 11px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tmargin-top: 6px;\n\t\t\t\tline-height: 1.4;\n\t\t\t}\n\n\t\t\t.fork-banner {\n\t\t\t\tpadding: 8px 12px;\n\t\t\t\tbackground: rgba(234, 179, 8, 0.12);\n\t\t\t\tborder: 1px solid rgba(234, 179, 8, 0.35);\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tfont-size: 11px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tline-height: 1.4;\n\t\t\t\tmargin-bottom: 14px;\n\t\t\t}\n\n\t\t\t.fork-banner strong {\n\t\t\t\tcolor: #92400e;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t}\n\n\t\t\t.inline-error {\n\t\t\t\tfont-size: 11px;\n\t\t\t\tmargin-top: 6px;\n\t\t\t}\n\t\t`,\n\t];\n\n\t/** Fork relay client. Provided by the parent (`wallet-controller`)\n\t * when the active manifest exposes a forked stack. When `null`,\n\t * the panel renders an empty state — the tab gating in the\n\t * controller normally prevents this. */\n\t@property({ attribute: false })\n\trelay: ForkRelay | null = null;\n\n\t/** Upstream label (`'mainnet'`, `'testnet'`, …). Surfaced in the\n\t * banner so the operator can't misread which chain the fork forked. */\n\t@property({ type: String })\n\tupstream = '';\n\n\t@state()\n\tprivate _status: ForkStatus | null = null;\n\n\t@state()\n\tprivate _statusError: string | null = null;\n\n\t@state()\n\tprivate _statusLoading = false;\n\n\t@state()\n\tprivate _actionInFlight: 'advance-clock' | 'advance-checkpoint' | null = null;\n\n\t@state()\n\tprivate _actionError: string | null = null;\n\n\t@state()\n\tprivate _slots: ForkImpersonationSlot[] = [];\n\n\t@state()\n\tprivate _slotsError: string | null = null;\n\n\t@state()\n\tprivate _slotToggleInFlight: string | null = null;\n\n\t@state()\n\tprivate _clockInputMs = '1000';\n\n\t@state()\n\tprivate _checkpointInputCount = '1';\n\n\t#pollTimer: ReturnType<typeof setInterval> | null = null;\n\n\toverride connectedCallback() {\n\t\tsuper.connectedCallback();\n\t\tthis.#startPolling();\n\t\tvoid this.#refreshAll();\n\t}\n\n\toverride disconnectedCallback() {\n\t\tsuper.disconnectedCallback();\n\t\tthis.#stopPolling();\n\t}\n\n\toverride willUpdate(changed: Map<string, unknown>) {\n\t\tif (changed.has('relay')) {\n\t\t\tthis._status = null;\n\t\t\tthis._statusError = null;\n\t\t\tthis._slots = [];\n\t\t\tthis._slotsError = null;\n\t\t\tif (this.relay !== null) {\n\t\t\t\tvoid this.#refreshAll();\n\t\t\t}\n\t\t}\n\t}\n\n\toverride render() {\n\t\tif (!this.relay) {\n\t\t\treturn html`<div class=\"empty-state\" part=\"empty-state\">\n\t\t\t\tFork controls require a devstack wallet-app connection.\n\t\t\t</div>`;\n\t\t}\n\n\t\tconst upstream = this._status?.upstream ?? this.upstream;\n\t\treturn html`\n\t\t\t<div class=\"fork-banner\" part=\"fork-banner\">\n\t\t\t\t<strong>Fork mode:</strong> changes here only affect the local\n\t\t\t\t${upstream ? html`<em>${upstream}</em>` : 'forked'} sui-fork stack — no real funds at risk.\n\t\t\t</div>\n\n\t\t\t<div class=\"section\">\n\t\t\t\t<div class=\"section-header\">Status</div>\n\t\t\t\t${this.#renderStatus()}\n\t\t\t</div>\n\n\t\t\t<div class=\"section\">\n\t\t\t\t<div class=\"section-header\">Advance clock</div>\n\t\t\t\t<div class=\"action-row\">\n\t\t\t\t\t<input\n\t\t\t\t\t\tclass=\"action-input\"\n\t\t\t\t\t\tpart=\"advance-clock-input\"\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tmin=\"1\"\n\t\t\t\t\t\tstep=\"1\"\n\t\t\t\t\t\taria-label=\"Advance clock duration in ms\"\n\t\t\t\t\t\t.value=${this._clockInputMs}\n\t\t\t\t\t\t@input=${this.#onClockInput}\n\t\t\t\t\t\t?disabled=${this._actionInFlight !== null}\n\t\t\t\t\t/>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"btn-action\"\n\t\t\t\t\t\tpart=\"advance-clock-button\"\n\t\t\t\t\t\t?disabled=${this._actionInFlight !== null || !this.#parseClock()}\n\t\t\t\t\t\t@click=${this.#onAdvanceClock}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this._actionInFlight === 'advance-clock' ? 'Advancing…' : '+ ms'}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"helper-text\">\n\t\t\t\t\tAdvances <code>clock::timestamp_ms()</code> by the given milliseconds.\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class=\"section\">\n\t\t\t\t<div class=\"section-header\">Advance checkpoints</div>\n\t\t\t\t<div class=\"action-row\">\n\t\t\t\t\t<input\n\t\t\t\t\t\tclass=\"action-input\"\n\t\t\t\t\t\tpart=\"advance-checkpoint-input\"\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tmin=\"1\"\n\t\t\t\t\t\tstep=\"1\"\n\t\t\t\t\t\taria-label=\"Advance checkpoint count\"\n\t\t\t\t\t\t.value=${this._checkpointInputCount}\n\t\t\t\t\t\t@input=${this.#onCheckpointInput}\n\t\t\t\t\t\t?disabled=${this._actionInFlight !== null}\n\t\t\t\t\t/>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"btn-action\"\n\t\t\t\t\t\tpart=\"advance-checkpoint-button\"\n\t\t\t\t\t\t?disabled=${this._actionInFlight !== null || !this.#parseCheckpointCount()}\n\t\t\t\t\t\t@click=${this.#onAdvanceCheckpoint}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this._actionInFlight === 'advance-checkpoint' ? 'Sealing…' : '+ ckpt'}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"helper-text\">\n\t\t\t\t\tSeals pending transactions into <code>n</code> new checkpoints.\n\t\t\t\t</div>\n\t\t\t\t${this._actionError\n\t\t\t\t\t? html`<div class=\"inline-error\" part=\"action-error\">${this._actionError}</div>`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\n\t\t\t<div class=\"section\">\n\t\t\t\t<div class=\"section-header\">Impersonation slots</div>\n\t\t\t\t${this.#renderSlots()}\n\t\t\t</div>\n\t\t`;\n\t}\n\n\t#renderStatus() {\n\t\tif (this._statusLoading && this._status === null) {\n\t\t\treturn html`<div class=\"loading\" part=\"status-loading\">Loading fork status…</div>`;\n\t\t}\n\t\tif (this._statusError) {\n\t\t\treturn html` <div class=\"error-state\" part=\"status-error\">${this._statusError}</div> `;\n\t\t}\n\t\tif (!this._status) {\n\t\t\treturn html`<div class=\"empty-state\" part=\"status-empty\">Fork status unavailable.</div>`;\n\t\t}\n\t\tconst { checkpoint, clockMs, autoTickMs } = this._status;\n\t\tconst clockIso = (() => {\n\t\t\ttry {\n\t\t\t\treturn new Date(Number(clockMs)).toISOString();\n\t\t\t} catch {\n\t\t\t\treturn '—';\n\t\t\t}\n\t\t})();\n\t\treturn html`\n\t\t\t<div class=\"status-grid\" part=\"status-grid\">\n\t\t\t\t<span class=\"status-label\">Checkpoint</span>\n\t\t\t\t<span class=\"status-value\" part=\"status-checkpoint\">${checkpoint.toString()}</span>\n\t\t\t\t<span class=\"status-label\">Clock</span>\n\t\t\t\t<span class=\"status-value\" part=\"status-clock\">${clockMs.toString()}</span>\n\t\t\t\t<span class=\"status-label\">UTC</span>\n\t\t\t\t<span class=\"status-value dim\" part=\"status-clock-iso\">${clockIso}</span>\n\t\t\t\t<span class=\"status-label\">Auto-tick</span>\n\t\t\t\t<span class=\"status-value dim\" part=\"status-auto-tick\">\n\t\t\t\t\t${autoTickMs ? `${autoTickMs}ms` : 'off'}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t`;\n\t}\n\n\t#renderSlots() {\n\t\tif (this._slotsError) {\n\t\t\treturn html`<div class=\"error-state\" part=\"slots-error\">${this._slotsError}</div>`;\n\t\t}\n\t\tif (this._slots.length === 0) {\n\t\t\treturn html`<div class=\"empty-state\" part=\"slots-empty\">\n\t\t\t\tNo impersonation slots configured. Add addresses via\n\t\t\t\t<code>Sui({fork:{impersonate:[…]}})</code>.\n\t\t\t</div>`;\n\t\t}\n\t\treturn html`\n\t\t\t<div class=\"slot-list\" part=\"slot-list\">\n\t\t\t\t${this._slots.map((slot) => {\n\t\t\t\t\tconst inFlight = this._slotToggleInFlight === slot.address;\n\t\t\t\t\treturn html`\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=${slot.active ? 'slot-item active' : 'slot-item'}\n\t\t\t\t\t\t\tpart=${slot.active ? 'slot-item slot-item-active' : 'slot-item'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"slot-meta\">\n\t\t\t\t\t\t\t\t<span class=\"slot-label\">${slot.label ?? formatAddress(slot.address)}</span>\n\t\t\t\t\t\t\t\t<span class=\"slot-address\">${formatAddress(slot.address)}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=${slot.active ? 'slot-toggle on' : 'slot-toggle'}\n\t\t\t\t\t\t\t\tpart=\"slot-toggle\"\n\t\t\t\t\t\t\t\taria-pressed=${slot.active}\n\t\t\t\t\t\t\t\t?disabled=${inFlight}\n\t\t\t\t\t\t\t\t@click=${() => this.#onToggleSlot(slot)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t${inFlight ? '…' : slot.active ? 'On' : 'Off'}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`;\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t<div class=\"helper-text\">\n\t\t\t\tWhen <strong>On</strong>, user-driven tx signing for the matching account routes through\n\t\t\t\t<code>executeImpersonated</code> instead of a real signature.\n\t\t\t</div>\n\t\t`;\n\t}\n\n\t// ── Input bindings ────────────────────────────────────────────────────\n\n\t#onClockInput = (e: Event) => {\n\t\tthis._clockInputMs = (e.target as HTMLInputElement).value;\n\t};\n\n\t#onCheckpointInput = (e: Event) => {\n\t\tthis._checkpointInputCount = (e.target as HTMLInputElement).value;\n\t};\n\n\t#parseClock(): number | null {\n\t\tconst n = Number(this._clockInputMs);\n\t\tif (!Number.isFinite(n) || n <= 0 || !Number.isInteger(n)) return null;\n\t\treturn n;\n\t}\n\n\t#parseCheckpointCount(): number | null {\n\t\tconst n = Number(this._checkpointInputCount);\n\t\tif (!Number.isFinite(n) || n <= 0 || !Number.isInteger(n)) return null;\n\t\treturn n;\n\t}\n\n\t// ── Action handlers ───────────────────────────────────────────────────\n\n\t#onAdvanceClock = async () => {\n\t\tconst ms = this.#parseClock();\n\t\tif (ms === null || !this.relay) return;\n\t\tthis._actionInFlight = 'advance-clock';\n\t\tthis._actionError = null;\n\t\ttry {\n\t\t\tconst result = await this.relay.advanceClock(ms);\n\t\t\tif (result.ok) {\n\t\t\t\tthis._status = result.value;\n\t\t\t} else {\n\t\t\t\tthis._actionError = result.error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis._actionError = getErrorMessage(error, 'advance-clock failed');\n\t\t} finally {\n\t\t\tthis._actionInFlight = null;\n\t\t}\n\t};\n\n\t#onAdvanceCheckpoint = async () => {\n\t\tconst count = this.#parseCheckpointCount();\n\t\tif (count === null || !this.relay) return;\n\t\tthis._actionInFlight = 'advance-checkpoint';\n\t\tthis._actionError = null;\n\t\ttry {\n\t\t\tconst result = await this.relay.advanceCheckpoint(count);\n\t\t\tif (result.ok) {\n\t\t\t\tthis._status = result.value;\n\t\t\t} else {\n\t\t\t\tthis._actionError = result.error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis._actionError = getErrorMessage(error, 'advance-checkpoint failed');\n\t\t} finally {\n\t\t\tthis._actionInFlight = null;\n\t\t}\n\t};\n\n\t#onToggleSlot = async (slot: ForkImpersonationSlot) => {\n\t\tif (!this.relay || this._slotToggleInFlight !== null) return;\n\t\tthis._slotToggleInFlight = slot.address;\n\t\tthis._slotsError = null;\n\t\ttry {\n\t\t\tconst result = await this.relay.setImpersonation(slot.address, !slot.active);\n\t\t\tif (result.ok) {\n\t\t\t\tthis._slots = result.value;\n\t\t\t\t// Notify dapp-level integrations (`wallet-controller`) so the\n\t\t\t\t// signing modal flips its impersonation footnote in lock-step\n\t\t\t\t// with the toggle. Composed/bubbling so the host element sees\n\t\t\t\t// it regardless of where the panel was mounted.\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent('fork-impersonation-changed', {\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\taddress: slot.address,\n\t\t\t\t\t\t\tactive: !slot.active,\n\t\t\t\t\t\t\tslots: result.value,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis._slotsError = result.error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis._slotsError = getErrorMessage(error, 'toggle failed');\n\t\t} finally {\n\t\t\tthis._slotToggleInFlight = null;\n\t\t}\n\t};\n\n\t// ── Polling ───────────────────────────────────────────────────────────\n\n\t#startPolling() {\n\t\tthis.#stopPolling();\n\t\tthis.#pollTimer = setInterval(() => {\n\t\t\tvoid this.#refreshStatus();\n\t\t}, STATUS_POLL_MS);\n\t}\n\n\t#stopPolling() {\n\t\tif (this.#pollTimer !== null) {\n\t\t\tclearInterval(this.#pollTimer);\n\t\t\tthis.#pollTimer = null;\n\t\t}\n\t}\n\n\tasync #refreshAll(): Promise<void> {\n\t\tawait Promise.all([this.#refreshStatus(), this.#refreshSlots()]);\n\t}\n\n\tasync #refreshStatus(): Promise<void> {\n\t\tif (!this.relay) return;\n\t\tthis._statusLoading = true;\n\t\ttry {\n\t\t\tconst result = await this.relay.getStatus();\n\t\t\tif (result.ok) {\n\t\t\t\tthis._status = result.value;\n\t\t\t\tthis._statusError = null;\n\t\t\t} else {\n\t\t\t\tthis._statusError = result.error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis._statusError = getErrorMessage(error, 'status refresh failed');\n\t\t} finally {\n\t\t\tthis._statusLoading = false;\n\t\t}\n\t}\n\n\tasync #refreshSlots(): Promise<void> {\n\t\tif (!this.relay) return;\n\t\ttry {\n\t\t\tconst result = await this.relay.listImpersonations();\n\t\t\tif (result.ok) {\n\t\t\t\tthis._slots = result.value;\n\t\t\t\tthis._slotsError = null;\n\t\t\t} else {\n\t\t\t\tthis._slotsError = result.error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis._slotsError = getErrorMessage(error, 'slot refresh failed');\n\t\t}\n\t}\n\n\t/** Public hook for tests + external consumers (e.g. signing-modal\n\t * wants to re-read slots after a transaction lands). Resolves once\n\t * both status + slots have refreshed. */\n\tasync refresh(): Promise<void> {\n\t\tawait this.#refreshAll();\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-fork-panel': DevWalletForkPanel;\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dev-wallet-fork-panel.mjs","names":["#parseClock","#parseCheckpointCount","#startPolling","#refreshAll","#stopPolling","#renderStatus","#onClockInput","#onAdvanceClock","#onCheckpointInput","#onAdvanceCheckpoint","#renderSlots","#onToggleSlot","#pollTimer","#refreshStatus","#refreshSlots"],"sources":["../../src/ui/dev-wallet-fork-panel.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n//\n// Dev-wallet fork-controls panel. Renders when the active stack is in\n// `runtime === 'forked'` mode and surfaces a curated slice of the\n// sui-fork admin API to the operator: status read, advance-clock,\n// advance-checkpoint, and impersonation slot toggles.\n\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport type { ForkImpersonationSlot, ForkRelay, ForkStatus } from '../adapters/fork-relay.js';\nimport {\n\tactionButtonStyles,\n\tcardItemStyles,\n\tformInputStyles,\n\tinlineErrorStyles,\n\tlistContainerStyles,\n\tmonoTruncateStyles,\n\tsectionHeaderStyles,\n\tsubLabelStyles,\n\tsharedStyles,\n\tstateStyles,\n} from './styles.js';\nimport { formatAddress, getErrorMessage } from './utils.js';\n\n/** Default polling cadence for `GetStatus`. Slow on purpose — the panel\n * also refreshes after every action verb lands. */\nconst STATUS_POLL_MS = 4000;\n\n@customElement('dev-wallet-fork-panel')\nexport class DevWalletForkPanel extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tsectionHeaderStyles,\n\t\tactionButtonStyles,\n\t\tstateStyles,\n\t\tcardItemStyles,\n\t\tlistContainerStyles,\n\t\tformInputStyles,\n\t\tinlineErrorStyles,\n\t\tmonoTruncateStyles,\n\t\tsubLabelStyles,\n\t\tcss`\n\t\t\t.section {\n\t\t\t\tmargin-bottom: 18px;\n\t\t\t}\n\n\t\t\t.section:last-child {\n\t\t\t\tmargin-bottom: 0;\n\t\t\t}\n\n\t\t\t.status-grid {\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-columns: max-content 1fr;\n\t\t\t\tcolumn-gap: 12px;\n\t\t\t\trow-gap: 6px;\n\t\t\t\tfont-size: 12px;\n\t\t\t\tpadding: 10px 12px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-md);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tbackground: var(--dev-wallet-secondary);\n\t\t\t}\n\n\t\t\t.status-label {\n\t\t\t\tfont-size: 10px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\talign-self: center;\n\t\t\t}\n\n\t\t\t.status-value {\n\t\t\t\tfont-family: var(--dev-wallet-font-mono);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tword-break: break-all;\n\t\t\t}\n\n\t\t\t.status-value.dim {\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t}\n\n\t\t\t.action-row {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 6px;\n\t\t\t\talign-items: stretch;\n\t\t\t}\n\n\t\t\t.action-input {\n\t\t\t\tflex: 1;\n\t\t\t\tmin-width: 0;\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-family: var(--dev-wallet-font-mono);\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tbackground: var(--dev-wallet-background);\n\t\t\t}\n\n\t\t\t.btn-action {\n\t\t\t\tmin-width: 96px;\n\t\t\t\tpadding: 0 14px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t\tbackground: var(--dev-wallet-primary);\n\t\t\t\tcolor: var(--dev-wallet-primary-foreground);\n\t\t\t\ttransition: background-color 0.15s;\n\t\t\t}\n\n\t\t\t.btn-action:hover:not(:disabled) {\n\t\t\t\tbackground: oklab(from var(--dev-wallet-primary) calc(l - 0.03) a b);\n\t\t\t}\n\n\t\t\t.btn-action:disabled {\n\t\t\t\topacity: 0.55;\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\n\t\t\t.slot-list {\n\t\t\t\tgap: 6px;\n\t\t\t}\n\n\t\t\t.slot-item {\n\t\t\t\tgap: 8px;\n\t\t\t\tpadding: 8px 10px;\n\t\t\t}\n\n\t\t\t.slot-meta {\n\t\t\t\tflex: 1;\n\t\t\t\tmin-width: 0;\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tgap: 2px;\n\t\t\t}\n\n\t\t\t.slot-label {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t}\n\n\t\t\t.slot-address {\n\t\t\t\tfont-size: 10px;\n\t\t\t}\n\n\t\t\t.slot-toggle {\n\t\t\t\tpadding: 4px 10px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-xs);\n\t\t\t\tbackground: var(--dev-wallet-background);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t}\n\n\t\t\t.slot-toggle.on {\n\t\t\t\tbackground: var(--dev-wallet-primary);\n\t\t\t\tcolor: var(--dev-wallet-primary-foreground);\n\t\t\t\tborder-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.slot-toggle:hover:not(:disabled) {\n\t\t\t\tfilter: brightness(1.05);\n\t\t\t}\n\n\t\t\t.slot-toggle:disabled {\n\t\t\t\topacity: 0.55;\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\n\t\t\t.helper-text {\n\t\t\t\tfont-size: 11px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tmargin-top: 6px;\n\t\t\t\tline-height: 1.4;\n\t\t\t}\n\n\t\t\t.fork-banner {\n\t\t\t\tpadding: 8px 12px;\n\t\t\t\tbackground: rgba(234, 179, 8, 0.12);\n\t\t\t\tborder: 1px solid rgba(234, 179, 8, 0.35);\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tfont-size: 11px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tline-height: 1.4;\n\t\t\t\tmargin-bottom: 14px;\n\t\t\t}\n\n\t\t\t.fork-banner strong {\n\t\t\t\tcolor: #92400e;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t}\n\n\t\t\t.inline-error {\n\t\t\t\tfont-size: 11px;\n\t\t\t\tmargin-top: 6px;\n\t\t\t}\n\t\t`,\n\t];\n\n\t/** Fork relay client. Provided by the parent (`wallet-controller`)\n\t * when the active manifest exposes a forked stack. When `null`,\n\t * the panel renders an empty state — the tab gating in the\n\t * controller normally prevents this. */\n\t@property({ attribute: false })\n\trelay: ForkRelay | null = null;\n\n\t/** Upstream label (`'mainnet'`, `'testnet'`, …). Surfaced in the\n\t * banner so the operator can't misread which chain the fork forked. */\n\t@property({ type: String })\n\tupstream = '';\n\n\t@state()\n\tprivate _status: ForkStatus | null = null;\n\n\t@state()\n\tprivate _statusError: string | null = null;\n\n\t@state()\n\tprivate _statusLoading = false;\n\n\t@state()\n\tprivate _actionInFlight: 'advance-clock' | 'advance-checkpoint' | null = null;\n\n\t@state()\n\tprivate _actionError: string | null = null;\n\n\t@state()\n\tprivate _slots: ForkImpersonationSlot[] = [];\n\n\t@state()\n\tprivate _slotsError: string | null = null;\n\n\t@state()\n\tprivate _slotToggleInFlight: string | null = null;\n\n\t@state()\n\tprivate _clockInputMs = '1000';\n\n\t@state()\n\tprivate _checkpointInputCount = '1';\n\n\t#pollTimer: ReturnType<typeof setInterval> | null = null;\n\n\toverride connectedCallback() {\n\t\tsuper.connectedCallback();\n\t\tthis.#startPolling();\n\t\tvoid this.#refreshAll();\n\t}\n\n\toverride disconnectedCallback() {\n\t\tsuper.disconnectedCallback();\n\t\tthis.#stopPolling();\n\t}\n\n\toverride willUpdate(changed: Map<string, unknown>) {\n\t\tif (changed.has('relay')) {\n\t\t\tthis._status = null;\n\t\t\tthis._statusError = null;\n\t\t\tthis._slots = [];\n\t\t\tthis._slotsError = null;\n\t\t\tif (this.relay !== null) {\n\t\t\t\tvoid this.#refreshAll();\n\t\t\t}\n\t\t}\n\t}\n\n\toverride render() {\n\t\tif (!this.relay) {\n\t\t\treturn html`<div class=\"empty-state\" part=\"empty-state\">\n\t\t\t\tFork controls require a devstack wallet-app connection.\n\t\t\t</div>`;\n\t\t}\n\n\t\tconst upstream = this._status?.upstream ?? this.upstream;\n\t\treturn html`\n\t\t\t<div class=\"fork-banner\" part=\"fork-banner\">\n\t\t\t\t<strong>Fork mode:</strong> changes here only affect the local\n\t\t\t\t${upstream ? html`<em>${upstream}</em>` : 'forked'} sui-fork stack — no real funds at risk.\n\t\t\t</div>\n\n\t\t\t<div class=\"section\">\n\t\t\t\t<div class=\"section-header\">Status</div>\n\t\t\t\t${this.#renderStatus()}\n\t\t\t</div>\n\n\t\t\t<div class=\"section\">\n\t\t\t\t<div class=\"section-header\">Advance clock</div>\n\t\t\t\t<div class=\"action-row\">\n\t\t\t\t\t<input\n\t\t\t\t\t\tclass=\"action-input\"\n\t\t\t\t\t\tpart=\"advance-clock-input\"\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tmin=\"1\"\n\t\t\t\t\t\tstep=\"1\"\n\t\t\t\t\t\taria-label=\"Advance clock duration in ms\"\n\t\t\t\t\t\t.value=${this._clockInputMs}\n\t\t\t\t\t\t@input=${this.#onClockInput}\n\t\t\t\t\t\t?disabled=${this._actionInFlight !== null}\n\t\t\t\t\t/>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"btn-action\"\n\t\t\t\t\t\tpart=\"advance-clock-button\"\n\t\t\t\t\t\t?disabled=${this._actionInFlight !== null || !this.#parseClock()}\n\t\t\t\t\t\t@click=${this.#onAdvanceClock}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this._actionInFlight === 'advance-clock' ? 'Advancing…' : '+ ms'}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"helper-text\">\n\t\t\t\t\tAdvances <code>clock::timestamp_ms()</code> by the given milliseconds.\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class=\"section\">\n\t\t\t\t<div class=\"section-header\">Advance checkpoints</div>\n\t\t\t\t<div class=\"action-row\">\n\t\t\t\t\t<input\n\t\t\t\t\t\tclass=\"action-input\"\n\t\t\t\t\t\tpart=\"advance-checkpoint-input\"\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tmin=\"1\"\n\t\t\t\t\t\tstep=\"1\"\n\t\t\t\t\t\taria-label=\"Advance checkpoint count\"\n\t\t\t\t\t\t.value=${this._checkpointInputCount}\n\t\t\t\t\t\t@input=${this.#onCheckpointInput}\n\t\t\t\t\t\t?disabled=${this._actionInFlight !== null}\n\t\t\t\t\t/>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"btn-action\"\n\t\t\t\t\t\tpart=\"advance-checkpoint-button\"\n\t\t\t\t\t\t?disabled=${this._actionInFlight !== null || !this.#parseCheckpointCount()}\n\t\t\t\t\t\t@click=${this.#onAdvanceCheckpoint}\n\t\t\t\t\t>\n\t\t\t\t\t\t${this._actionInFlight === 'advance-checkpoint' ? 'Sealing…' : '+ ckpt'}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"helper-text\">\n\t\t\t\t\tSeals pending transactions into <code>n</code> new checkpoints.\n\t\t\t\t</div>\n\t\t\t\t${this._actionError\n\t\t\t\t\t? html`<div class=\"inline-error\" part=\"action-error\">${this._actionError}</div>`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\n\t\t\t<div class=\"section\">\n\t\t\t\t<div class=\"section-header\">Impersonation slots</div>\n\t\t\t\t${this.#renderSlots()}\n\t\t\t</div>\n\t\t`;\n\t}\n\n\t#renderStatus() {\n\t\tif (this._statusLoading && this._status === null) {\n\t\t\treturn html`<div class=\"loading\" part=\"status-loading\">Loading fork status…</div>`;\n\t\t}\n\t\tif (this._statusError) {\n\t\t\treturn html` <div class=\"error-state\" part=\"status-error\">${this._statusError}</div> `;\n\t\t}\n\t\tif (!this._status) {\n\t\t\treturn html`<div class=\"empty-state\" part=\"status-empty\">Fork status unavailable.</div>`;\n\t\t}\n\t\tconst { checkpoint, clockMs, autoTickMs } = this._status;\n\t\tconst clockIso = (() => {\n\t\t\ttry {\n\t\t\t\treturn new Date(Number(clockMs)).toISOString();\n\t\t\t} catch {\n\t\t\t\treturn '—';\n\t\t\t}\n\t\t})();\n\t\treturn html`\n\t\t\t<div class=\"status-grid\" part=\"status-grid\">\n\t\t\t\t<span class=\"status-label\">Checkpoint</span>\n\t\t\t\t<span class=\"status-value\" part=\"status-checkpoint\">${checkpoint.toString()}</span>\n\t\t\t\t<span class=\"status-label\">Clock</span>\n\t\t\t\t<span class=\"status-value\" part=\"status-clock\">${clockMs.toString()}</span>\n\t\t\t\t<span class=\"status-label\">UTC</span>\n\t\t\t\t<span class=\"status-value dim\" part=\"status-clock-iso\">${clockIso}</span>\n\t\t\t\t<span class=\"status-label\">Auto-tick</span>\n\t\t\t\t<span class=\"status-value dim\" part=\"status-auto-tick\">\n\t\t\t\t\t${autoTickMs ? `${autoTickMs}ms` : 'off'}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t`;\n\t}\n\n\t#renderSlots() {\n\t\tif (this._slotsError) {\n\t\t\treturn html`<div class=\"error-state\" part=\"slots-error\">${this._slotsError}</div>`;\n\t\t}\n\t\tif (this._slots.length === 0) {\n\t\t\treturn html`<div class=\"empty-state\" part=\"slots-empty\">\n\t\t\t\tNo impersonation slots configured. Add addresses via\n\t\t\t\t<code>Sui({fork:{impersonate:[…]}})</code>.\n\t\t\t</div>`;\n\t\t}\n\t\treturn html`\n\t\t\t<div class=\"slot-list\" part=\"slot-list\">\n\t\t\t\t${this._slots.map((slot) => {\n\t\t\t\t\tconst inFlight = this._slotToggleInFlight === slot.address;\n\t\t\t\t\treturn html`\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=${slot.active ? 'slot-item active' : 'slot-item'}\n\t\t\t\t\t\t\tpart=${slot.active ? 'slot-item slot-item-active' : 'slot-item'}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"slot-meta\">\n\t\t\t\t\t\t\t\t<span class=\"slot-label\">${slot.label ?? formatAddress(slot.address)}</span>\n\t\t\t\t\t\t\t\t<span class=\"slot-address\">${formatAddress(slot.address)}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=${slot.active ? 'slot-toggle on' : 'slot-toggle'}\n\t\t\t\t\t\t\t\tpart=\"slot-toggle\"\n\t\t\t\t\t\t\t\taria-pressed=${slot.active}\n\t\t\t\t\t\t\t\t?disabled=${inFlight}\n\t\t\t\t\t\t\t\t@click=${() => this.#onToggleSlot(slot)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t${inFlight ? '…' : slot.active ? 'On' : 'Off'}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`;\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t<div class=\"helper-text\">\n\t\t\t\tWhen <strong>On</strong>, user-driven tx signing for the matching account routes through\n\t\t\t\t<code>executeImpersonated</code> instead of a real signature.\n\t\t\t</div>\n\t\t`;\n\t}\n\n\t// ── Input bindings ────────────────────────────────────────────────────\n\n\t#onClockInput = (e: Event) => {\n\t\tthis._clockInputMs = (e.target as HTMLInputElement).value;\n\t};\n\n\t#onCheckpointInput = (e: Event) => {\n\t\tthis._checkpointInputCount = (e.target as HTMLInputElement).value;\n\t};\n\n\t#parseClock(): number | null {\n\t\tconst n = Number(this._clockInputMs);\n\t\tif (!Number.isFinite(n) || n <= 0 || !Number.isInteger(n)) return null;\n\t\treturn n;\n\t}\n\n\t#parseCheckpointCount(): number | null {\n\t\tconst n = Number(this._checkpointInputCount);\n\t\tif (!Number.isFinite(n) || n <= 0 || !Number.isInteger(n)) return null;\n\t\treturn n;\n\t}\n\n\t// ── Action handlers ───────────────────────────────────────────────────\n\n\t#onAdvanceClock = async () => {\n\t\tconst ms = this.#parseClock();\n\t\tif (ms === null || !this.relay) return;\n\t\tthis._actionInFlight = 'advance-clock';\n\t\tthis._actionError = null;\n\t\ttry {\n\t\t\tconst result = await this.relay.advanceClock(ms);\n\t\t\tif (result.ok) {\n\t\t\t\tthis._status = result.value;\n\t\t\t} else {\n\t\t\t\tthis._actionError = result.error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis._actionError = getErrorMessage(error, 'advance-clock failed');\n\t\t} finally {\n\t\t\tthis._actionInFlight = null;\n\t\t}\n\t};\n\n\t#onAdvanceCheckpoint = async () => {\n\t\tconst count = this.#parseCheckpointCount();\n\t\tif (count === null || !this.relay) return;\n\t\tthis._actionInFlight = 'advance-checkpoint';\n\t\tthis._actionError = null;\n\t\ttry {\n\t\t\tconst result = await this.relay.advanceCheckpoint(count);\n\t\t\tif (result.ok) {\n\t\t\t\tthis._status = result.value;\n\t\t\t} else {\n\t\t\t\tthis._actionError = result.error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis._actionError = getErrorMessage(error, 'advance-checkpoint failed');\n\t\t} finally {\n\t\t\tthis._actionInFlight = null;\n\t\t}\n\t};\n\n\t#onToggleSlot = async (slot: ForkImpersonationSlot) => {\n\t\tif (!this.relay || this._slotToggleInFlight !== null) return;\n\t\tthis._slotToggleInFlight = slot.address;\n\t\tthis._slotsError = null;\n\t\ttry {\n\t\t\tconst result = await this.relay.setImpersonation(slot.address, !slot.active);\n\t\t\tif (result.ok) {\n\t\t\t\tthis._slots = result.value;\n\t\t\t\t// Notify dapp-level integrations (`wallet-controller`) so the\n\t\t\t\t// signing modal flips its impersonation footnote in lock-step\n\t\t\t\t// with the toggle. Composed/bubbling so the host element sees\n\t\t\t\t// it regardless of where the panel was mounted.\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent('fork-impersonation-changed', {\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\taddress: slot.address,\n\t\t\t\t\t\t\tactive: !slot.active,\n\t\t\t\t\t\t\tslots: result.value,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis._slotsError = result.error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis._slotsError = getErrorMessage(error, 'toggle failed');\n\t\t} finally {\n\t\t\tthis._slotToggleInFlight = null;\n\t\t}\n\t};\n\n\t// ── Polling ───────────────────────────────────────────────────────────\n\n\t#startPolling() {\n\t\tthis.#stopPolling();\n\t\tthis.#pollTimer = setInterval(() => {\n\t\t\tvoid this.#refreshStatus();\n\t\t}, STATUS_POLL_MS);\n\t}\n\n\t#stopPolling() {\n\t\tif (this.#pollTimer !== null) {\n\t\t\tclearInterval(this.#pollTimer);\n\t\t\tthis.#pollTimer = null;\n\t\t}\n\t}\n\n\tasync #refreshAll(): Promise<void> {\n\t\tawait Promise.all([this.#refreshStatus(), this.#refreshSlots()]);\n\t}\n\n\tasync #refreshStatus(): Promise<void> {\n\t\tif (!this.relay) return;\n\t\tthis._statusLoading = true;\n\t\ttry {\n\t\t\tconst result = await this.relay.getStatus();\n\t\t\tif (result.ok) {\n\t\t\t\tthis._status = result.value;\n\t\t\t\tthis._statusError = null;\n\t\t\t} else {\n\t\t\t\tthis._statusError = result.error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis._statusError = getErrorMessage(error, 'status refresh failed');\n\t\t} finally {\n\t\t\tthis._statusLoading = false;\n\t\t}\n\t}\n\n\tasync #refreshSlots(): Promise<void> {\n\t\tif (!this.relay) return;\n\t\ttry {\n\t\t\tconst result = await this.relay.listImpersonations();\n\t\t\tif (result.ok) {\n\t\t\t\tthis._slots = result.value;\n\t\t\t\tthis._slotsError = null;\n\t\t\t} else {\n\t\t\t\tthis._slotsError = result.error;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis._slotsError = getErrorMessage(error, 'slot refresh failed');\n\t\t}\n\t}\n\n\t/** Public hook for tests + external consumers (e.g. signing-modal\n\t * wants to re-read slots after a transaction lands). Resolves once\n\t * both status + slots have refreshed. */\n\tasync refresh(): Promise<void> {\n\t\tawait this.#refreshAll();\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-fork-panel': DevWalletForkPanel;\n\t}\n}\n"],"mappings":"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"}
@@ -1,14 +1,13 @@
1
- import * as _$lit from "lit";
2
1
  import { LitElement } from "lit";
3
2
 
4
3
  //#region src/ui/dev-wallet-network-badge.d.ts
5
4
  declare class DevWalletNetworkBadge extends LitElement {
6
5
  #private;
7
- static styles: (_$lit.CSSResult | _$lit.CSSResult[])[];
6
+ static styles: (import("lit").CSSResult | import("lit").CSSResult[])[];
8
7
  active: string;
9
8
  networks: string[];
10
9
  private _open;
11
- render(): _$lit.TemplateResult<1>;
10
+ render(): import("lit").TemplateResult<1>;
12
11
  }
13
12
  declare global {
14
13
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-network-badge.d.mts","names":[],"sources":["../../src/ui/dev-wallet-network-badge.ts"],"mappings":";;;;cAWa,qBAAA,SAA8B,UAAA;EAAA;SAC1B,MAAA,GADkB,KAAA,CACZ,SAAA,GAAA,KAAA,CAAA,SAAA;EA4EtB,MAAA;EAGA,QAAA;EAAA,QAGQ,KAAA;EAEC,MAAA,CAAA,GApFa,KAAA,CAoFP,cAAA;AAAA;AAAA,QAkER,MAAA;EAAA,UACG,qBAAA;IACT,0BAAA,EAA4B,qBAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"dev-wallet-network-badge.d.mts","names":[],"sources":["../../src/ui/dev-wallet-network-badge.ts"],"mappings":";;;cAWa,qBAAA,SAA8B,UAAU;EAAA;SACpC,MAAA,iBAAM,SAAA,iBAAA,SAAA;EA4EtB,MAAA;EAGA,QAAA;EAAA,QAGQ,KAAA;EAEC,MAAA,kBAAM,cAAA;AAAA;AAAA,QAkER,MAAA;EAAA,UACG,qBAAA;IACT,0BAAA,EAA4B,qBAAqB;EAAA;AAAA"}
@@ -1,6 +1,6 @@
1
1
  import { dropdownItemStyles, sharedStyles } from "./styles.mjs";
2
2
  import { NETWORK_COLORS, isForkNetwork } from "./utils.mjs";
3
- import { __decorate } from "../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.mjs";
3
+ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.135.0/helpers/esm/decorate.mjs";
4
4
  import "./dev-wallet-dropdown.mjs";
5
5
  import { LitElement, css, html } from "lit";
6
6
  import { customElement, property, state } from "lit/decorators.js";
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-network-badge.mjs","names":["#select"],"sources":["../../src/ui/dev-wallet-network-badge.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { dropdownItemStyles, sharedStyles } from './styles.js';\nimport { isForkNetwork, NETWORK_COLORS } from './utils.js';\nimport './dev-wallet-dropdown.js';\n\n@customElement('dev-wallet-network-badge')\nexport class DevWalletNetworkBadge extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tdropdownItemStyles,\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.badge {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 6px;\n\t\t\t\theight: 26px;\n\t\t\t\tpadding: 0 8px;\n\t\t\t\tborder-radius: 999px;\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tfont-family: var(--dev-wallet-font-mono);\n\t\t\t\tfont-size: 10.5px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-text-2);\n\t\t\t\tbackground: var(--dev-wallet-bg-3);\n\t\t\t\tcursor: pointer;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground 120ms,\n\t\t\t\t\tborder-color 120ms,\n\t\t\t\t\tcolor 120ms;\n\t\t\t}\n\n\t\t\t/* Phase 4 P4.17 — amber stripe + fork label when the\n\t\t\t active network is a *-fork variant. The stripe is\n\t\t\t diagonal-hatched so it survives dark + light themes\n\t\t\t without depending on a separate badge background. */\n\t\t\t.badge.fork {\n\t\t\t\tbackground-image: repeating-linear-gradient(\n\t\t\t\t\t45deg,\n\t\t\t\t\trgba(234, 179, 8, 0.18),\n\t\t\t\t\trgba(234, 179, 8, 0.18) 4px,\n\t\t\t\t\ttransparent 4px,\n\t\t\t\t\ttransparent 8px\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t.fork-tag {\n\t\t\t\tcolor: #92400e;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-bold);\n\t\t\t\tfont-size: 10px;\n\t\t\t\tmargin-left: 4px;\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\tletter-spacing: 0.5px;\n\t\t\t}\n\n\t\t\t.badge:hover {\n\t\t\t\tbackground: var(--dev-wallet-bg-4);\n\t\t\t\tborder-color: var(--dev-wallet-border-strong);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.dot {\n\t\t\t\twidth: 6px;\n\t\t\t\theight: 6px;\n\t\t\t\tborder-radius: 50%;\n\t\t\t}\n\n\t\t\t.chevron {\n\t\t\t\twidth: 10px;\n\t\t\t\theight: 10px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t}\n\n\t\t\t.dropdown-item {\n\t\t\t\tpadding: 8px 12px;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ type: String })\n\tactive = '';\n\n\t@property({ attribute: false })\n\tnetworks: string[] = [];\n\n\t@state()\n\tprivate _open = false;\n\n\toverride render() {\n\t\tconst color = NETWORK_COLORS[this.active] ?? NETWORK_COLORS['localnet'];\n\t\tconst fork = isForkNetwork(this.active);\n\t\t// Phase 4 P4.17 — when `meta.runtime: 'forked'` flows through\n\t\t// (codegen emits the network literal as e.g. `'mainnet-fork'`),\n\t\t// the badge surfaces an amber-hatched stripe + a `(fork)`\n\t\t// label so the user can't mistake the wallet panel for one\n\t\t// pointed at real upstream funds.\n\t\tconst baseLabel = fork ? this.active.replace(/-fork$/, '') : this.active;\n\n\t\treturn html`\n\t\t\t<dev-wallet-dropdown .open=${this._open} @close=${() => (this._open = false)}>\n\t\t\t\t<button\n\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\tclass=${fork ? 'badge fork' : 'badge'}\n\t\t\t\t\tpart=\"trigger\"\n\t\t\t\t\taria-expanded=${this._open}\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\ttitle=${fork ? `sui-fork stack — no real ${baseLabel} funds at risk` : ''}\n\t\t\t\t\t@click=${() => (this._open = !this._open)}\n\t\t\t\t>\n\t\t\t\t\t<span class=\"dot\" style=\"background: ${color}\"></span>\n\t\t\t\t\t${baseLabel} ${fork ? html`<span class=\"fork-tag\">fork</span>` : ''}\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclass=\"chevron\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2.5\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path d=\"M6 9l6 6 6-6\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t\t<div slot=\"popover\">\n\t\t\t\t\t${this.networks.map((network) => {\n\t\t\t\t\t\tconst dotColor = NETWORK_COLORS[network] ?? NETWORK_COLORS['localnet'];\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"dropdown-item\"\n\t\t\t\t\t\t\t\taria-selected=${network === this.active}\n\t\t\t\t\t\t\t\t@click=${() => this.#select(network)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"dot\" style=\"background: ${dotColor}\"></span>\n\t\t\t\t\t\t\t\t${network}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t`;\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</dev-wallet-dropdown>\n\t\t`;\n\t}\n\n\t#select(network: string) {\n\t\tthis._open = false;\n\t\tif (network !== this.active) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('network-changed', {\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t\tdetail: { network },\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-network-badge': DevWalletNetworkBadge;\n\t}\n}\n"],"mappings":";;;;;;;AAWO,IAAA,wBAAA,MAAM,8BAA8B,WAAW;;;gBA6E5C;kBAGY,EAAE;eAGP;;;gBAlFS;GACxB;GACA;GACA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsEH;;CAWD,SAAkB;EACjB,MAAM,QAAQ,eAAe,KAAK,WAAW,eAAe;EAC5D,MAAM,OAAO,cAAc,KAAK,OAAO;EAMvC,MAAM,YAAY,OAAO,KAAK,OAAO,QAAQ,UAAU,GAAG,GAAG,KAAK;AAElE,SAAO,IAAI;gCACmB,KAAK,MAAM,gBAAiB,KAAK,QAAQ,MAAO;;;aAGnE,OAAO,eAAe,QAAQ;;qBAEtB,KAAK,MAAM;;aAEnB,OAAO,4BAA4B,UAAU,kBAAkB,GAAG;oBAC1D,KAAK,QAAQ,CAAC,KAAK,MAAO;;4CAEH,MAAM;OAC3C,UAAU,GAAG,OAAO,IAAI,uCAAuC,GAAG;;;;;;;;;;;;OAYlE,KAAK,SAAS,KAAK,YAAY;GAChC,MAAM,WAAW,eAAe,YAAY,eAAe;AAC3D,UAAO,IAAI;;;wBAGO,YAAY,KAAK,OAAO;uBACzB,MAAA,OAAa,QAAQ,CAAC;;+CAEE,SAAS;UAC9C,QAAQ;;;IAGX,CAAC;;;;;CAMP,QAAQ,SAAiB;AACxB,OAAK,QAAQ;AACb,MAAI,YAAY,KAAK,OACpB,MAAK,cACJ,IAAI,YAAY,mBAAmB;GAClC,SAAS;GACT,UAAU;GACV,QAAQ,EAAE,SAAS;GACnB,CAAC,CACF;;;YAtEF,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,EAAA,sBAAA,WAAA,UAAA,KAAA,EAAA;YAG1B,SAAS,EAAE,WAAW,OAAO,CAAC,CAAA,EAAA,sBAAA,WAAA,YAAA,KAAA,EAAA;YAG9B,OAAO,CAAA,EAAA,sBAAA,WAAA,SAAA,KAAA,EAAA;oCAnFR,cAAc,2BAA2B,CAAA,EAAA,sBAAA"}
1
+ {"version":3,"file":"dev-wallet-network-badge.mjs","names":["#select"],"sources":["../../src/ui/dev-wallet-network-badge.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport { dropdownItemStyles, sharedStyles } from './styles.js';\nimport { isForkNetwork, NETWORK_COLORS } from './utils.js';\nimport './dev-wallet-dropdown.js';\n\n@customElement('dev-wallet-network-badge')\nexport class DevWalletNetworkBadge extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tdropdownItemStyles,\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: inline-block;\n\t\t\t}\n\n\t\t\t.badge {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 6px;\n\t\t\t\theight: 26px;\n\t\t\t\tpadding: 0 8px;\n\t\t\t\tborder-radius: 999px;\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tfont-family: var(--dev-wallet-font-mono);\n\t\t\t\tfont-size: 10.5px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-text-2);\n\t\t\t\tbackground: var(--dev-wallet-bg-3);\n\t\t\t\tcursor: pointer;\n\t\t\t\ttransition:\n\t\t\t\t\tbackground 120ms,\n\t\t\t\t\tborder-color 120ms,\n\t\t\t\t\tcolor 120ms;\n\t\t\t}\n\n\t\t\t/* Phase 4 P4.17 — amber stripe + fork label when the\n\t\t\t active network is a *-fork variant. The stripe is\n\t\t\t diagonal-hatched so it survives dark + light themes\n\t\t\t without depending on a separate badge background. */\n\t\t\t.badge.fork {\n\t\t\t\tbackground-image: repeating-linear-gradient(\n\t\t\t\t\t45deg,\n\t\t\t\t\trgba(234, 179, 8, 0.18),\n\t\t\t\t\trgba(234, 179, 8, 0.18) 4px,\n\t\t\t\t\ttransparent 4px,\n\t\t\t\t\ttransparent 8px\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t.fork-tag {\n\t\t\t\tcolor: #92400e;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-bold);\n\t\t\t\tfont-size: 10px;\n\t\t\t\tmargin-left: 4px;\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\tletter-spacing: 0.5px;\n\t\t\t}\n\n\t\t\t.badge:hover {\n\t\t\t\tbackground: var(--dev-wallet-bg-4);\n\t\t\t\tborder-color: var(--dev-wallet-border-strong);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.dot {\n\t\t\t\twidth: 6px;\n\t\t\t\theight: 6px;\n\t\t\t\tborder-radius: 50%;\n\t\t\t}\n\n\t\t\t.chevron {\n\t\t\t\twidth: 10px;\n\t\t\t\theight: 10px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t}\n\n\t\t\t.dropdown-item {\n\t\t\t\tpadding: 8px 12px;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ type: String })\n\tactive = '';\n\n\t@property({ attribute: false })\n\tnetworks: string[] = [];\n\n\t@state()\n\tprivate _open = false;\n\n\toverride render() {\n\t\tconst color = NETWORK_COLORS[this.active] ?? NETWORK_COLORS['localnet'];\n\t\tconst fork = isForkNetwork(this.active);\n\t\t// Phase 4 P4.17 — when `meta.runtime: 'forked'` flows through\n\t\t// (codegen emits the network literal as e.g. `'mainnet-fork'`),\n\t\t// the badge surfaces an amber-hatched stripe + a `(fork)`\n\t\t// label so the user can't mistake the wallet panel for one\n\t\t// pointed at real upstream funds.\n\t\tconst baseLabel = fork ? this.active.replace(/-fork$/, '') : this.active;\n\n\t\treturn html`\n\t\t\t<dev-wallet-dropdown .open=${this._open} @close=${() => (this._open = false)}>\n\t\t\t\t<button\n\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\tclass=${fork ? 'badge fork' : 'badge'}\n\t\t\t\t\tpart=\"trigger\"\n\t\t\t\t\taria-expanded=${this._open}\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\ttitle=${fork ? `sui-fork stack — no real ${baseLabel} funds at risk` : ''}\n\t\t\t\t\t@click=${() => (this._open = !this._open)}\n\t\t\t\t>\n\t\t\t\t\t<span class=\"dot\" style=\"background: ${color}\"></span>\n\t\t\t\t\t${baseLabel} ${fork ? html`<span class=\"fork-tag\">fork</span>` : ''}\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclass=\"chevron\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2.5\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path d=\"M6 9l6 6 6-6\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t\t<div slot=\"popover\">\n\t\t\t\t\t${this.networks.map((network) => {\n\t\t\t\t\t\tconst dotColor = NETWORK_COLORS[network] ?? NETWORK_COLORS['localnet'];\n\t\t\t\t\t\treturn html`\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"dropdown-item\"\n\t\t\t\t\t\t\t\taria-selected=${network === this.active}\n\t\t\t\t\t\t\t\t@click=${() => this.#select(network)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"dot\" style=\"background: ${dotColor}\"></span>\n\t\t\t\t\t\t\t\t${network}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t`;\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</dev-wallet-dropdown>\n\t\t`;\n\t}\n\n\t#select(network: string) {\n\t\tthis._open = false;\n\t\tif (network !== this.active) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('network-changed', {\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t\tdetail: { network },\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-network-badge': DevWalletNetworkBadge;\n\t}\n}\n"],"mappings":";;;;;;;AAWO,IAAA,wBAAA,MAAM,8BAA8B,WAAW;;;gBA6E5C;kBAGY,CAAC;eAGN;;;gBAlFS;GACxB;GACA;GACA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsEJ;;CAWA,SAAkB;EACjB,MAAM,QAAQ,eAAe,KAAK,WAAW,eAAe;EAC5D,MAAM,OAAO,cAAc,KAAK,MAAM;EAMtC,MAAM,YAAY,OAAO,KAAK,OAAO,QAAQ,UAAU,EAAE,IAAI,KAAK;EAElE,OAAO,IAAI;gCACmB,KAAK,MAAM,gBAAiB,KAAK,QAAQ,MAAO;;;aAGnE,OAAO,eAAe,QAAQ;;qBAEtB,KAAK,MAAM;;aAEnB,OAAO,4BAA4B,UAAU,kBAAkB,GAAG;oBAC1D,KAAK,QAAQ,CAAC,KAAK,MAAO;;4CAEH,MAAM;OAC3C,UAAU,GAAG,OAAO,IAAI,uCAAuC,GAAG;;;;;;;;;;;;OAYlE,KAAK,SAAS,KAAK,YAAY;GAChC,MAAM,WAAW,eAAe,YAAY,eAAe;GAC3D,OAAO,IAAI;;;wBAGO,YAAY,KAAK,OAAO;uBACzB,KAAKA,QAAQ,OAAO,EAAE;;+CAEE,SAAS;UAC9C,QAAQ;;;EAGb,CAAC,EAAE;;;;CAIP;CAEA,QAAQ,SAAiB;EACxB,KAAK,QAAQ;EACb,IAAI,YAAY,KAAK,QACpB,KAAK,cACJ,IAAI,YAAY,mBAAmB;GAClC,SAAS;GACT,UAAU;GACV,QAAQ,EAAE,QAAQ;EACnB,CAAC,CACF;CAEF;AACD;YAzEE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAA,GAAA,sBAAA,WAAA,UAAA,KAAA,CAAA;YAGzB,SAAS,EAAE,WAAW,MAAM,CAAC,CAAA,GAAA,sBAAA,WAAA,YAAA,KAAA,CAAA;YAG7B,MAAM,CAAA,GAAA,sBAAA,WAAA,SAAA,KAAA,CAAA;oCAnFP,cAAc,0BAA0B,CAAA,GAAA,qBAAA"}
@@ -1,11 +1,10 @@
1
1
  import { SignerAdapter } from "../types.mjs";
2
- import * as _$lit from "lit";
3
2
  import { LitElement } from "lit";
4
3
 
5
4
  //#region src/ui/dev-wallet-new-account.d.ts
6
5
  declare class DevWalletNewAccount extends LitElement {
7
6
  #private;
8
- static styles: (_$lit.CSSResult | _$lit.CSSResult[])[];
7
+ static styles: (import("lit").CSSResult | import("lit").CSSResult[])[];
9
8
  adapters: SignerAdapter[];
10
9
  open: boolean;
11
10
  private _mode;
@@ -18,7 +17,7 @@ declare class DevWalletNewAccount extends LitElement {
18
17
  private _dropdownOpen;
19
18
  private _selectedImports;
20
19
  updated(changed: Map<string, unknown>): void;
21
- render(): _$lit.TemplateResult<1>;
20
+ render(): import("lit").TemplateResult<1>;
22
21
  }
23
22
  declare global {
24
23
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-new-account.d.mts","names":[],"sources":["../../src/ui/dev-wallet-new-account.ts"],"mappings":";;;;;cAsCa,mBAAA,SAA4B,UAAA;EAAA;SACxB,MAAA,GADgB,KAAA,CACV,SAAA,GAAA,KAAA,CAAA,SAAA;EA6MtB,QAAA,EAAU,aAAA;EAGV,IAAA;EAAA,QAGQ,KAAA;EAAA,QAGA,MAAA;EAAA,QAGA,kBAAA;EAAA,QAGA,SAAA;EAAA,QAGA,MAAA;EAAA,QAGA,kBAAA;EAAA,QAGA,eAAA;EAAA,QAGA,aAAA;EAAA,QAGA,gBAAA;EA8BC,OAAA,CAAQ,OAAA,EAAS,GAAA;EAqBjB,MAAA,CAAA,GArBoB,KAAA,CAqBd,cAAA;AAAA;AAAA,QAmSR,MAAA;EAAA,UACG,qBAAA;IACT,wBAAA,EAA0B,mBAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"dev-wallet-new-account.d.mts","names":[],"sources":["../../src/ui/dev-wallet-new-account.ts"],"mappings":";;;;cAsCa,mBAAA,SAA4B,UAAA;EAAA;SACxB,MAAA,iBAAM,SAAA,iBAAA,SAAA;EA6MtB,QAAA,EAAU,aAAA;EAGV,IAAA;EAAA,QAGQ,KAAA;EAAA,QAGA,MAAA;EAAA,QAGA,kBAAA;EAAA,QAGA,SAAA;EAAA,QAGA,MAAA;EAAA,QAGA,kBAAA;EAAA,QAGA,eAAA;EAAA,QAGA,aAAA;EAAA,QAGA,gBAAA;EA8BC,OAAA,CAAQ,OAAA,EAAS,GAAA;EAqBjB,MAAA,kBAAM,cAAA;AAAA;AAAA,QAmSR,MAAA;EAAA,UACG,qBAAA;IACT,wBAAA,EAA0B,mBAAmB;EAAA;AAAA"}
@@ -1,6 +1,6 @@
1
1
  import { actionButtonStyles, badgeStyles, cardItemStyles, dialogStyles, formInputStyles, inlineErrorStyles, listContainerStyles, monoTruncateStyles, sharedStyles, stateStyles, subLabelStyles } from "./styles.mjs";
2
2
  import { emitEvent, formatAddress, getErrorMessage, isPairableAdapter, toggleSetItem } from "./utils.mjs";
3
- import { __decorate } from "../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.mjs";
3
+ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.135.0/helpers/esm/decorate.mjs";
4
4
  import "./dev-wallet-dropdown.mjs";
5
5
  import { LitElement, css, html, nothing } from "lit";
6
6
  import { customElement, property, state } from "lit/decorators.js";
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-new-account.mjs","names":["#creatableAdapters","#importableAdapters","#hasUnpairedImportableAdapters","#loadAvailableAccounts","#handleDialogCancel","#renderCreateForm","#renderImportList","#close","#handleLabelInput","#handleKeydown","#handleCancel","#handleCreate","#toggleImportSelection","#handleImportSelected"],"sources":["../../src/ui/dev-wallet-new-account.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport type { SignerAdapter } from '../types.js';\nimport {\n\tactionButtonStyles,\n\tbadgeStyles,\n\tcardItemStyles,\n\tdialogStyles,\n\tformInputStyles,\n\tinlineErrorStyles,\n\tlistContainerStyles,\n\tmonoTruncateStyles,\n\tsharedStyles,\n\tsubLabelStyles,\n\tstateStyles,\n} from './styles.js';\nimport {\n\temitEvent,\n\tformatAddress,\n\tgetErrorMessage,\n\tisPairableAdapter,\n\ttoggleSetItem,\n} from './utils.js';\nimport './dev-wallet-dropdown.js';\n\ninterface AvailableAccount {\n\tadapterId: string;\n\tadapterName: string;\n\taddress: string;\n\tscheme: string;\n\talias?: string | null;\n}\n\n@customElement('dev-wallet-new-account')\nexport class DevWalletNewAccount extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tactionButtonStyles,\n\t\tstateStyles,\n\t\tdialogStyles,\n\t\tcardItemStyles,\n\t\tlistContainerStyles,\n\t\tformInputStyles,\n\t\tmonoTruncateStyles,\n\t\tbadgeStyles,\n\t\tinlineErrorStyles,\n\t\tsubLabelStyles,\n\t\tcss`\n\t\t\tdialog {\n\t\t\t\twidth: 320px;\n\t\t\t\tmax-height: min(420px, 80vh);\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\n\t\t\t.tabs {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 4px;\n\t\t\t\tmargin-bottom: 16px;\n\t\t\t\tbackground: var(--dev-wallet-secondary);\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tpadding: 3px;\n\t\t\t}\n\n\t\t\t.tab {\n\t\t\t\tflex: 1;\n\t\t\t\tpadding: 6px 12px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-xs);\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\ttext-align: center;\n\t\t\t\ttransition: all 0.15s;\n\t\t\t}\n\n\t\t\t.tab.active {\n\t\t\t\tbackground: var(--dev-wallet-background);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tbox-shadow: var(--dev-wallet-shadow-sm);\n\t\t\t}\n\n\t\t\t.tab:not(.active):hover {\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.field {\n\t\t\t\tmargin-bottom: 12px;\n\t\t\t}\n\n\t\t\t.field-input {\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tborder: 1px solid var(--dev-wallet-input);\n\t\t\t\tbackground: var(--dev-wallet-secondary);\n\t\t\t\tfont-size: 14px;\n\t\t\t}\n\n\t\t\t.field-input:focus {\n\t\t\t\toutline: 2px solid color-mix(in oklab, var(--dev-wallet-ring) 50%, transparent);\n\t\t\t\toutline-offset: -1px;\n\t\t\t}\n\n\t\t\t.select-trigger {\n\t\t\t\twidth: 100%;\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tborder: 1px solid var(--dev-wallet-input);\n\t\t\t\tbackground: var(--dev-wallet-secondary);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-family: inherit;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\tcursor: pointer;\n\t\t\t\ttext-align: left;\n\t\t\t}\n\n\t\t\t.select-trigger:hover {\n\t\t\t\tborder-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.select-trigger .chevron {\n\t\t\t\tfont-size: 10px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\ttransition: transform 0.15s;\n\t\t\t}\n\n\t\t\t.select-trigger.open .chevron {\n\t\t\t\ttransform: rotate(180deg);\n\t\t\t}\n\n\t\t\t.select-option {\n\t\t\t\twidth: 100%;\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-family: inherit;\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tbackground: transparent;\n\t\t\t\ttext-align: left;\n\t\t\t\tcursor: pointer;\n\t\t\t\ttransition: background 0.1s;\n\t\t\t}\n\n\t\t\t.select-option:hover {\n\t\t\t\tbackground: color-mix(in oklab, var(--dev-wallet-primary) 15%, transparent);\n\t\t\t}\n\n\t\t\t.select-option.selected {\n\t\t\t\tcolor: var(--dev-wallet-primary);\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t}\n\n\t\t\t.import-list {\n\t\t\t\toverflow-y: auto;\n\t\t\t\tmax-height: 240px;\n\t\t\t\tmin-height: 60px;\n\t\t\t}\n\n\t\t\t.import-item {\n\t\t\t\tgap: 10px;\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-align: left;\n\t\t\t\ttransition: border-color 0.15s;\n\t\t\t}\n\n\t\t\t.import-item:hover {\n\t\t\t\tborder-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.import-item.selected {\n\t\t\t\tbackground: color-mix(in oklab, var(--dev-wallet-primary) 10%, var(--dev-wallet-secondary));\n\t\t\t}\n\n\t\t\t.import-item:disabled {\n\t\t\t\topacity: 0.5;\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\n\t\t\t.import-checkbox {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-2xs);\n\t\t\t\tborder: 2px solid var(--dev-wallet-border);\n\t\t\t\tflex-shrink: 0;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tfont-size: 10px;\n\t\t\t\tcolor: var(--dev-wallet-primary-foreground);\n\t\t\t\ttransition: all 0.15s;\n\t\t\t}\n\n\t\t\t.import-checkbox.checked {\n\t\t\t\tbackground: var(--dev-wallet-primary);\n\t\t\t\tborder-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.import-item-info {\n\t\t\t\tflex: 1;\n\t\t\t\tmin-width: 0;\n\t\t\t}\n\n\t\t\t.import-item-label {\n\t\t\t\tfont-size: 13px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.import-item-address {\n\t\t\t\tfont-size: 11px;\n\t\t\t}\n\n\t\t\t.import-item-badge {\n\t\t\t\tpadding: 1px 6px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-xs);\n\t\t\t\tbackground: var(--dev-wallet-background);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tletter-spacing: 0.3px;\n\t\t\t\tflex-shrink: 0;\n\t\t\t}\n\n\t\t\t.empty-state,\n\t\t\t.loading {\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\n\t\t\t.actions {\n\t\t\t\tmargin-top: 16px;\n\t\t\t}\n\n\t\t\t.error {\n\t\t\t\tmargin-top: 8px;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ attribute: false })\n\tadapters: SignerAdapter[] = [];\n\n\t@property({ type: Boolean })\n\topen = false;\n\n\t@state()\n\tprivate _mode: 'create' | 'import' = 'create';\n\n\t@state()\n\tprivate _label = '';\n\n\t@state()\n\tprivate _selectedAdapterId = '';\n\n\t@state()\n\tprivate _creating = false;\n\n\t@state()\n\tprivate _error: string | null = null;\n\n\t@state()\n\tprivate _availableAccounts: AvailableAccount[] = [];\n\n\t@state()\n\tprivate _loadingImports = false;\n\n\t@state()\n\tprivate _dropdownOpen = false;\n\n\t@state()\n\tprivate _selectedImports = new Set<string>();\n\n\tget #creatableAdapters(): SignerAdapter[] {\n\t\treturn this.adapters.filter((a) => 'createAccount' in a && a.createAccount);\n\t}\n\n\tget #importableAdapters(): SignerAdapter[] {\n\t\treturn this.adapters.filter(\n\t\t\t(a) =>\n\t\t\t\t'importAccount' in a &&\n\t\t\t\ta.importAccount &&\n\t\t\t\t'listAvailableAccounts' in a &&\n\t\t\t\ta.listAvailableAccounts &&\n\t\t\t\t// Skip adapters that require pairing but aren't paired yet\n\t\t\t\t(!isPairableAdapter(a) || a.isPaired),\n\t\t);\n\t}\n\n\tget #hasUnpairedImportableAdapters(): boolean {\n\t\treturn this.adapters.some(\n\t\t\t(a) =>\n\t\t\t\t'importAccount' in a &&\n\t\t\t\ta.importAccount &&\n\t\t\t\t'listAvailableAccounts' in a &&\n\t\t\t\ta.listAvailableAccounts &&\n\t\t\t\tisPairableAdapter(a) &&\n\t\t\t\t!a.isPaired,\n\t\t);\n\t}\n\n\toverride updated(changed: Map<string, unknown>) {\n\t\tif (changed.has('open')) {\n\t\t\tconst dialog = this.shadowRoot?.querySelector('dialog');\n\t\t\tif (this.open && dialog && !dialog.open) {\n\t\t\t\tconst canCreate = this.#creatableAdapters.length > 0;\n\t\t\t\tconst canImport = this.#importableAdapters.length > 0;\n\t\t\t\tif (canImport && !canCreate) {\n\t\t\t\t\tthis._mode = 'import';\n\t\t\t\t} else {\n\t\t\t\t\tthis._mode = 'create';\n\t\t\t\t}\n\t\t\t\tif (canImport) {\n\t\t\t\t\tthis.#loadAvailableAccounts();\n\t\t\t\t}\n\t\t\t\tdialog.showModal();\n\t\t\t} else if (!this.open && dialog?.open) {\n\t\t\t\tdialog.close();\n\t\t\t}\n\t\t}\n\t}\n\n\toverride render() {\n\t\tconst canCreate = this.#creatableAdapters.length > 0;\n\t\tconst canImport = this.#importableAdapters.length > 0;\n\t\tconst showTabs = canCreate && canImport;\n\n\t\treturn html`\n\t\t\t<dialog part=\"dialog\" @cancel=${this.#handleDialogCancel}>\n\t\t\t\t<div class=\"dialog-title\">Add Account</div>\n\t\t\t\t${showTabs\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"tabs\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"tab ${this._mode === 'create' ? 'active' : ''}\"\n\t\t\t\t\t\t\t\t\t@click=${() => (this._mode = 'create')}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tCreate\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"tab ${this._mode === 'import' ? 'active' : ''}\"\n\t\t\t\t\t\t\t\t\t@click=${() => (this._mode = 'import')}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tImport\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: nothing}\n\t\t\t\t${this._mode === 'create' ? this.#renderCreateForm() : this.#renderImportList()}\n\t\t\t\t${this._error\n\t\t\t\t\t? html`<div class=\"error\" part=\"error-message\">${this._error}</div>`\n\t\t\t\t\t: nothing}\n\t\t\t</dialog>\n\t\t`;\n\t}\n\n\t#handleDialogCancel(e: Event) {\n\t\te.preventDefault();\n\t\tif (!this._creating) {\n\t\t\tthis.#close();\n\t\t}\n\t}\n\n\t#renderCreateForm() {\n\t\tconst creatableAdapters = this.#creatableAdapters;\n\t\tconst showPicker = creatableAdapters.length > 1;\n\n\t\tconst selectedAdapter =\n\t\t\tcreatableAdapters.find((a) => a.id === this._selectedAdapterId) ?? creatableAdapters[0];\n\n\t\treturn html`\n\t\t\t${showPicker\n\t\t\t\t? html`\n\t\t\t\t\t\t<div class=\"field\">\n\t\t\t\t\t\t\t<label class=\"field-label\">Type</label>\n\t\t\t\t\t\t\t<dev-wallet-dropdown\n\t\t\t\t\t\t\t\tfull-width\n\t\t\t\t\t\t\t\t.open=${this._dropdownOpen}\n\t\t\t\t\t\t\t\t@close=${() => (this._dropdownOpen = false)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\tclass=\"select-trigger ${this._dropdownOpen ? 'open' : ''}\"\n\t\t\t\t\t\t\t\t\t@click=${() => (this._dropdownOpen = !this._dropdownOpen)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span>${selectedAdapter?.name ?? 'Select...'}</span>\n\t\t\t\t\t\t\t\t\t<span class=\"chevron\">▼</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<div slot=\"popover\">\n\t\t\t\t\t\t\t\t\t${creatableAdapters.map(\n\t\t\t\t\t\t\t\t\t\t(a) => html`\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"select-option ${a.id === (selectedAdapter?.id ?? '')\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'selected'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ''}\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis._selectedAdapterId = a.id;\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis._dropdownOpen = false;\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis._error = null;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t${a.name}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</dev-wallet-dropdown>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`\n\t\t\t\t: nothing}\n\t\t\t<div class=\"field\">\n\t\t\t\t<label class=\"field-label\">Label</label>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"field-input\"\n\t\t\t\t\tpart=\"label-input\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tplaceholder=\"e.g. Test Account\"\n\t\t\t\t\t.value=${this._label}\n\t\t\t\t\t@input=${this.#handleLabelInput}\n\t\t\t\t\t@keydown=${this.#handleKeydown}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"actions\">\n\t\t\t\t<button class=\"btn btn-cancel\" part=\"cancel-button\" @click=${this.#handleCancel}>\n\t\t\t\t\tCancel\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tclass=\"btn btn-create\"\n\t\t\t\t\tpart=\"create-button\"\n\t\t\t\t\t?disabled=${this._creating}\n\t\t\t\t\t@click=${this.#handleCreate}\n\t\t\t\t>\n\t\t\t\t\t${this._creating ? 'Creating...' : 'Create'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t`;\n\t}\n\n\t#renderImportList() {\n\t\tif (this._loadingImports) {\n\t\t\treturn html`<div class=\"loading\">Loading accounts...</div>\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<button class=\"btn btn-cancel\" part=\"cancel-button\" @click=${this.#handleCancel}>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t</div>`;\n\t\t}\n\n\t\tif (this._availableAccounts.length === 0) {\n\t\t\treturn html`<div class=\"empty-state\">\n\t\t\t\t\t${this.#hasUnpairedImportableAdapters\n\t\t\t\t\t\t? 'Open the token URL from your terminal to connect CLI accounts.'\n\t\t\t\t\t\t: 'No accounts available to import'}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<button class=\"btn btn-cancel\" part=\"cancel-button\" @click=${this.#handleCancel}>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t</div>`;\n\t\t}\n\n\t\treturn html`\n\t\t\t<div class=\"import-list\">\n\t\t\t\t${this._availableAccounts.map((account) => {\n\t\t\t\t\tconst selected = this._selectedImports.has(account.address);\n\t\t\t\t\treturn html`\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"import-item ${selected ? 'selected' : ''}\"\n\t\t\t\t\t\t\trole=\"checkbox\"\n\t\t\t\t\t\t\taria-checked=\"${selected}\"\n\t\t\t\t\t\t\t?disabled=${this._creating}\n\t\t\t\t\t\t\t@click=${() => this.#toggleImportSelection(account.address)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"import-checkbox ${selected ? 'checked' : ''}\"\n\t\t\t\t\t\t\t\t>${selected ? '✓' : ''}</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"import-item-info\">\n\t\t\t\t\t\t\t\t<div class=\"import-item-label\">\n\t\t\t\t\t\t\t\t\t${account.alias || formatAddress(account.address)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"import-item-address\">${formatAddress(account.address)}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<span class=\"import-item-badge\">${account.scheme}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t`;\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t<div class=\"actions\">\n\t\t\t\t<button class=\"btn btn-cancel\" part=\"cancel-button\" @click=${this.#handleCancel}>\n\t\t\t\t\tCancel\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tclass=\"btn btn-create\"\n\t\t\t\t\tpart=\"create-button\"\n\t\t\t\t\t?disabled=${this._creating || this._selectedImports.size === 0}\n\t\t\t\t\t@click=${this.#handleImportSelected}\n\t\t\t\t>\n\t\t\t\t\t${this._creating\n\t\t\t\t\t\t? 'Importing...'\n\t\t\t\t\t\t: `Import${this._selectedImports.size > 0 ? ` (${this._selectedImports.size})` : ''}`}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t`;\n\t}\n\n\tasync #loadAvailableAccounts() {\n\t\tthis._loadingImports = true;\n\t\tthis._availableAccounts = [];\n\n\t\ttry {\n\t\t\tconst results: AvailableAccount[] = [];\n\t\t\tfor (const adapter of this.#importableAdapters) {\n\t\t\t\tconst accounts = await adapter.listAvailableAccounts!();\n\t\t\t\tfor (const account of accounts) {\n\t\t\t\t\tresults.push({\n\t\t\t\t\t\tadapterId: adapter.id,\n\t\t\t\t\t\tadapterName: adapter.name,\n\t\t\t\t\t\taddress: account.address,\n\t\t\t\t\t\tscheme: account.scheme,\n\t\t\t\t\t\talias: 'alias' in account ? (account.alias as string | null) : null,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._availableAccounts = results;\n\t\t} catch (error) {\n\t\t\tthis._error = getErrorMessage(error, 'Failed to load accounts');\n\t\t} finally {\n\t\t\tthis._loadingImports = false;\n\t\t}\n\t}\n\n\t#handleLabelInput(e: InputEvent) {\n\t\tthis._label = (e.target as HTMLInputElement).value;\n\t\tthis._error = null;\n\t}\n\n\t#handleKeydown(e: KeyboardEvent) {\n\t\tif (e.key === 'Enter' && !this._creating) {\n\t\t\tthis.#handleCreate();\n\t\t} else if (e.key === 'Escape') {\n\t\t\tthis.#close();\n\t\t}\n\t}\n\n\t#handleCancel() {\n\t\tthis.#close();\n\t}\n\n\tasync #handleCreate() {\n\t\tconst creatableAdapters = this.#creatableAdapters;\n\t\tif (creatableAdapters.length === 0) return;\n\n\t\tconst adapter =\n\t\t\tcreatableAdapters.find((a) => a.id === this._selectedAdapterId) ?? creatableAdapters[0];\n\t\tif (!adapter?.createAccount) return;\n\n\t\tthis._creating = true;\n\t\tthis._error = null;\n\n\t\ttry {\n\t\t\tconst options: Record<string, unknown> = {};\n\t\t\tif (this._label.trim()) {\n\t\t\t\toptions.label = this._label.trim();\n\t\t\t}\n\t\t\tawait adapter.createAccount(options);\n\t\t\tthis.#close();\n\t\t\temitEvent(this, 'account-created');\n\t\t} catch (error) {\n\t\t\tthis._error = getErrorMessage(error, 'Failed to create account');\n\t\t} finally {\n\t\t\tthis._creating = false;\n\t\t}\n\t}\n\n\t#toggleImportSelection(address: string) {\n\t\tthis._selectedImports = toggleSetItem(this._selectedImports, address);\n\t}\n\n\tasync #handleImportSelected() {\n\t\tconst selected = this._availableAccounts.filter((a) => this._selectedImports.has(a.address));\n\t\tif (selected.length === 0) return;\n\n\t\tthis._creating = true;\n\t\tthis._error = null;\n\n\t\ttry {\n\t\t\tfor (const account of selected) {\n\t\t\t\tconst adapter = this.#importableAdapters.find((a) => a.id === account.adapterId);\n\t\t\t\tif (!adapter?.importAccount) continue;\n\t\t\t\tawait adapter.importAccount({ address: account.address });\n\t\t\t}\n\t\t\tthis.#close();\n\t\t\temitEvent(this, 'account-created');\n\t\t} catch (error) {\n\t\t\tthis._error = getErrorMessage(error, 'Failed to import account');\n\t\t} finally {\n\t\t\tthis._creating = false;\n\t\t}\n\t}\n\n\t#close() {\n\t\tthis._label = '';\n\t\tthis._selectedAdapterId = '';\n\t\tthis._error = null;\n\t\tthis._availableAccounts = [];\n\t\tthis._selectedImports = new Set();\n\t\tthis._mode = 'create';\n\t\tthis._dropdownOpen = false;\n\t\t// Don't mutate `this.open` — let the parent control it via the `close` event\n\t\temitEvent(this, 'close');\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-new-account': DevWalletNewAccount;\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dev-wallet-new-account.mjs","names":["#creatableAdapters","#importableAdapters","#hasUnpairedImportableAdapters","#loadAvailableAccounts","#handleDialogCancel","#renderCreateForm","#renderImportList","#close","#handleLabelInput","#handleKeydown","#handleCancel","#handleCreate","#toggleImportSelection","#handleImportSelected"],"sources":["../../src/ui/dev-wallet-new-account.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport type { SignerAdapter } from '../types.js';\nimport {\n\tactionButtonStyles,\n\tbadgeStyles,\n\tcardItemStyles,\n\tdialogStyles,\n\tformInputStyles,\n\tinlineErrorStyles,\n\tlistContainerStyles,\n\tmonoTruncateStyles,\n\tsharedStyles,\n\tsubLabelStyles,\n\tstateStyles,\n} from './styles.js';\nimport {\n\temitEvent,\n\tformatAddress,\n\tgetErrorMessage,\n\tisPairableAdapter,\n\ttoggleSetItem,\n} from './utils.js';\nimport './dev-wallet-dropdown.js';\n\ninterface AvailableAccount {\n\tadapterId: string;\n\tadapterName: string;\n\taddress: string;\n\tscheme: string;\n\talias?: string | null;\n}\n\n@customElement('dev-wallet-new-account')\nexport class DevWalletNewAccount extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tactionButtonStyles,\n\t\tstateStyles,\n\t\tdialogStyles,\n\t\tcardItemStyles,\n\t\tlistContainerStyles,\n\t\tformInputStyles,\n\t\tmonoTruncateStyles,\n\t\tbadgeStyles,\n\t\tinlineErrorStyles,\n\t\tsubLabelStyles,\n\t\tcss`\n\t\t\tdialog {\n\t\t\t\twidth: 320px;\n\t\t\t\tmax-height: min(420px, 80vh);\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\n\t\t\t.tabs {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 4px;\n\t\t\t\tmargin-bottom: 16px;\n\t\t\t\tbackground: var(--dev-wallet-secondary);\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tpadding: 3px;\n\t\t\t}\n\n\t\t\t.tab {\n\t\t\t\tflex: 1;\n\t\t\t\tpadding: 6px 12px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-xs);\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\ttext-align: center;\n\t\t\t\ttransition: all 0.15s;\n\t\t\t}\n\n\t\t\t.tab.active {\n\t\t\t\tbackground: var(--dev-wallet-background);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tbox-shadow: var(--dev-wallet-shadow-sm);\n\t\t\t}\n\n\t\t\t.tab:not(.active):hover {\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.field {\n\t\t\t\tmargin-bottom: 12px;\n\t\t\t}\n\n\t\t\t.field-input {\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tborder: 1px solid var(--dev-wallet-input);\n\t\t\t\tbackground: var(--dev-wallet-secondary);\n\t\t\t\tfont-size: 14px;\n\t\t\t}\n\n\t\t\t.field-input:focus {\n\t\t\t\toutline: 2px solid color-mix(in oklab, var(--dev-wallet-ring) 50%, transparent);\n\t\t\t\toutline-offset: -1px;\n\t\t\t}\n\n\t\t\t.select-trigger {\n\t\t\t\twidth: 100%;\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tborder: 1px solid var(--dev-wallet-input);\n\t\t\t\tbackground: var(--dev-wallet-secondary);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-family: inherit;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\tcursor: pointer;\n\t\t\t\ttext-align: left;\n\t\t\t}\n\n\t\t\t.select-trigger:hover {\n\t\t\t\tborder-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.select-trigger .chevron {\n\t\t\t\tfont-size: 10px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\ttransition: transform 0.15s;\n\t\t\t}\n\n\t\t\t.select-trigger.open .chevron {\n\t\t\t\ttransform: rotate(180deg);\n\t\t\t}\n\n\t\t\t.select-option {\n\t\t\t\twidth: 100%;\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-family: inherit;\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tbackground: transparent;\n\t\t\t\ttext-align: left;\n\t\t\t\tcursor: pointer;\n\t\t\t\ttransition: background 0.1s;\n\t\t\t}\n\n\t\t\t.select-option:hover {\n\t\t\t\tbackground: color-mix(in oklab, var(--dev-wallet-primary) 15%, transparent);\n\t\t\t}\n\n\t\t\t.select-option.selected {\n\t\t\t\tcolor: var(--dev-wallet-primary);\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t}\n\n\t\t\t.import-list {\n\t\t\t\toverflow-y: auto;\n\t\t\t\tmax-height: 240px;\n\t\t\t\tmin-height: 60px;\n\t\t\t}\n\n\t\t\t.import-item {\n\t\t\t\tgap: 10px;\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-align: left;\n\t\t\t\ttransition: border-color 0.15s;\n\t\t\t}\n\n\t\t\t.import-item:hover {\n\t\t\t\tborder-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.import-item.selected {\n\t\t\t\tbackground: color-mix(in oklab, var(--dev-wallet-primary) 10%, var(--dev-wallet-secondary));\n\t\t\t}\n\n\t\t\t.import-item:disabled {\n\t\t\t\topacity: 0.5;\n\t\t\t\tcursor: not-allowed;\n\t\t\t}\n\n\t\t\t.import-checkbox {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-2xs);\n\t\t\t\tborder: 2px solid var(--dev-wallet-border);\n\t\t\t\tflex-shrink: 0;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tfont-size: 10px;\n\t\t\t\tcolor: var(--dev-wallet-primary-foreground);\n\t\t\t\ttransition: all 0.15s;\n\t\t\t}\n\n\t\t\t.import-checkbox.checked {\n\t\t\t\tbackground: var(--dev-wallet-primary);\n\t\t\t\tborder-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.import-item-info {\n\t\t\t\tflex: 1;\n\t\t\t\tmin-width: 0;\n\t\t\t}\n\n\t\t\t.import-item-label {\n\t\t\t\tfont-size: 13px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.import-item-address {\n\t\t\t\tfont-size: 11px;\n\t\t\t}\n\n\t\t\t.import-item-badge {\n\t\t\t\tpadding: 1px 6px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-xs);\n\t\t\t\tbackground: var(--dev-wallet-background);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tletter-spacing: 0.3px;\n\t\t\t\tflex-shrink: 0;\n\t\t\t}\n\n\t\t\t.empty-state,\n\t\t\t.loading {\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\n\t\t\t.actions {\n\t\t\t\tmargin-top: 16px;\n\t\t\t}\n\n\t\t\t.error {\n\t\t\t\tmargin-top: 8px;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ attribute: false })\n\tadapters: SignerAdapter[] = [];\n\n\t@property({ type: Boolean })\n\topen = false;\n\n\t@state()\n\tprivate _mode: 'create' | 'import' = 'create';\n\n\t@state()\n\tprivate _label = '';\n\n\t@state()\n\tprivate _selectedAdapterId = '';\n\n\t@state()\n\tprivate _creating = false;\n\n\t@state()\n\tprivate _error: string | null = null;\n\n\t@state()\n\tprivate _availableAccounts: AvailableAccount[] = [];\n\n\t@state()\n\tprivate _loadingImports = false;\n\n\t@state()\n\tprivate _dropdownOpen = false;\n\n\t@state()\n\tprivate _selectedImports = new Set<string>();\n\n\tget #creatableAdapters(): SignerAdapter[] {\n\t\treturn this.adapters.filter((a) => 'createAccount' in a && a.createAccount);\n\t}\n\n\tget #importableAdapters(): SignerAdapter[] {\n\t\treturn this.adapters.filter(\n\t\t\t(a) =>\n\t\t\t\t'importAccount' in a &&\n\t\t\t\ta.importAccount &&\n\t\t\t\t'listAvailableAccounts' in a &&\n\t\t\t\ta.listAvailableAccounts &&\n\t\t\t\t// Skip adapters that require pairing but aren't paired yet\n\t\t\t\t(!isPairableAdapter(a) || a.isPaired),\n\t\t);\n\t}\n\n\tget #hasUnpairedImportableAdapters(): boolean {\n\t\treturn this.adapters.some(\n\t\t\t(a) =>\n\t\t\t\t'importAccount' in a &&\n\t\t\t\ta.importAccount &&\n\t\t\t\t'listAvailableAccounts' in a &&\n\t\t\t\ta.listAvailableAccounts &&\n\t\t\t\tisPairableAdapter(a) &&\n\t\t\t\t!a.isPaired,\n\t\t);\n\t}\n\n\toverride updated(changed: Map<string, unknown>) {\n\t\tif (changed.has('open')) {\n\t\t\tconst dialog = this.shadowRoot?.querySelector('dialog');\n\t\t\tif (this.open && dialog && !dialog.open) {\n\t\t\t\tconst canCreate = this.#creatableAdapters.length > 0;\n\t\t\t\tconst canImport = this.#importableAdapters.length > 0;\n\t\t\t\tif (canImport && !canCreate) {\n\t\t\t\t\tthis._mode = 'import';\n\t\t\t\t} else {\n\t\t\t\t\tthis._mode = 'create';\n\t\t\t\t}\n\t\t\t\tif (canImport) {\n\t\t\t\t\tthis.#loadAvailableAccounts();\n\t\t\t\t}\n\t\t\t\tdialog.showModal();\n\t\t\t} else if (!this.open && dialog?.open) {\n\t\t\t\tdialog.close();\n\t\t\t}\n\t\t}\n\t}\n\n\toverride render() {\n\t\tconst canCreate = this.#creatableAdapters.length > 0;\n\t\tconst canImport = this.#importableAdapters.length > 0;\n\t\tconst showTabs = canCreate && canImport;\n\n\t\treturn html`\n\t\t\t<dialog part=\"dialog\" @cancel=${this.#handleDialogCancel}>\n\t\t\t\t<div class=\"dialog-title\">Add Account</div>\n\t\t\t\t${showTabs\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"tabs\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"tab ${this._mode === 'create' ? 'active' : ''}\"\n\t\t\t\t\t\t\t\t\t@click=${() => (this._mode = 'create')}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tCreate\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"tab ${this._mode === 'import' ? 'active' : ''}\"\n\t\t\t\t\t\t\t\t\t@click=${() => (this._mode = 'import')}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tImport\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: nothing}\n\t\t\t\t${this._mode === 'create' ? this.#renderCreateForm() : this.#renderImportList()}\n\t\t\t\t${this._error\n\t\t\t\t\t? html`<div class=\"error\" part=\"error-message\">${this._error}</div>`\n\t\t\t\t\t: nothing}\n\t\t\t</dialog>\n\t\t`;\n\t}\n\n\t#handleDialogCancel(e: Event) {\n\t\te.preventDefault();\n\t\tif (!this._creating) {\n\t\t\tthis.#close();\n\t\t}\n\t}\n\n\t#renderCreateForm() {\n\t\tconst creatableAdapters = this.#creatableAdapters;\n\t\tconst showPicker = creatableAdapters.length > 1;\n\n\t\tconst selectedAdapter =\n\t\t\tcreatableAdapters.find((a) => a.id === this._selectedAdapterId) ?? creatableAdapters[0];\n\n\t\treturn html`\n\t\t\t${showPicker\n\t\t\t\t? html`\n\t\t\t\t\t\t<div class=\"field\">\n\t\t\t\t\t\t\t<label class=\"field-label\">Type</label>\n\t\t\t\t\t\t\t<dev-wallet-dropdown\n\t\t\t\t\t\t\t\tfull-width\n\t\t\t\t\t\t\t\t.open=${this._dropdownOpen}\n\t\t\t\t\t\t\t\t@close=${() => (this._dropdownOpen = false)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tslot=\"trigger\"\n\t\t\t\t\t\t\t\t\tclass=\"select-trigger ${this._dropdownOpen ? 'open' : ''}\"\n\t\t\t\t\t\t\t\t\t@click=${() => (this._dropdownOpen = !this._dropdownOpen)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span>${selectedAdapter?.name ?? 'Select...'}</span>\n\t\t\t\t\t\t\t\t\t<span class=\"chevron\">▼</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<div slot=\"popover\">\n\t\t\t\t\t\t\t\t\t${creatableAdapters.map(\n\t\t\t\t\t\t\t\t\t\t(a) => html`\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"select-option ${a.id === (selectedAdapter?.id ?? '')\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'selected'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: ''}\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis._selectedAdapterId = a.id;\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis._dropdownOpen = false;\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis._error = null;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t${a.name}\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</dev-wallet-dropdown>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`\n\t\t\t\t: nothing}\n\t\t\t<div class=\"field\">\n\t\t\t\t<label class=\"field-label\">Label</label>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"field-input\"\n\t\t\t\t\tpart=\"label-input\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tplaceholder=\"e.g. Test Account\"\n\t\t\t\t\t.value=${this._label}\n\t\t\t\t\t@input=${this.#handleLabelInput}\n\t\t\t\t\t@keydown=${this.#handleKeydown}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"actions\">\n\t\t\t\t<button class=\"btn btn-cancel\" part=\"cancel-button\" @click=${this.#handleCancel}>\n\t\t\t\t\tCancel\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tclass=\"btn btn-create\"\n\t\t\t\t\tpart=\"create-button\"\n\t\t\t\t\t?disabled=${this._creating}\n\t\t\t\t\t@click=${this.#handleCreate}\n\t\t\t\t>\n\t\t\t\t\t${this._creating ? 'Creating...' : 'Create'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t`;\n\t}\n\n\t#renderImportList() {\n\t\tif (this._loadingImports) {\n\t\t\treturn html`<div class=\"loading\">Loading accounts...</div>\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<button class=\"btn btn-cancel\" part=\"cancel-button\" @click=${this.#handleCancel}>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t</div>`;\n\t\t}\n\n\t\tif (this._availableAccounts.length === 0) {\n\t\t\treturn html`<div class=\"empty-state\">\n\t\t\t\t\t${this.#hasUnpairedImportableAdapters\n\t\t\t\t\t\t? 'Open the token URL from your terminal to connect CLI accounts.'\n\t\t\t\t\t\t: 'No accounts available to import'}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t<button class=\"btn btn-cancel\" part=\"cancel-button\" @click=${this.#handleCancel}>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t</div>`;\n\t\t}\n\n\t\treturn html`\n\t\t\t<div class=\"import-list\">\n\t\t\t\t${this._availableAccounts.map((account) => {\n\t\t\t\t\tconst selected = this._selectedImports.has(account.address);\n\t\t\t\t\treturn html`\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"import-item ${selected ? 'selected' : ''}\"\n\t\t\t\t\t\t\trole=\"checkbox\"\n\t\t\t\t\t\t\taria-checked=\"${selected}\"\n\t\t\t\t\t\t\t?disabled=${this._creating}\n\t\t\t\t\t\t\t@click=${() => this.#toggleImportSelection(account.address)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"import-checkbox ${selected ? 'checked' : ''}\"\n\t\t\t\t\t\t\t\t>${selected ? '✓' : ''}</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"import-item-info\">\n\t\t\t\t\t\t\t\t<div class=\"import-item-label\">\n\t\t\t\t\t\t\t\t\t${account.alias || formatAddress(account.address)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"import-item-address\">${formatAddress(account.address)}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<span class=\"import-item-badge\">${account.scheme}</span>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t`;\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t<div class=\"actions\">\n\t\t\t\t<button class=\"btn btn-cancel\" part=\"cancel-button\" @click=${this.#handleCancel}>\n\t\t\t\t\tCancel\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tclass=\"btn btn-create\"\n\t\t\t\t\tpart=\"create-button\"\n\t\t\t\t\t?disabled=${this._creating || this._selectedImports.size === 0}\n\t\t\t\t\t@click=${this.#handleImportSelected}\n\t\t\t\t>\n\t\t\t\t\t${this._creating\n\t\t\t\t\t\t? 'Importing...'\n\t\t\t\t\t\t: `Import${this._selectedImports.size > 0 ? ` (${this._selectedImports.size})` : ''}`}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t`;\n\t}\n\n\tasync #loadAvailableAccounts() {\n\t\tthis._loadingImports = true;\n\t\tthis._availableAccounts = [];\n\n\t\ttry {\n\t\t\tconst results: AvailableAccount[] = [];\n\t\t\tfor (const adapter of this.#importableAdapters) {\n\t\t\t\tconst accounts = await adapter.listAvailableAccounts!();\n\t\t\t\tfor (const account of accounts) {\n\t\t\t\t\tresults.push({\n\t\t\t\t\t\tadapterId: adapter.id,\n\t\t\t\t\t\tadapterName: adapter.name,\n\t\t\t\t\t\taddress: account.address,\n\t\t\t\t\t\tscheme: account.scheme,\n\t\t\t\t\t\talias: 'alias' in account ? (account.alias as string | null) : null,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._availableAccounts = results;\n\t\t} catch (error) {\n\t\t\tthis._error = getErrorMessage(error, 'Failed to load accounts');\n\t\t} finally {\n\t\t\tthis._loadingImports = false;\n\t\t}\n\t}\n\n\t#handleLabelInput(e: InputEvent) {\n\t\tthis._label = (e.target as HTMLInputElement).value;\n\t\tthis._error = null;\n\t}\n\n\t#handleKeydown(e: KeyboardEvent) {\n\t\tif (e.key === 'Enter' && !this._creating) {\n\t\t\tthis.#handleCreate();\n\t\t} else if (e.key === 'Escape') {\n\t\t\tthis.#close();\n\t\t}\n\t}\n\n\t#handleCancel() {\n\t\tthis.#close();\n\t}\n\n\tasync #handleCreate() {\n\t\tconst creatableAdapters = this.#creatableAdapters;\n\t\tif (creatableAdapters.length === 0) return;\n\n\t\tconst adapter =\n\t\t\tcreatableAdapters.find((a) => a.id === this._selectedAdapterId) ?? creatableAdapters[0];\n\t\tif (!adapter?.createAccount) return;\n\n\t\tthis._creating = true;\n\t\tthis._error = null;\n\n\t\ttry {\n\t\t\tconst options: Record<string, unknown> = {};\n\t\t\tif (this._label.trim()) {\n\t\t\t\toptions.label = this._label.trim();\n\t\t\t}\n\t\t\tawait adapter.createAccount(options);\n\t\t\tthis.#close();\n\t\t\temitEvent(this, 'account-created');\n\t\t} catch (error) {\n\t\t\tthis._error = getErrorMessage(error, 'Failed to create account');\n\t\t} finally {\n\t\t\tthis._creating = false;\n\t\t}\n\t}\n\n\t#toggleImportSelection(address: string) {\n\t\tthis._selectedImports = toggleSetItem(this._selectedImports, address);\n\t}\n\n\tasync #handleImportSelected() {\n\t\tconst selected = this._availableAccounts.filter((a) => this._selectedImports.has(a.address));\n\t\tif (selected.length === 0) return;\n\n\t\tthis._creating = true;\n\t\tthis._error = null;\n\n\t\ttry {\n\t\t\tfor (const account of selected) {\n\t\t\t\tconst adapter = this.#importableAdapters.find((a) => a.id === account.adapterId);\n\t\t\t\tif (!adapter?.importAccount) continue;\n\t\t\t\tawait adapter.importAccount({ address: account.address });\n\t\t\t}\n\t\t\tthis.#close();\n\t\t\temitEvent(this, 'account-created');\n\t\t} catch (error) {\n\t\t\tthis._error = getErrorMessage(error, 'Failed to import account');\n\t\t} finally {\n\t\t\tthis._creating = false;\n\t\t}\n\t}\n\n\t#close() {\n\t\tthis._label = '';\n\t\tthis._selectedAdapterId = '';\n\t\tthis._error = null;\n\t\tthis._availableAccounts = [];\n\t\tthis._selectedImports = new Set();\n\t\tthis._mode = 'create';\n\t\tthis._dropdownOpen = false;\n\t\t// Don't mutate `this.open` — let the parent control it via the `close` event\n\t\temitEvent(this, 'close');\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-new-account': DevWalletNewAccount;\n\t}\n}\n"],"mappings":"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"}
@@ -1,11 +1,10 @@
1
- import * as _$lit from "lit";
2
1
  import { LitElement, nothing } from "lit";
3
2
  import { ClientWithCoreApi } from "@mysten/sui/client";
4
3
 
5
4
  //#region src/ui/dev-wallet-objects.d.ts
6
5
  declare class DevWalletObjects extends LitElement {
7
6
  #private;
8
- static styles: (_$lit.CSSResult | _$lit.CSSResult[])[];
7
+ static styles: (import("lit").CSSResult | import("lit").CSSResult[])[];
9
8
  address: string;
10
9
  client: ClientWithCoreApi | null;
11
10
  private _objects;
@@ -14,7 +13,7 @@ declare class DevWalletObjects extends LitElement {
14
13
  private _error;
15
14
  private _hasNextPage;
16
15
  willUpdate(changedProperties: Map<string, unknown>): void;
17
- render(): _$lit.TemplateResult<1> | typeof nothing;
16
+ render(): import("lit").TemplateResult<1> | typeof nothing;
18
17
  }
19
18
  declare global {
20
19
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-objects.d.mts","names":[],"sources":["../../src/ui/dev-wallet-objects.ts"],"mappings":";;;;;cAsBa,gBAAA,SAAyB,UAAA;EAAA;SACrB,MAAA,GADa,KAAA,CACP,SAAA,GAAA,KAAA,CAAA,SAAA;EAgKtB,OAAA;EAGA,MAAA,EAAQ,iBAAA;EAAA,QAGA,QAAA;EAAA,QAGA,QAAA;EAAA,QAGA,YAAA;EAAA,QAGA,MAAA;EAAA,QAGA,YAAA;EAQC,UAAA,CAAW,iBAAA,EAAmB,GAAA;EAW9B,MAAA,CAAA,GAXiC,KAAA,CAW3B,cAAA,aAAA,OAAA;AAAA;AAAA,QAuJR,MAAA;EAAA,UACG,qBAAA;IACT,oBAAA,EAAsB,gBAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"dev-wallet-objects.d.mts","names":[],"sources":["../../src/ui/dev-wallet-objects.ts"],"mappings":";;;;cAsBa,gBAAA,SAAyB,UAAA;EAAA;SACrB,MAAA,iBAAM,SAAA,iBAAA,SAAA;EAgKtB,OAAA;EAGA,MAAA,EAAQ,iBAAA;EAAA,QAGA,QAAA;EAAA,QAGA,QAAA;EAAA,QAGA,YAAA;EAAA,QAGA,MAAA;EAAA,QAGA,YAAA;EAQC,UAAA,CAAW,iBAAA,EAAmB,GAAA;EAW9B,MAAA,kBAAM,cAAA,aAAA,OAAA;AAAA;AAAA,QAuJR,MAAA;EAAA,UACG,qBAAA;IACT,oBAAA,EAAsB,gBAAgB;EAAA;AAAA"}
@@ -1,7 +1,7 @@
1
1
  import { sectionHeaderStyles, sharedStyles, stateStyles } from "./styles.mjs";
2
2
  import { getTypeName, isCoinType } from "./utils.mjs";
3
3
  import { CopyController } from "./copy-controller.mjs";
4
- import { __decorate } from "../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.mjs";
4
+ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.135.0/helpers/esm/decorate.mjs";
5
5
  import { LitElement, css, html, nothing } from "lit";
6
6
  import { customElement, property, state } from "lit/decorators.js";
7
7
  //#region src/ui/dev-wallet-objects.ts