{"version":3,"file":"index2.cjs","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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"}