@mysten-incubation/dev-wallet 0.0.1 → 0.3.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 +139 -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 +11 -0
  15. package/dist/adapters/devstack-paths.d.mts.map +1 -0
  16. package/dist/adapters/devstack-paths.mjs +11 -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 +15 -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
package/src/ui/mount.ts CHANGED
@@ -1,18 +1,40 @@
1
1
  // Copyright (c) Mysten Labs, Inc.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
+ import type { ForkRelay } from '../adapters/fork-relay.js';
4
5
  import type { DevWallet } from '../wallet/dev-wallet.js';
5
6
  import './dev-wallet-panel.js';
7
+ import type { DevWalletDockStyle } from './dev-wallet-panel.js';
8
+ import type { CoinRecord } from './utils.js';
6
9
 
7
10
  /** @returns A cleanup function that removes the panel from the DOM. */
8
11
  export function mountDevWallet(
9
12
  wallet: DevWallet,
10
- options?: { container?: HTMLElement },
13
+ options?: {
14
+ container?: HTMLElement;
15
+ /** Pre-seeded coin metadata — pass the generated `coins` constant
16
+ * from devstack codegen to skip per-coin RPC waterfalls on UI
17
+ * load. See `DevWalletPanel.coins`. */
18
+ coins?: CoinRecord | null;
19
+ /** Phase 5 Subtopic 6 — fork admin relay. Construct via
20
+ * `createForkRelayFromManifest(manifest)` and pass through;
21
+ * the panel surfaces a Fork tab whenever this is non-null and
22
+ * the active network ends in `-fork`. */
23
+ forkRelay?: ForkRelay | null;
24
+ /** Upstream label (`'mainnet'`, …) sourced from `meta.upstream`. */
25
+ forkUpstream?: string;
26
+ /** Floating dock presentation. Defaults to the corner pill from the handoff. */
27
+ dockStyle?: DevWalletDockStyle;
28
+ },
11
29
  ): () => void {
12
30
  const container = options?.container ?? document.body;
13
31
 
14
32
  const panel = document.createElement('dev-wallet-panel');
15
33
  panel.wallet = wallet;
34
+ if (options?.coins !== undefined) panel.coins = options.coins;
35
+ if (options?.forkRelay !== undefined) panel.forkRelay = options.forkRelay;
36
+ if (options?.forkUpstream !== undefined) panel.forkUpstream = options.forkUpstream;
37
+ if (options?.dockStyle !== undefined) panel.dockStyle = options.dockStyle;
16
38
  container.appendChild(panel);
17
39
 
18
40
  return () => {
package/src/ui/styles.ts CHANGED
@@ -7,6 +7,7 @@ const resetStyles = css`
7
7
  * {
8
8
  box-sizing: border-box;
9
9
  -webkit-font-smoothing: antialiased;
10
+ text-rendering: optimizeLegibility;
10
11
  font-family: var(--dev-wallet-font-sans);
11
12
  }
12
13
 
@@ -39,44 +40,68 @@ const resetStyles = css`
39
40
 
40
41
  const themeStyles = css`
41
42
  :host {
42
- /* ColorsOKLch dark theme */
43
- --dev-wallet-background: oklch(0.175 0.028 283);
44
- --dev-wallet-foreground: oklch(0.91 0 0);
45
- --dev-wallet-primary: oklch(0.55 0.24 265);
46
- --dev-wallet-primary-foreground: oklch(0.98 0 0);
47
- --dev-wallet-secondary: oklch(0.195 0.04 262);
48
- --dev-wallet-secondary-foreground: oklch(0.91 0 0);
49
- --dev-wallet-muted: oklch(0.25 0.035 280);
50
- --dev-wallet-muted-foreground: oklch(0.62 0.04 280);
51
- --dev-wallet-destructive: oklch(0.63 0.26 25);
52
- --dev-wallet-positive: oklch(0.72 0.19 145);
53
- --dev-wallet-warning: oklch(0.79 0.17 75);
54
- --dev-wallet-border: oklch(0.25 0.035 280);
55
- --dev-wallet-input: oklch(0.25 0.035 280);
56
- --dev-wallet-ring: oklch(0.55 0.24 265);
57
- --dev-wallet-status-connected: #22c55e;
58
- --dev-wallet-status-disconnected: #6b7280;
59
-
60
- /* Radius scale derived from base */
61
- --dev-wallet-radius: 12px;
62
- --dev-wallet-radius-xs: calc(var(--dev-wallet-radius) - 6px);
63
- --dev-wallet-radius-sm: calc(var(--dev-wallet-radius) - 4px);
64
- --dev-wallet-radius-md: calc(var(--dev-wallet-radius) - 2px);
65
- --dev-wallet-radius-xl: calc(var(--dev-wallet-radius) + 4px);
43
+ /* Handoff tokens — dark devtools surface, Sui blue accent. */
44
+ --dev-wallet-bg-0: #05080f;
45
+ --dev-wallet-bg-1: #0a1322;
46
+ --dev-wallet-bg-2: #0f1b30;
47
+ --dev-wallet-bg-3: #15243e;
48
+ --dev-wallet-bg-4: #1c2f4d;
49
+ --dev-wallet-bg-hover: rgba(255, 255, 255, 0.04);
50
+ --dev-wallet-border: rgba(255, 255, 255, 0.07);
51
+ --dev-wallet-border-2: rgba(255, 255, 255, 0.12);
52
+ --dev-wallet-border-strong: rgba(77, 162, 255, 0.35);
53
+ --dev-wallet-foreground: #e6eefb;
54
+ --dev-wallet-text-2: #94a6c2;
55
+ --dev-wallet-text-3: #5c708e;
56
+ --dev-wallet-text-mute: #3d526f;
57
+ --dev-wallet-scrim: rgba(2, 6, 14, 0.7);
58
+ --dev-wallet-primary: #4da2ff;
59
+ --dev-wallet-primary-hover: #6fbcff;
60
+ --dev-wallet-primary-foreground: #03101f;
61
+ --dev-wallet-accent-fade: rgba(77, 162, 255, 0.12);
62
+ --dev-wallet-secondary: var(--dev-wallet-bg-2);
63
+ --dev-wallet-secondary-foreground: var(--dev-wallet-foreground);
64
+ --dev-wallet-background: var(--dev-wallet-bg-0);
65
+ --dev-wallet-surface: var(--dev-wallet-bg-1);
66
+ --dev-wallet-muted: var(--dev-wallet-bg-3);
67
+ --dev-wallet-muted-foreground: var(--dev-wallet-text-2);
68
+ --dev-wallet-input: var(--dev-wallet-bg-2);
69
+ --dev-wallet-ring: var(--dev-wallet-primary);
70
+ --dev-wallet-destructive: #ff6b6b;
71
+ --dev-wallet-positive: #4ecca3;
72
+ --dev-wallet-warning: #ffb454;
73
+ --dev-wallet-magenta: #c792ea;
74
+ --dev-wallet-teal: #66e1d0;
75
+ --dev-wallet-status-connected: var(--dev-wallet-positive);
76
+ --dev-wallet-status-disconnected: var(--dev-wallet-text-3);
77
+
78
+ /* Radius scale */
66
79
  --dev-wallet-radius-2xs: 3px;
80
+ --dev-wallet-radius-xs: 4px;
81
+ --dev-wallet-radius-sm: 4px;
82
+ --dev-wallet-radius: 6px;
83
+ --dev-wallet-radius-md: 6px;
84
+ --dev-wallet-radius-lg: 10px;
85
+ --dev-wallet-radius-xl: 14px;
67
86
 
68
87
  /* Shadows */
69
- --dev-wallet-shadow-sm: 0 1px 3px color-mix(in oklab, oklch(0 0 0) 10%, transparent);
70
- --dev-wallet-shadow-md: 0 4px 12px color-mix(in oklab, oklch(0 0 0) 30%, transparent);
88
+ --dev-wallet-shadow-sm: 0 1px 3px rgba(2, 8, 20, 0.25);
89
+ --dev-wallet-shadow-md:
90
+ 0 8px 24px rgba(0, 8, 24, 0.45), 0 0 0 1px rgba(255, 255, 255, 0.04) inset;
91
+ --dev-wallet-shadow-card:
92
+ 0 1px 0 rgba(255, 255, 255, 0.04) inset, 0 10px 30px rgba(2, 8, 20, 0.4);
93
+ --dev-wallet-shadow-lg:
94
+ 0 24px 60px rgba(0, 8, 24, 0.55), 0 2px 0 rgba(255, 255, 255, 0.04) inset;
95
+ --dev-wallet-shadow-drawer:
96
+ 0 30px 80px rgba(0, 8, 24, 0.55), 0 0 0 1px rgba(255, 255, 255, 0.04) inset;
71
97
 
72
98
  /* Typography */
73
99
  --dev-wallet-font-sans:
74
- ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
75
- 'Helvetica Neue', Arial, sans-serif;
100
+ 'Geist', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
76
101
  --dev-wallet-font-weight-medium: 500;
77
102
  --dev-wallet-font-weight-semibold: 600;
78
- --dev-wallet-font-mono:
79
- ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
103
+ --dev-wallet-font-weight-bold: 700;
104
+ --dev-wallet-font-mono: 'Geist Mono', ui-monospace, 'SF Mono', Menlo, monospace;
80
105
 
81
106
  /* Font-size scale */
82
107
  --dev-wallet-text-2xs: 10px;
@@ -86,7 +111,90 @@ const themeStyles = css`
86
111
  --dev-wallet-text-md: 14px;
87
112
  --dev-wallet-text-lg: 15px;
88
113
  --dev-wallet-text-xl: 16px;
89
- --dev-wallet-shadow-lg: 0 8px 32px color-mix(in oklab, oklch(0 0 0) 40%, transparent);
114
+ }
115
+
116
+ .mono {
117
+ font-family: var(--dev-wallet-font-mono);
118
+ font-feature-settings: 'ss01', 'cv01';
119
+ }
120
+
121
+ .chip {
122
+ display: inline-flex;
123
+ align-items: center;
124
+ gap: 6px;
125
+ height: 22px;
126
+ padding: 0 8px;
127
+ border-radius: 999px;
128
+ font-family: var(--dev-wallet-font-mono);
129
+ font-size: 10.5px;
130
+ font-weight: var(--dev-wallet-font-weight-medium);
131
+ letter-spacing: 0.02em;
132
+ background: var(--dev-wallet-bg-3);
133
+ color: var(--dev-wallet-text-2);
134
+ border: 1px solid var(--dev-wallet-border);
135
+ white-space: nowrap;
136
+ }
137
+
138
+ .chip-accent {
139
+ color: var(--dev-wallet-primary);
140
+ border-color: var(--dev-wallet-border-strong);
141
+ background: var(--dev-wallet-accent-fade);
142
+ }
143
+
144
+ .chip-success {
145
+ color: var(--dev-wallet-positive);
146
+ border-color: rgba(78, 204, 163, 0.3);
147
+ background: rgba(78, 204, 163, 0.08);
148
+ }
149
+
150
+ .chip-warn {
151
+ color: var(--dev-wallet-warning);
152
+ border-color: rgba(255, 180, 84, 0.3);
153
+ background: rgba(255, 180, 84, 0.08);
154
+ }
155
+
156
+ .chip-mute {
157
+ color: var(--dev-wallet-text-3);
158
+ }
159
+
160
+ @keyframes slidein-right {
161
+ from {
162
+ opacity: 0;
163
+ transform: translateX(20px);
164
+ }
165
+ to {
166
+ opacity: 1;
167
+ transform: translateX(0);
168
+ }
169
+ }
170
+
171
+ @keyframes fadein {
172
+ from {
173
+ opacity: 0;
174
+ }
175
+ to {
176
+ opacity: 1;
177
+ }
178
+ }
179
+
180
+ @keyframes popin {
181
+ from {
182
+ opacity: 0;
183
+ transform: scale(0.96) translateY(8px);
184
+ }
185
+ to {
186
+ opacity: 1;
187
+ transform: scale(1) translateY(0);
188
+ }
189
+ }
190
+
191
+ @keyframes pulse-ring {
192
+ 0% {
193
+ box-shadow: 0 0 0 0 rgba(77, 162, 255, 0.45);
194
+ }
195
+ 100% {
196
+ box-shadow: 0 0 0 14px rgba(77, 162, 255, 0);
197
+ }
90
198
  }
91
199
  `;
92
200
 
@@ -96,14 +204,15 @@ export const dropdownItemStyles = css`
96
204
  align-items: center;
97
205
  gap: 8px;
98
206
  width: 100%;
99
- padding: 8px 10px;
207
+ padding: 7px 8px;
208
+ border-radius: var(--dev-wallet-radius);
100
209
  font-size: 12px;
101
210
  color: var(--dev-wallet-foreground);
102
211
  text-align: left;
103
212
  }
