{"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"]}