@mysten-incubation/dev-wallet 0.0.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/LICENSE +189 -0
  3. package/dist/_virtual/{_@oxc-project_runtime@0.107.0 → _@oxc-project_runtime@0.127.0}/helpers/decorate.mjs +2 -3
  4. package/dist/adapters/base-adapter.mjs +6 -7
  5. package/dist/adapters/base-adapter.mjs.map +1 -1
  6. package/dist/adapters/browser.d.mts +4 -1
  7. package/dist/adapters/browser.mjs +4 -2
  8. package/dist/adapters/build-managed-account.mjs +8 -10
  9. package/dist/adapters/build-managed-account.mjs.map +1 -1
  10. package/dist/adapters/devstack-adapter.d.mts +111 -0
  11. package/dist/adapters/devstack-adapter.d.mts.map +1 -0
  12. package/dist/adapters/devstack-adapter.mjs +224 -0
  13. package/dist/adapters/devstack-adapter.mjs.map +1 -0
  14. package/dist/adapters/devstack-paths.d.mts +12 -0
  15. package/dist/adapters/devstack-paths.d.mts.map +1 -0
  16. package/dist/adapters/devstack-paths.mjs +12 -0
  17. package/dist/adapters/devstack-paths.mjs.map +1 -0
  18. package/dist/adapters/fork-relay.d.mts +109 -0
  19. package/dist/adapters/fork-relay.d.mts.map +1 -0
  20. package/dist/adapters/fork-relay.mjs +208 -0
  21. package/dist/adapters/fork-relay.mjs.map +1 -0
  22. package/dist/adapters/idb-store.mjs +12 -16
  23. package/dist/adapters/idb-store.mjs.map +1 -1
  24. package/dist/adapters/in-memory-adapter.mjs +4 -10
  25. package/dist/adapters/in-memory-adapter.mjs.map +1 -1
  26. package/dist/adapters/passkey-adapter.mjs +4 -12
  27. package/dist/adapters/passkey-adapter.mjs.map +1 -1
  28. package/dist/adapters/remote-cli-adapter.mjs +37 -72
  29. package/dist/adapters/remote-cli-adapter.mjs.map +1 -1
  30. package/dist/adapters/webcrypto-adapter.mjs +2 -4
  31. package/dist/adapters/webcrypto-adapter.mjs.map +1 -1
  32. package/dist/bin/cli.mjs +9 -22
  33. package/dist/bin/cli.mjs.map +1 -1
  34. package/dist/client/dev-wallet-client.mjs +13 -28
  35. package/dist/client/dev-wallet-client.mjs.map +1 -1
  36. package/dist/client/index.mjs +1 -2
  37. package/dist/client/request-handler.mjs +36 -42
  38. package/dist/client/request-handler.mjs.map +1 -1
  39. package/dist/index.mjs +1 -2
  40. package/dist/react/components.d.mts +9 -9
  41. package/dist/react/components.d.mts.map +1 -1
  42. package/dist/react/components.mjs +2 -5
  43. package/dist/react/components.mjs.map +1 -1
  44. package/dist/react/context.d.mts +3 -3
  45. package/dist/react/context.d.mts.map +1 -1
  46. package/dist/react/context.mjs +3 -8
  47. package/dist/react/context.mjs.map +1 -1
  48. package/dist/react/index.mjs +1 -2
  49. package/dist/react/useDevWallet.d.mts +3 -0
  50. package/dist/react/useDevWallet.d.mts.map +1 -1
  51. package/dist/react/useDevWallet.mjs +9 -14
  52. package/dist/react/useDevWallet.mjs.map +1 -1
  53. package/dist/server/cli-signing-middleware.mjs +7 -20
  54. package/dist/server/cli-signing-middleware.mjs.map +1 -1
  55. package/dist/server/index.mjs +1 -2
  56. package/dist/standalone/assets/{in-memory-adapter-CBF4h2KD.js → in-memory-adapter-qRkNfj9O.js} +1 -1
  57. package/dist/standalone/assets/main-DDltQnzR.js +3954 -0
  58. package/dist/standalone/assets/{webcrypto-adapter-DysAubFb.js → webcrypto-adapter-FejcrL9x.js} +1 -1
  59. package/dist/standalone/index.html +11 -12
  60. package/dist/ui/copy-controller.mjs +3 -3
  61. package/dist/ui/copy-controller.mjs.map +1 -1
  62. package/dist/ui/dev-wallet-account-selector.d.mts +3 -4
  63. package/dist/ui/dev-wallet-account-selector.d.mts.map +1 -1
  64. package/dist/ui/dev-wallet-account-selector.mjs +48 -25
  65. package/dist/ui/dev-wallet-account-selector.mjs.map +1 -1
  66. package/dist/ui/dev-wallet-accounts.d.mts +9 -4
  67. package/dist/ui/dev-wallet-accounts.d.mts.map +1 -1
  68. package/dist/ui/dev-wallet-accounts.mjs +62 -140
  69. package/dist/ui/dev-wallet-accounts.mjs.map +1 -1
  70. package/dist/ui/dev-wallet-balances.d.mts +10 -3
  71. package/dist/ui/dev-wallet-balances.d.mts.map +1 -1
  72. package/dist/ui/dev-wallet-balances.mjs +241 -43
  73. package/dist/ui/dev-wallet-balances.mjs.map +1 -1
  74. package/dist/ui/dev-wallet-connect.d.mts +3 -3
  75. package/dist/ui/dev-wallet-connect.d.mts.map +1 -1
  76. package/dist/ui/dev-wallet-connect.mjs +24 -16
  77. package/dist/ui/dev-wallet-connect.mjs.map +1 -1
  78. package/dist/ui/dev-wallet-dropdown.d.mts +3 -3
  79. package/dist/ui/dev-wallet-dropdown.d.mts.map +1 -1
  80. package/dist/ui/dev-wallet-dropdown.mjs +37 -47
  81. package/dist/ui/dev-wallet-dropdown.mjs.map +1 -1
  82. package/dist/ui/dev-wallet-fork-panel.d.mts +43 -0
  83. package/dist/ui/dev-wallet-fork-panel.d.mts.map +1 -0
  84. package/dist/ui/dev-wallet-fork-panel.mjs +500 -0
  85. package/dist/ui/dev-wallet-fork-panel.mjs.map +1 -0
  86. package/dist/ui/dev-wallet-network-badge.d.mts +3 -4
  87. package/dist/ui/dev-wallet-network-badge.d.mts.map +1 -1
  88. package/dist/ui/dev-wallet-network-badge.mjs +52 -21
  89. package/dist/ui/dev-wallet-network-badge.mjs.map +1 -1
  90. package/dist/ui/dev-wallet-new-account.d.mts +3 -4
  91. package/dist/ui/dev-wallet-new-account.d.mts.map +1 -1
  92. package/dist/ui/dev-wallet-new-account.mjs +31 -105
  93. package/dist/ui/dev-wallet-new-account.mjs.map +1 -1
  94. package/dist/ui/dev-wallet-objects.d.mts +3 -3
  95. package/dist/ui/dev-wallet-objects.d.mts.map +1 -1
  96. package/dist/ui/dev-wallet-objects.mjs +76 -39
  97. package/dist/ui/dev-wallet-objects.mjs.map +1 -1
  98. package/dist/ui/dev-wallet-panel.d.mts +24 -4
  99. package/dist/ui/dev-wallet-panel.d.mts.map +1 -1
  100. package/dist/ui/dev-wallet-panel.mjs +247 -64
  101. package/dist/ui/dev-wallet-panel.mjs.map +1 -1
  102. package/dist/ui/dev-wallet-popup.d.mts +3 -5
  103. package/dist/ui/dev-wallet-popup.d.mts.map +1 -1
  104. package/dist/ui/dev-wallet-popup.mjs +19 -15
  105. package/dist/ui/dev-wallet-popup.mjs.map +1 -1
  106. package/dist/ui/dev-wallet-settings.d.mts +3 -4
  107. package/dist/ui/dev-wallet-settings.d.mts.map +1 -1
  108. package/dist/ui/dev-wallet-settings.mjs +149 -97
  109. package/dist/ui/dev-wallet-settings.mjs.map +1 -1
  110. package/dist/ui/dev-wallet-signing-modal.d.mts +11 -4
  111. package/dist/ui/dev-wallet-signing-modal.d.mts.map +1 -1
  112. package/dist/ui/dev-wallet-signing-modal.mjs +46 -18
  113. package/dist/ui/dev-wallet-signing-modal.mjs.map +1 -1
  114. package/dist/ui/dev-wallet-signing.d.mts +9 -3
  115. package/dist/ui/dev-wallet-signing.d.mts.map +1 -1
  116. package/dist/ui/dev-wallet-signing.mjs +119 -130
  117. package/dist/ui/dev-wallet-signing.mjs.map +1 -1
  118. package/dist/ui/dev-wallet-standalone.d.mts +8 -3
  119. package/dist/ui/dev-wallet-standalone.d.mts.map +1 -1
  120. package/dist/ui/dev-wallet-standalone.mjs +303 -38
  121. package/dist/ui/dev-wallet-standalone.mjs.map +1 -1
  122. package/dist/ui/dev-wallet-tab-bar.d.mts +13 -5
  123. package/dist/ui/dev-wallet-tab-bar.d.mts.map +1 -1
  124. package/dist/ui/dev-wallet-tab-bar.mjs +143 -82
  125. package/dist/ui/dev-wallet-tab-bar.mjs.map +1 -1
  126. package/dist/ui/index.d.mts +3 -2
  127. package/dist/ui/index.mjs +2 -2
  128. package/dist/ui/mount.d.mts +14 -1
  129. package/dist/ui/mount.d.mts.map +1 -1
  130. package/dist/ui/mount.mjs +5 -2
  131. package/dist/ui/mount.mjs.map +1 -1
  132. package/dist/ui/styles.mjs +428 -66
  133. package/dist/ui/styles.mjs.map +1 -1
  134. package/dist/ui/transaction-analyzer.mjs +19 -30
  135. package/dist/ui/transaction-analyzer.mjs.map +1 -1
  136. package/dist/ui/utils.d.mts +59 -0
  137. package/dist/ui/utils.d.mts.map +1 -0
  138. package/dist/ui/utils.mjs +42 -15
  139. package/dist/ui/utils.mjs.map +1 -1
  140. package/dist/ui/wallet-controller.mjs +89 -20
  141. package/dist/ui/wallet-controller.mjs.map +1 -1
  142. package/dist/wallet/constants.d.mts +9 -0
  143. package/dist/wallet/constants.d.mts.map +1 -0
  144. package/dist/wallet/constants.mjs +1 -1
  145. package/dist/wallet/dev-wallet.mjs +42 -99
  146. package/dist/wallet/dev-wallet.mjs.map +1 -1
  147. package/dist/wallet/initializer.d.mts +3 -0
  148. package/dist/wallet/initializer.d.mts.map +1 -1
  149. package/dist/wallet/initializer.mjs +9 -14
  150. package/dist/wallet/initializer.mjs.map +1 -1
  151. package/dist/wallet/signing.mjs +8 -21
  152. package/dist/wallet/signing.mjs.map +1 -1
  153. package/package.json +8 -6
  154. package/src/adapters/browser.ts +21 -0
  155. package/src/adapters/devstack-adapter.ts +342 -0
  156. package/src/adapters/devstack-paths.ts +16 -0
  157. package/src/adapters/fork-relay.ts +321 -0
  158. package/src/app/index.html +10 -11
  159. package/src/react/useDevWallet.ts +5 -1
  160. package/src/ui/dev-wallet-account-selector.ts +44 -17
  161. package/src/ui/dev-wallet-accounts.ts +87 -124
  162. package/src/ui/dev-wallet-balances.ts +248 -27
  163. package/src/ui/dev-wallet-connect.ts +19 -8
  164. package/src/ui/dev-wallet-dropdown.ts +7 -5
  165. package/src/ui/dev-wallet-fork-panel.ts +591 -0
  166. package/src/ui/dev-wallet-network-badge.ts +49 -10
  167. package/src/ui/dev-wallet-new-account.ts +21 -62
  168. package/src/ui/dev-wallet-objects.ts +59 -19
  169. package/src/ui/dev-wallet-panel.ts +261 -42
  170. package/src/ui/dev-wallet-popup.ts +12 -6
  171. package/src/ui/dev-wallet-settings.ts +159 -94
  172. package/src/ui/dev-wallet-signing-modal.ts +47 -7
  173. package/src/ui/dev-wallet-signing.ts +124 -97
  174. package/src/ui/dev-wallet-standalone.ts +310 -22
  175. package/src/ui/dev-wallet-tab-bar.ts +132 -70
  176. package/src/ui/index.ts +3 -0
  177. package/src/ui/mount.ts +23 -1
  178. package/src/ui/styles.ts +434 -58
  179. package/src/ui/utils.ts +66 -0
  180. package/src/ui/wallet-controller.ts +103 -5
  181. package/src/wallet/initializer.ts +7 -1
  182. package/dist/standalone/assets/main-VE4olb-Q.js +0 -2841
