@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
@@ -1,13 +1,21 @@
1
- import * as lit41 from "lit";
2
- import { LitElement } from "lit";
1
+ import * as _$lit from "lit";
2
+ import { LitElement, TemplateResult } from "lit";
3
3
 
4
4
  //#region src/ui/dev-wallet-tab-bar.d.ts
5
- type TabId = 'assets' | 'objects' | 'settings';
5
+ /** Built-in tab ids. */
6
+ type BuiltinTabId = 'assets' | 'objects' | 'fork' | 'settings';
7
+ type TabId = BuiltinTabId;
6
8
  declare class DevWalletTabBar extends LitElement {
7
9
  #private;
8
- static styles: (lit41.CSSResult | lit41.CSSResult[])[];
10
+ static styles: (_$lit.CSSResult | _$lit.CSSResult[])[];
9
11
  active: TabId;
10
- render(): lit41.TemplateResult<1>;
12
+ /** Phase 5 Subtopic 6 — when true, the bar surfaces a "Fork" tab
13
+ * between Objects and Settings. The host controller toggles this
14
+ * on whenever the active stack's manifest reports
15
+ * `meta.runtime === 'forked'`. Off by default so bundled-mode
16
+ * apps don't accidentally expose admin RPCs. */
17
+ showFork: boolean;
18
+ render(): TemplateResult<1>;
11
19
  }
12
20
  declare global {
13
21
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-tab-bar.d.mts","names":[],"sources":["../../src/ui/dev-wallet-tab-bar.ts"],"mappings":";;;;KAQY,KAAA;AAAA,cAGC,eAAA,SAAwB,UAAA;EAAA;SACpB,MAAA,GADY,KAAA,CACN,SAAA,GAAA,KAAA,CAAA,SAAA;EA2CtB,MAAA,EAAQ,KAAA;EAEC,MAAA,CAAA,GAFI,KAAA,CAEE,cAAA;AAAA;AAAA,QAyFR,MAAA;EAAA,UACG,qBAAA;IACT,oBAAA,EAAsB,eAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"dev-wallet-tab-bar.d.mts","names":[],"sources":["../../src/ui/dev-wallet-tab-bar.ts"],"mappings":";;;;;KASY,YAAA;AAAA,KACA,KAAA,GAAQ,YAAA;AAAA,cAwEP,eAAA,SAAwB,UAAA;EAAA;SACpB,MAAA,GADY,KAAA,CACN,SAAA,GAAA,KAAA,CAAA,SAAA;EA4DtB,MAAA,EAAQ,KAAA;EAtIe;AACxB;;;;EA6IC,QAAA;EAES,MAAA,CAAA,GAAM,cAAA;AAAA;AAAA,QAuDR,MAAA;EAAA,UACG,qBAAA;IACT,oBAAA,EAAsB,eAAA;EAAA;AAAA"}
@@ -1,116 +1,174 @@
1
1
  import { sharedStyles } from "./styles.mjs";
2
- import { __decorate } from "../_virtual/_@oxc-project_runtime@0.107.0/helpers/decorate.mjs";
2
+ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.127.0/helpers/decorate.mjs";
3
3
  import { LitElement, css, html } from "lit";
4
4
  import { customElement, property } from "lit/decorators.js";
5
-
6
5
  //#region src/ui/dev-wallet-tab-bar.ts
