diff --git a/.gitignore b/.gitignore index 5759c65..c910470 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ /tools/chromium_extension/node_modules /tools/chromium_extension/package-lock.json /.idea +node_modules +.DS_Store +*.local +source diff --git a/.todo b/.todo new file mode 100644 index 0000000..88293db --- /dev/null +++ b/.todo @@ -0,0 +1,3 @@ +* vite 在有道的读音是错的 +* Ubuntu 在有道的读音是错的 +* 使用 github action 自动重编译静态页面 \ No newline at end of file diff --git a/README.md b/README.md index d62a852..9c05160 100644 --- a/README.md +++ b/README.md @@ -1,155 +1,148 @@ -## Words Commonly Mispronounced by Chinese Programmers -## 中国程序员容易发音错误的单词(点击🔊收听正确读音) +# 中国程序员容易发音错误的单词 -### 重要更新 +Words Commonly Mispronounced by Chinese Programmers -- chromium扩展:无页面跳转,实时检索英语发音 - - 安装 [chromium 扩展](tools/chromium_extension/README.md) 或者 - - [外部独立库](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation-chromium-extension.git) -- 简洁的单词列表,正确读音不用再打开新网页:https://cpwp.netlify.app/ -- [iOS应用](https://apps.apple.com/cn/app/%E7%8C%BF%E5%8D%95%E8%AF%8D-%E4%B8%AD%E5%9B%BD%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AE%B9%E6%98%93%E5%8F%91%E9%9F%B3%E9%94%99%E8%AF%AF%E7%9A%84%E5%8D%95%E8%AF%8D/id1626487291) +## 单词表 +点击🔊收听正确读音 + | 单词 | 正确发音(英音)| 正确发音(美音)| 错误发音 | | --- | ----------- | ----------- | ---------- | -| access | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=access&type=1) /'ækses/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=access&type=2) /ˈækses/ | ❌ /ək'ses/ | -| Adobe | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Adobe&type=1) /ə'dəʊbi/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Adobe&type=2) /ə'dəʊbi/ | ❌ /əˈdub/ | -| admin | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=admin&type=1) /'ædmɪn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=admin&type=2) /ˈædmɪn/ | ❌ /ɜ:d'mɪn/ | -| adversarial | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=adversarial&type=1) /ˌædvəˈseəriəl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=adversarial&type=2) /ˌædvərˈseriəl/ | ❌ /ədˈvɜːrsəriəl/ | -| agile | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=agile&type=1) /'ædʒaɪl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=agile&type=2) /ˈædʒl/ | ❌ /ə'dʒaɪl/ | -| amazon | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=amazon&type=1) /'æməzən/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=amazon&type=2) /ˈæməzɑːn/ | ❌ /'əmeizən/ /ə'meizən/ | -| analogy | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=analogy&type=1) /əˈnælədʒi/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=analogy&type=2) /əˈnælədʒi/ | ❌ /ænə'lɒdʒi/ | -| Angular | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Angular&type=1) /'æŋgjʊlə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Angular&type=2) /ˈæŋɡjələr/ | ❌ /'æŋɡələ/ /'æŋdʒʌlə/ | -| AJAX | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=AJAX&type=1) /'eidʒæks/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=AJAX&type=2) /'eidʒæks/ | ❌ /ə'dʒʌks/ | -| alias | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=alias&type=1) /ˈeɪliəs/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=alias&type=2) /ˈeɪliəs/ | ❌ /ə'lais/ | -| Apache | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Apache&type=1) /ə'pætʃɪ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Apache&type=2) /əˈpætʃi/ | ❌ /ʌpʌtʃ/ | -| app | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=app&type=1) /æp/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=app&type=2) /æp/ | ❌ /eipi'pi/ | -| archive | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=archive&type=1) /'ɑːkaɪv/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=archive&type=2) /'ɑːkaɪv/ | ❌ /'ətʃɪv/ | -| array | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=array&type=1) /ə'rei/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=array&type=2) /əˈreɪ/ | ❌ /æ'rei/ | -| ASCII | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ascii&type=1) /'æski/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ascii&type=2) /ˈæski/ | ❌ /ɑːsk/ | -| aspect | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=aspect&type=1) /'æspekt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=aspect&type=2) /ˈæspekt/ | ❌ /ə'spekt/ | -| async | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=async&type=1) /əˈsɪŋk/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=async&type=2) /æˈsɪŋk/ | ❌ /'æsɪŋk/ | -| avatar | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=avatar&type=1) /'ævətɑː/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=avatar&type=2) /ˈævətɑːr/ | ❌ /ə'vʌtɑ/ | -| Azure | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=azure&type=1) /'æʒə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=azure&type=2) /ˈæʒər/ | ❌ /ˈæzʊʒə/ | -| bind | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=bind&type=1) /baɪnd/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=bind&type=2) /baɪnd/ | ❌ /bɪnd/ | -| cache | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=cache&type=1) /kæʃ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=cache&type=2) /kæʃ/ | ❌ /kætʃ/ | -| canal | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=canal&type=1) /kəˈnæl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=canal&type=2) /kəˈnæl/ | ❌ /ˈkænl/ | -| Chrome | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=chrome&type=1) /krəʊm/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=chrome&type=2) /kroʊm/ | ❌ /tʃɔːm/ | -| clang | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=clang&type=1) /klæŋ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=clang&type=2) /klæŋ/ | ❌ /sɪlæŋ/ | -| Coq | [🔊](https://upload.wikimedia.org/wikipedia/commons/4/47/Fr-coq.ogg) IPA French ['kɔkʲ] 读若拼音“goq” | | ❌ IPA English ['kʰɒk] | -| daemon | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Daemon&type=1) /'diːmən/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Daemon&type=2) /ˈdiːmən/ | ❌ /dæmən/ | -| debt | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=debt&type=1) /det/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=debt&type=2) /det/ | ❌ /de'bit/ | -| deny | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deny&type=1) /dɪ'naɪ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deny&type=2) /dɪˈnaɪ/ | ❌ /'dæni/ | -| deprecate | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deprecate&type=1) /ˈdeprəkeɪt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deprecate&type=2) /ˈdeprəkeɪt/ | | -| deque | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deque&type=1) /'dek/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deque&type=2) /dɛk/ | ❌ /di'kju/ | -| digest | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=digest&type=1) n. /'dɑɪdʒɛst/ v. /dɑɪ'dʒɛst/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=digest&type=2) /daɪˈdʒest,dɪˈdʒest/ | ❌ /'dɪgɛst/ | -| Dijkstra | [🔊](https://upload.wikimedia.org/wikipedia/commons/8/85/Dijkstra.ogg) Dutch:/ˈdɛikstra/ English:/ˈdaɪkstrə/ | [🔊](https://upload.wikimedia.org/wikipedia/commons/8/85/Dijkstra.ogg) | | -| Django | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Django&type=1) /ˈdʒæŋɡoʊ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Django&type=2) /ˈdʒæŋɡoʊ/ | ❌ /diˈdʒæŋɡoʊ/ | -| doc | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=doc&type=1) /dɒk/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=doc&type=2) /dɒk/ | ❌ /daʊk/ | -| dotnet | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=dotnet&type=1) /dɒtnet/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=dotnet&type=2) /dɑːtnet/ | ❌ /daʊtnet/ | -| edition | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=edition&type=1) /ɪˈdɪʃ(ə)n/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=edition&type=2) /ɪˈdɪʃn/ | ❌ /eˈdɪʃn/ | -| ephemeral | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ephemeral&type=1) /ɪˈfemərəl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ephemeral&type=2) /ɪˈfemərəl/ | ❌ /daʊtnet/ | -| epoch | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=epoch&type=1) /ˈiːpɒk/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=epoch&type=2) /ˈepək/ | ❌ /'ɛpətʃ/ | -| execute | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=execute&type=1) /ˈeksɪkjuːt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=execute&type=2) /ˈeksɪkjuːt/ | | -| executor | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=executor&type=1) /ɪɡˈzekjətə(r)/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=executor&type=2) /ɪɡˈzekjətər/ | | -| event | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=event&type=1) /ɪ'vent/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=event&type=2) /ɪˈvent/ | ❌ /'ɪvənt/ | -| exit | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=exit&type=1) /ˈeksɪt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=exit&type=2) /ˈeksɪt; ˈeɡzɪt/ | ❌ /ig'zit/ | -| facade | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=facade&type=1) /fə'sɑːd/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=facade&type=2) /fəˈsɑːd/ | ❌ /'feikeid/ | -| fedora | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=fedora&type=1) /fɪ'dɔːrə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=fedora&type=2) /fɪˈdɔːrə/ | ❌ /'fedərə/ | -| format | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=format&type=1) /'fɔːmæt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=format&type=2) /ˈfɔːrmæt/ | ❌ /fɔ'mæt/ | -| gauge | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=gauge&type=1) /ɡeɪdʒ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=gauge&type=2) /ɡeɪdʒ/ | ❌ /ɡɑudʒ/ | -| Git | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=git&type=1) /ɡɪt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=git&type=2) /ɡɪt/ | ❌ /dʒɪt/ | -| GNU | [🔊](https://upload.wikimedia.org/wikipedia/commons/2/24/En-gnu.ogg) /gnu:/ | [🔊](https://upload.wikimedia.org/wikipedia/commons/2/24/En-gnu.ogg) /gnuː,gnjuː/ | | -| Grafana | [🔊](http://www.howtopronounce.cc/file/e204a97ed1e440c5ab15ea0117beb955.mp3) /grəˈfɑːnˌɑː/ | [🔊](http://www.howtopronounce.cc/file/e204a97ed1e440c5ab15ea0117beb955.mp3 ) /grəˈfɑːnˌɑː/ | | -| GraphQL | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=GraphQL&type=1) /græf kju ɛl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=GraphQL&type=2) /græf kju ɛl/ | ❌ /dʒɪgræf kju ɛl/ | -| GUI | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio={GUI}&type=1) /ˈɡu:i/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio={GUI}&type=2) /ˈɡu:i/ | | -| Haskell | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=haskell&type=1) /ˈhæskəl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=haskell&type=2) /ˈhæskəl/ | ❌ /hæˈskəl/ | -| height | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=height&type=1) /haɪt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=height&type=2) /haɪt/ | ❌ /heɪt/ | -| hidden | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=hidden&type=1) /'hɪdn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=hidden&type=2) /ˈhɪdn/ | ❌ /'haɪdn/ | -| image | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=image&type=1) /'ɪmɪdʒ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=image&type=2) /ˈɪmɪdʒ/ | ❌ /ɪ'meɪdʒ/ | -| implement | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=implement&type=1) /'ɪmplɪm(ə)nt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=implement&type=2) /ˈɪmplɪmənt/ /ˈɪmpləˌment/ | ❌ /ɪm'plem(ə)nt/ | -| integer | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=integer&type=1) /'ɪntɪdʒə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=integer&type=2) /ˈɪntɪdʒər/ | ❌ /ˈɪntaɪgə/ | -| issue | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=issue&type=1) /'ɪʃuː/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=issue&type=2) /ˈɪʃuː/ | ❌ /ˈaɪʃuː/ | -| Java | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=java&type=1) /'dʒɑːvə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=java&type=2) /ˈdʒɑːvə/ | | -| jpg| [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=JPEG&type=1) /'dʒeɪpeɡ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=JPEG&type=2) /'dʒeɪpeɡ/ | ❌ /ˈdʒeɪˈpi:ˈdʒiː/ | -| key | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=key&type=1) /kiː/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=key&type=2) /kiː/ | ❌ /kei/ | -| Kubernetes* | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Kubernetes&type=2) /kubз'netɪs/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Kubernetes&type=2) /kuːbə˞'netiz/ | | -| lambda | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=lambda&type=1) /ˈlæmdə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=lambda&type=2) /ˈlæmdə/ | ❌ /ˈlɒŋmdɑ/ | -| Ldap | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ldap&type=1) /el'dæp/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ldap&type=2) /el'dæp/ | ❌ /el'daːp/ | -| linear | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=linear&type=1) /'lɪnɪə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=linear&type=2) /ˈlɪniər/ | ❌ /'laɪə/ | -| LINQ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=link&type=1) /lɪŋk/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=link&type=2) /lɪŋk/ | ❌ /lɪŋkju:/ | -| Linux | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=linux&type=1) /'lɪnəks/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=linux&type=2) /ˈlaɪnəks/ /ˈlɪnəks/ | ❌ /ˈlɪnʌks/ /ˈlɪnjuːks/ | -| locale | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=locale&type=1) /ləʊ'kɑːl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=locale&type=2) /loʊˈkæl/ | ❌ /ˈloʊk(ə)l/ | -| Lucene | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=lucene&type=1) /lu'siːn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=lucene&type=2) /lu'siːn/ | ❌ /'lu:sən/ | -| macro | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=macro&type=1) /ˈmækrəʊ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=macro&type=2) /ˈmækroʊ/ | ❌ /ˈmakroʊ/ | -| main | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=main&type=1) /meɪn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=main&type=2) /meɪn/ | ❌ /mɪn/ | -| margin | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=margin&type=1) /'mɑːdʒɪn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=margin&type=2) /ˈmɑːrdʒɪn/ | ❌ /'mʌgɪn/ | -| matrix | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=matrix&type=1) /ˈmeɪtrɪks/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=matrix&type=2) /ˈmeɪtrɪks/ | ❌ /ˈmɑ:trɪks/ | -| maven | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=maven&type=1) /'meɪvn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=maven&type=2) /ˈmeɪvn/ | ❌ /'maːvn/ | -| max | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=max&type=1) /mæks/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=max&type=2) /mæks/ | ❌ /mɑ:ks/ | -| Microsoft | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Microsoft&type=1) /'maikrəusɔft/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Microsoft&type=2) /ˈmaɪkrəsɔːft/ | ❌ /'mikrəusɔft/ | -| miscellaneous | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=miscellaneous&type=1) /ˌmɪsəˈleɪniəs/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=miscellaneous&type=2) /ˌmɪsəˈleɪniəs/ | | -| module | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=module&type=1) /'mɒdjuːl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=module&type=2) /ˈmɑːdʒuːl/ | ❌ /'məʊdl/ | -| native | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=native&type=1) /ˈneɪtɪv/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=native&type=2) /ˈneɪtɪv/ | ❌ /ˈnætɪv/ | -| nginx | Engine X | Engine X | | -| null | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=null&type=1) /nʌl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=null&type=2) /nʌl/ | ❌ /naʊ/ | -| obsolete | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=obsolete&type=1) /ˈɒbsəliːt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=obsolete&type=2) /ˌɑːbsəˈliːt/ | | -| OS X | OS ten | OS ten | ❌ /ɔs eks/ | -| phantom | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=phantom&type=1) /'fæntəm/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=phantom&type=2) /ˈfæntəm/ | ❌ /'pæntəm/ | -| parameter | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=parameter&type=1) /pə'ræmɪtə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=parameter&type=2) /pəˈræmɪtər/ | ❌ /'pærəmɪtə/ | -| privilege | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=privilege&type=1) /'prɪvəlɪdʒ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=privilege&type=2) /ˈprɪvəlɪdʒ/ | ❌ /'prɪvɪlɪdʒ/ | -| probe | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=probe&type=1) /prəʊb/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=probe&type=2) /proʊb/ | ❌ /proʊbi/ | -| Prometheus | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=prometheus&type=1) /prə-ˈmē-thē-əs/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=prometheus&type=2) /pro'miθɪəs/ | | -| putty | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=putty&type=1) /ˈpʌti/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=putty&type=2) /ˈpʌti/ | ❌ /ˈpuːti/ | -| Qt | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=cute&type=1) /kjuːt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=cute&type=2) /kjuːt/ | | -| query | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=query&type=1) /'kwɪəri/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=query&type=2) /ˈkwɪri/ | ❌ /'kwaɪri/ | -| Realm | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=realm&type=1) /relm/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=realm&type=2) /relm/ | ❌ /riəlm/ | -| reconcile | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=reconcile&type=1) /ˈrekənsaɪl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=reconcile&type=2) /ˈrekənsaɪl/ | | -| Redux | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=redux&type=1) /ri'dʌks/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=redux&type=2) /ri'dʌks/ | ❌ /'ridju:ks/ | -| resume | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resume&type=1) /rɪ'zju:m/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resume&type=2) /rɪˈzuːm/ | ❌ /rɪ'sju:m/ | -| resolved | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resolved&type=1) /rɪ'zɒlvd/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resolved&type=2) /rɪˈzɑːlvd/ | ❌ /rɪ'səʊvd/ | -| resort | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resort&type=1) /rɪˈzɔ:t/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resort&type=2) /rɪˈzɔːrt/ | ❌ /rɪˈsɔ:t/ | -| retina | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=retina&type=1) /'retɪnə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=retina&type=2) /ˈretɪnə/ | ❌ /ri'tina/ | -| route | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=route&type=1) /ruːt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=route&type=2) /ruːt,raʊt/ | ❌ /rəʊt/ | -| San Jose | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=san%20jose&type=1) /sænhəu'zei/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=san%20jose&type=2) /sænhəu'zei/ | ❌ /sæn'ju:s/ | -| safari | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=safari&type=1) /sə'fɑːrɪ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=safari&type=2) /səˈfɑːri/ | ❌ /sæfərɪ/ | -| scheme | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=scheme&type=1) /skiːm/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=scheme&type=2) /skiːm/ | ❌ /s'kæmə/ | -| scala | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=scala&type=1) /ˈskɑːlɑ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=scala&type=2) /ˈskɑːlɑ/ | ❌ /ˈskæːlɑ/ | -| segue | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=segue&type=1) /'sɛɡwe/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=segue&type=2) /ˈseɡweɪ/ | ❌ /se'dʒ/ | -| SQL | /ˈsiːkwəl/ /ˈesˈkjuːˈel/ | /ˈsiːkwəl/ /ˈesˈkjuːˈel/ | | -| sudo | /'suːduː/ | /'suːduː/ | | -| suite | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=suite&type=1) /swiːt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=suite&type=2) /swiːt/ | ❌ /sjuːt/ | -| telemetry | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=telemetry&type=1) /təˈlemətri/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=telemetry&type=2) /təˈlemətri/ | ❌ /ˈtelɪmətri/ | -| thymeleaf | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=thymeleaf&type=1) /ˈtaɪmˌlɪːf/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=thymeleaf&type=2) /ˈtaɪmˌlɪːf/ | ❌ /θiːmɪlɪːf/ | -| tuple | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=tuple&type=1) /tjʊpəl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=tuple&type=2) /tuːpəl/ | | -| typical | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=typical&type=1) /'tɪpɪkl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=typical&type=2) /ˈtɪpɪkl/ | ❌ /'taɪpɪkəl/ | -| Ubuntu | [🔊](http://upload.wikimedia.org/wikipedia/commons/b/b5/En-Ubuntu_pronunciation.oga) /ʊ'bʊntʊ/ | [🔊](http://upload.wikimedia.org/wikipedia/commons/b/b5/En-Ubuntu_pronunciation.oga) /ʊ'bʊntʊ/ | ❌ /juː'bʊntʊ/ | -| Vagrant | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Vagrant&type=1) /ˈveɪɡrənt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Vagrant&type=2) /ˈveɪɡrənt/ | /ˈvagɹent/ | -| variable | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=variable&type=1) /'veəriəbl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=variable&type=2) /ˈveriəbl,ˈværiəbl/ | ❌ /və'raiəbl/ | -| verbose | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=verbose&type=1) /vɜːˈbəʊs/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=verbose&type=2) /vɜːrˈboʊs/ | ❌ /'vɜːrboʊs/ | -| vue | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=vue&type=1) /v'ju:/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=vue&type=2) /v'ju:/ | ❌ /v'ju:i/ | -| width | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=width&type=1) /wɪdθ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=width&type=2) /wɪdθ,wɪtθ/ | ❌ /waɪdθ/ | -| YouTube | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=youtube&type=1) /'juː'tjuːb/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=youtube&type=2) /'juː'tjuːb/ | ❌ /'juː'tʊbɪ/ | -| Vite | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=vite&type=1) /vit/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=vite&type=2) /vit/ | ❌ /vaɪt/ | - -### 附注 -* 无页面跳转,页面嵌入搜索引擎和实时检索英语发音,请安装 [chromium 扩展](tools/chromium_extension/README.md) - * [chromium 扩展新增功能截图](tools/chromium_extension/images/README.md) -* 当使用简名 ‘Kube’ 称呼 ‘Kubernetes’ 时, 发音则与 ‘cube’(/kjuːb/) 一致 - -### 相关链接 +| access | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=access&type=1) /'ækses/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=access&type=2) /ˈækses/ | ❌ /ˈækses/ | +| admin | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=admin&type=1) /'ædmɪn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=admin&type=2) /ˈædmɪn/ | ❌ /ˈædmɪn/ | +| Adobe | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Adobe&type=1) /ə'dəʊbi/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Adobe&type=2) /ə'dəʊbi/ | ❌ /ə'dəʊbi/ | +| adversarial | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=adversarial&type=1) /ˌædvəˈseəriəl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=adversarial&type=2) /ˌædvərˈseriəl/ | ❌ /ˌædvərˈseriəl/ | +| agile | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=agile&type=1) /'ædʒaɪl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=agile&type=2) /ˈædʒl/ | ❌ /ˈædʒl/ | +| AJAX | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=AJAX&type=1) /'eidʒæks/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=AJAX&type=2) /'eidʒæks/ | ❌ /'eidʒæks/ | +| alias | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=alias&type=1) /ˈeɪliəs/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=alias&type=2) /ˈeɪliəs/ | ❌ /ˈeɪliəs/ | +| amazon | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=amazon&type=1) /'æməzən/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=amazon&type=2) /ˈæməzɑːn/ | ❌ /ˈæməzɑːn/ | +| analogy | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=analogy&type=1) /əˈnælədʒi/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=analogy&type=2) /əˈnælədʒi/ | ❌ /əˈnælədʒi/ | +| Angular | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Angular&type=1) /'æŋgjʊlə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Angular&type=2) /ˈæŋɡjələr/ | ❌ /ˈæŋɡjələr/ | +| Apache | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Apache&type=1) /ə'pætʃɪ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Apache&type=2) /əˈpætʃi/ | ❌ /əˈpætʃi/ | +| app | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=app&type=1) /æp/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=app&type=2) /æp/ | ❌ /æp/ | +| archive | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=archive&type=1) /'ɑːkaɪv/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=archive&type=2) /'ɑːkaɪv/ | ❌ /'ɑːkaɪv/ | +| array | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=array&type=1) /ə'rei/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=array&type=2) /əˈreɪ/ | ❌ /əˈreɪ/ | +| ASCII | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=ASCII&type=1) /'æski/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=ASCII&type=2) /ˈæski/ | ❌ /ˈæski/ | +| aspect | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=aspect&type=1) /'æspekt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=aspect&type=2) /ˈæspekt/ | ❌ /ˈæspekt/ | +| async | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=async&type=1) /əˈsɪŋk/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=async&type=2) /æˈsɪŋk/ | ❌ /æˈsɪŋk/ | +| avatar | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=avatar&type=1) /'ævətɑː/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=avatar&type=2) /ˈævətɑːr/ | ❌ /ˈævətɑːr/ | +| Azure | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Azure&type=1) /'æʒə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Azure&type=2) /ˈæʒər/ | ❌ /ˈæʒər/ | +| bind | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=bind&type=1) /baɪnd/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=bind&type=2) /baɪnd/ | ❌ /baɪnd/ | +| cache | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=cache&type=1) /kæʃ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=cache&type=2) /kæʃ/ | ❌ /kæʃ/ | +| canal | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=canal&type=1) /kəˈnæl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=canal&type=2) /kəˈnæl/ | ❌ /kəˈnæl/ | +| Chrome | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Chrome&type=1) /krəʊm/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Chrome&type=2) /kroʊm/ | ❌ /kroʊm/ | +| clang | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=clang&type=1) /klæŋ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=clang&type=2) /klæŋ/ | ❌ /klæŋ/ | +| daemon | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=daemon&type=1) /'diːmən/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=daemon&type=2) /ˈdiːmən/ | ❌ /ˈdiːmən/ | +| debt | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=debt&type=1) /det/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=debt&type=2) /det/ | ❌ /det/ | +| deny | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deny&type=1) /dɪ'naɪ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deny&type=2) /dɪˈnaɪ/ | ❌ /dɪˈnaɪ/ | +| deprecate | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deprecate&type=1) /ˈdeprəkeɪt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deprecate&type=2) /ˈdeprəkeɪt/ | - | +| deque | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deque&type=1) /'dek/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deque&type=2) /dɛk/ | ❌ /dɛk/ | +| Django | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Django&type=1) /ˈdʒæŋɡoʊ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Django&type=2) /ˈdʒæŋɡoʊ/ | ❌ /ˈdʒæŋɡoʊ/ | +| doc | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=doc&type=1) /dɒk/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=doc&type=2) /dɒk/ | ❌ /dɒk/ | +| dotnet | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=dotnet&type=1) /dɒtnet/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=dotnet&type=2) /dɑːtnet/ | ❌ /dɑːtnet/ | +| edition | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=edition&type=1) /ɪˈdɪʃ(ə)n/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=edition&type=2) /ɪˈdɪʃn/ | ❌ /ɪˈdɪʃn/ | +| ephemeral | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=ephemeral&type=1) /ɪˈfemərəl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=ephemeral&type=2) /ɪˈfemərəl/ | ❌ /ɪˈfemərəl/ | +| epoch | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=epoch&type=1) /ˈiːpɒk/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=epoch&type=2) /ˈepək/ | ❌ /ˈepək/ | +| event | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=event&type=1) /ɪ'vent/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=event&type=2) /ɪˈvent/ | ❌ /ɪˈvent/ | +| execute | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=execute&type=1) /ˈeksɪkjuːt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=execute&type=2) /ˈeksɪkjuːt/ | - | +| executor | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=executor&type=1) /ɪɡˈzekjətə(r)/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=executor&type=2) /ɪɡˈzekjətər/ | - | +| exit | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=exit&type=1) /ˈeksɪt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=exit&type=2) /ˈeksɪt/ | ❌ /ˈeksɪt/ | +| facade | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=facade&type=1) /fə'sɑːd/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=facade&type=2) /fəˈsɑːd/ | ❌ /fəˈsɑːd/ | +| fedora | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=fedora&type=1) /fɪ'dɔːrə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=fedora&type=2) /fɪˈdɔːrə/ | ❌ /fɪˈdɔːrə/ | +| format | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=format&type=1) /'fɔːmæt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=format&type=2) /ˈfɔːrmæt/ | ❌ /ˈfɔːrmæt/ | +| gauge | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=gauge&type=1) /ɡeɪdʒ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=gauge&type=2) /ɡeɪdʒ/ | ❌ /ɡeɪdʒ/ | +| Git | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Git&type=1) /ɡɪt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Git&type=2) /ɡɪt/ | ❌ /ɡɪt/ | +| GNU | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GNU&type=1) /gnu:/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GNU&type=2) /gnuː/ | - | +| Grafana | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Grafana&type=1) /grəˈfɑːnˌɑː/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Grafana&type=2) /grəˈfɑːnˌɑː/ | - | +| GraphQL | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GraphQL&type=1) /græf kju ɛl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GraphQL&type=2) /græf kju ɛl/ | ❌ /græf kju ɛl/ | +| GUI | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GUI&type=1) /ˈɡu:i/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GUI&type=2) /ˈɡu:i/ | - | +| Haskell | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Haskell&type=1) /ˈhæskəl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Haskell&type=2) /ˈhæskəl/ | ❌ /ˈhæskəl/ | +| height | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=height&type=1) /haɪt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=height&type=2) /haɪt/ | ❌ /haɪt/ | +| hidden | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=hidden&type=1) /'hɪdn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=hidden&type=2) /ˈhɪdn/ | ❌ /ˈhɪdn/ | +| image | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=image&type=1) /'ɪmɪdʒ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=image&type=2) /ˈɪmɪdʒ/ | ❌ /ˈɪmɪdʒ/ | +| implement | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=implement&type=1) /'ɪmplɪm(ə)nt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=implement&type=2) /ˈɪmplɪmənt/ | ❌ /ˈɪmplɪmənt/ | +| integer | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=integer&type=1) /'ɪntɪdʒə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=integer&type=2) /ˈɪntɪdʒər/ | ❌ /ˈɪntɪdʒər/ | +| issue | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=issue&type=1) /'ɪʃuː/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=issue&type=2) /ˈɪʃuː/ | ❌ /ˈɪʃuː/ | +| Java | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Java&type=1) /'dʒɑːvə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Java&type=2) /ˈdʒɑːvə/ | - | +| jpg | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=jpg&type=1) /'dʒeɪpeɡ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=jpg&type=2) /'dʒeɪpeɡ/ | ❌ /'dʒeɪpeɡ/ | +| key | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=key&type=1) /kiː/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=key&type=2) /kiː/ | ❌ /kiː/ | +| Kubernetes | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Kubernetes&type=1) /kubз'netɪs/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Kubernetes&type=2) /kuːbə˞'netiz/ | - | +| lambda | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=lambda&type=1) /ˈlæmdə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=lambda&type=2) /ˈlæmdə/ | ❌ /ˈlæmdə/ | +| Ldap | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Ldap&type=1) /el'dæp/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Ldap&type=2) /el'dæp/ | ❌ /el'dæp/ | +| linear | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=linear&type=1) /'lɪnɪə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=linear&type=2) /ˈlɪniər/ | ❌ /ˈlɪniər/ | +| LINQ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=LINQ&type=1) /lɪŋk/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=LINQ&type=2) /lɪŋk/ | ❌ /lɪŋk/ | +| Linux | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Linux&type=1) /'lɪnəks/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Linux&type=2) /ˈlaɪnəks/ | ❌ /ˈlaɪnəks/ | +| locale | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=locale&type=1) /ləʊ'kɑːl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=locale&type=2) /loʊˈkæl/ | ❌ /loʊˈkæl/ | +| Lucene | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Lucene&type=1) /lu'siːn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Lucene&type=2) /lu'siːn/ | ❌ /lu'siːn/ | +| macro | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=macro&type=1) /ˈmækrəʊ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=macro&type=2) /ˈmækroʊ/ | ❌ /ˈmækroʊ/ | +| main | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=main&type=1) /meɪn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=main&type=2) /meɪn/ | ❌ /meɪn/ | +| margin | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=margin&type=1) /'mɑːdʒɪn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=margin&type=2) /ˈmɑːrdʒɪn/ | ❌ /ˈmɑːrdʒɪn/ | +| matrix | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=matrix&type=1) /ˈmeɪtrɪks/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=matrix&type=2) /ˈmeɪtrɪks/ | ❌ /ˈmeɪtrɪks/ | +| maven | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=maven&type=1) /'meɪvn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=maven&type=2) /ˈmeɪvn/ | ❌ /ˈmeɪvn/ | +| max | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=max&type=1) /mæks/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=max&type=2) /mæks/ | ❌ /mæks/ | +| Microsoft | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Microsoft&type=1) /'maikrəusɔft/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Microsoft&type=2) /ˈmaɪkrəsɔːft/ | ❌ /ˈmaɪkrəsɔːft/ | +| miscellaneous | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=miscellaneous&type=1) /ˌmɪsəˈleɪniəs/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=miscellaneous&type=2) /ˌmɪsəˈleɪniəs/ | - | +| module | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=module&type=1) /'mɒdjuːl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=module&type=2) /ˈmɑːdʒuːl/ | ❌ /ˈmɑːdʒuːl/ | +| native | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=native&type=1) /ˈneɪtɪv/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=native&type=2) /ˈneɪtɪv/ | ❌ /ˈneɪtɪv/ | +| null | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=null&type=1) /nʌl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=null&type=2) /nʌl/ | ❌ /nʌl/ | +| obsolete | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=obsolete&type=1) /ˈɒbsəliːt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=obsolete&type=2) /ˌɑːbsəˈliːt/ | - | +| parameter | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=parameter&type=1) /pə'ræmɪtə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=parameter&type=2) /pəˈræmɪtər/ | ❌ /pəˈræmɪtər/ | +| phantom | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=phantom&type=1) /'fæntəm/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=phantom&type=2) /ˈfæntəm/ | ❌ /ˈfæntəm/ | +| privilege | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=privilege&type=1) /'prɪvəlɪdʒ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=privilege&type=2) /ˈprɪvəlɪdʒ/ | ❌ /ˈprɪvəlɪdʒ/ | +| probe | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=probe&type=1) /prəʊb/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=probe&type=2) /proʊb/ | ❌ /proʊb/ | +| Prometheus | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Prometheus&type=1) /prə-ˈmē-thē-əs/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Prometheus&type=2) /pro'miθɪəs/ | - | +| putty | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=putty&type=1) /ˈpʌti/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=putty&type=2) /ˈpʌti/ | ❌ /ˈpʌti/ | +| Qt | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Qt&type=1) /kjuːt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Qt&type=2) /kjuːt/ | - | +| query | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=query&type=1) /'kwɪəri/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=query&type=2) /ˈkwɪri/ | ❌ /ˈkwɪri/ | +| Realm | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Realm&type=1) /relm/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Realm&type=2) /relm/ | ❌ /relm/ | +| reconcile | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=reconcile&type=1) /ˈrekənsaɪl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=reconcile&type=2) /ˈrekənsaɪl/ | - | +| Redux | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Redux&type=1) /ri'dʌks/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Redux&type=2) /ri'dʌks/ | ❌ /ri'dʌks/ | +| resolved | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resolved&type=1) /rɪ'zɒlvd/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resolved&type=2) /rɪˈzɑːlvd/ | ❌ /rɪˈzɑːlvd/ | +| resort | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resort&type=1) /rɪˈzɔ:t/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resort&type=2) /rɪˈzɔːrt/ | ❌ /rɪˈzɔːrt/ | +| resume | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resume&type=1) /rɪ'zju:m/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resume&type=2) /rɪˈzuːm/ | ❌ /rɪˈzuːm/ | +| retina | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=retina&type=1) /'retɪnə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=retina&type=2) /ˈretɪnə/ | ❌ /ˈretɪnə/ | +| route | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=route&type=1) /ruːt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=route&type=2) /ruːt/ | ❌ /ruːt/ | +| safari | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=safari&type=1) /sə'fɑːrɪ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=safari&type=2) /səˈfɑːri/ | ❌ /səˈfɑːri/ | +| San Jose | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=San%20Jose&type=1) /sænhəu'zei/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=San%20Jose&type=2) /sænhəu'zei/ | ❌ /sænhəu'zei/ | +| scala | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=scala&type=1) /ˈskɑːlɑ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=scala&type=2) /ˈskɑːlɑ/ | ❌ /ˈskɑːlɑ/ | +| scheme | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=scheme&type=1) /skiːm/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=scheme&type=2) /skiːm/ | ❌ /skiːm/ | +| segue | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=segue&type=1) /'sɛɡwe/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=segue&type=2) /ˈseɡweɪ/ | ❌ /ˈseɡweɪ/ | +| suite | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=suite&type=1) /swiːt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=suite&type=2) /swiːt/ | ❌ /swiːt/ | +| telemetry | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=telemetry&type=1) /təˈlemətri/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=telemetry&type=2) /təˈlemətri/ | ❌ /təˈlemətri/ | +| thymeleaf | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=thymeleaf&type=1) /ˈtaɪmˌlɪːf/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=thymeleaf&type=2) /ˈtaɪmˌlɪːf/ | ❌ /ˈtaɪmˌlɪːf/ | +| tuple | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=tuple&type=1) /tjʊpəl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=tuple&type=2) /tuːpəl/ | - | +| typical | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=typical&type=1) /'tɪpɪkl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=typical&type=2) /ˈtɪpɪkl/ | ❌ /ˈtɪpɪkl/ | +| Ubuntu | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Ubuntu&type=1) /ʊ'bʊntʊ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Ubuntu&type=2) /ʊ'bʊntʊ/ | ❌ /ʊ'bʊntʊ/ | +| Vagrant | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Vagrant&type=1) /ˈveɪɡrənt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Vagrant&type=2) /ˈveɪɡrənt/ | ❌ /ˈveɪɡrənt/ | +| variable | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=variable&type=1) /'veəriəbl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=variable&type=2) /ˈveriəbl/ | ❌ /ˈveriəbl/ | +| verbose | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=verbose&type=1) /vɜːˈbəʊs/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=verbose&type=2) /vɜːrˈboʊs/ | ❌ /vɜːrˈboʊs/ | +| Vite | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Vite&type=1) /vit/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Vite&type=2) /vit/ | ❌ /vit/ | +| vue | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=vue&type=1) /v'ju:/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=vue&type=2) /v'ju:/ | ❌ /v'ju:/ | +| width | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=width&type=1) /wɪdθ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=width&type=2) /wɪdθ/ | ❌ /wɪdθ/ | +| YouTube | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=YouTube&type=1) /'juː'tjuːb/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=YouTube&type=2) /'juː'tjuːb/ | ❌ /'juː'tjuːb/ | + + +* Kubernetes:当使用简名 ‘Kube’ 称呼 ‘Kubernetes’ 时, 发音则与 ‘cube’(/kjuːb/) 一致 +* 本着简单的原则, 又为了避免程序猿们出现选择困难症, '正确音标'采用了最接近有道词典音频的英式 DJ 音标, 不代表其唯一性 +* 专业在线英语词典请参考: [在线英语词典哪个比较好?](https://www.zhihu.com/question/19707759) + +## 相关链接 + +#### 工具 + +* 浏览器扩展:实时检索英语发音,安装 [chromium 扩展](https://github.com/shimohq/chinese-programmer-wrong-pronunciation/tree/master/tools/chromium_extension/README.md)或[外部独立库](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation-chromium-extension.git) +* 排版更好看的网页:[https://shimohq.github.io/chinese-programmer-wrong-pronunciation/](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/),thanks @antfu +* iOS应用:[猿单词](https://apps.apple.com/cn/app/%E7%8C%BF%E5%8D%95%E8%AF%8D-%E4%B8%AD%E5%9B%BD%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AE%B9%E6%98%93%E5%8F%91%E9%9F%B3%E9%94%99%E8%AF%AF%E7%9A%84%E5%8D%95%E8%AF%8D/id1626487291) + +#### 拓展 + * 真人发音: https://www.bilibili.com/video/bv1nv411i7z3 (by @hailintao) -* 简洁的单词列表,正确读音不用再打开新网页: https://cpwp.netlify.app/ (by @antfu7) * 国际音标严式记音(纽约音)https://github.com/b1f6c1c4/programming-pronunciations-en_US (by @b1f6c1c4) * 单词连读:https://corrector.justsong.cn/ (by [@songquanpeng](https://github.com/songquanpeng/pronunciation-corrector)) -* [iOS app](https://apps.apple.com/cn/app/%E7%8C%BF%E5%8D%95%E8%AF%8D-%E4%B8%AD%E5%9B%BD%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AE%B9%E6%98%93%E5%8F%91%E9%9F%B3%E9%94%99%E8%AF%AF%E7%9A%84%E5%8D%95%E8%AF%8D/id1626487291) (by @Chang12) -* [chromium系浏览器扩展,无页面跳转,实时检索英语发音](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation-chromium-extension.git) (by @jingjingxyk) -### 说明 -1. 本着简单的原则, 又为了避免程序猿们出现选择困难症, '正确音标'采用了最接近有道词典音频的英式 DJ 音标, 不代表其唯一性 -1. 专业在线英语词典请参考: [在线英语词典哪个比较好?](https://www.zhihu.com/question/19707759) +#### Inspired -### 参考资料 1. https://www.zhihu.com/question/19739907 2. https://www.v2ex.com/t/131094 3. https://www.v2ex.com/t/309350 @@ -157,6 +150,28 @@ 5. https://www.v2ex.com/t/246033 6. https://www.v2ex.com/t/342087 -### Star History +## 开发说明 + +项目使用 github pages 托管单词列表的[静态页面](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/)。单词列表数据见:[data.json](https://github.com/Lionad-Morotar/chinese-programmer-wrong-pronunciation/blob/gh-pages/scripts/data.json),每次编译后,会根据最新的单词列表数据重新生成静态页面。 + +#### 如何给项目新增功能? + +1. 修改浏览器插件代码,请使用 master 分支 +2. 修改静态页面代码,请使用 gh-pages 分支 +3. 代码规范,暂无,PR welcome! +4. 提交规范,参考 [Git Commit 日志风格指南](https://open.leancloud.cn/git-commit-message/) + +#### 如何新增或修改单词? + +1. 切换到 gh-pages 分支 +2. 直接在 data.json 的末尾新增单词(不需要手动排序) +3. 提交修改,如“git commit -am 'add: word newword'” +4. 使用 npm version patch 重新打包并递增版本号 + +#### TODO + +见:[TODO.md](https://github.com/Lionad-Morotar/chinese-programmer-wrong-pronunciation/blob/gh-pages/.todo) + +## Star History [![Star History Chart](https://api.star-history.com/svg?repos=shimohq/chinese-programmer-wrong-pronunciation&type=Date)](https://star-history.com/#shimohq/chinese-programmer-wrong-pronunciation&Date) diff --git a/docs/favicon.db74ab0b.ico b/docs/favicon.db74ab0b.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/docs/favicon.db74ab0b.ico differ diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/docs/favicon.ico differ diff --git a/docs/index.56b88b86.js b/docs/index.56b88b86.js new file mode 100644 index 0000000..80c9eab --- /dev/null +++ b/docs/index.56b88b86.js @@ -0,0 +1,13 @@ +const gr=function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const r of i.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&o(r)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerpolicy&&(i.referrerPolicy=s.referrerpolicy),s.crossorigin==="use-credentials"?i.credentials="include":s.crossorigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function o(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}};gr();/** +* (c) Iconify +* +* For the full copyright and license information, please view the license.txt or license.gpl.txt +* files at https://github.com/iconify/iconify +* +* Licensed under Apache 2.0 or GPL 2.0 at your option. +* If derivative product is not compatible with one of licenses, you can pick one of licenses. +* +* @license Apache 2.0 +* @license GPL 2.0 +* @version 2.2.1 +*/const Pt=/^[a-z0-9]+(-[a-z0-9]+)*$/,Ce=Object.freeze({left:0,top:0,width:16,height:16,rotate:0,vFlip:!1,hFlip:!1});function ko(e){return{...Ce,...e}}function mr(e,t){const n={...e};for(const o in Ce){const s=o;if(t[s]!==void 0){const i=t[s];if(n[s]===void 0){n[s]=i;continue}switch(s){case"rotate":n[s]=(n[s]+i)%4;break;case"hFlip":case"vFlip":n[s]=i!==n[s];break;default:n[s]=i}}}return n}function ts(e,t,n=!1){function o(i,r){if(e.icons[i]!==void 0)return Object.assign({},e.icons[i]);if(r>5)return null;const c=e.aliases;if(c&&c[i]!==void 0){const f=c[i],h=o(f.parent,r+1);return h&&mr(h,f)}const l=e.chars;return!r&&l&&l[i]!==void 0?o(l[i],r+1):null}const s=o(t,0);if(s)for(const i in Ce)s[i]===void 0&&e[i]!==void 0&&(s[i]=e[i]);return s&&n?ko(s):s}function _r(e){for(const t in Ce)if(e[t]!==void 0)return!0;return!1}function Rs(e,t,n){n=n||{};const o=[];if(typeof e!="object"||typeof e.icons!="object")return o;e.not_found instanceof Array&&e.not_found.forEach(r=>{t(r,null),o.push(r)});const s=e.icons;Object.keys(s).forEach(r=>{const c=ts(e,r,!0);c&&(t(r,c),o.push(r))});const i=n.aliases||"all";if(i!=="none"&&typeof e.aliases=="object"){const r=e.aliases;Object.keys(r).forEach(c=>{if(i==="variations"&&_r(r[c]))return;const l=ts(e,c,!0);l&&(t(c,l),o.push(c))})}return o}const Yn={provider:"string",aliases:"object",not_found:"object"};for(const e in Ce)Yn[e]=typeof Ce[e];function $s(e){if(typeof e!="object"||e===null)return null;const t=e;if(typeof t.prefix!="string"||!e.icons||typeof e.icons!="object")return null;for(const s in Yn)if(e[s]!==void 0&&typeof e[s]!==Yn[s])return null;const n=t.icons;for(const s in n){const i=n[s];if(!s.match(Pt)||typeof i.body!="string")return null;for(const r in Ce)if(i[r]!==void 0&&typeof i[r]!=typeof Ce[r])return null}const o=t.aliases;if(o)for(const s in o){const i=o[s],r=i.parent;if(!s.match(Pt)||typeof r!="string"||!n[r]&&!o[r])return null;for(const c in Ce)if(i[c]!==void 0&&typeof i[c]!=typeof Ce[c])return null}return t}const wt=(e,t,n,o="")=>{const s=e.split(":");if(e.slice(0,1)==="@"){if(s.length<2||s.length>3)return null;o=s.shift().slice(1)}if(s.length>3||!s.length)return null;if(s.length>1){const c=s.pop(),l=s.pop(),f={provider:s.length>0?s[0]:o,prefix:l,name:c};return t&&!ut(f)?null:f}const i=s[0],r=i.split("-");if(r.length>1){const c={provider:o,prefix:r.shift(),name:r.join("-")};return t&&!ut(c)?null:c}if(n&&o===""){const c={provider:o,prefix:"",name:i};return t&&!ut(c,n)?null:c}return null},ut=(e,t)=>e?!!((e.provider===""||e.provider.match(Pt))&&(t&&e.prefix===""||e.prefix.match(Pt))&&e.name.match(Pt)):!1,Ds=1;let De=Object.create(null);try{const e=window||self;e&&e._iconifyStorage.version===Ds&&(De=e._iconifyStorage.storage)}catch{}function br(){try{const e=window||self;e&&!e._iconifyStorage&&(e._iconifyStorage={version:Ds,storage:De})}catch{}}function yr(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:Object.create(null)}}function Oe(e,t){De[e]===void 0&&(De[e]=Object.create(null));const n=De[e];return n[t]===void 0&&(n[t]=yr(e,t)),n[t]}function xo(e,t){if(!$s(t))return[];const n=Date.now();return Rs(t,(o,s)=>{s?e.icons[o]=s:e.missing[o]=n})}function wr(e,t,n){try{if(typeof n.body=="string")return e.icons[t]=Object.freeze(ko(n)),!0}catch{}return!1}function Co(e,t){const n=e.icons[t];return n===void 0?null:n}function vr(e,t){let n=[],o;return typeof e=="string"?o=[e]:o=Object.keys(De),o.forEach(s=>{let i;typeof s=="string"&&typeof t=="string"?i=[t]:i=De[s]===void 0?[]:Object.keys(De[s]),i.forEach(r=>{const c=Oe(s,r),l=Object.keys(c.icons).map(f=>(s!==""?"@"+s+":":"")+r+":"+f);n=n.concat(l)})}),n}let Rt=!1;function kr(e){return typeof e=="boolean"&&(Rt=e),Rt}function _n(e){const t=typeof e=="string"?wt(e,!0,Rt):e;return t?Co(Oe(t.provider,t.prefix),t.name):null}function Hs(e,t){const n=wt(e,!0,Rt);if(!n)return!1;const o=Oe(n.provider,n.prefix);return wr(o,n.name,t)}function Us(e,t){if(typeof e!="object")return!1;if(typeof t!="string"&&(t=typeof e.provider=="string"?e.provider:""),Rt&&t===""&&(typeof e.prefix!="string"||e.prefix==="")){let o=!1;return $s(e)&&(e.prefix="",Rs(e,(s,i)=>{i&&Hs(s,i)&&(o=!0)})),o}if(typeof e.prefix!="string"||!ut({provider:t,prefix:e.prefix,name:"a"}))return!1;const n=Oe(t,e.prefix);return!!xo(n,e)}function xr(e){return _n(e)!==null}function Cr(e){const t=_n(e);return t?{...t}:null}const $t=Object.freeze({inline:!1,width:null,height:null,hAlign:"center",vAlign:"middle",slice:!1,hFlip:!1,vFlip:!1,rotate:0});function bn(e,t){const n={};for(const o in e){const s=o;if(n[s]=e[s],t[s]===void 0)continue;const i=t[s];switch(s){case"inline":case"slice":typeof i=="boolean"&&(n[s]=i);break;case"hFlip":case"vFlip":i===!0&&(n[s]=!n[s]);break;case"hAlign":case"vAlign":typeof i=="string"&&i!==""&&(n[s]=i);break;case"width":case"height":(typeof i=="string"&&i!==""||typeof i=="number"&&i||i===null)&&(n[s]=i);break;case"rotate":typeof i=="number"&&(n[s]+=i);break}}return n}const Er=/(-?[0-9.]*[0-9]+[0-9.]*)/g,Ir=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function nn(e,t,n){if(t===1)return e;if(n=n===void 0?100:n,typeof e=="number")return Math.ceil(e*t*n)/n;if(typeof e!="string")return e;const o=e.split(Er);if(o===null||!o.length)return e;const s=[];let i=o.shift(),r=Ir.test(i);for(;;){if(r){const c=parseFloat(i);isNaN(c)?s.push(i):s.push(Math.ceil(c*t*n)/n)}else s.push(i);if(i=o.shift(),i===void 0)return s.join("");r=!r}}function Or(e){let t="";switch(e.hAlign){case"left":t+="xMin";break;case"right":t+="xMax";break;default:t+="xMid"}switch(e.vAlign){case"top":t+="YMin";break;case"bottom":t+="YMax";break;default:t+="YMid"}return t+=e.slice?" slice":" meet",t}function Eo(e,t){const n={left:e.left,top:e.top,width:e.width,height:e.height};let o=e.body;[e,t].forEach(c=>{const l=[],f=c.hFlip,h=c.vFlip;let p=c.rotate;f?h?p+=2:(l.push("translate("+(n.width+n.left).toString()+" "+(0-n.top).toString()+")"),l.push("scale(-1 1)"),n.top=n.left=0):h&&(l.push("translate("+(0-n.left).toString()+" "+(n.height+n.top).toString()+")"),l.push("scale(1 -1)"),n.top=n.left=0);let g;switch(p<0&&(p-=Math.floor(p/4)*4),p=p%4,p){case 1:g=n.height/2+n.top,l.unshift("rotate(90 "+g.toString()+" "+g.toString()+")");break;case 2:l.unshift("rotate(180 "+(n.width/2+n.left).toString()+" "+(n.height/2+n.top).toString()+")");break;case 3:g=n.width/2+n.left,l.unshift("rotate(-90 "+g.toString()+" "+g.toString()+")");break}p%2===1&&((n.left!==0||n.top!==0)&&(g=n.left,n.left=n.top,n.top=g),n.width!==n.height&&(g=n.width,n.width=n.height,n.height=g)),l.length&&(o=''+o+"")});let s,i;t.width===null&&t.height===null?(i="1em",s=nn(i,n.width/n.height)):t.width!==null&&t.height!==null?(s=t.width,i=t.height):t.height!==null?(i=t.height,s=nn(i,n.width/n.height)):(s=t.width,i=nn(s,n.height/n.width)),s==="auto"&&(s=n.width),i==="auto"&&(i=n.height),s=typeof s=="string"?s:s.toString()+"",i=typeof i=="string"?i:i.toString()+"";const r={attributes:{width:s,height:i,preserveAspectRatio:Or(t),viewBox:n.left.toString()+" "+n.top.toString()+" "+n.width.toString()+" "+n.height.toString()},body:o};return t.inline&&(r.inline=!0),r}function Ar(e,t){return Eo(ko(e),t?bn($t,t):$t)}const jr=/\sid="(\S+)"/g,Tr="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let Pr=0;function Bs(e,t=Tr){const n=[];let o;for(;o=jr.exec(e);)n.push(o[1]);return n.length&&n.forEach(s=>{const i=typeof t=="function"?t(s):t+(Pr++).toString(),r=s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+r+')([")]|\\.[a-z])',"g"),"$1"+i+"$3")}),e}const Ks="iconify2",zt="iconify",qs=zt+"-count",zs=zt+"-version",Ws=36e5,Sr=168,ft={local:!0,session:!0};let Qn=!1;const Vs={local:0,session:0},Js={local:[],session:[]};let Qt=typeof window=="undefined"?{}:window;function Ys(e){const t=e+"Storage";try{if(Qt&&Qt[t]&&typeof Qt[t].length=="number")return Qt[t]}catch{}return ft[e]=!1,null}function Io(e,t,n){try{return e.setItem(qs,n.toString()),Vs[t]=n,!0}catch{return!1}}function Qs(e){const t=e.getItem(qs);if(t){const n=parseInt(t);return n||0}return 0}function Fr(e,t){try{e.setItem(zs,Ks)}catch{}Io(e,t,0)}function Mr(e){try{const t=Qs(e);for(let n=0;n{if(Qn)return;Qn=!0;const e=Math.floor(Date.now()/Ws)-Sr;function t(n){const o=Ys(n);if(!o)return;const s=i=>{const r=zt+i.toString(),c=o.getItem(r);if(typeof c!="string")return!1;let l=!0;try{const f=JSON.parse(c);if(typeof f!="object"||typeof f.cached!="number"||f.cached0}}catch{l=!1}return l||o.removeItem(r),l};try{const i=o.getItem(zs);if(i!==Ks){i&&Mr(o),Fr(o,n);return}let r=Qs(o);for(let c=r-1;c>=0;c--)s(c)||(c===r-1?r--:Js[n].push(c));Io(o,n,r)}catch{}}for(const n in ft)t(n)},Lr=(e,t)=>{Qn||Xs();function n(o){if(!ft[o])return!1;const s=Ys(o);if(!s)return!1;let i=Js[o].shift();if(i===void 0&&(i=Vs[o],!Io(s,o,i+1)))return!1;try{const r={cached:Math.floor(Date.now()/Ws),provider:e,data:t};s.setItem(zt+i.toString(),JSON.stringify(r))}catch{return!1}return!0}!Object.keys(t.icons).length||(t.not_found&&(t=Object.assign({},t),delete t.not_found),n("local")||n("session"))},Xn={};function Zs(e,t){switch(e){case"local":case"session":ft[e]=t;break;case"all":for(const n in ft)ft[n]=t;break}}const Zn=Object.create(null);function Gs(e,t){Zn[e]=t}function Gn(e){return Zn[e]||Zn[""]}function Oo(e){let t;if(typeof e.resources=="string")t=[e.resources];else if(t=e.resources,!(t instanceof Array)||!t.length)return null;return{resources:t,path:e.path===void 0?"/":e.path,maxURL:e.maxURL?e.maxURL:500,rotate:e.rotate?e.rotate:750,timeout:e.timeout?e.timeout:5e3,random:e.random===!0,index:e.index?e.index:0,dataAfterTimeout:e.dataAfterTimeout!==!1}}const yn=Object.create(null),It=["https://api.simplesvg.com","https://api.unisvg.com"],on=[];for(;It.length>0;)It.length===1||Math.random()>.5?on.push(It.shift()):on.push(It.pop());yn[""]=Oo({resources:["https://api.iconify.design"].concat(on)});function ei(e,t){const n=Oo(t);return n===null?!1:(yn[e]=n,!0)}function wn(e){return yn[e]}function Nr(){return Object.keys(yn)}const Ao=(e,t)=>{let n=e,o=n.indexOf("?")!==-1;function s(i){switch(typeof i){case"boolean":return i?"true":"false";case"number":return encodeURIComponent(i);case"string":return encodeURIComponent(i);default:throw new Error("Invalid parameter")}}return Object.keys(t).forEach(i=>{let r;try{r=s(t[i])}catch{return}n+=(o?"&":"?")+encodeURIComponent(i)+"="+r,o=!0}),n},ti={},sn={},Rr=()=>{let e;try{if(e=fetch,typeof e=="function")return e}catch{}return null};let fn=Rr();function $r(e){fn=e}function Dr(){return fn}function Hr(e,t){const n=wn(e);if(!n)return 0;let o;if(!n.maxURL)o=0;else{let i=0;n.resources.forEach(c=>{i=Math.max(i,c.length)});const r=Ao(t+".json",{icons:""});o=n.maxURL-i-n.path.length-r.length}const s=e+":"+t;return sn[e]=n.path,ti[s]=o,o}function Ur(e){return e===404}const Br=(e,t,n)=>{const o=[];let s=ti[t];s===void 0&&(s=Hr(e,t));const i="icons";let r={type:i,provider:e,prefix:t,icons:[]},c=0;return n.forEach((l,f)=>{c+=l.length+1,c>=s&&f>0&&(o.push(r),r={type:i,provider:e,prefix:t,icons:[]},c=l.length),r.icons.push(l)}),o.push(r),o};function Kr(e){if(typeof e=="string"){if(sn[e]===void 0){const t=wn(e);if(!t)return"/";sn[e]=t.path}return sn[e]}return"/"}const qr=(e,t,n)=>{if(!fn){n("abort",424);return}let o=Kr(t.provider);switch(t.type){case"icons":{const i=t.prefix,c=t.icons.join(",");o+=Ao(i+".json",{icons:c});break}case"custom":{const i=t.uri;o+=i.slice(0,1)==="/"?i.slice(1):i;break}default:n("abort",400);return}let s=503;fn(e+o).then(i=>{const r=i.status;if(r!==200){setTimeout(()=>{n(Ur(r)?"abort":"next",r)});return}return s=501,i.json()}).then(i=>{if(typeof i!="object"||i===null){setTimeout(()=>{n("next",s)});return}setTimeout(()=>{n("success",i)})}).catch(()=>{n("next",s)})},zr={prepare:Br,send:qr};function Wr(e){const t={loaded:[],missing:[],pending:[]},n=Object.create(null);e.sort((s,i)=>s.provider!==i.provider?s.provider.localeCompare(i.provider):s.prefix!==i.prefix?s.prefix.localeCompare(i.prefix):s.name.localeCompare(i.name));let o={provider:"",prefix:"",name:""};return e.forEach(s=>{if(o.name===s.name&&o.prefix===s.prefix&&o.provider===s.provider)return;o=s;const i=s.provider,r=s.prefix,c=s.name;n[i]===void 0&&(n[i]=Object.create(null));const l=n[i];l[r]===void 0&&(l[r]=Oe(i,r));const f=l[r];let h;f.icons[c]!==void 0?h=t.loaded:r===""||f.missing[c]!==void 0?h=t.missing:h=t.pending;const p={provider:i,prefix:r,name:c};h.push(p)}),t}const He=Object.create(null),Nn=Object.create(null);function ni(e,t){e.forEach(n=>{const o=n.provider;if(He[o]===void 0)return;const s=He[o],i=n.prefix,r=s[i];r&&(s[i]=r.filter(c=>c.id!==t))})}function Vr(e,t){Nn[e]===void 0&&(Nn[e]=Object.create(null));const n=Nn[e];n[t]||(n[t]=!0,setTimeout(()=>{if(n[t]=!1,He[e]===void 0||He[e][t]===void 0)return;const o=He[e][t].slice(0);if(!o.length)return;const s=Oe(e,t);let i=!1;o.forEach(r=>{const c=r.icons,l=c.pending.length;c.pending=c.pending.filter(f=>{if(f.prefix!==t)return!0;const h=f.name;if(s.icons[h]!==void 0)c.loaded.push({provider:e,prefix:t,name:h});else if(s.missing[h]!==void 0)c.missing.push({provider:e,prefix:t,name:h});else return i=!0,!0;return!1}),c.pending.length!==l&&(i||ni([{provider:e,prefix:t}],r.id),r.callback(c.loaded.slice(0),c.missing.slice(0),c.pending.slice(0),r.abort))})}))}let Jr=0;function Yr(e,t,n){const o=Jr++,s=ni.bind(null,n,o);if(!t.pending.length)return s;const i={id:o,icons:t,callback:e,abort:s};return n.forEach(r=>{const c=r.provider,l=r.prefix;He[c]===void 0&&(He[c]=Object.create(null));const f=He[c];f[l]===void 0&&(f[l]=[]),f[l].push(i)}),s}function Qr(e,t=!0,n=!1){const o=[];return e.forEach(s=>{const i=typeof s=="string"?wt(s,!1,n):s;(!t||ut(i,n))&&o.push({provider:i.provider,prefix:i.prefix,name:i.name})}),o}var ns={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function Xr(e,t,n,o){const s=e.resources.length,i=e.random?Math.floor(Math.random()*s):e.index;let r;if(e.random){let N=e.resources.slice(0);for(r=[];N.length>1;){const Z=Math.floor(Math.random()*N.length);r.push(N[Z]),N=N.slice(0,Z).concat(N.slice(Z+1))}r=r.concat(N)}else r=e.resources.slice(i).concat(e.resources.slice(0,i));const c=Date.now();let l="pending",f=0,h,p=null,g=[],y=[];typeof o=="function"&&y.push(o);function E(){p&&(clearTimeout(p),p=null)}function A(){l==="pending"&&(l="aborted"),E(),g.forEach(N=>{N.status==="pending"&&(N.status="aborted")}),g=[]}function j(N,Z){Z&&(y=[]),typeof N=="function"&&y.push(N)}function T(){return{startTime:c,payload:t,status:l,queriesSent:f,queriesPending:g.length,subscribe:j,abort:A}}function Y(){l="failed",y.forEach(N=>{N(void 0,h)})}function $(){g.forEach(N=>{N.status==="pending"&&(N.status="aborted")}),g=[]}function D(N,Z,F){const B=Z!=="success";switch(g=g.filter(U=>U!==N),l){case"pending":break;case"failed":if(B||!e.dataAfterTimeout)return;break;default:return}if(Z==="abort"){h=F,Y();return}if(B){h=F,g.length||(r.length?Q():Y());return}if(E(),$(),!e.random){const U=e.resources.indexOf(N.resource);U!==-1&&U!==e.index&&(e.index=U)}l="completed",y.forEach(U=>{U(F)})}function Q(){if(l!=="pending")return;E();const N=r.shift();if(N===void 0){if(g.length){p=setTimeout(()=>{E(),l==="pending"&&($(),Y())},e.timeout);return}Y();return}const Z={status:"pending",resource:N,callback:(F,B)=>{D(Z,F,B)}};g.push(Z),f++,p=setTimeout(Q,e.rotate),n(N,t,Z.callback)}return setTimeout(Q),T}function Zr(e){if(typeof e!="object"||typeof e.resources!="object"||!(e.resources instanceof Array)||!e.resources.length)throw new Error("Invalid Reduncancy configuration");const t=Object.create(null);let n;for(n in ns)e[n]!==void 0?t[n]=e[n]:t[n]=ns[n];return t}function oi(e){const t=Zr(e);let n=[];function o(){n=n.filter(c=>c().status==="pending")}function s(c,l,f){const h=Xr(t,c,l,(p,g)=>{o(),f&&f(p,g)});return n.push(h),h}function i(c){const l=n.find(f=>c(f));return l!==void 0?l:null}return{query:s,find:i,setIndex:c=>{t.index=c},getIndex:()=>t.index,cleanup:o}}function os(){}const Rn=Object.create(null);function Gr(e){if(Rn[e]===void 0){const t=wn(e);if(!t)return;const n=oi(t),o={config:t,redundancy:n};Rn[e]=o}return Rn[e]}function si(e,t,n){let o,s;if(typeof e=="string"){const i=Gn(e);if(!i)return n(void 0,424),os;s=i.send;const r=Gr(e);r&&(o=r.redundancy)}else{const i=Oo(e);if(i){o=oi(i);const r=e.resources?e.resources[0]:"",c=Gn(r);c&&(s=c.send)}}return!o||!s?(n(void 0,424),os):o.query(t,s,n)().abort}function ss(){}const Ee=Object.create(null),$n=Object.create(null),Dn=Object.create(null),Hn=Object.create(null);function ec(e,t){Dn[e]===void 0&&(Dn[e]=Object.create(null));const n=Dn[e];n[t]||(n[t]=!0,setTimeout(()=>{n[t]=!1,Vr(e,t)}))}const is=Object.create(null);function tc(e,t,n){function o(){const c=(e===""?"":"@"+e+":")+t,l=Math.floor(Date.now()/6e4);is[c]{i[t]=!1;const c=s[t];delete s[t];const l=Gn(e);if(!l){o();return}l.prepare(e,t,c).forEach(h=>{si(e,h,(p,g)=>{const y=Oe(e,t);if(typeof p!="object"){if(g!==404)return;const E=Date.now();h.icons.forEach(A=>{y.missing[A]=E})}else try{const E=xo(y,p);if(!E.length)return;const A=r[t];E.forEach(j=>{delete A[j]}),Xn.store&&Xn.store(e,p)}catch(E){console.error(E)}ec(e,t)})})}))}const rs=e=>{const t=e.provider,n=e.prefix;return Ee[t]&&Ee[t][n]&&Ee[t][n][e.name]!==void 0},jo=(e,t)=>{const n=Qr(e,!0,kr()),o=Wr(n);if(!o.pending.length){let f=!0;return t&&setTimeout(()=>{f&&t(o.loaded,o.missing,o.pending,ss)}),()=>{f=!1}}const s=Object.create(null),i=[];let r,c;o.pending.forEach(f=>{const h=f.provider,p=f.prefix;if(p===c&&h===r)return;r=h,c=p,i.push({provider:h,prefix:p}),Ee[h]===void 0&&(Ee[h]=Object.create(null));const g=Ee[h];g[p]===void 0&&(g[p]=Object.create(null)),s[h]===void 0&&(s[h]=Object.create(null));const y=s[h];y[p]===void 0&&(y[p]=[])});const l=Date.now();return o.pending.forEach(f=>{const h=f.provider,p=f.prefix,g=f.name,y=Ee[h][p];y[g]===void 0&&(y[g]=l,s[h][p].push(g))}),i.forEach(f=>{const h=f.provider,p=f.prefix;s[h][p].length&&tc(h,p,s[h][p])}),t?Yr(t,o,i):ss},nc=e=>new Promise((t,n)=>{const o=typeof e=="string"?wt(e):e;jo([o||e],s=>{if(s.length&&o){const i=Oe(o.provider,o.prefix),r=Co(i,o.name);if(r){t(r);return}}n(e)})}),ct="iconifyFinder"+Date.now(),St="iconifyData"+Date.now();function ii(e,t,n,o){let s;try{s=document.createElement("span")}catch{return o?"":null}const i=Eo(n,bn($t,t)),r=e.element,c=e.finder,l=e.name,f=r?r.getAttribute("class"):"",h=c?c.classFilter(f?f.split(/\s+/):[]):[],p="iconify iconify--"+l.prefix+(l.provider===""?"":" iconify--"+l.provider)+(h.length?" "+h.join(" "):""),g='";s.innerHTML=g;const y=s.childNodes[0],E=y.style,A=i.attributes;if(Object.keys(A).forEach(T=>{y.setAttribute(T,A[T])}),i.inline&&(E.verticalAlign="-0.125em"),r){const T=r.attributes;for(let $=0;$document.documentElement})}function sc(e){Ge=Ge.filter(t=>{const n=typeof t.node=="function"?t.node():t.node;return e!==n})}function Vt(){return Ge}function ic(e){const t=document;t.readyState==="complete"||t.readyState!=="loading"&&!t.documentElement.doScroll?e():(t.addEventListener("DOMContentLoaded",e),window.addEventListener("load",e))}let Ft=null;const rc={childList:!0,subtree:!0,attributes:!0};function ci(e){if(!e.observer)return;const t=e.observer;t.pendingScan||(t.pendingScan=setTimeout(()=>{delete t.pendingScan,Ft&&Ft(e)}))}function cc(e,t){if(!e.observer)return;const n=e.observer;if(!n.pendingScan)for(let o=0;o0||s.type==="attributes"&&s.target[ct]!==void 0){n.paused||ci(e);return}}}function li(e,t){e.observer.instance.observe(t,rc)}function an(e){let t=e.observer;if(t&&t.instance)return;const n=typeof e.node=="function"?e.node():e.node;!n||(t||(t={paused:0},e.observer=t),t.instance=new MutationObserver(cc.bind(null,e)),li(e,n),t.paused||ci(e))}function cs(){Vt().forEach(an)}function ui(e){if(!e.observer)return;const t=e.observer;t.pendingScan&&(clearTimeout(t.pendingScan),delete t.pendingScan),t.instance&&(t.instance.disconnect(),delete t.instance)}function lc(e){const t=Ft!==null;if(Ft!==e&&(Ft=e,t&&Vt().forEach(ui)),t){cs();return}ic(cs)}function eo(e){(e?[e]:Vt()).forEach(t=>{if(!t.observer){t.observer={paused:1};return}const n=t.observer;if(n.paused++,n.paused>1||!n.instance)return;n.instance.disconnect()})}function uc(e){if(e){const t=Wt(e);t&&eo(t)}else eo()}function to(e){(e?[e]:Vt()).forEach(t=>{if(!t.observer){an(t);return}const n=t.observer;if(n.paused&&(n.paused--,!n.paused)){const o=typeof t.node=="function"?t.node():t.node;if(o)n.instance?li(t,o):an(t);else return}})}function fc(e){if(e){const t=Wt(e);t&&to(t)}else to()}function fi(e,t=!1){const n=ri(e,t);return an(n),n}function ai(e){const t=Wt(e);t&&(ui(t),sc(e))}const no=[];function ac(e){no.indexOf(e)===-1&&no.push(e)}function ls(e){return typeof e=="string"&&(e=wt(e)),e===null||!ut(e)?null:e}function hc(e,t){const n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(let s=0;s{const s=o.find(e);Array.prototype.forEach.call(s,i=>{const r=i;if(r[ct]!==void 0&&r[ct]!==o)return;const c=ls(o.name(r));if(c===null)return;r[ct]=o;const l={element:r,finder:o,name:c};t.push(l)})});const n=e.querySelectorAll("svg.iconify");return Array.prototype.forEach.call(n,o=>{const s=o,i=s[ct],r=s[St];if(!i||!r)return;const c=ls(i.name(s));if(c===null)return;let l=!1,f;if(c.prefix!==r.name.prefix||c.name!==r.name.name?l=!0:(f=i.customisations(s),hc(r.customisations,f)||(l=!0)),l){const h={element:s,finder:i,name:c,customisations:f};t.push(h)}}),t}let At=!1;function dc(){At||(At=!0,setTimeout(()=>{At&&(At=!1,mt())}))}const gc=(e,t)=>e!==null&&t!==null&&e.name===t.name&&e.prefix===t.prefix;function mc(e){const t=Wt(e);t?mt(t):mt({node:e,temporary:!0},!0)}function mt(e,t=!1){At=!1;const n=Object.create(null);(e?[e]:Vt()).forEach(o=>{const s=typeof o.node=="function"?o.node():o.node;if(!s||!s.querySelectorAll)return;let i=!1,r=!1;pc(s).forEach(c=>{const l=c.element,f=c.name,h=f.provider,p=f.prefix,g=f.name;let y=l[St];if(y!==void 0&&gc(y.name,f))switch(y.status){case"missing":return;case"loading":if(rs({provider:h,prefix:p,name:g})){i=!0;return}}const E=Oe(h,p);if(E.icons[g]!==void 0){!r&&o.observer&&(eo(o),r=!0);const A=c.customisations!==void 0?c.customisations:c.finder.customisations(l);ii(c,A,Co(E,g));return}if(E.missing[g]){y={name:f,status:"missing",customisations:{}},l[St]=y;return}if(!rs({provider:h,prefix:p,name:g})){n[h]===void 0&&(n[h]=Object.create(null));const A=n[h];A[p]===void 0&&(A[p]=Object.create(null)),A[p][g]=!0}y={name:f,status:"loading",customisations:{}},l[St]=y,i=!0}),o.temporary&&!i?ai(s):t&&i?fi(s,!0):r&&o.observer&&to(o)}),Object.keys(n).forEach(o=>{const s=n[o];Object.keys(s).forEach(i=>{jo(Object.keys(s[i]).map(r=>({provider:o,prefix:i,name:r})),dc)})})}function _c(e,t=0){const n=e.replace(/^-?[0-9.]*/,"");function o(s){for(;s<0;)s+=4;return s%4}if(n===""){const s=parseInt(e);return isNaN(s)?0:o(s)}else if(n!==e){let s=0;switch(n){case"%":s=25;break;case"deg":s=90}if(s){let i=parseFloat(e.slice(0,e.length-n.length));return isNaN(i)?0:(i=i/s,i%1===0?o(i):0)}}return t}const hi=/[\s,]+/;function bc(e,t){t.split(hi).forEach(n=>{switch(n.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function yc(e,t){t.split(hi).forEach(n=>{const o=n.trim();switch(o){case"left":case"center":case"right":e.hAlign=o;break;case"top":case"middle":case"bottom":e.vAlign=o;break;case"slice":case"crop":e.slice=!0;break;case"meet":e.slice=!1}})}function ot(e,t){return e.hasAttribute(t)}function Ot(e,t){return e.getAttribute(t)}function wc(e,t){const n=e.getAttribute(t);return n===t||n==="true"?!0:n===""||n==="false"?!1:null}const vc=["inline","hFlip","vFlip"],kc=["width","height"],us="iconify",oo="iconify-inline",xc="i."+us+", span."+us+", i."+oo+", span."+oo,Cc={find:e=>e.querySelectorAll(xc),name:e=>ot(e,"data-icon")?Ot(e,"data-icon"):null,customisations:(e,t={inline:!1})=>{const n=t,o=e.getAttribute("class");if((o?o.split(/\s+/):[]).indexOf(oo)!==-1&&(n.inline=!0),ot(e,"data-rotate")){const i=_c(Ot(e,"data-rotate"));i&&(n.rotate=i)}return ot(e,"data-flip")&&bc(n,Ot(e,"data-flip")),ot(e,"data-align")&&yc(n,Ot(e,"data-align")),vc.forEach(i=>{if(ot(e,"data-"+i)){const r=wc(e,"data-"+i);typeof r=="boolean"&&(n[i]=r)}}),kc.forEach(i=>{if(ot(e,"data-"+i)){const r=Ot(e,"data-"+i);r!==""&&(n[i]=r)}}),n},classFilter:e=>{const t=[];return e.forEach(n=>{n!=="iconify"&&n!==""&&n.slice(0,9)!=="iconify--"&&t.push(n)}),t}};function pi(e,t,n){const o=_n(e);if(!o)return null;const s=wt(e),i=bn($t,typeof t=="object"?t:{});return ii({name:s},i,o,n)}function Ec(){return"2.2.1"}function Ic(e,t){return pi(e,t,!1)}function Oc(e,t){return pi(e,t,!0)}function Ac(e,t){const n=_n(e);if(!n)return null;const o=bn($t,typeof t=="object"?t:{});return Eo(n,o)}function jc(e){e?mc(e):mt()}if(typeof document!="undefined"&&typeof window!="undefined"){oc(),ac(Cc);const e=window;if(e.IconifyPreload!==void 0){const t=e.IconifyPreload,n="Invalid IconifyPreload syntax.";typeof t=="object"&&t!==null&&(t instanceof Array?t:[t]).forEach(o=>{try{(typeof o!="object"||o===null||o instanceof Array||typeof o.icons!="object"||typeof o.prefix!="string"||!Us(o))&&console.error(n)}catch{console.error(n)}})}setTimeout(()=>{lc(mt),mt()})}function Tc(e,t){Zs(e,t!==!1)}function Pc(e){Zs(e,!0)}Gs("",zr);if(typeof document!="undefined"&&typeof window!="undefined"){Xn.store=Lr,Xs();const e=window;if(e.IconifyProviders!==void 0){const t=e.IconifyProviders;if(typeof t=="object"&&t!==null)for(const n in t){const o="IconifyProviders["+n+"] is invalid.";try{const s=t[n];if(typeof s!="object"||!s||s.resources===void 0)continue;ei(n,s)||console.error(o)}catch{console.error(o)}}}}const Sc={getAPIConfig:wn,setAPIModule:Gs,sendAPIQuery:si,setFetch:$r,getFetch:Dr,listAPIProviders:Nr,mergeParams:Ao},di={_api:Sc,addAPIProvider:ei,loadIcons:jo,loadIcon:nc,iconExists:xr,getIcon:Cr,listIcons:vr,addIcon:Hs,addCollection:Us,shareStorage:br,replaceIDs:Bs,calculateSize:nn,buildIcon:Ar,getVersion:Ec,renderSVG:Ic,renderHTML:Oc,renderIcon:Ac,scan:jc,observe:fi,stopObserving:ai,pauseObserver:uc,resumeObserver:fc,enableCache:Tc,disableCache:Pc};try{self.Iconify===void 0&&(self.Iconify=di)}catch{}function To(e,t){const n=Object.create(null),o=e.split(",");for(let s=0;s!!n[s.toLowerCase()]:s=>!!n[s]}const Fc="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Mc=To(Fc);function gi(e){return!!e||e===""}function Po(e){if(S(e)){const t={};for(let n=0;n{if(n){const o=n.split(Nc);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function _t(e){let t="";if(G(e))t=e;else if(S(e))for(let n=0;nG(e)?e:e==null?"":S(e)||ee(e)&&(e.toString===yi||!M(e.toString))?JSON.stringify(e,mi,2):String(e),mi=(e,t)=>t&&t.__v_isRef?mi(e,t.value):ht(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,s])=>(n[`${o} =>`]=s,n),{})}:_i(t)?{[`Set(${t.size})`]:[...t.values()]}:ee(t)&&!S(t)&&!wi(t)?String(t):t,W={},at=[],ye=()=>{},$c=()=>!1,Dc=/^on[^a-z]/,vn=e=>Dc.test(e),So=e=>e.startsWith("onUpdate:"),oe=Object.assign,Fo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Hc=Object.prototype.hasOwnProperty,L=(e,t)=>Hc.call(e,t),S=Array.isArray,ht=e=>kn(e)==="[object Map]",_i=e=>kn(e)==="[object Set]",M=e=>typeof e=="function",G=e=>typeof e=="string",Mo=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",bi=e=>ee(e)&&M(e.then)&&M(e.catch),yi=Object.prototype.toString,kn=e=>yi.call(e),Uc=e=>kn(e).slice(8,-1),wi=e=>kn(e)==="[object Object]",Lo=e=>G(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,rn=To(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),xn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Bc=/-(\w)/g,bt=xn(e=>e.replace(Bc,(t,n)=>n?n.toUpperCase():"")),Kc=/\B([A-Z])/g,vt=xn(e=>e.replace(Kc,"-$1").toLowerCase()),vi=xn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Un=xn(e=>e?`on${vi(e)}`:""),Dt=(e,t)=>!Object.is(e,t),Bn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},qc=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let fs;const zc=()=>fs||(fs=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});let ke;class Wc{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&ke&&(this.parent=ke,this.index=(ke.scopes||(ke.scopes=[])).push(this)-1)}run(t){if(this.active){const n=ke;try{return ke=this,t()}finally{ke=n}}}on(){ke=this}off(){ke=this.parent}stop(t){if(this.active){let n,o;for(n=0,o=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},ki=e=>(e.w&Ke)>0,xi=e=>(e.n&Ke)>0,Jc=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let o=0;o{(f==="length"||f>=o)&&c.push(l)});else switch(n!==void 0&&c.push(r.get(n)),t){case"add":S(e)?Lo(n)&&c.push(r.get("length")):(c.push(r.get(Xe)),ht(e)&&c.push(r.get(ro)));break;case"delete":S(e)||(c.push(r.get(Xe)),ht(e)&&c.push(r.get(ro)));break;case"set":ht(e)&&c.push(r.get(Xe));break}if(c.length===1)c[0]&&co(c[0]);else{const l=[];for(const f of c)f&&l.push(...f);co(No(l))}}function co(e,t){const n=S(e)?e:[...e];for(const o of n)o.computed&&hs(o);for(const o of n)o.computed||hs(o)}function hs(e,t){(e!==_e||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Qc=To("__proto__,__v_isRef,__isVue"),Ii=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Mo)),Xc=$o(),Zc=$o(!1,!0),Gc=$o(!0),ps=el();function el(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const o=H(this);for(let i=0,r=this.length;i{e[t]=function(...n){kt();const o=H(this)[t].apply(this,n);return xt(),o}}),e}function $o(e=!1,t=!1){return function(o,s,i){if(s==="__v_isReactive")return!e;if(s==="__v_isReadonly")return e;if(s==="__v_isShallow")return t;if(s==="__v_raw"&&i===(e?t?ml:Pi:t?Ti:ji).get(o))return o;const r=S(o);if(!e&&r&&L(ps,s))return Reflect.get(ps,s,i);const c=Reflect.get(o,s,i);return(Mo(s)?Ii.has(s):Qc(s))||(e||fe(o,"get",s),t)?c:ne(c)?r&&Lo(s)?c:c.value:ee(c)?e?Si(c):Uo(c):c}}const tl=Oi(),nl=Oi(!0);function Oi(e=!1){return function(n,o,s,i){let r=n[o];if(Ht(r)&&ne(r)&&!ne(s))return!1;if(!e&&!Ht(s)&&(lo(s)||(s=H(s),r=H(r)),!S(n)&&ne(r)&&!ne(s)))return r.value=s,!0;const c=S(n)&&Lo(o)?Number(o)e,Cn=e=>Reflect.getPrototypeOf(e);function Xt(e,t,n=!1,o=!1){e=e.__v_raw;const s=H(e),i=H(t);n||(t!==i&&fe(s,"get",t),fe(s,"get",i));const{has:r}=Cn(s),c=o?Do:n?Ko:Ut;if(r.call(s,t))return c(e.get(t));if(r.call(s,i))return c(e.get(i));e!==s&&e.get(t)}function Zt(e,t=!1){const n=this.__v_raw,o=H(n),s=H(e);return t||(e!==s&&fe(o,"has",e),fe(o,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function Gt(e,t=!1){return e=e.__v_raw,!t&&fe(H(e),"iterate",Xe),Reflect.get(e,"size",e)}function ds(e){e=H(e);const t=H(this);return Cn(t).has.call(t,e)||(t.add(e),Fe(t,"add",e,e)),this}function gs(e,t){t=H(t);const n=H(this),{has:o,get:s}=Cn(n);let i=o.call(n,e);i||(e=H(e),i=o.call(n,e));const r=s.call(n,e);return n.set(e,t),i?Dt(t,r)&&Fe(n,"set",e,t):Fe(n,"add",e,t),this}function ms(e){const t=H(this),{has:n,get:o}=Cn(t);let s=n.call(t,e);s||(e=H(e),s=n.call(t,e)),o&&o.call(t,e);const i=t.delete(e);return s&&Fe(t,"delete",e,void 0),i}function _s(){const e=H(this),t=e.size!==0,n=e.clear();return t&&Fe(e,"clear",void 0,void 0),n}function en(e,t){return function(o,s){const i=this,r=i.__v_raw,c=H(r),l=t?Do:e?Ko:Ut;return!e&&fe(c,"iterate",Xe),r.forEach((f,h)=>o.call(s,l(f),l(h),i))}}function tn(e,t,n){return function(...o){const s=this.__v_raw,i=H(s),r=ht(i),c=e==="entries"||e===Symbol.iterator&&r,l=e==="keys"&&r,f=s[e](...o),h=n?Do:t?Ko:Ut;return!t&&fe(i,"iterate",l?ro:Xe),{next(){const{value:p,done:g}=f.next();return g?{value:p,done:g}:{value:c?[h(p[0]),h(p[1])]:h(p),done:g}},[Symbol.iterator](){return this}}}}function Ne(e){return function(...t){return e==="delete"?!1:this}}function ll(){const e={get(i){return Xt(this,i)},get size(){return Gt(this)},has:Zt,add:ds,set:gs,delete:ms,clear:_s,forEach:en(!1,!1)},t={get(i){return Xt(this,i,!1,!0)},get size(){return Gt(this)},has:Zt,add:ds,set:gs,delete:ms,clear:_s,forEach:en(!1,!0)},n={get(i){return Xt(this,i,!0)},get size(){return Gt(this,!0)},has(i){return Zt.call(this,i,!0)},add:Ne("add"),set:Ne("set"),delete:Ne("delete"),clear:Ne("clear"),forEach:en(!0,!1)},o={get(i){return Xt(this,i,!0,!0)},get size(){return Gt(this,!0)},has(i){return Zt.call(this,i,!0)},add:Ne("add"),set:Ne("set"),delete:Ne("delete"),clear:Ne("clear"),forEach:en(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=tn(i,!1,!1),n[i]=tn(i,!0,!1),t[i]=tn(i,!1,!0),o[i]=tn(i,!0,!0)}),[e,n,t,o]}const[ul,fl,al,hl]=ll();function Ho(e,t){const n=t?e?hl:al:e?fl:ul;return(o,s,i)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?o:Reflect.get(L(n,s)&&s in o?n:o,s,i)}const pl={get:Ho(!1,!1)},dl={get:Ho(!1,!0)},gl={get:Ho(!0,!1)},ji=new WeakMap,Ti=new WeakMap,Pi=new WeakMap,ml=new WeakMap;function _l(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function bl(e){return e.__v_skip||!Object.isExtensible(e)?0:_l(Uc(e))}function Uo(e){return Ht(e)?e:Bo(e,!1,Ai,pl,ji)}function yl(e){return Bo(e,!1,cl,dl,Ti)}function Si(e){return Bo(e,!0,rl,gl,Pi)}function Bo(e,t,n,o,s){if(!ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=s.get(e);if(i)return i;const r=bl(e);if(r===0)return e;const c=new Proxy(e,r===2?o:n);return s.set(e,c),c}function pt(e){return Ht(e)?pt(e.__v_raw):!!(e&&e.__v_isReactive)}function Ht(e){return!!(e&&e.__v_isReadonly)}function lo(e){return!!(e&&e.__v_isShallow)}function Fi(e){return pt(e)||Ht(e)}function H(e){const t=e&&e.__v_raw;return t?H(t):e}function Mi(e){return hn(e,"__v_skip",!0),e}const Ut=e=>ee(e)?Uo(e):e,Ko=e=>ee(e)?Si(e):e;function Li(e){Ue&&_e&&(e=H(e),Ei(e.dep||(e.dep=No())))}function Ni(e,t){e=H(e),e.dep&&co(e.dep)}function ne(e){return!!(e&&e.__v_isRef===!0)}function st(e){return wl(e,!1)}function wl(e,t){return ne(e)?e:new vl(e,t)}class vl{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:H(t),this._value=n?t:Ut(t)}get value(){return Li(this),this._value}set value(t){t=this.__v_isShallow?t:H(t),Dt(t,this._rawValue)&&(this._rawValue=t,this._value=this.__v_isShallow?t:Ut(t),Ni(this))}}function qo(e){return ne(e)?e.value:e}const kl={get:(e,t,n)=>qo(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const s=e[t];return ne(s)&&!ne(n)?(s.value=n,!0):Reflect.set(e,t,n,o)}};function Ri(e){return pt(e)?e:new Proxy(e,kl)}class xl{constructor(t,n,o,s){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new Ro(t,()=>{this._dirty||(this._dirty=!0,Ni(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=o}get value(){const t=H(this);return Li(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function Cl(e,t,n=!1){let o,s;const i=M(e);return i?(o=e,s=ye):(o=e.get,s=e.set),new xl(o,s,i||!s,n)}function Be(e,t,n,o){let s;try{s=o?e(...o):e()}catch(i){En(i,t,n)}return s}function he(e,t,n,o){if(M(e)){const i=Be(e,t,n,o);return i&&bi(i)&&i.catch(r=>{En(r,t,n)}),i}const s=[];for(let i=0;i>>1;Bt(ue[o])Pe&&ue.splice(t,1)}function Bi(e,t,n,o){S(e)?n.push(...e):(!t||!t.includes(e,e.allowRecurse?o+1:o))&&n.push(e),Ui()}function Al(e){Bi(e,Tt,Mt,it)}function jl(e){Bi(e,Re,Lt,rt)}function In(e,t=null){if(Mt.length){for(fo=t,Tt=[...new Set(Mt)],Mt.length=0,it=0;itBt(n)-Bt(o)),rt=0;rte.id==null?1/0:e.id;function qi(e){uo=!1,pn=!0,In(e),ue.sort((n,o)=>Bt(n)-Bt(o));const t=ye;try{for(Pe=0;Pey.trim())),p&&(s=n.map(qc))}let c,l=o[c=Un(t)]||o[c=Un(bt(t))];!l&&i&&(l=o[c=Un(vt(t))]),l&&he(l,e,6,s);const f=o[c+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,he(f,e,6,s)}}function zi(e,t,n=!1){const o=t.emitsCache,s=o.get(e);if(s!==void 0)return s;const i=e.emits;let r={},c=!1;if(!M(e)){const l=f=>{const h=zi(f,t,!0);h&&(c=!0,oe(r,h))};!n&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!i&&!c?(o.set(e,null),null):(S(i)?i.forEach(l=>r[l]=null):oe(r,i),o.set(e,r),r)}function On(e,t){return!e||!vn(t)?!1:(t=t.slice(2).replace(/Once$/,""),L(e,t[0].toLowerCase()+t.slice(1))||L(e,vt(t))||L(e,t))}let Ie=null,Wi=null;function dn(e){const t=Ie;return Ie=e,Wi=e&&e.type.__scopeId||null,t}function Pl(e,t=Ie,n){if(!t||e._n)return e;const o=(...s)=>{o._d&&Os(-1);const i=dn(t),r=e(...s);return dn(i),o._d&&Os(1),r};return o._n=!0,o._c=!0,o._d=!0,o}function Kn(e){const{type:t,vnode:n,proxy:o,withProxy:s,props:i,propsOptions:[r],slots:c,attrs:l,emit:f,render:h,renderCache:p,data:g,setupState:y,ctx:E,inheritAttrs:A}=e;let j,T;const Y=dn(e);try{if(n.shapeFlag&4){const D=s||o;j=xe(h.call(D,D,p,i,y,g,E)),T=l}else{const D=t;j=xe(D.length>1?D(i,{attrs:l,slots:c,emit:f}):D(i,null)),T=t.props?l:Sl(l)}}catch(D){Nt.length=0,En(D,e,1),j=pe(Se)}let $=j;if(T&&A!==!1){const D=Object.keys(T),{shapeFlag:Q}=$;D.length&&Q&7&&(r&&D.some(So)&&(T=Fl(T,r)),$=qe($,T))}return n.dirs&&($=qe($),$.dirs=$.dirs?$.dirs.concat(n.dirs):n.dirs),n.transition&&($.transition=n.transition),j=$,dn(Y),j}const Sl=e=>{let t;for(const n in e)(n==="class"||n==="style"||vn(n))&&((t||(t={}))[n]=e[n]);return t},Fl=(e,t)=>{const n={};for(const o in e)(!So(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function Ml(e,t,n){const{props:o,children:s,component:i}=e,{props:r,children:c,patchFlag:l}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return o?bs(o,r,f):!!r;if(l&8){const h=t.dynamicProps;for(let p=0;pe.__isSuspense;function Rl(e,t){t&&t.pendingBranch?S(e)?t.effects.push(...e):t.effects.push(e):jl(e)}function $l(e,t){if(te){let n=te.provides;const o=te.parent&&te.parent.provides;o===n&&(n=te.provides=Object.create(o)),n[e]=t}}function qn(e,t,n=!1){const o=te||Ie;if(o){const s=o.parent==null?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides;if(s&&e in s)return s[e];if(arguments.length>1)return n&&M(t)?t.call(o.proxy):t}}const ys={};function cn(e,t,n){return Vi(e,t,n)}function Vi(e,t,{immediate:n,deep:o,flush:s,onTrack:i,onTrigger:r}=W){const c=te;let l,f=!1,h=!1;if(ne(e)?(l=()=>e.value,f=lo(e)):pt(e)?(l=()=>e,o=!0):S(e)?(h=!0,f=e.some(T=>pt(T)||lo(T)),l=()=>e.map(T=>{if(ne(T))return T.value;if(pt(T))return lt(T);if(M(T))return Be(T,c,2)})):M(e)?t?l=()=>Be(e,c,2):l=()=>{if(!(c&&c.isUnmounted))return p&&p(),he(e,c,3,[g])}:l=ye,t&&o){const T=l;l=()=>lt(T())}let p,g=T=>{p=j.onStop=()=>{Be(T,c,4)}};if(qt)return g=ye,t?n&&he(t,c,3,[l(),h?[]:void 0,g]):l(),ye;let y=h?[]:ys;const E=()=>{if(!!j.active)if(t){const T=j.run();(o||f||(h?T.some((Y,$)=>Dt(Y,y[$])):Dt(T,y)))&&(p&&p(),he(t,c,3,[T,y===ys?void 0:y,g]),y=T)}else j.run()};E.allowRecurse=!!t;let A;s==="sync"?A=E:s==="post"?A=()=>ce(E,c&&c.suspense):A=()=>Al(E);const j=new Ro(l,A);return t?n?E():y=j.run():s==="post"?ce(j.run.bind(j),c&&c.suspense):j.run(),()=>{j.stop(),c&&c.scope&&Fo(c.scope.effects,j)}}function Dl(e,t,n){const o=this.proxy,s=G(e)?e.includes(".")?Ji(o,e):()=>o[e]:e.bind(o,o);let i;M(t)?i=t:(i=t.handler,n=t);const r=te;yt(this);const c=Vi(s,i.bind(o),n);return r?yt(r):Ze(),c}function Ji(e,t){const n=t.split(".");return()=>{let o=e;for(let s=0;s{lt(n,t)});else if(wi(e))for(const n in e)lt(e[n],t);return e}function Hl(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Tn(()=>{e.isMounted=!0}),Zi(()=>{e.isUnmounting=!0}),e}const ae=[Function,Array],Ul={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ae,onEnter:ae,onAfterEnter:ae,onEnterCancelled:ae,onBeforeLeave:ae,onLeave:ae,onAfterLeave:ae,onLeaveCancelled:ae,onBeforeAppear:ae,onAppear:ae,onAfterAppear:ae,onAppearCancelled:ae},setup(e,{slots:t}){const n=Ou(),o=Hl();let s;return()=>{const i=t.default&&Qi(t.default(),!0);if(!i||!i.length)return;let r=i[0];if(i.length>1){for(const A of i)if(A.type!==Se){r=A;break}}const c=H(e),{mode:l}=c;if(o.isLeaving)return zn(r);const f=ws(r);if(!f)return zn(r);const h=ao(f,c,o,n);ho(f,h);const p=n.subTree,g=p&&ws(p);let y=!1;const{getTransitionKey:E}=f.type;if(E){const A=E();s===void 0?s=A:A!==s&&(s=A,y=!0)}if(g&&g.type!==Se&&(!Ye(f,g)||y)){const A=ao(g,c,o,n);if(ho(g,A),l==="out-in")return o.isLeaving=!0,A.afterLeave=()=>{o.isLeaving=!1,n.update()},zn(r);l==="in-out"&&f.type!==Se&&(A.delayLeave=(j,T,Y)=>{const $=Yi(o,g);$[String(g.key)]=g,j._leaveCb=()=>{T(),j._leaveCb=void 0,delete h.delayedLeave},h.delayedLeave=Y})}return r}}},Bl=Ul;function Yi(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function ao(e,t,n,o){const{appear:s,mode:i,persisted:r=!1,onBeforeEnter:c,onEnter:l,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:p,onLeave:g,onAfterLeave:y,onLeaveCancelled:E,onBeforeAppear:A,onAppear:j,onAfterAppear:T,onAppearCancelled:Y}=t,$=String(e.key),D=Yi(n,e),Q=(F,B)=>{F&&he(F,o,9,B)},N=(F,B)=>{const U=B[1];Q(F,B),S(F)?F.every(ie=>ie.length<=1)&&U():F.length<=1&&U()},Z={mode:i,persisted:r,beforeEnter(F){let B=c;if(!n.isMounted)if(s)B=A||c;else return;F._leaveCb&&F._leaveCb(!0);const U=D[$];U&&Ye(e,U)&&U.el._leaveCb&&U.el._leaveCb(),Q(B,[F])},enter(F){let B=l,U=f,ie=h;if(!n.isMounted)if(s)B=j||l,U=T||f,ie=Y||h;else return;let de=!1;const Ae=F._enterCb=Jt=>{de||(de=!0,Jt?Q(ie,[F]):Q(U,[F]),Z.delayedLeave&&Z.delayedLeave(),F._enterCb=void 0)};B?N(B,[F,Ae]):Ae()},leave(F,B){const U=String(e.key);if(F._enterCb&&F._enterCb(!0),n.isUnmounting)return B();Q(p,[F]);let ie=!1;const de=F._leaveCb=Ae=>{ie||(ie=!0,B(),Ae?Q(E,[F]):Q(y,[F]),F._leaveCb=void 0,D[U]===e&&delete D[U])};D[U]=e,g?N(g,[F,de]):de()},clone(F){return ao(F,t,n,o)}};return Z}function zn(e){if(An(e))return e=qe(e),e.children=null,e}function ws(e){return An(e)?e.children?e.children[0]:void 0:e}function ho(e,t){e.shapeFlag&6&&e.component?ho(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Qi(e,t=!1,n){let o=[],s=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader,An=e=>e.type.__isKeepAlive;function Kl(e,t){Xi(e,"a",t)}function ql(e,t){Xi(e,"da",t)}function Xi(e,t,n=te){const o=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(jn(t,o,n),n){let s=n.parent;for(;s&&s.parent;)An(s.parent.vnode)&&zl(o,t,n,s),s=s.parent}}function zl(e,t,n,o){const s=jn(t,e,o,!0);Gi(()=>{Fo(o[t],s)},n)}function jn(e,t,n=te,o=!1){if(n){const s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...r)=>{if(n.isUnmounted)return;kt(),yt(n);const c=he(t,n,e,r);return Ze(),xt(),c});return o?s.unshift(i):s.push(i),i}}const Me=e=>(t,n=te)=>(!qt||e==="sp")&&jn(e,t,n),Wl=Me("bm"),Tn=Me("m"),Vl=Me("bu"),Jl=Me("u"),Zi=Me("bum"),Gi=Me("um"),Yl=Me("sp"),Ql=Me("rtg"),Xl=Me("rtc");function Zl(e,t=te){jn("ec",e,t)}function We(e,t,n,o){const s=e.dirs,i=t&&t.dirs;for(let r=0;rt(r,c,void 0,i&&i[c]));else{const r=Object.keys(e);s=new Array(r.length);for(let c=0,l=r.length;ce?fr(e)?Yo(e)||e.proxy:po(e.parent):null,gn=oe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>po(e.parent),$root:e=>po(e.root),$emit:e=>e.emit,$options:e=>tr(e),$forceUpdate:e=>e.f||(e.f=()=>Hi(e.update)),$nextTick:e=>e.n||(e.n=Di.bind(e.proxy)),$watch:e=>Dl.bind(e)}),tu={get({_:e},t){const{ctx:n,setupState:o,data:s,props:i,accessCache:r,type:c,appContext:l}=e;let f;if(t[0]!=="$"){const y=r[t];if(y!==void 0)switch(y){case 1:return o[t];case 2:return s[t];case 4:return n[t];case 3:return i[t]}else{if(o!==W&&L(o,t))return r[t]=1,o[t];if(s!==W&&L(s,t))return r[t]=2,s[t];if((f=e.propsOptions[0])&&L(f,t))return r[t]=3,i[t];if(n!==W&&L(n,t))return r[t]=4,n[t];go&&(r[t]=0)}}const h=gn[t];let p,g;if(h)return t==="$attrs"&&fe(e,"get",t),h(e);if((p=c.__cssModules)&&(p=p[t]))return p;if(n!==W&&L(n,t))return r[t]=4,n[t];if(g=l.config.globalProperties,L(g,t))return g[t]},set({_:e},t,n){const{data:o,setupState:s,ctx:i}=e;return s!==W&&L(s,t)?(s[t]=n,!0):o!==W&&L(o,t)?(o[t]=n,!0):L(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:s,propsOptions:i}},r){let c;return!!n[r]||e!==W&&L(e,r)||t!==W&&L(t,r)||(c=i[0])&&L(c,r)||L(o,r)||L(gn,r)||L(s.config.globalProperties,r)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:L(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};let go=!0;function nu(e){const t=tr(e),n=e.proxy,o=e.ctx;go=!1,t.beforeCreate&&vs(t.beforeCreate,e,"bc");const{data:s,computed:i,methods:r,watch:c,provide:l,inject:f,created:h,beforeMount:p,mounted:g,beforeUpdate:y,updated:E,activated:A,deactivated:j,beforeDestroy:T,beforeUnmount:Y,destroyed:$,unmounted:D,render:Q,renderTracked:N,renderTriggered:Z,errorCaptured:F,serverPrefetch:B,expose:U,inheritAttrs:ie,components:de,directives:Ae,filters:Jt}=t;if(f&&ou(f,o,null,e.appContext.config.unwrapInjectedRef),r)for(const X in r){const V=r[X];M(V)&&(o[X]=V.bind(n))}if(s){const X=s.call(n,n);ee(X)&&(e.data=Uo(X))}if(go=!0,i)for(const X in i){const V=i[X],je=M(V)?V.bind(n,n):M(V.get)?V.get.bind(n,n):ye,Fn=!M(V)&&M(V.set)?V.set.bind(n):ye,Ct=Fu({get:je,set:Fn});Object.defineProperty(o,X,{enumerable:!0,configurable:!0,get:()=>Ct.value,set:et=>Ct.value=et})}if(c)for(const X in c)er(c[X],o,n,X);if(l){const X=M(l)?l.call(n):l;Reflect.ownKeys(X).forEach(V=>{$l(V,X[V])})}h&&vs(h,e,"c");function re(X,V){S(V)?V.forEach(je=>X(je.bind(n))):V&&X(V.bind(n))}if(re(Wl,p),re(Tn,g),re(Vl,y),re(Jl,E),re(Kl,A),re(ql,j),re(Zl,F),re(Xl,N),re(Ql,Z),re(Zi,Y),re(Gi,D),re(Yl,B),S(U))if(U.length){const X=e.exposed||(e.exposed={});U.forEach(V=>{Object.defineProperty(X,V,{get:()=>n[V],set:je=>n[V]=je})})}else e.exposed||(e.exposed={});Q&&e.render===ye&&(e.render=Q),ie!=null&&(e.inheritAttrs=ie),de&&(e.components=de),Ae&&(e.directives=Ae)}function ou(e,t,n=ye,o=!1){S(e)&&(e=mo(e));for(const s in e){const i=e[s];let r;ee(i)?"default"in i?r=qn(i.from||s,i.default,!0):r=qn(i.from||s):r=qn(i),ne(r)&&o?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>r.value,set:c=>r.value=c}):t[s]=r}}function vs(e,t,n){he(S(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function er(e,t,n,o){const s=o.includes(".")?Ji(n,o):()=>n[o];if(G(e)){const i=t[e];M(i)&&cn(s,i)}else if(M(e))cn(s,e.bind(n));else if(ee(e))if(S(e))e.forEach(i=>er(i,t,n,o));else{const i=M(e.handler)?e.handler.bind(n):t[e.handler];M(i)&&cn(s,i,e)}}function tr(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:s,optionsCache:i,config:{optionMergeStrategies:r}}=e.appContext,c=i.get(t);let l;return c?l=c:!s.length&&!n&&!o?l=t:(l={},s.length&&s.forEach(f=>mn(l,f,r,!0)),mn(l,t,r)),i.set(t,l),l}function mn(e,t,n,o=!1){const{mixins:s,extends:i}=t;i&&mn(e,i,n,!0),s&&s.forEach(r=>mn(e,r,n,!0));for(const r in t)if(!(o&&r==="expose")){const c=su[r]||n&&n[r];e[r]=c?c(e[r],t[r]):t[r]}return e}const su={data:ks,props:Je,emits:Je,methods:Je,computed:Je,beforeCreate:se,created:se,beforeMount:se,mounted:se,beforeUpdate:se,updated:se,beforeDestroy:se,beforeUnmount:se,destroyed:se,unmounted:se,activated:se,deactivated:se,errorCaptured:se,serverPrefetch:se,components:Je,directives:Je,watch:ru,provide:ks,inject:iu};function ks(e,t){return t?e?function(){return oe(M(e)?e.call(this,this):e,M(t)?t.call(this,this):t)}:t:e}function iu(e,t){return Je(mo(e),mo(t))}function mo(e){if(S(e)){const t={};for(let n=0;n0)&&!(r&16)){if(r&8){const h=e.vnode.dynamicProps;for(let p=0;p{l=!0;const[g,y]=or(p,t,!0);oe(r,g),y&&c.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!i&&!l)return o.set(e,at),at;if(S(i))for(let h=0;h-1,y[1]=A<0||E-1||L(y,"default"))&&c.push(p)}}}const f=[r,c];return o.set(e,f),f}function xs(e){return e[0]!=="$"}function Cs(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function Es(e,t){return Cs(e)===Cs(t)}function Is(e,t){return S(t)?t.findIndex(n=>Es(n,e)):M(t)&&Es(t,e)?0:-1}const sr=e=>e[0]==="_"||e==="$stable",Wo=e=>S(e)?e.map(xe):[xe(e)],uu=(e,t,n)=>{if(t._n)return t;const o=Pl((...s)=>Wo(t(...s)),n);return o._c=!1,o},ir=(e,t,n)=>{const o=e._ctx;for(const s in e){if(sr(s))continue;const i=e[s];if(M(i))t[s]=uu(s,i,o);else if(i!=null){const r=Wo(i);t[s]=()=>r}}},rr=(e,t)=>{const n=Wo(t);e.slots.default=()=>n},fu=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=H(t),hn(t,"_",n)):ir(t,e.slots={})}else e.slots={},t&&rr(e,t);hn(e.slots,Pn,1)},au=(e,t,n)=>{const{vnode:o,slots:s}=e;let i=!0,r=W;if(o.shapeFlag&32){const c=t._;c?n&&c===1?i=!1:(oe(s,t),!n&&c===1&&delete s._):(i=!t.$stable,ir(t,s)),r=t}else t&&(rr(e,t),r={default:1});if(i)for(const c in s)!sr(c)&&!(c in r)&&delete s[c]};function cr(){return{app:null,config:{isNativeTag:$c,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let hu=0;function pu(e,t){return function(o,s=null){M(o)||(o=Object.assign({},o)),s!=null&&!ee(s)&&(s=null);const i=cr(),r=new Set;let c=!1;const l=i.app={_uid:hu++,_component:o,_props:s,_container:null,_context:i,_instance:null,version:Mu,get config(){return i.config},set config(f){},use(f,...h){return r.has(f)||(f&&M(f.install)?(r.add(f),f.install(l,...h)):M(f)&&(r.add(f),f(l,...h))),l},mixin(f){return i.mixins.includes(f)||i.mixins.push(f),l},component(f,h){return h?(i.components[f]=h,l):i.components[f]},directive(f,h){return h?(i.directives[f]=h,l):i.directives[f]},mount(f,h,p){if(!c){const g=pe(o,s);return g.appContext=i,h&&t?t(g,f):e(g,f,p),c=!0,l._container=f,f.__vue_app__=l,Yo(g.component)||g.component.proxy}},unmount(){c&&(e(null,l._container),delete l._container.__vue_app__)},provide(f,h){return i.provides[f]=h,l}};return l}}function bo(e,t,n,o,s=!1){if(S(e)){e.forEach((g,y)=>bo(g,t&&(S(t)?t[y]:t),n,o,s));return}if(ln(o)&&!s)return;const i=o.shapeFlag&4?Yo(o.component)||o.component.proxy:o.el,r=s?null:i,{i:c,r:l}=e,f=t&&t.r,h=c.refs===W?c.refs={}:c.refs,p=c.setupState;if(f!=null&&f!==l&&(G(f)?(h[f]=null,L(p,f)&&(p[f]=null)):ne(f)&&(f.value=null)),M(l))Be(l,c,12,[r,h]);else{const g=G(l),y=ne(l);if(g||y){const E=()=>{if(e.f){const A=g?h[l]:l.value;s?S(A)&&Fo(A,i):S(A)?A.includes(i)||A.push(i):g?(h[l]=[i],L(p,l)&&(p[l]=h[l])):(l.value=[i],e.k&&(h[e.k]=l.value))}else g?(h[l]=r,L(p,l)&&(p[l]=r)):y&&(l.value=r,e.k&&(h[e.k]=r))};r?(E.id=-1,ce(E,n)):E()}}}const ce=Rl;function du(e){return gu(e)}function gu(e,t){const n=zc();n.__VUE__=!0;const{insert:o,remove:s,patchProp:i,createElement:r,createText:c,createComment:l,setText:f,setElementText:h,parentNode:p,nextSibling:g,setScopeId:y=ye,cloneNode:E,insertStaticContent:A}=e,j=(u,a,d,_=null,m=null,v=null,x=!1,w=null,k=!!a.dynamicChildren)=>{if(u===a)return;u&&!Ye(u,a)&&(_=Yt(u),Le(u,m,v,!0),u=null),a.patchFlag===-2&&(k=!1,a.dynamicChildren=null);const{type:b,ref:I,shapeFlag:C}=a;switch(b){case Vo:T(u,a,d,_);break;case Se:Y(u,a,d,_);break;case Wn:u==null&&$(a,d,_,x);break;case me:Ae(u,a,d,_,m,v,x,w,k);break;default:C&1?N(u,a,d,_,m,v,x,w,k):C&6?Jt(u,a,d,_,m,v,x,w,k):(C&64||C&128)&&b.process(u,a,d,_,m,v,x,w,k,tt)}I!=null&&m&&bo(I,u&&u.ref,v,a||u,!a)},T=(u,a,d,_)=>{if(u==null)o(a.el=c(a.children),d,_);else{const m=a.el=u.el;a.children!==u.children&&f(m,a.children)}},Y=(u,a,d,_)=>{u==null?o(a.el=l(a.children||""),d,_):a.el=u.el},$=(u,a,d,_)=>{[u.el,u.anchor]=A(u.children,a,d,_,u.el,u.anchor)},D=({el:u,anchor:a},d,_)=>{let m;for(;u&&u!==a;)m=g(u),o(u,d,_),u=m;o(a,d,_)},Q=({el:u,anchor:a})=>{let d;for(;u&&u!==a;)d=g(u),s(u),u=d;s(a)},N=(u,a,d,_,m,v,x,w,k)=>{x=x||a.type==="svg",u==null?Z(a,d,_,m,v,x,w,k):U(u,a,m,v,x,w,k)},Z=(u,a,d,_,m,v,x,w)=>{let k,b;const{type:I,props:C,shapeFlag:O,transition:P,patchFlag:R,dirs:K}=u;if(u.el&&E!==void 0&&R===-1)k=u.el=E(u.el);else{if(k=u.el=r(u.type,v,C&&C.is,C),O&8?h(k,u.children):O&16&&B(u.children,k,null,_,m,v&&I!=="foreignObject",x,w),K&&We(u,null,_,"created"),C){for(const J in C)J!=="value"&&!rn(J)&&i(k,J,null,C[J],v,u.children,_,m,Te);"value"in C&&i(k,"value",null,C.value),(b=C.onVnodeBeforeMount)&&ve(b,_,u)}F(k,u,u.scopeId,x,_)}K&&We(u,null,_,"beforeMount");const q=(!m||m&&!m.pendingBranch)&&P&&!P.persisted;q&&P.beforeEnter(k),o(k,a,d),((b=C&&C.onVnodeMounted)||q||K)&&ce(()=>{b&&ve(b,_,u),q&&P.enter(k),K&&We(u,null,_,"mounted")},m)},F=(u,a,d,_,m)=>{if(d&&y(u,d),_)for(let v=0;v<_.length;v++)y(u,_[v]);if(m){let v=m.subTree;if(a===v){const x=m.vnode;F(u,x,x.scopeId,x.slotScopeIds,m.parent)}}},B=(u,a,d,_,m,v,x,w,k=0)=>{for(let b=k;b{const w=a.el=u.el;let{patchFlag:k,dynamicChildren:b,dirs:I}=a;k|=u.patchFlag&16;const C=u.props||W,O=a.props||W;let P;d&&Ve(d,!1),(P=O.onVnodeBeforeUpdate)&&ve(P,d,a,u),I&&We(a,u,d,"beforeUpdate"),d&&Ve(d,!0);const R=m&&a.type!=="foreignObject";if(b?ie(u.dynamicChildren,b,w,d,_,R,v):x||je(u,a,w,null,d,_,R,v,!1),k>0){if(k&16)de(w,a,C,O,d,_,m);else if(k&2&&C.class!==O.class&&i(w,"class",null,O.class,m),k&4&&i(w,"style",C.style,O.style,m),k&8){const K=a.dynamicProps;for(let q=0;q{P&&ve(P,d,a,u),I&&We(a,u,d,"updated")},_)},ie=(u,a,d,_,m,v,x)=>{for(let w=0;w{if(d!==_){for(const w in _){if(rn(w))continue;const k=_[w],b=d[w];k!==b&&w!=="value"&&i(u,w,b,k,x,a.children,m,v,Te)}if(d!==W)for(const w in d)!rn(w)&&!(w in _)&&i(u,w,d[w],null,x,a.children,m,v,Te);"value"in _&&i(u,"value",d.value,_.value)}},Ae=(u,a,d,_,m,v,x,w,k)=>{const b=a.el=u?u.el:c(""),I=a.anchor=u?u.anchor:c("");let{patchFlag:C,dynamicChildren:O,slotScopeIds:P}=a;P&&(w=w?w.concat(P):P),u==null?(o(b,d,_),o(I,d,_),B(a.children,d,I,m,v,x,w,k)):C>0&&C&64&&O&&u.dynamicChildren?(ie(u.dynamicChildren,O,d,m,v,x,w),(a.key!=null||m&&a===m.subTree)&&lr(u,a,!0)):je(u,a,d,I,m,v,x,w,k)},Jt=(u,a,d,_,m,v,x,w,k)=>{a.slotScopeIds=w,u==null?a.shapeFlag&512?m.ctx.activate(a,d,_,x,k):Sn(a,d,_,m,v,x,k):re(u,a,k)},Sn=(u,a,d,_,m,v,x)=>{const w=u.component=Iu(u,_,m);if(An(u)&&(w.ctx.renderer=tt),Au(w),w.asyncDep){if(m&&m.registerDep(w,X),!u.el){const k=w.subTree=pe(Se);Y(null,k,a,d)}return}X(w,u,a,d,m,v,x)},re=(u,a,d)=>{const _=a.component=u.component;if(Ml(u,a,d))if(_.asyncDep&&!_.asyncResolved){V(_,a,d);return}else _.next=a,Ol(_.update),_.update();else a.el=u.el,_.vnode=a},X=(u,a,d,_,m,v,x)=>{const w=()=>{if(u.isMounted){let{next:I,bu:C,u:O,parent:P,vnode:R}=u,K=I,q;Ve(u,!1),I?(I.el=R.el,V(u,I,x)):I=R,C&&Bn(C),(q=I.props&&I.props.onVnodeBeforeUpdate)&&ve(q,P,I,R),Ve(u,!0);const J=Kn(u),ge=u.subTree;u.subTree=J,j(ge,J,p(ge.el),Yt(ge),u,m,v),I.el=J.el,K===null&&Ll(u,J.el),O&&ce(O,m),(q=I.props&&I.props.onVnodeUpdated)&&ce(()=>ve(q,P,I,R),m)}else{let I;const{el:C,props:O}=a,{bm:P,m:R,parent:K}=u,q=ln(a);if(Ve(u,!1),P&&Bn(P),!q&&(I=O&&O.onVnodeBeforeMount)&&ve(I,K,a),Ve(u,!0),C&&Ln){const J=()=>{u.subTree=Kn(u),Ln(C,u.subTree,u,m,null)};q?a.type.__asyncLoader().then(()=>!u.isUnmounted&&J()):J()}else{const J=u.subTree=Kn(u);j(null,J,d,_,u,m,v),a.el=J.el}if(R&&ce(R,m),!q&&(I=O&&O.onVnodeMounted)){const J=a;ce(()=>ve(I,K,J),m)}(a.shapeFlag&256||K&&ln(K.vnode)&&K.vnode.shapeFlag&256)&&u.a&&ce(u.a,m),u.isMounted=!0,a=d=_=null}},k=u.effect=new Ro(w,()=>Hi(b),u.scope),b=u.update=()=>k.run();b.id=u.uid,Ve(u,!0),b()},V=(u,a,d)=>{a.component=u;const _=u.vnode.props;u.vnode=a,u.next=null,lu(u,a.props,_,d),au(u,a.children,d),kt(),In(void 0,u.update),xt()},je=(u,a,d,_,m,v,x,w,k=!1)=>{const b=u&&u.children,I=u?u.shapeFlag:0,C=a.children,{patchFlag:O,shapeFlag:P}=a;if(O>0){if(O&128){Ct(b,C,d,_,m,v,x,w,k);return}else if(O&256){Fn(b,C,d,_,m,v,x,w,k);return}}P&8?(I&16&&Te(b,m,v),C!==b&&h(d,C)):I&16?P&16?Ct(b,C,d,_,m,v,x,w,k):Te(b,m,v,!0):(I&8&&h(d,""),P&16&&B(C,d,_,m,v,x,w,k))},Fn=(u,a,d,_,m,v,x,w,k)=>{u=u||at,a=a||at;const b=u.length,I=a.length,C=Math.min(b,I);let O;for(O=0;OI?Te(u,m,v,!0,!1,C):B(a,d,_,m,v,x,w,k,C)},Ct=(u,a,d,_,m,v,x,w,k)=>{let b=0;const I=a.length;let C=u.length-1,O=I-1;for(;b<=C&&b<=O;){const P=u[b],R=a[b]=k?$e(a[b]):xe(a[b]);if(Ye(P,R))j(P,R,d,null,m,v,x,w,k);else break;b++}for(;b<=C&&b<=O;){const P=u[C],R=a[O]=k?$e(a[O]):xe(a[O]);if(Ye(P,R))j(P,R,d,null,m,v,x,w,k);else break;C--,O--}if(b>C){if(b<=O){const P=O+1,R=PO)for(;b<=C;)Le(u[b],m,v,!0),b++;else{const P=b,R=b,K=new Map;for(b=R;b<=O;b++){const le=a[b]=k?$e(a[b]):xe(a[b]);le.key!=null&&K.set(le.key,b)}let q,J=0;const ge=O-R+1;let nt=!1,Zo=0;const Et=new Array(ge);for(b=0;b=ge){Le(le,m,v,!0);continue}let we;if(le.key!=null)we=K.get(le.key);else for(q=R;q<=O;q++)if(Et[q-R]===0&&Ye(le,a[q])){we=q;break}we===void 0?Le(le,m,v,!0):(Et[we-R]=b+1,we>=Zo?Zo=we:nt=!0,j(le,a[we],d,null,m,v,x,w,k),J++)}const Go=nt?mu(Et):at;for(q=Go.length-1,b=ge-1;b>=0;b--){const le=R+b,we=a[le],es=le+1{const{el:v,type:x,transition:w,children:k,shapeFlag:b}=u;if(b&6){et(u.component.subTree,a,d,_);return}if(b&128){u.suspense.move(a,d,_);return}if(b&64){x.move(u,a,d,tt);return}if(x===me){o(v,a,d);for(let C=0;Cw.enter(v),m);else{const{leave:C,delayLeave:O,afterLeave:P}=w,R=()=>o(v,a,d),K=()=>{C(v,()=>{R(),P&&P()})};O?O(v,R,K):K()}else o(v,a,d)},Le=(u,a,d,_=!1,m=!1)=>{const{type:v,props:x,ref:w,children:k,dynamicChildren:b,shapeFlag:I,patchFlag:C,dirs:O}=u;if(w!=null&&bo(w,null,d,u,!0),I&256){a.ctx.deactivate(u);return}const P=I&1&&O,R=!ln(u);let K;if(R&&(K=x&&x.onVnodeBeforeUnmount)&&ve(K,a,u),I&6)dr(u.component,d,_);else{if(I&128){u.suspense.unmount(d,_);return}P&&We(u,null,a,"beforeUnmount"),I&64?u.type.remove(u,a,d,m,tt,_):b&&(v!==me||C>0&&C&64)?Te(b,a,d,!1,!0):(v===me&&C&384||!m&&I&16)&&Te(k,a,d),_&&Qo(u)}(R&&(K=x&&x.onVnodeUnmounted)||P)&&ce(()=>{K&&ve(K,a,u),P&&We(u,null,a,"unmounted")},d)},Qo=u=>{const{type:a,el:d,anchor:_,transition:m}=u;if(a===me){pr(d,_);return}if(a===Wn){Q(u);return}const v=()=>{s(d),m&&!m.persisted&&m.afterLeave&&m.afterLeave()};if(u.shapeFlag&1&&m&&!m.persisted){const{leave:x,delayLeave:w}=m,k=()=>x(d,v);w?w(u.el,v,k):k()}else v()},pr=(u,a)=>{let d;for(;u!==a;)d=g(u),s(u),u=d;s(a)},dr=(u,a,d)=>{const{bum:_,scope:m,update:v,subTree:x,um:w}=u;_&&Bn(_),m.stop(),v&&(v.active=!1,Le(x,u,a,d)),w&&ce(w,a),ce(()=>{u.isUnmounted=!0},a),a&&a.pendingBranch&&!a.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===a.pendingId&&(a.deps--,a.deps===0&&a.resolve())},Te=(u,a,d,_=!1,m=!1,v=0)=>{for(let x=v;xu.shapeFlag&6?Yt(u.component.subTree):u.shapeFlag&128?u.suspense.next():g(u.anchor||u.el),Xo=(u,a,d)=>{u==null?a._vnode&&Le(a._vnode,null,null,!0):j(a._vnode||null,u,a,null,null,null,d),Ki(),a._vnode=u},tt={p:j,um:Le,m:et,r:Qo,mt:Sn,mc:B,pc:je,pbc:ie,n:Yt,o:e};let Mn,Ln;return t&&([Mn,Ln]=t(tt)),{render:Xo,hydrate:Mn,createApp:pu(Xo,Mn)}}function Ve({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function lr(e,t,n=!1){const o=e.children,s=t.children;if(S(o)&&S(s))for(let i=0;i>1,e[n[c]]0&&(t[o]=n[i-1]),n[i]=o)}}for(i=n.length,r=n[i-1];i-- >0;)n[i]=r,r=t[r];return n}const _u=e=>e.__isTeleport,me=Symbol(void 0),Vo=Symbol(void 0),Se=Symbol(void 0),Wn=Symbol(void 0),Nt=[];let be=null;function dt(e=!1){Nt.push(be=e?null:[])}function bu(){Nt.pop(),be=Nt[Nt.length-1]||null}let Kt=1;function Os(e){Kt+=e}function yu(e){return e.dynamicChildren=Kt>0?be||at:null,bu(),Kt>0&&be&&be.push(e),e}function gt(e,t,n,o,s,i){return yu(z(e,t,n,o,s,i,!0))}function wu(e){return e?e.__v_isVNode===!0:!1}function Ye(e,t){return e.type===t.type&&e.key===t.key}const Pn="__vInternal",ur=({key:e})=>e!=null?e:null,un=({ref:e,ref_key:t,ref_for:n})=>e!=null?G(e)||ne(e)||M(e)?{i:Ie,r:e,k:t,f:!!n}:e:null;function z(e,t=null,n=null,o=0,s=null,i=e===me?0:1,r=!1,c=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ur(t),ref:t&&un(t),scopeId:Wi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:o,dynamicProps:s,dynamicChildren:null,appContext:null};return c?(Jo(l,n),i&128&&e.normalize(l)):n&&(l.shapeFlag|=G(n)?8:16),Kt>0&&!r&&be&&(l.patchFlag>0||i&6)&&l.patchFlag!==32&&be.push(l),l}const pe=vu;function vu(e,t=null,n=null,o=0,s=null,i=!1){if((!e||e===Gl)&&(e=Se),wu(e)){const c=qe(e,t,!0);return n&&Jo(c,n),Kt>0&&!i&&be&&(c.shapeFlag&6?be[be.indexOf(e)]=c:be.push(c)),c.patchFlag|=-2,c}if(Su(e)&&(e=e.__vccOpts),t){t=ku(t);let{class:c,style:l}=t;c&&!G(c)&&(t.class=_t(c)),ee(l)&&(Fi(l)&&!S(l)&&(l=oe({},l)),t.style=Po(l))}const r=G(e)?1:Nl(e)?128:_u(e)?64:ee(e)?4:M(e)?2:0;return z(e,t,n,o,s,r,i,!0)}function ku(e){return e?Fi(e)||Pn in e?oe({},e):e:null}function qe(e,t,n=!1){const{props:o,ref:s,patchFlag:i,children:r}=e,c=t?xu(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&ur(c),ref:t&&t.ref?n&&s?S(s)?s.concat(un(t)):[s,un(t)]:un(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==me?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&qe(e.ssContent),ssFallback:e.ssFallback&&qe(e.ssFallback),el:e.el,anchor:e.anchor}}function yo(e=" ",t=0){return pe(Vo,null,e,t)}function xe(e){return e==null||typeof e=="boolean"?pe(Se):S(e)?pe(me,null,e.slice()):typeof e=="object"?$e(e):pe(Vo,null,String(e))}function $e(e){return e.el===null||e.memo?e:qe(e)}function Jo(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(S(t))n=16;else if(typeof t=="object")if(o&65){const s=t.default;s&&(s._c&&(s._d=!1),Jo(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!(Pn in t)?t._ctx=Ie:s===3&&Ie&&(Ie.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else M(t)?(t={default:t,_ctx:Ie},n=32):(t=String(t),o&64?(n=16,t=[yo(t)]):n=8);e.children=t,e.shapeFlag|=n}function xu(...e){const t={};for(let n=0;nte||Ie,yt=e=>{te=e,e.scope.on()},Ze=()=>{te&&te.scope.off(),te=null};function fr(e){return e.vnode.shapeFlag&4}let qt=!1;function Au(e,t=!1){qt=t;const{props:n,children:o}=e.vnode,s=fr(e);cu(e,n,s,t),fu(e,o);const i=s?ju(e,t):void 0;return qt=!1,i}function ju(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Mi(new Proxy(e.ctx,tu));const{setup:o}=n;if(o){const s=e.setupContext=o.length>1?Pu(e):null;yt(e),kt();const i=Be(o,e,0,[e.props,s]);if(xt(),Ze(),bi(i)){if(i.then(Ze,Ze),t)return i.then(r=>{As(e,r,t)}).catch(r=>{En(r,e,0)});e.asyncDep=i}else As(e,i,t)}else ar(e,t)}function As(e,t,n){M(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ee(t)&&(e.setupState=Ri(t)),ar(e,n)}let js;function ar(e,t,n){const o=e.type;if(!e.render){if(!t&&js&&!o.render){const s=o.template;if(s){const{isCustomElement:i,compilerOptions:r}=e.appContext.config,{delimiters:c,compilerOptions:l}=o,f=oe(oe({isCustomElement:i,delimiters:c},r),l);o.render=js(s,f)}}e.render=o.render||ye}yt(e),kt(),nu(e),xt(),Ze()}function Tu(e){return new Proxy(e.attrs,{get(t,n){return fe(e,"get","$attrs"),t[n]}})}function Pu(e){const t=o=>{e.exposed=o||{}};let n;return{get attrs(){return n||(n=Tu(e))},slots:e.slots,emit:e.emit,expose:t}}function Yo(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ri(Mi(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in gn)return gn[n](e)}}))}function Su(e){return M(e)&&"__vccOpts"in e}const Fu=(e,t)=>Cl(e,t,qt),Mu="3.2.37",Lu="http://www.w3.org/2000/svg",Qe=typeof document!="undefined"?document:null,Ts=Qe&&Qe.createElement("template"),Nu={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const s=t?Qe.createElementNS(Lu,e):Qe.createElement(e,n?{is:n}:void 0);return e==="select"&&o&&o.multiple!=null&&s.setAttribute("multiple",o.multiple),s},createText:e=>Qe.createTextNode(e),createComment:e=>Qe.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Qe.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,n,o,s,i){const r=n?n.previousSibling:t.lastChild;if(s&&(s===i||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{Ts.innerHTML=o?`${e}`:e;const c=Ts.content;if(o){const l=c.firstChild;for(;l.firstChild;)c.appendChild(l.firstChild);c.removeChild(l)}t.insertBefore(c,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Ru(e,t,n){const o=e._vtc;o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function $u(e,t,n){const o=e.style,s=G(n);if(n&&!s){for(const i in n)wo(o,i,n[i]);if(t&&!G(t))for(const i in t)n[i]==null&&wo(o,i,"")}else{const i=o.display;s?t!==n&&(o.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(o.display=i)}}const Ps=/\s*!important$/;function wo(e,t,n){if(S(n))n.forEach(o=>wo(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=Du(e,t);Ps.test(n)?e.setProperty(vt(o),n.replace(Ps,""),"important"):e[o]=n}}const Ss=["Webkit","Moz","ms"],Vn={};function Du(e,t){const n=Vn[t];if(n)return n;let o=bt(t);if(o!=="filter"&&o in e)return Vn[t]=o;o=vi(o);for(let s=0;s{let e=Date.now,t=!1;if(typeof window!="undefined"){Date.now()>document.createEvent("Event").timeStamp&&(e=performance.now.bind(performance));const n=navigator.userAgent.match(/firefox\/(\d+)/i);t=!!(n&&Number(n[1])<=53)}return[e,t]})();let vo=0;const Ku=Promise.resolve(),qu=()=>{vo=0},zu=()=>vo||(Ku.then(qu),vo=hr());function Wu(e,t,n,o){e.addEventListener(t,n,o)}function Vu(e,t,n,o){e.removeEventListener(t,n,o)}function Ju(e,t,n,o,s=null){const i=e._vei||(e._vei={}),r=i[t];if(o&&r)r.value=o;else{const[c,l]=Yu(t);if(o){const f=i[t]=Qu(o,s);Wu(e,c,f,l)}else r&&(Vu(e,c,r,l),i[t]=void 0)}}const Ms=/(?:Once|Passive|Capture)$/;function Yu(e){let t;if(Ms.test(e)){t={};let n;for(;n=e.match(Ms);)e=e.slice(0,e.length-n[0].length),t[n[0].toLowerCase()]=!0}return[vt(e.slice(2)),t]}function Qu(e,t){const n=o=>{const s=o.timeStamp||hr();(Bu||s>=n.attached-1)&&he(Xu(o,n.value),t,5,[o])};return n.value=e,n.attached=zu(),n}function Xu(e,t){if(S(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>s=>!s._stopped&&o&&o(s))}else return t}const Ls=/^on[a-z]/,Zu=(e,t,n,o,s=!1,i,r,c,l)=>{t==="class"?Ru(e,o,s):t==="style"?$u(e,n,o):vn(t)?So(t)||Ju(e,t,n,o,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Gu(e,t,o,s))?Uu(e,t,o,i,r,c,l):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Hu(e,t,o,s))};function Gu(e,t,n,o){return o?!!(t==="innerHTML"||t==="textContent"||t in e&&Ls.test(t)&&M(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Ls.test(t)&&G(n)?!1:t in e}const ef={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Bl.props;const tf=oe({patchProp:Zu},Nu);let Ns;function nf(){return Ns||(Ns=du(tf))}const of=(...e)=>{const t=nf().createApp(...e),{mount:n}=t;return t.mount=o=>{const s=sf(o);if(!s)return;const i=t._component;!M(i)&&!i.render&&!i.template&&(i.template=s.innerHTML),s.innerHTML="";const r=n(s,!1,s instanceof SVGElement);return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),r},t};function sf(e){return G(e)?document.querySelector(e):e}var rf=[{name:"access",phonetic_uk:"'\xE6kses",phonetic_us:"\u02C8\xE6kses",phonetic_wrong:"\u0259k'ses"},{name:"admin",phonetic_uk:"'\xE6dm\u026An",phonetic_us:"\u02C8\xE6dm\u026An",phonetic_wrong:"\u025C:d'm\u026An"},{name:"Adobe",phonetic_uk:"\u0259'd\u0259\u028Abi",phonetic_us:"\u0259'd\u0259\u028Abi",phonetic_wrong:"\u0259\u02C8dub"},{name:"adversarial",phonetic_uk:"\u02CC\xE6dv\u0259\u02C8se\u0259ri\u0259l",phonetic_us:"\u02CC\xE6dv\u0259r\u02C8seri\u0259l",phonetic_wrong:"\u0259d\u02C8v\u025C\u02D0rs\u0259ri\u0259l"},{name:"agile",phonetic_uk:"'\xE6d\u0292a\u026Al",phonetic_us:"\u02C8\xE6d\u0292l",phonetic_wrong:"\u0259'd\u0292a\u026Al"},{name:"AJAX",phonetic_uk:"'eid\u0292\xE6ks",phonetic_us:"'eid\u0292\xE6ks",phonetic_wrong:"\u0259'd\u0292\u028Cks"},{name:"alias",phonetic_uk:"\u02C8e\u026Ali\u0259s",phonetic_us:"\u02C8e\u026Ali\u0259s",phonetic_wrong:"\u0259'lais"},{name:"amazon",phonetic_uk:"'\xE6m\u0259z\u0259n",phonetic_us:"\u02C8\xE6m\u0259z\u0251\u02D0n",phonetic_wrong:"'\u0259meiz\u0259n"},{name:"analogy",phonetic_uk:"\u0259\u02C8n\xE6l\u0259d\u0292i",phonetic_us:"\u0259\u02C8n\xE6l\u0259d\u0292i",phonetic_wrong:"\xE6n\u0259'l\u0252d\u0292i"},{name:"Angular",phonetic_uk:"'\xE6\u014Bgj\u028Al\u0259",phonetic_us:"\u02C8\xE6\u014B\u0261j\u0259l\u0259r",phonetic_wrong:"'\xE6\u014B\u0261\u0259l\u0259"},{name:"Apache",phonetic_uk:"\u0259'p\xE6t\u0283\u026A",phonetic_us:"\u0259\u02C8p\xE6t\u0283i",phonetic_wrong:"\u028Cp\u028Ct\u0283"},{name:"app",phonetic_uk:"\xE6p",phonetic_us:"\xE6p",phonetic_wrong:"eipi'pi"},{name:"archive",phonetic_uk:"'\u0251\u02D0ka\u026Av",phonetic_us:"'\u0251\u02D0ka\u026Av",phonetic_wrong:"'\u0259t\u0283\u026Av"},{name:"array",phonetic_uk:"\u0259'rei",phonetic_us:"\u0259\u02C8re\u026A",phonetic_wrong:"\xE6'rei"},{name:"ASCII",phonetic_uk:"'\xE6ski",phonetic_us:"\u02C8\xE6ski",phonetic_wrong:"\u0251\u02D0sk"},{name:"aspect",phonetic_uk:"'\xE6spekt",phonetic_us:"\u02C8\xE6spekt",phonetic_wrong:"\u0259'spekt"},{name:"async",phonetic_uk:"\u0259\u02C8s\u026A\u014Bk",phonetic_us:"\xE6\u02C8s\u026A\u014Bk",phonetic_wrong:"'\xE6s\u026A\u014Bk"},{name:"avatar",phonetic_uk:"'\xE6v\u0259t\u0251\u02D0",phonetic_us:"\u02C8\xE6v\u0259t\u0251\u02D0r",phonetic_wrong:"\u0259'v\u028Ct\u0251"},{name:"Azure",phonetic_uk:"'\xE6\u0292\u0259",phonetic_us:"\u02C8\xE6\u0292\u0259r",phonetic_wrong:"\u02C8\xE6z\u028A\u0292\u0259"},{name:"bind",phonetic_uk:"ba\u026And",phonetic_us:"ba\u026And",phonetic_wrong:"b\u026And"},{name:"cache",phonetic_uk:"k\xE6\u0283",phonetic_us:"k\xE6\u0283",phonetic_wrong:"k\xE6t\u0283"},{name:"canal",phonetic_uk:"k\u0259\u02C8n\xE6l",phonetic_us:"k\u0259\u02C8n\xE6l",phonetic_wrong:"\u02C8k\xE6nl"},{name:"Chrome",phonetic_uk:"kr\u0259\u028Am",phonetic_us:"kro\u028Am",phonetic_wrong:"t\u0283\u0254\u02D0m"},{name:"clang",phonetic_uk:"kl\xE6\u014B",phonetic_us:"kl\xE6\u014B",phonetic_wrong:"s\u026Al\xE6\u014B"},{name:"daemon",phonetic_uk:"'di\u02D0m\u0259n",phonetic_us:"\u02C8di\u02D0m\u0259n",phonetic_wrong:"d\xE6m\u0259n"},{name:"debt",phonetic_uk:"det",phonetic_us:"det",phonetic_wrong:"de'bit"},{name:"deny",phonetic_uk:"d\u026A'na\u026A",phonetic_us:"d\u026A\u02C8na\u026A",phonetic_wrong:"'d\xE6ni"},{name:"deprecate",phonetic_uk:"\u02C8depr\u0259ke\u026At",phonetic_us:"\u02C8depr\u0259ke\u026At",phonetic_wrong:""},{name:"deque",phonetic_uk:"'dek",phonetic_us:"d\u025Bk",phonetic_wrong:"di'kju"},{name:"Django",phonetic_uk:"\u02C8d\u0292\xE6\u014B\u0261o\u028A",phonetic_us:"\u02C8d\u0292\xE6\u014B\u0261o\u028A",phonetic_wrong:"di\u02C8d\u0292\xE6\u014B\u0261o\u028A"},{name:"doc",phonetic_uk:"d\u0252k",phonetic_us:"d\u0252k",phonetic_wrong:"da\u028Ak"},{name:"dotnet",phonetic_uk:"d\u0252tnet",phonetic_us:"d\u0251\u02D0tnet",phonetic_wrong:"da\u028Atnet"},{name:"edition",phonetic_uk:"\u026A\u02C8d\u026A\u0283(\u0259)n",phonetic_us:"\u026A\u02C8d\u026A\u0283n",phonetic_wrong:"e\u02C8d\u026A\u0283n"},{name:"ephemeral",phonetic_uk:"\u026A\u02C8fem\u0259r\u0259l",phonetic_us:"\u026A\u02C8fem\u0259r\u0259l",phonetic_wrong:"da\u028Atnet"},{name:"epoch",phonetic_uk:"\u02C8i\u02D0p\u0252k",phonetic_us:"\u02C8ep\u0259k",phonetic_wrong:"'\u025Bp\u0259t\u0283"},{name:"event",phonetic_uk:"\u026A'vent",phonetic_us:"\u026A\u02C8vent",phonetic_wrong:"'\u026Av\u0259nt"},{name:"execute",phonetic_uk:"\u02C8eks\u026Akju\u02D0t",phonetic_us:"\u02C8eks\u026Akju\u02D0t",phonetic_wrong:""},{name:"executor",phonetic_uk:"\u026A\u0261\u02C8zekj\u0259t\u0259(r)",phonetic_us:"\u026A\u0261\u02C8zekj\u0259t\u0259r",phonetic_wrong:""},{name:"exit",phonetic_uk:"\u02C8eks\u026At",phonetic_us:"\u02C8eks\u026At",phonetic_wrong:"ig'zit"},{name:"facade",phonetic_uk:"f\u0259's\u0251\u02D0d",phonetic_us:"f\u0259\u02C8s\u0251\u02D0d",phonetic_wrong:"'feikeid"},{name:"fedora",phonetic_uk:"f\u026A'd\u0254\u02D0r\u0259",phonetic_us:"f\u026A\u02C8d\u0254\u02D0r\u0259",phonetic_wrong:"'fed\u0259r\u0259"},{name:"format",phonetic_uk:"'f\u0254\u02D0m\xE6t",phonetic_us:"\u02C8f\u0254\u02D0rm\xE6t",phonetic_wrong:"f\u0254'm\xE6t"},{name:"gauge",phonetic_uk:"\u0261e\u026Ad\u0292",phonetic_us:"\u0261e\u026Ad\u0292",phonetic_wrong:"\u0261\u0251ud\u0292"},{name:"Git",phonetic_uk:"\u0261\u026At",phonetic_us:"\u0261\u026At",phonetic_wrong:"d\u0292\u026At"},{name:"GNU",phonetic_uk:"gnu:",phonetic_us:"gnu\u02D0",phonetic_wrong:""},{name:"Grafana",phonetic_uk:"gr\u0259\u02C8f\u0251\u02D0n\u02CC\u0251\u02D0",phonetic_us:"gr\u0259\u02C8f\u0251\u02D0n\u02CC\u0251\u02D0",phonetic_wrong:""},{name:"GraphQL",phonetic_uk:"gr\xE6f kju \u025Bl",phonetic_us:"gr\xE6f kju \u025Bl",phonetic_wrong:"d\u0292\u026Agr\xE6f kju \u025Bl"},{name:"GUI",phonetic_uk:"\u02C8\u0261u:i",phonetic_us:"\u02C8\u0261u:i",phonetic_wrong:""},{name:"Haskell",phonetic_uk:"\u02C8h\xE6sk\u0259l",phonetic_us:"\u02C8h\xE6sk\u0259l",phonetic_wrong:"h\xE6\u02C8sk\u0259l"},{name:"height",phonetic_uk:"ha\u026At",phonetic_us:"ha\u026At",phonetic_wrong:"he\u026At"},{name:"hidden",phonetic_uk:"'h\u026Adn",phonetic_us:"\u02C8h\u026Adn",phonetic_wrong:"'ha\u026Adn"},{name:"image",phonetic_uk:"'\u026Am\u026Ad\u0292",phonetic_us:"\u02C8\u026Am\u026Ad\u0292",phonetic_wrong:"\u026A'me\u026Ad\u0292"},{name:"implement",phonetic_uk:"'\u026Ampl\u026Am(\u0259)nt",phonetic_us:"\u02C8\u026Ampl\u026Am\u0259nt",phonetic_wrong:"\u026Am'plem(\u0259)nt"},{name:"integer",phonetic_uk:"'\u026Ant\u026Ad\u0292\u0259",phonetic_us:"\u02C8\u026Ant\u026Ad\u0292\u0259r",phonetic_wrong:"\u02C8\u026Anta\u026Ag\u0259"},{name:"issue",phonetic_uk:"'\u026A\u0283u\u02D0",phonetic_us:"\u02C8\u026A\u0283u\u02D0",phonetic_wrong:"\u02C8a\u026A\u0283u\u02D0"},{name:"Java",phonetic_uk:"'d\u0292\u0251\u02D0v\u0259",phonetic_us:"\u02C8d\u0292\u0251\u02D0v\u0259",phonetic_wrong:""},{name:"jpg",phonetic_uk:"'d\u0292e\u026Ape\u0261",phonetic_us:"'d\u0292e\u026Ape\u0261",phonetic_wrong:"\u02C8d\u0292e\u026A\u02C8pi:\u02C8d\u0292i\u02D0"},{name:"key",phonetic_uk:"ki\u02D0",phonetic_us:"ki\u02D0",phonetic_wrong:"kei"},{name:"Kubernetes",phonetic_uk:"kub\u0437'net\u026As",phonetic_us:"ku\u02D0b\u0259\u02DE'netiz",phonetic_wrong:""},{name:"lambda",phonetic_uk:"\u02C8l\xE6md\u0259",phonetic_us:"\u02C8l\xE6md\u0259",phonetic_wrong:"\u02C8l\u0252\u014Bmd\u0251"},{name:"Ldap",phonetic_uk:"el'd\xE6p",phonetic_us:"el'd\xE6p",phonetic_wrong:"el'da\u02D0p"},{name:"linear",phonetic_uk:"'l\u026An\u026A\u0259",phonetic_us:"\u02C8l\u026Ani\u0259r",phonetic_wrong:"'la\u026A\u0259"},{name:"LINQ",phonetic_uk:"l\u026A\u014Bk",phonetic_us:"l\u026A\u014Bk",phonetic_wrong:"l\u026A\u014Bkju:"},{name:"Linux",phonetic_uk:"'l\u026An\u0259ks",phonetic_us:"\u02C8la\u026An\u0259ks",phonetic_wrong:"\u02C8l\u026An\u028Cks"},{name:"locale",phonetic_uk:"l\u0259\u028A'k\u0251\u02D0l",phonetic_us:"lo\u028A\u02C8k\xE6l",phonetic_wrong:"\u02C8lo\u028Ak(\u0259)l"},{name:"Lucene",phonetic_uk:"lu'si\u02D0n",phonetic_us:"lu'si\u02D0n",phonetic_wrong:"'lu:s\u0259n"},{name:"macro",phonetic_uk:"\u02C8m\xE6kr\u0259\u028A",phonetic_us:"\u02C8m\xE6kro\u028A",phonetic_wrong:"\u02C8makro\u028A"},{name:"main",phonetic_uk:"me\u026An",phonetic_us:"me\u026An",phonetic_wrong:"m\u026An"},{name:"margin",phonetic_uk:"'m\u0251\u02D0d\u0292\u026An",phonetic_us:"\u02C8m\u0251\u02D0rd\u0292\u026An",phonetic_wrong:"'m\u028Cg\u026An"},{name:"matrix",phonetic_uk:"\u02C8me\u026Atr\u026Aks",phonetic_us:"\u02C8me\u026Atr\u026Aks",phonetic_wrong:"\u02C8m\u0251:tr\u026Aks"},{name:"maven",phonetic_uk:"'me\u026Avn",phonetic_us:"\u02C8me\u026Avn",phonetic_wrong:"'ma\u02D0vn"},{name:"max",phonetic_uk:"m\xE6ks",phonetic_us:"m\xE6ks",phonetic_wrong:"m\u0251:ks"},{name:"Microsoft",phonetic_uk:"'maikr\u0259us\u0254ft",phonetic_us:"\u02C8ma\u026Akr\u0259s\u0254\u02D0ft",phonetic_wrong:"'mikr\u0259us\u0254ft"},{name:"miscellaneous",phonetic_uk:"\u02CCm\u026As\u0259\u02C8le\u026Ani\u0259s",phonetic_us:"\u02CCm\u026As\u0259\u02C8le\u026Ani\u0259s",phonetic_wrong:""},{name:"module",phonetic_uk:"'m\u0252dju\u02D0l",phonetic_us:"\u02C8m\u0251\u02D0d\u0292u\u02D0l",phonetic_wrong:"'m\u0259\u028Adl"},{name:"native",phonetic_uk:"\u02C8ne\u026At\u026Av",phonetic_us:"\u02C8ne\u026At\u026Av",phonetic_wrong:"\u02C8n\xE6t\u026Av"},{name:"null",phonetic_uk:"n\u028Cl",phonetic_us:"n\u028Cl",phonetic_wrong:"na\u028A"},{name:"obsolete",phonetic_uk:"\u02C8\u0252bs\u0259li\u02D0t",phonetic_us:"\u02CC\u0251\u02D0bs\u0259\u02C8li\u02D0t",phonetic_wrong:""},{name:"parameter",phonetic_uk:"p\u0259'r\xE6m\u026At\u0259",phonetic_us:"p\u0259\u02C8r\xE6m\u026At\u0259r",phonetic_wrong:"'p\xE6r\u0259m\u026At\u0259"},{name:"phantom",phonetic_uk:"'f\xE6nt\u0259m",phonetic_us:"\u02C8f\xE6nt\u0259m",phonetic_wrong:"'p\xE6nt\u0259m"},{name:"privilege",phonetic_uk:"'pr\u026Av\u0259l\u026Ad\u0292",phonetic_us:"\u02C8pr\u026Av\u0259l\u026Ad\u0292",phonetic_wrong:"'pr\u026Av\u026Al\u026Ad\u0292"},{name:"probe",phonetic_uk:"pr\u0259\u028Ab",phonetic_us:"pro\u028Ab",phonetic_wrong:"pro\u028Abi"},{name:"Prometheus",phonetic_uk:"pr\u0259-\u02C8m\u0113-th\u0113-\u0259s",phonetic_us:"pro'mi\u03B8\u026A\u0259s",phonetic_wrong:""},{name:"putty",phonetic_uk:"\u02C8p\u028Cti",phonetic_us:"\u02C8p\u028Cti",phonetic_wrong:"\u02C8pu\u02D0ti"},{name:"Qt",phonetic_uk:"kju\u02D0t",phonetic_us:"kju\u02D0t",phonetic_wrong:""},{name:"query",phonetic_uk:"'kw\u026A\u0259ri",phonetic_us:"\u02C8kw\u026Ari",phonetic_wrong:"'kwa\u026Ari"},{name:"Realm",phonetic_uk:"relm",phonetic_us:"relm",phonetic_wrong:"ri\u0259lm"},{name:"reconcile",phonetic_uk:"\u02C8rek\u0259nsa\u026Al",phonetic_us:"\u02C8rek\u0259nsa\u026Al",phonetic_wrong:""},{name:"Redux",phonetic_uk:"ri'd\u028Cks",phonetic_us:"ri'd\u028Cks",phonetic_wrong:"'ridju:ks"},{name:"resolved",phonetic_uk:"r\u026A'z\u0252lvd",phonetic_us:"r\u026A\u02C8z\u0251\u02D0lvd",phonetic_wrong:"r\u026A's\u0259\u028Avd"},{name:"resort",phonetic_uk:"r\u026A\u02C8z\u0254:t",phonetic_us:"r\u026A\u02C8z\u0254\u02D0rt",phonetic_wrong:"r\u026A\u02C8s\u0254:t"},{name:"resume",phonetic_uk:"r\u026A'zju:m",phonetic_us:"r\u026A\u02C8zu\u02D0m",phonetic_wrong:"r\u026A'sju:m"},{name:"retina",phonetic_uk:"'ret\u026An\u0259",phonetic_us:"\u02C8ret\u026An\u0259",phonetic_wrong:"ri'tina"},{name:"route",phonetic_uk:"ru\u02D0t",phonetic_us:"ru\u02D0t",phonetic_wrong:"r\u0259\u028At"},{name:"safari",phonetic_uk:"s\u0259'f\u0251\u02D0r\u026A",phonetic_us:"s\u0259\u02C8f\u0251\u02D0ri",phonetic_wrong:"s\xE6f\u0259r\u026A"},{name:"San Jose",phonetic_uk:"s\xE6nh\u0259u'zei",phonetic_us:"s\xE6nh\u0259u'zei",phonetic_wrong:"s\xE6n'ju:s"},{name:"scala",phonetic_uk:"\u02C8sk\u0251\u02D0l\u0251",phonetic_us:"\u02C8sk\u0251\u02D0l\u0251",phonetic_wrong:"\u02C8sk\xE6\u02D0l\u0251"},{name:"scheme",phonetic_uk:"ski\u02D0m",phonetic_us:"ski\u02D0m",phonetic_wrong:"s'k\xE6m\u0259"},{name:"segue",phonetic_uk:"'s\u025B\u0261we",phonetic_us:"\u02C8se\u0261we\u026A",phonetic_wrong:"se'd\u0292"},{name:"suite",phonetic_uk:"swi\u02D0t",phonetic_us:"swi\u02D0t",phonetic_wrong:"sju\u02D0t"},{name:"telemetry",phonetic_uk:"t\u0259\u02C8lem\u0259tri",phonetic_us:"t\u0259\u02C8lem\u0259tri",phonetic_wrong:"\u02C8tel\u026Am\u0259tri"},{name:"thymeleaf",phonetic_uk:"\u02C8ta\u026Am\u02CCl\u026A\u02D0f",phonetic_us:"\u02C8ta\u026Am\u02CCl\u026A\u02D0f",phonetic_wrong:"\u03B8i\u02D0m\u026Al\u026A\u02D0f"},{name:"tuple",phonetic_uk:"tj\u028Ap\u0259l",phonetic_us:"tu\u02D0p\u0259l",phonetic_wrong:""},{name:"typical",phonetic_uk:"'t\u026Ap\u026Akl",phonetic_us:"\u02C8t\u026Ap\u026Akl",phonetic_wrong:"'ta\u026Ap\u026Ak\u0259l"},{name:"Ubuntu",phonetic_uk:"\u028A'b\u028Ant\u028A",phonetic_us:"\u028A'b\u028Ant\u028A",phonetic_wrong:"ju\u02D0'b\u028Ant\u028A"},{name:"Vagrant",phonetic_uk:"\u02C8ve\u026A\u0261r\u0259nt",phonetic_us:"\u02C8ve\u026A\u0261r\u0259nt",phonetic_wrong:"\u02C8vag\u0279ent"},{name:"variable",phonetic_uk:"'ve\u0259ri\u0259bl",phonetic_us:"\u02C8veri\u0259bl",phonetic_wrong:"v\u0259'rai\u0259bl"},{name:"verbose",phonetic_uk:"v\u025C\u02D0\u02C8b\u0259\u028As",phonetic_us:"v\u025C\u02D0r\u02C8bo\u028As",phonetic_wrong:"'v\u025C\u02D0rbo\u028As"},{name:"Vite",phonetic_uk:"vit",phonetic_us:"vit",phonetic_wrong:"va\u026At"},{name:"vue",phonetic_uk:"v'ju:",phonetic_us:"v'ju:",phonetic_wrong:"v'ju:i"},{name:"width",phonetic_uk:"w\u026Ad\u03B8",phonetic_us:"w\u026Ad\u03B8",phonetic_wrong:"wa\u026Ad\u03B8"},{name:"YouTube",phonetic_uk:"'ju\u02D0'tju\u02D0b",phonetic_us:"'ju\u02D0'tju\u02D0b",phonetic_wrong:"'ju\u02D0't\u028Ab\u026A"}];const cf="chinese-programmer-wrong-pronunciation",lf="1.0.0",uf="chinese programmer wrong pronunciation",ff="index.html",af={dev:"vite","case-police":"npx case-police README.md scripts/data.json --fix",build:"node ./scripts/build.js",test:"http-server ./docs -c0",preversion:"npm run build"},hf={type:"git",url:"git+https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git"},pf=["pronunciation","chinese","english-learning"],df="",gf="MIT",mf={url:"https://github.com/shimohq/chinese-programmer-wrong-pronunciation/issues"},_f="https://github.com/shimohq/chinese-programmer-wrong-pronunciation",bf={"@purge-icons/generated":"^0.8.1","@vitejs/plugin-vue":"^2.0.0",autoprefixer:"^10.4.0",postcss:"^8.4.5","postcss-nesting":"^10.1.2","tailwind-percentage-property":"github:Lionad-Morotar/tailwind-percentage-property",tailwindcss:"^3.0.5",vite:"^2.7.2",vue:"^3.2.25","vue-router":"4.0.12"};var yf={name:cf,version:lf,description:uf,main:ff,scripts:af,repository:hf,keywords:pf,author:df,license:gf,bugs:mf,homepage:_f,devDependencies:bf};const Jn={__name:"Icon",props:{icon:String},setup(e){const t=e,n=st(null),o=async()=>{if(n.value){await Di();const s=di.renderSVG(t.icon,{});if(s)n.value.textContent="",n.value.appendChild(s);else{const i=document.createElement("span");i.className="iconify",i.dataset.icon=t.icon,n.value.textContent="",n.value.appendChild(i)}}};return cn(()=>t.icon,o,{flush:"post"}),Tn(o),(s,i)=>(dt(),gt("div",{ref_key:"el",ref:n,class:_t(s.$attrs.class),style:{"vertical-align":"text-bottom"}},null,2))}},wf={class:"text-xl mb-12"},vf={class:"icon-btn mx-2 disabled",disabled:"",title:"PR welcome!"},kf=["href"],xf={__name:"Header",setup(e){const t=yf.homepage,n=t+"#\u5355\u8BCD\u8868";return(o,s)=>(dt(),gt("div",wf,[z("div",vf,[pe(Jn,{icon:"ri:sun-line",class:"inline-block"})]),z("a",{class:"icon-btn mx-2",href:n,target:"_blank"},[pe(Jn,{icon:"ri:play-list-add-fill",class:"inline-block"})]),z("a",{class:"icon-btn mx-2",href:qo(t),target:"_blank"},[pe(Jn,{icon:"ri:github-fill",class:"inline-block"})],8,kf)]))}};var Cf=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n};const Ef={},If={class:"text-xs mt-24 text-gray-400"},Of=z("span",null,[yo("Thanks "),z("a",{href:"https://github.com/antfu/cpwp"},"antfu/CPWP"),yo(" !")],-1),Af=[Of];function jf(e,t){return dt(),gt("div",If,Af)}var Tf=Cf(Ef,[["render",jf]]);const Pf={class:"px-2 py-8 text-center text-gray-700 dark:text-gray-200"},Sf={class:"flex"},Ff=["innerHTML"],Mf={class:"flex"},Lf={class:"m-auto text-left"},Nf=z("thead",null,[z("tr",null,[z("th"),z("th",{class:"text-center"}," UK "),z("th",{class:"text-center"}," US "),z("th",{class:"text-center hidden lg:block"}," Wrong ")])],-1),Rf=["onClick"],$f=["onClick"],Df=["onClick"],Hf={class:"px-2 py-1.5 text-sm rounded text-center text-red-600 dark:text-red-400 opacity-50 hidden lg:block"},Uf={class:"m-auto"},Bf={class:"text-5xl mb-1"},Kf={class:"text-normal opacity-50"},qf={__name:"App",setup(e){const t=st(rf),n=st(""),o=st(""),s=st("us"),i=st(!1),r=Array.from("Chinese Programmer Wrong Pronunciation").map(p=>p===" "?"
":`${p}`).join(""),c=(p,g)=>{const y=new Audio(f(p.name,g)),E={1:"uk",2:"us"}[g];y.addEventListener("playing",()=>{n.value=p.name,s.value=E,o.value=p[`phonetic_${E}`],i.value=!0,setTimeout(()=>{i.value=!1},1e3)}),y.play()},l=p=>{window.open(`https://www.google.com/search?q=how+to+pronounce+${p.name.replace(/\s/g,"+")}`,"_blank")};function f(p,g){return`https://dict.youdao.com/dictvoice?audio=${p}&type=${g}`}function h(p){return"word-"+p.toLowerCase().replace(/\s+/g,"-")}return Tn(()=>{setTimeout(()=>{if(window.location.search){const p=window.location.search.split("?"),E=(p?p[1]:"").split("&").reduce((T,Y)=>{const[$,D]=Y.split("=");return T[$]=decodeURIComponent(D),T},{}),A="."+h(E.audio).toLowerCase().replace(/\s+/g,"-")+` > td:nth-child(${+E.type+1})`,j=document.querySelector(A);j&&(j.scrollIntoViewIfNeeded(),setTimeout(()=>{j.classList.add("animate-blink")},500))}},500)}),(p,g)=>(dt(),gt("div",Pf,[z("div",Sf,[z("h1",{class:"title mb-2 text-left m-auto font-thin",innerHTML:qo(r)},null,8,Ff)]),pe(xf),z("div",null,[z("div",Mf,[z("table",Lf,[Nf,z("tbody",null,[(dt(!0),gt(me,null,eu(t.value,y=>(dt(),gt("tr",{class:_t(h(y.name)),key:y.name},[z("td",{class:"px-2 py-1.5 rounded text-right pr-4 hover:bg-gray-400 hover:bg-opacity-10 cursor-pointer",onClick:E=>l(y)},ze(y.name),9,Rf),z("td",{class:"px-2 py-1.5 text-sm rounded text-center opacity-75 hover:bg-gray-500 hover:bg-opacity-10 cursor-pointer",onClick:E=>c(y,1)}," /"+ze(y.phonetic_uk)+"/ ",9,$f),z("td",{class:"px-2 py-1.5 text-sm rounded text-center opacity-75 hover:bg-gray-500 hover:bg-opacity-10 cursor-pointer",onClick:E=>c(y,2)}," /"+ze(y.phonetic_us)+"/ ",9,Df),z("td",Hf,ze(y.phonetic_wrong?`/${y.phonetic_wrong}/`:"-"),1)],2))),128))])])])]),pe(Tf),z("div",{class:_t(["modal fixed flex top-0 bottom-0 right-0 left-0 bg-white pointer-events-none transition-opacity duration-200 ease-in",i.value?"opacity-100":"opacity-0"])},[z("div",Uf,[z("div",Bf,ze(n.value),1),z("div",Kf,ze(s.value.toUpperCase())+" ["+ze(o.value)+"] ",1)])],2)]))}};of(qf).mount("#app"); diff --git a/docs/index.5cc2e3f7.css b/docs/index.5cc2e3f7.css new file mode 100644 index 0000000..7993b39 --- /dev/null +++ b/docs/index.5cc2e3f7.css @@ -0,0 +1 @@ +@import"https://fonts.googleapis.com/css2?family=Noto+Serif&display=swap";*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.fixed{position:fixed}.top-0{top:0px}.bottom-0{bottom:0px}.right-0{right:0px}.left-0{left:0px}.m-auto{margin:auto}.mx-2{margin-left:.5rem;margin-right:.5rem}.mb-2{margin-bottom:.5rem}.mb-1{margin-bottom:.25rem}.mt-24{margin-top:6rem}.mb-12{margin-bottom:3rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.hidden{display:none}.cursor-pointer{cursor:pointer}.rounded{border-radius:.25rem}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.px-2{padding-left:.5rem;padding-right:.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pr-4{padding-right:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-sm{font-size:.875rem;line-height:1.25rem}.text-5xl{font-size:3rem;line-height:1}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-thin{font-weight:100}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.opacity-75{opacity:.75}.opacity-50{opacity:.5}.opacity-100{opacity:1}.opacity-0{opacity:0}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}body{overflow:hidden scroll}html,body,#app{height:100vh;width:100vw;margin:0;padding:0;font-family:"Noto Serif",serif;scroll-behavior:smooth;scroll-padding-top:40px}.schema-dark,.schema-dark .modal{background:#222}.icon-btn{display:inline-block;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.5;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.icon-btn:hover{opacity:1}.icon-btn.disabled{cursor:not-allowed}.icon-btn.disabled:hover{opacity:.5}.hover\:bg-gray-400:hover{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity))}.hover\:bg-gray-500:hover{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity))}.hover\:bg-opacity-10:hover{--tw-bg-opacity: .1}@media (prefers-color-scheme: dark){.dark\:text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.dark\:text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}}@media (min-width: 1024px){.lg\:block{display:block}}span.iconify{background:#5551;border-radius:100%;min-width:1em;min-height:1em;display:block}.title span{opacity:.4;cursor:default;transition:.4s opacity ease}.title span:hover{opacity:1}.animate-blink{-webkit-animation:1.5s ease-in 0s 1 alternate blink;animation:1.5s ease-in 0s 1 alternate blink}@-webkit-keyframes blink{0%{background-color:#7a7a7a}to{background-color:#0000}}@keyframes blink{0%{background-color:#7a7a7a}to{background-color:#0000}} diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..8fed649 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,14 @@ + + + + + + Chinese Programmer Wrong Pronunciation + + + + +
+ + + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/favicon.ico differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..f52c3c3 --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + + Chinese Programmer Wrong Pronunciation + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..996395b --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "chinese-programmer-wrong-pronunciation", + "version": "1.0.0", + "description": "chinese programmer wrong pronunciation", + "main": "index.html", + "scripts": { + "dev": "vite", + "case-police": "npx case-police README.md scripts/data.json --fix", + "build": "node ./scripts/build.js", + "test": "http-server ./docs -c0", + "preversion": "npm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git" + }, + "keywords": [ + "pronunciation", + "chinese", + "english-learning" + ], + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/shimohq/chinese-programmer-wrong-pronunciation/issues" + }, + "homepage": "https://github.com/shimohq/chinese-programmer-wrong-pronunciation", + "devDependencies": { + "@purge-icons/generated": "^0.8.1", + "@vitejs/plugin-vue": "^2.0.0", + "autoprefixer": "^10.4.0", + "postcss": "^8.4.5", + "postcss-nesting": "^10.1.2", + "tailwind-percentage-property": "github:Lionad-Morotar/tailwind-percentage-property", + "tailwindcss": "^3.0.5", + "vite": "^2.7.2", + "vue": "^3.2.25", + "vue-router": "4.0.12" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..80baf91 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,948 @@ +lockfileVersion: 5.3 + +specifiers: + '@purge-icons/generated': ^0.8.1 + '@vitejs/plugin-vue': ^2.0.0 + autoprefixer: ^10.4.0 + postcss: ^8.4.5 + postcss-nesting: ^10.1.2 + tailwind-percentage-property: github:Lionad-Morotar/tailwind-percentage-property + tailwindcss: ^3.0.5 + vite: ^2.7.2 + vue: ^3.2.25 + vue-router: 4.0.12 + +devDependencies: + '@purge-icons/generated': 0.8.1 + '@vitejs/plugin-vue': 2.3.3_vite@2.9.14+vue@3.2.37 + autoprefixer: 10.4.7_postcss@8.4.14 + postcss: 8.4.14 + postcss-nesting: 10.1.10_postcss@8.4.14 + tailwind-percentage-property: github.com/Lionad-Morotar/tailwind-percentage-property/f41f06fb8a9a24edf5dd52671f07f325f1e3d6f8 + tailwindcss: 3.1.5 + vite: 2.9.14 + vue: 3.2.37 + vue-router: 4.0.12_vue@3.2.37 + +packages: + + /@babel/parser/7.18.8: + resolution: {integrity: sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA==} + engines: {node: '>=6.0.0'} + hasBin: true + dev: true + + /@csstools/selector-specificity/2.0.2_e73911252e8c76a7ba13ab9c39479e7d: + resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + postcss-selector-parser: ^6.0.10 + dependencies: + postcss: 8.4.14 + postcss-selector-parser: 6.0.10 + dev: true + + /@iconify/iconify/2.2.1: + resolution: {integrity: sha512-WJzw+3iicrF/tbjbxxRinSgy5FHdJoz/egTqwi3xCDkNRJPq482RX1iyaWrjNuY2vMNSPkQMuqHvZDXgA+WnwQ==} + dev: true + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + dev: true + + /@purge-icons/generated/0.8.1: + resolution: {integrity: sha512-rIExGA33EGKEToqtc8WfpboaR7or1XRp+KV1Y5v/P0Rq7G5Me95DmP3ow/MpG7ql+XZ9xPzyS2naGRx5358+6Q==} + dependencies: + '@iconify/iconify': 2.2.1 + dev: true + + /@vitejs/plugin-vue/2.3.3_vite@2.9.14+vue@3.2.37: + resolution: {integrity: sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==} + engines: {node: '>=12.0.0'} + peerDependencies: + vite: ^2.5.10 + vue: ^3.2.25 + dependencies: + vite: 2.9.14 + vue: 3.2.37 + dev: true + + /@vue/compiler-core/3.2.37: + resolution: {integrity: sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==} + dependencies: + '@babel/parser': 7.18.8 + '@vue/shared': 3.2.37 + estree-walker: 2.0.2 + source-map: 0.6.1 + dev: true + + /@vue/compiler-dom/3.2.37: + resolution: {integrity: sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==} + dependencies: + '@vue/compiler-core': 3.2.37 + '@vue/shared': 3.2.37 + dev: true + + /@vue/compiler-sfc/3.2.37: + resolution: {integrity: sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==} + dependencies: + '@babel/parser': 7.18.8 + '@vue/compiler-core': 3.2.37 + '@vue/compiler-dom': 3.2.37 + '@vue/compiler-ssr': 3.2.37 + '@vue/reactivity-transform': 3.2.37 + '@vue/shared': 3.2.37 + estree-walker: 2.0.2 + magic-string: 0.25.9 + postcss: 8.4.14 + source-map: 0.6.1 + dev: true + + /@vue/compiler-ssr/3.2.37: + resolution: {integrity: sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==} + dependencies: + '@vue/compiler-dom': 3.2.37 + '@vue/shared': 3.2.37 + dev: true + + /@vue/devtools-api/6.2.0: + resolution: {integrity: sha512-pF1G4wky+hkifDiZSWn8xfuLOJI1ZXtuambpBEYaf7Xaf6zC/pM29rvAGpd3qaGXnr4BAXU1Pxz/VfvBGwexGA==} + dev: true + + /@vue/reactivity-transform/3.2.37: + resolution: {integrity: sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==} + dependencies: + '@babel/parser': 7.18.8 + '@vue/compiler-core': 3.2.37 + '@vue/shared': 3.2.37 + estree-walker: 2.0.2 + magic-string: 0.25.9 + dev: true + + /@vue/reactivity/3.2.37: + resolution: {integrity: sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==} + dependencies: + '@vue/shared': 3.2.37 + dev: true + + /@vue/runtime-core/3.2.37: + resolution: {integrity: sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==} + dependencies: + '@vue/reactivity': 3.2.37 + '@vue/shared': 3.2.37 + dev: true + + /@vue/runtime-dom/3.2.37: + resolution: {integrity: sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==} + dependencies: + '@vue/runtime-core': 3.2.37 + '@vue/shared': 3.2.37 + csstype: 2.6.20 + dev: true + + /@vue/server-renderer/3.2.37_vue@3.2.37: + resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==} + peerDependencies: + vue: 3.2.37 + dependencies: + '@vue/compiler-ssr': 3.2.37 + '@vue/shared': 3.2.37 + vue: 3.2.37 + dev: true + + /@vue/shared/3.2.37: + resolution: {integrity: sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==} + dev: true + + /acorn-node/1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + dev: true + + /acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /arg/5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /autoprefixer/10.4.7_postcss@8.4.14: + resolution: {integrity: sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.1 + caniuse-lite: 1.0.30001363 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.14 + postcss-value-parser: 4.2.0 + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist/4.21.1: + resolution: {integrity: sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001363 + electron-to-chromium: 1.4.185 + node-releases: 2.0.6 + update-browserslist-db: 1.0.4_browserslist@4.21.1 + dev: true + + /camelcase-css/2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /caniuse-lite/1.0.30001363: + resolution: {integrity: sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==} + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /csstype/2.6.20: + resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} + dev: true + + /defined/1.0.0: + resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==} + dev: true + + /detective/5.2.1: + resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + acorn-node: 1.8.2 + defined: 1.0.0 + minimist: 1.2.6 + dev: true + + /didyoumean/1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /dlv/1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /electron-to-chromium/1.4.185: + resolution: {integrity: sha512-9kV/isoOGpKkBt04yYNaSWIBn3187Q5VZRtoReq8oz5NY/A4XmU6cAoqgQlDp7kKJCZMRjWZ8nsQyxfpFHvfyw==} + dev: true + + /esbuild-android-64/0.14.48: + resolution: {integrity: sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.14.48: + resolution: {integrity: sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.14.48: + resolution: {integrity: sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.14.48: + resolution: {integrity: sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.14.48: + resolution: {integrity: sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.14.48: + resolution: {integrity: sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.14.48: + resolution: {integrity: sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.14.48: + resolution: {integrity: sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.14.48: + resolution: {integrity: sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.14.48: + resolution: {integrity: sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.14.48: + resolution: {integrity: sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.14.48: + resolution: {integrity: sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.14.48: + resolution: {integrity: sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.14.48: + resolution: {integrity: sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.14.48: + resolution: {integrity: sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.14.48: + resolution: {integrity: sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.14.48: + resolution: {integrity: sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.14.48: + resolution: {integrity: sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.14.48: + resolution: {integrity: sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.14.48: + resolution: {integrity: sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.14.48: + resolution: {integrity: sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + esbuild-android-64: 0.14.48 + esbuild-android-arm64: 0.14.48 + esbuild-darwin-64: 0.14.48 + esbuild-darwin-arm64: 0.14.48 + esbuild-freebsd-64: 0.14.48 + esbuild-freebsd-arm64: 0.14.48 + esbuild-linux-32: 0.14.48 + esbuild-linux-64: 0.14.48 + esbuild-linux-arm: 0.14.48 + esbuild-linux-arm64: 0.14.48 + esbuild-linux-mips64le: 0.14.48 + esbuild-linux-ppc64le: 0.14.48 + esbuild-linux-riscv64: 0.14.48 + esbuild-linux-s390x: 0.14.48 + esbuild-netbsd-64: 0.14.48 + esbuild-openbsd-64: 0.14.48 + esbuild-sunos-64: 0.14.48 + esbuild-windows-32: 0.14.48 + esbuild-windows-64: 0.14.48 + esbuild-windows-arm64: 0.14.48 + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /fast-glob/3.2.11: + resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /fraction.js/4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + dev: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-core-module/2.9.0: + resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} + dependencies: + has: 1.0.3 + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /lilconfig/2.0.5: + resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} + engines: {node: '>=10'} + dev: true + + /magic-string/0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /minimist/1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + dev: true + + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /node-releases/2.0.6: + resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range/0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /object-hash/3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify/2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /postcss-import/14.1.0_postcss@8.4.14: + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.14 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.1 + dev: true + + /postcss-js/4.0.0_postcss@8.4.14: + resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.3.3 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.14 + dev: true + + /postcss-load-config/4.0.1_postcss@8.4.14: + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.0.5 + postcss: 8.4.14 + yaml: 2.1.1 + dev: true + + /postcss-nested/5.0.6_postcss@8.4.14: + resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.14 + postcss-selector-parser: 6.0.10 + dev: true + + /postcss-nesting/10.1.10_postcss@8.4.14: + resolution: {integrity: sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.0.2_e73911252e8c76a7ba13ab9c39479e7d + postcss: 8.4.14 + postcss-selector-parser: 6.0.10 + dev: true + + /postcss-selector-parser/6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss/8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /quick-lru/5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: true + + /read-cache/1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.9.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rollup/2.76.0: + resolution: {integrity: sha512-9jwRIEY1jOzKLj3nsY/yot41r19ITdQrhs+q3ggNWhr9TQgduHqANvPpS32RNpzGklJu3G1AJfvlZLi/6wFgWA==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /tailwindcss/3.1.5: + resolution: {integrity: sha512-bC/2dy3dGPqxMWAqFSRgQxVCfmO/31ZbeEp8s9DMDh4zgPZ5WW1gxRJkbBkXcTUIzaSUdhWrcsrSOe32ccgB4w==} + engines: {node: '>=12.13.0'} + hasBin: true + dependencies: + arg: 5.0.2 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.1 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.11 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.14 + postcss-import: 14.1.0_postcss@8.4.14 + postcss-js: 4.0.0_postcss@8.4.14 + postcss-load-config: 4.0.1_postcss@8.4.14 + postcss-nested: 5.0.6_postcss@8.4.14 + postcss-selector-parser: 6.0.10 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.1 + transitivePeerDependencies: + - ts-node + dev: true + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /update-browserslist-db/1.0.4_browserslist@4.21.1: + resolution: {integrity: sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.1 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /vite/2.9.14: + resolution: {integrity: sha512-P/UCjSpSMcE54r4mPak55hWAZPlyfS369svib/gpmz8/01L822lMPOJ/RYW6tLCe1RPvMvOsJ17erf55bKp4Hw==} + engines: {node: '>=12.2.0'} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + dependencies: + esbuild: 0.14.48 + postcss: 8.4.14 + resolve: 1.22.1 + rollup: 2.76.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vue-router/4.0.12_vue@3.2.37: + resolution: {integrity: sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg==} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@vue/devtools-api': 6.2.0 + vue: 3.2.37 + dev: true + + /vue/3.2.37: + resolution: {integrity: sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==} + dependencies: + '@vue/compiler-dom': 3.2.37 + '@vue/compiler-sfc': 3.2.37 + '@vue/runtime-dom': 3.2.37 + '@vue/server-renderer': 3.2.37_vue@3.2.37 + '@vue/shared': 3.2.37 + dev: true + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /yaml/2.1.1: + resolution: {integrity: sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==} + engines: {node: '>= 14'} + dev: true + + github.com/Lionad-Morotar/tailwind-percentage-property/f41f06fb8a9a24edf5dd52671f07f325f1e3d6f8: + resolution: {commit: f41f06fb8a9a24edf5dd52671f07f325f1e3d6f8, repo: git+ssh://git@github.com/Lionad-Morotar/tailwind-percentage-property.git, type: git} + name: tailwind-percentage-property + version: 2.0.3 + dev: true diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..615e562 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,9 @@ +module.exports = { + plugins: [ + // @see https://tailwindcss.com/docs/using-with-preprocessors#nesting + require('postcss-nesting'), + require('tailwindcss/nesting'), + require('tailwindcss'), + require('autoprefixer'), + ], +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/public/favicon.ico differ diff --git a/scripts/build.js b/scripts/build.js new file mode 100644 index 0000000..302fcb0 --- /dev/null +++ b/scripts/build.js @@ -0,0 +1,82 @@ +const fs = require('fs') +const path = require('path') +const execSync = require('child_process').execSync + +const pkgJSON = require('../package.json') +const issueURL = pkgJSON.bugs.url + +const words = require('./data.json') +const wordsPath = path.posix.join(__dirname, './data.json') +const readmePath = path.posix.join(__dirname, '../README.md') + +async function policeCase () { + try { + execSync('npx case-police README.md scripts/data.json', { stdio: 'inherit' }) + } catch (err) { + console.error('[Build Failed]', '请使用 npm run case-police 命令检查单词大小写并重新提交\n') + process.exit(-1) + } +} + +function sortWords (words) { + return words.sort((a, b) => { + const aname = a.name.toLowerCase() + const bname = b.name.toLowerCase() + if (aname < bname) { + return -1 + } else { + return 1 + } + }) +} + +function genWordURL (word, type) { + const safeWord = encodeURIComponent(word) + const safeType = encodeURIComponent(type) + const gitPagesURL= 'https://shimohq.github.io/chinese-programmer-wrong-pronunciation/' + return `${gitPagesURL}?audio=${safeWord}&type=${safeType}` +} + +async function genReadme (words) { + let tableContent = `| 单词 | 正确发音(英音)| 正确发音(美音)| 错误发音 |\n| --- | ----------- | ----------- | ---------- |` + words.map(word => { + tableContent += `\n| ${word.name} | [🔊](${genWordURL(word.name, 1)}) /${word.phonetic_uk}/ | [🔊](${genWordURL(word.name, 2)}) /${word.phonetic_us}/ | ${word.phonetic_wrong ? `❌ /${word.phonetic_us}/` : '-' } |` + }) + const readmeContent = fs.readFileSync(readmePath, 'utf-8') + const writeFlagStart = `` + const writeFlagEnd = `` + const writeContent = readmeContent.replace(new RegExp(`(${writeFlagStart})[^<]*(${writeFlagEnd})`), `$1\n${tableContent}\n$2`) + fs.writeFileSync(readmePath, writeContent) +} + +async function genHTML () { + execSync('vite build', { stdio: 'inherit' }) + + const indexPath = path.join(__dirname, '../docs/index.html') + const indexContent = fs.readFileSync(indexPath, 'utf-8') + const writeContent = indexContent + .replace(/src="([^"]*)"/g, "src='.$1'") + .replace(/href="([^"]*)"/g, "href='.$1'") + fs.writeFileSync(indexPath, writeContent) + + execSync('git add .', { stdio: 'inherit' }) + execSync('git commit -am "chore: build"', { stdio: 'inherit' }) +} + +async function main () { + try { + await policeCase() + const sortedWords = sortWords(words) + await genReadme(sortedWords) + await fs.writeFileSync(wordsPath, JSON.stringify(sortedWords, null, 2)) + await genHTML() + } catch (uncatchError) { + console.log(uncatchError) + console.log('[Build Failed]', 'issue welcome on', issueURL, '\n') + process.exit(-1) + } + + console.log('[Build Done]') +} + +main() diff --git a/scripts/data.json b/scripts/data.json new file mode 100644 index 0000000..0a26656 --- /dev/null +++ b/scripts/data.json @@ -0,0 +1,674 @@ +[ + { + "name": "access", + "phonetic_uk": "'ækses", + "phonetic_us": "ˈækses", + "phonetic_wrong": "ək'ses" + }, + { + "name": "admin", + "phonetic_uk": "'ædmɪn", + "phonetic_us": "ˈædmɪn", + "phonetic_wrong": "ɜ:d'mɪn" + }, + { + "name": "Adobe", + "phonetic_uk": "ə'dəʊbi", + "phonetic_us": "ə'dəʊbi", + "phonetic_wrong": "əˈdub" + }, + { + "name": "adversarial", + "phonetic_uk": "ˌædvəˈseəriəl", + "phonetic_us": "ˌædvərˈseriəl", + "phonetic_wrong": "ədˈvɜːrsəriəl" + }, + { + "name": "agile", + "phonetic_uk": "'ædʒaɪl", + "phonetic_us": "ˈædʒl", + "phonetic_wrong": "ə'dʒaɪl" + }, + { + "name": "AJAX", + "phonetic_uk": "'eidʒæks", + "phonetic_us": "'eidʒæks", + "phonetic_wrong": "ə'dʒʌks" + }, + { + "name": "alias", + "phonetic_uk": "ˈeɪliəs", + "phonetic_us": "ˈeɪliəs", + "phonetic_wrong": "ə'lais" + }, + { + "name": "amazon", + "phonetic_uk": "'æməzən", + "phonetic_us": "ˈæməzɑːn", + "phonetic_wrong": "'əmeizən" + }, + { + "name": "analogy", + "phonetic_uk": "əˈnælədʒi", + "phonetic_us": "əˈnælədʒi", + "phonetic_wrong": "ænə'lɒdʒi" + }, + { + "name": "Angular", + "phonetic_uk": "'æŋgjʊlə", + "phonetic_us": "ˈæŋɡjələr", + "phonetic_wrong": "'æŋɡələ" + }, + { + "name": "Apache", + "phonetic_uk": "ə'pætʃɪ", + "phonetic_us": "əˈpætʃi", + "phonetic_wrong": "ʌpʌtʃ" + }, + { + "name": "app", + "phonetic_uk": "æp", + "phonetic_us": "æp", + "phonetic_wrong": "eipi'pi" + }, + { + "name": "archive", + "phonetic_uk": "'ɑːkaɪv", + "phonetic_us": "'ɑːkaɪv", + "phonetic_wrong": "'ətʃɪv" + }, + { + "name": "array", + "phonetic_uk": "ə'rei", + "phonetic_us": "əˈreɪ", + "phonetic_wrong": "æ'rei" + }, + { + "name": "ASCII", + "phonetic_uk": "'æski", + "phonetic_us": "ˈæski", + "phonetic_wrong": "ɑːsk" + }, + { + "name": "aspect", + "phonetic_uk": "'æspekt", + "phonetic_us": "ˈæspekt", + "phonetic_wrong": "ə'spekt" + }, + { + "name": "async", + "phonetic_uk": "əˈsɪŋk", + "phonetic_us": "æˈsɪŋk", + "phonetic_wrong": "'æsɪŋk" + }, + { + "name": "avatar", + "phonetic_uk": "'ævətɑː", + "phonetic_us": "ˈævətɑːr", + "phonetic_wrong": "ə'vʌtɑ" + }, + { + "name": "Azure", + "phonetic_uk": "'æʒə", + "phonetic_us": "ˈæʒər", + "phonetic_wrong": "ˈæzʊʒə" + }, + { + "name": "bind", + "phonetic_uk": "baɪnd", + "phonetic_us": "baɪnd", + "phonetic_wrong": "bɪnd" + }, + { + "name": "cache", + "phonetic_uk": "kæʃ", + "phonetic_us": "kæʃ", + "phonetic_wrong": "kætʃ" + }, + { + "name": "canal", + "phonetic_uk": "kəˈnæl", + "phonetic_us": "kəˈnæl", + "phonetic_wrong": "ˈkænl" + }, + { + "name": "Chrome", + "phonetic_uk": "krəʊm", + "phonetic_us": "kroʊm", + "phonetic_wrong": "tʃɔːm" + }, + { + "name": "clang", + "phonetic_uk": "klæŋ", + "phonetic_us": "klæŋ", + "phonetic_wrong": "sɪlæŋ" + }, + { + "name": "daemon", + "phonetic_uk": "'diːmən", + "phonetic_us": "ˈdiːmən", + "phonetic_wrong": "dæmən" + }, + { + "name": "debt", + "phonetic_uk": "det", + "phonetic_us": "det", + "phonetic_wrong": "de'bit" + }, + { + "name": "deny", + "phonetic_uk": "dɪ'naɪ", + "phonetic_us": "dɪˈnaɪ", + "phonetic_wrong": "'dæni" + }, + { + "name": "deprecate", + "phonetic_uk": "ˈdeprəkeɪt", + "phonetic_us": "ˈdeprəkeɪt", + "phonetic_wrong": "" + }, + { + "name": "deque", + "phonetic_uk": "'dek", + "phonetic_us": "dɛk", + "phonetic_wrong": "di'kju" + }, + { + "name": "Django", + "phonetic_uk": "ˈdʒæŋɡoʊ", + "phonetic_us": "ˈdʒæŋɡoʊ", + "phonetic_wrong": "diˈdʒæŋɡoʊ" + }, + { + "name": "doc", + "phonetic_uk": "dɒk", + "phonetic_us": "dɒk", + "phonetic_wrong": "daʊk" + }, + { + "name": "dotnet", + "phonetic_uk": "dɒtnet", + "phonetic_us": "dɑːtnet", + "phonetic_wrong": "daʊtnet" + }, + { + "name": "edition", + "phonetic_uk": "ɪˈdɪʃ(ə)n", + "phonetic_us": "ɪˈdɪʃn", + "phonetic_wrong": "eˈdɪʃn" + }, + { + "name": "ephemeral", + "phonetic_uk": "ɪˈfemərəl", + "phonetic_us": "ɪˈfemərəl", + "phonetic_wrong": "daʊtnet" + }, + { + "name": "epoch", + "phonetic_uk": "ˈiːpɒk", + "phonetic_us": "ˈepək", + "phonetic_wrong": "'ɛpətʃ" + }, + { + "name": "event", + "phonetic_uk": "ɪ'vent", + "phonetic_us": "ɪˈvent", + "phonetic_wrong": "'ɪvənt" + }, + { + "name": "execute", + "phonetic_uk": "ˈeksɪkjuːt", + "phonetic_us": "ˈeksɪkjuːt", + "phonetic_wrong": "" + }, + { + "name": "executor", + "phonetic_uk": "ɪɡˈzekjətə(r)", + "phonetic_us": "ɪɡˈzekjətər", + "phonetic_wrong": "" + }, + { + "name": "exit", + "phonetic_uk": "ˈeksɪt", + "phonetic_us": "ˈeksɪt", + "phonetic_wrong": "ig'zit" + }, + { + "name": "facade", + "phonetic_uk": "fə'sɑːd", + "phonetic_us": "fəˈsɑːd", + "phonetic_wrong": "'feikeid" + }, + { + "name": "fedora", + "phonetic_uk": "fɪ'dɔːrə", + "phonetic_us": "fɪˈdɔːrə", + "phonetic_wrong": "'fedərə" + }, + { + "name": "format", + "phonetic_uk": "'fɔːmæt", + "phonetic_us": "ˈfɔːrmæt", + "phonetic_wrong": "fɔ'mæt" + }, + { + "name": "gauge", + "phonetic_uk": "ɡeɪdʒ", + "phonetic_us": "ɡeɪdʒ", + "phonetic_wrong": "ɡɑudʒ" + }, + { + "name": "Git", + "phonetic_uk": "ɡɪt", + "phonetic_us": "ɡɪt", + "phonetic_wrong": "dʒɪt" + }, + { + "name": "GNU", + "phonetic_uk": "gnu:", + "phonetic_us": "gnuː", + "phonetic_wrong": "" + }, + { + "name": "Grafana", + "phonetic_uk": "grəˈfɑːnˌɑː", + "phonetic_us": "grəˈfɑːnˌɑː", + "phonetic_wrong": "" + }, + { + "name": "GraphQL", + "phonetic_uk": "græf kju ɛl", + "phonetic_us": "græf kju ɛl", + "phonetic_wrong": "dʒɪgræf kju ɛl" + }, + { + "name": "GUI", + "phonetic_uk": "ˈɡu:i", + "phonetic_us": "ˈɡu:i", + "phonetic_wrong": "" + }, + { + "name": "Haskell", + "phonetic_uk": "ˈhæskəl", + "phonetic_us": "ˈhæskəl", + "phonetic_wrong": "hæˈskəl" + }, + { + "name": "height", + "phonetic_uk": "haɪt", + "phonetic_us": "haɪt", + "phonetic_wrong": "heɪt" + }, + { + "name": "hidden", + "phonetic_uk": "'hɪdn", + "phonetic_us": "ˈhɪdn", + "phonetic_wrong": "'haɪdn" + }, + { + "name": "image", + "phonetic_uk": "'ɪmɪdʒ", + "phonetic_us": "ˈɪmɪdʒ", + "phonetic_wrong": "ɪ'meɪdʒ" + }, + { + "name": "implement", + "phonetic_uk": "'ɪmplɪm(ə)nt", + "phonetic_us": "ˈɪmplɪmənt", + "phonetic_wrong": "ɪm'plem(ə)nt" + }, + { + "name": "integer", + "phonetic_uk": "'ɪntɪdʒə", + "phonetic_us": "ˈɪntɪdʒər", + "phonetic_wrong": "ˈɪntaɪgə" + }, + { + "name": "issue", + "phonetic_uk": "'ɪʃuː", + "phonetic_us": "ˈɪʃuː", + "phonetic_wrong": "ˈaɪʃuː" + }, + { + "name": "Java", + "phonetic_uk": "'dʒɑːvə", + "phonetic_us": "ˈdʒɑːvə", + "phonetic_wrong": "" + }, + { + "name": "jpg", + "phonetic_uk": "'dʒeɪpeɡ", + "phonetic_us": "'dʒeɪpeɡ", + "phonetic_wrong": "ˈdʒeɪˈpi:ˈdʒiː" + }, + { + "name": "key", + "phonetic_uk": "kiː", + "phonetic_us": "kiː", + "phonetic_wrong": "kei" + }, + { + "name": "Kubernetes", + "phonetic_uk": "kubз'netɪs", + "phonetic_us": "kuːbə˞'netiz", + "phonetic_wrong": "" + }, + { + "name": "lambda", + "phonetic_uk": "ˈlæmdə", + "phonetic_us": "ˈlæmdə", + "phonetic_wrong": "ˈlɒŋmdɑ" + }, + { + "name": "Ldap", + "phonetic_uk": "el'dæp", + "phonetic_us": "el'dæp", + "phonetic_wrong": "el'daːp" + }, + { + "name": "linear", + "phonetic_uk": "'lɪnɪə", + "phonetic_us": "ˈlɪniər", + "phonetic_wrong": "'laɪə" + }, + { + "name": "LINQ", + "phonetic_uk": "lɪŋk", + "phonetic_us": "lɪŋk", + "phonetic_wrong": "lɪŋkju:" + }, + { + "name": "Linux", + "phonetic_uk": "'lɪnəks", + "phonetic_us": "ˈlaɪnəks", + "phonetic_wrong": "ˈlɪnʌks" + }, + { + "name": "locale", + "phonetic_uk": "ləʊ'kɑːl", + "phonetic_us": "loʊˈkæl", + "phonetic_wrong": "ˈloʊk(ə)l" + }, + { + "name": "Lucene", + "phonetic_uk": "lu'siːn", + "phonetic_us": "lu'siːn", + "phonetic_wrong": "'lu:sən" + }, + { + "name": "macro", + "phonetic_uk": "ˈmækrəʊ", + "phonetic_us": "ˈmækroʊ", + "phonetic_wrong": "ˈmakroʊ" + }, + { + "name": "main", + "phonetic_uk": "meɪn", + "phonetic_us": "meɪn", + "phonetic_wrong": "mɪn" + }, + { + "name": "margin", + "phonetic_uk": "'mɑːdʒɪn", + "phonetic_us": "ˈmɑːrdʒɪn", + "phonetic_wrong": "'mʌgɪn" + }, + { + "name": "matrix", + "phonetic_uk": "ˈmeɪtrɪks", + "phonetic_us": "ˈmeɪtrɪks", + "phonetic_wrong": "ˈmɑ:trɪks" + }, + { + "name": "maven", + "phonetic_uk": "'meɪvn", + "phonetic_us": "ˈmeɪvn", + "phonetic_wrong": "'maːvn" + }, + { + "name": "max", + "phonetic_uk": "mæks", + "phonetic_us": "mæks", + "phonetic_wrong": "mɑ:ks" + }, + { + "name": "Microsoft", + "phonetic_uk": "'maikrəusɔft", + "phonetic_us": "ˈmaɪkrəsɔːft", + "phonetic_wrong": "'mikrəusɔft" + }, + { + "name": "miscellaneous", + "phonetic_uk": "ˌmɪsəˈleɪniəs", + "phonetic_us": "ˌmɪsəˈleɪniəs", + "phonetic_wrong": "" + }, + { + "name": "module", + "phonetic_uk": "'mɒdjuːl", + "phonetic_us": "ˈmɑːdʒuːl", + "phonetic_wrong": "'məʊdl" + }, + { + "name": "native", + "phonetic_uk": "ˈneɪtɪv", + "phonetic_us": "ˈneɪtɪv", + "phonetic_wrong": "ˈnætɪv" + }, + { + "name": "null", + "phonetic_uk": "nʌl", + "phonetic_us": "nʌl", + "phonetic_wrong": "naʊ" + }, + { + "name": "obsolete", + "phonetic_uk": "ˈɒbsəliːt", + "phonetic_us": "ˌɑːbsəˈliːt", + "phonetic_wrong": "" + }, + { + "name": "parameter", + "phonetic_uk": "pə'ræmɪtə", + "phonetic_us": "pəˈræmɪtər", + "phonetic_wrong": "'pærəmɪtə" + }, + { + "name": "phantom", + "phonetic_uk": "'fæntəm", + "phonetic_us": "ˈfæntəm", + "phonetic_wrong": "'pæntəm" + }, + { + "name": "privilege", + "phonetic_uk": "'prɪvəlɪdʒ", + "phonetic_us": "ˈprɪvəlɪdʒ", + "phonetic_wrong": "'prɪvɪlɪdʒ" + }, + { + "name": "probe", + "phonetic_uk": "prəʊb", + "phonetic_us": "proʊb", + "phonetic_wrong": "proʊbi" + }, + { + "name": "Prometheus", + "phonetic_uk": "prə-ˈmē-thē-əs", + "phonetic_us": "pro'miθɪəs", + "phonetic_wrong": "" + }, + { + "name": "putty", + "phonetic_uk": "ˈpʌti", + "phonetic_us": "ˈpʌti", + "phonetic_wrong": "ˈpuːti" + }, + { + "name": "Qt", + "phonetic_uk": "kjuːt", + "phonetic_us": "kjuːt", + "phonetic_wrong": "" + }, + { + "name": "query", + "phonetic_uk": "'kwɪəri", + "phonetic_us": "ˈkwɪri", + "phonetic_wrong": "'kwaɪri" + }, + { + "name": "Realm", + "phonetic_uk": "relm", + "phonetic_us": "relm", + "phonetic_wrong": "riəlm" + }, + { + "name": "reconcile", + "phonetic_uk": "ˈrekənsaɪl", + "phonetic_us": "ˈrekənsaɪl", + "phonetic_wrong": "" + }, + { + "name": "Redux", + "phonetic_uk": "ri'dʌks", + "phonetic_us": "ri'dʌks", + "phonetic_wrong": "'ridju:ks" + }, + { + "name": "resolved", + "phonetic_uk": "rɪ'zɒlvd", + "phonetic_us": "rɪˈzɑːlvd", + "phonetic_wrong": "rɪ'səʊvd" + }, + { + "name": "resort", + "phonetic_uk": "rɪˈzɔ:t", + "phonetic_us": "rɪˈzɔːrt", + "phonetic_wrong": "rɪˈsɔ:t" + }, + { + "name": "resume", + "phonetic_uk": "rɪ'zju:m", + "phonetic_us": "rɪˈzuːm", + "phonetic_wrong": "rɪ'sju:m" + }, + { + "name": "retina", + "phonetic_uk": "'retɪnə", + "phonetic_us": "ˈretɪnə", + "phonetic_wrong": "ri'tina" + }, + { + "name": "route", + "phonetic_uk": "ruːt", + "phonetic_us": "ruːt", + "phonetic_wrong": "rəʊt" + }, + { + "name": "safari", + "phonetic_uk": "sə'fɑːrɪ", + "phonetic_us": "səˈfɑːri", + "phonetic_wrong": "sæfərɪ" + }, + { + "name": "San Jose", + "phonetic_uk": "sænhəu'zei", + "phonetic_us": "sænhəu'zei", + "phonetic_wrong": "sæn'ju:s" + }, + { + "name": "scala", + "phonetic_uk": "ˈskɑːlɑ", + "phonetic_us": "ˈskɑːlɑ", + "phonetic_wrong": "ˈskæːlɑ" + }, + { + "name": "scheme", + "phonetic_uk": "skiːm", + "phonetic_us": "skiːm", + "phonetic_wrong": "s'kæmə" + }, + { + "name": "segue", + "phonetic_uk": "'sɛɡwe", + "phonetic_us": "ˈseɡweɪ", + "phonetic_wrong": "se'dʒ" + }, + { + "name": "suite", + "phonetic_uk": "swiːt", + "phonetic_us": "swiːt", + "phonetic_wrong": "sjuːt" + }, + { + "name": "telemetry", + "phonetic_uk": "təˈlemətri", + "phonetic_us": "təˈlemətri", + "phonetic_wrong": "ˈtelɪmətri" + }, + { + "name": "thymeleaf", + "phonetic_uk": "ˈtaɪmˌlɪːf", + "phonetic_us": "ˈtaɪmˌlɪːf", + "phonetic_wrong": "θiːmɪlɪːf" + }, + { + "name": "tuple", + "phonetic_uk": "tjʊpəl", + "phonetic_us": "tuːpəl", + "phonetic_wrong": "" + }, + { + "name": "typical", + "phonetic_uk": "'tɪpɪkl", + "phonetic_us": "ˈtɪpɪkl", + "phonetic_wrong": "'taɪpɪkəl" + }, + { + "name": "Ubuntu", + "phonetic_uk": "ʊ'bʊntʊ", + "phonetic_us": "ʊ'bʊntʊ", + "phonetic_wrong": "juː'bʊntʊ" + }, + { + "name": "Vagrant", + "phonetic_uk": "ˈveɪɡrənt", + "phonetic_us": "ˈveɪɡrənt", + "phonetic_wrong": "ˈvagɹent" + }, + { + "name": "variable", + "phonetic_uk": "'veəriəbl", + "phonetic_us": "ˈveriəbl", + "phonetic_wrong": "və'raiəbl" + }, + { + "name": "verbose", + "phonetic_uk": "vɜːˈbəʊs", + "phonetic_us": "vɜːrˈboʊs", + "phonetic_wrong": "'vɜːrboʊs" + }, + { + "name": "Vite", + "phonetic_uk": "vit", + "phonetic_us": "vit", + "phonetic_wrong": "vaɪt" + }, + { + "name": "vue", + "phonetic_uk": "v'ju:", + "phonetic_us": "v'ju:", + "phonetic_wrong": "v'ju:i" + }, + { + "name": "width", + "phonetic_uk": "wɪdθ", + "phonetic_us": "wɪdθ", + "phonetic_wrong": "waɪdθ" + }, + { + "name": "YouTube", + "phonetic_uk": "'juː'tjuːb", + "phonetic_us": "'juː'tjuːb", + "phonetic_wrong": "'juː'tʊbɪ" + } +] \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..1328dbc --- /dev/null +++ b/src/App.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/components/Footer.vue b/src/components/Footer.vue new file mode 100644 index 0000000..e69c4ce --- /dev/null +++ b/src/components/Footer.vue @@ -0,0 +1,8 @@ + + + diff --git a/src/components/Header.vue b/src/components/Header.vue new file mode 100644 index 0000000..9470c18 --- /dev/null +++ b/src/components/Header.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/components/Icon.vue b/src/components/Icon.vue new file mode 100644 index 0000000..dea6676 --- /dev/null +++ b/src/components/Icon.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..45f4ed9 --- /dev/null +++ b/src/main.js @@ -0,0 +1,9 @@ +import './main.postcss' +import '@purge-icons/generated' + +import { createApp } from 'vue' +import App from './App.vue' + +/** Mount Vue */ + +createApp(App).mount('#app') diff --git a/src/main.postcss b/src/main.postcss new file mode 100644 index 0000000..55d9264 --- /dev/null +++ b/src/main.postcss @@ -0,0 +1,37 @@ +@import 'tailwindcss/base'; +@import 'tailwindcss/components'; +@import 'tailwindcss/utilities'; + +/** + * Font Noto Serif + * @fixme 有些音标的字形在下载的 Noto-Serif 和谷歌字体 Noto-Serif 页面中是缺失的, + * 但它在谷歌字体的搜索页面中音标能正常显示, + * 已经在谷歌字体页面中提交了反馈,不知道会不会有回复 + * @see https://fonts.google.com/noto/specimen/Noto+Serif + */ +@import url('https://fonts.googleapis.com/css2?family=Noto+Serif&display=swap'); + +body { + overflow: hidden scroll; +} + +html, body, #app { + height: 100vh; + width: 100vw; + margin: 0; + padding: 0; + font-family: 'Noto Serif', serif; + scroll-behavior: smooth; + scroll-padding-top: 40px; +} + +.schema-dark, .schema-dark .modal { + background: #222; +} + +.icon-btn { + @apply opacity-50 transition duration-200 ease-in-out cursor-pointer inline-block select-none hover:opacity-100; + &.disabled { + @apply hover:opacity-50 cursor-not-allowed; + } +} diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..87c2c0a --- /dev/null +++ b/src/store/index.js @@ -0,0 +1 @@ +export * from './local' diff --git a/src/store/local.js b/src/store/local.js new file mode 100644 index 0000000..949e753 --- /dev/null +++ b/src/store/local.js @@ -0,0 +1,4 @@ +import { Ref } from 'vue' +import { useStorage } from '@vueuse/core' + +export const colorSchema = useStorage('vitesse-schema', 'auto') diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..4299b56 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,16 @@ +module.exports = { + purge: [ + './src/**/*.html', + './src/**/*.{vue,js,ts,jsx,tsx}' + ], + content: [], + theme: { + extend: {}, + fontFamily: { + "noto-serif": ['"Noto Serif"', 'serif'] + } + }, + plugins: [ + require('tailwind-percentage-property') + ], +} diff --git a/tools/addword.py b/tools/addword.py deleted file mode 100755 index 21a0050..0000000 --- a/tools/addword.py +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env python3.8 -# -*- coding: UTF-8 -*- -""" -Create the description for a word to be added to the word list -Usage: addword.py -""" -import re -import sys -import urllib.request -from bs4 import BeautifulSoup - - -def main(): - """Generate the information with pronunciations for a word to be added to the word list""" - if len(sys.argv) != 2: - print(__doc__) - sys.exit(1) - word = sys.argv[1] - pronunciations = get_pronunciations(word) - britsh_en = '[🔊](' + pronunciations[0][0] + ')' + ' ' + '/' + pronunciations[0][1] + '/' - american_en = '[🔊](' + pronunciations[1][0] + ')' + ' ' + '/' + pronunciations[1][1] + '/' - line = '| ' + word + ' | ' + britsh_en + ' | ' + american_en + ' | ' + ' ' + '|' - print(line) - - -def get_pronunciations(word): - """Return the word's pronouciation URLs and phonetic transcriptions - from youdao.com if available""" - word = word.strip() - word_url = 'https://dict.youdao.com/w/en/' + word - pron_url = 'https://dict.youdao.com/dictvoice?audio='+ word + '&' - britsh_en = [" ", " "] - american_en = [" ", " "] - try: - response = urllib.request.urlopen(word_url).read() - soup = BeautifulSoup(response, 'html.parser') - spans = soup.find_all('span', {'class': 'pronounce'}) - lines = [span.get_text() for span in spans] - match = re.findall(r'\[.+\]', lines[0]) - britsh_en[0] = pron_url + 'type=1' - britsh_en[1] = match[0].replace('[', '').replace(']', '') - match = re.findall(r'\[.+\]', lines[1]) - american_en[0] = pron_url + 'type=2' - american_en[1] = match[0].replace('[', '').replace(']', '') - except: - return britsh_en, american_en - - return britsh_en, american_en - - -if __name__ == '__main__': - main() diff --git a/tools/chromium_extension/README.md b/tools/chromium_extension/README.md deleted file mode 100644 index 952d08a..0000000 --- a/tools/chromium_extension/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# 无页面跳转收听正确读音 的 chromium 扩展 - -## [获得最新版扩展](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation.git) - -## 手动安装扩展 - -> 1. 下载 [chinese-programmer-wrong-pronunciation](https://github.com/shimohq/chinese-programmer-wrong-pronunciation/archive/refs/heads/master.zip) 然后解压,找到 `tools/chromium_extension` 子目录 -> 2. 打开 Chrome,输入: `chrome://extensions/` -> 3. 勾选 Developer Mode -> 4. 选择 Load unpacked extension... 然后定位到刚才解压的文件夹里面的 `tools/chromium_extension` 目录,确定 -> 5. 这就安装好了,去掉 Developer Mode 勾选。 -> 6. 打开[`https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git`](https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git)点击单词,即可听正确的单词读音 - -## 扩展开发参考 - -1. [content_scripts](https:////developer.chrome.com/docs/extensions/mv3/content_scripts/) -1. [Declare permissions](https:////developer.chrome.com/docs/extensions/mv3/declare_permissions/) -1. [ReplaceGoogleCDN](https://github.com/justjavac/ReplaceGoogleCDN.git) - -## note - -```text -https://dict.youdao.com/dictvoice?audio=parameter&type=1 - -``` diff --git a/tools/chromium_extension/css/app.css b/tools/chromium_extension/css/app.css deleted file mode 100644 index a21d55b..0000000 --- a/tools/chromium_extension/css/app.css +++ /dev/null @@ -1,31 +0,0 @@ -tr:hover { - border: 8px solid #ddd !important; - border-radius: 8px !important; - box-shadow: 5px 5px 15px #daf5fe !important; - - color: #fff !important; - background-color: #3ec487 !important; - /* - font-weight: 200; - font-size: 1.1rem; - */ -} - -#chinese-programmer-wrong-pronunciation-custom-iframe-box { - border: 8px solid #ddd !important; - border-radius: 8px !important; - box-shadow: 5px 5px 15px #daf5fe !important; - z-index: 999; - position: fixed !important; -} -.chinese-programmer-wrong-pronunciation-custom-iframe-box { - right: 0 !important; - top: 64px !important; -} - -#chinese-programmer-wrong-pronunciation-custom-iframe { - width: 100%; - height: 100%; - min-width: 700px !important; - min-height: 600px !important; -} diff --git a/tools/chromium_extension/format-code.sh b/tools/chromium_extension/format-code.sh deleted file mode 100644 index 67dac69..0000000 --- a/tools/chromium_extension/format-code.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/env bash - -set -exu - -__DIR__=$(cd "$(dirname "$0")";pwd) -cd ${__DIR__} - -npm run format-code \ No newline at end of file diff --git a/tools/chromium_extension/images/README.md b/tools/chromium_extension/images/README.md deleted file mode 100644 index 765d08e..0000000 --- a/tools/chromium_extension/images/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# 新增功能截图 - -## 嵌入搜索引擎 谷歌搜索 - -![](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation/blob/master/tools/chromium_extension/images/%E6%88%AA%E5%9B%BE2022-06-14-22-11.png?raw=true) - -## 嵌入搜索引擎 有道搜索 - -![](https://raw.githubusercontent.com/jingjingxyk/chinese-programmer-wrong-pronunciation/master/tools/chromium_extension/images/截图2022-06-14-22-10.png) diff --git a/tools/chromium_extension/images/截图2022-06-14-22-10.png b/tools/chromium_extension/images/截图2022-06-14-22-10.png deleted file mode 100644 index ba8444c..0000000 Binary files a/tools/chromium_extension/images/截图2022-06-14-22-10.png and /dev/null differ diff --git a/tools/chromium_extension/images/截图2022-06-14-22-11.png b/tools/chromium_extension/images/截图2022-06-14-22-11.png deleted file mode 100644 index a03a8b3..0000000 Binary files a/tools/chromium_extension/images/截图2022-06-14-22-11.png and /dev/null differ diff --git a/tools/chromium_extension/js/app/box.js b/tools/chromium_extension/js/app/box.js deleted file mode 100644 index 31641c9..0000000 --- a/tools/chromium_extension/js/app/box.js +++ /dev/null @@ -1,42 +0,0 @@ -import * as utils from "./utils.js"; -import * as components from "./components.js"; -import * as searchEngine from "./search-engine.js"; - -let goToSearchPronounce = (word) => { - let search_engine_name = "gotToGoogleSearch"; - // search_engine_name='gotToYouDaoSearch' - // search_engine_name = "goToBingDictSearch"; - // search_engine_name = "goToBingSearch"; - search_engine_name = "gotToYouDaoSearch"; - // search_engine_name = "goToBaiduFanYiSearch"; - //let tab = "current_tab"; - let tab = "new_tab"; //修改默认为新标签页打开 - - let opener = components.getSearchEngineOpener(); - if (opener && opener.expired_date) { - if (opener.expired_date > new Date().getTime()) { - if (opener.search_engine_name) { - search_engine_name = opener.search_engine_name; - } - if (opener.tab) { - tab = opener.tab; - } - } - } - if (search_engine_name && searchEngine[search_engine_name]) { - console.log(word); - let url = searchEngine[search_engine_name](word); - console.log(url); - if (tab === "new_tab") { - window.open(url, "_blank"); - } else { - let iframe = components.getIframe(); - iframe.setAttribute("src", url); - } - } else { - console.log("search engine no found !"); - } -}; - -let box = { ...utils, ...components, ...searchEngine, goToSearchPronounce }; -export default box; diff --git a/tools/chromium_extension/js/app/components.js b/tools/chromium_extension/js/app/components.js deleted file mode 100644 index c4a159a..0000000 --- a/tools/chromium_extension/js/app/components.js +++ /dev/null @@ -1,131 +0,0 @@ -import { prettyBox } from "./pretty-box.js"; - -let styleConfig = () => { - let css = document.createElement("link"); - css.setAttribute("rel", "stylesheet"); - css.setAttribute("type", "text/css"); - css.setAttribute("href", chrome.runtime.getURL("css/app.css")); - document.head.appendChild(css); -}; - -let customElement = () => { - let link = document.createElement("link"); - link.setAttribute( - "href", - chrome.runtime.getURL("web-components/x-custom-box.html") - ); - document.head.appendChild(link); -}; - -let getIframe = () => { - let box = document.querySelector( - "#chinese-programmer-wrong-pronunciation-custom-iframe-box" - ); - let iframe = null; - if (!box) { - let custom_box = document.createElement( - "x-chinese-programmer-wrong-pronunciation-custom-box" - ); - - let aside = document.createElement("aside"); - aside.setAttribute( - "id", - "chinese-programmer-wrong-pronunciation-custom-iframe-box" - ); - aside.setAttribute( - "class", - "chinese-programmer-wrong-pronunciation-custom-iframe-box" - ); - aside.setAttribute("draggable", "true"); - - iframe = document.createElement("iframe"); - iframe.setAttribute( - "id", - "chinese-programmer-wrong-pronunciation-custom-iframe" - ); - iframe.setAttribute("security", "restricted"); - //iframe.setAttribute('sandbox',"") - aside.appendChild(iframe); - custom_box.appendChild(aside); - document.body.appendChild(custom_box); - - //设置 box 可 拖拽 - prettyBox(aside); - //显示重置按键 - //showResetCurrentSearchEngineTab() - } else { - iframe = box.querySelector( - "#chinese-programmer-wrong-pronunciation-custom-iframe" - ); - } - return iframe; -}; - -let opener_key = "how-to-pronounce-from-search-engine-open-tab-opener"; -let getSearchEngineOpener = () => { - return JSON.parse(sessionStorage.getItem(opener_key)); -}; - -let showResetCurrentSearchEngineTab = () => { - let div = document.createElement("div"); - div.setAttribute( - "id", - "#chinese-programmer-wrong-pronunciation-custom-tools-bar" - ); - div.innerHTML = ` - 关闭搜索页面🥳🥳🥳🥳🥳🥳更换搜索引擎 - `; - - document - .querySelector("#chinese-programmer-wrong-pronunciation-custom-iframe-box") - .appendChild(div); -}; -let setSearchEngineOpener = (search_engine_name, tab) => { - let opener = getSearchEngineOpener(); - if (!opener || opener.expired_date < new Date().getTime()) { - search_engine_name = "gotToGoogleSearch"; - /* - if (window.confirm('默认有道词典搜索,选择 “取消” 将设置为谷歌搜索,有效期一天')) { //当前页面展示搜索结果 - search_engine_name = "gotToYouDaoSearch" - } else { - //新开标签页展示搜索结果 - search_engine_name = "gotToGoogleSearch" - } - */ - - //页面展示方式,默认有效期一天 - let expired_date = new Date().getTime() + 24 * 60 * 60 * 1000; - // expired_date = (new Date()).getTime() + 10000 # test expired - - tab = "current_tab"; - /* - if (window.confirm('允许当前页面展示搜索结果')) { //当前页面展示搜索结果 - tab = "current_tab" - } else { - //新开标签页展示搜索结果 - tab = "new_tab" - } - */ - - sessionStorage.setItem( - opener_key, - JSON.stringify({ - tab: tab, - expired_date: expired_date, - search_engine_name: search_engine_name, - }) - ); - } -}; - -let cleanOpener = () => { - sessionStorage.removeItem(opener_key); -}; - -export { - styleConfig, - customElement, - getIframe, - getSearchEngineOpener, - setSearchEngineOpener, -}; diff --git a/tools/chromium_extension/js/app/init.js b/tools/chromium_extension/js/app/init.js deleted file mode 100644 index 6a5818e..0000000 --- a/tools/chromium_extension/js/app/init.js +++ /dev/null @@ -1,66 +0,0 @@ -import box from "./box.js"; - -let init = () => { - let URLObj = new URL(location.href); - console.log(URLObj); - if (document.querySelector("#readme table tbody")) { - box.styleConfig(); - box.customElement(); - - let audio_player = new Audio(); - audio_player.setAttribute("autoplay", "true"); - document - .querySelector("#readme table tbody") - .addEventListener("click", (event) => { - //console.log(event.target) - // console.log(event.target.nodeType) - // console.log(event.target.nodeName); - let parentElement = event.target.parentElement; - if (parentElement && parentElement.nodeName === "TR") { - if (parentElement.firstElementChild === event.target) { - //使用搜索引擎查询发音 - box.goToSearchPronounce(event.target.innerText); - } - } - event.preventDefault(); - event.stopPropagation(); - let audio_url = null; - if (event.target.nodeName === "TD") { - let aTag = event.target.querySelector("a"); - if (aTag) { - audio_url = aTag.getAttribute("href"); - } - } - if (event.target.nodeName === "IMG") { - let aTag = event.target.parentNode.parentNode; - audio_url = aTag.getAttribute("href"); - } - if (audio_url) { - let desURL = new URL(audio_url); - //console.log(desURL.protocol); - if (desURL.protocol === "http:") { - //skip http - location.href = audio_url; - } else { - // console.log("audio_url:", audio_url); - audio_player.setAttribute("src", audio_url); - } - } - }); - document - .querySelector("#readme table tbody") - .addEventListener("mouseover", (event) => { - let parentElement = event.target.parentElement; - if (parentElement && parentElement.nodeName === "TR") { - if (parentElement.firstElementChild === event.target) { - event.target.setAttribute("title", "点击我打开搜索引擎检索"); - event.target.style.cursor = "pointer"; - } - } - }); - } else { - console.log("no found README.md table"); - } -}; - -export { init }; diff --git a/tools/chromium_extension/js/app/pretty-box.js b/tools/chromium_extension/js/app/pretty-box.js deleted file mode 100644 index 329b7ac..0000000 --- a/tools/chromium_extension/js/app/pretty-box.js +++ /dev/null @@ -1,74 +0,0 @@ -import { addClass, removeClass } from "./utils.js"; - -let prettyBox = (box) => { - // 参考 https://blog.csdn.net/weixin_41910848/article/details/82218243 - - let dragging = false; - let diffX = null; - let diffY = null; - box.onmousedown = function (event) { - dragging = true; - - let left = box.offsetLeft; - let top = box.offsetTop; - - removeClass( - box, - "chinese-programmer-wrong-pronunciation-custom-iframe-box" - ); - - box.style.left = left + "px"; - box.style.top = top + "px"; - - diffX = event.clientX - left; - diffY = event.clientY - top; - }; - document.onmousemove = function (event) { - if (dragging) { - // console.log(event.clientX, event.clientY) - //console.log(diffX, diffY) - - let moveX = event.clientX - diffX; - let moveY = event.clientY - diffY; - - if (moveX < 0) { - moveX = 0; - } else if (moveX > window.innerWidth - box.offsetWidth) { - moveX = window.innerWidth - box.offsetWidth; - } - if (moveY < 0) { - moveY = 0; - } else if (moveY > window.innerHeight - box.offsetHeight) { - moveY = window.innerHeight - box.offsetHeight; - } - - box.style.left = moveX + "px"; - box.style.top = moveY + "px"; - - event.stopPropagation(); - event.preventDefault(); - } - }; - document.onmouseup = function (event) { - dragging = false; - }; - - box.onmouseup = (event) => { - dragging = false; - }; - - box.ondragstart = function (event) { - console.log(box.offsetLeft, box.offsetTop); - console.log("开始拖拽"); - }; - box.ondrag = function () { - console.log(box.offsetLeft, box.offsetTop); - console.log("拖拽中"); - }; - box.ondragend = function () { - console.log(box.offsetLeft, box.offsetTop); - console.log("拖拽结束"); - }; -}; - -export { prettyBox }; diff --git a/tools/chromium_extension/js/app/search-engine.js b/tools/chromium_extension/js/app/search-engine.js deleted file mode 100644 index c9ba0d0..0000000 --- a/tools/chromium_extension/js/app/search-engine.js +++ /dev/null @@ -1,44 +0,0 @@ -let gotToGoogleSearch = (word) => { - word = word.replace(/\s/, "+"); - return `https://www.google.com/search?q=how+to+pronounce+${word}`; -}; - -let gotToYouDaoSearch = (word) => { - word = word.replace(/\s/, "+"); - return `https://www.youdao.com/result?word=${word}&lang=en`; -}; - -let goToBingDictSearch = (word) => { - return `https://cn.bing.com/dict/${word}`; -}; -let goToBingSearch = (word) => { - return `https://cn.bing.com/search?q=how%20to%20pronounce%20${word}`; -}; -let goToBaiduDictSearch = (word) => { - return `https://dict.baidu.com/s?wd=${word}`; -}; - -let goToBaiduFanYiSearch = (word) => { - return `https://fanyi.baidu.com/#en/zh/${word}`; -}; - -let goToBaiDuHanYu = () => { - // 一点飞上天,黄河两头弯;八字大张口,言字中间走;左一扭,右一扭,你一长,我一长,中间加个马大王;心字底,月字旁,一个小勾挂麻糖,坐个车子逛咸阳。 - // 56个笔画的字 邉 - // U+30EDE (简化版本 U+30EDD) - { - "汉".charCodeAt(0).toString(16); - String.fromCharCode("0x6c49"); - } - //https://hanyu.baidu.com/s?wd=%E9%82%89 -}; - -export { - goToBaiDuHanYu, - gotToYouDaoSearch, - gotToGoogleSearch, - goToBingDictSearch, - goToBingSearch, - goToBaiduDictSearch, - goToBaiduFanYiSearch, -}; diff --git a/tools/chromium_extension/js/app/utils.js b/tools/chromium_extension/js/app/utils.js deleted file mode 100644 index 376b410..0000000 --- a/tools/chromium_extension/js/app/utils.js +++ /dev/null @@ -1,103 +0,0 @@ -function hasClass(el, className) { - if (el.classList) return el.classList.contains(className); - return !!el.className.match(new RegExp("(\\s|^)" + className + "(\\s|$)")); -} - -function addClass(el, className) { - if (el.classList) el.classList.add(className); - else if (!hasClass(el, className)) el.className += " " + className; -} - -function removeClass(el, className) { - if (el.classList) el.classList.remove(className); - else if (hasClass(el, className)) { - let reg = new RegExp("(\\s|^)" + className + "(\\s|$)"); - el.className = el.className.replace(reg, " "); - } -} - -function getCookie(name) { - let arr, - reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); - if ((arr = document.cookie.match(reg))) { - return decodeURIComponent(arr[2]); - } else { - return null; - } - //await cookieStore.get({name:name}) -} - -// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie - -function setCookie(name, value, second, domain) { - var exp = new Date(); - exp.setTime(exp.getTime() + second * 1000); - document.cookie = - name + - "=" + - encodeURIComponent(value) + - ";expires=" + - exp.toGMTString() + - ";path=/;domain=" + - domain + - ";SameSite=None;Secure"; -} -async function getCookies(domain) { - let cookies = await cookieStore.getAll({ domain: domain }); - return cookies; -} - -function encodeBase64(str) { - return btoa(encodeURIComponent(str)); -} - -function decodeBase64(encoded) { - return decodeURIComponent(atob(encoded)); -} - -function getParameterValue(name) { - let reg = new RegExp("[^?&]?" + encodeURI(name) + "=[^&]+"); - let arr = location.search.match(reg); - if (arr != null) { - return decodeURI(arr[0].substring(arr[0].search("=") + 1)); - } - return ""; -} - -function createJSONFile(content, filename) { - let blob = new Blob([JSON.stringify(content)], { type: "application/json" }); - let url = window.URL.createObjectURL(blob); - let a = document.createElement("a"); - a.style.display = "none"; - a.href = url; - a.download = filename; - a.click(); - setTimeout(function () { - window.URL.revokeObjectURL(url); - }, 3000); -} - -async function sleep(time) { - return new Promise((resolve) => setTimeout(resolve, time)); -} - -async function getMediaDevices() { - return await navigator.mediaDevices.enumerateDevices(); -} - -// new URLSearchParams -// new URL -// (new Date()).toISOString() -export { - addClass, - removeClass, - hasClass, - setCookie, - getCookie, - encodeBase64, - decodeBase64, - getParameterValue, - sleep, - getMediaDevices, - createJSONFile, -}; diff --git a/tools/chromium_extension/js/content-script.js b/tools/chromium_extension/js/content-script.js deleted file mode 100644 index 1f95c04..0000000 --- a/tools/chromium_extension/js/content-script.js +++ /dev/null @@ -1,4 +0,0 @@ -(async () => { - let app = await import(chrome.runtime.getURL("js/app/init.js")); - app.init(); -})(); diff --git a/tools/chromium_extension/manifest.json b/tools/chromium_extension/manifest.json deleted file mode 100644 index 4a79567..0000000 --- a/tools/chromium_extension/manifest.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "chinese-programmer-wrong-pronunciation-chromium-extension", - "version": "0.1.0", - "manifest_version": 3, - "description": "页面无跳转 听正确读音", - "content_scripts": [ - { - "matches": [ - "*://*/shimohq/chinese-programmer-wrong-pronunciation/*", - "*://*/jingjingxyk/chinese-programmer-wrong-pronunciation/*" - ], - "run_at": "document_idle", - "js": ["js/content-script.js"] - } - ], - "permissions": [ - "declarativeNetRequest", - "declarativeNetRequestWithHostAccess" - ], - "host_permissions": [ - "*://github.com/*", - "*://www.google.com/*", - "*://cn.bing.com/*", - "*://www.bing.com/*", - "*://dict.baidu.com/*", - "*://www.youdao.com/*", - "*://dict.youdao.com/*", - "*://fanyi.baidu.com/*" - ], - "web_accessible_resources": [ - { - "resources": ["*.js", "*.css", "*.html"], - "matches": ["*://*/*"], - "extension_ids": [], - "use_dynamic_url": true - } - ], - "declarative_net_request": { - "rule_resources": [ - { - "id": "remove_content_security_policy", - "enabled": true, - "path": "rules/remove_content_security_policy.json" - } - ] - }, - "author": "https://github.com/jingjingxyk", - "homepage_url": "https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git" -} diff --git a/tools/chromium_extension/package.json b/tools/chromium_extension/package.json deleted file mode 100644 index 4f24bb6..0000000 --- a/tools/chromium_extension/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "chinese-programmer-wrong-pronunciation-chromium-extension", - "version": "1.0.0", - "description": "README.md 页面无跳转 即可听正确读音", - "main": "index.js", - "scripts": { - "format-code": "npx prettier --write . && exit 1" - }, - "author": "", - "license": "ISC", - "devDependencies": { - "prettier": "2.6.2" - } -} diff --git a/tools/chromium_extension/rules/remove_content_security_policy.json b/tools/chromium_extension/rules/remove_content_security_policy.json deleted file mode 100644 index 5cf80b3..0000000 --- a/tools/chromium_extension/rules/remove_content_security_policy.json +++ /dev/null @@ -1,72 +0,0 @@ -[ - { - "id": 1, - "priority": 99, - "action": { - "type": "modifyHeaders", - "responseHeaders": [ - { "header": "content-security-policy", "operation": "remove" }, - { - "header": "content-security-policy-report-only", - "operation": "remove" - }, - { "header": "expect-ct", "operation": "remove" }, - { "header": "report-to", "operation": "remove" }, - { "header": "x-content-security-policy", "operation": "remove" }, - { "header": "x-webkit-csp", "operation": "remove" }, - { "header": "x-xss-protection", "operation": "remove" }, - { - "header": "x-permitted-cross-domain-policies", - "operation": "remove" - }, - { "header": "x-content-type-options", "operation": "remove" }, - { "header": "x-frame-options", "operation": "remove" }, - { "header": "X-Frame-Options", "operation": "remove" }, - { "header": "permissions-policy", "operation": "remove" }, - { "header": "timing-allow-origin", "operation": "remove" }, - { "header": "cross-origin-embedder-policy", "operation": "remove" }, - { "header": "cross-origin-opener-policy", "operation": "remove" }, - { - "header": "cross-origin-opener-policy-report-only", - "operation": "remove" - }, - { - "header": "cross-origin-embedder-policy-report-only", - "operation": "remove" - } - ] - }, - "condition": { - "urlFilter": "*", - "requestDomains": [ - "github.com", - "githubusercontent.com", - "www.google.com", - "cn.bing.com", - "www.bing.com", - "fanyi.baidu.com", - "dict.baidu.com", - "www.youdao.com", - "dict.youdao.com", - "fanyi.baidu.com" - ], - "resourceTypes": [ - "main_frame", - "sub_frame", - "stylesheet", - "script", - "image", - "font", - "object", - "xmlhttprequest", - "ping", - "csp_report", - "media", - "websocket", - "webtransport", - "webbundle", - "other" - ] - } - } -] diff --git a/tools/chromium_extension/web-components/README.md b/tools/chromium_extension/web-components/README.md deleted file mode 100644 index 92c09b2..0000000 --- a/tools/chromium_extension/web-components/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# HTML Imports,HTML Template、Shadow DOM----统称为 Web Components 规范 - -## Shadow DOM 实现代码隔离 diff --git a/tools/chromium_extension/web-components/x-custom-box.html b/tools/chromium_extension/web-components/x-custom-box.html deleted file mode 100644 index e3bc81a..0000000 --- a/tools/chromium_extension/web-components/x-custom-box.html +++ /dev/null @@ -1,3 +0,0 @@ - -
自定义web组件-做代码隔离
-
diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..5af8fd8 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,23 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +const path = require('path') + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue()], + build: { + outDir: 'docs', + assetsDir: '', + }, + define: { + 'process.env': { + BASE_URL: '/' + } + }, + resolve: { + alias: [ + { find: '@', replacement: '/src' }, + ] + } +})