104
213
 
105
214
  .dropdown-item:hover {
106
- background: var(--dev-wallet-secondary);
215
+ background: var(--dev-wallet-bg-hover);
107
216
  }
108
217
 
109
218
  .dropdown-item[aria-selected='true'] {
@@ -113,33 +222,36 @@ export const dropdownItemStyles = css`
113
222
 
114
223
  export const connectDialogStyles = css`
115
224
  .connect-dialog {
116
- width: 360px;
225
+ width: 460px;
117
226
  max-height: min(600px, 80vh);
118
227
  border-radius: var(--dev-wallet-radius-xl);
119
- background: var(--dev-wallet-background);
120
- border: 1px solid var(--dev-wallet-border);
228
+ background: var(--dev-wallet-surface);
229
+ border: 1px solid var(--dev-wallet-border-2);
121
230
  box-shadow: var(--dev-wallet-shadow-lg);
122
231
  overflow: hidden;
123
232
  display: flex;
124
233
  flex-direction: column;
125
234
  padding: 0;
126
235
  color: inherit;
236
+ pointer-events: auto;
237
+ animation: popin 200ms cubic-bezier(0.2, 0.7, 0.2, 1);
127
238
  }
128
239
 
129
240
  .connect-dialog::backdrop {
130
- background: color-mix(in oklab, oklch(0 0 0) 50%, transparent);
241
+ background: rgba(2, 6, 14, 0.55);
131
242
  }
132
243
 
133
244
  .connect-dialog-header {
134
245
  display: flex;
135
246
  justify-content: space-between;
136
247
  align-items: center;
137
- padding: 14px 16px;
248
+ padding: 14px 16px 12px;
138
249
  border-bottom: 1px solid var(--dev-wallet-border);
250
+ background: var(--dev-wallet-bg-1);
139
251
  }
140
252
 
141
253
  .connect-dialog-title {
142
- font-size: 15px;
254
+ font-size: 13px;
143
255
  font-weight: var(--dev-wallet-font-weight-semibold);
144
256
  color: var(--dev-wallet-foreground);
145
257
  }
@@ -152,40 +264,70 @@ export const actionButtonStyles = css`
152
264
  }
153
265
 
154
266
  .btn {
267
+ height: 30px;
268
+ padding: 0 12px;
269
+ border-radius: var(--dev-wallet-radius);
270
+ border: 1px solid var(--dev-wallet-border-2);
271
+ background: var(--dev-wallet-bg-3);
272
+ color: var(--dev-wallet-foreground);
273
+ display: inline-flex;
274
+ align-items: center;
275
+ justify-content: center;
276
+ gap: 6px;
277
+ font-size: 12px;
278
+ font-weight: var(--dev-wallet-font-weight-medium);
279
+ white-space: nowrap;
280
+ transition:
281
+ background 120ms,
282
+ border-color 120ms,
283
+ color 120ms,
284
+ transform 80ms;
285
+ }
286
+
287
+ .actions .btn {
155
288
  flex: 1;
156
- padding: 10px 16px;
157
- border-radius: var(--dev-wallet-radius-md);
158
- font-size: 13px;
159
- font-weight: var(--dev-wallet-font-weight-semibold);
160
- transition: background-color 0.15s;
289
+ }
290
+
291
+ .btn:hover {
292
+ background: var(--dev-wallet-bg-4);
293
+ border-color: var(--dev-wallet-border-strong);
294
+ }
295
+
296
+ .btn:active {
297
+ transform: translateY(0.5px);
161
298
  }
162
299
 
163
300
  .btn-approve {
164
- background: var(--dev-wallet-positive);
301
+ background: var(--dev-wallet-primary);
302
+ border-color: var(--dev-wallet-primary);
165
303
  color: var(--dev-wallet-primary-foreground);
304
+ font-weight: var(--dev-wallet-font-weight-semibold);
166
305
  }
167
306
 
168
307
  .btn-approve:hover {
169
- background: oklab(from var(--dev-wallet-positive) calc(l - 0.03) a b);
308
+ background: var(--dev-wallet-primary-hover);
309
+ border-color: var(--dev-wallet-primary-hover);
170
310
  }
171
311
 
172
312
  .btn-reject {
173
- background: var(--dev-wallet-destructive);
174
- color: var(--dev-wallet-primary-foreground);
313
+ background: transparent;
314
+ color: var(--dev-wallet-destructive);
175
315
  }
176
316
 
177
317
  .btn-reject:hover {
178
- background: oklab(from var(--dev-wallet-destructive) calc(l - 0.05) a b);
318
+ background: rgba(255, 107, 107, 0.07);
319
+ border-color: var(--dev-wallet-destructive);
179
320
  }
180
321
 
181
322
  .btn-cancel {
182
- background: var(--dev-wallet-secondary);
183
- color: var(--dev-wallet-foreground);
184
- border: 1px solid var(--dev-wallet-border);
323
+ background: transparent;
324
+ color: var(--dev-wallet-text-2);
325
+ border-color: transparent;
185
326
  }
186
327
 
187
328
  .btn-cancel:hover {
188
- background: oklab(from var(--dev-wallet-secondary) calc(l - 0.02) a b);
329
+ background: var(--dev-wallet-bg-hover);
330
+ color: var(--dev-wallet-foreground);
189
331
  }
190
332
 
191
333
  .btn-create {
@@ -209,8 +351,11 @@ export const stateStyles = css`
209
351
  .empty-state,
210
352
  .error-state {
211
353
  text-align: center;
212
- padding: 16px;
354
+ padding: 18px 16px;
213
355
  font-size: 13px;
356
+ border-radius: var(--dev-wallet-radius-lg);
357
+ border: 1px solid var(--dev-wallet-border);
358
+ background: var(--dev-wallet-bg-1);
214
359
  }
215
360
 
216
361
  .loading {
@@ -228,12 +373,237 @@ export const stateStyles = css`
228
373
 
229
374
  export const sectionHeaderStyles = css`
230
375
  .section-header {
231
- font-size: 13px;
376
+ font-family: var(--dev-wallet-font-mono);
377
+ font-size: 10px;
378
+ font-weight: var(--dev-wallet-font-weight-medium);
379
+ color: var(--dev-wallet-text-3);
380
+ text-transform: uppercase;
381
+ letter-spacing: 0.14em;
382
+ margin-bottom: 10px;
383
+ }
384
+ `;
385
+
386
+ /** `<dialog>` chrome shared by new-account / accounts confirm-remove / signing-modal. */
387
+ export const dialogStyles = css`
388
+ dialog:not([open]),
389
+ .confirm-dialog:not([open]) {
390
+ display: none;
391
+ }
392
+
393
+ dialog,
394
+ .confirm-dialog {
395
+ max-width: calc(100vw - 32px);
396
+ border-radius: var(--dev-wallet-radius-xl);
397
+ background: var(--dev-wallet-surface);
398
+ border: 1px solid var(--dev-wallet-border-2);
399
+ box-shadow: var(--dev-wallet-shadow-lg);
400
+ display: flex;
401
+ flex-direction: column;
402
+ color: inherit;
403
+ animation: popin 200ms cubic-bezier(0.2, 0.7, 0.2, 1);
404
+ }
405
+
406
+ dialog::backdrop,
407
+ .confirm-dialog::backdrop {
408
+ background: color-mix(in oklab, oklch(0 0 0) 50%, transparent);
409
+ }
410
+
411
+ .dialog-title {
412
+ font-size: 16px;
232
413
  font-weight: var(--dev-wallet-font-weight-semibold);
414
+ color: var(--dev-wallet-foreground);
415
+ margin-bottom: 16px;
416
+ }
417
+ `;
418
+
419
+ /** Flex-row card with secondary bg + border + active highlight. */
420
+ export const cardItemStyles = css`
421
+ .network-item,
422
+ .account-item,
423
+ .slot-item,
424
+ .import-item {
425
+ display: flex;
426
+ align-items: center;
427
+ border-radius: var(--dev-wallet-radius-lg);
428
+ border: 1px solid var(--dev-wallet-border);
429
+ background: var(--dev-wallet-surface);
430
+ }
431
+
432
+ .network-item.active,
433
+ .account-item.active,
434
+ .slot-item.active,
435
+ .import-item.selected {
436
+ border-color: var(--dev-wallet-border-strong);
437
+ background: var(--dev-wallet-accent-fade);
438
+ }
439
+ `;
440
+
441
+ /** Vertical flex container with a 4px gap (override gap per-list). */
442
+ export const listContainerStyles = css`
443
+ .network-list,
444
+ .account-list,
445
+ .slot-list,
446
+ .import-list,
447
+ .commands-list,
448
+ .coin-flows {
449
+ display: flex;
450
+ flex-direction: column;
451
+ gap: 4px;
452
+ }
453
+ `;
454
+
455
+ /** Text-input with focus-highlight and reset chrome. */
456
+ export const formInputStyles = css`
457
+ .form-input,
458
+ .field-input,
459
+ .action-input,
460
+ .network-url-input,
461
+ .edit-label-input {
462
+ outline: none;
463
+ box-sizing: border-box;
464
+ font-family: inherit;
465
+ color: var(--dev-wallet-foreground);
466
+ width: 100%;
467
+ }
468
+
469
+ .form-input:focus,
470
+ .field-input:focus,
471
+ .action-input:focus {
472
+ border-color: var(--dev-wallet-primary);
473
+ }
474
+
475
+ .form-input::placeholder,
476
+ .field-input::placeholder,
477
+ .action-input::placeholder {
478
+ color: var(--dev-wallet-muted-foreground);
479
+ }
480
+ `;
481
+
482
+ /** Click-to-copy cursor / hover-tint / `.copied` positive-color states. */
483
+ export const copyableTextStyles = css`
484
+ .account-address,
485
+ .detail-value.copyable-addr {
486
+ cursor: pointer;
487
+ border-radius: var(--dev-wallet-radius-2xs);
488
+ transition: background 0.15s;
489
+ }
490
+
491
+ .account-address:hover,
492
+ .detail-value.copyable-addr:hover {
493
+ background: color-mix(in oklab, var(--dev-wallet-primary) 15%, transparent);
494
+ }
495
+
496
+ .account-address.copied,
497
+ .detail-value.copied {
498
+ color: var(--dev-wallet-positive);
499
+ }
500
+ `;
501
+
502
+ /** Truncated monospace text — every muted address span in the wallet UI. */
503
+ export const monoTruncateStyles = css`
504
+ .account-address,
505
+ .import-item-address,
506
+ .slot-address,
507
+ .network-url,
508
+ .command-detail,
509
+ .command-arg {
510
+ font-family: var(--dev-wallet-font-mono);
511
+ color: var(--dev-wallet-text-3);
512
+ overflow: hidden;
513
+ text-overflow: ellipsis;
514
+ white-space: nowrap;
515
+ font-feature-settings: 'ss01', 'cv01';
516
+ }
517
+
518
+ .confirm-account-address {
519
+ font-family: var(--dev-wallet-font-mono);
233
520
  color: var(--dev-wallet-muted-foreground);
521
+ }
522
+ `;
523
+
524
+ /** Small square icon button used for inline edit / delete actions. */
525
+ export const iconButtonStyles = css`
526
+ .btn-icon,
527
+ .edit-label-btn,
528
+ .delete-btn {
529
+ display: inline-flex;
530
+ align-items: center;
531
+ justify-content: center;
532
+ border-radius: var(--dev-wallet-radius-xs);
533
+ color: var(--dev-wallet-muted-foreground);
534
+ }
535
+
536
+ .btn-icon:hover,
537
+ .edit-label-btn:hover {
538
+ background: var(--dev-wallet-border);
539
+ color: var(--dev-wallet-foreground);
540
+ }
541
+ `;
542
+
543
+ /** Tiny uppercase pill — every status / scheme / network badge. */
544
+ export const badgeStyles = css`
545
+ .network-active-badge,
546
+ .account-badge,
547
+ .import-item-badge,
548
+ .slot-toggle {
549
+ font-family: var(--dev-wallet-font-mono);
550
+ font-size: 10.5px;
551
+ font-weight: var(--dev-wallet-font-weight-medium);
234
552
  text-transform: uppercase;
235
- letter-spacing: 0.5px;
236
- margin-bottom: 12px;
553
+ letter-spacing: 0.02em;
554
+ white-space: nowrap;
555
+ }
556
+ `;
557
+
558
+ /** Uppercase muted label headings (`.section-label`, `.status-label`, `.field-label`). */
559
+ export const subLabelStyles = css`
560
+ .section-label,
561
+ .status-label {
562
+ font-family: var(--dev-wallet-font-mono);
563
+ font-size: 10px;
564
+ font-weight: var(--dev-wallet-font-weight-medium);
565
+ color: var(--dev-wallet-text-3);
566
+ text-transform: uppercase;
567
+ letter-spacing: 0.14em;
568
+ }
569
+
570
+ .field-label {
571
+ display: block;
572
+ font-size: 12px;
573
+ font-weight: var(--dev-wallet-font-weight-medium);
574
+ color: var(--dev-wallet-muted-foreground);
575
+ margin-bottom: 4px;
576
+ }
577
+
578
+ .section-label-error {
579
+ color: var(--dev-wallet-destructive);
580
+ }
581
+ `;
582
+
583
+ /** Inline single-line destructive error message. */
584
+ export const inlineErrorStyles = css`
585
+ .error,
586
+ .inline-error,
587
+ .confirm-error {
588
+ color: var(--dev-wallet-destructive);
589
+ font-size: 12px;
590
+ word-break: break-word;
591
+ }
592
+ `;
593
+
594
+ /** Circular initial-avatar shared by accounts list + account-selector. */
595
+ export const avatarStyles = css`
596
+ .account-avatar,
597
+ .avatar {
598
+ border-radius: 50%;
599
+ display: flex;
600
+ align-items: center;
601
+ justify-content: center;
602
+ font-weight: var(--dev-wallet-font-weight-semibold);
603
+ color: var(--dev-wallet-primary-foreground);
604
+ background: linear-gradient(135deg, var(--dev-wallet-primary), var(--dev-wallet-teal));
605
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.15);
606
+ flex-shrink: 0;
237
607
  }
238
608
  `;
239
609
 
@@ -249,4 +619,10 @@ const reducedMotionStyles = css`
249
619
  }
250
620
  `;
251
621
 
252
- export const sharedStyles = [resetStyles, themeStyles, reducedMotionStyles];
622
+ const hostBlockStyles = css`
623
+ :host {
624
+ display: block;
625
+ }
626
+ `;
627
+
628
+ export const sharedStyles = [resetStyles, themeStyles, reducedMotionStyles, hostBlockStyles];