7
- let DevWalletTabBar = class DevWalletTabBar$1 extends LitElement {
6
+ const ASSETS_ICON = html`<svg
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="currentColor"
10
+ stroke-width="2"
11
+ >
12
+ <rect x="2" y="4" width="20" height="16" rx="2" />
13
+ <path d="M16 12h.01" />
14
+ </svg>`;
15
+ const OBJECTS_ICON = html`<svg
16
+ viewBox="0 0 24 24"
17
+ fill="none"
18
+ stroke="currentColor"
19
+ stroke-width="2"
20
+ >
21
+ <rect x="3" y="3" width="7" height="7" rx="1" />
22
+ <rect x="14" y="3" width="7" height="7" rx="1" />
23
+ <rect x="3" y="14" width="7" height="7" rx="1" />
24
+ <rect x="14" y="14" width="7" height="7" rx="1" />
25
+ </svg>`;
26
+ const SETTINGS_ICON = html`<svg
27
+ viewBox="0 0 24 24"
28
+ fill="none"
29
+ stroke="currentColor"
30
+ stroke-width="2"
31
+ >
32
+ <circle cx="12" cy="12" r="3" />
33
+ <path
34
+ d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"
35
+ />
36
+ </svg>`;
37
+ const FORK_ICON = html`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
38
+ <circle cx="6" cy="6" r="2" />
39
+ <circle cx="6" cy="18" r="2" />
40
+ <circle cx="18" cy="12" r="2" />
41
+ <path d="M6 8v8" />
42
+ <path d="M6 12h6" />
43
+ <path d="M12 12l4-2" />
44
+ <path d="M12 12l4 2" />
45
+ </svg>`;
46
+ const BUILTIN_TABS = [
47
+ {
48
+ id: "assets",
49
+ label: "Home",
50
+ icon: ASSETS_ICON
51
+ },
52
+ {
53
+ id: "objects",
54
+ label: "Objects",
55
+ icon: OBJECTS_ICON
56
+ },
57
+ {
58
+ id: "settings",
59
+ label: "Settings",
60
+ icon: SETTINGS_ICON
61
+ }
62
+ ];
63
+ /** Built-in tabs plus the fork-controls tab. Returned when the host
64
+ * controller signals fork-mode availability via the `showFork` prop. */
65
+ const TABS_WITH_FORK = [
66
+ {
67
+ id: "assets",
68
+ label: "Home",
69
+ icon: ASSETS_ICON
70
+ },
71
+ {
72
+ id: "objects",
73
+ label: "Objects",
74
+ icon: OBJECTS_ICON
75
+ },
76
+ {
77
+ id: "fork",
78
+ label: "Fork",
79
+ icon: FORK_ICON
80
+ },
81
+ {
82
+ id: "settings",
83
+ label: "Settings",
84
+ icon: SETTINGS_ICON
85
+ }
86
+ ];
87
+ let DevWalletTabBar = class DevWalletTabBar extends LitElement {
8
88
  constructor(..._args) {
9
89
  super(..._args);
10
90
  this.active = "assets";
91
+ this.showFork = false;
11
92
  }
12
93
  static {
13
94
  this.styles = [sharedStyles, css`
14
95
  :host {
15
96
  display: block;
16
- border-top: 1px solid var(--dev-wallet-border);
97
+ border-bottom: 1px solid var(--dev-wallet-border);
98
+ background: var(--dev-wallet-surface);
17
99
  }
18
100
 
19
101
  .tab-bar {
20
102
  display: flex;
21
- height: 40px;
103
+ align-items: stretch;
104
+ min-height: 38px;
105
+ overflow-x: auto;
106
+ padding: 0 6px;
22
107
  }
23
108
 
24
109
  .tab {
25
- flex: 1;
110
+ position: relative;
26
111
  display: flex;
27
112
  align-items: center;
28
113
  justify-content: center;
29
- gap: 4px;
30
- font-size: 11px;
114
+ gap: 6px;
115
+ min-width: 0;
116
+ height: 38px;
117
+ padding: 0 14px;
118
+ font-size: 12px;
31
119
  font-weight: var(--dev-wallet-font-weight-medium);
32
- color: var(--dev-wallet-muted-foreground);
33
- transition: color 0.15s;
34
- border-top: 2px solid transparent;
120
+ color: var(--dev-wallet-text-2);
121
+ transition:
122
+ color 120ms,
123
+ background 120ms;
124
+ border-bottom: 2px solid transparent;
125
+ white-space: nowrap;
35
126
  }
36
127
 
37
128
  .tab:hover {
38
129
  color: var(--dev-wallet-foreground);
130
+ background: var(--dev-wallet-bg-hover);
39
131
  }
40
132
 
41
133
  .tab[aria-selected='true'] {
42
- color: var(--dev-wallet-primary);
43
- border-top-color: var(--dev-wallet-primary);
134
+ color: var(--dev-wallet-foreground);
135
+ border-bottom-color: var(--dev-wallet-primary);
44
136
  }
45
137
 
46
138
  .tab svg {
47
- width: 16px;
48
- height: 16px;
139
+ width: 13px;
140
+ height: 13px;
141
+ flex-shrink: 0;
142
+ }
143
+
144
+ .tab:last-child {
145
+ margin-left: auto;
146
+ padding: 0 10px;
49
147
  }
50
148
  `];
51
149
  }
52
150
  render() {
151
+ const tabs = this.showFork ? TABS_WITH_FORK : BUILTIN_TABS;
53
152
  return html`
54
153
  <nav class="tab-bar" part="tab-bar" role="tablist" aria-label="Wallet navigation">
55
- <button
56
- class="tab"
57
- part="tab"
58
- role="tab"
59
- aria-selected=${this.active === "assets"}
60
- tabindex=${this.active === "assets" ? 0 : -1}
61
- @click=${() => this.#select("assets")}
62
- @keydown=${this.#handleKeydown}
63
- >
64
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
65
- <rect x="2" y="4" width="20" height="16" rx="2" />
66
- <path d="M16 12h.01" />
67
- </svg>
68
- Assets
69
- </button>
70
- <button
71
- class="tab"
72
- part="tab"
73
- role="tab"
74
- aria-selected=${this.active === "objects"}
75
- tabindex=${this.active === "objects" ? 0 : -1}
76
- @click=${() => this.#select("objects")}
77
- @keydown=${this.#handleKeydown}
78
- >
79
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
80
- <rect x="3" y="3" width="7" height="7" rx="1" />
81
- <rect x="14" y="3" width="7" height="7" rx="1" />
82
- <rect x="3" y="14" width="7" height="7" rx="1" />
83
- <rect x="14" y="14" width="7" height="7" rx="1" />
84
- </svg>
85
- Objects
86
- </button>
87
- <button
88
- class="tab"
89
- part="tab"
90
- role="tab"
91
- aria-selected=${this.active === "settings"}
92
- tabindex=${this.active === "settings" ? 0 : -1}
93
- @click=${() => this.#select("settings")}
94
- @keydown=${this.#handleKeydown}
95
- >
96
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
97
- <circle cx="12" cy="12" r="3" />
98
- <path
99
- d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"
100
- />
101
- </svg>
102
- Settings
103
- </button>
154
+ ${tabs.map((tab) => html`
155
+ <button
156
+ class="tab"
157
+ part="tab"
158
+ role="tab"
159
+ aria-selected=${this.active === tab.id}
160
+ tabindex=${this.active === tab.id ? 0 : -1}
161
+ @click=${() => this.#select(tab.id)}
162
+ @keydown=${(e) => this.#handleKeydown(e, tabs)}
163
+ >
164
+ ${tab.icon} ${tab.label}
165
+ </button>
166
+ `)}
104
167
  </nav>
105
168
  `;
106
169
  }
107
- #handleKeydown(e) {
108
- const tabs = [
109
- "assets",
110
- "objects",
111
- "settings"
112
- ];
113
- const currentIndex = tabs.indexOf(this.active);
170
+ #handleKeydown(e, tabs) {
171
+ const currentIndex = tabs.findIndex((t) => t.id === this.active);
114
172
  let newIndex = -1;
115
173
  if (e.key === "ArrowRight") {
116
174
  e.preventDefault();
@@ -120,24 +178,27 @@ let DevWalletTabBar = class DevWalletTabBar$1 extends LitElement {
120
178
  newIndex = (currentIndex - 1 + tabs.length) % tabs.length;
121
179
  }
122
180
  if (newIndex !== -1) {
123
- this.#select(tabs[newIndex]);
124
- const buttons = this.shadowRoot?.querySelectorAll(".tab");
125
- buttons?.[newIndex]?.focus();
181
+ const next = tabs[newIndex];
182
+ if (next === void 0) return;
183
+ this.#select(next.id);
184
+ (this.shadowRoot?.querySelectorAll(".tab"))?.[newIndex]?.focus();
126
185
  }
127
186
  }
128
187
  #select(tab) {
129
- if (tab !== this.active) {
130
- this.dispatchEvent(new CustomEvent("tab-changed", {
131
- bubbles: true,
132
- composed: true,
133
- detail: { tab }
134
- }));
135
- }
188
+ if (tab !== this.active) this.dispatchEvent(new CustomEvent("tab-changed", {
189
+ bubbles: true,
190
+ composed: true,
191
+ detail: { tab }
192
+ }));
136
193
  }
137
194
  };
138
195
  __decorate([property({ type: String })], DevWalletTabBar.prototype, "active", void 0);
196
+ __decorate([property({
197
+ type: Boolean,
198
+ attribute: "show-fork"
199
+ })], DevWalletTabBar.prototype, "showFork", void 0);
139
200
  DevWalletTabBar = __decorate([customElement("dev-wallet-tab-bar")], DevWalletTabBar);
140
-
141
201
  //#endregion
142
202
  export { DevWalletTabBar };
203
+
143
204
  //# sourceMappingURL=dev-wallet-tab-bar.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev-wallet-tab-bar.mjs","names":["DevWalletTabBar","#select","#handleKeydown"],"sources":["../../src/ui/dev-wallet-tab-bar.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { sharedStyles } from './styles.js';\n\nexport type TabId = 'assets' | 'objects' | 'settings';\n\n@customElement('dev-wallet-tab-bar')\nexport class DevWalletTabBar extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: block;\n\t\t\t\tborder-top: 1px solid var(--dev-wallet-border);\n\t\t\t}\n\n\t\t\t.tab-bar {\n\t\t\t\tdisplay: flex;\n\t\t\t\theight: 40px;\n\t\t\t}\n\n\t\t\t.tab {\n\t\t\t\tflex: 1;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tgap: 4px;\n\t\t\t\tfont-size: 11px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-muted-foreground);\n\t\t\t\ttransition: color 0.15s;\n\t\t\t\tborder-top: 2px solid transparent;\n\t\t\t}\n\n\t\t\t.tab:hover {\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t}\n\n\t\t\t.tab[aria-selected='true'] {\n\t\t\t\tcolor: var(--dev-wallet-primary);\n\t\t\t\tborder-top-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.tab svg {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ type: String })\n\tactive: TabId = 'assets';\n\n\toverride render() {\n\t\treturn html`\n\t\t\t<nav class=\"tab-bar\" part=\"tab-bar\" role=\"tablist\" aria-label=\"Wallet navigation\">\n\t\t\t\t<button\n\t\t\t\t\tclass=\"tab\"\n\t\t\t\t\tpart=\"tab\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\taria-selected=${this.active === 'assets'}\n\t\t\t\t\ttabindex=${this.active === 'assets' ? 0 : -1}\n\t\t\t\t\t@click=${() => this.#select('assets')}\n\t\t\t\t\t@keydown=${this.#handleKeydown}\n\t\t\t\t>\n\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n\t\t\t\t\t\t<rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n\t\t\t\t\t\t<path d=\"M16 12h.01\" />\n\t\t\t\t\t</svg>\n\t\t\t\t\tAssets\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tclass=\"tab\"\n\t\t\t\t\tpart=\"tab\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\taria-selected=${this.active === 'objects'}\n\t\t\t\t\ttabindex=${this.active === 'objects' ? 0 : -1}\n\t\t\t\t\t@click=${() => this.#select('objects')}\n\t\t\t\t\t@keydown=${this.#handleKeydown}\n\t\t\t\t>\n\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n\t\t\t\t\t\t<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" />\n\t\t\t\t\t\t<rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" />\n\t\t\t\t\t\t<rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" />\n\t\t\t\t\t\t<rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" />\n\t\t\t\t\t</svg>\n\t\t\t\t\tObjects\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tclass=\"tab\"\n\t\t\t\t\tpart=\"tab\"\n\t\t\t\t\trole=\"tab\"\n\t\t\t\t\taria-selected=${this.active === 'settings'}\n\t\t\t\t\ttabindex=${this.active === 'settings' ? 0 : -1}\n\t\t\t\t\t@click=${() => this.#select('settings')}\n\t\t\t\t\t@keydown=${this.#handleKeydown}\n\t\t\t\t>\n\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"3\" />\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\tSettings\n\t\t\t\t</button>\n\t\t\t</nav>\n\t\t`;\n\t}\n\n\t#handleKeydown(e: KeyboardEvent) {\n\t\tconst tabs: TabId[] = ['assets', 'objects', 'settings'];\n\t\tconst currentIndex = tabs.indexOf(this.active);\n\t\tlet newIndex = -1;\n\n\t\tif (e.key === 'ArrowRight') {\n\t\t\te.preventDefault();\n\t\t\tnewIndex = (currentIndex + 1) % tabs.length;\n\t\t} else if (e.key === 'ArrowLeft') {\n\t\t\te.preventDefault();\n\t\t\tnewIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n\t\t}\n\n\t\tif (newIndex !== -1) {\n\t\t\tthis.#select(tabs[newIndex]);\n\t\t\tconst buttons = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.tab');\n\t\t\tbuttons?.[newIndex]?.focus();\n\t\t}\n\t}\n\n\t#select(tab: TabId) {\n\t\tif (tab !== this.active) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('tab-changed', {\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t\tdetail: { tab },\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-tab-bar': DevWalletTabBar;\n\t}\n}\n"],"mappings":";;;;;;AAWO,4BAAMA,0BAAwB,WAAW;;;gBA4C/B;;;gBA3CS,CACxB,cACA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsCH;;CAKD,AAAS,SAAS;AACjB,SAAO,IAAI;;;;;;qBAMQ,KAAK,WAAW,SAAS;gBAC9B,KAAK,WAAW,WAAW,IAAI,CAAC,EAAE;oBAC9B,MAAKC,OAAQ,SAAS,CAAC;gBAC3B,MAAKC,cAAe;;;;;;;;;;;;qBAYf,KAAK,WAAW,UAAU;gBAC/B,KAAK,WAAW,YAAY,IAAI,CAAC,EAAE;oBAC/B,MAAKD,OAAQ,UAAU,CAAC;gBAC5B,MAAKC,cAAe;;;;;;;;;;;;;;qBAcf,KAAK,WAAW,WAAW;gBAChC,KAAK,WAAW,aAAa,IAAI,CAAC,EAAE;oBAChC,MAAKD,OAAQ,WAAW,CAAC;gBAC7B,MAAKC,cAAe;;;;;;;;;;;;;CAcnC,eAAe,GAAkB;EAChC,MAAM,OAAgB;GAAC;GAAU;GAAW;GAAW;EACvD,MAAM,eAAe,KAAK,QAAQ,KAAK,OAAO;EAC9C,IAAI,WAAW,CAAC;AAEhB,MAAI,EAAE,QAAQ,cAAc;AAC3B,KAAE,gBAAgB;AAClB,eAAY,eAAe,KAAK,KAAK;aAC3B,EAAE,QAAQ,aAAa;AACjC,KAAE,gBAAgB;AAClB,eAAY,eAAe,IAAI,KAAK,UAAU,KAAK;;AAGpD,MAAI,aAAa,CAAC,GAAG;AACpB,SAAKD,OAAQ,KAAK,UAAU;GAC5B,MAAM,UAAU,KAAK,YAAY,iBAAoC,OAAO;AAC5E,aAAU,WAAW,OAAO;;;CAI9B,QAAQ,KAAY;AACnB,MAAI,QAAQ,KAAK,QAAQ;AACxB,QAAK,cACJ,IAAI,YAAY,eAAe;IAC9B,SAAS;IACT,UAAU;IACV,QAAQ,EAAE,KAAK;IACf,CAAC,CACF;;;;YAvFF,SAAS,EAAE,MAAM,QAAQ,CAAC;8BA5C3B,cAAc,qBAAqB"}
1
+ {"version":3,"file":"dev-wallet-tab-bar.mjs","names":["#select","#handleKeydown"],"sources":["../../src/ui/dev-wallet-tab-bar.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement, type TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { sharedStyles } from './styles.js';\n\n/** Built-in tab ids. */\nexport type BuiltinTabId = 'assets' | 'objects' | 'fork' | 'settings';\nexport type TabId = BuiltinTabId;\n\ninterface TabSpec {\n\tid: TabId;\n\tlabel: string;\n\ticon: TemplateResult;\n}\n\nconst ASSETS_ICON = html`<svg\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\tstroke=\"currentColor\"\n\tstroke-width=\"2\"\n>\n\t<rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n\t<path d=\"M16 12h.01\" />\n</svg>`;\n\nconst OBJECTS_ICON = html`<svg\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\tstroke=\"currentColor\"\n\tstroke-width=\"2\"\n>\n\t<rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" />\n\t<rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" />\n\t<rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" />\n\t<rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" />\n</svg>`;\n\nconst SETTINGS_ICON = html`<svg\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\tstroke=\"currentColor\"\n\tstroke-width=\"2\"\n>\n\t<circle cx=\"12\" cy=\"12\" r=\"3\" />\n\t<path\n\t\td=\"M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\"\n\t/>\n</svg>`;\n\n// Phase 5 Subtopic 6 — fork-controls tab icon. Branching shape signals\n// the \"fork\" semantic without overlapping with the existing wallet\n// glyphs; rendered only when the active manifest's `meta.runtime`\n// resolves to `'forked'` (see `wallet-controller.renderTabBar`).\nconst FORK_ICON = html`<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n\t<circle cx=\"6\" cy=\"6\" r=\"2\" />\n\t<circle cx=\"6\" cy=\"18\" r=\"2\" />\n\t<circle cx=\"18\" cy=\"12\" r=\"2\" />\n\t<path d=\"M6 8v8\" />\n\t<path d=\"M6 12h6\" />\n\t<path d=\"M12 12l4-2\" />\n\t<path d=\"M12 12l4 2\" />\n</svg>`;\n\nconst BUILTIN_TABS: TabSpec[] = [\n\t{ id: 'assets', label: 'Home', icon: ASSETS_ICON },\n\t{ id: 'objects', label: 'Objects', icon: OBJECTS_ICON },\n\t{ id: 'settings', label: 'Settings', icon: SETTINGS_ICON },\n];\n\n/** Built-in tabs plus the fork-controls tab. Returned when the host\n * controller signals fork-mode availability via the `showFork` prop. */\nconst TABS_WITH_FORK: TabSpec[] = [\n\t{ id: 'assets', label: 'Home', icon: ASSETS_ICON },\n\t{ id: 'objects', label: 'Objects', icon: OBJECTS_ICON },\n\t{ id: 'fork', label: 'Fork', icon: FORK_ICON },\n\t{ id: 'settings', label: 'Settings', icon: SETTINGS_ICON },\n];\n\n@customElement('dev-wallet-tab-bar')\nexport class DevWalletTabBar extends LitElement {\n\tstatic override styles = [\n\t\tsharedStyles,\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: block;\n\t\t\t\tborder-bottom: 1px solid var(--dev-wallet-border);\n\t\t\t\tbackground: var(--dev-wallet-surface);\n\t\t\t}\n\n\t\t\t.tab-bar {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: stretch;\n\t\t\t\tmin-height: 38px;\n\t\t\t\toverflow-x: auto;\n\t\t\t\tpadding: 0 6px;\n\t\t\t}\n\n\t\t\t.tab {\n\t\t\t\tposition: relative;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\tgap: 6px;\n\t\t\t\tmin-width: 0;\n\t\t\t\theight: 38px;\n\t\t\t\tpadding: 0 14px;\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: var(--dev-wallet-font-weight-medium);\n\t\t\t\tcolor: var(--dev-wallet-text-2);\n\t\t\t\ttransition:\n\t\t\t\t\tcolor 120ms,\n\t\t\t\t\tbackground 120ms;\n\t\t\t\tborder-bottom: 2px solid transparent;\n\t\t\t\twhite-space: nowrap;\n\t\t\t}\n\n\t\t\t.tab:hover {\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tbackground: var(--dev-wallet-bg-hover);\n\t\t\t}\n\n\t\t\t.tab[aria-selected='true'] {\n\t\t\t\tcolor: var(--dev-wallet-foreground);\n\t\t\t\tborder-bottom-color: var(--dev-wallet-primary);\n\t\t\t}\n\n\t\t\t.tab svg {\n\t\t\t\twidth: 13px;\n\t\t\t\theight: 13px;\n\t\t\t\tflex-shrink: 0;\n\t\t\t}\n\n\t\t\t.tab:last-child {\n\t\t\t\tmargin-left: auto;\n\t\t\t\tpadding: 0 10px;\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ type: String })\n\tactive: TabId = 'assets';\n\n\t/** Phase 5 Subtopic 6 when true, the bar surfaces a \"Fork\" tab\n\t * between Objects and Settings. The host controller toggles this\n\t * on whenever the active stack's manifest reports\n\t * `meta.runtime === 'forked'`. Off by default so bundled-mode\n\t * apps don't accidentally expose admin RPCs. */\n\t@property({ type: Boolean, attribute: 'show-fork' })\n\tshowFork = false;\n\n\toverride render() {\n\t\tconst tabs: TabSpec[] = this.showFork ? TABS_WITH_FORK : BUILTIN_TABS;\n\t\treturn html`\n\t\t\t<nav class=\"tab-bar\" part=\"tab-bar\" role=\"tablist\" aria-label=\"Wallet navigation\">\n\t\t\t\t${tabs.map(\n\t\t\t\t\t(tab) => html`\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"tab\"\n\t\t\t\t\t\t\tpart=\"tab\"\n\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\taria-selected=${this.active === tab.id}\n\t\t\t\t\t\t\ttabindex=${this.active === tab.id ? 0 : -1}\n\t\t\t\t\t\t\t@click=${() => this.#select(tab.id)}\n\t\t\t\t\t\t\t@keydown=${(e: KeyboardEvent) => this.#handleKeydown(e, tabs)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t${tab.icon} ${tab.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</nav>\n\t\t`;\n\t}\n\n\t#handleKeydown(e: KeyboardEvent, tabs: TabSpec[]): void {\n\t\tconst currentIndex = tabs.findIndex((t) => t.id === this.active);\n\t\tlet newIndex = -1;\n\t\tif (e.key === 'ArrowRight') {\n\t\t\te.preventDefault();\n\t\t\tnewIndex = (currentIndex + 1) % tabs.length;\n\t\t} else if (e.key === 'ArrowLeft') {\n\t\t\te.preventDefault();\n\t\t\tnewIndex = (currentIndex - 1 + tabs.length) % tabs.length;\n\t\t}\n\t\tif (newIndex !== -1) {\n\t\t\tconst next = tabs[newIndex];\n\t\t\tif (next === undefined) return;\n\t\t\tthis.#select(next.id);\n\t\t\tconst buttons = this.shadowRoot?.querySelectorAll<HTMLButtonElement>('.tab');\n\t\t\tbuttons?.[newIndex]?.focus();\n\t\t}\n\t}\n\n\t#select(tab: TabId): void {\n\t\tif (tab !== this.active) {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('tab-changed', {\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t\tdetail: { tab },\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'dev-wallet-tab-bar': DevWalletTabBar;\n\t}\n}\n"],"mappings":";;;;;AAkBA,MAAM,cAAc,IAAI;;;;;;;;;AAUxB,MAAM,eAAe,IAAI;;;;;;;;;;;AAYzB,MAAM,gBAAgB,IAAI;;;;;;;;;;;AAgB1B,MAAM,YAAY,IAAI;;;;;;;;;AAUtB,MAAM,eAA0B;CAC/B;EAAE,IAAI;EAAU,OAAO;EAAQ,MAAM;EAAa;CAClD;EAAE,IAAI;EAAW,OAAO;EAAW,MAAM;EAAc;CACvD;EAAE,IAAI;EAAY,OAAO;EAAY,MAAM;EAAe;CAC1D;;;AAID,MAAM,iBAA4B;CACjC;EAAE,IAAI;EAAU,OAAO;EAAQ,MAAM;EAAa;CAClD;EAAE,IAAI;EAAW,OAAO;EAAW,MAAM;EAAc;CACvD;EAAE,IAAI;EAAQ,OAAO;EAAQ,MAAM;EAAW;CAC9C;EAAE,IAAI;EAAY,OAAO;EAAY,MAAM;EAAe;CAC1D;AAGM,IAAA,kBAAA,MAAM,wBAAwB,WAAW;;;gBA6D/B;kBAQL;;;gBApEc,CACxB,cACA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuDH;;CAaD,SAAkB;EACjB,MAAM,OAAkB,KAAK,WAAW,iBAAiB;AACzD,SAAO,IAAI;;MAEP,KAAK,KACL,QAAQ,IAAI;;;;;uBAKK,KAAK,WAAW,IAAI,GAAG;kBAC5B,KAAK,WAAW,IAAI,KAAK,IAAI,GAAG;sBAC5B,MAAA,OAAa,IAAI,GAAG,CAAC;mBACxB,MAAqB,MAAA,cAAoB,GAAG,KAAK,CAAC;;SAE5D,IAAI,KAAK,GAAG,IAAI,MAAM;;OAG1B,CAAC;;;;CAKL,eAAe,GAAkB,MAAuB;EACvD,MAAM,eAAe,KAAK,WAAW,MAAM,EAAE,OAAO,KAAK,OAAO;EAChE,IAAI,WAAW;AACf,MAAI,EAAE,QAAQ,cAAc;AAC3B,KAAE,gBAAgB;AAClB,eAAY,eAAe,KAAK,KAAK;aAC3B,EAAE,QAAQ,aAAa;AACjC,KAAE,gBAAgB;AAClB,eAAY,eAAe,IAAI,KAAK,UAAU,KAAK;;AAEpD,MAAI,aAAa,IAAI;GACpB,MAAM,OAAO,KAAK;AAClB,OAAI,SAAS,OAAW;AACxB,SAAA,OAAa,KAAK,GAAG;AAErB,IADgB,KAAK,YAAY,iBAAoC,OAAO,IAClE,WAAW,OAAO;;;CAI9B,QAAQ,KAAkB;AACzB,MAAI,QAAQ,KAAK,OAChB,MAAK,cACJ,IAAI,YAAY,eAAe;GAC9B,SAAS;GACT,UAAU;GACV,QAAQ,EAAE,KAAK;GACf,CAAC,CACF;;;YA7DF,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,EAAA,gBAAA,WAAA,UAAA,KAAA,EAAA;YAQ1B,SAAS;CAAE,MAAM;CAAS,WAAW;CAAa,CAAC,CAAA,EAAA,gBAAA,WAAA,YAAA,KAAA,EAAA;8BArEpD,cAAc,qBAAqB,CAAA,EAAA,gBAAA"}
@@ -1,8 +1,8 @@
1
+ import { DevWalletPanel } from "./dev-wallet-panel.mjs";
1
2
  import { DevWalletDropdown } from "./dev-wallet-dropdown.mjs";
2
3
  import { DevWalletNewAccount } from "./dev-wallet-new-account.mjs";
3
4
  import { DevWalletAccounts } from "./dev-wallet-accounts.mjs";
4
5
  import { DevWalletBalances } from "./dev-wallet-balances.mjs";
5
- import { DevWalletPanel } from "./dev-wallet-panel.mjs";
6
6
  import { DevWalletSigning } from "./dev-wallet-signing.mjs";
7
7
  import { DevWalletConnect } from "./dev-wallet-connect.mjs";
8
8
  import { DevWalletObjects } from "./dev-wallet-objects.mjs";
@@ -13,5 +13,6 @@ import { DevWalletSigningModal } from "./dev-wallet-signing-modal.mjs";
13
13
  import { DevWalletAccountSelector } from "./dev-wallet-account-selector.mjs";
14
14
  import { DevWalletNetworkBadge } from "./dev-wallet-network-badge.mjs";
15
15
  import { DevWalletTabBar } from "./dev-wallet-tab-bar.mjs";
16
+ import { DevWalletForkPanel } from "./dev-wallet-fork-panel.mjs";
16
17
  import { mountDevWallet } from "./mount.mjs";
17
- export { DevWalletAccountSelector, DevWalletAccounts, DevWalletBalances, DevWalletConnect, DevWalletDropdown, DevWalletNetworkBadge, DevWalletNewAccount, DevWalletObjects, DevWalletPanel, DevWalletPopup, DevWalletSettings, DevWalletSigning, DevWalletSigningModal, DevWalletStandalone, DevWalletTabBar, mountDevWallet };
18
+ export { DevWalletAccountSelector, DevWalletAccounts, DevWalletBalances, DevWalletConnect, DevWalletDropdown, DevWalletForkPanel, DevWalletNetworkBadge, DevWalletNewAccount, DevWalletObjects, DevWalletPanel, DevWalletPopup, DevWalletSettings, DevWalletSigning, DevWalletSigningModal, DevWalletStandalone, DevWalletTabBar, mountDevWallet };
package/dist/ui/index.mjs CHANGED
@@ -2,6 +2,7 @@ import { DevWalletDropdown } from "./dev-wallet-dropdown.mjs";
2
2
  import { DevWalletAccountSelector } from "./dev-wallet-account-selector.mjs";
3
3
  import { DevWalletBalances } from "./dev-wallet-balances.mjs";
4
4
  import { DevWalletConnect } from "./dev-wallet-connect.mjs";
5
+ import { DevWalletForkPanel } from "./dev-wallet-fork-panel.mjs";
5
6
  import { DevWalletNetworkBadge } from "./dev-wallet-network-badge.mjs";
6
7
  import { DevWalletObjects } from "./dev-wallet-objects.mjs";
7
8
  import { DevWalletNewAccount } from "./dev-wallet-new-account.mjs";
@@ -14,5 +15,4 @@ import { DevWalletPanel } from "./dev-wallet-panel.mjs";
14
15
  import { DevWalletPopup } from "./dev-wallet-popup.mjs";
15
16
  import { DevWalletStandalone } from "./dev-wallet-standalone.mjs";
16
17
  import { mountDevWallet } from "./mount.mjs";
17
-
18
- export { DevWalletAccountSelector, DevWalletAccounts, DevWalletBalances, DevWalletConnect, DevWalletDropdown, DevWalletNetworkBadge, DevWalletNewAccount, DevWalletObjects, DevWalletPanel, DevWalletPopup, DevWalletSettings, DevWalletSigning, DevWalletSigningModal, DevWalletStandalone, DevWalletTabBar, mountDevWallet };
18
+ export { DevWalletAccountSelector, DevWalletAccounts, DevWalletBalances, DevWalletConnect, DevWalletDropdown, DevWalletForkPanel, DevWalletNetworkBadge, DevWalletNewAccount, DevWalletObjects, DevWalletPanel, DevWalletPopup, DevWalletSettings, DevWalletSigning, DevWalletSigningModal, DevWalletStandalone, DevWalletTabBar, mountDevWallet };
@@ -1,10 +1,23 @@
1
+ import { ForkRelay } from "../adapters/fork-relay.mjs";
1
2
  import { DevWallet } from "../wallet/dev-wallet.mjs";
2
- import "./dev-wallet-panel.mjs";
3
+ import { CoinRecord } from "./utils.mjs";
4
+ import { DevWalletDockStyle } from "./dev-wallet-panel.mjs";
3
5
 
4
6
  //#region src/ui/mount.d.ts
5
7
  /** @returns A cleanup function that removes the panel from the DOM. */
6
8
  declare function mountDevWallet(wallet: DevWallet, options?: {
7
9
  container?: HTMLElement;
10
+ /** Pre-seeded coin metadata — pass the generated `coins` constant
11
+ * from devstack codegen to skip per-coin RPC waterfalls on UI
12
+ * load. See `DevWalletPanel.coins`. */
13
+ coins?: CoinRecord | null;
14
+ /** Phase 5 Subtopic 6 — fork admin relay. Construct via
15
+ * `createForkRelayFromManifest(manifest)` and pass through;
16
+ * the panel surfaces a Fork tab whenever this is non-null and
17
+ * the active network ends in `-fork`. */
18
+ forkRelay?: ForkRelay | null; /** Upstream label (`'mainnet'`, …) sourced from `meta.upstream`. */
19
+ forkUpstream?: string; /** Floating dock presentation. Defaults to the corner pill from the handoff. */
20
+ dockStyle?: DevWalletDockStyle;
8
21
  }): () => void;
9
22
  //#endregion
10
23
  export { mountDevWallet };
@@ -1 +1 @@
1
- {"version":3,"file":"mount.d.mts","names":[],"sources":["../../src/ui/mount.ts"],"mappings":";;;;;iBAOgB,cAAA,CACf,MAAA,EAAQ,SAAA,EACR,OAAA;EAAY,SAAA,GAAY,WAAA;AAAA"}
1
+ {"version":3,"file":"mount.d.mts","names":[],"sources":["../../src/ui/mount.ts"],"mappings":";;;;;;;iBAUgB,cAAA,CACf,MAAA,EAAQ,SAAA,EACR,OAAA;EACC,SAAA,GAAY,WAAA;;;;EAIZ,KAAA,GAAQ,UAAA;EAKI;;;;EAAZ,SAAA,GAAY,SAAA,SAXb;EAaC,YAAA,WAXY;EAaZ,SAAA,GAAY,kBAAA;AAAA"}
package/dist/ui/mount.mjs CHANGED
@@ -1,17 +1,20 @@
1
1
  import "./dev-wallet-panel.mjs";
2
-
3
2
  //#region src/ui/mount.ts
4
3
  /** @returns A cleanup function that removes the panel from the DOM. */
5
4
  function mountDevWallet(wallet, options) {
6
5
  const container = options?.container ?? document.body;
7
6
  const panel = document.createElement("dev-wallet-panel");
8
7
  panel.wallet = wallet;
8
+ if (options?.coins !== void 0) panel.coins = options.coins;
9
+ if (options?.forkRelay !== void 0) panel.forkRelay = options.forkRelay;
10
+ if (options?.forkUpstream !== void 0) panel.forkUpstream = options.forkUpstream;
11
+ if (options?.dockStyle !== void 0) panel.dockStyle = options.dockStyle;
9
12
  container.appendChild(panel);
10
13
  return () => {
11
14
  panel.remove();
12
15
  };
13
16
  }
14
-
15
17
  //#endregion
16
18
  export { mountDevWallet };
19
+
17
20
  //# sourceMappingURL=mount.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"mount.mjs","names":[],"sources":["../../src/ui/mount.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { DevWallet } from '../wallet/dev-wallet.js';\nimport './dev-wallet-panel.js';\n\n/** @returns A cleanup function that removes the panel from the DOM. */\nexport function mountDevWallet(\n\twallet: DevWallet,\n\toptions?: { container?: HTMLElement },\n): () => void {\n\tconst container = options?.container ?? document.body;\n\n\tconst panel = document.createElement('dev-wallet-panel');\n\tpanel.wallet = wallet;\n\tcontainer.appendChild(panel);\n\n\treturn () => {\n\t\tpanel.remove();\n\t};\n}\n"],"mappings":";;;;AAOA,SAAgB,eACf,QACA,SACa;CACb,MAAM,YAAY,SAAS,aAAa,SAAS;CAEjD,MAAM,QAAQ,SAAS,cAAc,mBAAmB;AACxD,OAAM,SAAS;AACf,WAAU,YAAY,MAAM;AAE5B,cAAa;AACZ,QAAM,QAAQ"}
1
+ {"version":3,"file":"mount.mjs","names":[],"sources":["../../src/ui/mount.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ForkRelay } from '../adapters/fork-relay.js';\nimport type { DevWallet } from '../wallet/dev-wallet.js';\nimport './dev-wallet-panel.js';\nimport type { DevWalletDockStyle } from './dev-wallet-panel.js';\nimport type { CoinRecord } from './utils.js';\n\n/** @returns A cleanup function that removes the panel from the DOM. */\nexport function mountDevWallet(\n\twallet: DevWallet,\n\toptions?: {\n\t\tcontainer?: HTMLElement;\n\t\t/** Pre-seeded coin metadata — pass the generated `coins` constant\n\t\t * from devstack codegen to skip per-coin RPC waterfalls on UI\n\t\t * load. See `DevWalletPanel.coins`. */\n\t\tcoins?: CoinRecord | null;\n\t\t/** Phase 5 Subtopic 6 — fork admin relay. Construct via\n\t\t * `createForkRelayFromManifest(manifest)` and pass through;\n\t\t * the panel surfaces a Fork tab whenever this is non-null and\n\t\t * the active network ends in `-fork`. */\n\t\tforkRelay?: ForkRelay | null;\n\t\t/** Upstream label (`'mainnet'`, …) sourced from `meta.upstream`. */\n\t\tforkUpstream?: string;\n\t\t/** Floating dock presentation. Defaults to the corner pill from the handoff. */\n\t\tdockStyle?: DevWalletDockStyle;\n\t},\n): () => void {\n\tconst container = options?.container ?? document.body;\n\n\tconst panel = document.createElement('dev-wallet-panel');\n\tpanel.wallet = wallet;\n\tif (options?.coins !== undefined) panel.coins = options.coins;\n\tif (options?.forkRelay !== undefined) panel.forkRelay = options.forkRelay;\n\tif (options?.forkUpstream !== undefined) panel.forkUpstream = options.forkUpstream;\n\tif (options?.dockStyle !== undefined) panel.dockStyle = options.dockStyle;\n\tcontainer.appendChild(panel);\n\n\treturn () => {\n\t\tpanel.remove();\n\t};\n}\n"],"mappings":";;;AAUA,SAAgB,eACf,QACA,SAgBa;CACb,MAAM,YAAY,SAAS,aAAa,SAAS;CAEjD,MAAM,QAAQ,SAAS,cAAc,mBAAmB;AACxD,OAAM,SAAS;AACf,KAAI,SAAS,UAAU,OAAW,OAAM,QAAQ,QAAQ;AACxD,KAAI,SAAS,cAAc,OAAW,OAAM,YAAY,QAAQ;AAChE,KAAI,SAAS,iBAAiB,OAAW,OAAM,eAAe,QAAQ;AACtE,KAAI,SAAS,cAAc,OAAW,OAAM,YAAY,QAAQ;AAChE,WAAU,YAAY,MAAM;AAE5B,cAAa;AACZ,QAAM,QAAQ"}