zeldwallet 0.1.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.
- package/README.md +305 -0
- package/dist/index.d.ts +6 -0
- package/dist/src/ZeldWallet.d.ts +254 -0
- package/dist/src/ZeldWallet.d.ts.map +1 -0
- package/dist/src/component/ZeldWalletUI.d.ts +56 -0
- package/dist/src/component/ZeldWalletUI.d.ts.map +1 -0
- package/dist/src/component/balance.d.ts +41 -0
- package/dist/src/component/balance.d.ts.map +1 -0
- package/dist/src/component/bindings.d.ts +76 -0
- package/dist/src/component/bindings.d.ts.map +1 -0
- package/dist/src/component/constants.d.ts +15 -0
- package/dist/src/component/constants.d.ts.map +1 -0
- package/dist/src/component/controller.d.ts +224 -0
- package/dist/src/component/controller.d.ts.map +1 -0
- package/dist/src/component/errors.d.ts +5 -0
- package/dist/src/component/errors.d.ts.map +1 -0
- package/dist/src/component/i18n.d.ts +156 -0
- package/dist/src/component/i18n.d.ts.map +1 -0
- package/dist/src/component/messages/ar.d.ts +3 -0
- package/dist/src/component/messages/ar.d.ts.map +1 -0
- package/dist/src/component/messages/bn.d.ts +3 -0
- package/dist/src/component/messages/bn.d.ts.map +1 -0
- package/dist/src/component/messages/cs.d.ts +3 -0
- package/dist/src/component/messages/cs.d.ts.map +1 -0
- package/dist/src/component/messages/de.d.ts +3 -0
- package/dist/src/component/messages/de.d.ts.map +1 -0
- package/dist/src/component/messages/el.d.ts +3 -0
- package/dist/src/component/messages/el.d.ts.map +1 -0
- package/dist/src/component/messages/en.d.ts +3 -0
- package/dist/src/component/messages/en.d.ts.map +1 -0
- package/dist/src/component/messages/es.d.ts +3 -0
- package/dist/src/component/messages/es.d.ts.map +1 -0
- package/dist/src/component/messages/fa.d.ts +3 -0
- package/dist/src/component/messages/fa.d.ts.map +1 -0
- package/dist/src/component/messages/fr.d.ts +3 -0
- package/dist/src/component/messages/fr.d.ts.map +1 -0
- package/dist/src/component/messages/he.d.ts +3 -0
- package/dist/src/component/messages/he.d.ts.map +1 -0
- package/dist/src/component/messages/hi.d.ts +3 -0
- package/dist/src/component/messages/hi.d.ts.map +1 -0
- package/dist/src/component/messages/id.d.ts +3 -0
- package/dist/src/component/messages/id.d.ts.map +1 -0
- package/dist/src/component/messages/index.d.ts +31 -0
- package/dist/src/component/messages/index.d.ts.map +1 -0
- package/dist/src/component/messages/it.d.ts +3 -0
- package/dist/src/component/messages/it.d.ts.map +1 -0
- package/dist/src/component/messages/ja.d.ts +3 -0
- package/dist/src/component/messages/ja.d.ts.map +1 -0
- package/dist/src/component/messages/ko.d.ts +3 -0
- package/dist/src/component/messages/ko.d.ts.map +1 -0
- package/dist/src/component/messages/ms.d.ts +3 -0
- package/dist/src/component/messages/ms.d.ts.map +1 -0
- package/dist/src/component/messages/nl.d.ts +3 -0
- package/dist/src/component/messages/nl.d.ts.map +1 -0
- package/dist/src/component/messages/pl.d.ts +3 -0
- package/dist/src/component/messages/pl.d.ts.map +1 -0
- package/dist/src/component/messages/pt.d.ts +3 -0
- package/dist/src/component/messages/pt.d.ts.map +1 -0
- package/dist/src/component/messages/ro.d.ts +3 -0
- package/dist/src/component/messages/ro.d.ts.map +1 -0
- package/dist/src/component/messages/ru.d.ts +3 -0
- package/dist/src/component/messages/ru.d.ts.map +1 -0
- package/dist/src/component/messages/sw.d.ts +3 -0
- package/dist/src/component/messages/sw.d.ts.map +1 -0
- package/dist/src/component/messages/th.d.ts +3 -0
- package/dist/src/component/messages/th.d.ts.map +1 -0
- package/dist/src/component/messages/tl.d.ts +3 -0
- package/dist/src/component/messages/tl.d.ts.map +1 -0
- package/dist/src/component/messages/tr.d.ts +3 -0
- package/dist/src/component/messages/tr.d.ts.map +1 -0
- package/dist/src/component/messages/uk.d.ts +3 -0
- package/dist/src/component/messages/uk.d.ts.map +1 -0
- package/dist/src/component/messages/ur.d.ts +3 -0
- package/dist/src/component/messages/ur.d.ts.map +1 -0
- package/dist/src/component/messages/vi.d.ts +3 -0
- package/dist/src/component/messages/vi.d.ts.map +1 -0
- package/dist/src/component/messages/zh-CN.d.ts +3 -0
- package/dist/src/component/messages/zh-CN.d.ts.map +1 -0
- package/dist/src/component/messages/zh-TW.d.ts +3 -0
- package/dist/src/component/messages/zh-TW.d.ts.map +1 -0
- package/dist/src/component/miner.d.ts +108 -0
- package/dist/src/component/miner.d.ts.map +1 -0
- package/dist/src/component/render.d.ts +11 -0
- package/dist/src/component/render.d.ts.map +1 -0
- package/dist/src/component/state.d.ts +142 -0
- package/dist/src/component/state.d.ts.map +1 -0
- package/dist/src/component/styles.d.ts +2 -0
- package/dist/src/component/styles.d.ts.map +1 -0
- package/dist/src/component/viewModel.d.ts +281 -0
- package/dist/src/component/viewModel.d.ts.map +1 -0
- package/dist/src/component/wallets.d.ts +40 -0
- package/dist/src/component/wallets.d.ts.map +1 -0
- package/dist/src/index.d.ts +18 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/keys/KeyManager.d.ts +132 -0
- package/dist/src/keys/KeyManager.d.ts.map +1 -0
- package/dist/src/keys/derivation.d.ts +58 -0
- package/dist/src/keys/derivation.d.ts.map +1 -0
- package/dist/src/keys/signing.d.ts +44 -0
- package/dist/src/keys/signing.d.ts.map +1 -0
- package/dist/src/provider/WBIPProvider.d.ts +74 -0
- package/dist/src/provider/WBIPProvider.d.ts.map +1 -0
- package/dist/src/react/ZeldWalletCard.d.ts +29 -0
- package/dist/src/react/ZeldWalletCard.d.ts.map +1 -0
- package/dist/src/react/index.d.ts +3 -0
- package/dist/src/react/index.d.ts.map +1 -0
- package/dist/src/react/useZeldWalletController.d.ts +28 -0
- package/dist/src/react/useZeldWalletController.d.ts.map +1 -0
- package/dist/src/storage/SecureStorage.d.ts +183 -0
- package/dist/src/storage/SecureStorage.d.ts.map +1 -0
- package/dist/src/storage/constants.d.ts +59 -0
- package/dist/src/storage/constants.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +245 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/ui/Modal.d.ts +19 -0
- package/dist/src/ui/Modal.d.ts.map +1 -0
- package/dist/src/unifiedWallet.d.ts +29 -0
- package/dist/src/unifiedWallet.d.ts.map +1 -0
- package/dist/src/utils/crypto.d.ts +36 -0
- package/dist/src/utils/crypto.d.ts.map +1 -0
- package/dist/src/utils/encoding.d.ts +46 -0
- package/dist/src/utils/encoding.d.ts.map +1 -0
- package/dist/src/utils/validation.d.ts +42 -0
- package/dist/src/utils/validation.d.ts.map +1 -0
- package/dist/wasm/package.json +31 -0
- package/dist/wasm/zeldhash_miner_wasm.d.ts +82 -0
- package/dist/wasm/zeldhash_miner_wasm.js +1404 -0
- package/dist/wasm/zeldhash_miner_wasm_bg.wasm +0 -0
- package/dist/wasm/zeldhash_miner_wasm_bg.wasm.d.ts +27 -0
- package/dist/worker.js +338 -0
- package/dist/zeldwallet.es.js +36558 -0
- package/dist/zeldwallet.es.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const componentStyles = "\n :host {\n display: block;\n font-family: system-ui, -apple-system, \"Segoe UI\", sans-serif;\n color: #0f172a;\n }\n .zeldwallet-card {\n position: relative;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n padding: 16px;\n background: #ffffff;\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06);\n }\n .zeldwallet-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-bottom: 12px;\n }\n .zeldwallet-title-row {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n .zeldwallet-title-icon {\n width: 24px;\n height: 24px;\n border-radius: 6px;\n object-fit: cover;\n flex-shrink: 0;\n }\n .zeldwallet-title {\n font-size: 16px;\n font-weight: 700;\n margin: 0;\n }\n .zeldwallet-actions {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n .zeldwallet-inline-warning {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 0;\n border-radius: 10px;\n background: transparent;\n border: none;\n box-shadow: none;\n color: #9f1239;\n }\n .zeldwallet-inline-warning-row {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n .zeldwallet-inline-warning__badge {\n position: relative;\n width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n border: none;\n background: transparent;\n color: #b91c1c;\n cursor: help;\n animation: zeldwallet-soft-pulse 3s ease-in-out infinite;\n }\n .zeldwallet-inline-warning__badge:focus-visible {\n outline: 2px solid #ef4444;\n outline-offset: 2px;\n }\n .zeldwallet-inline-warning__tooltip {\n display: none;\n position: absolute;\n bottom: calc(100% + 6px);\n left: 50%;\n transform: translateX(-50%);\n background: #b91c1c;\n color: #fff;\n padding: 6px 8px;\n border-radius: 8px;\n font-size: 12px;\n line-height: 1.2;\n min-width: 180px;\n text-align: center;\n box-shadow: 0 10px 30px rgba(185, 28, 28, 0.2);\n z-index: 2;\n }\n .zeldwallet-inline-warning__badge:hover .zeldwallet-inline-warning__tooltip,\n .zeldwallet-inline-warning__badge:focus-visible .zeldwallet-inline-warning__tooltip {\n display: block;\n }\n .zeldwallet-warning-action {\n border-color: #cbd5e1;\n background: rgba(239, 68, 68, 0.22);\n color: #b91c1c;\n animation: zeldwallet-warning-button-pulse 2.4s ease-in-out infinite;\n }\n .zeldwallet-warning-icon {\n display: block;\n }\n .zeldwallet-warning-action:hover {\n border-color: #ef4444;\n background: #ffe4e6;\n }\n .zeldwallet-icon-button {\n border: 1px solid #cbd5e1;\n background: #f8fafc;\n color: #0f172a;\n border-radius: 8px;\n padding: 6px 8px;\n cursor: pointer;\n font-weight: 700;\n line-height: 1;\n }\n .zeldwallet-icon-button:hover {\n border-color: #2563eb;\n background: #eff6ff;\n }\n .zeldwallet-warning {\n display: grid;\n grid-template-columns: auto 1fr auto;\n gap: 8px;\n align-items: center;\n background: #fff7ed;\n color: #9a3412;\n border: 1px solid #fdba74;\n border-radius: 10px;\n padding: 8px 10px;\n }\n .zeldwallet-warning-icon {\n font-size: 16px;\n line-height: 1;\n }\n .zeldwallet-warning-title {\n font-weight: 700;\n font-size: 13px;\n }\n .zeldwallet-set-password-button {\n border: 1px solid #2563eb;\n background: #2563eb;\n color: white;\n border-radius: 8px;\n padding: 8px 12px;\n cursor: pointer;\n font-weight: 700;\n }\n .zeldwallet-set-password-form {\n display: grid;\n gap: 8px;\n margin: 8px 0 4px;\n padding-bottom: 16px;\n border-bottom: 1px solid #e5e7eb;\n margin-bottom: 12px;\n }\n .zeldwallet-set-password-input {\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n padding: 10px 12px;\n font-size: 14px;\n }\n .zeldwallet-set-password-input,\n .zeldwallet-password-input,\n .zeldwallet-backup-input {\n padding-right: 42px;\n }\n .zeldwallet-password-field {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n }\n .zeldwallet-password-field input {\n width: 100%;\n flex: 1;\n }\n .zeldwallet-password-field input:-webkit-autofill,\n .zeldwallet-password-field input:-webkit-autofill:hover,\n .zeldwallet-password-field input:-webkit-autofill:focus {\n box-shadow: 0 0 0 1000px #ffffff inset;\n -webkit-text-fill-color: #0f172a;\n caret-color: #0f172a;\n border: 1px solid #cbd5e1;\n outline: none;\n border-radius: 8px;\n }\n .zeldwallet-toggle-visibility {\n position: absolute;\n right: 10px;\n border: none;\n background: transparent;\n color: #475569;\n cursor: pointer;\n font-size: 16px;\n line-height: 1;\n padding: 4px;\n }\n .zeldwallet-toggle-visibility:focus-visible {\n outline: 2px solid #2563eb;\n outline-offset: 2px;\n border-radius: 6px;\n }\n .zeldwallet-set-password-actions {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n }\n .zeldwallet-set-password-cancel {\n border: 1px solid #cbd5e1;\n background: #fff;\n color: #0f172a;\n border-radius: 8px;\n padding: 8px 12px;\n cursor: pointer;\n font-weight: 700;\n }\n .zeldwallet-cancel-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 6px 8px;\n }\n .zeldwallet-cancel-icon:hover {\n border-color: #ef4444;\n background: #fef2f2;\n color: #dc2626;\n }\n .zeldwallet-status {\n margin: 6px 0;\n font-size: 13px;\n color: #334155;\n }\n .zeldwallet-status--loading {\n color: #2563eb;\n }\n .zeldwallet-status--generating {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 14px;\n padding: 28px 16px;\n color: #0f172a;\n font-weight: 600;\n font-size: 1.2em;\n }\n .zeldwallet-spinner {\n width: 28px;\n height: 28px;\n border: 3px solid #e5e7eb;\n border-top-color: #22c55e;\n border-radius: 50%;\n animation: zeldwallet-spin 1s linear infinite;\n }\n :host(.dark-card) .zeldwallet-spinner {\n border-color: #2f2612;\n border-top-color: #d4af37;\n }\n :host(.dark-card) .zeldwallet-status--generating {\n color: #f4e4a6;\n }\n @keyframes zeldwallet-spin {\n to {\n transform: rotate(360deg);\n }\n }\n .zeldwallet-status--error {\n color: #b91c1c;\n }\n .zeldwallet-ready-block {\n position: relative;\n margin: 12px 0;\n }\n .zeldwallet-ready-block::after {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n width: 1px;\n background: #e5e7eb;\n transform: translateX(-50%);\n }\n .zeldwallet-status-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n padding: 8px 12px 6px;\n }\n .zeldwallet-status-row .zeldwallet-status {\n margin: 0;\n }\n /* Desktop: hide the titles row completely */\n .zeldwallet-status-row.zeldwallet-mobile-tabs {\n display: none;\n }\n .zeldwallet-rows {\n display: grid;\n gap: 10px;\n }\n .zeldwallet-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n }\n .zeldwallet-row-left {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: center;\n gap: 8px;\n min-width: 0;\n padding-right: 12px;\n }\n .zeldwallet-row-right {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n flex: 1;\n }\n .zeldwallet-balance-value {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n display: flex;\n align-items: baseline;\n justify-content: flex-end;\n gap: 8px;\n }\n .zeldwallet-balance-btc {\n font-size: 24px;\n font-weight: 700;\n color: #f7931a;\n }\n .zeldwallet-balance-zeld {\n font-size: 24px;\n font-weight: 700;\n color: #8b5cf6;\n }\n .zeldwallet-balance-unit {\n font-size: 14px;\n font-weight: 600;\n opacity: 0.7;\n text-transform: uppercase;\n min-width: 36px;\n text-align: left;\n }\n .zeldwallet-balance-amount {\n text-align: right;\n }\n .zeldwallet-balance-loading {\n color: #94a3b8;\n font-size: 20px;\n }\n .zeldwallet-balance-updating {\n opacity: 0.6;\n }\n .zeldwallet-balance-spinner {\n display: inline-block;\n width: 20px;\n height: 20px;\n border: 2px solid #e5e7eb;\n border-top-color: #f7931a;\n border-radius: 50%;\n animation: zeldwallet-spin 1s linear infinite;\n }\n .zeldwallet-footer {\n margin-top: 16px;\n padding-top: 10px;\n border-top: 1px solid #e5e7eb;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n }\n .zeldwallet-footer-left {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .zeldwallet-wallet-toggle {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n border: none;\n background: transparent;\n color: #0f172a;\n padding: 4px 0;\n cursor: pointer;\n font-weight: 600;\n }\n .zeldwallet-wallet-toggle:focus-visible {\n outline: 2px solid #2563eb;\n outline-offset: 2px;\n border-radius: 6px;\n }\n .zeldwallet-wallet-chevron {\n display: inline-flex;\n width: 14px;\n height: 14px;\n color: #94a3b8;\n transition: transform 0.15s ease, color 0.15s ease;\n }\n .zeldwallet-wallet-chevron svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n .zeldwallet-wallet-chevron--open {\n transform: rotate(180deg);\n }\n .zeldwallet-wallet-toggle:hover .zeldwallet-wallet-chevron {\n color: #1d4ed8;\n }\n .zeldwallet-wallet-picker {\n display: grid;\n gap: 8px;\n margin-top: 10px;\n }\n .zeldwallet-wallet-row {\n display: grid;\n grid-template-columns: 1fr auto;\n gap: 10px;\n align-items: center;\n padding: 10px 12px;\n border: none;\n border-radius: 10px;\n background: transparent;\n }\n .zeldwallet-wallet-main {\n display: inline-flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n }\n .zeldwallet-wallet-icon img {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n object-fit: cover;\n background: #ffffff;\n }\n .zeldwallet-wallet-meta {\n display: grid;\n gap: 2px;\n min-width: 0;\n }\n .zeldwallet-wallet-name {\n font-weight: 700;\n color: #0f172a;\n }\n .zeldwallet-wallet-desc {\n color: #475569;\n font-size: 12px;\n line-height: 1.4;\n }\n .zeldwallet-wallet-actions {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n }\n .zeldwallet-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 6px 10px;\n border-radius: 999px;\n font-size: 12px;\n background: #e2e8f0;\n color: #0f172a;\n }\n .zeldwallet-badge--installed {\n background: #dcfce7;\n color: #15803d;\n }\n .zeldwallet-install-link {\n border: 1px solid #2563eb;\n background: #eff6ff;\n color: #1d4ed8;\n text-decoration: none;\n padding: 7px 12px;\n border-radius: 8px;\n font-weight: 700;\n }\n .zeldwallet-install-link:hover {\n background: #dbeafe;\n }\n .zeldwallet-connect-wallet {\n padding: 8px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .zeldwallet-connect-wallet .zeldwallet-btn-icon {\n width: 18px;\n height: 18px;\n }\n .zeldwallet-connect-wallet:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n }\n .zeldwallet-label {\n font-weight: 600;\n color: #0f172a;\n }\n .zeldwallet-label-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: help;\n }\n .zeldwallet-address-icon {\n display: block;\n color: #f7931a;\n }\n .zeldwallet-row:last-child .zeldwallet-address-icon {\n color: #8b5cf6;\n }\n .zeldwallet-value {\n font-family: ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n color: #0f172a;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n .zeldwallet-value-with-copy {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n }\n .zeldwallet-copy {\n border: 1px solid #cbd5e1;\n background: #f8fafc;\n color: #0f172a;\n border-radius: 8px;\n padding: 6px 8px;\n cursor: pointer;\n font-weight: 700;\n line-height: 1;\n }\n .zeldwallet-copy:hover:not(:disabled) {\n border-color: #2563eb;\n background: #eff6ff;\n }\n .zeldwallet-copy-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .zeldwallet-address-copy {\n border: none;\n background: transparent;\n padding: 0;\n color: #475569;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n width: 20px;\n }\n .zeldwallet-address-copy:hover:not(:disabled) {\n border: none;\n background: transparent;\n color: #0f172a;\n }\n .zeldwallet-copied {\n background: #dcfce7;\n border-color: #22c55e;\n color: #16a34a;\n }\n .zeldwallet-copied:hover:not(:disabled) {\n background: #bbf7d0;\n border-color: #16a34a;\n color: #15803d;\n }\n .zeldwallet-btn-icon {\n display: block;\n flex-shrink: 0;\n }\n .zeldwallet-copy:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n .zeldwallet-password-form {\n display: grid;\n gap: 8px;\n margin-top: 8px;\n }\n .zeldwallet-password-fields {\n display: grid;\n grid-template-columns: 1fr auto;\n gap: 8px;\n }\n .zeldwallet-password-input {\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n padding: 10px 12px;\n font-size: 14px;\n }\n .zeldwallet-password-button {\n flex-shrink: 0;\n }\n .zeldwallet-password-error {\n color: #b91c1c;\n font-size: 13px;\n }\n .zeldwallet-backup-form {\n margin: 8px 0 0;\n padding-bottom: 16px;\n border-bottom: 1px solid #e5e7eb;\n margin-bottom: 12px;\n }\n .zeldwallet-restore-form {\n margin: 8px 0 0;\n padding-bottom: 16px;\n border-bottom: 1px solid #e5e7eb;\n margin-bottom: 12px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .zeldwallet-restore-textarea {\n width: 100%;\n max-width: 100%;\n min-height: 80px;\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid #e2e8f0;\n background: #ffffff;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 13px;\n color: #0f172a;\n resize: vertical;\n box-sizing: border-box;\n overflow-wrap: anywhere;\n }\n .zeldwallet-restore-textarea:focus {\n outline: none;\n border-color: #f5d900;\n }\n .zeldwallet-restore-password-input {\n width: 100%;\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid #e2e8f0;\n background: #ffffff;\n font-size: 14px;\n color: #0f172a;\n padding-right: 44px;\n box-sizing: border-box;\n }\n .zeldwallet-restore-password-input:focus {\n outline: none;\n border-color: #f5d900;\n }\n /* Restore form mode toggle */\n .zeldwallet-restore-mode-toggle {\n display: flex;\n gap: 4px;\n padding: 4px;\n background: #f1f5f9;\n border-radius: 8px;\n margin-bottom: 8px;\n }\n .zeldwallet-restore-mode-btn {\n flex: 1;\n padding: 8px 12px;\n border: none;\n background: transparent;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #64748b;\n cursor: pointer;\n transition: all 0.2s ease;\n }\n .zeldwallet-restore-mode-btn:hover {\n color: #0f172a;\n background: rgba(255, 255, 255, 0.5);\n }\n .zeldwallet-restore-mode-btn--active {\n background: #ffffff;\n color: #0f172a;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n .zeldwallet-hidden {\n display: none !important;\n }\n /* Mnemonic input styles */\n .zeldwallet-restore-mnemonic-input {\n min-height: 100px;\n font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;\n font-size: 13px;\n line-height: 1.6;\n word-spacing: 4px;\n }\n .zeldwallet-restore-new-password-input,\n .zeldwallet-restore-confirm-password-input {\n width: 100%;\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid #e2e8f0;\n background: #ffffff;\n font-size: 14px;\n color: #0f172a;\n padding-right: 44px;\n box-sizing: border-box;\n }\n .zeldwallet-restore-new-password-input:focus,\n .zeldwallet-restore-confirm-password-input:focus {\n outline: none;\n border-color: #f5d900;\n }\n /* Advanced options section */\n .zeldwallet-restore-advanced {\n margin-top: 4px;\n }\n .zeldwallet-restore-advanced-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n padding: 8px 0;\n border: none;\n background: transparent;\n font-size: 13px;\n font-weight: 500;\n color: #64748b;\n cursor: pointer;\n transition: color 0.2s ease;\n }\n .zeldwallet-restore-advanced-toggle:hover {\n color: #0f172a;\n }\n .zeldwallet-restore-advanced-toggle .zeldwallet-chevron-icon {\n transition: transform 0.2s ease;\n }\n .zeldwallet-restore-advanced--open .zeldwallet-restore-advanced-toggle .zeldwallet-chevron-icon {\n transform: rotate(180deg);\n }\n .zeldwallet-restore-advanced-content {\n display: none;\n flex-direction: column;\n gap: 8px;\n padding: 8px 0;\n }\n .zeldwallet-restore-advanced--open .zeldwallet-restore-advanced-content {\n display: flex;\n }\n .zeldwallet-restore-path-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n .zeldwallet-restore-path-label {\n font-size: 12px;\n font-weight: 500;\n color: #64748b;\n }\n .zeldwallet-restore-path-input {\n width: 100%;\n padding: 8px 12px;\n border-radius: 6px;\n border: 1px solid #e2e8f0;\n background: #f8fafc;\n font-size: 13px;\n font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;\n color: #0f172a;\n box-sizing: border-box;\n }\n .zeldwallet-restore-path-input:focus {\n outline: none;\n border-color: #f5d900;\n background: #ffffff;\n }\n /* Dark mode for mnemonic restore */\n :host(.dark-card) .zeldwallet-restore-mode-toggle {\n background: #1e1e28;\n }\n :host(.dark-card) .zeldwallet-restore-mode-btn {\n color: #94a3b8;\n }\n :host(.dark-card) .zeldwallet-restore-mode-btn:hover {\n color: #e8e6e3;\n background: rgba(255, 255, 255, 0.1);\n }\n :host(.dark-card) .zeldwallet-restore-mode-btn--active {\n background: #12121a;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-restore-new-password-input,\n :host(.dark-card) .zeldwallet-restore-confirm-password-input {\n background: #12121a;\n border-color: #1e1e28;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-restore-advanced-toggle {\n color: #94a3b8;\n }\n :host(.dark-card) .zeldwallet-restore-advanced-toggle:hover {\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-restore-path-label {\n color: #94a3b8;\n }\n :host(.dark-card) .zeldwallet-restore-path-input {\n background: #1e1e28;\n border-color: #2a2a36;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-restore-path-input:focus {\n background: #12121a;\n }\n .zeldwallet-backup-result {\n border: none;\n background: transparent;\n color: #0f172a;\n padding: 0;\n margin-top: 12px;\n display: grid;\n gap: 8px;\n padding-bottom: 16px;\n border-bottom: 1px solid #e5e7eb;\n margin-bottom: 12px;\n }\n :host(.dark-card) .zeldwallet-backup-result {\n border-bottom-color: #1e1e28;\n }\n .zeldwallet-backup-result-title {\n font-weight: 700;\n }\n .zeldwallet-backup-result-hint {\n margin: 0;\n font-size: 13px;\n color: #475569;\n }\n .zeldwallet-backup-textarea {\n width: 100%;\n max-width: 100%;\n min-height: 120px;\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid #e2e8f0;\n background: #ffffff;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 13px;\n color: #0f172a;\n resize: vertical;\n box-sizing: border-box;\n overflow-wrap: anywhere;\n }\n .zeldwallet-backup-actions {\n display: flex;\n gap: 8px;\n justify-content: flex-start;\n }\n :host(.dark-card) {\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-card {\n background: linear-gradient(135deg, #0f0f16 0%, #0a0a0f 70%, #0c0c12 100%);\n color: #e8e6e3;\n border-color: #1e1e28;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.45);\n }\n :host(.dark-card) .zeldwallet-footer {\n border-top-color: #1e1e28;\n }\n :host(.dark-card) .zeldwallet-ready-block::after {\n background: #1e1e28;\n }\n :host(.dark-card) .zeldwallet-status,\n :host(.dark-card) .zeldwallet-backup-result-hint {\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-label,\n :host(.dark-card) .zeldwallet-backup-result-title {\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-title,\n :host(.dark-card) .zeldwallet-wallet-name,\n :host(.dark-card) .zeldwallet-value {\n color: #d4af37;\n }\n :host(.dark-card) .zeldwallet-set-password-input,\n :host(.dark-card) .zeldwallet-password-input,\n :host(.dark-card) .zeldwallet-backup-input,\n :host(.dark-card) .zeldwallet-backup-textarea {\n background: #12121a;\n border-color: #1e1e28;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-password-field input:-webkit-autofill,\n :host(.dark-card) .zeldwallet-password-field input:-webkit-autofill:hover,\n :host(.dark-card) .zeldwallet-password-field input:-webkit-autofill:focus {\n box-shadow: 0 0 0 1000px #12121a inset;\n -webkit-text-fill-color: #e8e6e3;\n caret-color: #e8e6e3;\n border: 1px solid #1e1e28;\n outline: none;\n border-radius: 8px;\n }\n :host(.dark-card) .zeldwallet-wallet-row {\n background: transparent;\n border: 1px solid #1e1e28;\n }\n :host(.dark-card) .zeldwallet-balance-btc {\n color: #f7931a;\n }\n :host(.dark-card) .zeldwallet-balance-zeld {\n color: #a78bfa;\n }\n :host(.dark-card) .zeldwallet-balance-loading {\n color: #6b7280;\n }\n :host(.dark-card) .zeldwallet-balance-spinner {\n border-color: #2f2612;\n border-top-color: #d4af37;\n }\n :host(.dark-card) .zeldwallet-wallet-desc {\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-wallet-toggle {\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-wallet-icon img {\n background: #0f0f16;\n border: 1px solid #1e1e28;\n }\n :host(.dark-card) .zeldwallet-install-link,\n :host(.dark-card) .zeldwallet-copy,\n :host(.dark-card) .zeldwallet-set-password-button,\n :host(.dark-card) .zeldwallet-connect-wallet {\n background: #12121a;\n border: 1px solid #e8e6e3;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-address-copy {\n background: transparent;\n border: none;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-install-link:hover,\n :host(.dark-card) .zeldwallet-copy:hover:not(:disabled),\n :host(.dark-card) .zeldwallet-set-password-button:hover,\n :host(.dark-card) .zeldwallet-connect-wallet:hover {\n background: rgba(232, 230, 227, 0.08);\n border-color: #ffffff;\n color: #ffffff;\n }\n :host(.dark-card) .zeldwallet-address-copy:hover:not(:disabled) {\n background: transparent;\n border: none;\n color: #ffffff;\n }\n :host(.dark-card) .zeldwallet-badge {\n background: #1e1e28;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-badge--installed {\n background: #1e1e28;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-copy:disabled {\n background: #12121a;\n color: #a6a6ad;\n border-color: #2b2b36;\n }\n :host(.dark-card) .zeldwallet-copied {\n background: #12121a;\n border-color: #e8e6e3;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-copied:hover:not(:disabled) {\n background: rgba(232, 230, 227, 0.08);\n border-color: #ffffff;\n color: #ffffff;\n }\n :host(.dark-card) .zeldwallet-set-password-cancel,\n :host(.dark-card) .zeldwallet-icon-button {\n border-color: #e8e6e3;\n background: #12121a;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-set-password-form,\n :host(.dark-card) .zeldwallet-backup-form,\n :host(.dark-card) .zeldwallet-restore-form {\n border-bottom-color: #1e1e28;\n }\n :host(.dark-card) .zeldwallet-restore-textarea,\n :host(.dark-card) .zeldwallet-restore-password-input {\n background: #12121a;\n border-color: #1e1e28;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-cancel-icon:hover {\n border-color: #fca5a5;\n background: #2a0e0e;\n color: #fca5a5;\n }\n /* RTL support */\n .zeldwallet-rtl {\n direction: rtl;\n text-align: right;\n }\n .zeldwallet-rtl .zeldwallet-set-password-input,\n .zeldwallet-rtl .zeldwallet-password-input,\n .zeldwallet-rtl .zeldwallet-backup-input {\n padding-right: 12px;\n padding-left: 42px;\n }\n .zeldwallet-rtl .zeldwallet-toggle-visibility {\n right: auto;\n left: 10px;\n }\n .zeldwallet-rtl .zeldwallet-value {\n direction: ltr;\n text-align: left;\n unicode-bidi: embed;\n }\n .zeldwallet-rtl .zeldwallet-backup-textarea,\n .zeldwallet-rtl .zeldwallet-restore-textarea {\n direction: ltr;\n text-align: left;\n }\n .zeldwallet-rtl .zeldwallet-backup-actions {\n justify-content: flex-end;\n }\n .zeldwallet-network {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: #475569;\n text-transform: lowercase;\n }\n .zeldwallet-network-name {\n letter-spacing: 0.01em;\n }\n .zeldwallet-network-dot {\n width: 10px;\n height: 10px;\n border-radius: 999px;\n background: #22c55e;\n box-shadow: 0 0 0 4px #dcfce7;\n }\n .zeldwallet-network--testnet .zeldwallet-network-dot {\n background: #f59e0b;\n box-shadow: 0 0 0 4px #fef3c7;\n }\n .zeldwallet-network--mainnet .zeldwallet-network-dot {\n background: #22c55e;\n box-shadow: 0 0 0 4px #dcfce7;\n }\n .zeldwallet-network--mainnet .zeldwallet-network-name,\n .zeldwallet-network--testnet .zeldwallet-network-name {\n color: #475569;\n }\n :host(.dark-card) .zeldwallet-network {\n color: #d7cbb1;\n }\n :host(.dark-card) .zeldwallet-network-dot {\n background: #d4af37;\n box-shadow: 0 0 0 4px rgba(212, 175, 55, 0.2);\n }\n :host(.dark-card) .zeldwallet-network--testnet .zeldwallet-network-dot {\n background: #b8960c;\n box-shadow: 0 0 0 4px rgba(184, 150, 12, 0.2);\n }\n :host(.dark-card) .zeldwallet-network--mainnet .zeldwallet-network-dot {\n background: #d4af37;\n box-shadow: 0 0 0 4px rgba(212, 175, 55, 0.2);\n }\n :host(.dark-card) .zeldwallet-network-name {\n color: #f4e4a6;\n }\n @keyframes zeldwallet-soft-pulse {\n 0% {\n opacity: 0.8;\n transform: scale(1);\n }\n 50% {\n opacity: 1;\n transform: scale(1.05);\n }\n 100% {\n opacity: 0.8;\n transform: scale(1);\n }\n }\n @keyframes zeldwallet-warning-button-pulse {\n 0% {\n background: rgba(239, 68, 68, 0.22);\n }\n 60% {\n background: #ffffff;\n }\n 80% {\n background: #ffffff;\n }\n 100% {\n background: rgba(239, 68, 68, 0.22);\n }\n }\n /* Tooltip system for icon buttons */\n [data-tooltip] {\n position: relative;\n }\n [data-tooltip]::after {\n content: attr(data-tooltip);\n position: absolute;\n bottom: calc(100% + 6px);\n left: 50%;\n transform: translateX(-50%);\n background: #1e293b;\n color: #f8fafc;\n padding: 6px 10px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n line-height: 1.3;\n white-space: normal;\n max-width: 280px;\n width: max-content;\n box-shadow: 0 4px 12px rgba(15, 23, 42, 0.15);\n z-index: 10;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.15s ease, visibility 0.15s ease;\n pointer-events: none;\n }\n [data-tooltip]:hover::after,\n [data-tooltip]:focus-visible::after {\n opacity: 1;\n visibility: visible;\n }\n /* Tooltip arrow */\n [data-tooltip]::before {\n content: '';\n position: absolute;\n bottom: calc(100% + 2px);\n left: 50%;\n transform: translateX(-50%);\n border: 4px solid transparent;\n border-top-color: #1e293b;\n z-index: 10;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.15s ease, visibility 0.15s ease;\n pointer-events: none;\n }\n [data-tooltip]:hover::before,\n [data-tooltip]:focus-visible::before {\n opacity: 1;\n visibility: visible;\n }\n /* Dark mode tooltips */\n :host(.dark-card) [data-tooltip]::after {\n background: #1b1710;\n color: #f4e4a6;\n border: 1px solid rgba(212, 175, 55, 0.35);\n box-shadow: 0 6px 20px rgba(0, 0, 0, 0.45);\n }\n :host(.dark-card) [data-tooltip]::before {\n border-top-color: #1b1710;\n }\n /* RTL tooltip positioning */\n .zeldwallet-rtl [data-tooltip]::after,\n .zeldwallet-rtl [data-tooltip]::before {\n left: 50%;\n right: auto;\n transform: translateX(-50%);\n }\n\n /* Hunting section */\n .zeldwallet-hunting {\n margin-top: 8px;\n padding-top: 12px;\n border-top: 1px solid #e5e7eb;\n overflow: visible;\n }\n .zeldwallet-hunting-send-fields {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n margin-bottom: 10px;\n }\n .zeldwallet-hunting-controls {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 8px 0;\n }\n .zeldwallet-hunting-checkbox {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #0f172a;\n cursor: pointer;\n }\n .zeldwallet-hunting-checkbox input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n accent-color: #f7931a;\n cursor: pointer;\n }\n .zeldwallet-hunting-checkbox.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .zeldwallet-hunting-checkbox.disabled input[type=\"checkbox\"] {\n cursor: not-allowed;\n }\n .zeldwallet-hunting-slider {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 500;\n color: #0f172a;\n }\n .zeldwallet-hunting-slider input[type=\"range\"] {\n width: 80px;\n height: 6px;\n accent-color: #f7931a;\n cursor: pointer;\n }\n .zeldwallet-hunting-slider-value {\n min-width: 20px;\n text-align: center;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-weight: 700;\n color: #f7931a;\n }\n .zeldwallet-hunt-button-row {\n /* Takes full width to force new line, centers the button inside */\n flex: 1 1 100%;\n display: flex;\n justify-content: center;\n margin-top: 8px;\n }\n .zeldwallet-hunt-button {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid #f7931a;\n background: linear-gradient(135deg, #f7931a 0%, #e67e00 100%);\n color: #fff;\n border-radius: 8px;\n font-weight: 700;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n .zeldwallet-hunt-button:hover:not(:disabled) {\n background: linear-gradient(135deg, #e67e00 0%, #cc6e00 100%);\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(247, 147, 26, 0.3);\n }\n .zeldwallet-hunt-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n transform: none;\n box-shadow: none;\n }\n .zeldwallet-hunt-button-wrapper {\n display: inline-flex;\n cursor: not-allowed;\n position: relative;\n }\n .zeldwallet-hunt-button-wrapper .zeldwallet-hunt-button {\n pointer-events: none;\n }\n /* Ensure tooltip on hunt button wrapper is visible and properly positioned */\n .zeldwallet-hunt-button-wrapper[data-tooltip]::after {\n white-space: normal;\n max-width: 220px;\n text-align: center;\n z-index: 100;\n right: 0;\n left: auto;\n transform: none;\n }\n .zeldwallet-hunt-button-wrapper[data-tooltip]::before {\n z-index: 100;\n right: 24px;\n left: auto;\n transform: none;\n }\n .zeldwallet-hunt-button .zeldwallet-btn-icon {\n width: 16px;\n height: 16px;\n }\n .zeldwallet-hunting-input {\n border: 1px solid #cbd5e1;\n border-radius: 8px;\n padding: 8px 12px;\n font-size: 13px;\n background: #fff;\n color: #0f172a;\n min-width: 0;\n }\n .zeldwallet-hunting-input::placeholder {\n color: #94a3b8;\n }\n .zeldwallet-hunting-input:focus {\n outline: none;\n border-color: #f7931a;\n box-shadow: 0 0 0 3px rgba(247, 147, 26, 0.1);\n }\n .zeldwallet-hunting-input.error {\n border-color: #ef4444;\n }\n .zeldwallet-hunting-error {\n font-size: 12px;\n color: #ef4444;\n margin-top: 4px;\n }\n\n /* Dark mode hunting */\n :host(.dark-card) .zeldwallet-hunting {\n border-top-color: #1e1e28;\n }\n :host(.dark-card) .zeldwallet-hunting-checkbox,\n :host(.dark-card) .zeldwallet-hunting-slider {\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-hunting-slider-value {\n color: #d4af37;\n }\n :host(.dark-card) .zeldwallet-hunting-checkbox input[type=\"checkbox\"] {\n accent-color: #d4af37;\n }\n :host(.dark-card) .zeldwallet-hunting-slider input[type=\"range\"] {\n accent-color: #d4af37;\n }\n :host(.dark-card) .zeldwallet-hunt-button {\n border-color: #d4af37;\n background: linear-gradient(135deg, #d4af37 0%, #b8960c 100%);\n color: #0f0f16;\n }\n :host(.dark-card) .zeldwallet-hunt-button:hover:not(:disabled) {\n background: linear-gradient(135deg, #e8c454 0%, #d4af37 100%);\n box-shadow: 0 4px 12px rgba(212, 175, 55, 0.3);\n }\n :host(.dark-card) .zeldwallet-hunting-input {\n background: #12121a;\n border-color: #1e1e28;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-hunting-input::placeholder {\n color: #6b7280;\n }\n :host(.dark-card) .zeldwallet-hunting-input:focus {\n border-color: #d4af37;\n box-shadow: 0 0 0 3px rgba(212, 175, 55, 0.15);\n }\n\n /* Fee selector - collapsible */\n .zeldwallet-fee-selector {\n position: relative;\n display: inline-flex;\n align-items: center;\n }\n .zeldwallet-fee-toggle {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 0;\n border: none;\n background: transparent;\n font-size: 13px;\n font-weight: 500;\n color: #0f172a;\n cursor: pointer;\n line-height: 1;\n }\n .zeldwallet-fee-toggle:hover:not(:disabled) {\n color: #f7931a;\n }\n .zeldwallet-fee-toggle:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .zeldwallet-fee-label {\n font-weight: 500;\n color: #0f172a;\n }\n .zeldwallet-fee-chevron {\n display: inline-flex;\n width: 12px;\n height: 12px;\n color: #0f172a;\n transition: transform 0.15s ease;\n }\n .zeldwallet-fee-chevron.open {\n transform: rotate(180deg);\n }\n .zeldwallet-fee-chevron svg {\n width: 100%;\n height: 100%;\n }\n .zeldwallet-fee-toggle:hover:not(:disabled) .zeldwallet-fee-label,\n .zeldwallet-fee-toggle:hover:not(:disabled) .zeldwallet-fee-chevron {\n color: #f7931a;\n }\n .zeldwallet-fee-dropdown {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n z-index: 50;\n background: #ffffff;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n padding: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n min-width: 200px;\n }\n .zeldwallet-fee-options {\n display: flex;\n gap: 4px;\n flex-wrap: nowrap;\n }\n .zeldwallet-fee-option {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1px;\n padding: 4px 6px;\n border: 1px solid #e2e8f0;\n border-radius: 4px;\n background: #f8fafc;\n color: #0f172a;\n font-size: 11px;\n cursor: pointer;\n transition: all 0.15s ease;\n flex: 1 1 0;\n min-width: 0;\n }\n .zeldwallet-fee-option:hover:not(:disabled) {\n border-color: #f7931a;\n background: #fff7ed;\n }\n .zeldwallet-fee-option.selected {\n border-color: #f7931a;\n background: linear-gradient(135deg, #fff7ed 0%, #ffedd5 100%);\n color: #ea580c;\n }\n .zeldwallet-fee-option:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .zeldwallet-fee-option-label {\n font-weight: 600;\n font-size: 10px;\n text-transform: uppercase;\n letter-spacing: 0.2px;\n }\n .zeldwallet-fee-option-rate {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 12px;\n font-weight: 700;\n color: #f7931a;\n }\n .zeldwallet-fee-option.selected .zeldwallet-fee-option-rate {\n color: #ea580c;\n }\n .zeldwallet-fee-option-unit {\n color: #64748b;\n font-weight: 400;\n font-size: 10px;\n }\n .zeldwallet-fee-custom-field {\n width: 100%;\n text-align: center;\n padding: 4px 8px;\n font-size: 11px;\n border-radius: 4px;\n margin-top: 6px;\n box-sizing: border-box;\n }\n\n /* Dark mode fee selector */\n :host(.dark-card) .zeldwallet-fee-toggle {\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-fee-toggle:hover:not(:disabled) {\n color: #d4af37;\n }\n :host(.dark-card) .zeldwallet-fee-label {\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-fee-chevron {\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-fee-toggle:hover:not(:disabled) .zeldwallet-fee-label,\n :host(.dark-card) .zeldwallet-fee-toggle:hover:not(:disabled) .zeldwallet-fee-chevron {\n color: #d4af37;\n }\n :host(.dark-card) .zeldwallet-fee-dropdown {\n background: #12121a;\n border-color: #2d2d3a;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n }\n :host(.dark-card) .zeldwallet-fee-option {\n background: #1a1a24;\n border-color: #2d2d3a;\n color: #e8e6e3;\n }\n :host(.dark-card) .zeldwallet-fee-option:hover:not(:disabled) {\n border-color: #d4af37;\n background: rgba(212, 175, 55, 0.1);\n }\n :host(.dark-card) .zeldwallet-fee-option.selected {\n border-color: #d4af37;\n background: linear-gradient(135deg, rgba(212, 175, 55, 0.15) 0%, rgba(212, 175, 55, 0.1) 100%);\n color: #d4af37;\n }\n :host(.dark-card) .zeldwallet-fee-option-rate {\n color: #d4af37;\n }\n :host(.dark-card) .zeldwallet-fee-option.selected .zeldwallet-fee-option-rate {\n color: #e8c454;\n }\n :host(.dark-card) .zeldwallet-fee-option-unit {\n color: #e8e6e3;\n }\n\n /* Mining Progress */\n .zeldwallet-mining-progress {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n border-radius: 8px;\n animation: zeldwallet-pulse 2s ease-in-out infinite;\n }\n\n @keyframes zeldwallet-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.85; }\n }\n\n .zeldwallet-mining-stats {\n display: flex;\n justify-content: space-around;\n gap: 8px;\n }\n\n .zeldwallet-mining-stat {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n }\n\n .zeldwallet-mining-stat-label {\n font-size: 11px;\n color: #6b7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .zeldwallet-mining-stat-value {\n font-size: 16px;\n font-weight: 600;\n color: #1f2937;\n font-variant-numeric: tabular-nums;\n }\n\n .zeldwallet-mining-final-stats {\n display: flex;\n justify-content: space-around;\n gap: 8px;\n padding: 8px 0;\n margin-bottom: 8px;\n border-bottom: 1px solid #e5e7eb;\n }\n\n .zeldwallet-mining-actions {\n display: flex;\n justify-content: center;\n }\n\n .zeldwallet-mining-control {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n background: #fff;\n color: #374151;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .zeldwallet-mining-control:hover {\n background: #f3f4f6;\n border-color: #9ca3af;\n }\n\n /* Mining Result */\n .zeldwallet-mining-result {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n border-radius: 8px;\n }\n\n .zeldwallet-mining-congrats {\n font-size: 14px;\n font-weight: 600;\n color: #065f46;\n text-align: center;\n }\n\n .zeldwallet-mining-txid {\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 12px 0;\n }\n\n .zeldwallet-mining-txid-value {\n font-size: 14px;\n font-family: monospace;\n color: #1f2937;\n word-break: break-all;\n text-align: center;\n }\n\n .zeldwallet-txid-zeros {\n color: #d4af37;\n font-weight: 600;\n }\n\n .zeldwallet-mining-result-actions {\n display: flex;\n justify-content: center;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .zeldwallet-mining-broadcast {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 10px 20px;\n border: none;\n border-radius: 6px;\n background: linear-gradient(135deg, #059669 0%, #047857 100%);\n color: #fff;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .zeldwallet-mining-broadcast:hover {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n box-shadow: 0 4px 12px rgba(5, 150, 105, 0.3);\n }\n\n .zeldwallet-mining-mempool-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 10px 16px;\n border: 1px solid #a7f3d0;\n border-radius: 6px;\n background: #fff;\n color: #059669;\n font-size: 13px;\n font-weight: 500;\n text-decoration: none;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .zeldwallet-mining-mempool-link:hover {\n background: #ecfdf5;\n border-color: #059669;\n }\n\n .zeldwallet-mining-copy-psbt {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 8px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n background: #fff;\n color: #6b7280;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .zeldwallet-mining-copy-psbt:hover {\n background: #f3f4f6;\n border-color: #9ca3af;\n }\n\n .zeldwallet-mining-cancel {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n background: #fff;\n color: #6b7280;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .zeldwallet-mining-cancel:hover {\n background: #f3f4f6;\n border-color: #9ca3af;\n }\n\n /* Mining Error */\n .zeldwallet-mining-error {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: linear-gradient(135deg, #fef2f2 0%, #fee2e2 100%);\n border-radius: 8px;\n border: 1px solid #fca5a5;\n }\n\n .zeldwallet-mining-error-message {\n font-size: 13px;\n color: #991b1b;\n text-align: center;\n }\n\n .zeldwallet-mining-retry {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid #fca5a5;\n border-radius: 6px;\n background: #fff;\n color: #dc2626;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .zeldwallet-mining-retry:hover {\n background: #fef2f2;\n border-color: #dc2626;\n }\n\n /* Dark mode mining */\n :host(.dark-card) .zeldwallet-mining-progress {\n background: linear-gradient(135deg, #1a1a24 0%, #12121a 100%);\n }\n\n :host(.dark-card) .zeldwallet-mining-stat-label {\n color: #9ca3af;\n }\n\n :host(.dark-card) .zeldwallet-mining-stat-value {\n color: #e8e6e3;\n }\n\n :host(.dark-card) .zeldwallet-mining-final-stats {\n border-bottom-color: #2d2d3a;\n }\n\n :host(.dark-card) .zeldwallet-mining-control {\n background: #1e1e28;\n border-color: #2d2d3a;\n color: #e8e6e3;\n }\n\n :host(.dark-card) .zeldwallet-mining-control:hover {\n background: #2d2d3a;\n border-color: #3d3d4a;\n }\n\n :host(.dark-card) .zeldwallet-mining-congrats {\n color: #6ee7b7;\n }\n\n :host(.dark-card) .zeldwallet-mining-txid-value {\n color: #e8e6e3;\n }\n\n :host(.dark-card) .zeldwallet-txid-zeros {\n color: #e8c454;\n }\n\n :host(.dark-card) .zeldwallet-mining-broadcast {\n background: linear-gradient(135deg, #d4af37 0%, #b8960c 100%);\n color: #0f0f16;\n }\n\n :host(.dark-card) .zeldwallet-mining-broadcast:hover {\n background: linear-gradient(135deg, #e8c454 0%, #d4af37 100%);\n box-shadow: 0 4px 12px rgba(212, 175, 55, 0.3);\n }\n\n :host(.dark-card) .zeldwallet-mining-mempool-link {\n background: #1e1e28;\n border-color: #059669;\n color: #6ee7b7;\n }\n\n :host(.dark-card) .zeldwallet-mining-mempool-link:hover {\n background: #0d3320;\n }\n\n :host(.dark-card) .zeldwallet-mining-copy-psbt {\n background: #1e1e28;\n border-color: #2d2d3a;\n color: #9ca3af;\n }\n\n :host(.dark-card) .zeldwallet-mining-copy-psbt:hover {\n background: #2d2d3a;\n }\n\n :host(.dark-card) .zeldwallet-mining-cancel {\n background: #1e1e28;\n border-color: #2d2d3a;\n color: #9ca3af;\n }\n\n :host(.dark-card) .zeldwallet-mining-cancel:hover {\n background: #2d2d3a;\n }\n\n :host(.dark-card) .zeldwallet-mining-error {\n background: linear-gradient(135deg, #3b1212 0%, #450a0a 100%);\n border-color: #dc2626;\n }\n\n :host(.dark-card) .zeldwallet-mining-error-message {\n color: #fca5a5;\n }\n\n :host(.dark-card) .zeldwallet-mining-retry {\n background: #1e1e28;\n border-color: #dc2626;\n color: #fca5a5;\n }\n\n :host(.dark-card) .zeldwallet-mining-retry:hover {\n background: #3b1212;\n }\n\n /* Confirmation Dialog */\n .zeldwallet-confirm-overlay {\n position: absolute;\n inset: 0;\n background: rgba(15, 23, 42, 0.75);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n border-radius: 12px;\n padding: 16px;\n }\n\n .zeldwallet-confirm-dialog {\n background: #ffffff;\n border-radius: 12px;\n padding: 20px;\n max-width: 100%;\n width: 100%;\n box-shadow: 0 20px 40px rgba(0, 0, 0, 0.25);\n max-height: calc(100% - 32px);\n overflow-y: auto;\n }\n\n .zeldwallet-confirm-title {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 700;\n color: #0f172a;\n text-align: center;\n }\n\n .zeldwallet-confirm-section {\n margin-bottom: 16px;\n }\n\n .zeldwallet-confirm-section-header {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #64748b;\n margin-bottom: 8px;\n padding-bottom: 4px;\n border-bottom: 1px solid #e2e8f0;\n }\n\n .zeldwallet-confirm-rows {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .zeldwallet-confirm-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 10px;\n background: #f8fafc;\n border-radius: 6px;\n gap: 12px;\n }\n\n .zeldwallet-confirm-address {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 12px;\n color: #334155;\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n flex: 1;\n }\n\n .zeldwallet-confirm-change {\n font-size: 10px;\n font-weight: 500;\n color: #059669;\n background: #d1fae5;\n padding: 2px 6px;\n border-radius: 4px;\n flex-shrink: 0;\n }\n\n .zeldwallet-confirm-value {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 13px;\n font-weight: 600;\n color: #f7931a;\n white-space: nowrap;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 2px;\n }\n\n .zeldwallet-confirm-zeld {\n font-size: 11px;\n font-weight: 600;\n color: #d4af37;\n }\n\n .zeldwallet-confirm-row-opreturn .zeldwallet-confirm-address {\n font-size: 11px;\n }\n\n .zeldwallet-confirm-summary {\n margin-top: 16px;\n padding-top: 12px;\n border-top: 2px solid #e2e8f0;\n }\n\n .zeldwallet-confirm-summary-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 0;\n }\n\n .zeldwallet-confirm-summary-label {\n font-size: 13px;\n font-weight: 600;\n color: #475569;\n }\n\n .zeldwallet-confirm-summary-value {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 14px;\n font-weight: 700;\n }\n\n .zeldwallet-confirm-fee {\n color: #dc2626;\n }\n\n .zeldwallet-confirm-mempool-link {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n width: 100%;\n padding: 12px 16px;\n margin-top: 16px;\n border: 1px solid #a7f3d0;\n border-radius: 8px;\n background: #fff;\n color: #059669;\n font-size: 14px;\n font-weight: 600;\n text-decoration: none;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .zeldwallet-confirm-mempool-link:hover {\n background: #ecfdf5;\n border-color: #059669;\n }\n\n .zeldwallet-confirm-actions {\n display: flex;\n gap: 10px;\n margin-top: 20px;\n }\n\n .zeldwallet-confirm-btn {\n flex: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 12px 16px;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.15s ease;\n }\n\n .zeldwallet-confirm-btn-confirm {\n background: linear-gradient(135deg, #059669 0%, #047857 100%);\n border: none;\n color: #fff;\n }\n\n .zeldwallet-confirm-btn-confirm:hover {\n background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n box-shadow: 0 4px 12px rgba(5, 150, 105, 0.3);\n }\n\n .zeldwallet-confirm-btn-cancel {\n background: #fff;\n border: 1px solid #d1d5db;\n color: #6b7280;\n }\n\n .zeldwallet-confirm-btn-cancel:hover {\n background: #f3f4f6;\n border-color: #9ca3af;\n }\n\n /* Dark mode confirmation dialog */\n :host(.dark-card) .zeldwallet-confirm-overlay {\n background: rgba(10, 10, 15, 0.85);\n }\n\n :host(.dark-card) .zeldwallet-confirm-dialog {\n background: #12121a;\n border: 1px solid #2d2d3a;\n }\n\n :host(.dark-card) .zeldwallet-confirm-title {\n color: #d4af37;\n }\n\n :host(.dark-card) .zeldwallet-confirm-section-header {\n color: #9ca3af;\n border-bottom-color: #2d2d3a;\n }\n\n :host(.dark-card) .zeldwallet-confirm-row {\n background: #1a1a24;\n }\n\n :host(.dark-card) .zeldwallet-confirm-address {\n color: #e8e6e3;\n }\n\n :host(.dark-card) .zeldwallet-confirm-change {\n background: #064e25;\n color: #6ee7b7;\n }\n\n :host(.dark-card) .zeldwallet-confirm-value {\n color: #d4af37;\n }\n\n :host(.dark-card) .zeldwallet-confirm-zeld {\n color: #f5d65a;\n }\n\n :host(.dark-card) .zeldwallet-confirm-summary {\n border-top-color: #2d2d3a;\n }\n\n :host(.dark-card) .zeldwallet-confirm-summary-label {\n color: #9ca3af;\n }\n\n :host(.dark-card) .zeldwallet-confirm-fee {\n color: #fca5a5;\n }\n\n :host(.dark-card) .zeldwallet-confirm-mempool-link {\n background: #1e1e28;\n border-color: #059669;\n color: #6ee7b7;\n }\n\n :host(.dark-card) .zeldwallet-confirm-mempool-link:hover {\n background: #0d3320;\n }\n\n :host(.dark-card) .zeldwallet-confirm-btn-confirm {\n background: linear-gradient(135deg, #d4af37 0%, #b8960c 100%);\n color: #0f0f16;\n }\n\n :host(.dark-card) .zeldwallet-confirm-btn-confirm:hover {\n background: linear-gradient(135deg, #e8c454 0%, #d4af37 100%);\n box-shadow: 0 4px 12px rgba(212, 175, 55, 0.3);\n }\n\n :host(.dark-card) .zeldwallet-confirm-btn-cancel {\n background: #1e1e28;\n border-color: #2d2d3a;\n color: #9ca3af;\n }\n\n :host(.dark-card) .zeldwallet-confirm-btn-cancel:hover {\n background: #2d2d3a;\n }\n\n /* ======================================================\n Mobile Responsive: Tabs for Addresses/Balances columns\n ====================================================== */\n \n /* Mobile tab button base styles (hidden on desktop) */\n .zeldwallet-mobile-tab {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px 12px;\n font-size: 13px;\n font-weight: 600;\n transition: all 0.15s ease;\n }\n \n /* On desktop: hide the button styling, show as regular text */\n @media (min-width: 481px) {\n .zeldwallet-mobile-tab {\n cursor: default;\n pointer-events: none;\n }\n }\n \n /* Mobile breakpoint: < 480px */\n @media (max-width: 480px) {\n /* Status row becomes tabs container */\n .zeldwallet-status-row.zeldwallet-mobile-tabs {\n display: flex;\n gap: 0;\n padding: 0;\n border-bottom: 1px solid #e5e7eb;\n margin-bottom: 12px;\n }\n \n /* Tab button styling */\n .zeldwallet-mobile-tab {\n flex: 1;\n text-align: center;\n margin: 0;\n padding: 10px 8px;\n border-radius: 8px 8px 0 0;\n color: #64748b;\n position: relative;\n }\n \n .zeldwallet-mobile-tab:hover {\n color: #0f172a;\n background: rgba(0, 0, 0, 0.03);\n }\n \n .zeldwallet-mobile-tab--active {\n color: #0f172a;\n background: transparent;\n }\n \n /* On mobile: hide underline for inactive tabs, show only for active */\n .zeldwallet-mobile-tab::after {\n display: none;\n }\n \n .zeldwallet-mobile-tab--active::after {\n display: block;\n content: '';\n position: absolute;\n bottom: -1px;\n left: 10%;\n right: 10%;\n height: 2px;\n background: #f7931a;\n border-radius: 2px 2px 0 0;\n }\n \n /* Hide the vertical divider on mobile */\n .zeldwallet-ready-block::after {\n display: none;\n }\n \n /* Reduce gap between rows on mobile */\n .zeldwallet-rows {\n gap: 0;\n }\n \n /* Rows: show only the active column */\n .zeldwallet-row {\n display: block;\n padding: 0 12px;\n }\n \n /* By default, hide both columns */\n .zeldwallet-row-left.zeldwallet-mobile-col-addresses,\n .zeldwallet-row-right.zeldwallet-mobile-col-balances {\n display: none;\n }\n \n /* Show addresses column when addresses tab is active */\n [data-mobile-tab=\"addresses\"] .zeldwallet-mobile-col-addresses {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: center;\n gap: 8px;\n padding: 8px 0;\n min-height: 32px;\n }\n \n /* Show balances column when balances tab is active */\n [data-mobile-tab=\"balances\"] .zeldwallet-mobile-col-balances {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 8px 0;\n min-height: 32px;\n }\n \n /* Keep balance values right-aligned on mobile (like desktop) */\n [data-mobile-tab=\"balances\"] .zeldwallet-balance-value {\n justify-content: flex-end;\n }\n \n /* Add separator between rows on mobile */\n [data-mobile-tab=\"balances\"] .zeldwallet-row:not(:last-child),\n [data-mobile-tab=\"addresses\"] .zeldwallet-row:not(:last-child) {\n border-bottom: 1px solid #e5e7eb;\n }\n \n /* Show label above address on mobile addresses tab */\n [data-mobile-tab=\"addresses\"] .zeldwallet-mobile-col-addresses .zeldwallet-label {\n font-size: 12px;\n color: #64748b;\n }\n \n /* Dark mode mobile styles */\n :host(.dark-card) .zeldwallet-status-row.zeldwallet-mobile-tabs {\n border-bottom-color: #1e1e28;\n }\n \n :host(.dark-card) .zeldwallet-mobile-tab {\n color: #9ca3af;\n }\n \n :host(.dark-card) .zeldwallet-mobile-tab:hover {\n color: #e8e6e3;\n background: rgba(255, 255, 255, 0.03);\n }\n \n :host(.dark-card) .zeldwallet-mobile-tab--active {\n color: #e8e6e3;\n }\n \n :host(.dark-card) .zeldwallet-mobile-tab--active::after {\n background: #d4af37;\n }\n \n :host(.dark-card) [data-mobile-tab=\"balances\"] .zeldwallet-row:not(:last-child),\n :host(.dark-card) [data-mobile-tab=\"addresses\"] .zeldwallet-row:not(:last-child) {\n border-bottom-color: #1e1e28;\n }\n \n :host(.dark-card) [data-mobile-tab=\"addresses\"] .zeldwallet-mobile-col-addresses .zeldwallet-label {\n color: #9ca3af;\n }\n \n /* Larger margin for hunt button row on mobile */\n .zeldwallet-hunt-button-row {\n margin-top: 16px;\n }\n \n /* Mining result actions: Sign and Broadcast on its own line, Cancel and Copy on second line */\n .zeldwallet-mining-broadcast {\n flex: 1 1 100%;\n justify-content: center;\n }\n }\n";
|
|
2
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/component/styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,6mxDA8xE3B,CAAC"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { NetworkType } from '../types';
|
|
2
|
+
import { LocaleStrings, TextDirection } from './i18n';
|
|
3
|
+
import { ComponentState, FeeMode } from './state';
|
|
4
|
+
import { SupportedWalletId } from './wallets';
|
|
5
|
+
export type RenderTemplateProps = {
|
|
6
|
+
state: ComponentState;
|
|
7
|
+
network: NetworkType;
|
|
8
|
+
dir: TextDirection;
|
|
9
|
+
strings: LocaleStrings;
|
|
10
|
+
locale: string;
|
|
11
|
+
showPasswordWarning: boolean;
|
|
12
|
+
showBackupWarning: boolean;
|
|
13
|
+
readyWithSecurity: boolean;
|
|
14
|
+
};
|
|
15
|
+
export type ActionKind = 'new-backup' | 'change-password' | 'restore';
|
|
16
|
+
export type ActionView = {
|
|
17
|
+
kind: ActionKind;
|
|
18
|
+
label: string;
|
|
19
|
+
icon: string;
|
|
20
|
+
className: string;
|
|
21
|
+
};
|
|
22
|
+
export type InlineWarningView = {
|
|
23
|
+
type: 'password' | 'backup';
|
|
24
|
+
tooltip: string;
|
|
25
|
+
ariaLabel: string;
|
|
26
|
+
actions: ActionView[];
|
|
27
|
+
};
|
|
28
|
+
export type StatusView = {
|
|
29
|
+
variant: 'loading' | 'error';
|
|
30
|
+
message: string;
|
|
31
|
+
};
|
|
32
|
+
export type LockedView = {
|
|
33
|
+
lockedLabel: string;
|
|
34
|
+
lockedHint: string;
|
|
35
|
+
passwordPlaceholder: string;
|
|
36
|
+
submitLabel: string;
|
|
37
|
+
error?: string;
|
|
38
|
+
};
|
|
39
|
+
export type SetPasswordFormView = {
|
|
40
|
+
passwordPlaceholder: string;
|
|
41
|
+
confirmPlaceholder: string;
|
|
42
|
+
submitLabel: string;
|
|
43
|
+
cancelLabel: string;
|
|
44
|
+
error?: string;
|
|
45
|
+
};
|
|
46
|
+
export type BackupFormView = {
|
|
47
|
+
passwordPlaceholder: string;
|
|
48
|
+
submitLabel: string;
|
|
49
|
+
cancelLabel: string;
|
|
50
|
+
error?: string;
|
|
51
|
+
};
|
|
52
|
+
export type RestoreMode = 'backup' | 'mnemonic';
|
|
53
|
+
export type RestoreFormView = {
|
|
54
|
+
mode: RestoreMode;
|
|
55
|
+
modeBackupLabel: string;
|
|
56
|
+
modeMnemonicLabel: string;
|
|
57
|
+
backupPlaceholder: string;
|
|
58
|
+
passwordPlaceholder: string;
|
|
59
|
+
mnemonicPlaceholder: string;
|
|
60
|
+
mnemonic: string;
|
|
61
|
+
newPasswordPlaceholder: string;
|
|
62
|
+
confirmPasswordPlaceholder: string;
|
|
63
|
+
password: string;
|
|
64
|
+
confirmPassword: string;
|
|
65
|
+
advancedOptionsLabel: string;
|
|
66
|
+
showAdvanced: boolean;
|
|
67
|
+
paymentPathLabel: string;
|
|
68
|
+
paymentPathPlaceholder: string;
|
|
69
|
+
paymentPath: string;
|
|
70
|
+
ordinalsPathLabel: string;
|
|
71
|
+
ordinalsPathPlaceholder: string;
|
|
72
|
+
ordinalsPath: string;
|
|
73
|
+
submitLabel: string;
|
|
74
|
+
cancelLabel: string;
|
|
75
|
+
error?: string;
|
|
76
|
+
};
|
|
77
|
+
export type BackupResultView = {
|
|
78
|
+
value: string;
|
|
79
|
+
title: string;
|
|
80
|
+
hint: string;
|
|
81
|
+
copyLabel: string;
|
|
82
|
+
downloadLabel: string;
|
|
83
|
+
cancelLabel: string;
|
|
84
|
+
};
|
|
85
|
+
export type BalanceType = 'btc' | 'zeld';
|
|
86
|
+
export type ReadyRowView = {
|
|
87
|
+
label: string;
|
|
88
|
+
icon?: string;
|
|
89
|
+
tooltip?: string;
|
|
90
|
+
value?: string;
|
|
91
|
+
truncatedValue?: string;
|
|
92
|
+
copyValue?: string;
|
|
93
|
+
copyLabel: string;
|
|
94
|
+
balanceType: BalanceType;
|
|
95
|
+
};
|
|
96
|
+
export type BalanceView = {
|
|
97
|
+
btcFormatted: string;
|
|
98
|
+
zeldFormatted: string;
|
|
99
|
+
loading: boolean;
|
|
100
|
+
error?: string;
|
|
101
|
+
};
|
|
102
|
+
export type ReadyView = {
|
|
103
|
+
readyLabel: string;
|
|
104
|
+
readyHint: string;
|
|
105
|
+
balancesHint: string;
|
|
106
|
+
rows: ReadyRowView[];
|
|
107
|
+
networkLabel: string;
|
|
108
|
+
network: NetworkType;
|
|
109
|
+
balance?: BalanceView;
|
|
110
|
+
};
|
|
111
|
+
export type WalletOptionView = {
|
|
112
|
+
id: SupportedWalletId;
|
|
113
|
+
name: string;
|
|
114
|
+
description: string;
|
|
115
|
+
icon: string;
|
|
116
|
+
installed: boolean;
|
|
117
|
+
installUrl?: string;
|
|
118
|
+
connectDisabled: boolean;
|
|
119
|
+
connectLabel: string;
|
|
120
|
+
installLabel: string;
|
|
121
|
+
installedLabel: string;
|
|
122
|
+
};
|
|
123
|
+
export type WalletSwitcherView = {
|
|
124
|
+
networkLabel: string;
|
|
125
|
+
networkName: string;
|
|
126
|
+
network: NetworkType;
|
|
127
|
+
toggleLabel: string;
|
|
128
|
+
open: boolean;
|
|
129
|
+
options: WalletOptionView[];
|
|
130
|
+
};
|
|
131
|
+
/** Mining progress view */
|
|
132
|
+
export type MiningProgressView = {
|
|
133
|
+
hashRateLabel: string;
|
|
134
|
+
hashRateFormatted: string;
|
|
135
|
+
attemptsLabel: string;
|
|
136
|
+
attemptsFormatted: string;
|
|
137
|
+
elapsedLabel: string;
|
|
138
|
+
elapsedFormatted: string;
|
|
139
|
+
stopLabel: string;
|
|
140
|
+
resumeLabel: string;
|
|
141
|
+
isPaused: boolean;
|
|
142
|
+
};
|
|
143
|
+
/** Mining result view */
|
|
144
|
+
export type MiningResultView = {
|
|
145
|
+
congratsMessage: string;
|
|
146
|
+
txidLabel: string;
|
|
147
|
+
txid: string;
|
|
148
|
+
psbt?: string;
|
|
149
|
+
copyPsbtLabel: string;
|
|
150
|
+
signAndBroadcastLabel: string;
|
|
151
|
+
mempoolUrl?: string;
|
|
152
|
+
viewOnMempoolLabel: string;
|
|
153
|
+
retryLabel: string;
|
|
154
|
+
cancelLabel: string;
|
|
155
|
+
showSignButton: boolean;
|
|
156
|
+
showMempoolLink: boolean;
|
|
157
|
+
};
|
|
158
|
+
/** Input row for confirmation dialog */
|
|
159
|
+
export type ConfirmDialogInputView = {
|
|
160
|
+
txid: string;
|
|
161
|
+
vout: number;
|
|
162
|
+
address: string;
|
|
163
|
+
addressTruncated: string;
|
|
164
|
+
valueFormatted: string;
|
|
165
|
+
valueSats: number;
|
|
166
|
+
/** ZELD amount for this input (in minimal units, 8 decimals) */
|
|
167
|
+
zeldAmount?: bigint;
|
|
168
|
+
};
|
|
169
|
+
/** Output row for confirmation dialog */
|
|
170
|
+
export type ConfirmDialogOutputView = {
|
|
171
|
+
address: string;
|
|
172
|
+
addressTruncated: string;
|
|
173
|
+
valueFormatted: string;
|
|
174
|
+
valueSats: number;
|
|
175
|
+
isChange: boolean;
|
|
176
|
+
/** Whether this is an OP_RETURN output */
|
|
177
|
+
isOpReturn: boolean;
|
|
178
|
+
/** Formatted OP_RETURN display string (e.g., "OP_RETURN: 12345" or "OP_RETURN: ZELD") */
|
|
179
|
+
opReturnDisplay?: string;
|
|
180
|
+
/** ZELD amount for this output (from distribution) */
|
|
181
|
+
zeldAmount?: bigint;
|
|
182
|
+
};
|
|
183
|
+
/** Confirmation dialog view */
|
|
184
|
+
export type ConfirmDialogView = {
|
|
185
|
+
visible: boolean;
|
|
186
|
+
title: string;
|
|
187
|
+
inputsLabel: string;
|
|
188
|
+
outputsLabel: string;
|
|
189
|
+
feeLabel: string;
|
|
190
|
+
totalLabel: string;
|
|
191
|
+
confirmLabel: string;
|
|
192
|
+
cancelLabel: string;
|
|
193
|
+
closeLabel: string;
|
|
194
|
+
changeLabel: string;
|
|
195
|
+
inputs: ConfirmDialogInputView[];
|
|
196
|
+
outputs: ConfirmDialogOutputView[];
|
|
197
|
+
feeFormatted: string;
|
|
198
|
+
feeSats: number;
|
|
199
|
+
totalInputFormatted: string;
|
|
200
|
+
totalOutputFormatted: string;
|
|
201
|
+
/** True when the transaction has been successfully broadcast */
|
|
202
|
+
isBroadcast: boolean;
|
|
203
|
+
/** Mempool URL for viewing the broadcast transaction */
|
|
204
|
+
mempoolUrl?: string;
|
|
205
|
+
/** Label for the mempool link */
|
|
206
|
+
viewOnMempoolLabel?: string;
|
|
207
|
+
};
|
|
208
|
+
/** Fee option for the selector */
|
|
209
|
+
export type FeeOptionView = {
|
|
210
|
+
mode: FeeMode;
|
|
211
|
+
label: string;
|
|
212
|
+
rate: number;
|
|
213
|
+
rateFormatted: string;
|
|
214
|
+
selected: boolean;
|
|
215
|
+
};
|
|
216
|
+
export type HuntingView = {
|
|
217
|
+
visible: boolean;
|
|
218
|
+
sendBtcLabel: string;
|
|
219
|
+
sendBtcChecked: boolean;
|
|
220
|
+
sendBtcEnabled: boolean;
|
|
221
|
+
sendZeldLabel: string;
|
|
222
|
+
sendZeldChecked: boolean;
|
|
223
|
+
sendZeldEnabled: boolean;
|
|
224
|
+
zeroCountLabel: string;
|
|
225
|
+
zeroCount: number;
|
|
226
|
+
useGpuLabel: string;
|
|
227
|
+
useGpu: boolean;
|
|
228
|
+
huntLabel: string;
|
|
229
|
+
huntEnabled: boolean;
|
|
230
|
+
huntDisabledReason?: string;
|
|
231
|
+
showSendFields: boolean;
|
|
232
|
+
sendType: 'btc' | 'zeld' | null;
|
|
233
|
+
addressPlaceholder: string;
|
|
234
|
+
amountPlaceholder: string;
|
|
235
|
+
recipientAddress: string;
|
|
236
|
+
amount: string;
|
|
237
|
+
addressError?: string;
|
|
238
|
+
amountError?: string;
|
|
239
|
+
feeLabel: string;
|
|
240
|
+
feeUnitLabel: string;
|
|
241
|
+
feeMode: FeeMode;
|
|
242
|
+
feeOptions: FeeOptionView[];
|
|
243
|
+
customFeeRate: string;
|
|
244
|
+
customFeePlaceholder: string;
|
|
245
|
+
showCustomFeeInput: boolean;
|
|
246
|
+
feeLoading: boolean;
|
|
247
|
+
feeError?: string;
|
|
248
|
+
feeExpanded: boolean;
|
|
249
|
+
currentFeeDisplay: string;
|
|
250
|
+
isMining: boolean;
|
|
251
|
+
miningProgress?: MiningProgressView;
|
|
252
|
+
miningResult?: MiningResultView;
|
|
253
|
+
miningError?: string;
|
|
254
|
+
miningStatusMessage?: string;
|
|
255
|
+
retryLabel: string;
|
|
256
|
+
cancelLabel: string;
|
|
257
|
+
confirmDialog?: ConfirmDialogView;
|
|
258
|
+
};
|
|
259
|
+
export type WalletViewModel = {
|
|
260
|
+
title: string;
|
|
261
|
+
titleIcon: string;
|
|
262
|
+
header: {
|
|
263
|
+
actions: ActionView[];
|
|
264
|
+
warnings: InlineWarningView[];
|
|
265
|
+
};
|
|
266
|
+
labels: {
|
|
267
|
+
showPassword: string;
|
|
268
|
+
hidePassword: string;
|
|
269
|
+
};
|
|
270
|
+
status?: StatusView;
|
|
271
|
+
locked?: LockedView;
|
|
272
|
+
setPasswordForm?: SetPasswordFormView;
|
|
273
|
+
backupForm?: BackupFormView;
|
|
274
|
+
backupResult?: BackupResultView;
|
|
275
|
+
restoreForm?: RestoreFormView;
|
|
276
|
+
ready?: ReadyView;
|
|
277
|
+
hunting?: HuntingView;
|
|
278
|
+
walletSwitcher: WalletSwitcherView;
|
|
279
|
+
};
|
|
280
|
+
export declare const buildViewModel: ({ state, network, strings, locale, showBackupWarning, showPasswordWarning, readyWithSecurity, }: RenderTemplateProps) => WalletViewModel;
|
|
281
|
+
//# sourceMappingURL=viewModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewModel.d.ts","sourceRoot":"","sources":["../../../src/component/viewModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { AddressInfo, NetworkType, SignInputOptions } from '../types';
|
|
2
|
+
export type SupportedWalletId = 'zeld' | 'xverse' | 'leather' | 'magicEden';
|
|
3
|
+
export type WalletOptionState = {
|
|
4
|
+
id: SupportedWalletId;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
icon: string;
|
|
8
|
+
installed: boolean;
|
|
9
|
+
installUrl?: string;
|
|
10
|
+
};
|
|
11
|
+
export type WalletDiscovery = {
|
|
12
|
+
options: WalletOptionState[];
|
|
13
|
+
entries: Partial<Record<SupportedWalletId, WalletEntry>>;
|
|
14
|
+
};
|
|
15
|
+
export type WalletEntry = {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
icon?: string;
|
|
19
|
+
provider?: unknown;
|
|
20
|
+
getProvider?: () => unknown | Promise<unknown>;
|
|
21
|
+
};
|
|
22
|
+
export type ExternalWalletSession = {
|
|
23
|
+
id: SupportedWalletId;
|
|
24
|
+
name: string;
|
|
25
|
+
addresses: AddressInfo[];
|
|
26
|
+
network: NetworkType;
|
|
27
|
+
provider?: unknown;
|
|
28
|
+
signMessage: (message: string, address: string, protocol?: 'ecdsa' | 'bip322-simple') => Promise<string>;
|
|
29
|
+
signPsbt?: (psbtBase64: string, inputs: SignInputOptions[]) => Promise<string>;
|
|
30
|
+
};
|
|
31
|
+
export declare class WrongNetworkError extends Error {
|
|
32
|
+
code: "wrong-network";
|
|
33
|
+
expected: NetworkType | string;
|
|
34
|
+
received?: NetworkType | string;
|
|
35
|
+
constructor(expected: NetworkType | string, received?: NetworkType | string);
|
|
36
|
+
}
|
|
37
|
+
export declare const FALLBACK_ICON = "data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"><rect width=\"32\" height=\"32\" rx=\"8\" fill=\"%23eef2f7\"/><path d=\"M9 21l4-6 3 4 3-5 4 7\" stroke=\"%232563eb\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><circle cx=\"12\" cy=\"11\" r=\"2\" fill=\"%232563eb\"/></svg>";
|
|
38
|
+
export declare const discoverWallets: () => WalletDiscovery;
|
|
39
|
+
export declare const connectExternalWallet: (walletId: SupportedWalletId, network: NetworkType, requestMessage: string) => Promise<ExternalWalletSession>;
|
|
40
|
+
//# sourceMappingURL=wallets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../../src/component/wallets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAe,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAQxF,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,iBAAiB,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,iBAAiB,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,eAAe,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzG,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAChF,CAAC;AAEF,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,IAAI,EAAG,eAAe,CAAU;IAChC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;gBAEpB,QAAQ,EAAE,WAAW,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,MAAM;CAQ5E;AAMD,eAAO,MAAM,aAAa,gYACiU,CAAC;AAuJ5V,eAAO,MAAM,eAAe,QAAO,eAkElC,CAAC;AAiKF,eAAO,MAAM,qBAAqB,GAChC,UAAU,iBAAiB,EAC3B,SAAS,WAAW,EACpB,gBAAgB,MAAM,KACrB,OAAO,CAAC,qBAAqB,CA4O/B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { default as ZeldWallet } from './ZeldWallet';
|
|
2
|
+
/**
|
|
3
|
+
* ZeldWallet public entrypoint.
|
|
4
|
+
*
|
|
5
|
+
* Exposes the main wallet class, helpers, and types.
|
|
6
|
+
*/
|
|
7
|
+
export * from './types';
|
|
8
|
+
export { SecureStorage } from './storage/SecureStorage';
|
|
9
|
+
export { KeyManager } from './keys/KeyManager';
|
|
10
|
+
export { ConfirmationModal } from './ui/Modal';
|
|
11
|
+
export { WBIPProvider, type ConfirmationHandler } from './provider/WBIPProvider';
|
|
12
|
+
export { ZeldWalletUI, defineZeldWalletUI } from './component/ZeldWalletUI';
|
|
13
|
+
export { languages, type LocaleKey, type LocaleStrings, type LanguageInfo } from './component/i18n';
|
|
14
|
+
export * from './react';
|
|
15
|
+
export { UnifiedWallet, type ExternalWalletSession } from './unifiedWallet';
|
|
16
|
+
export { ZeldWallet };
|
|
17
|
+
export default ZeldWallet;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACpG,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { AddressType, AddressPurpose, DerivedAddress, AddressInfo, NetworkType, SignInputOptions } from '../types';
|
|
2
|
+
import { DerivationPathType } from './derivation';
|
|
3
|
+
type AddressLookupConfig = {
|
|
4
|
+
maxAccount: number;
|
|
5
|
+
receiveWindow: number;
|
|
6
|
+
changeWindow: number;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* KeyManager class for Bitcoin key operations
|
|
10
|
+
*/
|
|
11
|
+
export declare class KeyManager {
|
|
12
|
+
private masterKey;
|
|
13
|
+
private mnemonic;
|
|
14
|
+
private network;
|
|
15
|
+
private derivedKeys;
|
|
16
|
+
private addressLookup;
|
|
17
|
+
private assertUnlocked;
|
|
18
|
+
/**
|
|
19
|
+
* Generate a new BIP39 mnemonic phrase
|
|
20
|
+
* @param strength - 128 for 12 words, 256 for 24 words
|
|
21
|
+
*/
|
|
22
|
+
generateMnemonic(strength?: 128 | 256): string;
|
|
23
|
+
/**
|
|
24
|
+
* Adjust the address lookup window used when resolving addresses -> paths.
|
|
25
|
+
* Useful for wallets with large gaps; values must be non-negative integers.
|
|
26
|
+
*/
|
|
27
|
+
setAddressLookupConfig(config: Partial<AddressLookupConfig>): void;
|
|
28
|
+
/**
|
|
29
|
+
* Initialize the key manager from a mnemonic phrase
|
|
30
|
+
* @param mnemonic - The BIP39 mnemonic phrase
|
|
31
|
+
* @param passphrase - Optional BIP39 passphrase
|
|
32
|
+
*/
|
|
33
|
+
fromMnemonic(mnemonic: string, passphrase?: string): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Set the network (mainnet or testnet)
|
|
36
|
+
*/
|
|
37
|
+
setNetwork(network: NetworkType): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get the current network
|
|
40
|
+
*/
|
|
41
|
+
getNetwork(): NetworkType;
|
|
42
|
+
/**
|
|
43
|
+
* Get the Bitcoin network configuration
|
|
44
|
+
*/
|
|
45
|
+
private getBitcoinNetwork;
|
|
46
|
+
/**
|
|
47
|
+
* Derive a key for a specific path
|
|
48
|
+
*/
|
|
49
|
+
private deriveKey;
|
|
50
|
+
/**
|
|
51
|
+
* Derive a Bitcoin address
|
|
52
|
+
*/
|
|
53
|
+
deriveAddress(type: DerivationPathType, account?: number, change?: 0 | 1, index?: number): DerivedAddress;
|
|
54
|
+
/**
|
|
55
|
+
* Create a Bitcoin address from a public key
|
|
56
|
+
*/
|
|
57
|
+
private createAddress;
|
|
58
|
+
/**
|
|
59
|
+
* Derive a Bitcoin address from a custom derivation path string.
|
|
60
|
+
* @param path - Full derivation path (e.g., "m/84'/0'/0'/0/0")
|
|
61
|
+
* @returns DerivedAddress with address, publicKey, path, and type
|
|
62
|
+
*/
|
|
63
|
+
deriveAddressFromPath(path: string): DerivedAddress;
|
|
64
|
+
/**
|
|
65
|
+
* Detect derivation path type from purpose number
|
|
66
|
+
*/
|
|
67
|
+
private detectPathTypeFromPurpose;
|
|
68
|
+
/**
|
|
69
|
+
* Get addresses for specified purposes (WBIP compatible)
|
|
70
|
+
* @param purposes - Array of address purposes
|
|
71
|
+
* @param customPaths - Optional map of purpose to custom derivation path
|
|
72
|
+
*/
|
|
73
|
+
getAddresses(purposes: AddressPurpose[], customPaths?: {
|
|
74
|
+
payment?: string;
|
|
75
|
+
ordinals?: string;
|
|
76
|
+
}): AddressInfo[];
|
|
77
|
+
/**
|
|
78
|
+
* Find the derivation path for an address
|
|
79
|
+
*/
|
|
80
|
+
findAddressPath(address: string): {
|
|
81
|
+
path: string;
|
|
82
|
+
type: AddressType;
|
|
83
|
+
} | null;
|
|
84
|
+
/**
|
|
85
|
+
* Sign a message with the private key of the specified address
|
|
86
|
+
*/
|
|
87
|
+
signMessage(message: string, address: string, protocol?: 'ecdsa' | 'bip322-simple'): Promise<string>;
|
|
88
|
+
/**
|
|
89
|
+
* Sign a PSBT (Partially Signed Bitcoin Transaction)
|
|
90
|
+
*/
|
|
91
|
+
signPsbt(psbtBase64: string, inputsToSign: SignInputOptions[]): Promise<string>;
|
|
92
|
+
/**
|
|
93
|
+
* Extract script from a raw transaction
|
|
94
|
+
*/
|
|
95
|
+
private extractScriptFromTx;
|
|
96
|
+
/**
|
|
97
|
+
* Detect derivation path type from a derived key path string
|
|
98
|
+
* Used to infer address type for signing decisions.
|
|
99
|
+
*/
|
|
100
|
+
private detectPathTypeFromPath;
|
|
101
|
+
/**
|
|
102
|
+
* Validate Taproot sighash selection; only a single value is allowed.
|
|
103
|
+
*/
|
|
104
|
+
private resolveTaprootSighash;
|
|
105
|
+
/**
|
|
106
|
+
* Normalize key material to the even-Y form required by BIP340.
|
|
107
|
+
*/
|
|
108
|
+
private getEvenYKeyMaterial;
|
|
109
|
+
/**
|
|
110
|
+
* Sign a Taproot input (key-path) using Schnorr
|
|
111
|
+
*/
|
|
112
|
+
private signTaprootInput;
|
|
113
|
+
/**
|
|
114
|
+
* Convert a script to an address
|
|
115
|
+
*/
|
|
116
|
+
private scriptToAddress;
|
|
117
|
+
/**
|
|
118
|
+
* Export the mnemonic phrase
|
|
119
|
+
* WARNING: This exposes the seed - use with caution
|
|
120
|
+
*/
|
|
121
|
+
exportMnemonic(): string;
|
|
122
|
+
/**
|
|
123
|
+
* Check if the key manager is initialized
|
|
124
|
+
*/
|
|
125
|
+
isInitialized(): boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Lock the wallet - clear all sensitive data from memory
|
|
128
|
+
*/
|
|
129
|
+
lock(): void;
|
|
130
|
+
}
|
|
131
|
+
export {};
|
|
132
|
+
//# sourceMappingURL=KeyManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyManager.d.ts","sourceRoot":"","sources":["../../../src/keys/KeyManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgCH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EACX,WAAW,EACX,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAKL,KAAK,kBAAkB,EAExB,MAAM,cAAc,CAAC;AAQtB,KAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAeF;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,aAAa,CAAsD;IAE3E,OAAO,CAAC,cAAc;IAMtB;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,GAAE,GAAG,GAAG,GAAS,GAAG,MAAM;IAInD;;;OAGG;IACH,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAyBlE;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB5E;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAQtC;;OAEG;IACH,UAAU,IAAI,WAAW;IAIzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,SAAS;IAajB;;OAEG;IACH,aAAa,CACX,IAAI,EAAE,kBAAkB,EACxB,OAAO,GAAE,MAAU,EACnB,MAAM,GAAE,CAAC,GAAG,CAAK,EACjB,KAAK,GAAE,MAAU,GAChB,cAAc;IA+BjB;;OAEG;IACH,OAAO,CAAC,aAAa;IA+CrB;;;;OAIG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAqCnD;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAcjC;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,EAAE;IAgC9G;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI;IA0B5E;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,OAAO,GAAG,eAAe,GACnC,OAAO,CAAC,MAAM,CAAC;IA0ClB;;OAEG;IACG,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAyIrF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAoB9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8FxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;;OAGG;IACH,cAAc,IAAI,MAAM;IAOxB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,IAAI,IAAI,IAAI;CAab"}
|