@roochnetwork/rooch-sdk-kit
Version:
Rooch SDK Kit
800 lines (763 loc) • 43.7 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/components/local-wallet-modal/views/ManagerView.tsx
var ManagerView_exports = {};
__export(ManagerView_exports, {
LocalWalletManagerView: () => LocalWalletManagerView
});
module.exports = __toCommonJS(ManagerView_exports);
// src/components/local-wallet-modal/views/ManagerView.css.ts
var accountActions = "ManagerView_accountActions__1ou9szh4";
var accountHeader = "ManagerView_accountHeader__1ou9szh3";
var accountName = "ManagerView_accountName__1ou9szh7";
var accountSection = "ManagerView_accountSection__1ou9szh2";
var actionButton = "ManagerView_actionButton__1ou9szhi";
var actions = "ManagerView_actions__1ou9szhd";
var addressActions = "ManagerView_addressActions__1ou9szhh";
var addressContent = "ManagerView_addressContent__1ou9szha";
var addressItem = "ManagerView_addressItem__1ou9szh9";
var addressList = "ManagerView_addressList__1ou9szh8";
var addressText = "ManagerView_addressText__1ou9szhc";
var container = "ManagerView_container__1ou9szh0";
var copyFeedback = "ManagerView_copyFeedback__1ou9szhb";
var copyNotification = "ManagerView_copyNotification__1ou9szhj";
var icon = "ManagerView_icon__1ou9szh6";
var iconButton = "ManagerView_iconButton__1ou9szh5";
var importActions = "ManagerView_importActions__1ou9szhg";
var importForm = "ManagerView_importForm__1ou9szhe";
var importInput = "ManagerView_importInput__1ou9szhf";
var title = "ManagerView_title__1ou9szh1";
// src/components/ui/Button.tsx
var import_react_slot = require("@radix-ui/react-slot");
var import_clsx = __toESM(require("clsx"), 1);
var import_react = require("react");
// src/components/ui/Button.css.ts
var import_createRuntimeFn = require("@vanilla-extract/recipes/createRuntimeFn");
var buttonVariants = (0, import_createRuntimeFn.createRuntimeFn)({ defaultClassName: "Button_buttonVariants__1vdhm2g0", variantClassNames: { variant: { primary: "Button_buttonVariants_variant_primary__1vdhm2g1", outline: "Button_buttonVariants_variant_outline__1vdhm2g2" }, size: { md: "Button_buttonVariants_size_md__1vdhm2g3", lg: "Button_buttonVariants_size_lg__1vdhm2g4" } }, defaultVariants: { variant: "primary", size: "md" }, compoundVariants: [] });
// src/components/ui/Button.tsx
var import_jsx_runtime = require("react/jsx-runtime");
var Button = (0, import_react.forwardRef)(
({ className, variant, size, asChild = false, ...props }, forwardedRef) => {
const Comp = asChild ? import_react_slot.Slot : "button";
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
Comp,
{
...props,
className: (0, import_clsx.default)(buttonVariants({ variant, size }), className),
ref: forwardedRef
}
);
}
);
Button.displayName = "Button";
// src/components/ui/Heading.tsx
var import_react_slot2 = require("@radix-ui/react-slot");
var import_clsx2 = __toESM(require("clsx"), 1);
var import_react2 = require("react");
// src/components/ui/Heading.css.ts
var import_createRuntimeFn2 = require("@vanilla-extract/recipes/createRuntimeFn");
var headingVariants = (0, import_createRuntimeFn2.createRuntimeFn)({ defaultClassName: "Heading__1v58k1t0", variantClassNames: { size: { sm: "Heading_headingVariants_size_sm__1v58k1t1", md: "Heading_headingVariants_size_md__1v58k1t2", lg: "Heading_headingVariants_size_lg__1v58k1t3", xl: "Heading_headingVariants_size_xl__1v58k1t4" }, weight: { normal: "Heading_headingVariants_weight_normal__1v58k1t5", bold: "Heading_headingVariants_weight_bold__1v58k1t6" }, truncate: { true: "Heading_headingVariants_truncate_true__1v58k1t7" } }, defaultVariants: { size: "lg", weight: "bold" }, compoundVariants: [] });
// src/components/ui/Heading.tsx
var import_jsx_runtime2 = require("react/jsx-runtime");
var Heading = (0, import_react2.forwardRef)(
({
children,
className,
asChild = false,
as: Tag = "h1",
size,
weight,
truncate,
...headingProps
}, forwardedRef) => {
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
import_react_slot2.Slot,
{
...headingProps,
ref: forwardedRef,
className: (0, import_clsx2.default)(headingVariants({ size, weight, truncate }), className),
children: asChild ? children : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Tag, { children })
}
);
}
);
Heading.displayName = "Heading";
// src/components/local-wallet-modal/views/ManagerView.tsx
var import_react10 = require("react");
// src/wallet/local.ts
var import_rooch_sdk3 = require("@roochnetwork/rooch-sdk");
// src/wallet/wallet.ts
var import_rooch_sdk = require("@roochnetwork/rooch-sdk");
var Wallet = class extends import_rooch_sdk.Signer {
/**
* Checks if the wallet is installed.
* @returns A promise that resolves to true if the wallet is installed, otherwise false.
*/
async checkInstalled() {
for (let i = 1; i < 10 && !this.getTarget(); i += 1) {
await new Promise((resolve) => setTimeout(resolve, 100 * i));
}
return Promise.resolve(this.getTarget() !== void 0);
}
};
// src/wallet/bitcoin.ts
var import_rooch_sdk2 = require("@roochnetwork/rooch-sdk");
var BitcoinWallet = class extends Wallet {
async signTransaction(input) {
const message = new import_rooch_sdk2.BitcoinSignMessage(input.hashData(), input.getInfo() || "");
return import_rooch_sdk2.Authenticator.bitcoin(message, this, "raw");
}
getPublicKey() {
if (!this.publicKey) {
throw Error("Please connect your wallet first");
}
return new import_rooch_sdk2.Secp256k1PublicKey((0, import_rooch_sdk2.fromHEX)(this.publicKey));
}
getRoochAddress() {
if (!this.currentAddress) {
throw Error("Please connect your wallet first");
}
return this.currentAddress.genRoochAddress();
}
getBitcoinAddress() {
if (!this.currentAddress) {
throw Error("Please connect your wallet first");
}
return this.currentAddress;
}
getKeyScheme() {
return "Secp256k1";
}
normalize_recovery_id(v) {
let normalizeV = v - 27 - 4;
if (normalizeV < 0) {
normalizeV = normalizeV + 4;
}
return normalizeV;
}
switchAccount() {
throw new Error("Method not implemented.");
}
getChain() {
return "bitcoin";
}
};
// src/wallet/local.ts
var LocalKey = "local-wallet-key";
var LocalActiveAddress = "local-wallet-active-address";
var LocalWallet = class extends BitcoinWallet {
static getAccounts() {
const keyString = window.localStorage.getItem(LocalKey);
let accounts = /* @__PURE__ */ new Map();
if (keyString) {
try {
const parsed = JSON.parse(keyString);
accounts = new Map(parsed.map(([k, v]) => [k, v]));
} catch (e) {
console.error("Failed to parse accounts from localStorage:", e);
window.localStorage.removeItem(LocalKey);
}
}
return accounts;
}
static removeAddress(accountName2, key) {
let accounts = LocalWallet.getAccounts();
if (accounts.has(accountName2)) {
const account = accounts.get(accountName2);
if (account) {
account.keys = account.keys.filter((a) => a !== key);
}
}
window.localStorage.setItem(LocalKey, JSON.stringify(Array.from(accounts.entries())));
return accounts;
}
static removeAccount(accountName2) {
let accounts = LocalWallet.getAccounts();
accounts.delete(accountName2);
window.localStorage.setItem(LocalKey, JSON.stringify(Array.from(accounts.entries())));
return accounts;
}
static createAddress(accountName2) {
const accounts = LocalWallet.getAccounts();
const account = accounts.get(accountName2);
if (account) {
const kp = import_rooch_sdk3.Secp256k1Keypair.deriveKeypair(
account.mnemonic,
`m/86'/0'/0'/0/${account.keys.length + 1}`
);
account.keys.push(kp.getSecretKey());
}
window.localStorage.setItem(LocalKey, JSON.stringify(Array.from(accounts.entries())));
return accounts;
}
static createAccount() {
const { mnemonic, keypair } = import_rooch_sdk3.Secp256k1Keypair.generateWithMnemonic();
let accounts = LocalWallet.getAccounts();
accounts.set(`Account${accounts.size + 1}`, {
mnemonic,
keys: [keypair.getSecretKey()]
});
window.localStorage.setItem(LocalKey, JSON.stringify(Array.from(accounts.entries())));
return accounts;
}
static importAccount(mnemonic) {
const accounts = LocalWallet.getAccounts();
const newAccount = import_rooch_sdk3.Secp256k1Keypair.deriveKeypair(mnemonic);
accounts.set(`Account${accounts.size + 1}`, {
mnemonic,
keys: [newAccount.getSecretKey()]
});
window.localStorage.setItem(LocalKey, JSON.stringify(Array.from(accounts.entries())));
return accounts;
}
getName() {
return "Local";
}
getIcon(_) {
return "data:image/png;base64,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";
}
getDescription() {
return "Local Wallet";
}
getInstallUrl() {
return "";
}
async signTransaction(input) {
return this.keypair.signTransaction(input);
}
async sign(msg) {
return this.keypair.sign(msg);
}
getTarget() {
return this;
}
async connect() {
const accounts = LocalWallet.getAccounts();
const activeAddress = window.localStorage.getItem(LocalActiveAddress);
const network = await this.getNetwork();
for (const account of accounts.entries()) {
for (const key of account[1].keys) {
if (activeAddress === key) {
this.keypair = import_rooch_sdk3.Secp256k1Keypair.fromSecretKey(key);
break;
}
}
}
this.currentAddress = this.keypair.getBitcoinAddressWith(this.formatNetwork(network));
this.publicKey = this.keypair.getSchnorrPublicKey().toString();
this.address = [this.currentAddress];
return this.address;
}
switchNetwork(network) {
window.localStorage.setItem("local-wallet-net", network);
if (this.onNetworkChange) {
this.onNetworkChange(network);
}
if (this.onAccountsChange) {
this.onAccountsChange([
this.keypair.getBitcoinAddressWith(this.formatNetwork(network)).toStr()
]);
}
return Promise.resolve();
}
getNetwork() {
return Promise.resolve(
window.localStorage.getItem("local-wallet-net") || "testnet"
);
}
getSupportNetworks() {
return ["livenet", "testnet"];
}
onAccountsChanged(callback) {
this.onAccountsChange = callback;
}
removeAccountsChanged(_) {
this.onAccountsChange = void 0;
}
// TODO: support listener?
onNetworkChanged(callback) {
this.onNetworkChange = callback;
}
removeNetworkChanged(_) {
this.onNetworkChange = void 0;
}
sendBtc(_) {
throw Error("local not support sendBtc!");
}
getBalance() {
throw Error("local not support getBalance!");
}
formatNetwork(network) {
switch (network) {
case "livenet":
return import_rooch_sdk3.BitcoinNetowkType.Bitcoin;
default:
return import_rooch_sdk3.BitcoinNetowkType.Testnet;
}
}
};
// src/components/local-wallet-modal/views/ManagerView.tsx
var import_rooch_sdk6 = require("@roochnetwork/rooch-sdk");
// src/components/icons/PlusIcon.tsx
var import_jsx_runtime3 = require("react/jsx-runtime");
function PlusIcon({ className }) {
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
"svg",
{
className,
width: "16",
height: "16",
viewBox: "0 0 16 16",
fill: "none",
xmlns: "http://www.w3.org/2000/svg",
children: [
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
"path",
{
d: "M8 3.33334V12.6667",
stroke: "currentColor",
strokeWidth: "1.5",
strokeLinecap: "round",
strokeLinejoin: "round"
}
),
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
"path",
{
d: "M3.33334 8H12.6667",
stroke: "currentColor",
strokeWidth: "1.5",
strokeLinecap: "round",
strokeLinejoin: "round"
}
)
]
}
);
}
// src/components/icons/TrashIcon.tsx
var import_jsx_runtime4 = require("react/jsx-runtime");
function TrashIcon({ className }) {
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
"svg",
{
className,
width: "16",
height: "16",
viewBox: "0 0 16 16",
fill: "none",
xmlns: "http://www.w3.org/2000/svg",
children: [
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
"path",
{
d: "M2 4H3.33333H14",
stroke: "currentColor",
strokeWidth: "1.5",
strokeLinecap: "round",
strokeLinejoin: "round"
}
),
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
"path",
{
d: "M5.33334 4V2.66667C5.33334 2.31305 5.47382 1.97391 5.72387 1.72386C5.97392 1.47381 6.31306 1.33334 6.66668 1.33334H9.33334C9.68697 1.33334 10.0261 1.47381 10.2761 1.72386C10.5262 1.97391 10.6667 2.31305 10.6667 2.66667V4M12.6667 4V13.3333C12.6667 13.687 12.5262 14.0261 12.2761 14.2761C12.0261 14.5262 11.687 14.6667 11.3333 14.6667H4.66668C4.31306 14.6667 3.97392 14.5262 3.72387 14.2761C3.47382 14.0261 3.33334 13.687 3.33334 13.3333V4H12.6667Z",
stroke: "currentColor",
strokeWidth: "1.5",
strokeLinecap: "round",
strokeLinejoin: "round"
}
)
]
}
);
}
// src/components/icons/KeyIcon.tsx
var import_jsx_runtime5 = require("react/jsx-runtime");
function KeyIcon({ className }) {
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
"svg",
{
className,
width: "16",
height: "16",
viewBox: "0 0 16 16",
fill: "none",
xmlns: "http://www.w3.org/2000/svg",
children: [
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
"path",
{
d: "M10.6667 5.33334C10.6667 6.80609 9.47343 8 8.00067 8C6.52792 8 5.33334 6.80609 5.33334 5.33334C5.33334 3.86059 6.52792 2.66667 8.00067 2.66667C9.47343 2.66667 10.6667 3.86059 10.6667 5.33334Z",
stroke: "currentColor",
strokeWidth: "1.5",
strokeLinecap: "round",
strokeLinejoin: "round"
}
),
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
"path",
{
d: "M8 8V14.6667",
stroke: "currentColor",
strokeWidth: "1.5",
strokeLinecap: "round",
strokeLinejoin: "round"
}
),
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
"path",
{
d: "M6 12H10",
stroke: "currentColor",
strokeWidth: "1.5",
strokeLinecap: "round",
strokeLinejoin: "round"
}
)
]
}
);
}
// src/hooks/client/useCurrentNetwork.ts
function useCurrentNetwork() {
return useRoochContext().network;
}
// src/hooks/client/useRoochContext.ts
var import_react9 = require("react");
// src/provider/clientProvider.tsx
var import_react8 = require("react");
var import_rooch_sdk5 = require("@roochnetwork/rooch-sdk");
// src/hooks/useSessionsStore.ts
var import_react7 = require("react");
var import_zustand2 = require("zustand");
// src/provider/roochProvider.tsx
var import_react4 = require("react");
// src/provider/globalProvider.tsx
var import_react3 = require("react");
var import_jsx_runtime6 = require("react/jsx-runtime");
var GlobalContext = (0, import_react3.createContext)(null);
var useTriggerError = () => {
const ctx = (0, import_react3.useContext)(GlobalContext);
if (!ctx) {
throw new Error("useTriggerError must be used within a GlobalProvider");
}
return ctx.triggerError;
};
// src/provider/roochProvider.tsx
var import_jsx_runtime7 = require("react/jsx-runtime");
var RoochContext = (0, import_react4.createContext)(null);
// src/provider/walletProvider.tsx
var import_react6 = require("react");
var import_rooch_sdk4 = require("@roochnetwork/rooch-sdk");
// src/hooks/wallet/useWalletStore.ts
var import_react5 = require("react");
var import_zustand = require("zustand");
function useWalletStore(selector) {
const store = (0, import_react5.useContext)(WalletContext);
if (!store) {
throw new Error("Could not find WalletContext. Ensure that you have set up the WalletProvider.");
}
return (0, import_zustand.useStore)(store, selector);
}
// src/provider/walletProvider.tsx
var import_jsx_runtime8 = require("react/jsx-runtime");
var WalletContext = (0, import_react6.createContext)(null);
// src/hooks/useSessionsStore.ts
function useSessionStore(selector) {
const store = (0, import_react7.useContext)(RoochContext);
if (!store) {
throw new Error(
"Could not find RoochSessionContext. Ensure that you have set up the RoochClientProvider."
);
}
return (0, import_zustand2.useStore)(store, selector);
}
// src/provider/clientProvider.tsx
var import_jsx_runtime9 = require("react/jsx-runtime");
var ClientContext = (0, import_react8.createContext)(null);
var DEFAULT_NETWORKS = {
localnet: { url: (0, import_rooch_sdk5.getRoochNodeUrl)("localnet") }
};
// src/hooks/client/useRoochContext.ts
function useRoochContext() {
const context = (0, import_react9.useContext)(ClientContext);
if (!context) {
throw new Error(
"Could not find RoochClientContext. Ensure that you have set up the RoochClientProvider."
);
}
return context;
}
// src/constants/walletMutationKeys.ts
function formMutationKeyFn(baseEntity) {
return function mutationKeyFn(additionalKeys = []) {
return [{ ...walletMutationKeys.all, baseEntity }, ...additionalKeys];
};
}
var walletMutationKeys = {
all: { baseScope: "wallet" },
connectWallet: formMutationKeyFn("connect-wallet"),
autoConnectWallet: formMutationKeyFn("auto-connect-wallet"),
switchAccount: formMutationKeyFn("switch-account"),
createSessionKey: formMutationKeyFn("create-session-key")
};
// src/hooks/wallet/useConnectWallet.ts
var import_react_query = require("@tanstack/react-query");
// src/hooks/useSessions.ts
function useSessions() {
return useSessionStore(
(state) => state.sessions.sort((a, b) => b.getCreateTime() - a.getCreateTime())
);
}
// src/hooks/wallet/useConnectWallet.ts
function useConnectWallet({
mutationKey,
...mutationOptions
} = {}) {
const sessions = useSessions();
const setCurrentSession = useSessionStore((state) => state.setCurrentSession);
const setWalletConnected = useWalletStore((state) => state.setWalletConnected);
const setWalletDisconnected = useWalletStore((state) => state.setWalletDisconnected);
const setConnectionStatus = useWalletStore((state) => state.setConnectionStatus);
const triggerError = useTriggerError();
return (0, import_react_query.useMutation)({
mutationKey: walletMutationKeys.connectWallet(mutationKey),
mutationFn: async ({ wallet }) => {
try {
setConnectionStatus("connecting");
const connectAddress = await wallet.connect();
const selectedAddress = connectAddress[0];
setWalletConnected(wallet, connectAddress, selectedAddress);
const cur = sessions.find(
(item) => item.getRoochAddress().toStr() === selectedAddress?.genRoochAddress().toStr()
);
setCurrentSession(cur);
return connectAddress;
} catch (error) {
setWalletDisconnected();
if ("code" in error && "message" in error) {
triggerError(error);
}
throw error;
}
},
...mutationOptions
});
}
// src/hooks/wallet/useCurrentAddress.ts
function useCurrentAddress() {
return useWalletStore((state) => state.currentAddress);
}
// src/components/local-wallet-modal/views/ManagerView.tsx
var import_jsx_runtime10 = require("react/jsx-runtime");
function LocalWalletManagerView() {
const [accounts, setAccounts] = (0, import_react10.useState)(/* @__PURE__ */ new Map());
const [showImportForm, setShowImportForm] = (0, import_react10.useState)(false);
const [importValue, setImportValue] = (0, import_react10.useState)("");
const [copiedAddress, setCopiedAddress] = (0, import_react10.useState)(null);
const [showCopyNotification, setShowCopyNotification] = (0, import_react10.useState)(false);
const { mutateAsync } = useConnectWallet();
const network = useCurrentNetwork();
const currentAddress = useCurrentAddress();
(0, import_react10.useEffect)(() => {
const accounts2 = LocalWallet.getAccounts();
setAccounts(accounts2);
}, []);
const addresss = (0, import_react10.useMemo)(() => {
const addresses = /* @__PURE__ */ new Map();
for (const account of accounts.entries()) {
const addressList2 = [];
for (const key of account[1].keys) {
const address = import_rooch_sdk6.Secp256k1Keypair.fromSecretKey(key).getBitcoinAddressWith(
network === "mainnet" ? import_rooch_sdk6.BitcoinNetowkType.Bitcoin : import_rooch_sdk6.BitcoinNetowkType.Testnet
).toStr();
addressList2.push({
address,
key
});
}
addresses.set(account[0], {
address: addressList2,
mnemonic: account[1].mnemonic
});
}
return addresses;
}, [accounts, network]);
const handleCreateAccount = async () => {
const accounts2 = LocalWallet.createAccount();
setAccounts(accounts2);
};
const handleCreateAddress = async (accountName2) => {
const accounts2 = LocalWallet.createAddress(accountName2);
setAccounts(accounts2);
};
const handleImport = async () => {
const accounts2 = LocalWallet.importAccount(importValue);
setAccounts(accounts2);
setShowImportForm(false);
};
const handleDeleteAddress = (accountName2, address) => {
const accounts2 = LocalWallet.removeAddress(accountName2, address);
setAccounts(accounts2);
};
const handleDeleteAccount = (accountName2) => {
const accounts2 = LocalWallet.removeAccount(accountName2);
setAccounts(accounts2);
};
const handleConnect = (key) => {
window.localStorage.setItem(LocalActiveAddress, key);
mutateAsync({ wallet: new LocalWallet() });
};
const handleCopy = async (address) => {
try {
await navigator.clipboard.writeText(address);
setCopiedAddress(address);
setTimeout(() => setCopiedAddress(null), 2e3);
} catch (err) {
console.error("Failed to copy address:", err);
}
};
const handleCopyKey = async (input) => {
try {
await navigator.clipboard.writeText(input);
setShowCopyNotification(true);
setTimeout(() => setShowCopyNotification(false), 1e3);
} catch (err) {
console.error("Failed to copy:", err);
}
};
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: container, children: [
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading, { size: "lg", className: title, children: "Local Wallet" }),
showCopyNotification && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: copyNotification, children: "copied to clipboard" }),
!showImportForm && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: addressList, children: Array.from(addresss.entries()).map(([accountName2, account]) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: accountSection, children: [
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: accountHeader, children: [
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: accountName, children: accountName2 }),
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: accountActions, children: [
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
Button,
{
variant: "outline",
className: iconButton,
onClick: () => handleCreateAddress(accountName2),
title: "Derive New Address",
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PlusIcon, { className: icon })
}
),
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
Button,
{
variant: "outline",
className: iconButton,
onClick: () => handleCopyKey(account.mnemonic),
title: "Export Mnemonic",
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(KeyIcon, { className: icon })
}
),
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
Button,
{
variant: "outline",
className: iconButton,
onClick: () => handleDeleteAccount(accountName2),
title: "Delete Account",
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TrashIcon, { className: icon })
}
)
] })
] }),
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: addressList, children: account.address.map((addr) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: addressItem, children: [
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: addressContent, children: [
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
"span",
{
className: addressText,
onClick: () => handleCopy(addr.address),
style: { cursor: "pointer" },
children: (0, import_rooch_sdk6.toShortStr)(addr.address, { start: 16, end: 6 })
}
),
copiedAddress === addr.address && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: copyFeedback, children: "Copied!" })
] }),
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: addressActions, children: [
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
Button,
{
variant: "outline",
disabled: currentAddress?.toStr() === addr.address,
className: actionButton,
onClick: () => handleConnect(addr.key),
children: "Switch"
}
),
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
Button,
{
variant: "outline",
className: actionButton,
onClick: () => handleCopyKey(addr.key),
children: "Copy Key"
}
),
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
Button,
{
variant: "outline",
className: actionButton,
onClick: () => handleDeleteAddress(accountName2, addr.key),
children: "Delete"
}
)
] })
] }, addr.address)) })
] }, accountName2)) }),
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: actions, children: [
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "outline", onClick: handleCreateAccount, children: "Create" }),
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "outline", onClick: () => setShowImportForm(true), children: "Import" })
] })
] }),
showImportForm && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: importForm, children: [
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
"textarea",
{
className: importInput,
value: importValue,
onChange: (e) => setImportValue(e.target.value),
placeholder: `Enter your mnemonic`
}
),
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: importActions, children: [
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "outline", onClick: () => setShowImportForm(false), children: "Cancel" }),
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Button, { variant: "outline", onClick: handleImport, children: "Import" })
] })
] })
] });
}
//# sourceMappingURL=ManagerView.js.map