import { c as _c } from "react/compiler-runtime"; import React, { useCallback, useEffect, useState } from 'react'; import { checkIsGitClean, checkNeedsClaudeAiLogin } from 'src/utils/background/remote/preconditions.js'; import { gracefulShutdownSync } from 'src/utils/gracefulShutdown.js'; import { Box, Text } from '../ink.js'; import { ConsoleOAuthFlow } from './ConsoleOAuthFlow.js'; import { Select } from './CustomSelect/index.js'; import { Dialog } from './design-system/Dialog.js'; import { TeleportStash } from './TeleportStash.js'; export type TeleportLocalErrorType = 'needsLogin' | 'needsGitStash'; type TeleportErrorProps = { onComplete: () => void; errorsToIgnore?: ReadonlySet; }; // Module-level sentinel so the default parameter has stable identity. // Previously `= new Set()` created a fresh Set every render, which put // a new object in checkErrors' deps and caused the mount effect to // re-fire on every render. const EMPTY_ERRORS_TO_IGNORE: ReadonlySet = new Set(); export function TeleportError(t0) { const $ = _c(18); const { onComplete, errorsToIgnore: t1 } = t0; const errorsToIgnore = t1 === undefined ? EMPTY_ERRORS_TO_IGNORE : t1; const [currentError, setCurrentError] = useState(null); const [isLoggingIn, setIsLoggingIn] = useState(false); let t2; if ($[0] !== errorsToIgnore || $[1] !== onComplete) { t2 = async () => { const currentErrors = await getTeleportErrors(); const filteredErrors = new Set(Array.from(currentErrors).filter(error => !errorsToIgnore.has(error))); if (filteredErrors.size === 0) { onComplete(); return; } if (filteredErrors.has("needsLogin")) { setCurrentError("needsLogin"); } else { if (filteredErrors.has("needsGitStash")) { setCurrentError("needsGitStash"); } } }; $[0] = errorsToIgnore; $[1] = onComplete; $[2] = t2; } else { t2 = $[2]; } const checkErrors = t2; let t3; let t4; if ($[3] !== checkErrors) { t3 = () => { checkErrors(); }; t4 = [checkErrors]; $[3] = checkErrors; $[4] = t3; $[5] = t4; } else { t3 = $[4]; t4 = $[5]; } useEffect(t3, t4); const onCancel = _temp; let t5; if ($[6] !== checkErrors) { t5 = () => { setIsLoggingIn(false); checkErrors(); }; $[6] = checkErrors; $[7] = t5; } else { t5 = $[7]; } const handleLoginComplete = t5; let t6; if ($[8] === Symbol.for("react.memo_cache_sentinel")) { t6 = () => { setIsLoggingIn(true); }; $[8] = t6; } else { t6 = $[8]; } const handleLoginWithClaudeAI = t6; let t7; if ($[9] === Symbol.for("react.memo_cache_sentinel")) { t7 = value => { if (value === "login") { handleLoginWithClaudeAI(); } else { onCancel(); } }; $[9] = t7; } else { t7 = $[9]; } const handleLoginDialogSelect = t7; let t8; if ($[10] !== checkErrors) { t8 = () => { checkErrors(); }; $[10] = checkErrors; $[11] = t8; } else { t8 = $[11]; } const handleStashComplete = t8; if (!currentError) { return null; } switch (currentError) { case "needsGitStash": { let t9; if ($[12] !== handleStashComplete) { t9 = ; $[12] = handleStashComplete; $[13] = t9; } else { t9 = $[13]; } return t9; } case "needsLogin": { if (isLoggingIn) { let t9; if ($[14] !== handleLoginComplete) { t9 = ; $[14] = handleLoginComplete; $[15] = t9; } else { t9 = $[15]; } return t9; } let t9; if ($[16] === Symbol.for("react.memo_cache_sentinel")) { t9 = Teleport requires a Claude.ai account.Your Claude Pro/Max subscription will be used by Claude Code.; $[16] = t9; } else { t9 = $[16]; } let t10; if ($[17] === Symbol.for("react.memo_cache_sentinel")) { t10 = {t9}