├── .prettierignore ├── .eslintignore ├── public ├── icon.icns ├── iconTemplate.ico ├── iconTemplate@2x.ico ├── index.html ├── i18n │ └── zh-CN │ │ └── languages.json └── css │ └── icon.css ├── .postcssrc.js ├── .prettierrc ├── src ├── renderer │ ├── assets │ │ └── img │ │ │ ├── af-2x.png │ │ │ ├── az-2x.png │ │ │ ├── be-2x.png │ │ │ ├── bg-2x.png │ │ │ ├── bn-2x.png │ │ │ ├── bs-2x.png │ │ │ ├── ca-2x.png │ │ │ ├── cs-2x.png │ │ │ ├── cy-2x.png │ │ │ ├── da-2x.png │ │ │ ├── de-2x.png │ │ │ ├── el-2x.png │ │ │ ├── eo-2x.png │ │ │ ├── et-2x.png │ │ │ ├── eu-2x.png │ │ │ ├── fa-2x.png │ │ │ ├── fi-2x.png │ │ │ ├── ga-2x.png │ │ │ ├── gl-2x.png │ │ │ ├── gu-2x.png │ │ │ ├── ha-2x.png │ │ │ ├── hi-2x.png │ │ │ ├── hr-2x.png │ │ │ ├── ht-2x.png │ │ │ ├── hu-2x.png │ │ │ ├── hy-2x.png │ │ │ ├── id-2x.png │ │ │ ├── ig-2x.png │ │ │ ├── is-2x.png │ │ │ ├── it-2x.png │ │ │ ├── iw-2x.png │ │ │ ├── ja-2x.png │ │ │ ├── jw-2x.png │ │ │ ├── ka-2x.png │ │ │ ├── kk-2x.png │ │ │ ├── km-2x.png │ │ │ ├── kn-2x.png │ │ │ ├── ko-2x.png │ │ │ ├── la-2x.png │ │ │ ├── lo-2x.png │ │ │ ├── lt-2x.png │ │ │ ├── lv-2x.png │ │ │ ├── mg-2x.png │ │ │ ├── mi-2x.png │ │ │ ├── mk-2x.png │ │ │ ├── ml-2x.png │ │ │ ├── mn-2x.png │ │ │ ├── mr-2x.png │ │ │ ├── ms-2x.png │ │ │ ├── mt-2x.png │ │ │ ├── my-2x.png │ │ │ ├── ne-2x.png │ │ │ ├── nl-2x.png │ │ │ ├── no-2x.png │ │ │ ├── ny-2x.png │ │ │ ├── pa-2x.png │ │ │ ├── pl-2x.png │ │ │ ├── ro-2x.png │ │ │ ├── ru-2x.png │ │ │ ├── si-2x.png │ │ │ ├── sk-2x.png │ │ │ ├── sl-2x.png │ │ │ ├── so-2x.png │ │ │ ├── sq-2x.png │ │ │ ├── sr-2x.png │ │ │ ├── st-2x.png │ │ │ ├── su-2x.png │ │ │ ├── sv-2x.png │ │ │ ├── sw-2x.png │ │ │ ├── ta-2x.png │ │ │ ├── te-2x.png │ │ │ ├── tg-2x.png │ │ │ ├── th-2x.png │ │ │ ├── tl-2x.png │ │ │ ├── tr-2x.png │ │ │ ├── uk-2x.png │ │ │ ├── ur-2x.png │ │ │ ├── uz-2x.png │ │ │ ├── vi-2x.png │ │ │ ├── yi-2x.png │ │ │ ├── yo-2x.png │ │ │ ├── zu-2x.png │ │ │ ├── auto-2x.png │ │ │ ├── ceb-2x.png │ │ │ ├── hmn-2x.png │ │ │ ├── ar-AE-2x.png │ │ │ ├── ar-EG-2x.png │ │ │ ├── ar-SA-2x.png │ │ │ ├── en-AU-2x.png │ │ │ ├── en-UK-2x.png │ │ │ ├── en-US-2x.png │ │ │ ├── es-ES-2x.png │ │ │ ├── es-MX-2x.png │ │ │ ├── es-US-2x.png │ │ │ ├── fr-CA-2x.png │ │ │ ├── fr-FR-2x.png │ │ │ ├── pt-BR-2x.png │ │ │ ├── pt-PT-2x.png │ │ │ ├── zh-CN-2x.png │ │ │ ├── zh-HK-2x.png │ │ │ └── zh-TW-2x.png │ ├── shims.d.ts │ ├── main.ts │ ├── lib │ │ └── emotion.js │ ├── router.ts │ ├── components │ │ ├── Header.tsx │ │ ├── Link.tsx │ │ ├── LocaleProvider.tsx │ │ ├── Icon.tsx │ │ ├── Country.tsx │ │ ├── Loading.tsx │ │ ├── Radio.tsx │ │ ├── Switch.tsx │ │ ├── Input.tsx │ │ ├── Progress.tsx │ │ ├── TextBox.tsx │ │ ├── Layout.tsx │ │ ├── Language.tsx │ │ ├── Select.tsx │ │ └── InputShortcutKeys.tsx │ ├── utils │ │ └── index.ts │ ├── App.tsx │ ├── store.ts │ └── views │ │ ├── Settings.tsx │ │ ├── Language.tsx │ │ └── Translate.tsx ├── index.js └── main │ ├── checkForUpdates.js │ ├── lib │ └── menubar │ │ ├── index.d.ts │ │ └── index.js │ └── index.js ├── types ├── v-hotkey.d.ts └── vue-emotoin.d.ts ├── .travis.yml ├── .gitignore ├── babel.config.js ├── .vscode ├── settings.json └── launch.json ├── .editorconfig ├── .all-contributorsrc ├── tsconfig.json ├── vue.config.js ├── .eslintrc.js ├── package.json ├── README.md └── LICENSE /.prettierignore: -------------------------------------------------------------------------------- 1 | package.json 2 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /dist* 2 | /build 3 | /public 4 | -------------------------------------------------------------------------------- /public/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/public/icon.icns -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {}, 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /public/iconTemplate.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/public/iconTemplate.ico -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "es5", 4 | "arrowParens": "always" 5 | } 6 | -------------------------------------------------------------------------------- /public/iconTemplate@2x.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/public/iconTemplate@2x.ico -------------------------------------------------------------------------------- /src/renderer/assets/img/af-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/af-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/az-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/az-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/be-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/be-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/bg-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/bg-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/bn-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/bn-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/bs-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/bs-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ca-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ca-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/cs-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/cs-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/cy-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/cy-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/da-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/da-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/de-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/de-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/el-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/el-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/eo-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/eo-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/et-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/et-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/eu-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/eu-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/fa-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/fa-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/fi-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/fi-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ga-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ga-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/gl-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/gl-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/gu-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/gu-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ha-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ha-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/hi-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/hi-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/hr-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/hr-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ht-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ht-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/hu-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/hu-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/hy-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/hy-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/id-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/id-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ig-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ig-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/is-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/is-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/it-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/it-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/iw-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/iw-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ja-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ja-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/jw-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/jw-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ka-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ka-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/kk-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/kk-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/km-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/km-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/kn-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/kn-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ko-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ko-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/la-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/la-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/lo-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/lo-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/lt-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/lt-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/lv-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/lv-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/mg-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/mg-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/mi-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/mi-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/mk-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/mk-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ml-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ml-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/mn-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/mn-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/mr-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/mr-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ms-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ms-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/mt-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/mt-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/my-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/my-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ne-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ne-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/nl-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/nl-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/no-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/no-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ny-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ny-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/pa-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/pa-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/pl-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/pl-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ro-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ro-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ru-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ru-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/si-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/si-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/sk-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/sk-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/sl-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/sl-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/so-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/so-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/sq-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/sq-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/sr-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/sr-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/st-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/st-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/su-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/su-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/sv-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/sv-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/sw-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/sw-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ta-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ta-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/te-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/te-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/tg-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/tg-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/th-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/th-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/tl-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/tl-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/tr-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/tr-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/uk-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/uk-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ur-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ur-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/uz-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/uz-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/vi-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/vi-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/yi-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/yi-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/yo-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/yo-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/zu-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/zu-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/auto-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/auto-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ceb-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ceb-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/hmn-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/hmn-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ar-AE-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ar-AE-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ar-EG-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ar-EG-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/ar-SA-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/ar-SA-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/en-AU-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/en-AU-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/en-UK-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/en-UK-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/en-US-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/en-US-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/es-ES-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/es-ES-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/es-MX-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/es-MX-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/es-US-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/es-US-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/fr-CA-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/fr-CA-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/fr-FR-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/fr-FR-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/pt-BR-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/pt-BR-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/pt-PT-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/pt-PT-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/zh-CN-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/zh-CN-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/zh-HK-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/zh-HK-2x.png -------------------------------------------------------------------------------- /src/renderer/assets/img/zh-TW-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoeFE/GoogleTranslate/HEAD/src/renderer/assets/img/zh-TW-2x.png -------------------------------------------------------------------------------- /types/v-hotkey.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'v-hotkey' { 2 | import _Vue from 'vue'; 3 | 4 | export default function install(Vue: typeof _Vue): void; 5 | } 6 | -------------------------------------------------------------------------------- /src/renderer/shims.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | declare const __static: string; 3 | declare const VERSION: string; 4 | 5 | declare module '*.json' { 6 | const value: any; 7 | export default value; 8 | } 9 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 9 4 | 5 | install: 6 | - yarn 7 | 8 | script: 9 | - yarn lint 10 | - yarn lint:prettier 11 | 12 | cache: 13 | yarn: true 14 | directories: 15 | - node_modules 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | /build 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | 15 | # Editor directories and files 16 | .idea 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw* 22 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['@vue/app'], 3 | plugins: ['jsx-v-model'], 4 | env: { 5 | production: { 6 | plugins: [['emotion', { hoist: true }]], 7 | }, 8 | development: { 9 | plugins: [['emotion', { sourceMap: true, autoLabel: true }]], 10 | }, 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /src/renderer/main.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import VueHotkey from 'v-hotkey'; 3 | import App from './App'; 4 | import router from './router'; 5 | import store from './store'; 6 | 7 | Vue.use(VueHotkey); 8 | 9 | Vue.config.productionTip = false; 10 | 11 | new Vue({ 12 | router, 13 | store, 14 | render: h => h(App), 15 | }).$mount('#app'); 16 | -------------------------------------------------------------------------------- /src/renderer/lib/emotion.js: -------------------------------------------------------------------------------- 1 | import createEmotion from 'create-emotion'; 2 | 3 | const context = typeof global !== 'undefined' ? global : {}; 4 | 5 | export const { 6 | flush, 7 | hydrate, 8 | cx, 9 | merge, 10 | getRegisteredStyles, 11 | injectGlobal, 12 | keyframes, 13 | css, 14 | sheet, 15 | caches, 16 | } = createEmotion(context, { 17 | prefix: false, 18 | }); 19 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const download = require('download'); 3 | const { languages } = require('./renderer/assets/languages.json'); 4 | 5 | Promise.all( 6 | languages 7 | .map(x => x.dialects.map(v => v.flag_image_2x)) 8 | .toString() 9 | .split(',') 10 | .map(url => download(url, 'src/renderer/assets/img')), 11 | ).then(() => { 12 | console.log('files downloaded!'); 13 | }); 14 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <% if (BASE_URL === './') { %><% } %> 5 | 6 | 7 | 8 | Google Translate 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "prettier.eslintIntegration": true, 4 | "tslint.enable": true, 5 | "tslint.autoFixOnSave": true, 6 | "eslint.autoFixOnSave": true, 7 | "eslint.enable": true, 8 | "eslint.validate": [ 9 | "javascript", 10 | "javascriptreact", 11 | "typescript", 12 | "typescriptreact" 13 | ], 14 | "files.exclude": { 15 | "build": true 16 | }, 17 | "emmet.excludeLanguages": ["typescriptreact"] 18 | } 19 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "type": "node", 6 | "request": "launch", 7 | "name": "Launch Program", 8 | "program": "${workspaceFolder}/src/index.js" 9 | }, 10 | { 11 | "type": "node", 12 | "request": "launch", 13 | "name": "Electron Main", 14 | "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron", 15 | "program": "${workspaceFolder}/build/background.js" 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/renderer/router.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Router from 'vue-router'; 3 | import Translate from 'views/Translate'; 4 | import Language from 'views/Language'; 5 | import Settings from 'views/Settings'; 6 | 7 | Vue.use(Router); 8 | 9 | export default new Router({ 10 | routes: [ 11 | { 12 | path: '/language', 13 | name: 'language', 14 | component: Language, 15 | }, 16 | { 17 | path: '/settings', 18 | name: 'settings', 19 | component: Settings, 20 | }, 21 | { 22 | path: '*', 23 | name: 'translate', 24 | component: Translate, 25 | }, 26 | ], 27 | }); 28 | -------------------------------------------------------------------------------- /src/main/checkForUpdates.js: -------------------------------------------------------------------------------- 1 | import { shell, Notification } from 'electron'; 2 | import download from 'download'; 3 | import pkg from '../../package.json'; 4 | 5 | export default async function checkForUpdates() { 6 | const url = 'https://api.github.com/repos/MoeFE/GoogleTranslate/releases/latest'; // prettier-ignore 7 | const release = await download(url).then(res => JSON.parse(res.toString())); 8 | if (release.name > pkg.version) { 9 | const notice = new Notification({ 10 | title: 'Google 翻译', 11 | body: `发现新版本 (${release.name}) 可用,点击下载最新版本!`, 12 | }); 13 | notice.on('click', () => shell.openExternal(url)); 14 | notice.show(); 15 | return true; 16 | } 17 | return false; 18 | } 19 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | # Use 4 spaces for the Python files 13 | [*.py] 14 | indent_size = 4 15 | max_line_length = 80 16 | 17 | # The JSON files contain newlines inconsistently 18 | [*.json] 19 | insert_final_newline = ignore 20 | 21 | # Minified JavaScript files shouldn't be changed 22 | [**.min.js] 23 | indent_style = ignore 24 | insert_final_newline = ignore 25 | 26 | # Makefiles always use tabs for indentation 27 | [Makefile] 28 | indent_style = tab 29 | 30 | # Batch files use tabs for indentation 31 | [*.bat] 32 | indent_style = tab 33 | 34 | [*.md] 35 | trim_trailing_whitespace = false 36 | -------------------------------------------------------------------------------- /src/renderer/components/Header.tsx: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Component from 'vue-class-component'; 3 | import styled from 'vue-emotion'; 4 | import * as Layout from './Layout'; 5 | 6 | const H1 = styled.h1` 7 | margin: 0; 8 | font-family: google; 9 | font-weight: 500; 10 | text-align: center; 11 | flex: 1; 12 | i { 13 | display: inline-block; 14 | font-style: normal; 15 | transform: rotate(-10deg); 16 | } 17 | `; 18 | 19 | @Component 20 | export default class Header extends Vue { 21 | render() { 22 | return ( 23 | 24 | {this.$slots.left ?
{this.$slots.left}
: null} 25 | {/* prettier-ignore */} 26 |