@@ -1,19 +1,20 @@
1
- import { actionButtonStyles, sectionHeaderStyles, sharedStyles } from "./styles.mjs";
2
- import { emitEvent, findAdapterForAddress, formatAddress, getErrorMessage } from "./utils.mjs";
1
+ import { actionButtonStyles, avatarStyles, badgeStyles, cardItemStyles, copyableTextStyles, dialogStyles, formInputStyles, iconButtonStyles, inlineErrorStyles, listContainerStyles, monoTruncateStyles, sectionHeaderStyles, sharedStyles } from "./styles.mjs";
2
+ import { emitEvent, findAdapterForAddress, formatAddress, getErrorMessage, isForkNetwork } from "./utils.mjs";
3
3
  import { CopyController } from "./copy-controller.mjs";
4
- import { __decorate } from "../_virtual/_@oxc-project_runtime@0.107.0/helpers/decorate.mjs";
4
+ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.mjs";
5
5
  import "./dev-wallet-new-account.mjs";
6
6
  import { LitElement, css, html, nothing } from "lit";
7
7
  import { customElement, property, state } from "lit/decorators.js";
8
-
9
8
  //#region src/ui/dev-wallet-accounts.ts
10
- let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
9
+ let DevWalletAccounts = class DevWalletAccounts extends LitElement {
11
10
  constructor(..._args) {
12
11
  super(..._args);
13
12
  this.accounts = [];
14
13
  this.adapters = [];
15
14
  this.activeAddress = "";
15
+ this.network = "";
16
16
  this._dialogOpen = false;
17
+ this.#copy = new CopyController(this);
17
18
  this._editingAddress = null;
18
19
  this._editingLabel = "";
19
20
  this._confirmDeleteAddress = null;
@@ -25,11 +26,17 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
25
26
  sharedStyles,
26
27
  sectionHeaderStyles,
27
28
  actionButtonStyles,
29
+ cardItemStyles,
30
+ listContainerStyles,
31
+ copyableTextStyles,
32
+ monoTruncateStyles,
33
+ iconButtonStyles,
34
+ inlineErrorStyles,
35
+ badgeStyles,
36
+ avatarStyles,
37
+ dialogStyles,
38
+ formInputStyles,
28
39
  css`
29
- :host {
30
- display: block;
31
- }
32
-
33
40
  .accounts-header {
34
41
  display: flex;
35
42
  justify-content: space-between;
@@ -42,30 +49,22 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
42
49
  }
43
50
 
44
51
  .add-btn {
52
+ height: 26px;
45
53
  font-size: 12px;
46
54
  color: var(--dev-wallet-primary);
47
- padding: 4px 8px;
48
- border-radius: var(--dev-wallet-radius-sm);
55
+ padding: 0 8px;
56
+ border-radius: var(--dev-wallet-radius);
57
+ border: 1px solid var(--dev-wallet-border);
49
58
  }
50
59
 
51
60
  .add-btn:hover {
52
- background: color-mix(in oklab, var(--dev-wallet-primary) 15%, transparent);
53
- }
54
-
55
- .account-list {
56
- display: flex;
57
- flex-direction: column;
58
- gap: 4px;
61
+ background: var(--dev-wallet-accent-fade);
62
+ border-color: var(--dev-wallet-border-strong);
59
63
  }
60
64
 
61
65
  .account-item {
62
- display: flex;
63
- align-items: center;
64
66
  gap: 10px;
65
- padding: 10px 12px;
66
- border-radius: var(--dev-wallet-radius-sm);
67
- border: 1px solid var(--dev-wallet-border);
68
- background: var(--dev-wallet-secondary);
67
+ padding: 9px 10px;
69
68
  width: 100%;
70
69
  text-align: left;
71
70
  }
@@ -75,22 +74,13 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
75
74
  }
76
75
 
77
76
  .account-item.active {
78
- border-color: var(--dev-wallet-primary);
79
- background: color-mix(in oklab, var(--dev-wallet-primary) 10%, var(--dev-wallet-secondary));
77
+ background: var(--dev-wallet-accent-fade);
80
78
  }
81
79
 
82
80
  .account-avatar {
83
81
  width: 32px;
84
82
  height: 32px;
85
- border-radius: 50%;
86
- background: var(--dev-wallet-primary);
87
- display: flex;
88
- align-items: center;
89
- justify-content: center;
90
83
  font-size: 14px;
91
- font-weight: var(--dev-wallet-font-weight-semibold);
92
- color: var(--dev-wallet-primary-foreground);
93
- flex-shrink: 0;
94
84
  }
95
85
 
96
86
  .account-info {
@@ -101,28 +91,11 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
101
91
  .account-label {
102
92
  font-size: 14px;
103
93
  font-weight: var(--dev-wallet-font-weight-medium);
104
- color: var(--dev-wallet-foreground);
105
94
  }
106
95
 
107
96
  .account-address {
108
97
  font-size: 12px;
109
- color: var(--dev-wallet-muted-foreground);
110
- font-family: var(--dev-wallet-font-mono);
111
- overflow: hidden;
112
- text-overflow: ellipsis;
113
- white-space: nowrap;
114
- cursor: pointer;
115
- border-radius: var(--dev-wallet-radius-2xs);
116
98
  padding: 1px 2px;
117
- transition: background 0.15s;
118
- }
119
-
120
- .account-address:hover {
121
- background: color-mix(in oklab, var(--dev-wallet-primary) 15%, transparent);
122
- }
123
-
124
- .account-address.copied {
125
- color: var(--dev-wallet-positive);
126
99
  }
127
100
 
128
101
  .account-label-row {
@@ -131,26 +104,28 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
131
104
  gap: 4px;
132
105
  }
133
106
 
134
- .edit-label-btn {
107
+ .edit-label-btn,
108
+ .delete-btn {
135
109
  width: 18px;
136
110
  height: 18px;
137
- display: inline-flex;
138
- align-items: center;
139
- justify-content: center;
140
111
  border-radius: var(--dev-wallet-radius-2xs);
141
112
  font-size: 11px;
142
- color: var(--dev-wallet-muted-foreground);
143
113
  opacity: 0;
144
114
  transition: opacity 0.15s;
145
115
  }
146
116
 
147
- .account-item:hover .edit-label-btn {
117
+ .delete-btn {
118
+ flex-shrink: 0;
119
+ }
120
+
121
+ .account-item:hover .edit-label-btn,
122
+ .account-item:hover .delete-btn {
148
123
  opacity: 1;
149
124
  }
150
125
 
151
- .edit-label-btn:hover {
152
- background: var(--dev-wallet-border);
153
- color: var(--dev-wallet-foreground);
126
+ .delete-btn:hover {
127
+ background: color-mix(in oklab, var(--dev-wallet-destructive) 20%, transparent);
128
+ color: var(--dev-wallet-destructive);
154
129
  }
155
130
 
156
131
  .edit-label-input {
@@ -158,75 +133,23 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
158
133
  border-radius: var(--dev-wallet-radius-2xs);
159
134
  border: 1px solid var(--dev-wallet-primary);
160
135
  background: var(--dev-wallet-background);
161
- color: var(--dev-wallet-foreground);
162
136
  font-size: 13px;
163
- font-family: inherit;
164
- outline: none;
165
- width: 100%;
166
137
  }
167
138
 
168
139
  .account-badge {
169
- font-size: 10px;
170
- padding: 1px 6px;
171
- border-radius: var(--dev-wallet-radius-xs);
172
- background: var(--dev-wallet-secondary);
173
- border: 1px solid var(--dev-wallet-border);
174
- color: var(--dev-wallet-muted-foreground);
175
- font-weight: var(--dev-wallet-font-weight-medium);
176
- text-transform: uppercase;
177
- letter-spacing: 0.3px;
178
- white-space: nowrap;
179
- }
180
-
181
- .delete-btn {
182
- width: 18px;
183
- height: 18px;
140
+ height: 16px;
184
141
  display: inline-flex;
185
142
  align-items: center;
186
- justify-content: center;
187
- border-radius: var(--dev-wallet-radius-2xs);
188
- font-size: 11px;
189
- color: var(--dev-wallet-muted-foreground);
190
- opacity: 0;
191
- transition: opacity 0.15s;
192
- flex-shrink: 0;
193
- }
194
-
195
- .account-item:hover .delete-btn {
196
- opacity: 1;
197
- }
198
-
199
- .delete-btn:hover {
200
- background: color-mix(in oklab, var(--dev-wallet-destructive) 20%, transparent);
201
- color: var(--dev-wallet-destructive);
202
- }
203
-
204
- .confirm-dialog:not([open]) {
205
- display: none;
143
+ padding: 0 5px;
144
+ border-radius: 999px;
145
+ background: var(--dev-wallet-bg-3);
146
+ border: 1px solid var(--dev-wallet-border);
147
+ color: var(--dev-wallet-text-3);
206
148
  }
207
149
 
208
150
  .confirm-dialog {
209
151
  width: 300px;
210
- max-width: calc(100vw - 32px);
211
- border-radius: var(--dev-wallet-radius-xl);
212
- background: var(--dev-wallet-background);
213
- border: 1px solid var(--dev-wallet-border);
214
- box-shadow: var(--dev-wallet-shadow-lg);
215
152
  padding: 20px;
216
- display: flex;
217
- flex-direction: column;
218
- color: inherit;
219
- }
220
-
221
- .confirm-dialog::backdrop {
222
- background: color-mix(in oklab, oklch(0 0 0) 50%, transparent);
223
- }
224
-
225
- .confirm-title {
226
- font-size: 16px;
227
- font-weight: var(--dev-wallet-font-weight-semibold);
228
- color: var(--dev-wallet-foreground);
229
- margin-bottom: 12px;
230
153
  }
231
154
 
232
155
  .confirm-body {
@@ -238,8 +161,8 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
238
161
 
239
162
  .confirm-account {
240
163
  padding: 8px 10px;
241
- border-radius: var(--dev-wallet-radius-sm);
242
- background: var(--dev-wallet-secondary);
164
+ border-radius: var(--dev-wallet-radius-lg);
165
+ background: var(--dev-wallet-bg-2);
243
166
  border: 1px solid var(--dev-wallet-border);
244
167
  margin-bottom: 16px;
245
168
  }
@@ -252,8 +175,6 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
252
175
 
253
176
  .confirm-account-address {
254
177
  font-size: 11px;
255
- color: var(--dev-wallet-muted-foreground);
256
- font-family: var(--dev-wallet-font-mono);
257
178
  }
258
179
 
259
180
  .confirm-actions {
@@ -262,8 +183,6 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
262
183
  }
263
184
 
264
185
  .confirm-error {
265
- color: var(--dev-wallet-destructive);
266
- font-size: 12px;
267
186
  margin-bottom: 8px;
268
187
  }
269
188
 
@@ -276,14 +195,21 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
276
195
  `
277
196
  ];
278
197
  }
