@lukso/up-connector 0.5.1 → 0.6.0-dev.5ea12c5
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/dist/auto-setup.cjs +3 -3
- package/dist/auto-setup.js +2 -2
- package/dist/{avatar-CmUCtW_w.d.cts → avatar-CQkubMTK.d.cts} +0 -1
- package/dist/{avatar-CmUCtW_w.d.ts → avatar-CQkubMTK.d.ts} +0 -1
- package/dist/avatar.cjs +2 -2
- package/dist/avatar.d.cts +1 -1
- package/dist/avatar.d.ts +1 -1
- package/dist/avatar.js +1 -1
- package/dist/backup-modal.cjs +2 -2
- package/dist/backup-modal.js +1 -1
- package/dist/{chunk-M4UJAKZ2.cjs → chunk-3IJAXTQI.cjs} +3 -3
- package/dist/chunk-3IJAXTQI.cjs.map +1 -0
- package/dist/{chunk-ORJK2YGG.cjs → chunk-7LQ5EB2X.cjs} +22 -24
- package/dist/chunk-7LQ5EB2X.cjs.map +1 -0
- package/dist/{chunk-3SGSPHOZ.js → chunk-A5RRWZ7W.js} +6 -10
- package/dist/chunk-A5RRWZ7W.js.map +1 -0
- package/dist/{chunk-IAKQFHFD.cjs → chunk-CKVXLOXK.cjs} +6 -10
- package/dist/chunk-CKVXLOXK.cjs.map +1 -0
- package/dist/{chunk-NWCNJSG3.js → chunk-DQ663HKR.js} +7 -3
- package/dist/chunk-DQ663HKR.js.map +1 -0
- package/dist/{chunk-CN2BMW6Y.cjs → chunk-GCYDV7FB.cjs} +159 -101
- package/dist/chunk-GCYDV7FB.cjs.map +1 -0
- package/dist/{chunk-6N35TCFT.js → chunk-GKAVIDXP.js} +21 -23
- package/dist/chunk-GKAVIDXP.js.map +1 -0
- package/dist/{chunk-5P7EGEE5.js → chunk-QZ55O6GN.js} +4 -4
- package/dist/chunk-QZ55O6GN.js.map +1 -0
- package/dist/{chunk-3ME6PKYE.js → chunk-SAQWNAQ6.js} +138 -80
- package/dist/chunk-SAQWNAQ6.js.map +1 -0
- package/dist/{chunk-7ETKG6KR.cjs → chunk-ZRA7ZVHJ.cjs} +7 -3
- package/dist/chunk-ZRA7ZVHJ.cjs.map +1 -0
- package/dist/connect-modal/index.cjs +4 -2
- package/dist/connect-modal/index.cjs.map +1 -1
- package/dist/connect-modal/index.d.cts +1 -1
- package/dist/connect-modal/index.d.ts +1 -1
- package/dist/connect-modal/index.js +11 -9
- package/dist/index.cjs +39 -32
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +40 -33
- package/dist/index.js.map +1 -1
- package/dist/restore-modal.cjs +2 -2
- package/dist/restore-modal.d.cts +2 -2
- package/dist/restore-modal.d.ts +2 -2
- package/dist/restore-modal.js +1 -1
- package/dist/{wagmi-BLnqILO_.d.cts → wagmi-DgjkdmGk.d.cts} +77 -21
- package/dist/{wagmi-BLnqILO_.d.ts → wagmi-DgjkdmGk.d.ts} +77 -21
- package/package.json +7 -7
- package/src/auto-setup.ts +0 -1
- package/src/avatar.ts +20 -23
- package/src/backup-modal.ts +6 -2
- package/src/connect-modal/components/connection-view.ts +4 -1
- package/src/connect-modal/components/eoa-connection-view.ts +4 -0
- package/src/connect-modal/connect-modal.types.ts +4 -0
- package/src/connect-modal/index.ts +6 -4
- package/src/connect-modal/services/wagmi.ts +176 -76
- package/src/connect-modal/styles/styles.css +1 -1
- package/src/connect-modal/utils/chainParams.ts +32 -0
- package/src/connector.ts +22 -20
- package/src/index.ts +6 -4
- package/src/popup-instance.ts +3 -4
- package/src/restore-modal.ts +5 -3
- package/src/styles/styles.css +1 -1
- package/dist/chunk-3ME6PKYE.js.map +0 -1
- package/dist/chunk-3SGSPHOZ.js.map +0 -1
- package/dist/chunk-5P7EGEE5.js.map +0 -1
- package/dist/chunk-6N35TCFT.js.map +0 -1
- package/dist/chunk-7ETKG6KR.cjs.map +0 -1
- package/dist/chunk-CN2BMW6Y.cjs.map +0 -1
- package/dist/chunk-IAKQFHFD.cjs.map +0 -1
- package/dist/chunk-M4UJAKZ2.cjs.map +0 -1
- package/dist/chunk-NWCNJSG3.js.map +0 -1
- package/dist/chunk-ORJK2YGG.cjs.map +0 -1
package/dist/auto-setup.cjs
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
8
|
-
require('./chunk-
|
|
7
|
+
var _chunk3IJAXTQIcjs = require('./chunk-3IJAXTQI.cjs');
|
|
8
|
+
require('./chunk-GCYDV7FB.cjs');
|
|
9
9
|
require('./chunk-ZBDE64SD.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
@@ -13,5 +13,5 @@ require('./chunk-ZBDE64SD.cjs');
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
exports.EMBEDDED_WALLET_ID =
|
|
16
|
+
exports.EMBEDDED_WALLET_ID = _chunk3IJAXTQIcjs.EMBEDDED_WALLET_ID; exports.EMBEDDED_WALLET_URL_DEV = _chunk3IJAXTQIcjs.EMBEDDED_WALLET_URL_DEV; exports.EMBEDDED_WALLET_URL_PROD = _chunk3IJAXTQIcjs.EMBEDDED_WALLET_URL_PROD; exports.UP_EXTENSION_ID = _chunk3IJAXTQIcjs.UP_EXTENSION_ID; exports.setupLuksoConnector = _chunk3IJAXTQIcjs.setupLuksoConnector;
|
|
17
17
|
//# sourceMappingURL=auto-setup.cjs.map
|
package/dist/auto-setup.js
CHANGED
|
@@ -4,8 +4,8 @@ import {
|
|
|
4
4
|
EMBEDDED_WALLET_URL_PROD,
|
|
5
5
|
UP_EXTENSION_ID,
|
|
6
6
|
setupLuksoConnector
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-QZ55O6GN.js";
|
|
8
|
+
import "./chunk-SAQWNAQ6.js";
|
|
9
9
|
import "./chunk-EUXUH3YW.js";
|
|
10
10
|
export {
|
|
11
11
|
EMBEDDED_WALLET_ID,
|
package/dist/avatar.cjs
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunk7LQ5EB2Xcjs = require('./chunk-7LQ5EB2X.cjs');
|
|
6
6
|
require('./chunk-ZBDE64SD.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
exports.DraggableAvatar =
|
|
11
|
+
exports.DraggableAvatar = _chunk7LQ5EB2Xcjs.DraggableAvatar; exports.createAvatar = _chunk7LQ5EB2Xcjs.createAvatar; exports.default = _chunk7LQ5EB2Xcjs.avatar_default;
|
|
12
12
|
//# sourceMappingURL=avatar.cjs.map
|
package/dist/avatar.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { D as DraggableAvatar, c as createAvatar, D as default } from './avatar-
|
|
1
|
+
export { D as DraggableAvatar, c as createAvatar, D as default } from './avatar-CQkubMTK.cjs';
|
package/dist/avatar.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { D as DraggableAvatar, c as createAvatar, D as default } from './avatar-
|
|
1
|
+
export { D as DraggableAvatar, c as createAvatar, D as default } from './avatar-CQkubMTK.js';
|
package/dist/avatar.js
CHANGED
package/dist/backup-modal.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkZRA7ZVHJcjs = require('./chunk-ZRA7ZVHJ.cjs');
|
|
4
4
|
require('./chunk-XOKG3KIL.cjs');
|
|
5
5
|
require('./chunk-ZBDE64SD.cjs');
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
exports.BackupModal =
|
|
8
|
+
exports.BackupModal = _chunkZRA7ZVHJcjs.BackupModal;
|
|
9
9
|
//# sourceMappingURL=backup-modal.cjs.map
|
package/dist/backup-modal.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkGCYDV7FBcjs = require('./chunk-GCYDV7FB.cjs');
|
|
4
4
|
|
|
5
5
|
// src/auto-setup.ts
|
|
6
6
|
var EMBEDDED_WALLET_ID = "dev.lukso.auth";
|
|
@@ -64,7 +64,7 @@ async function setupLuksoConnector(config = {}) {
|
|
|
64
64
|
await createUPProvider(cfg.embeddedWallet);
|
|
65
65
|
}
|
|
66
66
|
const wagmiConfig = cfg.wagmiConfig || await createWagmiConfig(cfg);
|
|
67
|
-
|
|
67
|
+
_chunkGCYDV7FBcjs.setupWagmi.call(void 0, {
|
|
68
68
|
wagmiConfig,
|
|
69
69
|
chainId: cfg.chains.defaultChainId,
|
|
70
70
|
embeddedWalletId: cfg.embeddedWallet.enabled ? EMBEDDED_WALLET_ID : void 0
|
|
@@ -178,4 +178,4 @@ function getDefaultStorage() {
|
|
|
178
178
|
|
|
179
179
|
|
|
180
180
|
exports.EMBEDDED_WALLET_ID = EMBEDDED_WALLET_ID; exports.EMBEDDED_WALLET_URL_DEV = EMBEDDED_WALLET_URL_DEV; exports.EMBEDDED_WALLET_URL_PROD = EMBEDDED_WALLET_URL_PROD; exports.UP_EXTENSION_ID = UP_EXTENSION_ID; exports.setupLuksoConnector = setupLuksoConnector;
|
|
181
|
-
//# sourceMappingURL=chunk-
|
|
181
|
+
//# sourceMappingURL=chunk-3IJAXTQI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-3IJAXTQI.cjs","../src/auto-setup.ts"],"names":[],"mappings":"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","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-3IJAXTQI.cjs","sourcesContent":[null,"/**\n * Auto-setup utilities for LUKSO products\n *\n * Provides zero-config setup for:\n * - Embedded Wallet (passkey-based)\n * - UP Extension (browser extension)\n * - UP Mobile (WalletConnect)\n */\n\nimport type { Config } from '@wagmi/core'\nimport { setupConnectModal } from './connect-modal/index.js'\n\n/**\n * Embedded wallet constants\n */\nexport const EMBEDDED_WALLET_ID = 'dev.lukso.auth'\nexport const EMBEDDED_WALLET_URL_DEV = 'http://localhost:9100'\nexport const EMBEDDED_WALLET_URL_PROD = 'https://auth-simple.pages.dev'\n\n/**\n * UP Extension ID\n */\nexport const UP_EXTENSION_ID = 'cloud.universalprofile'\n\n/**\n * Get default wallet URL based on environment\n */\nfunction getDefaultWalletUrl(): string {\n // Check for environment variable (CI builds)\n if (typeof process !== 'undefined' && process.env?.WALLET_URL) {\n return process.env.WALLET_URL\n }\n\n // Check if we're in production (browser)\n if (typeof window !== 'undefined') {\n const isLocalhost =\n window.location.hostname === 'localhost' ||\n window.location.hostname === '127.0.0.1'\n return isLocalhost ? EMBEDDED_WALLET_URL_DEV : EMBEDDED_WALLET_URL_PROD\n }\n\n // Default to dev\n return EMBEDDED_WALLET_URL_DEV\n}\n\nexport interface LuksoConnectorConfig {\n /**\n * Embedded wallet configuration\n */\n embeddedWallet?: {\n /**\n * Enable embedded wallet option (default: true)\n */\n enabled?: boolean\n\n /**\n * URL to the wallet service\n * @default 'http://localhost:9100'\n */\n url?: string\n\n /**\n * Storage key for UP Provider state\n * @default 'up-provider'\n */\n storageKey?: string\n\n /**\n * Display name for the wallet\n * @default 'Create Passkey Wallet'\n */\n name?: string\n }\n\n /**\n * WalletConnect configuration for mobile app\n */\n walletConnect?: {\n /**\n * Enable WalletConnect (default: true)\n */\n enabled?: boolean\n\n /**\n * WalletConnect Project ID\n * @default LUKSO's default project ID\n */\n projectId?: string\n\n /**\n * Show QR code modal on mobile devices (default: false)\n */\n showQrModal?: boolean\n }\n\n /**\n * Chain configuration\n */\n chains?: {\n /**\n * Default chain ID\n * @default 42 (LUKSO mainnet)\n */\n defaultChainId?: number\n\n /**\n * Enable testnet (default: true)\n */\n enableTestnet?: boolean\n }\n\n /**\n * Storage configuration\n */\n storage?: {\n /**\n * Storage key prefix for wagmi state\n * @default 'up-wagmi'\n */\n key?: string\n }\n\n /**\n * Pass an existing wagmi config instead of auto-creating one\n */\n wagmiConfig?: any\n}\n\nconst DEFAULT_CONFIG: Required<LuksoConnectorConfig> = {\n embeddedWallet: {\n enabled: true,\n url: getDefaultWalletUrl(),\n storageKey: 'up-provider',\n name: 'UE Embedded Wallet',\n },\n walletConnect: {\n enabled: true,\n projectId: '7d1af65dc2722192d9914b5d6eaeb421', // LUKSO's default\n showQrModal: false,\n },\n chains: {\n defaultChainId: 42, // LUKSO mainnet\n enableTestnet: true,\n },\n storage: {\n key: 'up-wagmi',\n },\n wagmiConfig: undefined,\n}\n\n/**\n * Auto-setup LUKSO connector with sensible defaults\n *\n * This function creates a wagmi config and sets up the connect modal\n * with support for:\n * - Embedded Wallet (passkey-based)\n * - UP Extension (auto-detected via EIP-6963)\n * - UP Mobile (WalletConnect)\n *\n * @example\n * ```typescript\n * // Zero config - uses all defaults\n * setupLuksoConnector()\n *\n * // Custom configuration\n * setupLuksoConnector({\n * embeddedWallet: {\n * url: 'https://wallet.example.com'\n * },\n * chains: {\n * defaultChainId: 4201 // LUKSO Testnet\n * }\n * })\n * ```\n */\nexport async function setupLuksoConnector(\n config: LuksoConnectorConfig = {}\n): Promise<{ wagmiConfig: Config }> {\n const cfg = {\n embeddedWallet: {\n ...DEFAULT_CONFIG.embeddedWallet,\n ...config.embeddedWallet,\n } as Required<typeof DEFAULT_CONFIG.embeddedWallet>,\n walletConnect: {\n ...DEFAULT_CONFIG.walletConnect,\n ...config.walletConnect,\n } as Required<typeof DEFAULT_CONFIG.walletConnect>,\n chains: {\n ...DEFAULT_CONFIG.chains,\n ...config.chains,\n } as Required<typeof DEFAULT_CONFIG.chains>,\n storage: {\n ...DEFAULT_CONFIG.storage,\n ...config.storage,\n } as Required<typeof DEFAULT_CONFIG.storage>,\n wagmiConfig: config.wagmiConfig,\n }\n\n // IMPORTANT: Create UP Provider BEFORE wagmi config\n // The UP Provider registers via EIP-6963, and wagmi's injected() will detect it\n // This matches the order in demo-app: UP Provider first, then wagmi config\n\n // Step 1: Create UP Provider (if enabled)\n if (cfg.embeddedWallet?.enabled) {\n await createUPProvider(cfg.embeddedWallet)\n }\n\n // Step 2: Create or use provided wagmi config\n const wagmiConfig = cfg.wagmiConfig || (await createWagmiConfig(cfg))\n\n // Note: Wagmi will auto-reconnect in the background\n // The connector's watchWagmiAccount will detect the connection when it completes\n\n // Step 3: Setup connect modal\n // The UP Provider is already registered via EIP-6963 and will appear in wagmi connectors\n // Use the embedded wallet ID to identify it in the connector list\n setupConnectModal({\n wagmiConfig,\n chainId: cfg.chains.defaultChainId,\n embeddedWalletId: cfg.embeddedWallet.enabled\n ? EMBEDDED_WALLET_ID\n : undefined,\n })\n\n return { wagmiConfig }\n}\n\n/**\n * Create wagmi config with LUKSO chains and connectors\n */\nasync function createWagmiConfig(cfg: any): Promise<any> {\n try {\n // Dynamic imports to keep dependencies optional\n const [\n { createConfig, createStorage, injected },\n { walletConnect },\n { createClient, http },\n { lukso, luksoTestnet },\n ] = await Promise.all([\n import('@wagmi/core'),\n import('@wagmi/connectors'),\n import('viem'),\n import('viem/chains'),\n ])\n\n // Create storage adapter\n const storage = createStorage({\n key: cfg.storage.key,\n storage: getDefaultStorage(),\n })\n\n // Build chains array\n const chains = cfg.chains.enableTestnet\n ? ([luksoTestnet, lukso] as const)\n : ([lukso] as const)\n\n // Build connectors array\n const connectors = []\n\n // Add WalletConnect if enabled\n if (cfg.walletConnect.enabled) {\n connectors.push(\n walletConnect({\n projectId: cfg.walletConnect.projectId,\n showQrModal: cfg.walletConnect.showQrModal,\n })\n )\n }\n\n // Add injected (for UP Extension and other EIP-6963 wallets)\n connectors.push(injected())\n\n // Create wagmi config\n return createConfig({\n storage,\n multiInjectedProviderDiscovery: true, // Enable EIP-6963\n connectors,\n chains,\n client({ chain }: any) {\n return createClient({ chain, transport: http() })\n },\n })\n } catch (error) {\n console.error('Failed to create wagmi config:', error)\n throw new Error(\n 'Failed to create wagmi config. Make sure @wagmi/core, @wagmi/connectors, and viem are installed.'\n )\n }\n}\n\n/**\n * Create UP Provider (registers via EIP-6963)\n */\nasync function createUPProvider(config: {\n url: string\n storageKey: string\n name: string\n}): Promise<void> {\n // Validate URL - throw error if explicitly set to empty string\n if (config.url != null && config.url.trim() === '') {\n throw new Error(\n 'UP Provider URL is defined but empty. Please set WALLET_URL environment variable to a valid URL or leave it undefined.'\n )\n }\n\n try {\n const { createClientUPProvider } = await import('@lukso/up-provider')\n\n // Create UP Provider - it automatically registers via EIP-6963\n createClientUPProvider({\n url: config.url,\n mode: 'iframe',\n get: async () => {\n const stored = localStorage.getItem(config.storageKey)\n return stored ? JSON.parse(stored) : {}\n },\n set: async (value: Record<string, unknown>) => {\n localStorage.setItem(config.storageKey, JSON.stringify(value))\n },\n name: config.name,\n })\n\n // Wait for EIP-6963 registration\n await new Promise((resolve) => setTimeout(resolve, 100))\n } catch (error) {\n console.warn('⚠️ Failed to create UP Provider:', error)\n throw error\n }\n}\n\n/**\n * Default storage adapter (localStorage with error handling)\n */\nfunction getDefaultStorage() {\n const storage = (() => {\n if (typeof window !== 'undefined' && window.localStorage) {\n return window.localStorage\n }\n return {\n getItem: () => null,\n setItem: () => {},\n removeItem: () => {},\n }\n })()\n\n return {\n getItem(key: string) {\n return storage.getItem(key)\n },\n removeItem(key: string) {\n storage.removeItem(key)\n },\n setItem(key: string, value: string) {\n try {\n storage.setItem(key, value)\n } catch {\n // Silence QuotaExceededError, SecurityError, etc.\n }\n },\n }\n}\n"]}
|
|
@@ -130,7 +130,7 @@ var DraggableAvatar = class {
|
|
|
130
130
|
createStyles() {
|
|
131
131
|
if (typeof document === "undefined") return;
|
|
132
132
|
const avatarPixelSize = this.getPixelSize(this.options.avatarSize);
|
|
133
|
-
const
|
|
133
|
+
const _overhang = this.getIdenticonOverhang(this.options.avatarSize);
|
|
134
134
|
const existingStyles = document.querySelector("#up-connector-avatar-styles");
|
|
135
135
|
if (existingStyles) {
|
|
136
136
|
existingStyles.remove();
|
|
@@ -490,9 +490,7 @@ var DraggableAvatar = class {
|
|
|
490
490
|
let closest = positions[0];
|
|
491
491
|
let minDistance = Infinity;
|
|
492
492
|
positions.forEach((pos) => {
|
|
493
|
-
const distance = Math.sqrt(
|
|
494
|
-
Math.pow(x - pos.x, 2) + Math.pow(y - pos.y, 2)
|
|
495
|
-
);
|
|
493
|
+
const distance = Math.sqrt((x - pos.x) ** 2 + (y - pos.y) ** 2);
|
|
496
494
|
if (distance < minDistance) {
|
|
497
495
|
minDistance = distance;
|
|
498
496
|
closest = pos;
|
|
@@ -515,19 +513,19 @@ var DraggableAvatar = class {
|
|
|
515
513
|
this.element.classList.add("hidden-left");
|
|
516
514
|
this.element.style.left = `-${this.options.hideOffset}px`;
|
|
517
515
|
this.element.style.right = "auto";
|
|
518
|
-
this.element.style.top = position.y
|
|
516
|
+
this.element.style.top = `${position.y}px`;
|
|
519
517
|
_optionalChain([this, 'access', _ => _.options, 'access', _2 => _2.onHide, 'optionalCall', _3 => _3()]);
|
|
520
518
|
} else if (position.side === "right") {
|
|
521
519
|
this.element.classList.add("hidden-right");
|
|
522
520
|
this.element.style.right = `-${this.options.hideOffset}px`;
|
|
523
521
|
this.element.style.left = "auto";
|
|
524
|
-
this.element.style.top = position.y
|
|
522
|
+
this.element.style.top = `${position.y}px`;
|
|
525
523
|
_optionalChain([this, 'access', _4 => _4.options, 'access', _5 => _5.onHide, 'optionalCall', _6 => _6()]);
|
|
526
524
|
}
|
|
527
525
|
} else {
|
|
528
|
-
this.element.style.left = position.x
|
|
526
|
+
this.element.style.left = `${position.x}px`;
|
|
529
527
|
this.element.style.right = "auto";
|
|
530
|
-
this.element.style.top = position.y
|
|
528
|
+
this.element.style.top = `${position.y}px`;
|
|
531
529
|
if (this.isHidden) {
|
|
532
530
|
_optionalChain([this, 'access', _7 => _7.options, 'access', _8 => _8.onShow, 'optionalCall', _9 => _9()]);
|
|
533
531
|
}
|
|
@@ -541,8 +539,8 @@ var DraggableAvatar = class {
|
|
|
541
539
|
if (!this.snapPreviews.has(pos.name)) {
|
|
542
540
|
const preview = document.createElement("div");
|
|
543
541
|
preview.className = "up-avatar-preview";
|
|
544
|
-
preview.style.left = pos.x
|
|
545
|
-
preview.style.top = pos.y
|
|
542
|
+
preview.style.left = `${pos.x}px`;
|
|
543
|
+
preview.style.top = `${pos.y}px`;
|
|
546
544
|
this.overlay.appendChild(preview);
|
|
547
545
|
this.snapPreviews.set(pos.name, preview);
|
|
548
546
|
}
|
|
@@ -550,7 +548,7 @@ var DraggableAvatar = class {
|
|
|
550
548
|
}
|
|
551
549
|
updateActiveSnapPreview(activePosition, shouldHide = false) {
|
|
552
550
|
if (typeof document === "undefined") return;
|
|
553
|
-
|
|
551
|
+
const activeKey = activePosition.name;
|
|
554
552
|
this.snapPreviews.forEach((preview, key) => {
|
|
555
553
|
if (key === activeKey) {
|
|
556
554
|
preview.classList.add("active");
|
|
@@ -558,24 +556,24 @@ var DraggableAvatar = class {
|
|
|
558
556
|
if (activePosition.side === "left") {
|
|
559
557
|
preview.style.left = `-${this.options.hideOffset}px`;
|
|
560
558
|
preview.style.right = "auto";
|
|
561
|
-
preview.style.top = activePosition.y
|
|
559
|
+
preview.style.top = `${activePosition.y}px`;
|
|
562
560
|
} else if (activePosition.side === "right") {
|
|
563
561
|
preview.style.right = `-${this.options.hideOffset}px`;
|
|
564
562
|
preview.style.left = "auto";
|
|
565
|
-
preview.style.top = activePosition.y
|
|
563
|
+
preview.style.top = `${activePosition.y}px`;
|
|
566
564
|
}
|
|
567
565
|
} else {
|
|
568
|
-
preview.style.left = activePosition.x
|
|
566
|
+
preview.style.left = `${activePosition.x}px`;
|
|
569
567
|
preview.style.right = "auto";
|
|
570
|
-
preview.style.top = activePosition.y
|
|
568
|
+
preview.style.top = `${activePosition.y}px`;
|
|
571
569
|
}
|
|
572
570
|
} else {
|
|
573
571
|
preview.classList.remove("active");
|
|
574
572
|
const pos = this.getSnapPositions().find((p) => p.name === key);
|
|
575
573
|
if (pos) {
|
|
576
|
-
preview.style.left = pos.x
|
|
574
|
+
preview.style.left = `${pos.x}px`;
|
|
577
575
|
preview.style.right = "auto";
|
|
578
|
-
preview.style.top = pos.y
|
|
576
|
+
preview.style.top = `${pos.y}px`;
|
|
579
577
|
}
|
|
580
578
|
}
|
|
581
579
|
});
|
|
@@ -614,9 +612,9 @@ var DraggableAvatar = class {
|
|
|
614
612
|
this.hasDragged = true;
|
|
615
613
|
}
|
|
616
614
|
this.element.className = "up-avatar dragging";
|
|
617
|
-
this.element.style.left = currentX
|
|
615
|
+
this.element.style.left = `${currentX}px`;
|
|
618
616
|
this.element.style.right = "auto";
|
|
619
|
-
this.element.style.top = currentY
|
|
617
|
+
this.element.style.top = `${currentY}px`;
|
|
620
618
|
const closestPosition = this.findClosestSnapPosition(currentX, currentY);
|
|
621
619
|
const shouldHideLeft = currentX < -this.options.hideThreshold;
|
|
622
620
|
const shouldHideRight = currentX > window.innerWidth - this.getPixelSize(this.options.avatarSize) + this.options.hideThreshold;
|
|
@@ -672,9 +670,9 @@ var DraggableAvatar = class {
|
|
|
672
670
|
this.hasDragged = true;
|
|
673
671
|
}
|
|
674
672
|
this.element.className = "up-avatar dragging";
|
|
675
|
-
this.element.style.left = currentX
|
|
673
|
+
this.element.style.left = `${currentX}px`;
|
|
676
674
|
this.element.style.right = "auto";
|
|
677
|
-
this.element.style.top = currentY
|
|
675
|
+
this.element.style.top = `${currentY}px`;
|
|
678
676
|
const closestPosition = this.findClosestSnapPosition(currentX, currentY);
|
|
679
677
|
const shouldHideLeft = currentX < -this.options.hideThreshold;
|
|
680
678
|
const shouldHideRight = currentX > window.innerWidth - this.getPixelSize(this.options.avatarSize) + this.options.hideThreshold;
|
|
@@ -720,7 +718,7 @@ var DraggableAvatar = class {
|
|
|
720
718
|
handleResize() {
|
|
721
719
|
if (this.currentPosition) {
|
|
722
720
|
const positions = this.getSnapPositions();
|
|
723
|
-
const newPosition = positions.find((p) => p.name === this.currentPosition.name) || positions[0];
|
|
721
|
+
const newPosition = positions.find((p) => p.name === _optionalChain([this, 'access', _15 => _15.currentPosition, 'optionalAccess', _16 => _16.name])) || positions[0];
|
|
724
722
|
this.snapToPosition(newPosition, this.isHidden);
|
|
725
723
|
}
|
|
726
724
|
}
|
|
@@ -834,7 +832,7 @@ var DraggableAvatar = class {
|
|
|
834
832
|
}
|
|
835
833
|
if (typeof document !== "undefined" && !document.querySelector(".up-avatar-overlay")) {
|
|
836
834
|
const styles = document.querySelector("#up-connector-avatar-styles");
|
|
837
|
-
_optionalChain([styles, 'optionalAccess',
|
|
835
|
+
_optionalChain([styles, 'optionalAccess', _17 => _17.remove, 'call', _18 => _18()]);
|
|
838
836
|
}
|
|
839
837
|
}
|
|
840
838
|
};
|
|
@@ -849,4 +847,4 @@ var avatar_default = DraggableAvatar;
|
|
|
849
847
|
|
|
850
848
|
|
|
851
849
|
exports.DraggableAvatar = DraggableAvatar; exports.createAvatar = createAvatar; exports.avatar_default = avatar_default;
|
|
852
|
-
//# sourceMappingURL=chunk-
|
|
850
|
+
//# sourceMappingURL=chunk-7LQ5EB2X.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-7LQ5EB2X.cjs","../src/avatar.ts"],"names":[],"mappings":"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","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/up-connector/dist/chunk-7LQ5EB2X.cjs","sourcesContent":[null,"/**\n * Draggable Avatar Component for UP Connector\n * Integrates with @lukso/transaction-view-core IconView\n */\n\nimport type { AddressData, AvatarOptions } from './types.js'\n\nconst DEFAULT_AVATAR_OPTIONS: Required<\n Omit<\n AvatarOptions,\n | 'address'\n | 'resolved'\n | 'label'\n | 'chainId'\n | 'componentLoader'\n | 'onPositionChange'\n | 'onHide'\n | 'onShow'\n | 'onClick'\n | 'onAddressClick'\n | 'onTransactionStart'\n | 'onTransactionComplete'\n >\n> = {\n // IconView integration options\n size: 'medium',\n forceUnresolved: false,\n\n // Fallback options\n fallbackColor: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\n fallbackText: '?',\n fallbackImage: '',\n\n // Avatar container options\n avatarSize: 'medium' as const,\n\n // Behavior options\n initialPosition: 'top-left',\n hideThreshold: 20,\n hideOffset: 30,\n\n // Animation options\n transitionDuration: '0.3s',\n transitionEasing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n\n // Container\n container: typeof document !== 'undefined' ? document.body : (null as any),\n}\n\ninterface SnapPosition {\n x: number\n y: number\n side: 'left' | 'right'\n name: string\n}\n\nexport class DraggableAvatar {\n private options: AvatarOptions & typeof DEFAULT_AVATAR_OPTIONS\n private overlay!: HTMLElement\n private element!: HTMLElement\n private iconViewElement?: HTMLElement\n private snapPreviews: Map<string, HTMLElement> = new Map()\n\n // Drag state\n private isDragging = false\n private hasDragged = false\n private startX = 0\n private startY = 0\n private initialX = 0\n private initialY = 0\n private dragThreshold = 15 // pixels - movement below this is still considered a click\n\n /**\n * Convert size name to pixel value\n * Based on Tailwind classes: x-small=24px, small=40px, medium=56px, large=80px, x-large=96px, 2x-large=120px\n */\n private getPixelSize(\n size: 'x-small' | 'small' | 'medium' | 'large' | 'x-large' | '2x-large'\n ): number {\n switch (size) {\n case 'x-small':\n return 24\n case 'small':\n return 40\n case 'medium':\n return 56\n case 'large':\n return 80\n case 'x-large':\n return 96\n case '2x-large':\n return 120\n }\n }\n\n /**\n * Get identicon overhang for a given profile size\n * The identicon hangs off the bottom-right corner by half its size\n */\n private getIdenticonOverhang(\n profileSize:\n | 'x-small'\n | 'small'\n | 'medium'\n | 'large'\n | 'x-large'\n | '2x-large'\n ): number {\n switch (profileSize) {\n case 'x-small':\n return 6 // w-3 = 12px, overhang = 6px\n case 'small':\n return 8 // w-4 = 16px, overhang = 8px\n case 'medium':\n return 10 // w-5 = 20px, overhang = 10px\n case 'large':\n return 12 // w-6 = 24px, overhang = 12px\n case 'x-large':\n return 14 // w-7 = 28px, overhang = 14px\n case '2x-large':\n return 18 // w-9 = 36px, overhang = 18px\n }\n }\n\n // Position state\n private currentPosition?: SnapPosition\n private isHidden = false\n private iconViewAvailable = false\n\n // Animation state\n private isThrobbing = false\n\n constructor(options: AvatarOptions = {}) {\n this.options = { ...DEFAULT_AVATAR_OPTIONS, ...options }\n\n // Validate options\n if (\n !this.options.address &&\n !this.options.fallbackText &&\n !this.options.fallbackImage\n ) {\n console.warn(\n 'DraggableAvatar: No address, fallbackText, or fallbackImage provided. Avatar may be empty.'\n )\n }\n\n this.init()\n }\n\n private async init(): Promise<void> {\n this.createStyles()\n await this.checkIconViewAvailability()\n this.createElement()\n this.attachEventListeners()\n this.setInitialPosition()\n }\n\n /**\n * Safely check for and load IconView component\n */\n private async checkIconViewAvailability(): Promise<boolean> {\n // First check if already registered\n if (\n typeof customElements !== 'undefined' &&\n customElements.get('icon-view')\n ) {\n this.iconViewAvailable = true\n return true\n }\n\n // Try to load if not available and we have an address\n if (this.options.address && !this.iconViewAvailable) {\n try {\n // Try custom loader first\n if (this.options.componentLoader) {\n await this.options.componentLoader()\n }\n // Try global loader\n else if (\n typeof window !== 'undefined' &&\n (window as any).loadTransactionViewComponents\n ) {\n await (window as any).loadTransactionViewComponents()\n }\n // Try direct import as fallback\n else {\n try {\n await import('@lukso/transaction-view-core')\n } catch (importError) {\n console.warn(\n 'Failed to import @lukso/transaction-view-core:',\n importError\n )\n }\n }\n\n this.iconViewAvailable =\n typeof customElements !== 'undefined' &&\n customElements.get('icon-view') !== undefined\n } catch (error) {\n console.warn('Failed to load IconView component:', error)\n this.iconViewAvailable = false\n }\n }\n\n return this.iconViewAvailable\n }\n\n private createStyles(): void {\n if (typeof document === 'undefined') return\n\n // Calculate sizes before template literal\n const avatarPixelSize = this.getPixelSize(this.options.avatarSize)\n const _overhang = this.getIdenticonOverhang(this.options.avatarSize)\n\n // Debug: Log our calculations\n\n // Remove existing styles to allow updates\n const existingStyles = document.querySelector('#up-connector-avatar-styles')\n if (existingStyles) {\n existingStyles.remove()\n }\n\n const style = document.createElement('style')\n style.id = 'up-connector-avatar-styles'\n style.textContent = `\n .up-avatar-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 9999;\n overflow: hidden;\n }\n\n .up-avatar {\n position: absolute;\n width: ${avatarPixelSize}px;\n height: ${avatarPixelSize}px;\n border-radius: 50%;\n cursor: move;\n z-index: 1000;\n overflow: visible;\n display: flex;\n align-items: center;\n justify-content: center;\n user-select: none;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2), 0 2px 8px rgba(0, 0, 0, 0.1);\n transition: all ${this.options.transitionDuration} ${this.options.transitionEasing};\n touch-action: none;\n overflow: visible;\n background: ${this.options.fallbackColor};\n border: 3px solid rgba(255, 255, 255, 0.5) !important;\n outline: none !important;\n backdrop-filter: blur(10px);\n pointer-events: auto;\n }\n\n .up-avatar * {\n user-select: none !important;\n pointer-events: none !important;\n }\n\n .up-avatar img {\n draggable: false !important;\n }\n\n .up-avatar:hover {\n transform: scale(1.05);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25), 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n .up-avatar:focus {\n outline: none !important;\n border: 3px solid rgba(255, 255, 255, 0.6) !important;\n }\n\n .up-avatar.dragging {\n transform: scale(1.1);\n box-shadow: 0 12px 32px rgba(0, 0, 0, 0.3), 0 6px 16px rgba(0, 0, 0, 0.2);\n cursor: grabbing;\n }\n\n .up-avatar.hidden-left {\n left: -${this.options.hideOffset}px !important;\n opacity: 0.8;\n }\n\n .up-avatar.hidden-right {\n right: -${this.options.hideOffset}px !important;\n left: auto !important;\n opacity: 0.8;\n }\n\n .up-avatar.hidden-left:hover,\n .up-avatar.hidden-right:hover {\n transform: translateX(0) scale(1.05);\n opacity: 1;\n }\n\n .up-avatar.hidden-left:hover {\n left: -12px !important;\n }\n\n .up-avatar.hidden-right:hover {\n right: -12px !important;\n }\n\n /* IconView positioned to allow identicon to extend beyond border */\n .up-avatar icon-view {\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n width: ${avatarPixelSize}px !important;\n height: ${avatarPixelSize}px !important;\n display: block !important;\n z-index: 1 !important;\n }\n\n /* Additional auto-sizing for IconView components */\n .up-avatar icon-view * {\n max-width: ${avatarPixelSize}px !important;\n max-height: ${avatarPixelSize}px !important;\n }\n\n /* Let IconView handle its own internal sizing */\n\n .up-avatar icon-view img,\n .up-avatar icon-view .icon,\n .up-avatar icon-view .profile-image {\n max-width: 100% !important;\n max-height: 100% !important;\n width: auto !important;\n height: auto !important;\n object-fit: cover;\n draggable: false !important;\n user-select: none !important;\n pointer-events: none !important;\n }\n\n /* Fallback content */\n .up-avatar .fallback-content {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-weight: 600;\n font-size: ${Math.floor(avatarPixelSize * 0.4)}px;\n font-family: system-ui, -apple-system, sans-serif;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n }\n\n .up-avatar .fallback-content img {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n object-fit: cover;\n draggable: false !important;\n user-select: none !important;\n pointer-events: none !important;\n }\n\n /* Snap preview */\n .up-avatar-preview {\n position: absolute;\n width: ${avatarPixelSize}px;\n height: ${avatarPixelSize}px;\n border-radius: 50%;\n z-index: 999;\n pointer-events: none;\n background: rgba(102, 126, 234, 0.1);\n backdrop-filter: blur(5px);\n box-shadow:\n 0 0 0 2px rgba(255, 255, 255, 0.3),\n 0 0 0 4px rgba(102, 126, 234, 0.3),\n 0 2px 8px rgba(0, 0, 0, 0.2);\n opacity: 0.5;\n transition: opacity 0.2s ease, box-shadow 0.2s ease, background 0.2s ease;\n }\n\n .up-avatar-preview.active {\n background: rgba(102, 126, 234, 0.2);\n box-shadow:\n 0 0 0 2px white,\n 0 0 0 4px #667eea,\n 0 4px 12px rgba(0, 0, 0, 0.3);\n opacity: 1;\n }\n\n /* Hide IconView labels in avatar mode */\n .up-avatar icon-view .label {\n display: none;\n }\n\n /* Connection indicator */\n .up-avatar::after {\n content: '';\n position: absolute;\n bottom: 2px;\n right: 2px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: #4ade80;\n border: 2px solid white;\n opacity: 0;\n transform: scale(0);\n transition: all 0.2s ease;\n }\n\n .up-avatar.connected::after {\n opacity: 1;\n transform: scale(1);\n }\n\n /* Throb animation for transactions */\n .up-avatar.throbbing {\n animation: avatar-throb 2s ease-in-out infinite;\n }\n\n @keyframes avatar-throb {\n 0%, 100% {\n transform: scale(1);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n border-color: rgba(255, 255, 255, 0.1);\n }\n 50% {\n transform: scale(1.1);\n box-shadow:\n 0 8px 24px rgba(0, 0, 0, 0.3),\n 0 0 0 4px rgba(102, 126, 234, 0.4),\n 0 0 0 8px rgba(102, 126, 234, 0.2),\n 0 0 20px rgba(102, 126, 234, 0.3);\n border-color: rgba(102, 126, 234, 0.8);\n }\n }\n\n .up-avatar.throbbing::before {\n content: '';\n position: absolute;\n top: -4px;\n left: -4px;\n right: -4px;\n bottom: -4px;\n border: 2px solid transparent;\n border-radius: 50%;\n background: conic-gradient(from 0deg, transparent, #667eea, #764ba2, transparent);\n background-size: 200% 200%;\n animation: avatar-rotate 1.5s linear infinite;\n z-index: -1;\n }\n\n @keyframes avatar-rotate {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(style)\n }\n\n private createElement(): void {\n if (typeof document === 'undefined') return\n\n // Create fixed overlay container\n this.overlay = document.createElement('div')\n this.overlay.className = 'up-avatar-overlay'\n\n // Create avatar element\n this.element = document.createElement('div')\n this.element.className = 'up-avatar'\n this.element.setAttribute('role', 'button')\n this.element.setAttribute('tabindex', '0')\n this.element.setAttribute('aria-label', 'Universal Profile avatar')\n\n this.createContent()\n\n // Append avatar to overlay, then overlay to container\n this.overlay.appendChild(this.element)\n this.options.container.appendChild(this.overlay)\n }\n\n private createContent(): void {\n if (!this.element) return\n\n // Clear existing content\n this.element.innerHTML = ''\n\n if (this.options.address && this.iconViewAvailable) {\n // Use IconView component\n this.iconViewElement = document.createElement('icon-view')\n this.iconViewElement.setAttribute('address', this.options.address)\n\n if (this.options.chainId) {\n this.iconViewElement.setAttribute(\n 'chain-id',\n this.options.chainId.toString()\n )\n }\n\n if (this.options.resolved) {\n ;(this.iconViewElement as any).resolved = this.options.resolved\n }\n\n // Set size - avatar size now matches IconView sizes exactly\n this.iconViewElement.setAttribute('size', this.options.avatarSize)\n\n // Let CSS handle the positioning and sizing\n\n if (this.options.label) {\n this.iconViewElement.setAttribute('label', this.options.label)\n }\n\n if (this.options.forceUnresolved) {\n this.iconViewElement.setAttribute('force-unresolved', '')\n }\n\n // Listen for address-click events\n this.iconViewElement.addEventListener('address-click', (event) => {\n event.stopPropagation()\n if (this.options.onAddressClick) {\n this.options.onAddressClick(event as CustomEvent)\n }\n })\n\n this.element.appendChild(this.iconViewElement)\n } else {\n // Use fallback content\n this.createFallbackContent()\n }\n }\n\n private createFallbackContent(): void {\n if (!this.element) return\n\n const fallbackDiv = document.createElement('div')\n fallbackDiv.className = 'fallback-content'\n\n if (this.options.fallbackImage) {\n const img = document.createElement('img')\n img.src = this.options.fallbackImage\n img.alt = 'Avatar'\n img.onerror = () => {\n // Fallback to text if image fails to load\n img.remove()\n fallbackDiv.textContent = this.options.fallbackText\n }\n fallbackDiv.appendChild(img)\n } else {\n fallbackDiv.textContent = this.options.fallbackText\n }\n\n this.element.appendChild(fallbackDiv)\n }\n\n private attachEventListeners(): void {\n if (!this.element) return\n\n // Mouse events\n this.element.addEventListener('mousedown', this.handleMouseDown.bind(this))\n document.addEventListener('mousemove', this.handleMouseMove.bind(this))\n document.addEventListener('mouseup', this.handleMouseUp.bind(this))\n\n // Touch events\n this.element.addEventListener(\n 'touchstart',\n this.handleTouchStart.bind(this),\n { passive: false }\n )\n document.addEventListener('touchmove', this.handleTouchMove.bind(this), {\n passive: false,\n })\n document.addEventListener('touchend', this.handleTouchEnd.bind(this), {\n passive: false,\n })\n\n // Click events\n this.element.addEventListener('click', this.handleClick.bind(this))\n\n // Window resize\n window.addEventListener('resize', this.handleResize.bind(this))\n }\n\n private getSnapPositions(): SnapPosition[] {\n const margin = 20\n const size = this.getPixelSize(this.options.avatarSize)\n\n const positions = [\n { x: margin, y: margin, side: 'left' as const, name: 'top-left' },\n {\n x: window.innerWidth - size - margin,\n y: margin,\n side: 'right' as const,\n name: 'top-right',\n },\n {\n x: margin,\n y: window.innerHeight - size - margin,\n side: 'left' as const,\n name: 'bottom-left',\n },\n {\n x: window.innerWidth - size - margin,\n y: window.innerHeight - size - margin,\n side: 'right' as const,\n name: 'bottom-right',\n },\n ]\n\n return positions\n }\n\n private findClosestSnapPosition(x: number, y: number): SnapPosition {\n const positions = this.getSnapPositions()\n let closest = positions[0]\n let minDistance = Infinity\n\n positions.forEach((pos) => {\n const distance = Math.sqrt((x - pos.x) ** 2 + (y - pos.y) ** 2)\n if (distance < minDistance) {\n minDistance = distance\n closest = pos\n }\n })\n\n return closest\n }\n\n private setInitialPosition(): void {\n const positions = this.getSnapPositions()\n const initialPos =\n positions.find((p) => p.name === this.options.initialPosition) ||\n positions[0]\n this.snapToPosition(initialPos)\n }\n\n private snapToPosition(position: SnapPosition, shouldHide = false): void {\n if (!this.element) return\n\n this.element.className = 'up-avatar'\n this.currentPosition = position\n this.isHidden = shouldHide\n\n if (shouldHide) {\n if (position.side === 'left') {\n this.element.classList.add('hidden-left')\n this.element.style.left = `-${this.options.hideOffset}px`\n this.element.style.right = 'auto'\n this.element.style.top = `${position.y}px`\n this.options.onHide?.()\n } else if (position.side === 'right') {\n this.element.classList.add('hidden-right')\n this.element.style.right = `-${this.options.hideOffset}px`\n this.element.style.left = 'auto'\n this.element.style.top = `${position.y}px`\n this.options.onHide?.()\n }\n } else {\n this.element.style.left = `${position.x}px`\n this.element.style.right = 'auto'\n this.element.style.top = `${position.y}px`\n if (this.isHidden) {\n this.options.onShow?.()\n }\n }\n\n this.options.onPositionChange?.(position.name)\n }\n\n private showAllSnapPreviews(): void {\n if (typeof document === 'undefined') return\n\n const positions = this.getSnapPositions()\n\n // Create preview for each position if it doesn't exist\n positions.forEach((pos) => {\n if (!this.snapPreviews.has(pos.name)) {\n const preview = document.createElement('div')\n preview.className = 'up-avatar-preview'\n preview.style.left = `${pos.x}px`\n preview.style.top = `${pos.y}px`\n this.overlay.appendChild(preview)\n this.snapPreviews.set(pos.name, preview)\n }\n })\n }\n\n private updateActiveSnapPreview(\n activePosition: SnapPosition,\n shouldHide = false\n ): void {\n if (typeof document === 'undefined') return\n\n // Determine the active position key\n const activeKey = activePosition.name\n\n // Update all previews\n this.snapPreviews.forEach((preview, key) => {\n if (key === activeKey) {\n // Highlight the active one\n preview.classList.add('active')\n\n // Update position for hidden state\n if (shouldHide) {\n if (activePosition.side === 'left') {\n preview.style.left = `-${this.options.hideOffset}px`\n preview.style.right = 'auto'\n preview.style.top = `${activePosition.y}px`\n } else if (activePosition.side === 'right') {\n preview.style.right = `-${this.options.hideOffset}px`\n preview.style.left = 'auto'\n preview.style.top = `${activePosition.y}px`\n }\n } else {\n preview.style.left = `${activePosition.x}px`\n preview.style.right = 'auto'\n preview.style.top = `${activePosition.y}px`\n }\n } else {\n // Dim the others\n preview.classList.remove('active')\n\n // Reset to normal position (not hidden)\n const pos = this.getSnapPositions().find((p) => p.name === key)\n if (pos) {\n preview.style.left = `${pos.x}px`\n preview.style.right = 'auto'\n preview.style.top = `${pos.y}px`\n }\n }\n })\n }\n\n private hideAllSnapPreviews(): void {\n this.snapPreviews.forEach((preview) => {\n preview.remove()\n })\n this.snapPreviews.clear()\n }\n\n // Event handlers\n private handleMouseDown(e: MouseEvent): void {\n // Only handle left mouse button (button 0)\n if (e.button !== 0) {\n return\n }\n\n this.isDragging = true\n this.hasDragged = false // Reset for new interaction\n this.startX = e.clientX\n this.startY = e.clientY\n\n const rect = this.element.getBoundingClientRect()\n this.initialX = rect.left\n this.initialY = rect.top\n\n this.element.classList.add('dragging')\n this.element.style.transition = 'none'\n\n // Show all snap previews when drag starts\n this.showAllSnapPreviews()\n }\n\n private handleMouseMove(e: MouseEvent): void {\n if (!this.isDragging) return\n\n e.preventDefault()\n\n const currentX = this.initialX + (e.clientX - this.startX)\n const currentY = this.initialY + (e.clientY - this.startY)\n\n // Check if movement exceeds threshold\n const deltaX = Math.abs(e.clientX - this.startX)\n const deltaY = Math.abs(e.clientY - this.startY)\n const totalMovement = Math.sqrt(deltaX * deltaX + deltaY * deltaY)\n\n if (totalMovement > this.dragThreshold) {\n this.hasDragged = true // Only mark as dragged if we exceed threshold\n }\n\n // Always update position while dragging (for visual feedback)\n this.element.className = 'up-avatar dragging'\n this.element.style.left = `${currentX}px`\n this.element.style.right = 'auto'\n this.element.style.top = `${currentY}px`\n\n const closestPosition = this.findClosestSnapPosition(currentX, currentY)\n const shouldHideLeft = currentX < -this.options.hideThreshold\n const shouldHideRight =\n currentX >\n window.innerWidth -\n this.getPixelSize(this.options.avatarSize) +\n this.options.hideThreshold\n\n // Update active preview\n this.updateActiveSnapPreview(\n closestPosition,\n shouldHideLeft || shouldHideRight\n )\n }\n\n private handleMouseUp(): void {\n if (this.isDragging) {\n this.isDragging = false\n this.element.classList.remove('dragging')\n this.element.style.transition = `all ${this.options.transitionDuration} ${this.options.transitionEasing}`\n\n // Hide all snap previews\n this.hideAllSnapPreviews()\n\n const rect = this.element.getBoundingClientRect()\n const currentX = rect.left\n const currentY = rect.top\n\n const shouldHideLeft = currentX < -this.options.hideThreshold\n const shouldHideRight =\n currentX >\n window.innerWidth -\n this.getPixelSize(this.options.avatarSize) +\n this.options.hideThreshold\n\n const closestPosition = this.findClosestSnapPosition(currentX, currentY)\n this.snapToPosition(closestPosition, shouldHideLeft || shouldHideRight)\n\n // Reset hasDragged after click event has had a chance to fire\n setTimeout(() => {\n this.hasDragged = false\n }, 0)\n }\n }\n\n private handleTouchStart(e: TouchEvent): void {\n e.preventDefault()\n e.stopPropagation()\n\n this.isDragging = true\n this.hasDragged = false // Reset for new interaction\n const touch = e.touches[0]\n this.startX = touch.clientX\n this.startY = touch.clientY\n\n const rect = this.element.getBoundingClientRect()\n this.initialX = rect.left\n this.initialY = rect.top\n\n this.element.classList.add('dragging')\n this.element.style.transition = 'none'\n\n // Show all snap previews when drag starts\n this.showAllSnapPreviews()\n }\n\n private handleTouchMove(e: TouchEvent): void {\n if (!this.isDragging) return\n\n e.preventDefault()\n e.stopPropagation()\n\n const touch = e.touches[0]\n const currentX = this.initialX + (touch.clientX - this.startX)\n const currentY = this.initialY + (touch.clientY - this.startY)\n\n // Check if movement exceeds threshold\n const deltaX = Math.abs(touch.clientX - this.startX)\n const deltaY = Math.abs(touch.clientY - this.startY)\n const totalMovement = Math.sqrt(deltaX * deltaX + deltaY * deltaY)\n\n if (totalMovement > this.dragThreshold) {\n this.hasDragged = true // Only mark as dragged if we exceed threshold\n }\n\n // Always update position while dragging (for visual feedback)\n this.element.className = 'up-avatar dragging'\n this.element.style.left = `${currentX}px`\n this.element.style.right = 'auto'\n this.element.style.top = `${currentY}px`\n\n const closestPosition = this.findClosestSnapPosition(currentX, currentY)\n const shouldHideLeft = currentX < -this.options.hideThreshold\n const shouldHideRight =\n currentX >\n window.innerWidth -\n this.getPixelSize(this.options.avatarSize) +\n this.options.hideThreshold\n\n // Update active preview\n this.updateActiveSnapPreview(\n closestPosition,\n shouldHideLeft || shouldHideRight\n )\n }\n\n private handleTouchEnd(e: TouchEvent): void {\n if (this.isDragging) {\n e.preventDefault()\n e.stopPropagation()\n\n this.isDragging = false\n this.element.classList.remove('dragging')\n this.element.style.transition = `all ${this.options.transitionDuration} ${this.options.transitionEasing}`\n\n // Hide all snap previews\n this.hideAllSnapPreviews()\n\n const rect = this.element.getBoundingClientRect()\n const currentX = rect.left\n const currentY = rect.top\n\n const shouldHideLeft = currentX < -this.options.hideThreshold\n const shouldHideRight =\n currentX >\n window.innerWidth -\n this.getPixelSize(this.options.avatarSize) +\n this.options.hideThreshold\n\n const closestPosition = this.findClosestSnapPosition(currentX, currentY)\n this.snapToPosition(closestPosition, shouldHideLeft || shouldHideRight)\n\n // Reset hasDragged after click event has had a chance to fire\n setTimeout(() => {\n this.hasDragged = false\n }, 0)\n }\n }\n\n private handleClick(e: MouseEvent): void {\n // Only handle left mouse button (button 0)\n if (e.button !== 0) {\n return\n }\n\n // Only trigger click if we haven't dragged during this interaction\n if (!this.hasDragged) {\n if (this.options.onClick) {\n // Get resolved data from IconView if available\n const resolvedData = (this.iconViewElement as any)?.resolved || null\n this.options.onClick(e, {\n address: this.options.address,\n resolved: resolvedData,\n })\n }\n }\n }\n\n private handleResize(): void {\n if (this.currentPosition) {\n const positions = this.getSnapPositions()\n const newPosition =\n positions.find((p) => p.name === this.currentPosition?.name) ||\n positions[0]\n this.snapToPosition(newPosition, this.isHidden)\n }\n }\n\n // Public API methods\n public setPosition(positionName: string): void {\n const positions = this.getSnapPositions()\n const position = positions.find((p) => p.name === positionName)\n if (position) {\n this.snapToPosition(position)\n }\n }\n\n public hide(): void {\n if (this.currentPosition) {\n this.snapToPosition(this.currentPosition, true)\n }\n }\n\n public show(): void {\n if (this.currentPosition) {\n this.snapToPosition(this.currentPosition, false)\n }\n }\n\n public setConnected(connected: boolean): void {\n if (this.element) {\n if (connected) {\n this.element.classList.add('connected')\n } else {\n this.element.classList.remove('connected')\n }\n }\n }\n\n public updateAddress(\n address: string,\n resolved?: AddressData,\n chainId?: number\n ): void {\n this.options.address = address\n this.options.resolved = resolved\n this.options.chainId = chainId\n\n if (this.iconViewElement) {\n this.iconViewElement.setAttribute('address', address)\n\n if (chainId) {\n this.iconViewElement.setAttribute('chain-id', chainId.toString())\n }\n\n if (resolved) {\n ;(this.iconViewElement as any).resolved = resolved\n }\n } else {\n // Recreate content if switching from fallback to IconView\n this.createContent()\n }\n }\n\n public updateResolved(resolved: AddressData): void {\n this.options.resolved = resolved\n if (this.iconViewElement) {\n ;(this.iconViewElement as any).resolved = resolved\n }\n }\n\n public updateSize(\n newSize: 'x-small' | 'small' | 'medium' | 'large' | 'x-large' | '2x-large'\n ): void {\n if (this.options.avatarSize === newSize) return\n\n this.options.avatarSize = newSize\n\n // Recreate styles with new size\n this.createStyles()\n\n // Update element size using pixel conversion\n const pixelSize = this.getPixelSize(newSize)\n if (this.element) {\n this.element.style.width = `${pixelSize}px`\n this.element.style.height = `${pixelSize}px`\n }\n\n // Force IconView to resize if available\n if (this.iconViewElement) {\n // Size attribute now matches avatarSize directly\n this.iconViewElement.setAttribute('size', newSize)\n\n // Force IconView to re-render with new size\n const iconView = this.iconViewElement as any\n if (iconView.requestUpdate) {\n iconView.requestUpdate()\n }\n\n // Remove any inline styles to let CSS handle sizing\n this.iconViewElement.style.width = ''\n this.iconViewElement.style.height = ''\n\n // Update any nested lukso-profile elements\n const profiles = this.iconViewElement.querySelectorAll('lukso-profile')\n\n profiles.forEach((profile) => {\n const element = profile as HTMLElement\n element.style.width = ''\n element.style.height = ''\n // Update the size attribute on lukso-profile\n element.setAttribute('size', newSize)\n })\n }\n\n // Recreate content to update IconView sizing\n this.createContent()\n }\n\n public getElement(): HTMLElement | null {\n return this.element || null\n }\n\n public getPosition(): { x: number; y: number; name: string } | null {\n if (!this.element || !this.currentPosition) return null\n\n const rect = this.element.getBoundingClientRect()\n return {\n x: rect.left,\n y: rect.top,\n name: this.currentPosition.name,\n }\n }\n\n public startThrob(): void {\n if (!this.element || this.isThrobbing) return\n\n this.isThrobbing = true\n this.element.classList.add('throbbing')\n }\n\n public stopThrob(): void {\n if (!this.element || !this.isThrobbing) return\n\n this.isThrobbing = false\n this.element.classList.remove('throbbing')\n }\n\n public getAvatarRect(): DOMRect | null {\n return this.element ? this.element.getBoundingClientRect() : null\n }\n\n public destroy(): void {\n this.stopThrob()\n\n if (this.overlay) {\n this.overlay.remove()\n }\n\n // Remove styles if this was the last avatar overlay\n if (\n typeof document !== 'undefined' &&\n !document.querySelector('.up-avatar-overlay')\n ) {\n const styles = document.querySelector('#up-connector-avatar-styles')\n styles?.remove()\n }\n }\n}\n\n/**\n * Factory function for creating draggable avatars\n */\nexport async function createAvatar(\n options: AvatarOptions = {}\n): Promise<DraggableAvatar> {\n const avatar = new DraggableAvatar(options)\n // The init() call is already handled in the constructor\n return avatar\n}\n\n// Export the class as default\nexport default DraggableAvatar\n"]}
|
|
@@ -26,11 +26,11 @@ var RestoreModal = class extends CoreLitElement {
|
|
|
26
26
|
this.password = "";
|
|
27
27
|
this.passwordErrors = [];
|
|
28
28
|
this.isRestoring = false;
|
|
29
|
-
this.walletData = null;
|
|
30
29
|
this.validationWarnings = [];
|
|
31
|
-
this.validationInfo = [];
|
|
32
30
|
this.controllers = [];
|
|
33
31
|
this.restoredAddresses = [];
|
|
32
|
+
this.validationInfo = [];
|
|
33
|
+
this.walletData = null;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
36
|
* Public method for parent to set preview result
|
|
@@ -157,7 +157,9 @@ var RestoreModal = class extends CoreLitElement {
|
|
|
157
157
|
label="Password"
|
|
158
158
|
placeholder="Enter decryption password"
|
|
159
159
|
.value=${this.password}
|
|
160
|
-
@on-input=${(e) =>
|
|
160
|
+
@on-input=${(e) => {
|
|
161
|
+
this.password = e.detail.value;
|
|
162
|
+
}}
|
|
161
163
|
@keyup=${(e) => e.key === "Enter" && canProceed && this.previewRestore()}
|
|
162
164
|
is-full-width
|
|
163
165
|
autofocus
|
|
@@ -570,15 +572,9 @@ __decorateClass([
|
|
|
570
572
|
__decorateClass([
|
|
571
573
|
state()
|
|
572
574
|
], RestoreModal.prototype, "isRestoring", 2);
|
|
573
|
-
__decorateClass([
|
|
574
|
-
state()
|
|
575
|
-
], RestoreModal.prototype, "walletData", 2);
|
|
576
575
|
__decorateClass([
|
|
577
576
|
state()
|
|
578
577
|
], RestoreModal.prototype, "validationWarnings", 2);
|
|
579
|
-
__decorateClass([
|
|
580
|
-
state()
|
|
581
|
-
], RestoreModal.prototype, "validationInfo", 2);
|
|
582
578
|
__decorateClass([
|
|
583
579
|
state()
|
|
584
580
|
], RestoreModal.prototype, "controllers", 2);
|
|
@@ -592,4 +588,4 @@ RestoreModal = __decorateClass([
|
|
|
592
588
|
export {
|
|
593
589
|
RestoreModal
|
|
594
590
|
};
|
|
595
|
-
//# sourceMappingURL=chunk-
|
|
591
|
+
//# sourceMappingURL=chunk-A5RRWZ7W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/restore-modal.ts"],"sourcesContent":["/**\n * Restore Modal - Lit Component\n *\n * Framework-agnostic restore modal for wallet data import.\n * Uses lukso-modal from @lukso/web-components for consistent UI.\n */\n\nimport type {\n BackupFile,\n PasskeyAuthProvider,\n WalletData,\n} from '@lukso/passkey-auth'\nimport { readBackupFile } from '@lukso/passkey-auth'\nimport { html, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { CoreLitElement } from './styles'\n\n// Import lukso web components\nimport '@lukso/web-components/dist/components/lukso-modal'\nimport '@lukso/web-components/dist/components/lukso-button'\nimport '@lukso/web-components/dist/components/lukso-input'\n\nenum Step {\n UPLOAD = 1,\n PASSWORD = 2,\n PREVIEW = 3,\n SUCCESS = 4,\n}\n\n@customElement('restore-modal')\nexport class RestoreModal extends CoreLitElement {\n // Public properties\n @property({ type: Boolean, reflect: true }) isOpen = false\n @property({ type: String }) theme: 'light' | 'dark' | 'auto' = 'auto'\n @property({ type: Object }) keyGenerator: PasskeyAuthProvider | null = null\n\n // Private state\n @state() private currentStep: Step = Step.UPLOAD\n @state() private selectedFile: File | null = null\n @state() private backupData: BackupFile | null = null\n @state() private fileError: string | null = null\n @state() private isDragging = false\n @state() private password = ''\n @state() private passwordErrors: string[] = []\n @state() private isRestoring = false\n @state() private validationWarnings: string[] = []\n @state() private controllers: Array<{\n address: string\n status: 'new' | 'existing'\n }> = []\n @state() private restoredAddresses: string[] = []\n validationInfo: string[] = []\n walletData: WalletData | null = null\n\n /**\n * Public method for parent to set preview result\n * Called after parent handles the 'preview' event\n */\n public setPreviewResult(options: {\n controllers: Array<{ address: string; status: 'new' | 'existing' }>\n warnings?: string[]\n }) {\n this.controllers = options.controllers\n this.validationWarnings = options.warnings || []\n }\n\n /**\n * Public method for parent to set validation result\n * Called after parent handles the 'validate' event\n */\n public setValidationResult(\n walletData: WalletData | null,\n options?: {\n error?: string\n warnings?: string[]\n info?: string[]\n }\n ) {\n this.isRestoring = false\n\n if (options?.error) {\n this.passwordErrors = [options.error]\n this.validationWarnings = []\n this.validationInfo = []\n } else if (walletData) {\n this.walletData = walletData\n this.validationWarnings = options?.warnings || []\n this.validationInfo = options?.info || []\n this.currentStep = Step.SUCCESS\n }\n }\n\n render() {\n return html`\n <lukso-modal\n ?is-open=${this.isOpen}\n size=\"medium\"\n @on-backdrop-click=${this.close}\n >\n <div class=\"p-6\">\n <!-- Header -->\n <h2 class=\"m-0 mb-6 text-neutral-20 dark:text-white heading-inter-21-semi-bold\">\n ${this.getStepTitle()}\n </h2>\n\n <!-- Step content -->\n ${this.renderStep()}\n </div>\n </lukso-modal>\n `\n }\n\n private renderStep() {\n switch (this.currentStep) {\n case Step.UPLOAD:\n return this.renderUploadStep()\n case Step.PASSWORD:\n return this.renderPasswordStep()\n case Step.PREVIEW:\n return this.renderPreviewStep()\n case Step.SUCCESS:\n return this.renderSuccessStep()\n default:\n return nothing\n }\n }\n\n private renderUploadStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n Select your backup file to restore your wallet data. Your backup file stays on your device and is never uploaded.\n </p>\n\n <div\n class=\"border-2 border-dashed rounded-xl p-10 text-center bg-neutral-95 dark:bg-neutral-80 transition-all cursor-pointer my-6 ${\n this.isDragging\n ? 'border-blue-60 bg-blue-95 dark:bg-blue-95/10'\n : this.fileError\n ? 'border-red-55 bg-red-95'\n : 'border-neutral-90 dark:border-neutral-70'\n }\"\n @drop=${this.handleDrop}\n @dragover=${this.handleDragOver}\n @dragleave=${this.handleDragLeave}\n @click=${this.triggerFileInput}\n >\n <div class=\"flex flex-col items-center gap-3\">\n <p class=\"m-0 text-neutral-10 dark:text-white heading-inter-16-semi-bold\">\n Drag and drop your backup file here\n </p>\n <p class=\"m-0 text-neutral-40 paragraph-inter-14-regular\">or</p>\n <lukso-button\n variant=\"primary\"\n @click=${(e: Event) => {\n e.stopPropagation()\n this.triggerFileInput()\n }}\n >\n Choose File\n </lukso-button>\n ${\n this.selectedFile\n ? html`\n <p class=\"mt-2 mb-0 text-green-54 paragraph-inter-14-semi-bold\">\n ${this.selectedFile.name}\n </p>\n `\n : nothing\n }\n ${\n this.fileError\n ? html`\n <p class=\"mt-2 mb-0 text-red-55 paragraph-inter-14-semi-bold\">\n ${this.fileError}\n </p>\n `\n : nothing\n }\n </div>\n </div>\n\n <input\n type=\"file\"\n class=\"hidden\"\n accept=\".json\"\n @change=${this.handleFileSelect}\n />\n\n <div class=\"flex justify-end mt-6\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n </div>\n `\n }\n\n private renderPasswordStep() {\n const canProceed = this.password && this.password.length > 0\n\n return html`\n <p class=\"mb-5 text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n This backup is encrypted. Enter the password to decrypt it.\n </p>\n\n <div>\n <lukso-input\n type=\"password\"\n label=\"Password\"\n placeholder=\"Enter decryption password\"\n .value=${this.password}\n @on-input=${(e: CustomEvent) => {\n this.password = e.detail.value\n }}\n @keyup=${(e: KeyboardEvent) => e.key === 'Enter' && canProceed && this.previewRestore()}\n is-full-width\n autofocus\n ></lukso-input>\n ${this.passwordErrors.map(\n (error) => html`\n <div class=\"mt-1 text-red-55 paragraph-inter-13-regular\">${error}</div>\n `\n )}\n </div>\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBack}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n ?disabled=${!canProceed || this.isRestoring}\n ?is-loading=${this.isRestoring}\n @click=${this.previewRestore}\n >\n Continue\n </lukso-button>\n </div>\n `\n }\n\n private renderPreviewStep() {\n return html`\n <p class=\"mb-6 text-neutral-40 dark:text-neutral-50 paragraph-inter-16-regular\">\n ${\n this.controllers.length > 0\n ? `Found ${this.controllers.length} controller${this.controllers.length === 1 ? '' : 's'} in backup.`\n : 'No controllers found in backup.'\n }\n </p>\n\n ${\n this.controllers.length > 0\n ? html`\n <div class=\"mb-6\">\n <div class=\"mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold\">\n Controllers:\n </div>\n ${this.controllers.map(\n (controller) => html`\n <div class=\"bg-neutral-95 dark:bg-neutral-80 border border-neutral-90 dark:border-neutral-70 rounded-lg px-3 py-2.5 mb-2\">\n <div class=\"flex items-center justify-between\">\n <div class=\"text-neutral-40 paragraph-inter-13-regular font-mono\">\n ${this.truncateAddress(controller.address)}\n </div>\n <div\n class=\"px-2 py-0.5 rounded text-xs font-semibold ${\n controller.status === 'new'\n ? 'bg-green-95 dark:bg-green-95/10 text-green-55 border border-green-55/30'\n : 'bg-neutral-90 dark:bg-neutral-70 text-neutral-50 border border-neutral-80 dark:border-neutral-60'\n }\"\n >\n ${controller.status === 'new' ? 'NEW' : 'EXISTS'}\n </div>\n </div>\n <div class=\"text-neutral-60 paragraph-inter-12-regular mt-1\">\n ${controller.address}\n </div>\n </div>\n `\n )}\n </div>\n `\n : nothing\n }\n\n ${\n this.validationWarnings.length > 0\n ? html`\n <div class=\"mb-4\">\n ${this.validationWarnings.map(\n (warning) => html`\n <div class=\"bg-yellow-95 dark:bg-yellow-95/10 border border-yellow-55 dark:border-yellow-55/50 rounded-lg px-3 py-2.5 mb-2 flex items-start gap-2\">\n <span class=\"text-yellow-55 dark:text-yellow-55 text-lg leading-none\">⚠️</span>\n <span class=\"text-yellow-55 dark:text-yellow-55 paragraph-inter-13-regular flex-1\">${warning}</span>\n </div>\n `\n )}\n </div>\n `\n : nothing\n }\n\n <div class=\"flex justify-between gap-3 mt-6\">\n <div class=\"flex gap-3\">\n <lukso-button variant=\"text\" @click=${this.close}>\n Cancel\n </lukso-button>\n <lukso-button variant=\"secondary\" @click=${this.goBackFromPreview}>\n Back\n </lukso-button>\n </div>\n <lukso-button\n variant=\"primary\"\n @click=${this.confirmRestore}\n >\n Confirm Restore\n </lukso-button>\n </div>\n `\n }\n\n private renderSuccessStep() {\n return html`\n <!-- Success header with icon -->\n <div class=\"text-center mb-6\">\n <div class=\"w-16 h-16 mx-auto mb-4 bg-green-95 dark:bg-green-95/20 rounded-full flex items-center justify-center\">\n <span class=\"text-2xl text-green-55\">✅</span>\n </div>\n <h3 class=\"text-neutral-20 dark:text-white heading-inter-18-semi-bold mb-2\">\n Wallet Restored Successfully!\n </h3>\n <p class=\"text-neutral-40 dark:text-neutral-50 paragraph-inter-14-regular\">\n ${\n this.restoredAddresses.length > 0\n ? `Imported ${this.restoredAddresses.length} address${this.restoredAddresses.length > 1 ? 'es' : ''} to your wallet.`\n : 'Your wallet has been restored successfully.'\n }\n </p>\n </div>\n \n <!-- Restored addresses -->\n ${\n this.restoredAddresses.length > 0\n ? html`\n <div class=\"mb-6\">\n <div class=\"mb-3 text-neutral-20 dark:text-neutral-90 paragraph-inter-14-semi-bold\">\n Restored Addresses:\n </div>\n ${this.restoredAddresses.map(\n (address: string) => html`\n <div class=\"bg-green-95 dark:bg-green-95/10 border border-green-60 dark:border-green-60/50 rounded-lg px-3 py-2.5 mb-2 flex items-center gap-2\">\n <span class=\"text-green-60 dark:text-green-45 text-sm\">✓</span>\n <span class=\"text-neutral-20 dark:text-white paragraph-inter-13-regular font-mono flex-1\">${this.truncateAddress(address)}</span>\n </div>\n `\n )}\n </div>\n `\n : ''\n }\n\n <!-- Action buttons for success -->\n <div class=\"flex justify-center mt-6\">\n <lukso-button variant=\"primary\" @click=${this.close}>\n OK\n </lukso-button>\n </div>\n `\n }\n\n private getStepTitle(): string {\n switch (this.currentStep) {\n case Step.UPLOAD:\n return 'Restore Wallet'\n case Step.PASSWORD:\n return 'Enter Password'\n case Step.PREVIEW:\n return 'Review Changes'\n case Step.SUCCESS:\n return 'Restore Complete'\n default:\n return 'Restore Wallet'\n }\n }\n\n private triggerFileInput() {\n const input = this.shadowRoot?.querySelector(\n 'input[type=\"file\"]'\n ) as HTMLInputElement\n if (input) {\n input.click()\n }\n }\n\n private async handleFileSelect(e: Event) {\n const input = e.target as HTMLInputElement\n const file = input.files?.[0]\n if (file) {\n await this.handleFile(file)\n }\n }\n\n private handleDragOver(e: DragEvent) {\n e.preventDefault()\n this.isDragging = true\n }\n\n private handleDragLeave() {\n this.isDragging = false\n }\n\n private async handleDrop(e: DragEvent) {\n e.preventDefault()\n this.isDragging = false\n\n const file = e.dataTransfer?.files?.[0]\n if (file) {\n await this.handleFile(file)\n }\n }\n\n private async handleFile(file: File) {\n this.fileError = null\n\n if (!file.name.endsWith('.json')) {\n this.fileError = 'Please select a valid JSON backup file'\n return\n }\n\n try {\n // Use passkey-auth readBackupFile function\n const backup = await readBackupFile(file)\n\n this.selectedFile = file\n this.backupData = backup\n\n // Check if encrypted (handle both current and legacy formats)\n const isEncrypted = backup.encryptedSecrets // Legacy: always encrypted if encryptedSecrets exists\n ? true\n : backup.secrets?.encrypted // Current: check encrypted flag\n\n if (isEncrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n // Unencrypted backup - preview directly\n await this.previewRestore()\n }\n } catch (error) {\n this.fileError =\n error instanceof Error ? error.message : 'Failed to read backup file'\n console.error('Failed to read backup file:', error)\n }\n }\n\n private async previewRestore() {\n if (!this.backupData) return\n\n this.isRestoring = true\n this.passwordErrors = []\n\n try {\n // First, we need to decrypt the backup if it's encrypted\n let decryptedBackup = this.backupData\n\n if (\n this.backupData.encryptedSecrets ||\n this.backupData.secrets?.encrypted\n ) {\n // PREVIEW ONLY: Use verify to check password and get preview data (don't actually import yet)\n if (!this.keyGenerator) {\n throw new Error('KeyGenerator not available')\n }\n\n // Use verifyBackup for preview - this validates password and returns public data only\n const verifiedBackup = await this.keyGenerator.verifyBackup(\n this.backupData,\n this.password\n )\n\n // Use the verified backup data (which has filtered public data)\n decryptedBackup = verifiedBackup\n } else {\n // Unencrypted - use data directly for preview (no import needed)\n decryptedBackup = this.backupData\n }\n\n // Extract all controller addresses from the backup\n const backupControllers = new Set<string>()\n\n // Get addresses from the secrets (the actual private keys we're restoring)\n const secretsData = (decryptedBackup.secrets?.data as any[]) || []\n for (const secret of secretsData) {\n if (secret.address) {\n backupControllers.add(secret.address.toLowerCase())\n }\n }\n\n // Also get controllers from account metadata (V2 format with networks)\n for (const account of decryptedBackup.accounts || []) {\n // V2 format: accounts have networks array with controllers\n if (account.networks) {\n for (const network of account.networks) {\n for (const controller of network.controllers || []) {\n if (controller.address) {\n backupControllers.add(controller.address.toLowerCase())\n }\n }\n }\n }\n }\n\n // Also get controllers from LSP23CrossChainDeployment if present\n const lsp23Deployments =\n (decryptedBackup as any).LSP23CrossChainDeployment || []\n for (const deployment of lsp23Deployments) {\n for (const controller of deployment.initialControllers || []) {\n if (controller.address) {\n backupControllers.add(controller.address.toLowerCase())\n }\n }\n }\n\n console.log(\n '🔍 [RestoreModal] Found controller addresses:',\n Array.from(backupControllers)\n )\n\n // Extract addresses from the decrypted backup for preview\n for (const secret of secretsData) {\n if (secret.address) {\n backupControllers.add(secret.address.toLowerCase())\n }\n }\n\n // For now, mark all addresses as 'new' - could enhance this later\n this.controllers = Array.from(backupControllers).map((address) => ({\n address,\n status: 'new' as const,\n }))\n\n this.currentStep = Step.PREVIEW\n } catch (error) {\n console.error('Failed to preview restore:', error)\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to preview restore'\n\n // Check for password-specific errors\n if (errorMessage.toLowerCase().includes('password')) {\n this.passwordErrors = ['Incorrect password. Please try again.']\n } else {\n // For non-password errors, set as file error to show in upload step\n this.fileError = errorMessage\n this.currentStep = Step.UPLOAD\n // Clear the file selection so user can try again\n this.selectedFile = null\n this.backupData = null\n // Clear the file input\n const input = this.shadowRoot?.querySelector(\n 'input[type=\"file\"]'\n ) as HTMLInputElement\n if (input) {\n input.value = ''\n }\n }\n } finally {\n this.isRestoring = false\n }\n }\n\n private async confirmRestore() {\n if (!this.backupData || !this.keyGenerator) {\n console.error(\n '❌ [RestoreModal] Missing backup data or keyGenerator for restore'\n )\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: { error: 'Missing backup data or keyGenerator' },\n bubbles: true,\n composed: true,\n })\n )\n return\n }\n\n try {\n this.isRestoring = true\n console.log('🔄 [RestoreModal] Starting secure restoration process...')\n\n // ✅ SECURE: Use keyGenerator.restoreFromBackup internally\n const result = await this.keyGenerator.restoreFromBackup(\n this.backupData,\n this.password\n )\n\n if (result.success) {\n console.log('✅ [RestoreModal] Restore successful:', result.addresses)\n\n // Store restored addresses for display on success screen\n this.restoredAddresses = result.addresses\n\n // Emit success event (only public addresses, no sensitive data)\n this.dispatchEvent(\n new CustomEvent('success', {\n detail: { addresses: result.addresses },\n bubbles: true,\n composed: true,\n })\n )\n\n // Move to success step\n this.currentStep = Step.SUCCESS\n } else {\n console.error('❌ [RestoreModal] Restore failed')\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: {\n error:\n 'Restore failed. Please check the backup file and password.',\n },\n bubbles: true,\n composed: true,\n })\n )\n }\n } catch (error) {\n console.error('❌ [RestoreModal] Restore error:', error)\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error'\n\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: { error: errorMessage },\n bubbles: true,\n composed: true,\n })\n )\n } finally {\n this.isRestoring = false\n }\n }\n\n private goBack() {\n if (this.currentStep === Step.PASSWORD) {\n this.currentStep = Step.UPLOAD\n this.password = ''\n this.passwordErrors = []\n }\n }\n\n private goBackFromPreview() {\n // Go back to password step (or upload if unencrypted)\n const isEncrypted = this.backupData?.encryptedSecrets\n ? true\n : this.backupData?.secrets?.encrypted\n\n if (isEncrypted) {\n this.currentStep = Step.PASSWORD\n } else {\n this.currentStep = Step.UPLOAD\n }\n // Clear preview data\n this.controllers = []\n this.validationWarnings = []\n }\n\n private close() {\n this.isOpen = false\n this.dispatchEvent(\n new CustomEvent('close', { bubbles: true, composed: true })\n )\n\n // Reset state after animation\n setTimeout(() => {\n this.currentStep = Step.UPLOAD\n this.selectedFile = null\n this.backupData = null\n this.fileError = null\n this.isDragging = false\n this.password = ''\n this.passwordErrors = []\n this.isRestoring = false\n this.walletData = null\n this.restoredAddresses = []\n this.controllers = []\n this.validationWarnings = []\n }, 300)\n }\n\n private truncateAddress(address: string): string {\n if (!address || address.length < 10) return address\n return `${address.slice(0, 6)}...${address.slice(-4)}`\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'restore-modal': RestoreModal\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -26,11 +26,11 @@ var RestoreModal = class extends _chunkXOKG3KILcjs.CoreLitElement {
|
|
|
26
26
|
this.password = "";
|
|
27
27
|
this.passwordErrors = [];
|
|
28
28
|
this.isRestoring = false;
|
|
29
|
-
this.walletData = null;
|
|
30
29
|
this.validationWarnings = [];
|
|
31
|
-
this.validationInfo = [];
|
|
32
30
|
this.controllers = [];
|
|
33
31
|
this.restoredAddresses = [];
|
|
32
|
+
this.validationInfo = [];
|
|
33
|
+
this.walletData = null;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
36
|
* Public method for parent to set preview result
|
|
@@ -157,7 +157,9 @@ var RestoreModal = class extends _chunkXOKG3KILcjs.CoreLitElement {
|
|
|
157
157
|
label="Password"
|
|
158
158
|
placeholder="Enter decryption password"
|
|
159
159
|
.value=${this.password}
|
|
160
|
-
@on-input=${(e) =>
|
|
160
|
+
@on-input=${(e) => {
|
|
161
|
+
this.password = e.detail.value;
|
|
162
|
+
}}
|
|
161
163
|
@keyup=${(e) => e.key === "Enter" && canProceed && this.previewRestore()}
|
|
162
164
|
is-full-width
|
|
163
165
|
autofocus
|
|
@@ -570,15 +572,9 @@ _chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
|
570
572
|
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
571
573
|
_decoratorsjs.state.call(void 0, )
|
|
572
574
|
], RestoreModal.prototype, "isRestoring", 2);
|
|
573
|
-
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
574
|
-
_decoratorsjs.state.call(void 0, )
|
|
575
|
-
], RestoreModal.prototype, "walletData", 2);
|
|
576
575
|
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
577
576
|
_decoratorsjs.state.call(void 0, )
|
|
578
577
|
], RestoreModal.prototype, "validationWarnings", 2);
|
|
579
|
-
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
580
|
-
_decoratorsjs.state.call(void 0, )
|
|
581
|
-
], RestoreModal.prototype, "validationInfo", 2);
|
|
582
578
|
_chunkZBDE64SDcjs.__decorateClass.call(void 0, [
|
|
583
579
|
_decoratorsjs.state.call(void 0, )
|
|
584
580
|
], RestoreModal.prototype, "controllers", 2);
|
|
@@ -592,4 +588,4 @@ RestoreModal = exports.RestoreModal = _chunkZBDE64SDcjs.__decorateClass.call(voi
|
|
|
592
588
|
|
|
593
589
|
|
|
594
590
|
exports.RestoreModal = RestoreModal;
|
|
595
|
-
//# sourceMappingURL=chunk-
|
|
591
|
+
//# sourceMappingURL=chunk-CKVXLOXK.cjs.map
|