Google Translate

27 | {this.$slots.right ? ( 28 |
{this.$slots.right}
29 | ) : null} 30 |
31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/renderer/components/Link.tsx: -------------------------------------------------------------------------------- 1 | import { remote } from 'electron'; 2 | 3 | import * as Vue from 'vue-tsx-support'; 4 | import Component from 'vue-class-component'; 5 | import { Prop } from 'vue-property-decorator'; 6 | import { css } from 'vue-emotion'; 7 | 8 | export interface LinkProps { 9 | href?: string; 10 | } 11 | 12 | @Component 13 | export default class Link extends Vue.Component { 14 | @Prop({ type: String, required: false, default: 'javascript:;' }) // eslint-disable-line no-script-url 15 | private readonly href!: string; 16 | 17 | private handleClick(e: MouseEvent) { 18 | e.preventDefault(); 19 | remote.shell.openExternal(this.href); 20 | } 21 | 22 | render() { 23 | return ( 24 | 34 | {this.$slots.default} 35 | 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /.all-contributorsrc: -------------------------------------------------------------------------------- 1 | { 2 | "projectName": "GoogleTranslate", 3 | "projectOwner": "MoeFE", 4 | "commit": false, 5 | "contributors": [ 6 | { 7 | "login": "u3u", 8 | "name": "さくら", 9 | "avatar_url": "https://avatars2.githubusercontent.com/u/20062482?v=4", 10 | "profile": "https://qwq.cat", 11 | "contributions": [ 12 | "code", 13 | "doc", 14 | "design", 15 | "ideas" 16 | ] 17 | }, 18 | { 19 | "login": "Batur24", 20 | "name": "Batur", 21 | "avatar_url": "https://avatars1.githubusercontent.com/u/9591690?v=4", 22 | "profile": "https://github.com/Batur24", 23 | "contributions": [ 24 | "question", 25 | "bug", 26 | "ideas", 27 | "test" 28 | ] 29 | }, 30 | { 31 | "login": "mantou132", 32 | "name": "mantou", 33 | "avatar_url": "https://avatars3.githubusercontent.com/u/3841872?v=4", 34 | "profile": "https://github.com/mantou132", 35 | "contributions": [ 36 | "code", 37 | "ideas" 38 | ] 39 | } 40 | ], 41 | "repoType": "github" 42 | } 43 | -------------------------------------------------------------------------------- /src/renderer/components/LocaleProvider.tsx: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | import * as Vue from 'vue-tsx-support'; 5 | import Component from 'vue-class-component'; 6 | import { Prop, Provide, Watch } from 'vue-property-decorator'; 7 | 8 | export interface LocaleProviderProps { 9 | locale?: string; 10 | } 11 | 12 | @Component 13 | export default class LocaleProvider extends Vue.Component { 14 | public languages = {}; 15 | public localizable = {}; 16 | 17 | @Prop({ type: String, required: false, default: 'zh-CN' }) 18 | private readonly locale!: string; 19 | 20 | @Provide() 21 | private get localeProvider() { 22 | return this; 23 | } 24 | 25 | @Watch('locale', { immediate: true }) 26 | private async handleChangeLocale() { 27 | const exists = fs.existsSync(path.join(__static, `i18n/${this.locale}`)); 28 | const locale = exists ? this.locale : 'zh-CN'; 29 | const filename = path.join(__static, `/i18n/${locale}/languages.json`); 30 | this.languages = JSON.parse(fs.readFileSync(filename).toString()); 31 | } 32 | 33 | render() { 34 | return
{this.$slots.default}
; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "strict": true, 6 | "jsx": "preserve", 7 | "importHelpers": true, 8 | "moduleResolution": "node", 9 | "experimentalDecorators": true, 10 | "allowSyntheticDefaultImports": true, 11 | "sourceMap": true, 12 | "baseUrl": ".", 13 | "types": ["node"], 14 | "paths": { 15 | "@/*": ["src/renderer/*"], 16 | "assets/*": ["src/renderer/assets/*"], 17 | "components/*": ["src/renderer/components/*"], 18 | "utils/*": ["src/renderer/utils/*"], 19 | "views/*": ["src/renderer/views/*"] 20 | }, 21 | "lib": [ 22 | "es2015", 23 | "es2016.array.include", 24 | "dom", 25 | "dom.iterable", 26 | "scripthost" 27 | ], 28 | "plugins": [ 29 | { 30 | "name": "typescript-styled-plugin", 31 | "tags": ["styled", "css", "injectGlobal"] 32 | } 33 | ] 34 | }, 35 | "include": [ 36 | "src/**/*.ts", 37 | "src/**/*.tsx", 38 | "src/**/*.vue", 39 | "tests/**/*.ts", 40 | "tests/**/*.tsx", 41 | "types/**/*.ts", 42 | "node_modules/@types", 43 | "node_modules/vue-tsx-support/enable-check.d.ts", 44 | "node_modules/vue-tsx-support/options/enable-vue-router.d.ts" 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /src/renderer/components/Icon.tsx: -------------------------------------------------------------------------------- 1 | import * as Vue from 'vue-tsx-support'; 2 | import Component from 'vue-class-component'; 3 | import { Prop } from 'vue-property-decorator'; 4 | import styled from 'vue-emotion'; 5 | 6 | const Ico = styled.i` 7 | display: inline-block; 8 | `; 9 | 10 | export interface IconProps { 11 | type: string; 12 | rotate?: number; 13 | tabindex?: number; 14 | disabled?: boolean; 15 | } 16 | 17 | export interface IconEvents { 18 | onClick: (e: MouseEvent) => void; 19 | onFocus: (e: FocusEvent) => void; 20 | } 21 | 22 | @Component 23 | export default class Icon extends Vue.Component { 24 | @Prop({ type: String, required: true }) 25 | private readonly type!: string; 26 | 27 | @Prop({ type: Number, required: false }) 28 | private readonly rotate!: number; 29 | 30 | private handleClick(e: MouseEvent) { 31 | this.$emit('click', e); 32 | } 33 | 34 | private handleFocus(e: FocusEvent) { 35 | this.$emit('focus', e); 36 | } 37 | 38 | render() { 39 | const { type, rotate } = this; 40 | 41 | return ( 42 | 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/renderer/components/Country.tsx: -------------------------------------------------------------------------------- 1 | import * as Vue from 'vue-tsx-support'; 2 | import Component from 'vue-class-component'; 3 | import { Prop } from 'vue-property-decorator'; 4 | 5 | export interface CountryProps { 6 | ssl?: boolean; 7 | code?: string; 8 | retina?: boolean; 9 | local?: boolean; 10 | } 11 | 12 | export interface CountryEvents { 13 | onClick: MouseEvent; 14 | } 15 | 16 | @Component 17 | export default class Country extends Vue.Component< 18 | CountryProps, 19 | CountryEvents 20 | > { 21 | @Prop({ type: Boolean, required: false, default: false }) 22 | private readonly ssl!: boolean; 23 | 24 | @Prop({ type: String, required: false, default: 'auto' }) 25 | private readonly code!: string; 26 | 27 | @Prop({ type: Boolean, required: false, default: true }) 28 | private readonly retina!: boolean; 29 | 30 | @Prop({ type: Boolean, required: false, default: true }) 31 | private readonly local!: boolean; 32 | 33 | private get src() { 34 | return this.local 35 | ? require(`assets/img/${this.code}-2x.png`) // eslint-disable-line 36 | : `http://${this.ssl ? 'ssl-' : ''}api.itranslateapp.com/flags/${this.code}${this.retina ? '-2x' : ''}.png`; // prettier-ignore 37 | } 38 | 39 | private handleClick(e: MouseEvent) { 40 | this.$emit('click', e); 41 | } 42 | 43 | render() { 44 | return ; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/renderer/components/Loading.tsx: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Component from 'vue-class-component'; 3 | import styled from 'vue-emotion'; 4 | 5 | const Indicator = styled.div` 6 | flex: 1; 7 | display: flex; 8 | align-items: center; 9 | align-self: center; 10 | > i { 11 | display: inline-block; 12 | width: 4px; 13 | height: 4px; 14 | border-radius: 4px; 15 | margin: 0 3px; 16 | opacity: 0.5; 17 | background: #3e83f8; 18 | &:nth-of-type(1) { 19 | animation: loading 0.6s cubic-bezier(0.165, 0.84, 0.44, 1) 0.1s infinite; 20 | } 21 | &:nth-of-type(2) { 22 | animation: loading 0.6s cubic-bezier(0.165, 0.84, 0.44, 1) 0.2s infinite; 23 | } 24 | &:nth-of-type(3) { 25 | animation: loading 0.6s cubic-bezier(0.165, 0.84, 0.44, 1) 0.3s infinite; 26 | } 27 | } 28 | @keyframes loading { 29 | 0% { 30 | opacity: 0.5; 31 | transform: scale(1); 32 | } 33 | 25% { 34 | opacity: 0.75; 35 | transform: scale(1.5); 36 | } 37 | 50% { 38 | opacity: 1; 39 | transform: scale(2); 40 | } 41 | 100% { 42 | opacity: 0.5; 43 | transform: scale(1); 44 | } 45 | } 46 | `; 47 | 48 | @Component 49 | export default class Loading extends Vue { 50 | render() { 51 | return ( 52 | 53 | {[...Array(3)].map(() => ( 54 | 55 | ))} 56 | 57 | ); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/renderer/components/Radio.tsx: -------------------------------------------------------------------------------- 1 | import * as Vue from 'vue-tsx-support'; 2 | import Component from 'vue-class-component'; 3 | import { Prop } from 'vue-property-decorator'; 4 | import { Radio as radio } from './Layout'; 5 | 6 | const { Layout, Button } = radio; 7 | 8 | export interface RadioProps { 9 | checked?: boolean; 10 | value?: string; 11 | name?: string; // eslint-disable-line no-restricted-globals 12 | } 13 | 14 | export interface RadioEvents { 15 | onChange: string; 16 | } 17 | 18 | @Component 19 | export default class Radio extends Vue.Component { 20 | @Prop({ type: Boolean, required: false, default: false }) 21 | private readonly checked!: boolean; 22 | 23 | @Prop({ type: String, required: false }) 24 | private readonly value!: string; 25 | 26 | @Prop({ type: String, required: false }) 27 | private readonly name!: string; // eslint-disable-line no-restricted-globals 28 | 29 | private handleChange(e: Event) { 30 | if (e.target) { 31 | this.$emit('change', (e.target as HTMLInputElement).value); 32 | } 33 | } 34 | 35 | render() { 36 | return ( 37 | 38 | 45 |