{"mappings":"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","names":["TalizenHttpError","shouldRetryCaptchaSubmit","error","shouldTriggerCaptcha","isCaptchaErrorBody","buildCaptchaAnswer","x","y","runCaptchaVerification","options","createAbortError","resolve","reject","dialogTheme","resolveCaptchaDialogTheme","elements","createCaptchaDialogElements","host","tile","slider","errorText","cancelButton","currentCaptcha","settled","verifying","cleanup","handleBackdropClick","handleKeydown","updateTilePosition","submit","cancel","abort","settle","callback","getSliderValue","setCaptchaErrorText","setCaptchaDialogDisabled","result","updateCaptchaDialogCaptcha","refreshError","event","code","message","body","captcha","theme","localeText","getCaptchaLocaleText","getDefaultCaptchaDialogWidth","createStyledElement","sliderClassName","sliderStyle","createCaptchaSliderStyle","panel","title","subtitle","stage","createCaptchaStage","sliderLabel","createCaptchaSlider","actions","baseImage","className","style","tagName","styles","text","element","disabled","clampNumber","toSafeNumber","value","parsed","min","max","languages","item","language"],"sources":["../esm/npm/talizen@0.2.55/node_modules/talizen/captcha-ui.js"],"sourcesContent":["import { TalizenHttpError } from \"./core.js\";\nexport function shouldRetryCaptchaSubmit(error, shouldTriggerCaptcha) {\n    if (shouldTriggerCaptcha(error)) {\n        return true;\n    }\n    if (!(error instanceof TalizenHttpError)) {\n        return false;\n    }\n    if (isCaptchaErrorBody(error)) {\n        return true;\n    }\n    return error.status \u003e= 400 \u0026\u0026 error.status \u003c 500;\n}\nexport function buildCaptchaAnswer(x, y) {\n    return JSON.stringify({ x, y });\n}\nexport function runCaptchaVerification(options) {\n    if (typeof document === \"undefined\") {\n        throw new Error(\"Talizen captcha UI requires browser DOM support.\");\n    }\n    if (options.signal?.aborted) {\n        throw createAbortError();\n    }\n    return new Promise((resolve, reject) =\u003e {\n        const dialogTheme = resolveCaptchaDialogTheme(options.initialCaptcha, options.theme);\n        const elements = createCaptchaDialogElements(options.initialCaptcha, dialogTheme);\n        const { host, tile, slider, errorText, cancelButton } = elements;\n        let currentCaptcha = options.initialCaptcha;\n        let settled = false;\n        let verifying = false;\n        document.body.append(host);\n        const cleanup = () =\u003e {\n            host.removeEventListener(\"click\", handleBackdropClick);\n            document.removeEventListener(\"keydown\", handleKeydown);\n            slider.removeEventListener(\"input\", updateTilePosition);\n            slider.removeEventListener(\"change\", submit);\n            cancelButton.removeEventListener(\"click\", cancel);\n            options.signal?.removeEventListener(\"abort\", abort);\n            host.remove();\n        };\n        const settle = (callback) =\u003e {\n            if (settled) {\n                return;\n            }\n            settled = true;\n            cleanup();\n            callback();\n        };\n        const updateTilePosition = () =\u003e {\n            tile.style.left = `${getSliderValue(slider)}px`;\n            setCaptchaErrorText(errorText);\n        };\n        const submit = async () =\u003e {\n            if (verifying) {\n                return;\n            }\n            verifying = true;\n            const x = getSliderValue(slider);\n            setCaptchaDialogDisabled(elements, true);\n            try {\n                const result = await options.verify({ token: currentCaptcha.token, x, y: currentCaptcha.tile_y });\n                settle(() =\u003e resolve(result));\n            }\n            catch (error) {\n                if (!options.shouldRetry(error)) {\n                    settle(() =\u003e reject(error));\n                    return;\n                }\n                try {\n                    currentCaptcha = await options.refreshCaptcha();\n                    updateCaptchaDialogCaptcha(elements, currentCaptcha, dialogTheme);\n                    setCaptchaErrorText(errorText, dialogTheme.retryText);\n                }\n                catch (refreshError) {\n                    settle(() =\u003e reject(refreshError));\n                    return;\n                }\n            }\n            finally {\n                verifying = false;\n                if (!settled) {\n                    setCaptchaDialogDisabled(elements, false);\n                    slider.focus();\n                }\n            }\n        };\n        const cancel = () =\u003e {\n            settle(() =\u003e reject(new Error(\"Talizen captcha verification was cancelled by user.\")));\n        };\n        const abort = () =\u003e {\n            settle(() =\u003e reject(createAbortError()));\n        };\n        const handleBackdropClick = (event) =\u003e {\n            if (event.target === host) {\n                cancel();\n            }\n        };\n        const handleKeydown = (event) =\u003e {\n            if (event.key === \"Escape\") {\n                cancel();\n            }\n        };\n        slider.addEventListener(\"input\", updateTilePosition);\n        slider.addEventListener(\"change\", submit);\n        host.addEventListener(\"click\", handleBackdropClick);\n        document.addEventListener(\"keydown\", handleKeydown);\n        cancelButton.addEventListener(\"click\", cancel);\n        options.signal?.addEventListener(\"abort\", abort, { once: true });\n        updateTilePosition();\n        slider.focus();\n    });\n}\nfunction isCaptchaErrorBody(error) {\n    const code = String(error.bodyJson?.code ?? \"\").toLowerCase();\n    const message = String(error.bodyJson?.message ?? \"\").toLowerCase();\n    const body = error.body.toLowerCase();\n    return code.includes(\"captcha\")\n        || code.includes(\"verify\")\n        || message.includes(\"captcha\")\n        || message.includes(\"验证\")\n        || body.includes(\"captcha\")\n        || body.includes(\"验证\");\n}\nfunction resolveCaptchaDialogTheme(captcha, theme) {\n    const localeText = getCaptchaLocaleText();\n    return {\n        zIndex: theme?.zIndex ?? 9999,\n        hasCustomWidth: theme?.width != null,\n        width: theme?.width ?? getDefaultCaptchaDialogWidth(captcha),\n        title: theme?.title ?? localeText.title,\n        subtitle: theme?.subtitle ?? localeText.subtitle,\n        cancelText: theme?.cancelText ?? localeText.cancelText,\n        sliderText: theme?.sliderText ?? localeText.sliderText,\n        retryText: theme?.retryText ?? localeText.retryText,\n    };\n}\nfunction createCaptchaDialogElements(captcha, theme) {\n    const host = createStyledElement(\"div\", {\n        position: \"fixed\",\n        inset: \"0\",\n        display: \"flex\",\n        alignItems: \"center\",\n        justifyContent: \"center\",\n        background: \"rgba(0, 0, 0, 0.4)\",\n        zIndex: String(theme.zIndex),\n    });\n    const sliderClassName = \"talizen-captcha-slider\";\n    const sliderStyle = createCaptchaSliderStyle(sliderClassName);\n    const panel = createStyledElement(\"div\", {\n        width: `${theme.width}px`,\n        maxWidth: \"calc(100vw - 32px)\",\n        background: \"#ffffff\",\n        borderRadius: \"18px\",\n        padding: \"16px\",\n        boxSizing: \"border-box\",\n        boxShadow: \"0 24px 60px rgba(15,23,42,0.24)\",\n        color: \"#111827\",\n    });\n    const title = createStyledElement(\"div\", {\n        fontSize: \"18px\",\n        lineHeight: \"26px\",\n        fontWeight: \"700\",\n        marginBottom: \"4px\",\n    }, theme.title);\n    const subtitle = createStyledElement(\"div\", {\n        fontSize: \"14px\",\n        lineHeight: \"22px\",\n        fontWeight: \"600\",\n        color: \"#6b7280\",\n        marginBottom: \"12px\",\n    }, theme.subtitle);\n    const stage = createCaptchaStage(captcha);\n    const sliderLabel = createStyledElement(\"div\", {\n        fontSize: \"14px\",\n        lineHeight: \"20px\",\n        fontWeight: \"600\",\n        color: \"#6b7280\",\n        marginBottom: \"8px\",\n    }, theme.sliderText);\n    const slider = createCaptchaSlider(captcha, sliderClassName);\n    const errorText = createStyledElement(\"div\", {\n        display: \"none\",\n        flex: \"1\",\n        fontSize: \"13px\",\n        lineHeight: \"20px\",\n        fontWeight: \"500\",\n        color: \"#ef4444\",\n    });\n    const actions = createStyledElement(\"div\", {\n        display: \"flex\",\n        alignItems: \"center\",\n        gap: \"12px\",\n        justifyContent: \"flex-start\",\n        marginTop: \"8px\",\n    });\n    const cancelButton = createStyledElement(\"button\", {\n        padding: \"10px 18px\",\n        border: \"1px solid #e5e7eb\",\n        background: \"#ffffff\",\n        borderRadius: \"12px\",\n        boxShadow: \"0 1px 2px rgba(15,23,42,0.08)\",\n        color: \"#111827\",\n        fontSize: \"15px\",\n        lineHeight: \"20px\",\n        fontWeight: \"600\",\n        cursor: \"pointer\",\n        marginLeft: \"auto\",\n    }, theme.cancelText);\n    cancelButton.type = \"button\";\n    actions.append(errorText, cancelButton);\n    panel.append(title, subtitle, stage.host, sliderLabel, slider, actions);\n    host.append(sliderStyle, panel);\n    return {\n        baseImage: stage.baseImage,\n        host,\n        panel,\n        stage: stage.host,\n        tile: stage.tile,\n        slider,\n        errorText,\n        cancelButton,\n    };\n}\nfunction createCaptchaStage(captcha) {\n    const host = createStyledElement(\"div\", {\n        position: \"relative\",\n        width: `${captcha.width}px`,\n        height: `${captcha.height}px`,\n        maxWidth: \"100%\",\n        margin: \"0 0 12px\",\n        borderRadius: \"12px\",\n        overflow: \"hidden\",\n        background: \"#f5f5f5\",\n    });\n    const baseImage = createStyledElement(\"img\", {\n        width: \"100%\",\n        height: \"100%\",\n        objectFit: \"cover\",\n    });\n    baseImage.src = captcha.master_img;\n    baseImage.draggable = false;\n    const tile = createStyledElement(\"img\", {\n        position: \"absolute\",\n        top: `${captcha.tile_y}px`,\n        left: \"0px\",\n        width: `${captcha.tile_width}px`,\n        height: `${captcha.tile_height}px`,\n        pointerEvents: \"none\",\n    });\n    tile.src = captcha.tile_img;\n    tile.draggable = false;\n    host.append(baseImage, tile);\n    return { baseImage, host, tile };\n}\nfunction createCaptchaSlider(captcha, className) {\n    const slider = createStyledElement(\"input\", {\n        width: \"100%\",\n        display: \"block\",\n        margin: \"0\",\n    });\n    slider.type = \"range\";\n    slider.className = className;\n    slider.min = \"0\";\n    slider.max = String(Math.max(0, captcha.width - captcha.tile_width));\n    slider.value = \"0\";\n    return slider;\n}\nfunction createCaptchaSliderStyle(className) {\n    const style = document.createElement(\"style\");\n    style.textContent = `\n    .${className} {\n      appearance: none;\n      -webkit-appearance: none;\n      height: 40px;\n      background: transparent;\n      cursor: pointer;\n    }\n    .${className}:focus {\n      outline: none;\n    }\n    .${className}::-webkit-slider-runnable-track {\n      height: 12px;\n      border: 1px solid #d1d5db;\n      border-radius: 999px;\n      background: #f9fafb;\n      box-shadow: inset 0 1px 2px rgba(15,23,42,0.08);\n    }\n    .${className}::-webkit-slider-thumb {\n      -webkit-appearance: none;\n      width: 30px;\n      height: 30px;\n      margin-top: -10px;\n      border: 3px solid #ffffff;\n      border-radius: 999px;\n      background: #1677ff;\n      box-shadow: 0 4px 12px rgba(22,119,255,0.35);\n    }\n    .${className}::-moz-range-track {\n      height: 12px;\n      border: 1px solid #d1d5db;\n      border-radius: 999px;\n      background: #f9fafb;\n      box-shadow: inset 0 1px 2px rgba(15,23,42,0.08);\n    }\n    .${className}::-moz-range-thumb {\n      width: 24px;\n      height: 24px;\n      border: 3px solid #ffffff;\n      border-radius: 999px;\n      background: #1677ff;\n      box-shadow: 0 4px 12px rgba(22,119,255,0.35);\n    }\n    .${className}:disabled {\n      cursor: wait;\n      opacity: 0.72;\n    }\n  `;\n    return style;\n}\nfunction createStyledElement(tagName, styles, text) {\n    const element = document.createElement(tagName);\n    Object.assign(element.style, styles);\n    if (text != null) {\n        element.textContent = text;\n    }\n    return element;\n}\nfunction updateCaptchaDialogCaptcha(elements, captcha, theme) {\n    if (!theme.hasCustomWidth) {\n        elements.panel.style.width = `${getDefaultCaptchaDialogWidth(captcha)}px`;\n    }\n    elements.stage.style.width = `${captcha.width}px`;\n    elements.stage.style.height = `${captcha.height}px`;\n    elements.baseImage.src = captcha.master_img;\n    elements.tile.src = captcha.tile_img;\n    elements.tile.style.top = `${captcha.tile_y}px`;\n    elements.tile.style.left = \"0px\";\n    elements.tile.style.width = `${captcha.tile_width}px`;\n    elements.tile.style.height = `${captcha.tile_height}px`;\n    elements.slider.max = String(Math.max(0, captcha.width - captcha.tile_width));\n    elements.slider.value = \"0\";\n}\nfunction getDefaultCaptchaDialogWidth(captcha) {\n    return Math.max(captcha.width + 32, 320);\n}\nfunction setCaptchaDialogDisabled(elements, disabled) {\n    elements.slider.disabled = disabled;\n}\nfunction setCaptchaErrorText(element, message = \"\") {\n    element.textContent = message;\n    element.style.display = message === \"\" ? \"none\" : \"block\";\n}\nfunction getSliderValue(slider) {\n    return clampNumber(toSafeNumber(slider.value), toSafeNumber(slider.min), toSafeNumber(slider.max));\n}\nfunction toSafeNumber(value) {\n    const parsed = Number(value);\n    return Number.isFinite(parsed) ? parsed : 0;\n}\nfunction clampNumber(value, min, max) {\n    return Math.min(max, Math.max(min, value));\n}\nfunction getCaptchaLocaleText() {\n    const languages = typeof navigator === \"undefined\"\n        ? []\n        : [navigator.language, ...(navigator.languages ?? [])]\n            .filter((item) =\u003e typeof item === \"string\" \u0026\u0026 item !== \"\")\n            .map((item) =\u003e item.toLowerCase());\n    for (const language of languages) {\n        if (language.startsWith(\"en\")) {\n            return {\n                title: \"Complete security verification\",\n                subtitle: \"Drag the slider to move the puzzle into place\",\n                cancelText: \"Cancel\",\n                sliderText: \"Drag the slider to complete the puzzle\",\n                retryText: \"Verification failed, please try again.\",\n            };\n        }\n        if (language.startsWith(\"zh\")) {\n            return {\n                title: \"请完成安全验证\",\n                subtitle: \"拖动滑块，将拼图移动到正确位置\",\n                cancelText: \"取消\",\n                sliderText: \"向右拖动滑块完成拼图\",\n                retryText: \"验证失败，请重试。\",\n            };\n        }\n    }\n    return {\n        title: \"Complete security verification\",\n        subtitle: \"Drag the slider to move the puzzle into place\",\n        cancelText: \"Cancel\",\n        sliderText: \"Drag the slider to complete the puzzle\",\n        retryText: \"Verification failed, please try again.\",\n    };\n}\nfunction createAbortError() {\n    if (typeof DOMException === \"function\") {\n        return new DOMException(\"The operation was aborted.\", \"AbortError\");\n    }\n    const error = new Error(\"The operation was aborted.\");\n    error.name = \"AbortError\";\n    return error;\n}\n"],"version":3}