279
- #copy = new CopyController(this);
198
+ #copy;
280
199
  render() {
281
200
  const canAdd = this.adapters.some((a) => "createAccount" in a && a.createAccount || "importAccount" in a && a.importAccount && "listAvailableAccounts" in a && a.listAvailableAccounts);
201
+ const fork = this.network !== "" && isForkNetwork(this.network);
282
202
  return html`
283
203
  <div class="accounts-header">
284
204
  <h3 class="section-header">Accounts</h3>
285
- ${canAdd ? html`<button class="add-btn" part="add-button" @click=${this.#openDialog}>
286
- + Add
205
+ ${canAdd ? html`<button
206
+ class="add-btn"
207
+ part="add-button"
208
+ ?disabled=${fork}
209
+ title=${fork ? `Disabled on ${this.network}: fork networks have no faucet — fund seed addresses via Sui({fork:{seed:{addresses}}}) instead.` : ""}
210
+ @click=${this.#openDialog}
211
+ >
212
+ + Add${fork ? " (fork: no faucet)" : ""}
287
213
  </button>` : nothing}
288
214
  </div>
289
215
  ${this.accounts.length === 0 ? html`<div class="empty-state" part="empty-state">No accounts yet</div>` : html`
@@ -382,8 +308,7 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
382
308
  #getAccountLabel(address, index) {
383
309
  const adapter = findAdapterForAddress(this.adapters, address);
384
310
  if (!adapter) return `Account ${index + 1}`;
385
- const managed = adapter.getAccount(address);
386
- return managed?.label ?? `Account ${index + 1}`;
311
+ return adapter.getAccount(address)?.label ?? `Account ${index + 1}`;
387
312
  }
388
313
  #canRename(address) {
389
314
  const adapter = findAdapterForAddress(this.adapters, address);
@@ -406,11 +331,9 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
406
331
  return;
407
332
  }
408
333
  try {
409
- for (const adapter of this.adapters) {
410
- if (adapter.getAccount(address) && adapter.renameAccount) {
411
- await adapter.renameAccount(address, label);
412
- break;
413
- }
334
+ for (const adapter of this.adapters) if (adapter.getAccount(address) && adapter.renameAccount) {
335
+ await adapter.renameAccount(address, label);
336
+ break;
414
337
  }
415
338
  } catch (e) {
416
339
  console.error("[dev-wallet] rename failed:", e);
@@ -458,8 +381,7 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
458
381
  try {
459
382
  const adapter = findAdapterForAddress(this.adapters, address);
460
383
  if (!adapter?.removeAccount) throw new Error("Adapter does not support removal");
461
- const removed = await adapter.removeAccount(address);
462
- if (!removed) throw new Error("Account not found");
384
+ if (!await adapter.removeAccount(address)) throw new Error("Account not found");
463
385
  this.#cancelDelete();
464
386
  emitEvent(this, "account-removed", { address });
465
387
  } catch (error) {
@@ -472,7 +394,6 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
472
394
  const address = this._confirmDeleteAddress;
473
395
  const index = this.accounts.findIndex((a) => a.address === address);
474
396
  const label = index >= 0 ? this.#getAccountLabel(address, index) : "Unknown";
475
- const imported = this.#isImportedAccount(address);
476
397
  return html`
477
398
  <dialog
478
399
  class="confirm-dialog"
@@ -481,9 +402,9 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
481
402
  this.#cancelDelete();
482
403
  }}
483
404
  >
484
- <div class="confirm-title">Remove Account</div>
405
+ <div class="dialog-title">Remove Account</div>
485
406
  <div class="confirm-body">
486
- ${imported ? "This will remove the imported account from your wallet. You can re-import it later." : "This will permanently delete this account and its keys. This cannot be undone."}
407
+ ${this.#isImportedAccount(address) ? "This will remove the imported account from your wallet. You can re-import it later." : "This will permanently delete this account and its keys. This cannot be undone."}
487
408
  </div>
488
409
  <div class="confirm-account">
489
410
  <div class="confirm-account-label">${label}</div>
@@ -511,6 +432,7 @@ let DevWalletAccounts = class DevWalletAccounts$1 extends LitElement {
511
432
  __decorate([property({ attribute: false })], DevWalletAccounts.prototype, "accounts", void 0);
512
433
  __decorate([property({ attribute: false })], DevWalletAccounts.prototype, "adapters", void 0);
513
434
  __decorate([property({ type: String })], DevWalletAccounts.prototype, "activeAddress", void 0);
435
+ __decorate([property({ type: String })], DevWalletAccounts.prototype, "network", void 0);
514
436
  __decorate([state()], DevWalletAccounts.prototype, "_dialogOpen", void 0);
515
437
  __decorate([state()], DevWalletAccounts.prototype, "_editingAddress", void 0);
516
438
  __decorate([state()], DevWalletAccounts.prototype, "_editingLabel", void 0);
@@ -518,7 +440,7 @@ __decorate([state()], DevWalletAccounts.prototype, "_confirmDeleteAddress", void
518
440
  __decorate([state()], DevWalletAccounts.prototype, "_deleting", void 0);
519
441
  __decorate([state()], DevWalletAccounts.prototype, "_deleteError", void 0);
520
442
  DevWalletAccounts = __decorate([customElement("dev-wallet-accounts")], DevWalletAccounts);
521
-
522
443
  //#endregion
523
444
  export { DevWalletAccounts };
445
+
524
446
  //# sourceMappingURL=dev-wallet-accounts.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-accounts.mjs","names":["DevWalletAccounts","#openDialog","#selectAccount","#saveLabel","#cancelEditLabel","#getAccountLabel","#getAdapterName","#canRename","#startEditLabel","#copy","#canRemove","#promptDelete","#renderConfirmDialog","#closeDialog","#confirmDelete","#cancelDelete","#isImportedAccount"],"sources":["../../src/ui/dev-wallet-accounts.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReadonlyWalletAccount } from '@mysten/wallet-standard';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport type { SignerAdapter } from '../types.js';\nimport { CopyController } from './copy-controller.js';\nimport { actionButtonStyles, sectionHeaderStyles, sharedStyles } from './styles.js';\nimport { emitEvent, findAdapterForAddress, formatAddress, getErrorMessage } from './utils.js';\nimport './dev-wallet-new-account.js';\n\n@customElement('dev-wallet-accounts')\nexport class DevWalletAccounts extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tsectionHeaderStyles,\n\t\tactionButtonStyles,\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t.accounts-header {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\talign-items: center;\n\t\t\t\tmargin-bottom: 12px;\n\t\t\t}\n\n\t\t\t.accounts-header .section-header {\n\t\t\t\tmargin-bottom: 0;\n\t\t\t}\n\n\t\t\t.add-btn {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tcolor: var(--dev-wallet-primary);\n\t\t\t\tpadding: 4px 8px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t}\n\n\t\t\t.add-btn: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.account-list {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tgap: 4px;\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: 10px;\n\t\t\t\tpadding: 10px 12px;\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-secondary);\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-align: left;\n\t\t\t}\n\n\t\t\t.account-item:hover {\n\t\t\t\tborder-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.account-item.active {\n\t\t\t\tborder-color: var(--dev-wallet-primary);\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.account-avatar {\n\t\t\t\twidth: 32px;\n\t\t\t\theight: 32px;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\tbackground: var(--dev-wallet-primary);\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: 14px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-semibold);\n\t\t\t\tcolor: var(--dev-wallet-primary-foreground);\n\t\t\t\tflex-shrink: 0;\n\t\t\t}\n\n\t\t\t.account-info {\n\t\t\t\tflex: 1;\n\t\t\t\tmin-width: 0;\n\t\t\t}\n\n\t\t\t.account-label {\n\t\t\t\tfont-size: 14px;\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.account-address {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tfont-family: var(--dev-wallet-font-mono);\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\tcursor: pointer;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-2xs);\n\t\t\t\tpadding: 1px 2px;\n\t\t\t\ttransition: background 0.15s;\n\t\t\t}\n\n\t\t\t.account-address: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.account-address.copied {\n\t\t\t\tcolor: var(--dev-wallet-positive);\n\t\t\t}\n\n\t\t\t.account-label-row {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 4px;\n\t\t\t}\n\n\t\t\t.edit-label-btn {\n\t\t\t\twidth: 18px;\n\t\t\t\theight: 18px;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-2xs);\n\t\t\t\tfont-size: 11px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\topacity: 0;\n\t\t\t\ttransition: opacity 0.15s;\n\t\t\t}\n\n\t\t\t.account-item:hover .edit-label-btn {\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.edit-label-btn:hover {\n\t\t\t\tbackground: var(--dev-wallet-border);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.edit-label-input {\n\t\t\t\tpadding: 2px 6px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-2xs);\n\t\t\t\tborder: 1px solid var(--dev-wallet-primary);\n\t\t\t\tbackground: var(--dev-wallet-background);\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tfont-size: 13px;\n\t\t\t\tfont-family: inherit;\n\t\t\t\toutline: none;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t.account-badge {\n\t\t\t\tfont-size: 10px;\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-secondary);\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-medium);\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\tletter-spacing: 0.3px;\n\t\t\t\twhite-space: nowrap;\n\t\t\t}\n\n\t\t\t.delete-btn {\n\t\t\t\twidth: 18px;\n\t\t\t\theight: 18px;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-2xs);\n\t\t\t\tfont-size: 11px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\topacity: 0;\n\t\t\t\ttransition: opacity 0.15s;\n\t\t\t\tflex-shrink: 0;\n\t\t\t}\n\n\t\t\t.account-item:hover .delete-btn {\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.delete-btn:hover {\n\t\t\t\tbackground: color-mix(in oklab, var(--dev-wallet-destructive) 20%, transparent);\n\t\t\t\tcolor: var(--dev-wallet-destructive);\n\t\t\t}\n\n\t\t\t.confirm-dialog:not([open]) {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\t.confirm-dialog {\n\t\t\t\twidth: 300px;\n\t\t\t\tmax-width: calc(100vw - 32px);\n\t\t\t\tborder-radius: var(--dev-wallet-radius-xl);\n\t\t\t\tbackground: var(--dev-wallet-background);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tbox-shadow: var(--dev-wallet-shadow-lg);\n\t\t\t\tpadding: 20px;\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tcolor: inherit;\n\t\t\t}\n\n\t\t\t.confirm-dialog::backdrop {\n\t\t\t\tbackground: color-mix(in oklab, oklch(0 0 0) 50%, transparent);\n\t\t\t}\n\n\t\t\t.confirm-title {\n\t\t\t\tfont-size: 16px;\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\tmargin-bottom: 12px;\n\t\t\t}\n\n\t\t\t.confirm-body {\n\t\t\t\tfont-size: 13px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tmargin-bottom: 8px;\n\t\t\t\tline-height: 1.4;\n\t\t\t}\n\n\t\t\t.confirm-account {\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-sm);\n\t\t\t\tbackground: var(--dev-wallet-secondary);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tmargin-bottom: 16px;\n\t\t\t}\n\n\t\t\t.confirm-account-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.confirm-account-address {\n\t\t\t\tfont-size: 11px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tfont-family: var(--dev-wallet-font-mono);\n\t\t\t}\n\n\t\t\t.confirm-actions {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 8px;\n\t\t\t}\n\n\t\t\t.confirm-error {\n\t\t\t\tcolor: var(--dev-wallet-destructive);\n\t\t\t\tfont-size: 12px;\n\t\t\t\tmargin-bottom: 8px;\n\t\t\t}\n\n\t\t\t.empty-state {\n\t\t\t\ttext-align: center;\n\t\t\t\tpadding: 24px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tfont-size: 14px;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ attribute: false })\n\taccounts: readonly ReadonlyWalletAccount[] = [];\n\n\t@property({ attribute: false })\n\tadapters: SignerAdapter[] = [];\n\n\t@property({ type: String })\n\tactiveAddress = '';\n\n\t@state()\n\tprivate _dialogOpen = false;\n\n\t#copy = new CopyController(this);\n\n\t@state()\n\tprivate _editingAddress: string | null = null;\n\n\t@state()\n\tprivate _editingLabel = '';\n\n\t@state()\n\tprivate _confirmDeleteAddress: string | null = null;\n\n\t@state()\n\tprivate _deleting = false;\n\n\t@state()\n\tprivate _deleteError: string | null = null;\n\n\toverride render() {\n\t\tconst canAdd = this.adapters.some(\n\t\t\t(a) =>\n\t\t\t\t('createAccount' in a && a.createAccount) ||\n\t\t\t\t('importAccount' in a &&\n\t\t\t\t\ta.importAccount &&\n\t\t\t\t\t'listAvailableAccounts' in a &&\n\t\t\t\t\ta.listAvailableAccounts),\n\t\t);\n\n\t\treturn html`\n\t\t\t<div class=\"accounts-header\">\n\t\t\t\t<h3 class=\"section-header\">Accounts</h3>\n\t\t\t\t${canAdd\n\t\t\t\t\t? html`<button class=\"add-btn\" part=\"add-button\" @click=${this.#openDialog}>\n\t\t\t\t\t\t\t+ Add\n\t\t\t\t\t\t</button>`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\t\t\t${this.accounts.length === 0\n\t\t\t\t? html`<div class=\"empty-state\" part=\"empty-state\">No accounts yet</div>`\n\t\t\t\t: html`\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"account-list\"\n\t\t\t\t\t\t\tpart=\"account-list\"\n\t\t\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\t\t\taria-label=\"Wallet accounts\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t${this.accounts.map(\n\t\t\t\t\t\t\t\t(account, index) => html`\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclass=\"account-item ${account.address === this.activeAddress ? 'active' : ''}\"\n\t\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\t\taria-selected=${account.address === this.activeAddress}\n\t\t\t\t\t\t\t\t\t\t@click=${() => this.#selectAccount(account)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div class=\"account-avatar\">${index + 1}</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"account-info\">\n\t\t\t\t\t\t\t\t\t\t\t${this._editingAddress === account.address\n\t\t\t\t\t\t\t\t\t\t\t\t? html`<input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"edit-label-input\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Rename account\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.value=${this._editingLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@input=${(e: InputEvent) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis._editingLabel = (e.target as HTMLInputElement).value;\n\t\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\t\t@keydown=${(e: KeyboardEvent) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === 'Enter') this.#saveLabel(account.address);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === 'Escape') this.#cancelEditLabel();\n\t\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\t\t@click=${(e: Event) => e.stopPropagation()}\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: html`<div class=\"account-label-row\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"account-label\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t${this.#getAccountLabel(account.address, index)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"account-badge\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>${this.#getAdapterName(account.address)}</span\n\t\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\t\t${this.#canRename(account.address)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"edit-label-btn\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Rename\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Rename account\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.#startEditLabel(account.address, index);\n\t\t\t\t\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\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&#9998;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>`\n\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</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\t\tclass=\"account-address ${this.#copy.isCopied(account.address)\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'copied'\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\ttitle=\"Click to copy\"\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Copy address\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.#copy.copy(account.address);\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\t@keydown=${(e: KeyboardEvent) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.#copy.copy(account.address);\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}}\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${this.#copy.isCopied(account.address)\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Copied!'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: formatAddress(account.address)}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t${this.#canRemove(account.address)\n\t\t\t\t\t\t\t\t\t\t\t? html`<button\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"delete-btn\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Remove account\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Remove account\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.#promptDelete(account.address);\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>\n\t\t\t\t\t\t\t\t\t\t\t\t\t&#128465;\n\t\t\t\t\t\t\t\t\t\t\t\t</button>`\n\t\t\t\t\t\t\t\t\t\t\t: nothing}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`}\n\t\t\t${this.#renderConfirmDialog()}\n\t\t\t<dev-wallet-new-account\n\t\t\t\t.adapters=${this.adapters}\n\t\t\t\t.open=${this._dialogOpen}\n\t\t\t\t@close=${this.#closeDialog}\n\t\t\t></dev-wallet-new-account>\n\t\t`;\n\t}\n\n\t#getAccountLabel(address: string, index: number): string {\n\t\tconst adapter = findAdapterForAddress(this.adapters, address);\n\t\tif (!adapter) return `Account ${index + 1}`;\n\t\tconst managed = adapter.getAccount(address);\n\t\treturn managed?.label ?? `Account ${index + 1}`;\n\t}\n\n\t#canRename(address: string): boolean {\n\t\tconst adapter = findAdapterForAddress(this.adapters, address);\n\t\treturn !!(adapter && adapter.renameAccount);\n\t}\n\n\t#getAdapterName(address: string): string {\n\t\treturn findAdapterForAddress(this.adapters, address)?.name ?? 'Unknown';\n\t}\n\n\t#selectAccount(account: ReadonlyWalletAccount) {\n\t\temitEvent(this, 'account-selected', { account });\n\t}\n\n\t#startEditLabel(address: string, index: number) {\n\t\tthis._editingAddress = address;\n\t\tthis._editingLabel = this.#getAccountLabel(address, index);\n\t}\n\n\tasync #saveLabel(address: string) {\n\t\tconst label = this._editingLabel.trim();\n\t\tif (!label) {\n\t\t\tthis.#cancelEditLabel();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tfor (const adapter of this.adapters) {\n\t\t\t\tif (adapter.getAccount(address) && adapter.renameAccount) {\n\t\t\t\t\tawait adapter.renameAccount(address, label);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error('[dev-wallet] rename failed:', e);\n\t\t}\n\t\tthis._editingAddress = null;\n\t\tthis._editingLabel = '';\n\t\temitEvent(this, 'account-renamed', { address, label });\n\t}\n\n\t#cancelEditLabel() {\n\t\tthis._editingAddress = null;\n\t\tthis._editingLabel = '';\n\t}\n\n\t#canRemove(address: string): boolean {\n\t\tconst adapter = findAdapterForAddress(this.adapters, address);\n\t\treturn !!(adapter && adapter.removeAccount);\n\t}\n\n\t#isImportedAccount(address: string): boolean {\n\t\tconst adapter = findAdapterForAddress(this.adapters, address);\n\t\tif (!adapter) return false;\n\t\treturn !('createAccount' in adapter && adapter.createAccount);\n\t}\n\n\t#promptDelete(address: string) {\n\t\tthis._confirmDeleteAddress = address;\n\t\tthis._deleteError = null;\n\t\tthis.updateComplete.then(() => {\n\t\t\tconst dialog = this.shadowRoot?.querySelector<HTMLDialogElement>('.confirm-dialog');\n\t\t\tif (dialog && !dialog.open) dialog.showModal();\n\t\t});\n\t}\n\n\t#cancelDelete() {\n\t\tconst dialog = this.shadowRoot?.querySelector<HTMLDialogElement>('.confirm-dialog');\n\t\tif (dialog?.open) dialog.close();\n\t\tthis._confirmDeleteAddress = null;\n\t\tthis._deleting = false;\n\t\tthis._deleteError = null;\n\t}\n\n\tasync #confirmDelete() {\n\t\tconst address = this._confirmDeleteAddress;\n\t\tif (!address) return;\n\n\t\tthis._deleting = true;\n\t\tthis._deleteError = null;\n\n\t\ttry {\n\t\t\tconst adapter = findAdapterForAddress(this.adapters, address);\n\t\t\tif (!adapter?.removeAccount) throw new Error('Adapter does not support removal');\n\t\t\tconst removed = await adapter.removeAccount(address);\n\t\t\tif (!removed) throw new Error('Account not found');\n\t\t\tthis.#cancelDelete();\n\t\t\temitEvent(this, 'account-removed', { address });\n\t\t} catch (error) {\n\t\t\tthis._deleteError = getErrorMessage(error, 'Failed to remove account');\n\t\t\tthis._deleting = false;\n\t\t}\n\t}\n\n\t#renderConfirmDialog() {\n\t\tif (!this._confirmDeleteAddress) return nothing;\n\n\t\tconst address = this._confirmDeleteAddress;\n\t\tconst index = this.accounts.findIndex((a) => a.address === address);\n\t\tconst label = index >= 0 ? this.#getAccountLabel(address, index) : 'Unknown';\n\t\tconst imported = this.#isImportedAccount(address);\n\n\t\treturn html`\n\t\t\t<dialog\n\t\t\t\tclass=\"confirm-dialog\"\n\t\t\t\t@cancel=${(e: Event) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tthis.#cancelDelete();\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div class=\"confirm-title\">Remove Account</div>\n\t\t\t\t<div class=\"confirm-body\">\n\t\t\t\t\t${imported\n\t\t\t\t\t\t? 'This will remove the imported account from your wallet. You can re-import it later.'\n\t\t\t\t\t\t: 'This will permanently delete this account and its keys. This cannot be undone.'}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"confirm-account\">\n\t\t\t\t\t<div class=\"confirm-account-label\">${label}</div>\n\t\t\t\t\t<div class=\"confirm-account-address\">${formatAddress(address)}</div>\n\t\t\t\t</div>\n\t\t\t\t${this._deleteError ? html`<div class=\"confirm-error\">${this._deleteError}</div>` : nothing}\n\t\t\t\t<div class=\"confirm-actions\">\n\t\t\t\t\t<button class=\"btn btn-cancel\" ?disabled=${this._deleting} @click=${this.#cancelDelete}>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t\t<button class=\"btn btn-reject\" ?disabled=${this._deleting} @click=${this.#confirmDelete}>\n\t\t\t\t\t\t${this._deleting ? 'Removing...' : 'Remove'}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</dialog>\n\t\t`;\n\t}\n\n\t#openDialog() {\n\t\tthis._dialogOpen = true;\n\t}\n\n\t#closeDialog() {\n\t\tthis._dialogOpen = false;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-accounts': DevWalletAccounts;\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dev-wallet-accounts.mjs","names":["#openDialog","#selectAccount","#saveLabel","#cancelEditLabel","#getAccountLabel","#getAdapterName","#canRename","#startEditLabel","#copy","#canRemove","#promptDelete","#renderConfirmDialog","#closeDialog","#confirmDelete","#cancelDelete","#isImportedAccount"],"sources":["../../src/ui/dev-wallet-accounts.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReadonlyWalletAccount } from '@mysten/wallet-standard';\nimport { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport type { SignerAdapter } from '../types.js';\nimport { CopyController } from './copy-controller.js';\nimport {\n\tactionButtonStyles,\n\tavatarStyles,\n\tbadgeStyles,\n\tcardItemStyles,\n\tcopyableTextStyles,\n\tdialogStyles,\n\tformInputStyles,\n\ticonButtonStyles,\n\tinlineErrorStyles,\n\tlistContainerStyles,\n\tmonoTruncateStyles,\n\tsectionHeaderStyles,\n\tsharedStyles,\n} from './styles.js';\nimport {\n\temitEvent,\n\tfindAdapterForAddress,\n\tformatAddress,\n\tgetErrorMessage,\n\tisForkNetwork,\n} from './utils.js';\nimport './dev-wallet-new-account.js';\n\n@customElement('dev-wallet-accounts')\nexport class DevWalletAccounts extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tsectionHeaderStyles,\n\t\tactionButtonStyles,\n\t\tcardItemStyles,\n\t\tlistContainerStyles,\n\t\tcopyableTextStyles,\n\t\tmonoTruncateStyles,\n\t\ticonButtonStyles,\n\t\tinlineErrorStyles,\n\t\tbadgeStyles,\n\t\tavatarStyles,\n\t\tdialogStyles,\n\t\tformInputStyles,\n\t\tcss`\n\t\t\t.accounts-header {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: space-between;\n\t\t\t\talign-items: center;\n\t\t\t\tmargin-bottom: 12px;\n\t\t\t}\n\n\t\t\t.accounts-header .section-header {\n\t\t\t\tmargin-bottom: 0;\n\t\t\t}\n\n\t\t\t.add-btn {\n\t\t\t\theight: 26px;\n\t\t\t\tfont-size: 12px;\n\t\t\t\tcolor: var(--dev-wallet-primary);\n\t\t\t\tpadding: 0 8px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t}\n\n\t\t\t.add-btn:hover {\n\t\t\t\tbackground: var(--dev-wallet-accent-fade);\n\t\t\t\tborder-color: var(--dev-wallet-border-strong);\n\t\t\t}\n\n\t\t\t.account-item {\n\t\t\t\tgap: 10px;\n\t\t\t\tpadding: 9px 10px;\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-align: left;\n\t\t\t}\n\n\t\t\t.account-item:hover {\n\t\t\t\tborder-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.account-item.active {\n\t\t\t\tbackground: var(--dev-wallet-accent-fade);\n\t\t\t}\n\n\t\t\t.account-avatar {\n\t\t\t\twidth: 32px;\n\t\t\t\theight: 32px;\n\t\t\t\tfont-size: 14px;\n\t\t\t}\n\n\t\t\t.account-info {\n\t\t\t\tflex: 1;\n\t\t\t\tmin-width: 0;\n\t\t\t}\n\n\t\t\t.account-label {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t}\n\n\t\t\t.account-address {\n\t\t\t\tfont-size: 12px;\n\t\t\t\tpadding: 1px 2px;\n\t\t\t}\n\n\t\t\t.account-label-row {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 4px;\n\t\t\t}\n\n\t\t\t.edit-label-btn,\n\t\t\t.delete-btn {\n\t\t\t\twidth: 18px;\n\t\t\t\theight: 18px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-2xs);\n\t\t\t\tfont-size: 11px;\n\t\t\t\topacity: 0;\n\t\t\t\ttransition: opacity 0.15s;\n\t\t\t}\n\n\t\t\t.delete-btn {\n\t\t\t\tflex-shrink: 0;\n\t\t\t}\n\n\t\t\t.account-item:hover .edit-label-btn,\n\t\t\t.account-item:hover .delete-btn {\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.delete-btn:hover {\n\t\t\t\tbackground: color-mix(in oklab, var(--dev-wallet-destructive) 20%, transparent);\n\t\t\t\tcolor: var(--dev-wallet-destructive);\n\t\t\t}\n\n\t\t\t.edit-label-input {\n\t\t\t\tpadding: 2px 6px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-2xs);\n\t\t\t\tborder: 1px solid var(--dev-wallet-primary);\n\t\t\t\tbackground: var(--dev-wallet-background);\n\t\t\t\tfont-size: 13px;\n\t\t\t}\n\n\t\t\t.account-badge {\n\t\t\t\theight: 16px;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tpadding: 0 5px;\n\t\t\t\tborder-radius: 999px;\n\t\t\t\tbackground: var(--dev-wallet-bg-3);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tcolor: var(--dev-wallet-text-3);\n\t\t\t}\n\n\t\t\t.confirm-dialog {\n\t\t\t\twidth: 300px;\n\t\t\t\tpadding: 20px;\n\t\t\t}\n\n\t\t\t.confirm-body {\n\t\t\t\tfont-size: 13px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tmargin-bottom: 8px;\n\t\t\t\tline-height: 1.4;\n\t\t\t}\n\n\t\t\t.confirm-account {\n\t\t\t\tpadding: 8px 10px;\n\t\t\t\tborder-radius: var(--dev-wallet-radius-lg);\n\t\t\t\tbackground: var(--dev-wallet-bg-2);\n\t\t\t\tborder: 1px solid var(--dev-wallet-border);\n\t\t\t\tmargin-bottom: 16px;\n\t\t\t}\n\n\t\t\t.confirm-account-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.confirm-account-address {\n\t\t\t\tfont-size: 11px;\n\t\t\t}\n\n\t\t\t.confirm-actions {\n\t\t\t\tdisplay: flex;\n\t\t\t\tgap: 8px;\n\t\t\t}\n\n\t\t\t.confirm-error {\n\t\t\t\tmargin-bottom: 8px;\n\t\t\t}\n\n\t\t\t.empty-state {\n\t\t\t\ttext-align: center;\n\t\t\t\tpadding: 24px;\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\tfont-size: 14px;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ attribute: false })\n\taccounts: readonly ReadonlyWalletAccount[] = [];\n\n\t@property({ attribute: false })\n\tadapters: SignerAdapter[] = [];\n\n\t@property({ type: String })\n\tactiveAddress = '';\n\n\t/** Phase 4 P4.20 — when set to a `*-fork` literal, the panel\n\t * surfaces a warning on the \"+ Add\" button (or hides it outright\n\t * when no fork-compatible funding path exists). Fork stacks have\n\t * no faucet; arbitrary fresh accounts can't be funded without an\n\t * impersonation seed already configured at the supervisor level. */\n\t@property({ type: String })\n\tnetwork = '';\n\n\t@state()\n\tprivate _dialogOpen = false;\n\n\t#copy = new CopyController(this);\n\n\t@state()\n\tprivate _editingAddress: string | null = null;\n\n\t@state()\n\tprivate _editingLabel = '';\n\n\t@state()\n\tprivate _confirmDeleteAddress: string | null = null;\n\n\t@state()\n\tprivate _deleting = false;\n\n\t@state()\n\tprivate _deleteError: string | null = null;\n\n\toverride render() {\n\t\tconst canAdd = this.adapters.some(\n\t\t\t(a) =>\n\t\t\t\t('createAccount' in a && a.createAccount) ||\n\t\t\t\t('importAccount' in a &&\n\t\t\t\t\ta.importAccount &&\n\t\t\t\t\t'listAvailableAccounts' in a &&\n\t\t\t\t\ta.listAvailableAccounts),\n\t\t);\n\n\t\t// Phase 4 P4.20 — fork-mode networks have no faucet, and the\n\t\t// supervisor's impersonation seed set is fixed at apply time.\n\t\t// We can't fund a fresh account from the browser side, so the\n\t\t// \"+ Add\" button either renders disabled with a tooltip\n\t\t// (canAdd still true because the adapter contract supports\n\t\t// account creation) or — pragmatically — stays clickable but\n\t\t// surfaces a warning marker on the button.\n\t\tconst fork = this.network !== '' && isForkNetwork(this.network);\n\n\t\treturn html`\n\t\t\t<div class=\"accounts-header\">\n\t\t\t\t<h3 class=\"section-header\">Accounts</h3>\n\t\t\t\t${canAdd\n\t\t\t\t\t? html`<button\n\t\t\t\t\t\t\tclass=\"add-btn\"\n\t\t\t\t\t\t\tpart=\"add-button\"\n\t\t\t\t\t\t\t?disabled=${fork}\n\t\t\t\t\t\t\ttitle=${fork\n\t\t\t\t\t\t\t\t? `Disabled on ${this.network}: fork networks have no faucet — fund seed addresses via Sui({fork:{seed:{addresses}}}) instead.`\n\t\t\t\t\t\t\t\t: ''}\n\t\t\t\t\t\t\t@click=${this.#openDialog}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t+ Add${fork ? ' (fork: no faucet)' : ''}\n\t\t\t\t\t\t</button>`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\t\t\t${this.accounts.length === 0\n\t\t\t\t? html`<div class=\"empty-state\" part=\"empty-state\">No accounts yet</div>`\n\t\t\t\t: html`\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"account-list\"\n\t\t\t\t\t\t\tpart=\"account-list\"\n\t\t\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\t\t\taria-label=\"Wallet accounts\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t${this.accounts.map(\n\t\t\t\t\t\t\t\t(account, index) => html`\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tclass=\"account-item ${account.address === this.activeAddress ? 'active' : ''}\"\n\t\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\t\taria-selected=${account.address === this.activeAddress}\n\t\t\t\t\t\t\t\t\t\t@click=${() => this.#selectAccount(account)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div class=\"account-avatar\">${index + 1}</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"account-info\">\n\t\t\t\t\t\t\t\t\t\t\t${this._editingAddress === account.address\n\t\t\t\t\t\t\t\t\t\t\t\t? html`<input\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"edit-label-input\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Rename account\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.value=${this._editingLabel}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t@input=${(e: InputEvent) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis._editingLabel = (e.target as HTMLInputElement).value;\n\t\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\t\t@keydown=${(e: KeyboardEvent) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === 'Enter') this.#saveLabel(account.address);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === 'Escape') this.#cancelEditLabel();\n\t\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\t\t@click=${(e: Event) => e.stopPropagation()}\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: html`<div class=\"account-label-row\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"account-label\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t${this.#getAccountLabel(account.address, index)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"account-badge\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>${this.#getAdapterName(account.address)}</span\n\t\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\t\t${this.#canRename(account.address)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? html`<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"edit-label-btn\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Rename\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Rename account\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.#startEditLabel(account.address, index);\n\t\t\t\t\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\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t&#9998;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>`\n\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</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\t\tclass=\"account-address ${this.#copy.isCopied(account.address)\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'copied'\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\ttitle=\"Click to copy\"\n\t\t\t\t\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Copy address\"\n\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.#copy.copy(account.address);\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\t@keydown=${(e: KeyboardEvent) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.#copy.copy(account.address);\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}}\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${this.#copy.isCopied(account.address)\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Copied!'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: formatAddress(account.address)}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t${this.#canRemove(account.address)\n\t\t\t\t\t\t\t\t\t\t\t? html`<button\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"delete-btn\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"Remove account\"\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"Remove account\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.#promptDelete(account.address);\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>\n\t\t\t\t\t\t\t\t\t\t\t\t\t&#128465;\n\t\t\t\t\t\t\t\t\t\t\t\t</button>`\n\t\t\t\t\t\t\t\t\t\t\t: nothing}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`}\n\t\t\t${this.#renderConfirmDialog()}\n\t\t\t<dev-wallet-new-account\n\t\t\t\t.adapters=${this.adapters}\n\t\t\t\t.open=${this._dialogOpen}\n\t\t\t\t@close=${this.#closeDialog}\n\t\t\t></dev-wallet-new-account>\n\t\t`;\n\t}\n\n\t#getAccountLabel(address: string, index: number): string {\n\t\tconst adapter = findAdapterForAddress(this.adapters, address);\n\t\tif (!adapter) return `Account ${index + 1}`;\n\t\tconst managed = adapter.getAccount(address);\n\t\treturn managed?.label ?? `Account ${index + 1}`;\n\t}\n\n\t#canRename(address: string): boolean {\n\t\tconst adapter = findAdapterForAddress(this.adapters, address);\n\t\treturn !!(adapter && adapter.renameAccount);\n\t}\n\n\t#getAdapterName(address: string): string {\n\t\treturn findAdapterForAddress(this.adapters, address)?.name ?? 'Unknown';\n\t}\n\n\t#selectAccount(account: ReadonlyWalletAccount) {\n\t\temitEvent(this, 'account-selected', { account });\n\t}\n\n\t#startEditLabel(address: string, index: number) {\n\t\tthis._editingAddress = address;\n\t\tthis._editingLabel = this.#getAccountLabel(address, index);\n\t}\n\n\tasync #saveLabel(address: string) {\n\t\tconst label = this._editingLabel.trim();\n\t\tif (!label) {\n\t\t\tthis.#cancelEditLabel();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tfor (const adapter of this.adapters) {\n\t\t\t\tif (adapter.getAccount(address) && adapter.renameAccount) {\n\t\t\t\t\tawait adapter.renameAccount(address, label);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error('[dev-wallet] rename failed:', e);\n\t\t}\n\t\tthis._editingAddress = null;\n\t\tthis._editingLabel = '';\n\t\temitEvent(this, 'account-renamed', { address, label });\n\t}\n\n\t#cancelEditLabel() {\n\t\tthis._editingAddress = null;\n\t\tthis._editingLabel = '';\n\t}\n\n\t#canRemove(address: string): boolean {\n\t\tconst adapter = findAdapterForAddress(this.adapters, address);\n\t\treturn !!(adapter && adapter.removeAccount);\n\t}\n\n\t#isImportedAccount(address: string): boolean {\n\t\tconst adapter = findAdapterForAddress(this.adapters, address);\n\t\tif (!adapter) return false;\n\t\treturn !('createAccount' in adapter && adapter.createAccount);\n\t}\n\n\t#promptDelete(address: string) {\n\t\tthis._confirmDeleteAddress = address;\n\t\tthis._deleteError = null;\n\t\tthis.updateComplete.then(() => {\n\t\t\tconst dialog = this.shadowRoot?.querySelector<HTMLDialogElement>('.confirm-dialog');\n\t\t\tif (dialog && !dialog.open) dialog.showModal();\n\t\t});\n\t}\n\n\t#cancelDelete() {\n\t\tconst dialog = this.shadowRoot?.querySelector<HTMLDialogElement>('.confirm-dialog');\n\t\tif (dialog?.open) dialog.close();\n\t\tthis._confirmDeleteAddress = null;\n\t\tthis._deleting = false;\n\t\tthis._deleteError = null;\n\t}\n\n\tasync #confirmDelete() {\n\t\tconst address = this._confirmDeleteAddress;\n\t\tif (!address) return;\n\n\t\tthis._deleting = true;\n\t\tthis._deleteError = null;\n\n\t\ttry {\n\t\t\tconst adapter = findAdapterForAddress(this.adapters, address);\n\t\t\tif (!adapter?.removeAccount) throw new Error('Adapter does not support removal');\n\t\t\tconst removed = await adapter.removeAccount(address);\n\t\t\tif (!removed) throw new Error('Account not found');\n\t\t\tthis.#cancelDelete();\n\t\t\temitEvent(this, 'account-removed', { address });\n\t\t} catch (error) {\n\t\t\tthis._deleteError = getErrorMessage(error, 'Failed to remove account');\n\t\t\tthis._deleting = false;\n\t\t}\n\t}\n\n\t#renderConfirmDialog() {\n\t\tif (!this._confirmDeleteAddress) return nothing;\n\n\t\tconst address = this._confirmDeleteAddress;\n\t\tconst index = this.accounts.findIndex((a) => a.address === address);\n\t\tconst label = index >= 0 ? this.#getAccountLabel(address, index) : 'Unknown';\n\t\tconst imported = this.#isImportedAccount(address);\n\n\t\treturn html`\n\t\t\t<dialog\n\t\t\t\tclass=\"confirm-dialog\"\n\t\t\t\t@cancel=${(e: Event) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tthis.#cancelDelete();\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div class=\"dialog-title\">Remove Account</div>\n\t\t\t\t<div class=\"confirm-body\">\n\t\t\t\t\t${imported\n\t\t\t\t\t\t? 'This will remove the imported account from your wallet. You can re-import it later.'\n\t\t\t\t\t\t: 'This will permanently delete this account and its keys. This cannot be undone.'}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"confirm-account\">\n\t\t\t\t\t<div class=\"confirm-account-label\">${label}</div>\n\t\t\t\t\t<div class=\"confirm-account-address\">${formatAddress(address)}</div>\n\t\t\t\t</div>\n\t\t\t\t${this._deleteError ? html`<div class=\"confirm-error\">${this._deleteError}</div>` : nothing}\n\t\t\t\t<div class=\"confirm-actions\">\n\t\t\t\t\t<button class=\"btn btn-cancel\" ?disabled=${this._deleting} @click=${this.#cancelDelete}>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</button>\n\t\t\t\t\t<button class=\"btn btn-reject\" ?disabled=${this._deleting} @click=${this.#confirmDelete}>\n\t\t\t\t\t\t${this._deleting ? 'Removing...' : 'Remove'}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</dialog>\n\t\t`;\n\t}\n\n\t#openDialog() {\n\t\tthis._dialogOpen = true;\n\t}\n\n\t#closeDialog() {\n\t\tthis._dialogOpen = false;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-accounts': DevWalletAccounts;\n\t}\n}\n"],"mappings":"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"}
@@ -1,20 +1,27 @@
1
- import * as lit5 from "lit";
1
+ import { CoinRecord } from "./utils.mjs";
2
+ import * as _$lit from "lit";
2
3
  import { LitElement, nothing } from "lit";
3
4
  import { ClientWithCoreApi } from "@mysten/sui/client";
4
5
 
5
6
  //#region src/ui/dev-wallet-balances.d.ts
6
7
  declare class DevWalletBalances extends LitElement {
7
8
  #private;
8
- static styles: (lit5.CSSResult | lit5.CSSResult[])[];
9
+ static styles: (_$lit.CSSResult | _$lit.CSSResult[])[];
9
10
  address: string;
10
11
  client: ClientWithCoreApi | null;
12
+ network: string;
13
+ /** Optional pre-seeded coin metadata — pass the generated `coins`
14
+ * constant from devstack codegen (`src/generated/coins.ts`) to skip
15
+ * per-coin `getCoinMetadata` RPC waterfalls on UI load. Unknown coin
16
+ * types fall through to an RPC fetch as before. */
17
+ coins: CoinRecord | null;
11
18
  private _balances;
12
19
  private _loading;
13
20
  private _error;
14
21
  /** Re-fetch balances for the current address/client. */
15
22
  refresh(): void;
16
23
  willUpdate(changedProperties: Map<string, unknown>): void;
17
- render(): typeof nothing | lit5.TemplateResult<1>;
24
+ render(): _$lit.TemplateResult<1> | typeof nothing;
18
25
  }
19
26
  declare global {
20
27
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-balances.d.mts","names":[],"sources":["../../src/ui/dev-wallet-balances.ts"],"mappings":";;;;;cAkBa,iBAAA,SAA0B,UAAA;EAAA;SACtB,MAAA,GADc,IAAA,CACR,SAAA,GAAA,IAAA,CAAA,SAAA;EAwCtB,OAAA;EAGA,MAAA,EAAQ,iBAAA;EAAA,QAGA,SAAA;EAAA,QAGA,QAAA;EAAA,QAGA,MAAA;EATA;EAgBR,OAAA,CAAA;EAMS,UAAA,CAAW,iBAAA,EAAmB,GAAA;EAW9B,MAAA,CAAA,UAAM,OAAA,GAAA,IAAA,CAAA,cAAA;AAAA;AAAA,QAuER,MAAA;EAAA,UACG,qBAAA;IACT,qBAAA,EAAuB,iBAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"dev-wallet-balances.d.mts","names":[],"sources":["../../src/ui/dev-wallet-balances.ts"],"mappings":";;;;;;cA0Ba,iBAAA,SAA0B,UAAA;EAAA;SACtB,MAAA,GADc,KAAA,CACR,SAAA,GAAA,KAAA,CAAA,SAAA;EA2LtB,OAAA;EAGA,MAAA,EAAQ,iBAAA;EAGR,OAAA;EAlM8B;;;;EAyM9B,KAAA,EAAO,UAAA;EAAA,QAGC,SAAA;EAAA,QAGA,QAAA;EAAA,QAGA,MAAA;EAlNwC;EA2NhD,OAAA,CAAA;EAMS,UAAA,CAAW,iBAAA,EAAmB,GAAA;EAe9B,MAAA,CAAA,GAfiC,KAAA,CAe3B,cAAA,aAAA,OAAA;AAAA;AAAA,QAyHR,MAAA;EAAA,UACG,qBAAA;IACT,qBAAA,EAAuB,iBAAA;EAAA;AAAA"}