@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
@@ -7,7 +7,17 @@ import { customElement, property, state } from 'lit/decorators.js';
7
7
 
8
8
  import type { DevWallet } from '../wallet/dev-wallet.js';
9
9
  import type { SignerAdapter } from '../types.js';
10
- import { sectionHeaderStyles, sharedStyles } from './styles.js';
10
+ import {
11
+ badgeStyles,
12
+ cardItemStyles,
13
+ formInputStyles,
14
+ iconButtonStyles,
15
+ inlineErrorStyles,
16
+ listContainerStyles,
17
+ monoTruncateStyles,
18
+ sectionHeaderStyles,
19
+ sharedStyles,
20
+ } from './styles.js';
11
21
  import { emitEvent, formatAddress, getErrorMessage, NETWORK_COLORS } from './utils.js';
12
22
  import './dev-wallet-accounts.js';
13
23
 
@@ -16,37 +26,66 @@ export class DevWalletSettings extends LitElement {
16
26
  static override styles = [
17
27
  sharedStyles,
18
28
  sectionHeaderStyles,
29
+ cardItemStyles,
30
+ listContainerStyles,
31
+ formInputStyles,
32
+ iconButtonStyles,
33
+ badgeStyles,
34
+ inlineErrorStyles,
35
+ monoTruncateStyles,
19
36
  css`
20
37
  :host {
21
38
  display: block;
39
+ padding: 14px;
22
40
  }
23
41
 
24
42
  .section {
25
- margin-bottom: 20px;
43
+ margin-bottom: 10px;
44
+ padding: 12px;
45
+ border: 1px solid var(--dev-wallet-border);
46
+ border-radius: var(--dev-wallet-radius-lg);
47
+ background: var(--dev-wallet-surface);
26
48
  }
27
49
 
28
50
  .section:last-child {
29
51
  margin-bottom: 0;
30
52
  }
31
53
 
32
- .network-list {
33
- display: flex;
34
- flex-direction: column;
35
- gap: 4px;
54
+ .settings-summary {
55
+ display: grid;
56
+ grid-template-columns: repeat(3, minmax(0, 1fr));
57
+ gap: 8px;
36
58
  }
37
59
 
38
- .network-item {
39
- display: flex;
40
- align-items: center;
41
- gap: 8px;
42
- padding: 8px 12px;
43
- border-radius: var(--dev-wallet-radius-sm);
60
+ .summary-cell {
61
+ min-width: 0;
62
+ padding: 10px;
63
+ border-radius: var(--dev-wallet-radius);
44
64
  border: 1px solid var(--dev-wallet-border);
45
- background: var(--dev-wallet-secondary);
65
+ background: var(--dev-wallet-bg-0);
46
66
  }
47
67
 
48
- .network-item.active {
49
- border-color: var(--dev-wallet-primary);
68
+ .summary-label {
69
+ font-family: var(--dev-wallet-font-mono);
70
+ font-size: 9.5px;
71
+ text-transform: uppercase;
72
+ letter-spacing: 0.12em;
73
+ color: var(--dev-wallet-text-3);
74
+ }
75
+
76
+ .summary-value {
77
+ margin-top: 5px;
78
+ font-size: 12px;
79
+ font-weight: var(--dev-wallet-font-weight-semibold);
80
+ color: var(--dev-wallet-foreground);
81
+ overflow: hidden;
82
+ text-overflow: ellipsis;
83
+ white-space: nowrap;
84
+ }
85
+
86
+ .network-item {
87
+ gap: 8px;
88
+ padding: 9px 10px;
50
89
  }
51
90
 
52
91
  .network-dot {
@@ -60,7 +99,7 @@ export class DevWalletSettings extends LitElement {
60
99
  flex: 1;
61
100
  font-size: 13px;
62
101
  font-weight: var(--dev-wallet-font-weight-medium);
63
- color: var(--dev-wallet-foreground);
102
+ font-family: var(--dev-wallet-font-mono);
64
103
  }
65
104
 
66
105
  .network-info {
@@ -70,24 +109,15 @@ export class DevWalletSettings extends LitElement {
70
109
 
71
110
  .network-url {
72
111
  font-size: 10px;
73
- color: var(--dev-wallet-muted-foreground);
74
- font-family: var(--dev-wallet-font-mono);
75
- overflow: hidden;
76
- text-overflow: ellipsis;
77
- white-space: nowrap;
78
112
  }
79
113
 
80
114
  .network-url-input {
81
- width: 100%;
82
115
  padding: 3px 6px;
83
116
  border-radius: var(--dev-wallet-radius-xs);
84
117
  border: 1px solid var(--dev-wallet-primary);
85
118
  background: var(--dev-wallet-background);
86
- color: var(--dev-wallet-foreground);
87
119
  font-size: 10px;
88
120
  font-family: var(--dev-wallet-font-mono);
89
- outline: none;
90
- box-sizing: border-box;
91
121
  }
92
122
 
93
123
  .network-actions {
@@ -99,17 +129,7 @@ export class DevWalletSettings extends LitElement {
99
129
  .btn-icon {
100
130
  width: 22px;
101
131
  height: 22px;
102
- display: flex;
103
- align-items: center;
104
- justify-content: center;
105
- border-radius: var(--dev-wallet-radius-xs);
106
132
  font-size: 11px;
107
- color: var(--dev-wallet-muted-foreground);
108
- }
109
-
110
- .btn-icon:hover {
111
- background: var(--dev-wallet-border);
112
- color: var(--dev-wallet-foreground);
113
133
  }
114
134
 
115
135
  .btn-icon-danger:hover {
@@ -117,13 +137,15 @@ export class DevWalletSettings extends LitElement {
117
137
  }
118
138
 
119
139
  .network-active-badge {
120
- font-size: 9px;
121
- padding: 1px 5px;
122
- border-radius: var(--dev-wallet-radius-2xs);
123
- background: color-mix(in oklab, var(--dev-wallet-primary) 15%, transparent);
140
+ height: 16px;
141
+ display: inline-flex;
142
+ align-items: center;
143
+ padding: 0 5px;
144
+ border-radius: 999px;
145
+ border: 1px solid var(--dev-wallet-border-strong);
146
+ background: var(--dev-wallet-accent-fade);
124
147
  color: var(--dev-wallet-primary);
125
148
  font-weight: var(--dev-wallet-font-weight-semibold);
126
- text-transform: uppercase;
127
149
  }
128
150
 
129
151
  .add-network-form {
@@ -132,30 +154,17 @@ export class DevWalletSettings extends LitElement {
132
154
  gap: 8px;
133
155
  margin-top: 8px;
134
156
  padding: 12px;
135
- border-radius: var(--dev-wallet-radius-sm);
157
+ border-radius: var(--dev-wallet-radius-lg);
136
158
  border: 1px dashed var(--dev-wallet-border);
137
- background: var(--dev-wallet-secondary);
159
+ background: var(--dev-wallet-surface);
138
160
  }
139
161
 
140
162
  .form-input {
141
- width: 100%;
142
163
  padding: 6px 8px;
143
- border-radius: var(--dev-wallet-radius-xs);
164
+ border-radius: var(--dev-wallet-radius);
144
165
  border: 1px solid var(--dev-wallet-input);
145
- background: var(--dev-wallet-background);
146
- color: var(--dev-wallet-foreground);
166
+ background: var(--dev-wallet-bg-2);
147
167
  font-size: 12px;
148
- font-family: inherit;
149
- outline: none;
150
- box-sizing: border-box;
151
- }
152
-
153
- .form-input:focus {
154
- border-color: var(--dev-wallet-primary);
155
- }
156
-
157
- .form-input::placeholder {
158
- color: var(--dev-wallet-muted-foreground);
159
168
  }
160
169
 
161
170
  .form-actions {
@@ -188,12 +197,16 @@ export class DevWalletSettings extends LitElement {
188
197
  .btn-toggle {
189
198
  font-size: 12px;
190
199
  color: var(--dev-wallet-primary);
191
- padding: 4px 0;
192
- margin-top: 4px;
200
+ height: 30px;
201
+ padding: 0 10px;
202
+ margin-top: 8px;
203
+ border: 1px solid var(--dev-wallet-border);
204
+ border-radius: var(--dev-wallet-radius);
193
205
  }
194
206
 
195
207
  .btn-toggle:hover {
196
- text-decoration: underline;
208
+ background: var(--dev-wallet-bg-hover);
209
+ border-color: var(--dev-wallet-border-strong);
197
210
  }
198
211
 
199
212
  .cli-section-column {
@@ -236,7 +249,6 @@ export class DevWalletSettings extends LitElement {
236
249
 
237
250
  .error {
238
251
  font-size: 11px;
239
- color: var(--dev-wallet-destructive);
240
252
  margin-top: 4px;
241
253
  }
242
254
 
@@ -276,38 +288,74 @@ export class DevWalletSettings extends LitElement {
276
288
  }
277
289
 
278
290
  .console-snippet {
279
- position: relative;
280
291
  margin-top: 8px;
281
- padding: 10px 12px;
282
- border-radius: var(--dev-wallet-radius-sm);
283
- background: var(--dev-wallet-secondary);
292
+ border-radius: var(--dev-wallet-radius);
293
+ background: var(--dev-wallet-bg-0);
284
294
  border: 1px solid var(--dev-wallet-border);
295
+ overflow: hidden;
296
+ }
297
+
298
+ .console-snippet-header {
299
+ display: flex;
300
+ align-items: center;
301
+ justify-content: space-between;
302
+ gap: 8px;
303
+ padding: 7px 8px 7px 10px;
304
+ border-bottom: 1px solid var(--dev-wallet-border);
305
+ background: color-mix(in srgb, var(--dev-wallet-bg-1) 72%, transparent);
306
+ }
307
+
308
+ .console-snippet-label {
309
+ font-family: var(--dev-wallet-font-mono);
310
+ font-size: 9.5px;
311
+ font-weight: var(--dev-wallet-font-weight-medium);
312
+ letter-spacing: 0.12em;
313
+ text-transform: uppercase;
314
+ color: var(--dev-wallet-text-3);
315
+ }
316
+
317
+ .console-snippet-code {
318
+ margin: 0;
319
+ max-width: 100%;
320
+ padding: 10px 12px 12px;
321
+ overflow-x: auto;
285
322
  font-family: var(--dev-wallet-font-mono);
286
323
  font-size: 11px;
287
324
  color: var(--dev-wallet-foreground);
288
325
  line-height: 1.5;
289
326
  white-space: pre-wrap;
290
- word-break: break-all;
327
+ overflow-wrap: anywhere;
291
328
  user-select: all;
292
329
  }
293
330
 
294
331
  .btn-copy {
295
- position: absolute;
296
- top: 6px;
297
- right: 6px;
298
- padding: 3px 8px;
332
+ display: inline-flex;
333
+ align-items: center;
334
+ justify-content: center;
335
+ min-width: 54px;
336
+ height: 24px;
337
+ padding: 0 8px;
299
338
  border-radius: var(--dev-wallet-radius-xs);
300
- background: var(--dev-wallet-border);
301
- color: var(--dev-wallet-muted-foreground);
339
+ border: 1px solid var(--dev-wallet-border);
340
+ background: var(--dev-wallet-bg-2);
341
+ color: var(--dev-wallet-foreground);
302
342
  font-size: 10px;
303
- font-family: inherit;
343
+ font-weight: var(--dev-wallet-font-weight-medium);
304
344
  cursor: pointer;
345
+ white-space: nowrap;
305
346
  }
306
347
 
307
348
  .btn-copy:hover {
308
- background: var(--dev-wallet-input);
349
+ background: var(--dev-wallet-bg-hover);
350
+ border-color: var(--dev-wallet-border-strong);
309
351
  color: var(--dev-wallet-foreground);
310
352
  }
353
+
354
+ @media (max-width: 420px) {
355
+ .settings-summary {
356
+ grid-template-columns: 1fr;
357
+ }
358
+ }
311
359
  `,
312
360
  ];
313
361
 
@@ -349,13 +397,36 @@ export class DevWalletSettings extends LitElement {
349
397
 
350
398
  override render() {
351
399
  return html`
400
+ <div class="section">${this.#renderSummary()}</div>
352
401
  <div class="section">${this.#renderNetworks()}</div>
353
402
  ${this.#hasCliAdapter()
354
403
  ? html`<div class="section">${this.#renderCliSigner()}</div>`
355
404
  : nothing}
356
405
  <div class="section">${this.#renderAccounts()}</div>
357
- <div class="section">${this.#renderBookmarklet()}</div>
358
- <div class="section">${this.#renderAbout()}</div>
406
+ ${this.bookmarkletOrigin
407
+ ? html`<div class="section">${this.#renderBookmarklet()}</div>`
408
+ : nothing}
409
+ `;
410
+ }
411
+
412
+ #renderSummary() {
413
+ const activeNetwork = this.wallet?.activeNetwork ?? 'none';
414
+ return html`
415
+ <h3 class="section-header">Wallet</h3>
416
+ <div class="settings-summary">
417
+ <div class="summary-cell">
418
+ <div class="summary-label">Network</div>
419
+ <div class="summary-value">${activeNetwork}</div>
420
+ </div>
421
+ <div class="summary-cell">
422
+ <div class="summary-label">Accounts</div>
423
+ <div class="summary-value">${this.accounts.length}</div>
424
+ </div>
425
+ <div class="summary-cell">
426
+ <div class="summary-label">Adapters</div>
427
+ <div class="summary-value">${this.adapters.length}</div>
428
+ </div>
429
+ </div>
359
430
  `;
360
431
  }
361
432
 
@@ -588,10 +659,18 @@ export class DevWalletSettings extends LitElement {
588
659
  </div>
589
660
  <div class="about" style="margin-top: 12px">Or paste this in the browser console:</div>
590
661
  <div class="console-snippet">
591
- ${consoleSnippet}
592
- <button class="btn-copy" @click=${() => this.#copySnippet(consoleSnippet)}>
593
- ${this._copied ? 'Copied!' : 'Copy'}
594
- </button>
662
+ <div class="console-snippet-header">
663
+ <span class="console-snippet-label">Console</span>
664
+ <button
665
+ class="btn-copy"
666
+ type="button"
667
+ aria-label="Copy console snippet"
668
+ @click=${() => this.#copySnippet(consoleSnippet)}
669
+ >
670
+ ${this._copied ? 'Copied' : 'Copy'}
671
+ </button>
672
+ </div>
673
+ <pre class="console-snippet-code"><code>${consoleSnippet}</code></pre>
595
674
  </div>
596
675
  <div class="about" style="margin-top: 8px">
597
676
  Or add this script to your page:<br />
@@ -609,20 +688,6 @@ export class DevWalletSettings extends LitElement {
609
688
  });
610
689
  }
611
690
 
612
- #renderAbout() {
613
- return html`
614
- <h3 class="section-header">About</h3>
615
- <div class="about">
616
- <strong>${this.wallet?.name ?? 'Dev Wallet'}</strong><br />
617
- A development wallet for testing Sui dApps.<br />
618
- ${this.wallet
619
- ? html`${this.wallet.accounts.length} account(s) across ${this.wallet.adapters.length}
620
- adapter(s)`
621
- : nothing}
622
- </div>
623
- `;
624
- }
625
-
626
691
  #addNetwork() {
627
692
  if (!this.wallet) return;
628
693
 
@@ -7,6 +7,7 @@ import { customElement, property } from 'lit/decorators.js';
7
7
 
8
8
  import type { PendingSigningRequest } from '../wallet/dev-wallet.js';
9
9
  import { sharedStyles } from './styles.js';
10
+ import type { CoinRecord } from './utils.js';
10
11
  import { emitEvent } from './utils.js';
11
12
  import './dev-wallet-signing.js';
12
13
 
@@ -24,37 +25,40 @@ export class DevWalletSigningModal extends LitElement {
24
25
  css`
25
26
  :host {
26
27
  display: block;
28
+ pointer-events: auto;
27
29
  }
28
30
 
29
31
  dialog {
30
- width: 360px;
32
+ width: 440px;
31
33
  max-width: calc(100vw - 32px);
32
- max-height: min(600px, 80vh);
34
+ max-height: min(680px, 86vh);
33
35
  border-radius: var(--dev-wallet-radius-xl);
34
- background: var(--dev-wallet-background);
35
- border: 1px solid var(--dev-wallet-border);
36
+ background: var(--dev-wallet-surface);
37
+ border: 1px solid var(--dev-wallet-border-2);
36
38
  box-shadow: var(--dev-wallet-shadow-lg);
37
39
  overflow: hidden;
38
40
  display: flex;
39
41
  flex-direction: column;
40
42
  padding: 0;
41
43
  color: inherit;
44
+ pointer-events: auto;
42
45
  }
43
46
 
44
47
  dialog::backdrop {
45
- background: color-mix(in oklab, oklch(0 0 0) 50%, transparent);
48
+ background: rgba(2, 6, 14, 0.55);
46
49
  }
47
50
 
48
51
  .modal-header {
49
52
  display: flex;
50
53
  justify-content: space-between;
51
54
  align-items: center;
52
- padding: 14px 16px;
55
+ padding: 12px 14px;
53
56
  border-bottom: 1px solid var(--dev-wallet-border);
57
+ background: var(--dev-wallet-bg-1);
54
58
  }
55
59
 
56
60
  .modal-title {
57
- font-size: 15px;
61
+ font-size: 13px;
58
62
  font-weight: var(--dev-wallet-font-weight-semibold);
59
63
  color: var(--dev-wallet-foreground);
60
64
  }
@@ -65,6 +69,23 @@ export class DevWalletSigningModal extends LitElement {
65
69
  display: flex;
66
70
  flex-direction: column;
67
71
  }
72
+
73
+ /* Phase 4 P4.19 — footnote rendered when the active account
74
+ is in fork-mode impersonation. Visually distinct so users
75
+ don't conflate this with a real signature flow. */
76
+ .fork-footnote {
77
+ padding: 8px 16px;
78
+ background: rgba(234, 179, 8, 0.12);
79
+ border-top: 1px solid rgba(234, 179, 8, 0.35);
80
+ font-size: 11px;
81
+ color: var(--dev-wallet-muted-foreground);
82
+ line-height: 1.4;
83
+ }
84
+
85
+ .fork-footnote strong {
86
+ color: #92400e;
87
+ font-weight: var(--dev-wallet-font-weight-semibold);
88
+ }
68
89
  `,
69
90
  ];
70
91
 
@@ -74,9 +95,20 @@ export class DevWalletSigningModal extends LitElement {
74
95
  @property({ attribute: false })
75
96
  client: ClientWithCoreApi | null = null;
76
97
 
98
+ /** Pre-seeded coin metadata forwarded to `<dev-wallet-signing>`. See
99
+ * the matching property on `DevWalletSigning` for details. */
100
+ @property({ attribute: false })
101
+ coins: CoinRecord | null = null;
102
+
77
103
  @property({ type: String })
78
104
  walletName = 'Dev Wallet';
79
105
 
106
+ /** Phase 4 P4.19 — when the active account's `source === 'impersonate'`,
107
+ * the parent flips this on and the modal renders a footnote
108
+ * explaining no real signature will be produced. */
109
+ @property({ type: Boolean })
110
+ impersonation = false;
111
+
80
112
  #handleDialogCancel = (e: Event) => {
81
113
  e.preventDefault();
82
114
  emitEvent(this, 'reject');
@@ -110,10 +142,18 @@ export class DevWalletSigningModal extends LitElement {
110
142
  exportparts="approve-button: signing-approve-button, reject-button: signing-reject-button, request-type: signing-request-type, empty-state: signing-empty-state, error-message: signing-error-message, footer: signing-footer"
111
143
  .request=${this.request}
112
144
  .client=${this.client}
145
+ .coins=${this.coins}
113
146
  @approve=${this.#handleApprove}
114
147
  @reject=${this.#handleReject}
115
148
  ></dev-wallet-signing>
116
149
  </div>
150
+ ${this.impersonation
151
+ ? html`<div class="fork-footnote" part="fork-footnote">
152
+ <strong>Fork-only:</strong> this account is in <em>impersonation</em> mode. The fork
153
+ accepts the transaction with an empty signature (no real private key signs it), so it
154
+ would be rejected by mainnet / testnet / devnet validators.
155
+ </div>`
156
+ : nothing}
117
157
  </dialog>
118
158
  `;
119
159
  }