{"version":3,"file":"virtual_main.js","sources":["theme-1/virtual:init-settings","theme-1/virtual:theme","theme-1/discourse/api-initializers/theme-initializer.gjs","theme-1/virtual:main"],"sourcesContent":["import { registerSettings } from \"discourse/lib/theme-settings-store\";\n\nregisterSettings(1, {});\n","import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(1);\n\nexport function themePrefix(key) {\n  return `theme_translations.1.${key}`;\n}\n","import { apiInitializer } from \"discourse/lib/api\";\n\nconst CREATOR_HUB_URL = \"https://create.overdare.com\";\n\n/* ==============================\n * 공통 유틸\n * ============================== */\nfunction getQueryParams() {\n  const params = new URLSearchParams(window.location.search);\n  const queryParams = {};\n  for (const [key, value] of params.entries()) queryParams[key] = value;\n  return queryParams;\n}\n\nfunction getActionItems() {\n  return {\n    dashboard: document.getElementById(\"action-item-dashboard\"),\n    support: document.getElementById(\"action-item-support\"),\n    profile: document.getElementById(\"action-item-profile\"),\n  };\n}\n\nfunction hideAllActionItems() {\n  const items = getActionItems();\n  Object.values(items).forEach((el) => {\n    if (el && !el.classList.contains(\"hidden\")) {\n      el.classList.add(\"hidden\");\n      el.classList.remove(\"dashboard\", \"support\", \"profile\");\n      \n      // ✅ inline positioning reset (선택)\n      el.style.top = \"\";\n      el.style.left = \"\";\n    }\n  });\n}\n\nfunction showActionItem(tab) {\n  const items = getActionItems();\n  hideAllActionItems();\n  const target = items[tab];\n  if (target) {\n    target.classList.remove(\"hidden\");\n    target.classList.add(tab);\n    \n    // ✅ 열릴 때마다 위치 재계산 (Dashboard/Support 둘 다 적용)\n    positionActionItemUnderHeader(tab);\n  }\n}\n\n\nfunction getDesktopHeader() {\n  return document.querySelector(\".header.desktop\");\n}\n\nfunction getNavItemByTab(tab) {\n  return document.querySelector(`.header.desktop .nav .nav-item[data-tab=\"${tab}\"]`);\n}\n\nfunction positionActionItemUnderHeader(tab) {\n  const header = getDesktopHeader();\n  const menu = getActionItems()[tab];\n  const trigger = getNavItemByTab(tab);\n\n  if (!header || !menu || !trigger) return;\n\n  const headerRect = header.getBoundingClientRect();\n  const triggerRect = trigger.getBoundingClientRect();\n\n  // ✅ 헤더 바로 아래\n  menu.style.top = `${headerRect.bottom}px`;\n\n  // ✅ 버튼 기준으로 가로 위치 (필요하면 center 정렬로 바꿀 수 있음)\n  menu.style.left = `${triggerRect.left}px`;\n}\n\n/* ==============================\n * Sign-In Spinner\n * ============================== */\nfunction showSignInSpinner() {\n  const signInButton = document.getElementsByClassName(\"button signin-button\")[0];\n  if (!signInButton) return;\n  signInButton.classList.add(\"spinner-button\");\n  if (!signInButton.dataset.originalHtml) {\n    signInButton.dataset.originalHtml = signInButton.innerHTML;\n  }\n  signInButton.innerHTML = `\n    <svg class=\"sign-in-spinner\" width=\"24\" height=\"24\" viewBox=\"0 0 50 50\">\n      <circle class=\"path\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" stroke-width=\"5\"></circle>\n    </svg>`;\n  signInButton.setAttribute(\"data-disabled\", \"true\");\n  signInButton.setAttribute(\"aria-disabled\", \"true\");\n}\n\nfunction hideSignInSpinner() {\n  const signInButton = document.getElementsByClassName(\"button signin-button\")[0];\n  if (!signInButton) return;\n  signInButton.classList.remove(\"spinner-button\");\n  if (signInButton.dataset.originalHtml) {\n    signInButton.innerHTML = signInButton.dataset.originalHtml;\n    delete signInButton.dataset.originalHtml;\n  }\n  signInButton.setAttribute(\"data-disabled\", \"false\");\n  signInButton.removeAttribute(\"aria-disabled\");\n}\n\n/* ==============================\n * Sign-In / Logout\n * ============================== */\nfunction handleSignIn() {\n  showSignInSpinner();\n  try {\n    const loginButton = document.querySelector(\".login-button\");\n    if (loginButton) loginButton.click();\n    else {\n      console.error(\"Login button not found!\");\n      hideSignInSpinner();\n    }\n  } catch (err) {\n    console.error(err);\n    hideSignInSpinner();\n  }\n}\n\nfunction handleLogout() {\n  document.getElementById(\"toggle-current-user\")?.click();\n\n  const profileObserver = new MutationObserver((_, obs) => {\n    const profileButton = document.getElementById(\"user-menu-button-profile\");\n    if (profileButton) {\n      profileButton.click();\n      obs.disconnect();\n\n      const logoutObserver = new MutationObserver((__, obs2) => {\n        const logoutButton = document.querySelector(\"li.logout button\");\n        if (logoutButton) {\n          logoutButton.click();\n          obs2.disconnect();\n        }\n      });\n      logoutObserver.observe(document.body, { childList: true, subtree: true });\n    }\n  });\n  profileObserver.observe(document.body, { childList: true, subtree: true });\n}\n\n/* ==============================\n * Wallet / Toast\n * ============================== */\nfunction shortenAddress(address) {\n  if (!address || address.length < 10) return address;\n  return `${address.slice(0, 5)}...${address.slice(-4)}`;\n}\n\nfunction addWalletAddress(walletAddress) {\n  const target = document.getElementById(\"my-wallet\");\n  if (!target) return;\n  const container = document.createElement(\"div\");\n  container.innerHTML = `\n    <div class=\"action-menu\" style=\"width: calc(100% - 16px); padding: 6px; margin: 2px 0; border-radius: 8px; justify-content: flex-start; align-items: center; display: inline-flex\">\n      <div style=\"flex:1 1 0; justify-content:flex-start; align-items:center; gap:8px; display:flex\">\n        <div data-status=\"approved\" data-type=\"dot\" data-variant=\"filled\" style=\"padding:4px 8px; background:#001840; border-radius:2px; outline:1px rgba(120,135,156,.40) solid; outline-offset:-1px; display:flex; align-items:center; gap:4px;\">\n          <div style=\"width:6px; height:6px; background:#64AFFF; border-radius:9999px\"></div>\n          <div style=\"color:#3191FF; font-size:12px; line-height:16px;\">Primary</div>\n        </div>\n        <div style=\"flex:1 1 0; color:#DCE2E8; font-size:12px; line-height:16px;\">${shortenAddress(walletAddress)}</div>\n        <div id=\"copy-wallet-address\" data-size=\"xsmall\" data-style=\"ghost\" style=\"width:32px; height:32px; border-radius:4px; display:flex; align-items:center; justify-content:center;\">\n          <svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='none'><path d='M15.25 2.5H8.08333C6.8425 2.5 5.83333 3.50917 5.83333 4.75V11.9167C5.83333 13.1575 6.8425 14.1667 8.08333 14.1667H15.25C16.4908 14.1667 17.5 13.1575 17.5 11.9167V4.75C17.5 3.50917 16.4908 2.5 15.25 2.5ZM16.3333 11.9167C16.3333 12.5142 15.8475 13 15.25 13H8.08333C7.48583 13 7 12.5142 7 11.9167V4.75C7 4.1525 7.48583 3.66667 8.08333 3.66667H15.25C15.8475 3.66667 16.3333 4.1525 16.3333 4.75V11.9167ZM13 15H14.1667V15.25C14.1667 16.4908 13.1575 17.5 11.9167 17.5H4.75C3.50917 17.5 2.5 16.4908 2.5 15.25V8.08333C2.5 6.8425 3.50917 5.83333 4.75 5.83333H5V7H4.75C4.1525 7 3.66667 7.48583 3.66667 8.08333V15.25C3.66667 15.8475 4.1525 16.3333 4.75 16.3333H11.9167C12.5142 16.3333 13 15.8475 13 15.25V15Z' fill='#6f7883'/></svg>\n        </div>\n      </div>\n    </div>`;\n  const setup = document.getElementById(\"set-up-now\");\n  if (setup?.style) setup.style.display = \"none\";\n  const walletDiv = container.firstElementChild;\n  if (target.nextSibling) target.parentNode.insertBefore(walletDiv, target.nextSibling);\n  else target.parentNode.appendChild(walletDiv);\n\n  setTimeout(() => {\n    const copyBtn = document.getElementById(\"copy-wallet-address\");\n    if (!copyBtn) return;\n    copyBtn.addEventListener(\"click\", async () => {\n      try {\n        await navigator.clipboard.writeText(walletAddress);\n        showToast(\"Wallet address copied!\");\n        const profile = document.getElementById(\"action-item-profile\");\n        if (profile) profile.classList.add(\"hidden\");\n      } catch (err) {\n        showToast(\"Failed to copy address.\");\n        console.error(\"Copy failed:\", err);\n      }\n    });\n  }, 0);\n}\n\nfunction showToast(message) {\n  const oldToast = document.getElementById(\"custom-toast\");\n  if (oldToast) oldToast.remove();\n  const toastContainer = document.createElement(\"div\");\n  toastContainer.id = \"custom-toast\";\n  toastContainer.style.position = \"fixed\";\n  toastContainer.style.top = \"16px\";\n  toastContainer.style.left = \"50%\";\n  toastContainer.style.transform = \"translateX(-50%)\";\n  toastContainer.style.zIndex = \"9999\";\n  toastContainer.innerHTML = `\n    <div data-contents=\"minimum\" data-device=\"PC\" data-showbutton=\"true\" data-showclose=\"false\" data-showtitle=\"true\" data-status=\"success\"\n         style=\"width:100%; max-width:400px; padding:14px 20px 14px 18px; background:rgba(255,255,255,0.88); border-radius:8px; backdrop-filter:blur(8px); display:inline-flex; box-shadow:0 4px 10px rgba(0,0,0,0.1);\">\n      <div style=\"padding:4px 0; display:flex; align-items:center; gap:10px;\">\n        <div style=\"width:24px; height:24px;\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.80078 11.9998C2.80078 6.91821 6.91918 2.7998 12.0008 2.7998C17.0824 2.7998 21.2008 6.91821 21.2008 11.9998C21.2008 17.0814 17.0824 21.1998 12.0008 21.1998C6.91918 21.1998 2.80078 17.0814 2.80078 11.9998ZM16.9624 9.76549C17.2748 9.45307 17.2748 8.94654 16.9624 8.63412C16.65 8.3217 16.1434 8.3217 15.831 8.63412L10.7937 13.6715L8.16734 11.0731C7.85325 10.7624 7.34672 10.7651 7.03598 11.0792C6.72524 11.3932 6.72795 11.8998 7.04204 12.2105L10.234 15.3685C10.5469 15.6781 11.0511 15.6767 11.3624 15.3655L16.9624 9.76549Z\" fill=\"#31C356\"/></svg>\n        </div>\n        <div style=\"display:flex; flex-direction:column;\">\n          <div style=\"color:#111316; font-size:16px; line-height:24px;\">${message}</div>\n        </div>\n      </div>\n    </div>`;\n  document.body.appendChild(toastContainer);\n  setTimeout(() => toastContainer.remove(), 3000);\n}\n\n/* ==============================\n * 로그인 배너\n * ============================== */\nfunction showOvdrAlertBanner() {\n  if (document.getElementById(\"ovdr-alert-banner\")) return;\n  const div = document.createElement(\"div\");\n  div.id = \"ovdr-alert-banner\";\n  div.innerHTML = `\n    <div style=\"display:flex; align-items:flex-start; gap:12px;\">\n      <span class=\"ovdr-alert-icon\">\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M12.0001 2.6001C6.8171 2.6001 2.6001 6.8171 2.6001 12.0001C2.6001 17.1831 6.8171 21.4001 12.0001 21.4001C17.1831 21.4001 21.4001 17.1831 21.4001 12.0001C21.4001 6.8171 17.1831 2.6001 12.0001 2.6001ZM14.1601 17.5001H10.2941C9.9071 17.5001 9.5941 17.1871 9.5941 16.8001C9.5941 16.4131 9.9071 16.1001 10.2941 16.1001H11.5941V11.9001H10.2941C9.9071 11.9001 9.5941 11.5871 9.5941 11.2001C9.5941 10.8131 9.9071 10.5001 10.2941 10.5001H12.2941C12.6811 10.5001 12.9941 10.8131 12.9941 11.2001V16.1001H14.1601C14.5471 16.1001 14.8601 16.4131 14.8601 16.8001C14.8601 17.1871 14.5471 17.5001 14.1601 17.5001ZM12.0001 6.5001C12.8281 6.5001 13.5001 7.1721 13.5001 8.0001C13.5001 8.8281 12.8281 9.5001 12.0001 9.5001C11.1721 9.5001 10.5001 8.8281 10.5001 8.0001C10.5001 7.1721 11.1721 6.5001 12.0001 6.5001Z\" fill=\"#3191FF\"/></svg>\n      </span>\n      <div style=\"flex:1 1 0;\">\n        <div class=\"ovdr-alert-title\">Sign in to OVERDARE Forum</div>\n        <div class=\"ovdr-alert-desc\">Share feedback with your Forum account</div>\n      </div>\n    </div>\n    <div class=\"ovdr-alert-btns\" style=\"margin-top:8px;\">\n      <button class=\"ovdr-btn ghost\" id=\"ovdr-alert-keep-logout\">Keep me logged out</button>\n      <button class=\"ovdr-btn stroke\" id=\"ovdr-alert-signin\">Sign In</button>\n    </div>`;\n  document.body.appendChild(div);\n  document.getElementById(\"ovdr-alert-keep-logout\").onclick = () => div.remove();\n  document.getElementById(\"ovdr-alert-signin\").onclick = () => {\n    const signInButton = document.querySelector(\".button.signin-button\");\n    if (signInButton) signInButton.click();\n    div.remove();\n  };\n}\n\n/* ==============================\n * 모바일 헤더/사이드바 (hidden 토글)\n * ============================== */\nfunction initMobileHeaderOnce() {\n  if (document.documentElement.dataset.mobileHeaderInit === \"1\") return;\n  document.documentElement.dataset.mobileHeaderInit = \"1\";\n\n  const hamburger = document.getElementById(\"hamburger-icon\");\n  const closeX = document.getElementById(\"close-x-icon\");\n  const sidebar = document.getElementById(\"mobile-sidebar-section\");\n  const sidebarIcon = document.getElementById(\"discourse-sidebar-icon\"); // 있을 수도/없을 수도\n\n  if (!hamburger || !closeX || !sidebar) return;\n\n  // 초기 상태\n  closeX.classList.add(\"hidden\");\n  sidebar.classList.add(\"hidden\");\n\n  const openMenu = () => {\n    hamburger.classList.add(\"hidden\");\n    sidebarIcon?.classList.add(\"hidden\");\n    closeX.classList.remove(\"hidden\");\n    sidebar.classList.remove(\"hidden\");\n  };\n  const closeMenu = () => {\n    hamburger.classList.remove(\"hidden\");\n    sidebarIcon?.classList.remove(\"hidden\");\n    closeX.classList.add(\"hidden\");\n    sidebar.classList.add(\"hidden\");\n  };\n\n  // 열고/닫기\n  hamburger.addEventListener(\"click\", (e) => {\n    e.stopPropagation();\n    openMenu();\n  });\n  closeX.addEventListener(\"click\", (e) => {\n    e.stopPropagation();\n    closeMenu();\n  });\n\n  // 바깥 클릭 시 닫기\n  document.addEventListener(\"click\", (e) => {\n    const insideSidebar = sidebar.contains(e.target);\n    const insideHamburger = hamburger.contains(e.target);\n    const insideClose = closeX.contains(e.target);\n    if (!insideSidebar && !insideHamburger && !insideClose) {\n      closeMenu();\n    }\n  });\n\n  // 모바일 메뉴 라우팅 (각 li 클릭)\n  const mobileMenuLinks = {\n    \"My Contents\": `${CREATOR_HUB_URL}/creator/contents`,\n    Analytics: `${CREATOR_HUB_URL}/creator/analytics`,\n    Payout: `${CREATOR_HUB_URL}/creator/payout`,\n    \"Contact Us\": `${CREATOR_HUB_URL}/support/inquiry`,\n    \"Service Guide\": \"https://docs.overdare.com\",\n    FAQ: `${CREATOR_HUB_URL}/support/faq`,\n    Forum: \"https://forum.overdare.com\",\n    \"Asset Store\": `${CREATOR_HUB_URL}/asset`,\n  };\n\n  sidebar.querySelectorAll(\"li\").forEach((li) => {\n    li.style.cursor = \"pointer\";\n    li.addEventListener(\"click\", () => {\n      const label = (li.textContent || \"\").trim();\n      const target = mobileMenuLinks[label];\n      if (target) {\n        closeMenu(); // 이동 전에 닫아주기\n        window.open(target, \"_self\");\n      }\n    });\n  });\n\n  // 모바일 사이드바의 Sign In 버튼\n  const mobileSignInBtn = sidebar.querySelector(\".sign-in-button button\");\n  if (mobileSignInBtn) {\n    mobileSignInBtn.addEventListener(\"click\", (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      closeMenu(); // 먼저 닫고\n      handleSignIn(); // 로그인 트리거\n    });\n  }\n\n  // 모바일 Sign Out 버튼은 로그인 후 동적으로 들어오므로, 위임으로 닫기+로그아웃 처리\n  sidebar.addEventListener(\"click\", (e) => {\n    const signOutBtn = e.target.closest(\"#sign-out, .sign-out, .sign-out-mobile\");\n    if (signOutBtn) {\n      e.preventDefault();\n      e.stopPropagation();\n      closeMenu();\n      handleLogout();\n    }\n  });\n}\n\n// 이미 로드되었으면 즉시, 아니면 DOMContentLoaded\nfunction onReady(fn) {\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", fn, { once: true });\n  } else fn();\n}\n\n/* ==============================\n * Discourse 초기화\n * ============================== */\nexport default apiInitializer(async (api) => {\n  onReady(initMobileHeaderOnce);\n  api.onPageChange(() => {\n    delete document.documentElement.dataset.mobileHeaderInit;\n    initMobileHeaderOnce();\n  });\n  \n  // body 전체에 클릭 이벤트 리스너를 한 번만 등록하여 처리 (이벤트 위임)\n  document.body.addEventListener('click', async (e) => {\n    // 1. 클릭된 요소가 유저 프로필 아이콘(또는 링크)인지 확인\n    const userCardElement = e.target.closest('a[data-user-card]');\n\n    // 프로필 링크가 아니면 아무 작업도 하지 않음\n    if (!userCardElement) return;\n\n    // Discourse의 기본 동작(프로필 카드 표시)을 막음\n    e.preventDefault();\n    e.stopPropagation();\n\n    // 2. data-user-card 속성에서 username 값 추출\n    const username = userCardElement.dataset.userCard;\n    if (!username) {\n      console.error(\"data-user-card 속성에서 유저 이름을 찾을 수 없습니다.\");\n      return;\n    }\n\n    try {\n      // 3. API를 호출하여 유저 정보 요청\n      const response = await fetch(`https://create.overdare.com/backend/account/accounts/id-by-username?username=${username}`);\n      const data = await response.json();\n      const accountId = await data.accountId;\n      \n      if (!accountId) {\n        throw new Error(`유저 정보 요청 실패`);\n      }\n\n      if (accountId) {\n        window.location.href = `https://create.overdare.com/profile/${accountId}`;\n      } else {\n        console.warn(`'${username}' 유저의 프로필 필드(ID: 1)를 찾을 수 없어 리디렉션할 수 없습니다.`);\n      }\n    } catch (error) {\n      console.error(\"프로필 클릭 처리 중 오류 발생:\", error);\n    }\n  }, true); // 캡처링 단계에서 이벤트를 처리하여 다른 핸들러보다 먼저 실행되도록 함\n\n  const currentUser = api.getCurrentUser();\n  const queryParams = getQueryParams();\n\n  async function fetchUserProfile(username) {\n    try {\n      const res = await fetch(`/u/${username}.json`);\n      if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`);\n      const data = await res.json();\n      const walletAddress = data?.user?.user_fields?.[1];\n      if (walletAddress && walletAddress.trim()) addWalletAddress(walletAddress);\n      return data?.user;\n    } catch (error) {\n      console.error(\"Failed to fetch user data:\", error);\n      return null;\n    }\n  }\n\n  if (!currentUser) {\n    console.log(\"No user is logged in.\");\n    showOvdrAlertBanner();\n    hideSignInSpinner();\n    return;\n  }\n\n  const user = await fetchUserProfile(currentUser.username);\n  hideSignInSpinner();\n\n  if (user) {\n    // 데스크톱 Sign In 숨김\n    const signInButton = document.getElementsByClassName(\"button signin-button\")[0];\n    if (signInButton) signInButton.style.display = \"none\";\n    \n    // ➜ 모바일 사이드바 Sign In 버튼도 숨김\n  const mobileSignInBox = document.querySelector('#mobile-sidebar-section .sign-in-button');\n  if (mobileSignInBox) mobileSignInBox.style.display = 'none';\n\n    // 아바타 썸네일\n    const avatarUrl = user.avatar_template.replace(\"{size}\", \"64\");\n    const img = document.createElement(\"img\");\n    img.src = avatarUrl;\n    img.alt = `${user.username}'s avatar`;\n    img.style.width = \"46px\";\n    img.style.height = \"46px\";\n    img.style.borderRadius = \"50%\";\n    img.style.objectFit = \"cover\";\n\n    const headerRightSection = document.querySelector('div[data-login=\"true\"]');\n    if (headerRightSection) {\n      const avatarWrapper = document.createElement(\"div\");\n      avatarWrapper.setAttribute(\"data-tab\", \"profile\");\n      avatarWrapper.classList.add(\"nav-item\", \"profile\", \"thumbnail\");\n      avatarWrapper.appendChild(img);\n      headerRightSection.appendChild(avatarWrapper);\n\n      avatarWrapper.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n        e.stopPropagation();\n        showActionItem(\"profile\"); // 내부에서 hideAllActionItems() 호출\n      });\n    }\n\n    // 데스크톱 Sign Out\n    const logoutButton = document.getElementById(\"sign-out\");\n    if (logoutButton) {\n      logoutButton.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n        e.stopPropagation();\n        handleLogout();\n      });\n    }\n\n    // 모바일 사이드바 하단 아바타/사인아웃 배치 (이미지 복제)\n    const signOutBtn = document.createElement(\"button\");\n    signOutBtn.textContent = \"Sign Out\";\n    signOutBtn.className = \"sign-out-mobile\";\n    signOutBtn.addEventListener(\"click\", (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      handleLogout();\n    });\n\n    const mobileAvatarWrapper = document.createElement(\"div\");\n    mobileAvatarWrapper.style.display = \"flex\";\n    mobileAvatarWrapper.style.justifyContent = \"space-between\";\n    mobileAvatarWrapper.style.bottom = 0;\n    mobileAvatarWrapper.style.position = \"relative\";\n    mobileAvatarWrapper.style.width = \"100%\";\n\n    const mobileImg = img.cloneNode(true);\n    mobileAvatarWrapper.appendChild(mobileImg);\n    mobileAvatarWrapper.appendChild(signOutBtn);\n\n    const sidebar = document.getElementById(\"mobile-sidebar-section\");\n    if (sidebar) sidebar.appendChild(mobileAvatarWrapper);\n  }\n});\n\n/* ==============================\n * 전역 이벤트 위임 (데스크톱/공용)\n * ============================== */\n\n// 데스크톱 Sign In\ndocument.addEventListener(\"click\", (e) => {\n  const desktopBtn = e.target.closest(\".button.signin-button\");\n  if (desktopBtn) {\n    e.preventDefault();\n    e.stopPropagation();\n    handleSignIn();\n  }\n});\n\n// GNB: Dashboard/Support 패널 열기\ndocument.addEventListener(\"click\", (e) => {\n  const item = e.target.closest(\".header.desktop .nav .nav-item\");\n  if (!item) return;\n  const tab = item.getAttribute(\"data-tab\");\n  if (!tab) return; // Forum/외부 링크는 그대로\n  e.preventDefault();\n  e.stopPropagation();\n  showActionItem(tab);\n});\n\n// 헤더/패널 밖 클릭 시 닫기\ndocument.addEventListener(\"click\", (e) => {\n  const headerDesktop = document.querySelector(\".header.desktop\");\n  const items = getActionItems();\n  const insideHeader = headerDesktop?.contains(e.target);\n  const insideAnyAction = Object.values(items).some((el) => el && el.contains(e.target));\n  if (!insideHeader && !insideAnyAction) hideAllActionItems();\n});\n\n// ActionItem 메뉴 이동\ndocument.addEventListener(\"click\", (e) => {\n  const menu = e.target.closest(\".action-item .action-menu\");\n  if (!menu) return;\n  const route = menu.getAttribute(\"data-route\");\n  if (!route) return;\n  e.preventDefault();\n  e.stopPropagation();\n  window.location.href = route;\n});\n\ndocument.addEventListener(\"keydown\", (e) => {\n  const active = document.activeElement;\n  const menu = active?.closest?.(\".action-item .action-menu\");\n  if (!menu) return;\n  if (e.key === \"Enter\" || e.key === \" \") {\n    const route = menu.getAttribute(\"data-route\");\n    if (!route) return;\n    e.preventDefault();\n    e.stopPropagation();\n    window.location.href = route;\n  }\n});\n\n/* ==============================\n * DOMContentLoaded (보조)\n * ============================== */\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  try {\n    hideAllActionItems();\n\n    const signInButton = document.getElementsByClassName(\"button signin-button\")[0];\n    if (signInButton) signInButton.addEventListener(\"click\", handleSignIn);\n\n    const createButton = document.getElementsByClassName(\"button create-button\")[0];\n    if (createButton) {\n      createButton.addEventListener(\"click\", () => {\n        const a = createButton.querySelector(\"a\");\n        if (!a) window.open(`${CREATOR_HUB_URL}/creator/create`, \"_self\");\n      });\n    }\n\n    // 로고 라우팅 보강\n    const ovdrLogo = document.getElementById(\"ovdr-logo\");\n    if (ovdrLogo) {\n      ovdrLogo.style.cursor = \"pointer\";\n      ovdrLogo.addEventListener(\"click\", () => {\n        window.location.href = CREATOR_HUB_URL;\n      });\n    }\n    const ovdrLogoMobile = document.getElementById(\"ovdr-logo-mobile\");\n    if (ovdrLogoMobile) {\n      ovdrLogoMobile.style.cursor = \"pointer\";\n      ovdrLogoMobile.addEventListener(\"click\", () => {\n        window.location.href = CREATOR_HUB_URL;\n      });\n    }\n\n    // 접근성 보강\n    document.querySelectorAll(\".action-item .action-menu\").forEach((el) => {\n      if (!el.hasAttribute(\"tabindex\")) el.setAttribute(\"tabindex\", \"0\");\n      if (!el.hasAttribute(\"role\")) el.setAttribute(\"role\", \"button\");\n    });\n\n    // 특정 유저 서브페이지 숨김\n    const path = window.location.pathname;\n    const hiddenPathsRegex = /^\\/u\\/[^\\/]+(\\/(activity|summary))?\\/?$/;\n    if (hiddenPathsRegex.test(path)) {\n      const main = document.getElementById(\"main\");\n      if (main) main.style.display = \"none\";\n    }\n  } catch (err) {\n    console.error(\"Initialization error:\", err);\n  }\n});\n\nfunction syncOpenActionItemsPosition() {\n  const items = getActionItems();\n\n  if (items.dashboard && !items.dashboard.classList.contains(\"hidden\")) {\n    positionActionItemUnderHeader(\"dashboard\");\n  }\n  if (items.support && !items.support.classList.contains(\"hidden\")) {\n    positionActionItemUnderHeader(\"support\");\n  }\n  // profile은 오른쪽 정렬이라 별도 로직 쓰는 경우가 많아서 우선 제외\n}\n\nwindow.addEventListener(\"resize\", syncOpenActionItemsPosition);\nwindow.addEventListener(\"scroll\", syncOpenActionItemsPosition, { passive: true });","import \"virtual:init-settings\";\n\nconst themeCompatModules = {};\nimport * as Mod1 from \"./discourse/api-initializers/theme-initializer\";\nthemeCompatModules[\"discourse/api-initializers/theme-initializer\"] = Mod1;\n\nexport default themeCompatModules;\n"],"names":["registerSettings","getObjectForTheme","CREATOR_HUB_URL","getActionItems","dashboard","document","getElementById","support","profile","hideAllActionItems","items","Object","values","forEach","el","classList","contains","add","remove","style","top","left","showActionItem","tab","target","positionActionItemUnderHeader","header","querySelector","menu","trigger","getNavItemByTab","headerRect","getBoundingClientRect","triggerRect","bottom","hideSignInSpinner","signInButton","getElementsByClassName","dataset","originalHtml","innerHTML","setAttribute","removeAttribute","handleSignIn","showSignInSpinner","loginButton","click","console","error","err","handleLogout","MutationObserver","_","obs","profileButton","disconnect","__","obs2","logoutButton","observe","body","childList","subtree","showToast","message","oldToast","toastContainer","createElement","id","position","transform","zIndex","appendChild","setTimeout","initMobileHeaderOnce","documentElement","mobileHeaderInit","hamburger","closeX","sidebar","sidebarIcon","closeMenu","addEventListener","e","stopPropagation","insideSidebar","insideHamburger","insideClose","mobileMenuLinks","Analytics","Payout","FAQ","Forum","querySelectorAll","li","cursor","label","textContent","trim","window","open","mobileSignInBtn","preventDefault","closest","themeInitializer","apiInitializer","async","fn","readyState","once","api","onPageChange","userCardElement","username","userCard","response","fetch","data","json","accountId","Error","location","href","warn","currentUser","getCurrentUser","params","URLSearchParams","search","queryParams","key","value","entries","getQueryParams","log","div","onclick","showOvdrAlertBanner","user","res","ok","status","walletAddress","user_fields","container","address","length","slice","setup","display","walletDiv","firstElementChild","nextSibling","parentNode","insertBefore","copyBtn","navigator","clipboard","writeText","addWalletAddress","fetchUserProfile","mobileSignInBox","avatarUrl","avatar_template","replace","img","src","alt","width","height","borderRadius","objectFit","headerRightSection","avatarWrapper","signOutBtn","className","mobileAvatarWrapper","justifyContent","mobileImg","cloneNode","syncOpenActionItemsPosition","item","getAttribute","headerDesktop","insideHeader","insideAnyAction","some","route","active","activeElement","createButton","ovdrLogo","ovdrLogoMobile","hasAttribute","path","pathname","test","main","passive","themeCompatModules","Mod1"],"mappings":"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"}