{"version":3,"file":"index5.mjs","sources":["../../src/google-translate-select.vue?vue&type=script&lang.ts"],"sourcesContent":["\nimport {\n  computed,\n  defineComponent,\n  defineExpose,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  unref,\n  watch,\n} from 'vue'\nimport {\n  GoogleTranslateFireEvent,\n  createGoogleTranslateJsonpCallback,\n  createNamespace,\n  createScriptTag,\n  createStyleTag,\n  getCookie,\n  isString,\n  removeIcon,\n  useMutationObserver,\n} from '@google-translate-select/utils'\nimport {\n  GOOGLE_TRANSLATE_COOKIE_NAME,\n  GOOGLE_TRANSLATE_JSSDK_URL,\n  GOOGLE_TRANSLATE_ORIGINAL_DOM_ID,\n  GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME,\n  GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME,\n} from '@google-translate-select/constants'\nimport '@google-translate-select/theme-chalk/src/index.scss'\nimport { googleTranslateProps } from './types'\nimport type {\n  CreateScriptTagReturn,\n  UseMutationObserverReturn,\n} from '@google-translate-select/utils'\n\nconst ns = createNamespace('select')\n\nexport default defineComponent({\n  name: ns.n,\n  inheritAttrs: false,\n  props: googleTranslateProps,\n  emits: ['select'],\n  setup(props, { emit, attrs }) {\n    const googleTranslateSelectEl = ref<HTMLElement | null>(null)\n    const visible = ref<boolean>(false)\n    const selectedLanguageCode = ref<string>('')\n    const hoveredLanguageCode = ref<string>('')\n    const setTimeoutId = ref<number>(-1)\n    const jsonCallbackFnName = ref<string>('')\n    const scriptTag = ref<CreateScriptTagReturn | null>(null)\n    const googleTranslateOriginSelectObserve =\n      ref<Partial<UseMutationObserverReturn> | null>({})\n    const htmlAttrLangObserve = ref<Partial<UseMutationObserverReturn> | null>(\n      {}\n    )\n    const isAnimating = ref<boolean>(false)\n\n    const getClass = computed(() => {\n      return [ns.b(), GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME, attrs.class]\n    })\n\n    const hasLanguages = computed(\n      () => props.languages && props.languages.length\n    )\n\n    /** cache current select language */\n    const selectedLanguageOption = computed(() => getSelectedLanguageOption())\n\n    /** cache next language for carousel mode */\n    const nextLanguageOption = computed(() => getNextLanguageOption())\n\n    /**\n     * get current select language\n     */\n    function getSelectedLanguageOption() {\n      const selectedLanguageOption = props.languages.find(\n        (language) => language.code === unref(selectedLanguageCode)\n      )\n      if (selectedLanguageOption) {\n        return selectedLanguageOption\n      } else {\n        const defaultSelectedLanguageOption = props.languages.find(\n          (language) => language.code === props.defaultLanguageCode\n        )\n        return defaultSelectedLanguageOption!\n      }\n    }\n\n    /**\n     * get next language for carousel mode\n     */\n    function getNextLanguageOption() {\n      if (!props.languages.length) return props.languages[0]\n\n      const currentIndex = props.languages.findIndex(\n        (language) => language.code === unref(selectedLanguageCode)\n      )\n\n      // If current language not found, return first language\n      if (currentIndex === -1) {\n        return props.languages[0]\n      }\n\n      // If it's the last language, return first; otherwise return next\n      const nextIndex =\n        currentIndex === props.languages.length - 1 ? 0 : currentIndex + 1\n\n      return props.languages[nextIndex]\n    }\n\n    /**\n     * dynamic insert style for GoogleTranslate\n     */\n    function createStyle() {\n      return createStyleTag(\n        `body { top: 0 !important; } .skiptranslate { display: none !important; }`\n      )\n    }\n\n    /**\n     * create jsonp callback for GoogleTranslate, when GoogleTranslate loaded callback will be triggered\n     */\n    function createJsonCallback() {\n      const pageLanguage = props.defaultPageLanguageCode\n      const { jsonpCallbackName } = createGoogleTranslateJsonpCallback(\n        {\n          pageLanguage,\n        },\n        setSelectedLanguageCode\n      )\n      jsonCallbackFnName.value = jsonpCallbackName\n    }\n\n    /**\n     * pass jsonp callback to GoogleTranslate\n     */\n    function createScript() {\n      return createScriptTag(\n        props.googleScriptUrl.length\n          ? `${props.googleScriptUrl}?cb=${unref(jsonCallbackFnName)}`\n          : `${GOOGLE_TRANSLATE_JSSDK_URL}?cb=${unref(jsonCallbackFnName)}`\n      )\n    }\n\n    /**\n     * GoogleTranslate init\n     */\n    function createGoogleTranslate() {\n      createStyle()\n      createJsonCallback()\n      scriptTag.value = createScript()\n    }\n\n    /**\n     * Triggers translations by observe changes in the DOM of GoogleTranslate's original select.\n     *\n     * Because the callback function passed in JSONP can only be called after the GOOGLE_TRANSLATE_JSSDK_URL resource is loaded,\n     * and the GOOGLE_TRANSLATE_JSSDK_URL will import the resource that generated the original DOM, observe is used here🤓\n     */\n    function createGoogleTranslateOriginSelectObserve() {\n      googleTranslateOriginSelectObserve.value = useMutationObserver(\n        document.querySelector(GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME)!,\n        (records) => {\n          records.forEach((record) => {\n            if (\n              record.addedNodes[0] &&\n              (record.addedNodes[0] as HTMLOptionElement).value\n            ) {\n              if (\n                selectedLanguageCode.value ===\n                (record.addedNodes[0] as HTMLOptionElement).value\n              ) {\n                triggerTranslate(\n                  (record.addedNodes[0] as HTMLOptionElement).value\n                )\n              }\n            }\n          })\n        },\n        {\n          childList: true,\n          subtree: true,\n        }\n      )\n\n      unref(googleTranslateOriginSelectObserve)!.start!()\n    }\n\n    /**\n     * When GoogleTranslate's original executes, the attribute 'lang' of HTML will have an auto state,\n     * in order to overwrite the auto state, we call the 'handleTranslate' again\n     */\n    function createHtmlAttrLangObserve() {\n      htmlAttrLangObserve.value = useMutationObserver(\n        document.querySelector('html')!,\n        (records) => {\n          records.forEach((record) => {\n            if (record.attributeName === 'lang') {\n              const currentValue = (record.target as HTMLElement).getAttribute(\n                'lang'\n              )\n              const oldValue = record.oldValue\n              // 修复auto的中间状态，如果页面当中内容较多，gt会有一个翻译的过程，就会抛出lang = auto，此时我们手动再触发一次翻译覆盖掉上次未进行完的翻译操作\n              if (\n                oldValue !== currentValue &&\n                oldValue &&\n                oldValue !== 'auto' &&\n                currentValue === 'auto'\n              ) {\n                handleTranslate(unref(selectedLanguageCode))\n              }\n            }\n          })\n          removeIcon()\n        },\n        {\n          attributes: true,\n          attributeOldValue: true,\n        }\n      )\n\n      unref(htmlAttrLangObserve)!.start!()\n    }\n\n    /**\n     * Simulates the change event of select to manually trigger GoogleTranslate\n     *\n     * @param select\n     */\n    function triggerTranslate(select: HTMLSelectElement | string) {\n      if (!select) {\n        return\n      }\n      const selectValue = isString(select) ? select : select.value ?? ''\n      const googleTranslateOriginalSelectEl = document.querySelector(\n        GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME\n      ) as HTMLSelectElement | null\n      const googleTranslateSelectEl = document.querySelector(`.${ns.b()}`)\n\n      if (\n        selectValue == props.defaultLanguageCode &&\n        selectedLanguageCode.value &&\n        selectValue != selectedLanguageCode.value\n      ) {\n        // const reloadEvent = new Event('reload')\n\n        // window.dispatchEvent(reloadEvent)\n        console.log('reload')\n        props.reload()\n      }\n\n      if (\n        !googleTranslateSelectEl ||\n        !googleTranslateOriginalSelectEl ||\n        googleTranslateSelectEl.innerHTML.length === 0 ||\n        googleTranslateOriginalSelectEl.options.length === 0\n      ) {\n        createGoogleTranslateOriginSelectObserve()\n      } else {\n        googleTranslateOriginalSelectEl.value = selectValue\n        GoogleTranslateFireEvent(googleTranslateOriginalSelectEl, 'change')\n        unref(googleTranslateOriginSelectObserve) &&\n          unref(googleTranslateOriginSelectObserve)!.stop!()\n      }\n    }\n\n    /**\n     * Determines whether the current select language exists in the props.languages\n     *\n     * @param code\n     */\n    function isLanguageCodeInLanguages(code: string) {\n      // 如果 code 不存在于语言列表中默认使用英语\n      const result = props.languages.find((language) => language.code === code)\n      return result ? code : 'en'\n    }\n\n    /**\n     * Get browser language\n     */\n    function getBrowserLanguage() {\n      const browserLanguage =\n        window.navigator.language || document.documentElement.lang || 'en'\n\n      const filterLanguages = ['zh-CN', 'zh-TW']\n      if (filterLanguages.every((l) => l !== browserLanguage)) {\n        if (browserLanguage.indexOf('-') > -1) {\n          return browserLanguage.split('-')[0]\n        }\n      }\n      return browserLanguage\n    }\n\n    /**\n     * After triggering GoogleTranslate Translate, a cookie called 'googtrans' is generated, such as '/en/tr'\n     */\n    function getGoogleCookieLanguage() {\n      const googleTranslateCookie = getCookie(GOOGLE_TRANSLATE_COOKIE_NAME)\n\n      if (googleTranslateCookie) {\n        const googleTranslateCookieResult = googleTranslateCookie.split('/')\n        return googleTranslateCookieResult[2]\n          ? googleTranslateCookieResult[2]\n          : 'en'\n      } else {\n        return ''\n      }\n    }\n\n    /**\n     * Use browser language、cookie 'googtrans' to get language code\n     */\n    function setSelectedLanguageCode() {\n      const isFetchBrowserLanguageOpen = props.fetchBrowserLanguage\n      const browserLanguage = isFetchBrowserLanguageOpen\n        ? isLanguageCodeInLanguages(getBrowserLanguage())\n        : ''\n      const googleCookieLanguage = getGoogleCookieLanguage()\n      const isGoogleCookieLanguageExist = !!googleCookieLanguage\n\n      const handleDefaultLanguage = () => {\n        if (props.defaultLanguageCode) {\n          return props.defaultLanguageCode\n        } else {\n          return 'en'\n        }\n      }\n\n      const handleBrowserLanguageInLanguages = () => {\n        const isBrowserLanguageInLanguages = !!props.languages.find(\n          (language) => language.code === browserLanguage\n        )\n        if (isBrowserLanguageInLanguages) {\n          return browserLanguage\n        } else {\n          return handleDefaultLanguage()\n        }\n      }\n\n      const handleGoogleCookieLanguageInLanguages = () => {\n        const isGoogleCookieLanguageInLanguages = !!props.languages.find(\n          (language) => language.code === googleCookieLanguage\n        )\n        if (isGoogleCookieLanguageInLanguages) {\n          return googleCookieLanguage\n        } else {\n          return handleDefaultLanguage()\n        }\n      }\n\n      let selectedCode = handleDefaultLanguage()\n      if (!isGoogleCookieLanguageExist) {\n        // 首次\n        if (isFetchBrowserLanguageOpen)\n          selectedCode = handleBrowserLanguageInLanguages()\n      } else {\n        // 非首次\n        // 越过浏览器语言判断直接去列表中匹配\n        selectedCode = handleGoogleCookieLanguageInLanguages()\n      }\n\n      handleTranslate(selectedCode)\n    }\n\n    function handleTranslate(code: string) {\n      triggerTranslate(code)\n      selectedLanguageCode.value = code\n\n      emit('select', getSelectedLanguageOption())\n    }\n\n    function clearSettimeout() {\n      clearTimeout(unref(setTimeoutId))\n      setTimeoutId.value = -1\n    }\n\n    function handleDropdownShowByHover(e: Event) {\n      if (props.trigger === 'hover') {\n        clearSettimeout()\n        setTimeoutId.value = window.setTimeout(() => {\n          const target = e.target as HTMLElement\n          if (\n            unref(googleTranslateSelectEl) &&\n            unref(googleTranslateSelectEl)?.contains(target)\n          ) {\n            visible.value = true\n          }\n        }, 0)\n      }\n    }\n\n    function handleDropdownHideByHover() {\n      if (props.trigger === 'hover') {\n        clearSettimeout()\n        setTimeoutId.value = window.setTimeout(() => {\n          visible.value = false\n        }, props.animateTimeout)\n      }\n    }\n\n    function handleDropdownShowOrHideByClick(e: Event) {\n      const target = e.target as HTMLElement\n      if (\n        unref(googleTranslateSelectEl) &&\n        unref(googleTranslateSelectEl)?.contains(target)\n      ) {\n        visible.value = true\n      } else {\n        visible.value = false\n      }\n    }\n\n    function handleKeyDown(e: KeyboardEvent) {\n      if (props.type === 'carousel') {\n        if (e.key === 'ArrowRight') {\n          e.preventDefault()\n          handleNextLanguage()\n        }\n      }\n    }\n\n    function handleNextLanguage() {\n      if (!props.languages.length || isAnimating.value) return\n\n      const currentIndex = props.languages.findIndex(\n        (language) => language.code === selectedLanguageCode.value\n      )\n\n      // If current language not found, start from first language\n      if (currentIndex === -1) {\n        handleTranslate(props.languages[0].code)\n        return\n      }\n\n      // If it's the last language, go to first; otherwise go to next\n      const nextIndex =\n        currentIndex === props.languages.length - 1 ? 0 : currentIndex + 1\n\n      // Set animation state\n      isAnimating.value = true\n\n      // Handle translate with animation delay\n      setTimeout(() => {\n        handleTranslate(props.languages[nextIndex].code)\n        setTimeout(() => {\n          isAnimating.value = false\n        }, 300) // Animation duration\n      }, 50)\n    }\n\n    onMounted(() => {\n      createGoogleTranslate()\n      createHtmlAttrLangObserve()\n\n      if (props.trigger === 'click')\n        document.addEventListener('click', handleDropdownShowOrHideByClick)\n\n      if (props.type === 'carousel')\n        document.addEventListener('keydown', handleKeyDown)\n    })\n\n    onBeforeUnmount(() => {\n      if (unref(googleTranslateOriginSelectObserve)?.stop) {\n        unref(googleTranslateOriginSelectObserve)!.stop!()\n      }\n\n      if (unref(htmlAttrLangObserve)?.stop) {\n        unref(htmlAttrLangObserve)!.stop!()\n      }\n\n      if (unref(scriptTag)?.unload) {\n        unref(scriptTag)!.unload!()\n      }\n      if (props.trigger === 'click')\n        document.removeEventListener('click', handleDropdownShowOrHideByClick)\n\n      if (props.type === 'carousel')\n        document.removeEventListener('keydown', handleKeyDown)\n    })\n\n    defineExpose({\n      handleTranslate,\n    })\n\n    watch(\n      () => props.isCarouselListenerDisabled,\n      (newVal) => {\n        if (newVal) {\n          document.removeEventListener('keydown', handleKeyDown)\n        } else {\n          document.addEventListener('keydown', handleKeyDown)\n        }\n      }\n    )\n\n    return {\n      ns,\n      googleTranslateSelectEl,\n      visible,\n      selectedLanguageCode,\n      hoveredLanguageCode,\n      isAnimating,\n      getClass,\n      hasLanguages,\n      selectedLanguageOption,\n      nextLanguageOption,\n      handleTranslate,\n      handleDropdownShowByHover,\n      handleDropdownHideByHover,\n      handleKeyDown,\n      handleNextLanguage,\n      GOOGLE_TRANSLATE_ORIGINAL_DOM_ID,\n    }\n  },\n})\n"],"names":["ns","createNamespace","_sfc_main","defineComponent","googleTranslateProps","props","emit","attrs","googleTranslateSelectEl","ref","visible","selectedLanguageCode","hoveredLanguageCode","setTimeoutId","jsonCallbackFnName","scriptTag","googleTranslateOriginSelectObserve","htmlAttrLangObserve","isAnimating","getClass","computed","GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME","hasLanguages","selectedLanguageOption","getSelectedLanguageOption","nextLanguageOption","getNextLanguageOption","language","unref","currentIndex","nextIndex","createStyle","createStyleTag","createJsonCallback","pageLanguage","jsonpCallbackName","createGoogleTranslateJsonpCallback","setSelectedLanguageCode","createScript","createScriptTag","GOOGLE_TRANSLATE_JSSDK_URL","createGoogleTranslate","createGoogleTranslateOriginSelectObserve","useMutationObserver","GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME","records","record","triggerTranslate","createHtmlAttrLangObserve","currentValue","oldValue","handleTranslate","removeIcon","select","selectValue","isString","googleTranslateOriginalSelectEl","GoogleTranslateFireEvent","isLanguageCodeInLanguages","code","getBrowserLanguage","browserLanguage","l","getGoogleCookieLanguage","googleTranslateCookie","getCookie","GOOGLE_TRANSLATE_COOKIE_NAME","googleTranslateCookieResult","isFetchBrowserLanguageOpen","googleCookieLanguage","isGoogleCookieLanguageExist","handleDefaultLanguage","handleBrowserLanguageInLanguages","handleGoogleCookieLanguageInLanguages","selectedCode","clearSettimeout","handleDropdownShowByHover","target","_a","handleDropdownHideByHover","handleDropdownShowOrHideByClick","handleKeyDown","handleNextLanguage","onMounted","onBeforeUnmount","_b","_c","defineExpose","watch","newVal","GOOGLE_TRANSLATE_ORIGINAL_DOM_ID"],"mappings":"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"}