{"version":3,"file":"index2.mjs","sources":["../../src/google-translate-select.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react'\nimport cs from 'classnames'\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_SELECT_LANGUAGES,\n  GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME,\n} from '@google-translate-select/constants'\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 '@google-translate-select/theme-chalk/src/index.scss'\nimport type { UseMutationObserverReturn } from '@google-translate-select/utils'\nimport type { IGoogleTranslateProps } from './types/props'\n\nconst ns = createNamespace('select')\n\nexport default function GoogleTranslateSelect(props: IGoogleTranslateProps) {\n  const {\n    languages = GOOGLE_TRANSLATE_SELECT_LANGUAGES,\n    defaultLanguageCode = 'en',\n    defaultPageLanguageCode = 'en',\n    fetchBrowserLanguage = true,\n    animateTimeout = 150,\n    dropdownClassName = '',\n    dropdownStyles = {},\n    showArrow = true,\n    trigger = 'hover',\n    className = '',\n    select,\n  } = props\n\n  const [visible, setVisible] = useState<boolean>(false)\n  const [selectedLanguageCode, changeSelectedLanguageCode] =\n    useState<string>('')\n  const [jsonCallbackFnName, setJsonCallbackFnName] = useState<string>('')\n  const [\n    googleTranslateOriginSelectObserve,\n    setGoogleTranslateOriginSelectObserve,\n  ] = useState<Partial<UseMutationObserverReturn> | null>({})\n  const [htmlAttrLangObserve, setHtmlAttrLangObserve] =\n    useState<Partial<UseMutationObserverReturn> | null>({})\n  const [flag, setFlag] = useState<boolean>(true)\n  const [timeoutId, setTimeoutId] = useState<number>(-1)\n\n  /**\n   * get current select language\n   */\n  const getSelectedLanguageOption = (code: string) => {\n    const selectedLanguageObject = languages.find(\n      (language) => language.code === code\n    )\n    const defaultSelectedLanguageObject = languages.find(\n      (language) => language.code === defaultLanguageCode\n    )\n\n    return selectedLanguageObject\n      ? selectedLanguageObject\n      : defaultSelectedLanguageObject\n  }\n\n  const selectedLanguageOption = useMemo(\n    () => getSelectedLanguageOption(selectedLanguageCode),\n    [selectedLanguageCode]\n  )\n\n  useEffect(() => {\n    createGoogleTranslate()\n    createHtmlAttrLangObserve()\n  }, [])\n\n  useEffect(() => {\n    createScript()\n  }, [jsonCallbackFnName])\n\n  useEffect(() => {\n    if (htmlAttrLangObserve?.start) {\n      htmlAttrLangObserve.start()\n    }\n    return () => {\n      if (htmlAttrLangObserve?.stop) {\n        htmlAttrLangObserve.stop()\n      }\n    }\n  }, [htmlAttrLangObserve])\n\n  useEffect(() => {\n    if (googleTranslateOriginSelectObserve?.start) {\n      googleTranslateOriginSelectObserve.start()\n    }\n    return () => {\n      if (googleTranslateOriginSelectObserve?.stop) {\n        googleTranslateOriginSelectObserve.stop()\n      }\n    }\n  }, [googleTranslateOriginSelectObserve])\n\n  useEffect(() => {\n    if (googleTranslateOriginSelectObserve?.stop) {\n      googleTranslateOriginSelectObserve!.stop!()\n    }\n  }, [flag])\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  const createHtmlAttrLangObserve = () => {\n    const observer = 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(selectedLanguageCode)\n            }\n          }\n        })\n        removeIcon()\n      },\n      {\n        attributes: true,\n        attributeOldValue: true,\n      }\n    )\n    setHtmlAttrLangObserve(observer)\n  }\n\n  /**\n   * GoogleTranslate init\n   */\n  const createGoogleTranslate = () => {\n    createStyle()\n    createJsonCallback()\n  }\n\n  /**\n   * pass jsonp callback to GoogleTranslate\n   */\n  const createScript = () => {\n    if (!jsonCallbackFnName) {\n      return null\n    }\n\n    return createScriptTag(\n      `${GOOGLE_TRANSLATE_JSSDK_URL}?cb=${jsonCallbackFnName}`\n    )\n  }\n\n  /**\n   * create jsonp callback for GoogleTranslate, when GoogleTranslate loaded callback will be triggered\n   */\n  const createJsonCallback = () => {\n    const { jsonpCallbackName } = createGoogleTranslateJsonpCallback(\n      {\n        pageLanguage: defaultPageLanguageCode,\n      },\n      setSelectedLanguageCode\n    )\n    setJsonCallbackFnName(jsonpCallbackName)\n  }\n\n  /**\n   * Use browser language、cookie 'googtrans' to get language code\n   */\n  const setSelectedLanguageCode = () => {\n    const googleCookieLanguage = getGoogleCookieLanguage()\n    const browserLanguage = fetchBrowserLanguage\n      ? isLanguageCodeInLanguages(getBrowserLanguage())\n      : ''\n    const isGoogleCookieLanguageExist = !!googleCookieLanguage\n    const isFetchBrowserLanguageOpen = fetchBrowserLanguage\n    const defaultSelectedCode = defaultLanguageCode || 'en'\n\n    const handleLanguageInLanguages = (code: string) => {\n      const isLanguageInLanguages = !!languages.find(\n        (language) => language.code === code\n      )\n      return isLanguageInLanguages ? code : defaultSelectedCode\n    }\n    let selectedCode = defaultSelectedCode\n    if (!isGoogleCookieLanguageExist && isFetchBrowserLanguageOpen) {\n      selectedCode = handleLanguageInLanguages(browserLanguage)\n    } else {\n      selectedCode = handleLanguageInLanguages(googleCookieLanguage)\n    }\n\n    handleTranslate(selectedCode)\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   * 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 = languages.find((language) => language.code === code)\n    return result ? code : 'en'\n  }\n\n  /**\n   * After triggering GoogleTranslate Translate, a cookie called 'googtrans' is generated, such as '/en/tr'\n   */\n  const getGoogleCookieLanguage = () => {\n    const googleTranslateCookie = getCookie(GOOGLE_TRANSLATE_COOKIE_NAME)\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   * dynamic insert style for GoogleTranslate\n   */\n  const createStyle = () => {\n    return createStyleTag(\n      `body { top: 0 !important; } .skiptranslate { display: none !important; }`\n    )\n  }\n\n  const handleDropdownShow = () => {\n    if (trigger === 'hover') {\n      clearTimeout(timeoutId)\n      setTimeoutId(\n        window.setTimeout(() => {\n          setVisible(true)\n        }, animateTimeout)\n      )\n    }\n  }\n\n  const handleDropdownHide = () => {\n    if (trigger === 'hover') {\n      clearTimeout(timeoutId)\n      setTimeoutId(\n        window.setTimeout(() => {\n          setVisible(false)\n        }, animateTimeout)\n      )\n    }\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  const createGoogleTranslateOriginSelectObserve = (code: string) => {\n    const observe = 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 (code === (record.addedNodes[0] as HTMLOptionElement).value) {\n              triggerTranslate(\n                (record.addedNodes[0] as HTMLOptionElement).value\n              )\n            }\n          }\n        })\n      },\n      {\n        childList: true,\n        subtree: true,\n      }\n    )\n    setGoogleTranslateOriginSelectObserve(observe)\n  }\n\n  const 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      !googleTranslateSelectEl ||\n      !googleTranslateOriginalSelectEl ||\n      googleTranslateSelectEl.innerHTML.length === 0 ||\n      googleTranslateOriginalSelectEl.options.length === 0\n    ) {\n      createGoogleTranslateOriginSelectObserve(selectValue)\n    } else {\n      googleTranslateOriginalSelectEl.value = selectValue\n      GoogleTranslateFireEvent(googleTranslateOriginalSelectEl, 'change')\n      setFlag(!flag)\n    }\n  }\n\n  const handleTranslate = (code: string) => {\n    triggerTranslate(code)\n    changeSelectedLanguageCode(code)\n    select && select(getSelectedLanguageOption(code))\n  }\n\n  const handleDropdownByClick = () => {\n    if (trigger === 'click') {\n      setVisible((value) => !value)\n    }\n  }\n\n  if (!languages || !languages.length) {\n    return null\n  }\n\n  return (\n    <>\n      <div\n        className={cs([\n          ns.b(),\n          GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME,\n          className,\n        ])}\n      >\n        <div className={ns.b('dropdown')}>\n          <div\n            className={ns.be('dropdown', 'activator')}\n            onMouseEnter={handleDropdownShow}\n            onMouseLeave={handleDropdownHide}\n            onClick={handleDropdownByClick}\n          >\n            <div className={ns.b('language')}>\n              <div className={ns.b('flag')}>\n                <div className={ns.be('flag', selectedLanguageOption?.code)} />\n              </div>\n              {selectedLanguageOption?.name}\n            </div>\n            {showArrow && (\n              <div\n                className={cs([ns.b('icon'), visible ? ns.is('reverse') : ''])}\n              >\n                <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\n                  <path\n                    fill=\"currentColor\"\n                    d=\"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z\"\n                  />\n                </svg>\n              </div>\n            )}\n          </div>\n          <div\n            className={cs([ns.be('dropdown', 'menu'), dropdownClassName])}\n            style={{ display: visible ? '' : 'none', ...dropdownStyles }}\n            onMouseEnter={handleDropdownShow}\n            onMouseLeave={handleDropdownHide}\n            onClick={handleDropdownByClick}\n          >\n            <ul>\n              {languages.map((language) => {\n                return (\n                  <li\n                    key={`language-${language.code}`}\n                    className={cs([\n                      ns.be('dropdown', 'menu__item'),\n                      selectedLanguageCode === language.code ? 'selected' : '',\n                    ])}\n                    data-language-code={language.code}\n                    onClick={() => {\n                      handleTranslate(language.code)\n                    }}\n                  >\n                    <div className={ns.b('language')}>\n                      <div className={ns.b('flag')}>\n                        <div className={ns.be('flag', language.code)}></div>\n                      </div>\n                      {language.name}\n                    </div>\n                  </li>\n                )\n              })}\n            </ul>\n          </div>\n        </div>\n      </div>\n      <div id={GOOGLE_TRANSLATE_ORIGINAL_DOM_ID} />\n    </>\n  )\n}\n"],"names":["ns","createNamespace","GoogleTranslateSelect","props","languages","GOOGLE_TRANSLATE_SELECT_LANGUAGES","defaultLanguageCode","defaultPageLanguageCode","fetchBrowserLanguage","animateTimeout","dropdownClassName","dropdownStyles","showArrow","trigger","className","select","visible","setVisible","useState","selectedLanguageCode","changeSelectedLanguageCode","jsonCallbackFnName","setJsonCallbackFnName","googleTranslateOriginSelectObserve","setGoogleTranslateOriginSelectObserve","htmlAttrLangObserve","setHtmlAttrLangObserve","flag","setFlag","timeoutId","setTimeoutId","getSelectedLanguageOption","code","selectedLanguageObject","language","defaultSelectedLanguageObject","selectedLanguageOption","useMemo","useEffect","createGoogleTranslate","createHtmlAttrLangObserve","createScript","observer","useMutationObserver","records","record","currentValue","oldValue","handleTranslate","removeIcon","createStyle","createJsonCallback","createScriptTag","GOOGLE_TRANSLATE_JSSDK_URL","jsonpCallbackName","createGoogleTranslateJsonpCallback","setSelectedLanguageCode","googleCookieLanguage","getGoogleCookieLanguage","browserLanguage","isLanguageCodeInLanguages","getBrowserLanguage","isGoogleCookieLanguageExist","isFetchBrowserLanguageOpen","defaultSelectedCode","handleLanguageInLanguages","selectedCode","l","googleTranslateCookie","getCookie","GOOGLE_TRANSLATE_COOKIE_NAME","googleTranslateCookieResult","createStyleTag","handleDropdownShow","handleDropdownHide","createGoogleTranslateOriginSelectObserve","observe","GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME","triggerTranslate","selectValue","isString","googleTranslateOriginalSelectEl","googleTranslateSelectEl","GoogleTranslateFireEvent","handleDropdownByClick","value","jsxs","Fragment","jsx","cs","GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME","GOOGLE_TRANSLATE_ORIGINAL_DOM_ID"],"mappings":"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"}