aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.travis.yml19
-rw-r--r--CHANGELOG.md29
-rw-r--r--README.md7
-rw-r--r--docs/linux.md11
-rw-r--r--electron-builder.yml2
-rw-r--r--package.json7
-rw-r--r--src/actions/service.js2
-rw-r--r--src/api/server/ServerApi.js56
-rw-r--r--src/assets/images/tray/darwin-dark/tray-active.pngbin0 -> 396 bytes
-rw-r--r--src/assets/images/tray/darwin-dark/tray-active@2x.pngbin0 -> 1291 bytes
-rw-r--r--src/assets/images/tray/darwin-dark/tray-unread-active.pngbin0 -> 424 bytes
-rw-r--r--src/assets/images/tray/darwin-dark/tray-unread-active@2x.pngbin0 -> 1359 bytes
-rw-r--r--src/assets/images/tray/darwin-dark/tray-unread.pngbin0 -> 424 bytes
-rw-r--r--src/assets/images/tray/darwin-dark/tray-unread@2x.pngbin0 -> 1359 bytes
-rw-r--r--src/assets/images/tray/darwin-dark/tray.pngbin0 -> 396 bytes
-rw-r--r--src/assets/images/tray/darwin-dark/tray@2x.pngbin0 -> 1291 bytes
-rw-r--r--src/components/auth/Import.js1
-rw-r--r--src/components/auth/Login.js8
-rw-r--r--src/components/auth/Signup.js7
-rw-r--r--src/components/services/content/ServiceWebview.js24
-rw-r--r--src/components/settings/settings/EditSettingsForm.js1
-rw-r--r--src/components/ui/StatusBarTargetUrl.js40
-rw-r--r--src/components/ui/Subscription.js8
-rw-r--r--src/components/ui/SubscriptionPopup.js2
-rw-r--r--src/config.js10
-rw-r--r--src/containers/settings/EditSettingsScreen.js23
-rw-r--r--src/containers/ui/SubscriptionPopupScreen.js2
-rw-r--r--src/electron/Settings.js14
-rw-r--r--src/electron/ipc-api/appIndicator.js45
-rw-r--r--src/electron/ipc-api/settings.js9
-rw-r--r--src/electron/ipc-api/tray.js48
-rw-r--r--src/i18n/languages.js11
-rw-r--r--src/i18n/locales/de.json167
-rw-r--r--src/i18n/locales/el-GR.json168
-rw-r--r--src/i18n/locales/en-US.json1
-rw-r--r--src/i18n/locales/fr.json167
-rw-r--r--src/i18n/locales/ja.json167
-rw-r--r--src/i18n/locales/nl-BE.json167
-rw-r--r--src/i18n/locales/nl.json168
-rw-r--r--src/i18n/locales/pl.json167
-rw-r--r--src/i18n/locales/pt-BR.json167
-rw-r--r--src/i18n/locales/ru.json168
-rw-r--r--src/i18n/locales/ua.json167
-rw-r--r--src/index.js44
-rw-r--r--src/lib/Menu.js1
-rw-r--r--src/lib/Tray.js73
-rw-r--r--src/stores/AppStore.js53
-rw-r--r--src/stores/RecipesStore.js4
-rw-r--r--src/stores/ServicesStore.js24
-rw-r--r--src/stores/UserStore.js9
-rw-r--r--src/styles/infobox.scss5
-rw-r--r--src/styles/main.scss1
-rw-r--r--src/styles/status-bar-target-url.scss14
-rw-r--r--yarn.lock509
54 files changed, 2172 insertions, 625 deletions
diff --git a/.travis.yml b/.travis.yml
index 05c635d57..b3ebc4f25 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,25 +16,26 @@ before_script:
16 16
17script: 17script:
18- yarn lint 18- yarn lint
19- yarn build 19- travis_wait yarn build
20 20
21node_js: 21node_js:
22- '7' 22- '7'
23 23
24before_install: 24before_install:
25- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt install libx11-dev libxext-dev 25- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt install libx11-dev libxext-dev libxss-dev libxkbfile-dev; fi
26 libxss-dev libxkbfile-dev; fi
27 26
28cache: yarn 27cache: yarn
29 28
30notifications: 29notifications:
31 email: false 30 email: false
32 slack: 31 slack:
33 secure: eVryP5RSaK0zOTZGx5zxt64dFzp0QT95XdX4R6XOgw7WUXbAatO4pLRrJzxi+Ur5bQDPD4hroewAJ77gGSUasFHVb+seiCFwHaszQtq8m8rVh9P/tUG+JP7U8gcOR7nTVhNw5HF5DUO8j8iMqpdvievBQ1KbnYALwcQQj1W/T+UbFCyWYaa3VpJCdOUnbJadeMKcMws9aSStZcQ3wUIvDG3YbpNH02lU3vjU80Y0dMFlGfm8DI9h7pdXQM4VQdyAdtf2fSYV1OMRE7lU2bJP6BX5qcq3+oYty554owVLdF4yBmaFKcB/OOqreOV/GyKLVhZtJIGg00+xTORVBl+1nyO1RsIyCd9FwvwvCRk/f/Nb5j9o96TqIRdssXM3yptVV7cXP0Qwt99BVjice4cb6fXMnu1g9e7kR4K5o/lLijw2CfGcneETj/jh479efCrf4CTX2wRZ6dggE6XQ2zxk6nVz+Y/8HrK9QrAsUlbZcJjCx4oDFCuubP6yccc3NCOd54SdFf0STVt4Yq+63eX8yJhEC2iiVrr9UHrS/9mVxG+pojhyZgOPNYeEvx99nozy2Z9txYrsB9dbqTNmNRVuZozuM8HRDL35l50ZvBALQkj0iqpIGjVEfE3+yc08Idk7Y+cLkuModxtBT4r3cT9EkI62CkhglYMFrR+wVz3HfyA= 32 secure: NjEDG+6YvJvFNwRT8t8XyVR145m+Pb1pmYgdBeuhqtJbMAr0IOb0lLLW9ixKEsL1NU+0R58QGiG9qqY+lLnMNpDYjzluFo0gQtl2NJrULT4xUFDSu65XTwoutKyvj+hoCsHiwrSrO2dHTx3ZK2vsSueg+8jM/xss7dTLA6BcTYl14wTOU37PqFQZk9JYR+Dfq1Jjhy/mq4BiAsb/1clNIulkjmRjSm6R0XT4ZsZZfj0ifXhL4cLGsUv2n+iePiX6bLwZPFjXV1COYTBafbCu17gw3nRMdNMMTDLbwrXXdJZFS/EjFOPgOhwF7CkZ3kSpB2ZIcAJxG7iAUl5j+jHBXc5dafRbjzE4oYve1vPexLoV3NjV76uANUFkcli6eHYD0uJoUJGBRbRGWp+8Bbw9EcBsn4s3vbf5XqHX3S46zvGgqX+LyhyMJQtEG/iv+9XOsOql18ryyejij0z1K7DxpI0gLV1ATZCphY1Fyz1yZDGlYN4ej/Rl2P1Q3yXilweJRF7Ts04w4U9iuP1u598/w++CKSu4q4EeEuqT/hIeFQUKUkwCEsO4xa39vhLPaxKrG9UEUH8OXN+NPZyTAK/LKuIX7C56O1kwvWNMWlPmTcvsq2RghvNTwgSGUIO0EKZKrQYAEG3Y/veSt5CgZoNzLgc/6Xj+g7daxUo9heLy26A=
34 33
35deploy: 34deploy:
36 provider: s3 35 provider: s3
37 access_key_id: AKIAIBXD77AXW62WB2NA 36 access_key_id: AKIAIVRBS4YFL4ZBLCLA
37 secret_access_key:
38 secure: LZ38b5DmVisSBfpuPN8IVNCe3C+hJYX88jV+/ifzlB6/h1VUU/w5B3xHNBoOC2P53D2htMtL7K1/JLxzKGmUsnOJe5boF0QmBPTXUVosurxwMPEuLotQucgqcOoFnJkq+BUziBy+uWsZnk6ECbI5hFHQJAM9iNjOcgrfK08NLYvtdwYKYXwhwSrN4dxBKkfRINgAqHCp6bMuH2Imgy9iM+Iy5ydMPUsKDRHj1ByJrhcb1nJTjWImH08IU970fEl0P2+bCV6nUTzc9x9mwaJAF6uaH9L44lLptHIhGgqAZGzwQ7z6ANJj3CJRWFbqW2/9/0+4YKhyBbE9TPIvWIXmVeoPm0nWLDfVDN2RwTGtv+oSgPS+UhcFTVanekKfrzMTVdi1jQ8LIL7Ur3DcXNhwTPuc7PjLPPuwTS2AQRkPMyyWLRAz40/YUepASRdqoVMYI+CZiwu2AZIoUr1HO1eXj/0rqC8t/mhUSOXTxNGRCP9SQTJ/FSaI5dZh3oY7bkz7uxDNbPvChcs7hPFqqhPUFIkX36DaDqjze6IqtZ6pDz7XTqzUET/Jgny9vGBypvGj5fJpYZJytqEs0SsPGQGaxSmAWjcPWQX56Tr98iwVvzAJ0hl7lJHVaEzuxoYmD0ijg2zysoZ7GPBXJg2n9W+QaS0KVuda1r+sQ6C2wY8yvi8=
38 bucket: franz-travis 39 bucket: franz-travis
39 region: eu-central-1 40 region: eu-central-1
40 local_dir: out 41 local_dir: out
@@ -43,11 +44,9 @@ deploy:
43 acl: public_read 44 acl: public_read
44 on: 45 on:
45 all_branches: true 46 all_branches: true
46 secret_access_key:
47 secure: HB77zpnMRC0yPa0V+q8H+JzgVFC89OBFZeNdLkZ7jBOGJL2MubgrV2+Qz1JS23972uYLWhY+f0cCc/fbWA19RJ8Bj7MYP/QeSe+psI4F6ge1EjfPzMKkkEtdsUJuV5puEoRQai9sh/tjOsTSyEbwQhyLD/SUlnyimdxsFRujoltyyCqfaHMYU8N9EmS+VIgRXzTOIfQ0u1GcB7E9cnOEdjYWAvUW7vklJ4esVwmPt11KCM+JbOhdenTSr+JaBxopALWs2a3a+wpJ4rsrZlsyAisiOzvgqDlmWRYFyzmIHp0tueiMz5L7sYL/HqgDUkUMVqa3LYzc3iRLab2sm+ukYyNxNK6sNvcWj/gQtSncy5PJ9ZKga1t3CGaze4tGCdAaQdo5lPDywi3Oi3cH7q2gpuubZ5ImgAGkbEDiacZsJR5qRhUZ9gx3gVgSrhKfIx/1lPxsZ8p2LGYL84HKgENOIRWthnzkIgo8xP3ykOun5FihZ8pt3EoJG9NF08YBkMG1FOWxnI2teXb3FZSETt767Qe5DW27WE52daiExO5klgg+dX7ud9f/3G5Fv0auOdAKzj8kM6oyi3YX97nRpoKt/VmeoebUbK6D4WV2lhPLV37xqg1Ak8VfESD8NHsIDm8yS/sIDIQUSsIBDEEt0yBGggkJ/jOmgfk2RPPz2Wy2ClM=
48 47
49env: 48env:
50 global: 49 global:
51 - secure: QQHW81r1ozzT7SvrR+t0szpcqFau4AI14wduZwOUWQk7GxK54Spkp75ebGd1EM1AwNS97DLg8FFNzxEWSoTzn8kDvLQ4UXrQBtqYSGscCHnEFWcReFniYd9H1FRjjVwhgU/9R0nY+eZeArC/6Y4L6ZEQ3leHfG2Wq5wCGpmMhC5ngYN4YXa6KHLj9ZGELqE6nniPcouTtIDbTl4EU0rpwIpEFGGakGZCzz+BLF9ZVYXyEOFHMr1sqzYFngtV5Of3qrEqFW+ea1tDgIPvt1MIkQOASR3X/s8K1LHyj0UugOpUyCgAHtJDDWJa/HGcb86rPdYRUgXAj5CSiGJgsiGv6eDm7Sua1QHaEMZ9YfHB0IuafzOY5cbSEubCuJlnREB7EvMF6nvFMKeRNoEmqbts8wXTzgh3LkeR2LfMedqNQh0ianG5QwXQxtmaoQ7cw2eQEMADe7AbIbJv6El91p/vEHIO7ESNPsYo8vTEannlKswi//VO2Q3iPnHx0VSqIlbMJOkG/624j7aXxsqvufDrWXIOSz0A7kZz4ri2MevGujejeip0k3y6ofZk7eeUmQew4LtzQZiiqJnrOM9DSJ8ziuNplFMNeGILYLx2Ai9v8UGKxr7GhKURlTaQxeqYiT5W0LiDDuzfozCXXhLKdfoGiohi5mUJBjFeGFPv69ME+m4= 50 - secure: fddJzSmNYVX024jnhnFXEuAK1spEYi3y3RZdWaBtjQnzoObAxkcRW263JNpXQy+b7egnp2hSy8FvlQU+L967911F5Y70Pe3An4oI72hnS3DL4Njp2Dw5PwviwMA+X2ddWhzK4+k/JU6r8jBv1FGQ6ZjwSeaO/t8UKOsE8wDBFLRhnHqoR7QbM7zmKjzh/1oofunGbHsPOHmN4f7jBwSuSFTZltEENcQg3ZP++0NHU8UJdlpfqZOkro8v4AJMngAHeHlNtjwaAHdVv+6+kkwc4E/0Cy6YNyyBkbzipyngNY3GwnwzmNzvsfICD1TGklksjBlMQq7ld7eCiaYRNvyHVEmXJ17qlq7HhxkYgNy32hPRwb5Cv6o4M4tv8qS8UUk4W1RvBJ5fcmfZGQwGXPyQ/m85RJtrNfbYtr84jYcprTnSeji/9PuZv0f87dxELYm3DYmNUa1cgJqEdLUsEd0bMwUYNLnCSfu4ea2zxwir6LSBtJJCbGKxX87s5IOTrHkrWDe+PWd52v+UjQks7MBRlJnntTWo69Yy+ayXV1TnGVOHA5znHvPOvFlAF+y8tLGd4AGvehK1SAkf0+idmc9Q9xKk0QypT3ibjJui4D50p7sSajkzz3P2pUqOS/9HmjMfPMPN+Nl+48GU0CvB2aBGhdmp9vu54VaFzUaAGNGj4WI=
52 - secure: ZBRC0KzerbbUH1WgQq8YYcPiKXWoIifTijP9XfLBM8u+IWnULxyFciFSsFR7g8ck1Tby5ajsqk4Me7OgxHdOn9Ds8xfvGAgP2a1V3qtUcEGUyKjpERc03/n6KTcJdZL2H9Ir1YqnA59UZJFghemannEwNjHUjXIwCQqOij89D4CkMBXI7g52dpYsEiG97fHRh2thI/I9f7x9PuAYKnLC9Zk8bBolIBJZ37/prAQosZH+ZhoqcrZYj7SfuZ7rceZQ7AESfF7Y+P/s1y7k8cbOGvy/Y36U3+M1Iz0PraEyr3kQ5hU1GRgg5IdJzD0HqdjXd42CzH9NlyNwNzehPhgxBvhYdPPhgMX8P5SViD4zjQ7EAn0RzLydp4VuihLmAJhy6aMAZ4VAEy8pucvC1tlfZw/3zuMfOyjThcx1Vk2Db9+ZSP86HI3DAMUpg3cEnZo01Mx498bKJzMR/9JgP2AZ8IWefxin3k2yi3tcwhUB+iDfMJGzeLDMBIMltqM7hz3lwE0hfYkT3bEZujHCAVW2E6+gzdB/IiNbX9iRrYBG23dwWkCWgA55eAu3Rzv5fqZD0PX7/3XjdlFVESnqiJecgu/cXYvsV/eZfXdPi3FuxrpGj4QN9CuHuHoBBlHbOnLur/65iqzgDMdmd33G2VLAGUDwGZK/BmvKD5F8xmCqtYU= 51 - secure: AjJvKhQ1jIloxogMdtOzJqovPQUBSA0lfHcRsmGdP8HIRKSRi9tKxCCgicTMpMWfvY7qtdexXBbl2/zl6cOhjfTYeAhNwwCg+dw7OVcE8LUn4E+gYZCYIKbNmmkVKsSckQd4h2IcyvqdqLwzjrEzdF95MoUI8WqdLwvQJLkoIaXju6ZT76FslGSUVXk58ZN7p2nr3kW8V7KclIzn/yyyYXE4bjBmS4djuvCReeSfSViCuX5CGT8avBb/IF/M5S7hcQVybmmalysOrranzSx0o9PPUIT9hHqqRpXW6iss2qVj+kCaFiC3ftlApVgizBoGcNAMA8N7hX8kkEjJSpiy7Vswuev9mVN9X94VwVZGyNvdYD8cKKxqTsfFDZDgefnuSYUhymKSBgM4yScYF6IPNJWFWJTugtVeMJ8ivqZhwJuD20nt6x7gGB1FS6m7axxRWeyp7h0FqWU9l6ZfmwHcRziVKNTk9BB4XIqco9M2wjV/YH321IGVwtVR5y6zty10+xk38TthCOidgBurFlMKbFKH5g9K5+84dhsCW0avMlJ0+QkgId0uAVyho+09Wx4cKqXLfobpznkUX+S0Um6G/NbAaUAU+SqBsm+X9CKFsPd/YJoxLdF7eBCG/3Fy4roKg3J4mBYeXe3wVnGft8Eeg0aNpOArMSStMY337UpdV80=
53 - secure: u5RaqOpoHfnYbKYOzBG9r+6y6wnLTcU49QHgJC2LdXsTBCe5lms4DjxSS5kVqlkLMo8u/Lsd3dORcC0/E4hKaphGgKqHrdPBaJDADMqhY1xD5OwoZbFu8+BKAH0W1cNdr0ZXLFpHQxGcXLg6ofbrZbWg9fYQ5g7Do2ypOXWhoCxsbtF1sOYCyXeOL/O8EqMG0Hif3QOqnpCrdMTL/RjHzc/c6s2sIbsNd8ca4RLHwMZ3yDl1kEePRsB5vR3ZACd7hEDWCeQ9baSmaaAgVudIB6lGyRZgNFTcu5FXyAGfnNQkakHHWtWKXbYEppValTKUGB6t7UmkUw47UsP2t7tTcJG5KpIh5HbN0GoTsabO/OcjIv3cfDIEdsgM44ZoemE0ajdQTLnatVIlTuL1o30IoiIeaBdQUoVJ8TUP41UT8sYYBV7p1ctQluoQ00I3IjmNKnoVkcG/MvVAfk2E50gDswFfH9g5ZOl+vebSV1jYnZVUSdFxqjPEQBL6Ss4dKYpJM9roJstYq27Nm85vUzUd1a50ntdxJyebDEmyc5pGeMM0mS9MwiMAMTEHwvntgv/YBT6ZWyqGMpzIjgDHYVmbICScgutvQ/d+YjheAyTwuDQzvWMCsvgBF7FubPePveQgjZP+QwlyoX0GPfnkmMjRerzyB0ssdSRnVgsdmlhXcuc= 52 - secure: WNQBUyNvjTwMFm6pPzNXZYRvgLCTgEm93vLX/0amtr6gT6N8ZsTLL5+Ht3+v51MUOsjEe6tCM4cLSh4wSuwWcSEsUjK0jiqknlpgKKl6xLeo+1t8u6BKSgTpipWqrSD24TbvMrFUyeQrqCGRdZc3Ax/F1ERD81SXcsrg2evCL8g8zsYjxSMXc44drKrvYi68s/5ALrI+oH3t2PYsGuuP1ipj5CbaizUHEa5d8TukHRl96lxoEKCQ4Sa8UXRPNQsdb3TdkVmIEPIoioWU6AMPweBWR6Ky994aKwp0wWn1adWP49v8skMYWbirENniSxShtztF/NYqPQFyoyh0WD/C/ZJPh04HlMxnmQPUROq+LxBFz8WBY1eHDmz6GxH1lDYzneTtlRa5K8izvs2+ROhpVmmKeOgWHaL1ZRMy8Cn3V88kadF7i1K9NnqB6ZPyynJJctj7o0af6Os9/ZPqWfqIOWWeXgfXVzj17xJADfh6Z9epW95hdKZjnIf9IqGAI8aYTqhVL8DKTJ+PSGhJIOEX+ERm+0U9gMlwllwjHCDhBe42zCGuLaWZ239yD1eacM0Ko7yUM+xobiiF0FlB8VI/nBOpGdeUKNLeUfikLHILWd04AVRCNaQU67GMOHekfWdGR8tEh9I/5Y6GJR0IQL5eGmDUjSN0u/Ovss4jSEBOaXo=
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e69de29bb..e6551ed51 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -0,0 +1,29 @@
1<a name="5.0.0-beta.11"></a>
2# [5.0.0-beta.11](https://github.com/meetfranz/franz/compare/v5.0.0-beta.10...v5.0.0-beta.11) (2017-10-24)
3
4### Features
5
6* **Settings:** Add option to disable system tray icon ([c62f3fc](https://github.com/meetfranz/franz/commit/c62f3fc)), closes [#2](https://github.com/meetfranz/franz/issues/2)
7* **Service:** Display URL of hyperlinks ([a0cec4d](https://github.com/meetfranz/franz/commit/a0cec4d)), closes [#47](https://github.com/meetfranz/franz/issues/47) ([GustavoKatel](https://github.com/GustavoKatel))
8* **App:** Add tab cycling with ctrl[+shift]+tab or ctrl+[pageup|pagedown] ([e58f558](https://github.com/meetfranz/franz/commit/
9e58f558)), closes [#35](https://github.com/meetfranz/franz/issues/35) ([GustavoKatel](https://github.com/GustavoKatel))
10* **Translation:** Add Brazilian Portuguese ([phmigotto](https://github.com/phmigotto))
11* **Translation:** Add Dutch ([cpeetersburg](https://github.com/cpeetersburg), [Blizzke](https://github.com/Blizzke))
12* **Translation:** Add Flemish ([Blizzke](https://github.com/Blizzke), [mroeling](https://github.com/mroeling))
13* **Translation:** Add German ([rherwig](https://github.com/rherwig), [berndstelzl](https://github.com/berndstelzl))
14* **Translation:** Add Greek ([apo-mak](https://github.com/apo-mak))
15* **Translation:** Add French ([Shadorc](https://github.com/Shadorc), [ShiiFu](https://github.com/ShiiFu))
16* **Translation:** Add Japanese ([koma-private](https://github.com/koma-private))
17* **Translation:** Add Polish ([grzeswol](https://github.com/grzeswol))
18* **Translation:** Add Russian ([vaseker](https://github.com/vaseker))
19* **Translation:** Add Ukrainian ([Kietzmann](https://github.com/Kietzmann))
20
21### Bug Fixes
22
23* **App:** Force Franz to use single window ([2ae409e](https://github.com/meetfranz/franz/commit/2ae409e)), closes [#29](https://github.com/meetfranz/franz/issues/29)
24* **Onboarding:** Fix enable/disable service import toggle ([23174f9](https://github.com/meetfranz/franz/commit/23174f9))
25* **Onboarding:** Fix service import ([99d1c01](https://github.com/meetfranz/franz/commit/99d1c01)), closes [#22](https://github.com/meetfranz/franz/issues/22)
26* **Payment:** Fix payment window when name contains special character ([a854614](https://github.com/meetfranz/franz/commit/a854614))
27* **macOS:** Add macOS dark theme system tray icon ([55805f1](https://github.com/meetfranz/franz/commit/55805f1)), closes [#1](https://github.com/meetfranz/franz/issues/1)
28* **Windows:** Fix enable/disable autostart on login ([eca7f3b](https://github.com/meetfranz/franz/commit/eca7f3b)), closes [#17](https://github.com/meetfranz/franz/issues/17)
29* **Windows:** Fix multiple system tray icons when opening/closing Franz ([5b9b0c7](https://github.com/meetfranz/franz/commit/5b9b0c7))
diff --git a/README.md b/README.md
index fec639aff..2a0d30f1e 100644
--- a/README.md
+++ b/README.md
@@ -14,11 +14,8 @@ Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many mor
14 14
15### Preparations 15### Preparations
16 16
17#### Install OS Dependencies 17#### Install Linux OS dependencies
18##### Linux (Debian/Ubuntu) 18[Guide: Linux distribution specific dependencies](docs/linux.md)
19```bash
20$ apt install libx11-dev libxext-dev libxss-dev libxkbfile-dev
21```
22 19
23#### Install yarn 20#### Install yarn
24##### MacOS 21##### MacOS
diff --git a/docs/linux.md b/docs/linux.md
new file mode 100644
index 000000000..bd70ad324
--- /dev/null
+++ b/docs/linux.md
@@ -0,0 +1,11 @@
1# Linux distribution specific dependencies
2
3## Debian/Ubuntu
4```bash
5$ apt install libx11-dev libxext-dev libxss-dev libxkbfile-dev
6```
7
8## Fedora
9```bash
10$ dnf-install libX11-devel libXext-devel libXScrnSaver-devel libxkbfile-devel
11```
diff --git a/electron-builder.yml b/electron-builder.yml
index 80ef5405e..0a01a03d8 100644
--- a/electron-builder.yml
+++ b/electron-builder.yml
@@ -2,7 +2,7 @@ directories:
2 app: ./build 2 app: ./build
3 output: ./out 3 output: ./out
4 4
5forceCodeSigning: true 5# forceCodeSigning: true
6 6
7compression: maximum 7compression: maximum
8 8
diff --git a/package.json b/package.json
index 6521432de..dcb05bf6a 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
2 "name": "franz", 2 "name": "franz",
3 "productName": "Franz", 3 "productName": "Franz",
4 "appId": "com.meetfranz.franz", 4 "appId": "com.meetfranz.franz",
5 "version": "5.0.0-beta.10", 5 "version": "5.0.0-beta.11",
6 "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.", 6 "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.",
7 "copyright": "adlk x franz - Stefan Malzner", 7 "copyright": "adlk x franz - Stefan Malzner",
8 "main": "index.js", 8 "main": "index.js",
@@ -18,6 +18,7 @@
18 "prebuild": "gulp build", 18 "prebuild": "gulp build",
19 "build": "node_modules/.bin/electron-builder --publish onTag", 19 "build": "node_modules/.bin/electron-builder --publish onTag",
20 "rebuild": "node_modules/.bin/electron-rebuild", 20 "rebuild": "node_modules/.bin/electron-rebuild",
21 "precommit": "yarn lint",
21 "commit": "git-cz", 22 "commit": "git-cz",
22 "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" 23 "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"
23 }, 24 },
@@ -63,7 +64,7 @@
63 "react-tooltip": "^3.2.7", 64 "react-tooltip": "^3.2.7",
64 "route-parser": "^0.0.5", 65 "route-parser": "^0.0.5",
65 "smoothscroll-polyfill": "^0.3.4", 66 "smoothscroll-polyfill": "^0.3.4",
66 "tar.gz": "^1.0.5", 67 "tar": "^4.0.2",
67 "uuid": "^3.0.1" 68 "uuid": "^3.0.1"
68 }, 69 },
69 "devDependencies": { 70 "devDependencies": {
@@ -82,7 +83,7 @@
82 "cz-conventional-changelog": "^2.0.0", 83 "cz-conventional-changelog": "^2.0.0",
83 "del": "^2.2.2", 84 "del": "^2.2.2",
84 "dotenv": "^4.0.0", 85 "dotenv": "^4.0.0",
85 "electron": "^1.7.6", 86 "electron": "^1.7.9",
86 "electron-builder": "19.15.1", 87 "electron-builder": "19.15.1",
87 "electron-packager": "^8.7.0", 88 "electron-packager": "^8.7.0",
88 "electron-rebuild": "^1.6.0", 89 "electron-rebuild": "^1.6.0",
diff --git a/src/actions/service.js b/src/actions/service.js
index 7f429ca32..cdd4bbf16 100644
--- a/src/actions/service.js
+++ b/src/actions/service.js
@@ -4,6 +4,8 @@ export default {
4 setActive: { 4 setActive: {
5 serviceId: PropTypes.string.isRequired, 5 serviceId: PropTypes.string.isRequired,
6 }, 6 },
7 setActiveNext: {},
8 setActivePrev: {},
7 showAddServiceInterface: { 9 showAddServiceInterface: {
8 recipeId: PropTypes.string.isRequired, 10 recipeId: PropTypes.string.isRequired,
9 }, 11 },
diff --git a/src/api/server/ServerApi.js b/src/api/server/ServerApi.js
index 86f4c99e7..8b0b7563c 100644
--- a/src/api/server/ServerApi.js
+++ b/src/api/server/ServerApi.js
@@ -1,6 +1,6 @@
1import os from 'os'; 1import os from 'os';
2import path from 'path'; 2import path from 'path';
3import targz from 'tar.gz'; 3import tar from 'tar';
4import fs from 'fs-extra'; 4import fs from 'fs-extra';
5import { remote } from 'electron'; 5import { remote } from 'electron';
6 6
@@ -293,7 +293,11 @@ export default class ServerApi {
293 const buffer = await res.buffer(); 293 const buffer = await res.buffer();
294 fs.writeFileSync(archivePath, buffer); 294 fs.writeFileSync(archivePath, buffer);
295 295
296 await targz().extract(archivePath, recipeTempDirectory); 296 tar.x({
297 file: archivePath,
298 cwd: recipeTempDirectory,
299 sync: true,
300 });
297 301
298 const { id } = fs.readJsonSync(path.join(recipeTempDirectory, 'package.json')); 302 const { id } = fs.readJsonSync(path.join(recipeTempDirectory, 'package.json'));
299 const recipeDirectory = path.join(recipesDirectory, id); 303 const recipeDirectory = path.join(recipesDirectory, id);
@@ -443,6 +447,10 @@ export default class ServerApi {
443 447
444 // Helper 448 // Helper
445 async _mapServiceModels(services) { 449 async _mapServiceModels(services) {
450 const recipes = services.map(s => s.recipeId);
451
452 await this._bulkRecipeCheck(recipes);
453
446 return Promise.all(services 454 return Promise.all(services
447 .map(async service => await this._prepareServiceModel(service)) // eslint-disable-line 455 .map(async service => await this._prepareServiceModel(service)) // eslint-disable-line
448 ); 456 );
@@ -454,19 +462,8 @@ export default class ServerApi {
454 recipe = this.recipes.find(r => r.id === service.recipeId); 462 recipe = this.recipes.find(r => r.id === service.recipeId);
455 463
456 if (!recipe) { 464 if (!recipe) {
457 console.warn(`Recipe '${service.recipeId}' not installed, trying to fetch from server`); 465 console.warn(`Recipe ${service.recipeId} not loaded`);
458 466 return null;
459 await this.getRecipePackage(service.recipeId);
460
461 console.debug('Rerun ServerAPI::getInstalledRecipes');
462 await this.getInstalledRecipes();
463
464 recipe = this.recipes.find(r => r.id === service.recipeId);
465
466 if (!recipe) {
467 console.warn(`Could not load recipe ${service.recipeId}`);
468 return null;
469 }
470 } 467 }
471 468
472 return new ServiceModel(service, recipe); 469 return new ServiceModel(service, recipe);
@@ -476,6 +473,35 @@ export default class ServerApi {
476 } 473 }
477 } 474 }
478 475
476 async _bulkRecipeCheck(unfilteredRecipes) {
477 // Filter recipe duplicates as we don't need to download 3 Slack recipes
478 const recipes = unfilteredRecipes.filter((elem, pos, arr) => arr.indexOf(elem) === pos);
479
480 return Promise.all(recipes
481 .map(async (recipeId) => {
482 let recipe = this.recipes.find(r => r.id === recipeId);
483
484 if (!recipe) {
485 console.warn(`Recipe '${recipeId}' not installed, trying to fetch from server`);
486
487 await this.getRecipePackage(recipeId);
488
489 console.debug('Rerun ServerAPI::getInstalledRecipes');
490 await this.getInstalledRecipes();
491
492 recipe = this.recipes.find(r => r.id === recipeId);
493
494 if (!recipe) {
495 console.warn(`Could not load recipe ${recipeId}`);
496 return null;
497 }
498 }
499
500 return recipe;
501 }),
502 ).catch(err => console.error(err));
503 }
504
479 _mapRecipePreviewModel(recipes) { 505 _mapRecipePreviewModel(recipes) {
480 return recipes.map((recipe) => { 506 return recipes.map((recipe) => {
481 try { 507 try {
diff --git a/src/assets/images/tray/darwin-dark/tray-active.png b/src/assets/images/tray/darwin-dark/tray-active.png
new file mode 100644
index 000000000..489533dbf
--- /dev/null
+++ b/src/assets/images/tray/darwin-dark/tray-active.png
Binary files differ
diff --git a/src/assets/images/tray/darwin-dark/tray-active@2x.png b/src/assets/images/tray/darwin-dark/tray-active@2x.png
new file mode 100644
index 000000000..76f212b52
--- /dev/null
+++ b/src/assets/images/tray/darwin-dark/tray-active@2x.png
Binary files differ
diff --git a/src/assets/images/tray/darwin-dark/tray-unread-active.png b/src/assets/images/tray/darwin-dark/tray-unread-active.png
new file mode 100644
index 000000000..e2fd1a822
--- /dev/null
+++ b/src/assets/images/tray/darwin-dark/tray-unread-active.png
Binary files differ
diff --git a/src/assets/images/tray/darwin-dark/tray-unread-active@2x.png b/src/assets/images/tray/darwin-dark/tray-unread-active@2x.png
new file mode 100644
index 000000000..9a64b3ef8
--- /dev/null
+++ b/src/assets/images/tray/darwin-dark/tray-unread-active@2x.png
Binary files differ
diff --git a/src/assets/images/tray/darwin-dark/tray-unread.png b/src/assets/images/tray/darwin-dark/tray-unread.png
new file mode 100644
index 000000000..e2fd1a822
--- /dev/null
+++ b/src/assets/images/tray/darwin-dark/tray-unread.png
Binary files differ
diff --git a/src/assets/images/tray/darwin-dark/tray-unread@2x.png b/src/assets/images/tray/darwin-dark/tray-unread@2x.png
new file mode 100644
index 000000000..9a64b3ef8
--- /dev/null
+++ b/src/assets/images/tray/darwin-dark/tray-unread@2x.png
Binary files differ
diff --git a/src/assets/images/tray/darwin-dark/tray.png b/src/assets/images/tray/darwin-dark/tray.png
new file mode 100644
index 000000000..489533dbf
--- /dev/null
+++ b/src/assets/images/tray/darwin-dark/tray.png
Binary files differ
diff --git a/src/assets/images/tray/darwin-dark/tray@2x.png b/src/assets/images/tray/darwin-dark/tray@2x.png
new file mode 100644
index 000000000..76f212b52
--- /dev/null
+++ b/src/assets/images/tray/darwin-dark/tray@2x.png
Binary files differ
diff --git a/src/components/auth/Import.js b/src/components/auth/Import.js
index cf83aa9c8..06493a0fd 100644
--- a/src/components/auth/Import.js
+++ b/src/components/auth/Import.js
@@ -99,7 +99,6 @@ export default class Import extends Component {
99 <tr 99 <tr
100 key={service.id} 100 key={service.id}
101 className="service-table__row" 101 className="service-table__row"
102 onClick={() => service.$('add').set(!service.$('add').value)}
103 > 102 >
104 <td className="service-table__toggle"> 103 <td className="service-table__toggle">
105 <Toggle 104 <Toggle
diff --git a/src/components/auth/Login.js b/src/components/auth/Login.js
index 015079f02..67e92849d 100644
--- a/src/components/auth/Login.js
+++ b/src/components/auth/Login.js
@@ -3,11 +3,14 @@ import PropTypes from 'prop-types';
3import { observer } from 'mobx-react'; 3import { observer } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 4import { defineMessages, intlShape } from 'react-intl';
5 5
6import { isDevMode, useLiveAPI } from '../../environment';
6import Form from '../../lib/Form'; 7import Form from '../../lib/Form';
7import { required, email } from '../../helpers/validation-helpers'; 8import { required, email } from '../../helpers/validation-helpers';
8import Input from '../ui/Input'; 9import Input from '../ui/Input';
9import Button from '../ui/Button'; 10import Button from '../ui/Button';
10import Link from '../ui/Link'; 11import Link from '../ui/Link';
12import Infobox from '../ui/Infobox';
13
11 14
12import { globalError as globalErrorPropType } from '../../prop-types'; 15import { globalError as globalErrorPropType } from '../../prop-types';
13 16
@@ -117,6 +120,11 @@ export default class Login extends Component {
117 alt="" 120 alt=""
118 /> 121 />
119 <h1>{intl.formatMessage(messages.headline)}</h1> 122 <h1>{intl.formatMessage(messages.headline)}</h1>
123 {isDevMode && !useLiveAPI && (
124 <Infobox type="warning">
125 In Dev Mode your data is not persistent. Please use the live app for accesing the production API.
126 </Infobox>
127 )}
120 {isTokenExpired && ( 128 {isTokenExpired && (
121 <p className="error-message center">{intl.formatMessage(messages.tokenExpired)}</p> 129 <p className="error-message center">{intl.formatMessage(messages.tokenExpired)}</p>
122 )} 130 )}
diff --git a/src/components/auth/Signup.js b/src/components/auth/Signup.js
index 71ca16111..a990a112e 100644
--- a/src/components/auth/Signup.js
+++ b/src/components/auth/Signup.js
@@ -3,12 +3,14 @@ import PropTypes from 'prop-types';
3import { observer } from 'mobx-react'; 3import { observer } from 'mobx-react';
4import { defineMessages, intlShape } from 'react-intl'; 4import { defineMessages, intlShape } from 'react-intl';
5 5
6import { isDevMode, useLiveAPI } from '../../environment';
6import Form from '../../lib/Form'; 7import Form from '../../lib/Form';
7import { required, email, minLength } from '../../helpers/validation-helpers'; 8import { required, email, minLength } from '../../helpers/validation-helpers';
8import Input from '../ui/Input'; 9import Input from '../ui/Input';
9import Radio from '../ui/Radio'; 10import Radio from '../ui/Radio';
10import Button from '../ui/Button'; 11import Button from '../ui/Button';
11import Link from '../ui/Link'; 12import Link from '../ui/Link';
13import Infobox from '../ui/Infobox';
12 14
13import { globalError as globalErrorPropType } from '../../prop-types'; 15import { globalError as globalErrorPropType } from '../../prop-types';
14 16
@@ -145,6 +147,11 @@ export default class Signup extends Component {
145 alt="" 147 alt=""
146 /> 148 />
147 <h1>{intl.formatMessage(messages.headline)}</h1> 149 <h1>{intl.formatMessage(messages.headline)}</h1>
150 {isDevMode && !useLiveAPI && (
151 <Infobox type="warning">
152 In Dev Mode your data is not persistent. Please use the live app for accesing the production API.
153 </Infobox>
154 )}
148 <Radio field={form.$('accountType')} showLabel={false} /> 155 <Radio field={form.$('accountType')} showLabel={false} />
149 <div className="grid__row"> 156 <div className="grid__row">
150 <Input field={form.$('firstname')} focus /> 157 <Input field={form.$('firstname')} focus />
diff --git a/src/components/services/content/ServiceWebview.js b/src/components/services/content/ServiceWebview.js
index 043ff42ea..3ee3155be 100644
--- a/src/components/services/content/ServiceWebview.js
+++ b/src/components/services/content/ServiceWebview.js
@@ -6,6 +6,7 @@ import Webview from 'react-electron-web-view';
6import classnames from 'classnames'; 6import classnames from 'classnames';
7 7
8import ServiceModel from '../../../models/Service'; 8import ServiceModel from '../../../models/Service';
9import StatusBarTargetUrl from '../../ui/StatusBarTargetUrl';
9 10
10@observer 11@observer
11export default class ServiceWebview extends Component { 12export default class ServiceWebview extends Component {
@@ -20,6 +21,8 @@ export default class ServiceWebview extends Component {
20 21
21 state = { 22 state = {
22 forceRepaint: false, 23 forceRepaint: false,
24 targetUrl: '',
25 statusBarVisible: false,
23 }; 26 };
24 27
25 componentDidMount() { 28 componentDidMount() {
@@ -33,6 +36,17 @@ export default class ServiceWebview extends Component {
33 }); 36 });
34 } 37 }
35 38
39 updateTargetUrl = (event) => {
40 let visible = true;
41 if (event.url === '' || event.url === '#') {
42 visible = false;
43 }
44 this.setState({
45 targetUrl: event.url,
46 statusBarVisible: visible,
47 });
48 }
49
36 webview = null; 50 webview = null;
37 51
38 render() { 52 render() {
@@ -47,6 +61,13 @@ export default class ServiceWebview extends Component {
47 'services__webview--force-repaint': this.state.forceRepaint, 61 'services__webview--force-repaint': this.state.forceRepaint,
48 }); 62 });
49 63
64 let statusBar = null;
65 if (this.state.statusBarVisible) {
66 statusBar = (
67 <StatusBarTargetUrl text={this.state.targetUrl} />
68 );
69 }
70
50 return ( 71 return (
51 <div className={webviewClasses}> 72 <div className={webviewClasses}>
52 <Webview 73 <Webview
@@ -62,11 +83,14 @@ export default class ServiceWebview extends Component {
62 webview: this.webview.view, 83 webview: this.webview.view,
63 })} 84 })}
64 85
86 onUpdateTargetUrl={this.updateTargetUrl}
87
65 useragent={service.userAgent} 88 useragent={service.userAgent}
66 89
67 disablewebsecurity 90 disablewebsecurity
68 allowpopups 91 allowpopups
69 /> 92 />
93 {statusBar}
70 </div> 94 </div>
71 ); 95 );
72 } 96 }
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js
index 02736dbb9..5675fecf4 100644
--- a/src/components/settings/settings/EditSettingsForm.js
+++ b/src/components/settings/settings/EditSettingsForm.js
@@ -115,6 +115,7 @@ export default class EditSettingsForm extends Component {
115 <h2>{intl.formatMessage(messages.headlineGeneral)}</h2> 115 <h2>{intl.formatMessage(messages.headlineGeneral)}</h2>
116 <Toggle field={form.$('autoLaunchOnStart')} /> 116 <Toggle field={form.$('autoLaunchOnStart')} />
117 <Toggle field={form.$('runInBackground')} /> 117 <Toggle field={form.$('runInBackground')} />
118 <Toggle field={form.$('enableSystemTray')} />
118 {process.platform === 'win32' && ( 119 {process.platform === 'win32' && (
119 <Toggle field={form.$('minimizeToSystemTray')} /> 120 <Toggle field={form.$('minimizeToSystemTray')} />
120 )} 121 )}
diff --git a/src/components/ui/StatusBarTargetUrl.js b/src/components/ui/StatusBarTargetUrl.js
new file mode 100644
index 000000000..b7b198f42
--- /dev/null
+++ b/src/components/ui/StatusBarTargetUrl.js
@@ -0,0 +1,40 @@
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer } from 'mobx-react';
4import classnames from 'classnames';
5
6import Appear from '../ui/effects/Appear';
7
8@observer
9export default class StatusBarTargetUrl extends Component {
10 static propTypes = {
11 className: PropTypes.string,
12 text: PropTypes.string,
13 };
14
15 static defaultProps = {
16 className: '',
17 position: 'bottom',
18 text: '',
19 };
20
21 render() {
22 const {
23 className,
24 text,
25 } = this.props;
26
27 return (
28 <Appear
29 className={classnames({
30 'status-bar-target-url': true,
31 [`${className}`]: true,
32 })}
33 >
34 <div className="status-bar-target-url__content">
35 {text}
36 </div>
37 </Appear>
38 );
39 }
40}
diff --git a/src/components/ui/Subscription.js b/src/components/ui/Subscription.js
index ada5cc3e0..fe0925a26 100644
--- a/src/components/ui/Subscription.js
+++ b/src/components/ui/Subscription.js
@@ -79,7 +79,7 @@ const messages = defineMessages({
79 }, 79 },
80 miningDetail1: { 80 miningDetail1: {
81 id: 'subscription.mining.line1', 81 id: 'subscription.mining.line1',
82 defaultMessage: '!!!By enabling "Support with processing power", Franz will use about 20-50% of your CPU to mine cryptocurrency Monero which equals approximately $ 5/year.', 82 defaultMessage: '!!!By enabling "Support with processing power", Franz will use about 20-50% of your CPU to mine cryptocurrency Monero which equals approximately € 5/year.',
83 }, 83 },
84 miningDetail2: { 84 miningDetail2: {
85 id: 'subscription.mining.line2', 85 id: 'subscription.mining.line2',
@@ -136,12 +136,12 @@ export default class SubscriptionForm extends Component {
136 validate: [required], 136 validate: [required],
137 options: [{ 137 options: [{
138 value: 'month', 138 value: 'month',
139 label: `$ ${Object.hasOwnProperty.call(this.props.plan, 'month') 139 label: ` ${Object.hasOwnProperty.call(this.props.plan, 'month')
140 ? `${this.props.plan.month.price} / ${intl.formatMessage(messages.typeMonthly)}` 140 ? `${this.props.plan.month.price} / ${intl.formatMessage(messages.typeMonthly)}`
141 : 'monthly'}`, 141 : 'monthly'}`,
142 }, { 142 }, {
143 value: 'year', 143 value: 'year',
144 label: `$ ${Object.hasOwnProperty.call(this.props.plan, 'year') 144 label: ` ${Object.hasOwnProperty.call(this.props.plan, 'year')
145 ? `${this.props.plan.year.price} / ${intl.formatMessage(messages.typeYearly)}` 145 ? `${this.props.plan.year.price} / ${intl.formatMessage(messages.typeYearly)}`
146 : 'yearly'}`, 146 : 'yearly'}`,
147 }, { 147 }, {
@@ -155,7 +155,7 @@ export default class SubscriptionForm extends Component {
155 if (this.props.showSkipOption) { 155 if (this.props.showSkipOption) {
156 form.fields.paymentTier.options.unshift({ 156 form.fields.paymentTier.options.unshift({
157 value: 'skip', 157 value: 'skip',
158 label: `$ 0 / ${intl.formatMessage(messages.typeFree)}`, 158 label: ` 0 / ${intl.formatMessage(messages.typeFree)}`,
159 }); 159 });
160 } 160 }
161 161
diff --git a/src/components/ui/SubscriptionPopup.js b/src/components/ui/SubscriptionPopup.js
index 72b6ccd98..5aae2c47a 100644
--- a/src/components/ui/SubscriptionPopup.js
+++ b/src/components/ui/SubscriptionPopup.js
@@ -57,7 +57,7 @@ export default class SubscriptionPopup extends Component {
57 className="subscription-popup__webview" 57 className="subscription-popup__webview"
58 58
59 autosize 59 autosize
60 src={url} 60 src={encodeURI(url)}
61 disablewebsecurity 61 disablewebsecurity
62 onDidNavigate={completeCheck} 62 onDidNavigate={completeCheck}
63 // onNewWindow={(event, url, frameName, options) => 63 // onNewWindow={(event, url, frameName, options) =>
diff --git a/src/config.js b/src/config.js
index acbf57f3c..0a4856ece 100644
--- a/src/config.js
+++ b/src/config.js
@@ -3,3 +3,13 @@ export const LOCAL_API = 'http://localhost:3000';
3export const DEV_API = 'https://dev.franzinfra.com'; 3export const DEV_API = 'https://dev.franzinfra.com';
4export const LIVE_API = 'https://api.franzinfra.com'; 4export const LIVE_API = 'https://api.franzinfra.com';
5export const GA_ID = 'UA-74126766-6'; 5export const GA_ID = 'UA-74126766-6';
6
7export const DEFAULT_APP_SETTINGS = {
8 autoLaunchOnStart: true,
9 autoLaunchInBackground: false,
10 runInBackground: false,
11 enableSystemTray: true,
12 minimizeToSystemTray: false,
13 locale: 'en-us', // TODO: Replace with proper solution once translations are in
14 beta: false,
15};
diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js
index 0e17cafce..6dc2175e1 100644
--- a/src/containers/settings/EditSettingsScreen.js
+++ b/src/containers/settings/EditSettingsScreen.js
@@ -9,6 +9,7 @@ import UserStore from '../../stores/UserStore';
9import Form from '../../lib/Form'; 9import Form from '../../lib/Form';
10import languages from '../../i18n/languages'; 10import languages from '../../i18n/languages';
11import { gaPage } from '../../lib/analytics'; 11import { gaPage } from '../../lib/analytics';
12import { DEFAULT_APP_SETTINGS } from '../../config';
12 13
13 14
14import EditSettingsForm from '../../components/settings/settings/EditSettingsForm'; 15import EditSettingsForm from '../../components/settings/settings/EditSettingsForm';
@@ -26,6 +27,10 @@ const messages = defineMessages({
26 id: 'settings.app.form.runInBackground', 27 id: 'settings.app.form.runInBackground',
27 defaultMessage: '!!!Keep Franz in background when closing the window', 28 defaultMessage: '!!!Keep Franz in background when closing the window',
28 }, 29 },
30 enableSystemTray: {
31 id: 'settings.app.form.enableSystemTray',
32 defaultMessage: '!!!Show Franz in system tray',
33 },
29 minimizeToSystemTray: { 34 minimizeToSystemTray: {
30 id: 'settings.app.form.minimizeToSystemTray', 35 id: 'settings.app.form.minimizeToSystemTray',
31 defaultMessage: '!!!Minimize Franz to system tray', 36 defaultMessage: '!!!Minimize Franz to system tray',
@@ -61,6 +66,7 @@ export default class EditSettingsScreen extends Component {
61 settings.update({ 66 settings.update({
62 settings: { 67 settings: {
63 runInBackground: settingsData.runInBackground, 68 runInBackground: settingsData.runInBackground,
69 enableSystemTray: settingsData.enableSystemTray,
64 minimizeToSystemTray: settingsData.minimizeToSystemTray, 70 minimizeToSystemTray: settingsData.minimizeToSystemTray,
65 locale: settingsData.locale, 71 locale: settingsData.locale,
66 beta: settingsData.beta, 72 beta: settingsData.beta,
@@ -91,33 +97,38 @@ export default class EditSettingsScreen extends Component {
91 autoLaunchOnStart: { 97 autoLaunchOnStart: {
92 label: intl.formatMessage(messages.autoLaunchOnStart), 98 label: intl.formatMessage(messages.autoLaunchOnStart),
93 value: app.autoLaunchOnStart, 99 value: app.autoLaunchOnStart,
94 default: true, 100 default: DEFAULT_APP_SETTINGS.autoLaunchOnStart,
95 }, 101 },
96 autoLaunchInBackground: { 102 autoLaunchInBackground: {
97 label: intl.formatMessage(messages.autoLaunchInBackground), 103 label: intl.formatMessage(messages.autoLaunchInBackground),
98 value: app.launchInBackground, 104 value: app.launchInBackground,
99 default: false, 105 default: DEFAULT_APP_SETTINGS.autoLaunchInBackground,
100 }, 106 },
101 runInBackground: { 107 runInBackground: {
102 label: intl.formatMessage(messages.runInBackground), 108 label: intl.formatMessage(messages.runInBackground),
103 value: settings.all.runInBackground, 109 value: settings.all.runInBackground,
104 default: true, 110 default: DEFAULT_APP_SETTINGS.runInBackground,
111 },
112 enableSystemTray: {
113 label: intl.formatMessage(messages.enableSystemTray),
114 value: settings.all.enableSystemTray,
115 default: DEFAULT_APP_SETTINGS.enableSystemTray,
105 }, 116 },
106 minimizeToSystemTray: { 117 minimizeToSystemTray: {
107 label: intl.formatMessage(messages.minimizeToSystemTray), 118 label: intl.formatMessage(messages.minimizeToSystemTray),
108 value: settings.all.minimizeToSystemTray, 119 value: settings.all.minimizeToSystemTray,
109 default: false, 120 default: DEFAULT_APP_SETTINGS.minimizeToSystemTray,
110 }, 121 },
111 locale: { 122 locale: {
112 label: intl.formatMessage(messages.language), 123 label: intl.formatMessage(messages.language),
113 value: app.locale, 124 value: app.locale,
114 options, 125 options,
115 default: 'en-US', 126 default: DEFAULT_APP_SETTINGS.locale,
116 }, 127 },
117 beta: { 128 beta: {
118 label: intl.formatMessage(messages.beta), 129 label: intl.formatMessage(messages.beta),
119 value: user.data.beta, 130 value: user.data.beta,
120 default: false, 131 default: DEFAULT_APP_SETTINGS.beta,
121 }, 132 },
122 }, 133 },
123 }; 134 };
diff --git a/src/containers/ui/SubscriptionPopupScreen.js b/src/containers/ui/SubscriptionPopupScreen.js
index d17477b1d..0b6432e50 100644
--- a/src/containers/ui/SubscriptionPopupScreen.js
+++ b/src/containers/ui/SubscriptionPopupScreen.js
@@ -24,7 +24,7 @@ export default class SubscriptionPopupScreen extends Component {
24 render() { 24 render() {
25 return ( 25 return (
26 <SubscriptionPopup 26 <SubscriptionPopup
27 url={decodeURIComponent(this.props.router.params.url)} 27 url={this.props.router.params.url}
28 closeWindow={() => window.close()} 28 closeWindow={() => window.close()}
29 completeCheck={e => this.completeCheck(e)} 29 completeCheck={e => this.completeCheck(e)}
30 isCompleted={this.state.complete} 30 isCompleted={this.state.complete}
diff --git a/src/electron/Settings.js b/src/electron/Settings.js
index 049a08296..824b4c20c 100644
--- a/src/electron/Settings.js
+++ b/src/electron/Settings.js
@@ -1,5 +1,17 @@
1import { observable } from 'mobx';
2
3import { DEFAULT_APP_SETTINGS } from '../config';
4
1export default class Settings { 5export default class Settings {
2 store = {}; 6 @observable store = {
7 autoLaunchOnStart: DEFAULT_APP_SETTINGS.autoLaunchOnStart,
8 autoLaunchInBackground: DEFAULT_APP_SETTINGS.autoLaunchInBackground,
9 runInBackground: DEFAULT_APP_SETTINGS.runInBackground,
10 enableSystemTray: DEFAULT_APP_SETTINGS.enableSystemTray,
11 minimizeToSystemTray: DEFAULT_APP_SETTINGS.minimizeToSystemTray,
12 locale: DEFAULT_APP_SETTINGS.locale,
13 beta: DEFAULT_APP_SETTINGS.beta,
14 };
3 15
4 set(settings) { 16 set(settings) {
5 this.store = Object.assign(this.store, settings); 17 this.store = Object.assign(this.store, settings);
diff --git a/src/electron/ipc-api/appIndicator.js b/src/electron/ipc-api/appIndicator.js
index 576234d25..d31819068 100644
--- a/src/electron/ipc-api/appIndicator.js
+++ b/src/electron/ipc-api/appIndicator.js
@@ -1,12 +1,11 @@
1import { app, ipcMain, Tray, Menu } from 'electron'; 1import { app, ipcMain } from 'electron';
2import path from 'path'; 2import path from 'path';
3import { autorun } from 'mobx';
3 4
4const INDICATOR_TRAY_PLAIN = 'tray';
5const INDICATOR_TRAY_UNREAD = 'tray-unread';
6const INDICATOR_TASKBAR = 'taskbar'; 5const INDICATOR_TASKBAR = 'taskbar';
7
8const FILE_EXTENSION = process.platform === 'win32' ? 'ico' : 'png'; 6const FILE_EXTENSION = process.platform === 'win32' ? 'ico' : 'png';
9let trayIcon; 7
8let isTrayIconEnabled;
10 9
11function getAsset(type, asset) { 10function getAsset(type, asset) {
12 return path.join( 11 return path.join(
@@ -15,26 +14,14 @@ function getAsset(type, asset) {
15} 14}
16 15
17export default (params) => { 16export default (params) => {
18 trayIcon = new Tray(getAsset('tray', INDICATOR_TRAY_PLAIN)); 17 autorun(() => {
19 const trayMenuTemplate = [ 18 isTrayIconEnabled = params.settings.get('enableSystemTray');
20 {
21 label: 'Show Franz',
22 click() {
23 params.mainWindow.show();
24 },
25 }, {
26 label: 'Quit Franz',
27 click() {
28 app.quit();
29 },
30 },
31 ];
32
33 const trayMenu = Menu.buildFromTemplate(trayMenuTemplate);
34 trayIcon.setContextMenu(trayMenu);
35 19
36 trayIcon.on('click', () => { 20 if (!isTrayIconEnabled) {
37 params.mainWindow.show(); 21 params.trayIcon.hide();
22 } else if (isTrayIconEnabled) {
23 params.trayIcon.show();
24 }
38 }); 25 });
39 26
40 ipcMain.on('updateAppIndicator', (event, args) => { 27 ipcMain.on('updateAppIndicator', (event, args) => {
@@ -68,13 +55,7 @@ export default (params) => {
68 } 55 }
69 } 56 }
70 57
71 // Update system tray 58 // Update Tray
72 trayIcon.setImage(getAsset('tray', args.indicator !== 0 ? INDICATOR_TRAY_UNREAD : INDICATOR_TRAY_PLAIN)); 59 params.trayIcon.setIndicator(args.indicator);
73
74 if (process.platform === 'darwin') {
75 trayIcon.setPressedImage(
76 getAsset('tray', `${args.indicator !== 0 ? INDICATOR_TRAY_UNREAD : INDICATOR_TRAY_PLAIN}-active`),
77 );
78 }
79 }); 60 });
80}; 61};
diff --git a/src/electron/ipc-api/settings.js b/src/electron/ipc-api/settings.js
index 1d7eafa6c..995b28fbd 100644
--- a/src/electron/ipc-api/settings.js
+++ b/src/electron/ipc-api/settings.js
@@ -1,10 +1,7 @@
1import { ipcMain } from 'electron'; 1import { ipcMain } from 'electron';
2 2
3export default (params) => { 3export default (params) => {
4 if (process.platform === 'darwin' || process.platform === 'win32') { 4 ipcMain.on('settings', (event, args) => {
5 // eslint-disable-next-line 5 params.settings.set(args);
6 ipcMain.on('settings', (event, args) => { 6 });
7 params.settings.set(args);
8 });
9 }
10}; 7};
diff --git a/src/electron/ipc-api/tray.js b/src/electron/ipc-api/tray.js
deleted file mode 100644
index 43364c0ed..000000000
--- a/src/electron/ipc-api/tray.js
+++ /dev/null
@@ -1,48 +0,0 @@
1import { Tray, Menu, ipcMain } from 'electron';
2import path from 'path';
3
4const INDICATOR_PLAIN = 'franz-taskbar';
5const INDICATOR_UNREAD = 'franz-taskbar-unread';
6
7const FILE_EXTENSION = process.platform === 'win32' ? 'ico' : 'png';
8
9let trayIcon;
10
11function getAsset(asset) {
12 return path.join(
13 __dirname, '..', '..', 'assets', 'images', 'tray', process.platform, `${asset}.${FILE_EXTENSION}`,
14 );
15}
16
17export default (params) => {
18 // if (process.platform === 'win32' || process.platform === 'linux') {
19 trayIcon = new Tray(getAsset(INDICATOR_PLAIN));
20 const trayMenuTemplate = [
21 {
22 label: 'Show Franz',
23 click() {
24 params.mainWindow.show();
25 },
26 }, {
27 label: 'Quit Franz',
28 click() {
29 params.app.quit();
30 },
31 },
32 ];
33
34 const trayMenu = Menu.buildFromTemplate(trayMenuTemplate);
35 trayIcon.setContextMenu(trayMenu);
36
37 trayIcon.on('click', () => {
38 params.mainWindow.show();
39 });
40
41 ipcMain.on('updateTrayIconIndicator', (event, args) => {
42 trayIcon.setImage(getAsset(args.count !== 0 ? INDICATOR_UNREAD : INDICATOR_PLAIN));
43
44 if (process.platform === 'darwin') {
45 trayIcon.setPressedImage(getAsset(`${args.count !== 0 ? INDICATOR_UNREAD : INDICATOR_PLAIN}-active`));
46 }
47 });
48};
diff --git a/src/i18n/languages.js b/src/i18n/languages.js
index 782853b43..9860295b3 100644
--- a/src/i18n/languages.js
+++ b/src/i18n/languages.js
@@ -1,4 +1,13 @@
1module.exports = { 1module.exports = {
2 'en-US': 'English', 2 'en-US': 'English',
3 // 'de-DE': 'Deutsch', 3 'pt-BR': 'Portuguese (Brazil)',
4 'el-GR': 'Ελληνικά (Greece)',
5 nl: 'Nederlands',
6 'nl-BE': 'Vlaams',
7 de: 'Deutsch',
8 fr: 'French',
9 ja: 'Japanese',
10 pl: 'Polish',
11 ru: 'Русский',
12 ua: 'Українська',
4}; 13};
diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json
new file mode 100644
index 000000000..78de9903e
--- /dev/null
+++ b/src/i18n/locales/de.json
@@ -0,0 +1,167 @@
1{
2 "global.api.unhealthy": "Verbindung mit dem Franz Online Service fehlgeschlagen.",
3 "global.notConnectedToTheInternet": "Du bist nicht mit dem Internet verbunden.",
4 "welcome.signupButton": "Kostenloses Konto erstellen",
5 "welcome.loginButton": "Anmelden",
6 "welcome.slogan": "Kommunikation, die für Dich funktioniert",
7 "login.headline": "Anmelden",
8 "login.email.label": "E-Mail-Adresse",
9 "login.password.label": "Passwort",
10 "login.submit.label": "Anmelden",
11 "login.invalidCredentials": "E-Mail-Adresse oder Passwort ungültig",
12 "login.tokenExpired": "Deine Sitzung ist abgelaufen, bitte melde dich erneut an.",
13 "login.serverLogout": "Deine Sitzung ist abgelaufen, bitte melde dich erneut an.",
14 "login.link.signup": "Kostenloses Konto erstellen",
15 "login.link.password": "Passwort zurücksetzen",
16 "password.headline": "Passwort zurücksetzen",
17 "password.email.label": "E-Mail-Adresse",
18 "password.submit.label": "Absenden",
19 "password.noUser": "Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden",
20 "password.successInfo": "Bitte überprüfe Deine E-Mail-Adresse",
21 "password.link.signup": "Kostenloses Konto erstellen",
22 "password.link.login": "Anmelden",
23 "signup.headline": "Registrierung",
24 "signup.firstname.label": "Vorname",
25 "signup.lastname.label": "Nachname",
26 "signup.email.label": "E-Mail-Adresse",
27 "signup.company.label": "Unternehmen",
28 "signup.password.label": "Passwort",
29 "signup.submit.label": "Konto erstellen",
30 "signup.link.login": "Du hast bereits ein Konto? Melde Dich an.",
31 "signup.emailDuplicate": "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits.",
32 "signup.legal.info": "Mit der Erstellung eines Franz Kontos, akzeptierst Du die",
33 "signup.legal.terms": "Nutzungsbedingungen",
34 "signup.legal.privacy": "Datenschutzerklärung",
35 "pricing.headline": "Unterstütze Franz",
36 "pricing.support.label": "Wie möchtest Du Franz unterstützen?",
37 "pricing.submit.label": "Ich möchte die Entwicklung von Franz unterstützen.",
38 "pricing.link.skipPayment": "Ich möchte die Entwicklung von Franz nicht unterstützen.",
39 "import.headline": "Importiere Deine Franz 4 Dienste",
40 "import.notSupportedHeadline": "Dienste, die noch nicht von Franz 5 unterstützt werden",
41 "import.submit.label": "Dienste importieren",
42 "import.skip.label": "Ich möchte einen Dienst manuell hinzufügen",
43 "invite.submit.label": "Einladungen senden",
44 "invite.headline.friends": "Lade 3 Deiner Freund oder Kollegen ein",
45 "invite.name.label": "Name",
46 "invite.email.label": "E-Mail-Adresse",
47 "invite.skip.label": "Ich möchte das später tun",
48 "subscription.submit.label": "Ich möchte die Entwicklung von Franz unterstützen",
49 "subscription.paymentSessionError": "Das Zahlungs-Formular konnte nicht geladen werden.",
50 "subscription.includedFeatures": "Bezahlte Franz Premium Support Konten beinhalten",
51 "subscription.features.onpremise": "Integration von gehosteten Diensten, wie HipChat",
52 "subscription.features.customServices": "Private Dienste für Dich und Dein Team",
53 "subscription.features.encryptedSync": "Verschlüsselte Sitzungs-Synchronisation",
54 "subscription.features.vpn": "Proxy & VPN Unterstützung",
55 "subscription.features.ads": "Nie mehr Werbung!",
56 "subscription.features.comingSoon": "folgt bald",
57 "infobar.servicesUpdated": "Deine Dienste wurden aktualisiert.",
58 "infobar.updateAvailable": "Eine neue Version von Franz ist verfügbar.",
59 "infobar.buttonReloadServices": "Dienste neuladen",
60 "infobar.buttonInstallUpdate": "Neustarten & Aktualisierung installieren",
61 "infobar.requiredRequestsFailed": "Dienste und Benutzerinformationen konnten nicht geladen werden",
62 "sidebar.settings": "Einstellungen",
63 "services.welcome": "Willkommen bei Franz",
64 "services.getStarted": "Loslegen",
65 "settings.account.headline": "Konto",
66 "settings.account.headlineSubscription": "Dein Abonnement",
67 "settings.account.headlineUpgrade": "Erweitere Dein Konto & unterstütze Franz",
68 "settings.account.headlineInvoices": "Rechnungen",
69 "settings.account.manageSubscription.label": "Verwalte Dein Abonnement",
70 "settings.account.accountType.basic": "Basis Konto",
71 "settings.account.accountType.premium": "Premium-Supporter Konto",
72 "settings.account.account.editButton": "Konto bearbeiten",
73 "settings.account.invoiceDownload": "Herunterladen",
74 "settings.account.userInfoRequestFailed": "Benutzerinformationen konnten nicht geladen werden",
75 "settings.account.tryReloadUserInfoRequest": "Erneut versuchen",
76 "settings.account.headlineProfile": "Profil aktualisieren",
77 "settings.account.headlineAccount": "Kontoinformationen",
78 "settings.account.headlinePassword": "Passwort ändern",
79 "settings.account.successInfo": "Deine Änderungen wurden gespeichert.",
80 "settings.account.buttonSave": "Profil aktualisieren",
81 "settings.account.mining.thankyou": "Vielen Dank, dass Du Franz mit Deiner Rechenleistung unterstützt.",
82 "settings.account.mining.active": "Du führst gerade {hashes} Berechnungen pro Sekunde aus.",
83 "settings.account.mining.moreInformation": "Weitere Informationen",
84 "settings.account.mining.cancel": "Mining abbrechen",
85 "settings.navigation.availableServices": "Verfügbare Dienste",
86 "settings.navigation.yourServices": "Deine Dienste",
87 "settings.navigation.account": "Konto",
88 "settings.navigation.settings": "Einstellungen",
89 "settings.navigation.logout": "Abmelden",
90 "settings.recipes.headline": "Verfügbare Dienste",
91 "settings.recipes.mostPopular": "Am beliebtesten",
92 "settings.recipes.all": "Alle Dienste",
93 "settings.recipes.dev": "Entwicklung",
94 "settings.recipes.nothingFound": "Entschuldigung, aber kein Dienst entspricht Deiner Suchanfrage.",
95 "settings.recipes.servicesSuccessfulAddedInfo": "Dienst erfolgreich hinzugefügt",
96 "settings.service.form.saveButton": "Dienst speichern",
97 "settings.service.form.deleteButton": "Dienst entfernen",
98 "settings.service.form.availableServices": "Verfügbare Dienste",
99 "settings.service.form.yourServices": "Deine Dienste",
100 "settings.service.form.addServiceHeadline": "{name} hinzufügen",
101 "settings.service.form.editServiceHeadline": "{name} bearbeiten",
102 "settings.service.form.tabHosted": "Gehostet",
103 "settings.service.form.tabOnPremise": "Selbst gehostet ⭐️",
104 "settings.service.form.customUrlValidationError": "Dein eigener {name} server konnte nicht verifiziert werden.",
105 "settings.service.form.customUrlPremiumInfo": "Um einen selbst gehosteten Dienst hinzuzufügen, brauchst Du ein Franz Premium-Supporter Konto.",
106 "settings.service.form.customUrlUpgradeAccount": "Erweitere Dein Konto",
107 "settings.service.form.indirectMessageInfo": "Du wirst über alle neuen Nachrichten in einem Kanal informiert, nicht nur @username, @channel, @here, ...",
108 "settings.service.error.headline": "Fehler",
109 "settings.service.error.goBack": "Zurück zu den Diensten",
110 "settings.service.error.message": "Das Dienst-Rezept konnte nicht geladen werden.",
111 "settings.services.tooltip.isDisabled": "Dienst deaktiviert",
112 "settings.services.tooltip.notificationsDisabled": "Benachrichtigungen deaktiviert",
113 "settings.services.headline": "Deine Dienste",
114 "settings.services.noServicesAdded": "Du hast noch keine Dienste hinzugefügt.",
115 "settings.services.discoverServices": "Dienste entdecken",
116 "settings.services.updatedInfo": "Deine Änderungen wurden gespeichert.",
117 "settings.services.deletedInfo": "Dienst wurde entfernt",
118 "settings.app.headline": "Einstellungen",
119 "settings.app.headlineGeneral": "Allgemein",
120 "settings.app.headlineLanguage": "Sprache",
121 "settings.app.headlineUpdates": "Aktualisierungen",
122 "settings.app.buttonSearchForUpdate": "Auf Aktualisierungen prüfen",
123 "settings.app.buttonInstallUpdate": "Neustarten & Aktualisierung installieren",
124 "settings.app.updateStatusSearching": "Suche nach Aktualisierungen",
125 "settings.app.updateStatusAvailable": "Aktualisierung verfügbar, herunterladen...",
126 "settings.app.updateStatusUpToDate": "Du nutzt die aktuellste Version von Franz",
127 "settings.app.form.autoLaunchOnStart": "Franz beim Systemstart ausführen",
128 "settings.app.form.autoLaunchInBackground": "Im Hintergrund öffnen",
129 "settings.app.form.minimizeToSystemTray": "Franz in die Taskleiste minimieren",
130 "settings.app.form.runInBackground": "Franz im Hintergrund behalten, wenn das Fenster geschlossen wird",
131 "settings.app.form.language": "Sprache",
132 "settings.app.form.beta": "Beta-Versionen einbeziehen",
133 "settings.app.currentVersion": "Aktuelle Version:",
134 "settings.service.form.name": "Name",
135 "settings.service.form.enableService": "Dienst aktivieren",
136 "settings.service.form.enableNotification": "Benachrichtigungen aktivieren",
137 "settings.service.form.team": "Team",
138 "settings.service.form.customUrl": "Eigener Server",
139 "settings.service.form.indirectMessages": "Nachrichten-Badge für alle neuen Nachrichten anzeigen",
140 "settings.user.form.firstname": "Vorname",
141 "settings.user.form.lastname": "Nachname",
142 "settings.user.form.email": "E-Mail-Adresse",
143 "settings.user.form.currentPassword": "Aktuelles Passwort",
144 "settings.user.form.newPassword": "Neues Passwort",
145 "settings.user.form.accountType.label": "Konto-Typ",
146 "settings.user.form.accountType.individual": "Einzelperson",
147 "settings.user.form.accountType.non-profit": "Gemeinnützig",
148 "settings.user.form.accountType.company": "Unternehmen",
149 "subscription.type.free": "kostenlos",
150 "subscription.type.month": "Monat",
151 "subscription.type.year": "Jahr",
152 "subscription.type.mining": "Unterstütze Franz mit Rechenleistung",
153 "subscription.mining.headline": "Wie funktioniert das?",
154 "subscription.mining.experimental": "experimentell",
155 "subscription.mining.line1": "Durch das Aktivieren von \"Unterstützung mit Rechenleistung\", wird Franz circa 20-50% deines Prozessors nutzen, um die Crypto-Währung Monero zu minen, was ungefähr 5$/Jahr entspricht.",
156 "subscription.mining.line2": "Wir passen die Prozessor-Nutzung an Dein Arbeitsverhalten an, um Deinen Akku nicht unnötig zu belasten oder Dein System zu verlangsamen.",
157 "subscription.mining.line3": "So lange der Miner aktiv ist, hast Du unbegrenzten Zugang auf alle Franz Premium-Supporter Funktionen.",
158 "subscription.mining.moreInformation": "Erhalte mehr Informationen über diesen Plan.",
159 "subscriptionPopup.buttonCancel": "Abbrechen",
160 "subscriptionPopup.buttonDone": "Fertig",
161 "tabs.item.reload": "Neuladen",
162 "tabs.item.edit": "Bearbeiten",
163 "tabs.item.disableNotifications": "Benachrichtigungen deaktivieren",
164 "tabs.item.enableNotification": "Benachrichtigungen aktivieren",
165 "tabs.item.disableService": "Dienst deaktivieren",
166 "tabs.item.deleteService": "Dienst entfernen"
167}
diff --git a/src/i18n/locales/el-GR.json b/src/i18n/locales/el-GR.json
new file mode 100644
index 000000000..dfada77a2
--- /dev/null
+++ b/src/i18n/locales/el-GR.json
@@ -0,0 +1,168 @@
1{
2 "global.api.unhealthy": "Δεν είναι δυνατή η σύνδεση με τις online υπηρεσίες του Franz",
3 "global.notConnectedToTheInternet": "Δεν είστε συνδεδεμένοι στο διαδίκτυο.",
4 "welcome.signupButton": "Δημιουργία δωρεάν λογαριασμού",
5 "welcome.loginButton": "Σύνδεση στο λογαριασμό σας",
6 "welcome.slogan": "Μηνύματα που λειτουργούν για εσάς",
7 "login.headline": "Σύνδεση",
8 "login.email.label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
9 "login.password.label": "Κωδικός πρόσβασης",
10 "login.submit.label": "Σύνδεση",
11 "login.invalidCredentials": "Το email ή ο κωδικός πρόσβασης δεν είναι έγκυρος",
12 "login.tokenExpired": "Η συνεδρία σας έληξε, συνδεθείτε ξανά.",
13 "login.serverLogout": "Η συνεδρία σας έληξε, συνδεθείτε ξανά.",
14 "login.link.signup": "Δημιουργία δωρεάν λογαριασμού",
15 "login.link.password": "Επαναφορά κωδικού πρόσβασης",
16 "password.headline": "Επαναφορά κωδικού πρόσβασης",
17 "password.email.label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
18 "password.submit.label": "Υποβολή",
19 "password.noUser": "Δεν βρέθηκε χρήστης με τη συγκεκριμένη διεύθυνση ηλεκτρονικού ταχυδρομείου",
20 "password.successInfo": "Ελέγξτε το email σας",
21 "password.link.signup": "Δημιουργία δωρεάν λογαριασμού",
22 "password.link.login": "Σύνδεση στο λογαριασμό σας",
23 "signup.headline": "Εγγραφή",
24 "signup.firstname.label": "Όνομα",
25 "signup.lastname.label": "Επίθετο",
26 "signup.email.label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
27 "signup.company.label": "Εταιρεία",
28 "signup.password.label": "Κωδικός πρόσβασης",
29 "signup.submit.label": "Δημιουργία λογαριασμού",
30 "signup.link.login": "Έχετε ήδη λογαριασμό, συνδεθείτε ?",
31 "signup.emailDuplicate": "Ένας χρήστης με τη συγκεκριμένη διεύθυνση ηλεκτρονικού ταχυδρομείου υπάρχει ήδη",
32 "signup.legal.info": "Δημιουργώντας έναν λογαριασμό Franz αποδέχεστε τους",
33 "signup.legal.terms": "Όροι υπηρεσίας",
34 "signup.legal.privacy": "Δήλωση απορρήτου",
35 "pricing.headline": "Υποστήριξη Franz",
36 "pricing.support.label": "Επιλέξτε το πακέτο υποστήριξης",
37 "pricing.submit.label": "Θέλω να βοηθήσω στήν ανάπτυξη του Franz",
38 "pricing.link.skipPayment": "Δεν θέλω να βοηθήσω στήν ανάπτυξη του Franz.",
39 "import.headline": "Εισαγάγετε τις Franz 4 υπηρεσίες σας",
40 "import.notSupportedHeadline": "Υπηρεσίες που δεν υποστηρίζονται ακόμα στο Franz 5",
41 "import.submit.label": "Υπηρεσίες εισαγωγής",
42 "import.skip.label": "Θέλω να προσθέσω υπηρεσίες χειροκίνητα",
43 "invite.submit.label": "Αποστολή προσκλήσεων",
44 "invite.headline.friends": "Προσκαλέστε 3 από τους φίλους ή τους συναδέλφους σας",
45 "invite.name.label": "Όνομα",
46 "invite.email.label": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
47 "invite.skip.label": "Θέλω να το κάνω αργότερα",
48 "subscription.submit.label": "Θέλω να βοηθήσω στήν ανάπτυξη του Franz",
49 "subscription.paymentSessionError": "Δεν ήταν δυνατή η προετοιμασία της φόρμας πληρωμής",
50 "subscription.includedFeatures": "Ο Premium λογαριασμός υποστήριξης Franz περιλαμβάνει",
51 "subscription.features.onpremise": "Add on-premise / hosted services όπως το HipChat",
52 "subscription.features.customServices": "Ιδιωτικές υπηρεσίες για εσάς και την ομάδα σας",
53 "subscription.features.encryptedSync": "Κρυπτογραφημένος συγχρονισμός περιόδου σύνδεσης",
54 "subscription.features.vpn": "Υποστήριξη μεσολαβητή (Proxy) και VPN",
55 "subscription.features.ads": "Τέλος στις διαφημίσεις, :-D",
56 "subscription.features.comingSoon": "σύντομα",
57 "infobar.servicesUpdated": "Οι υπηρεσίες σας έχουν ενημερωθεί.",
58 "infobar.updateAvailable": "Υπάρχει διαθέσιμη μια νέα ενημέρωση για τον Franz.",
59 "infobar.buttonReloadServices": "Υπηρεσίες ανανέωσης",
60 "infobar.buttonInstallUpdate": "Επανεκκίνηση & εγκατάσταση ενημερώσεων",
61 "infobar.requiredRequestsFailed": "Δεν ήταν δυνατή η φόρτωση υπηρεσιών και πληροφοριών χρηστών",
62 "sidebar.settings": "Ρυθμίσεις",
63 "services.welcome": "Καλώς ορίσατε στον Franz",
64 "services.getStarted": "Ξεκινήστε",
65 "settings.account.headline": "Λογαριασμός",
66 "settings.account.headlineSubscription": "Η συνδρομή σας",
67 "settings.account.headlineUpgrade": "Αναβάθμιση του λογαριασμού σας και υποστήριξη Franz",
68 "settings.account.headlineInvoices": "Τιμολόγια",
69 "settings.account.manageSubscription.label": "Διαχείριση της συνδρομής σας",
70 "settings.account.accountType.basic": "Βασικός λογαριασμός",
71 "settings.account.accountType.premium": "Υποστηριζόμενος λογαριασμός Premium",
72 "settings.account.account.editButton": "Επεξεργασία λογαριασμού",
73 "settings.account.invoiceDownload": "Λήψη",
74 "settings.account.userInfoRequestFailed": "Δεν ήταν δυνατή η φόρτωση πληροφοριών χρήστη",
75 "settings.account.tryReloadUserInfoRequest": "Δοκιμάστε ξανά",
76 "settings.account.headlineProfile": "Ενημέρωση προφίλ",
77 "settings.account.headlineAccount": "Πληροφορίες λογαριασμού",
78 "settings.account.headlinePassword": "Αλλαγή κωδικού πρόσβασης",
79 "settings.account.successInfo": "Οι αλλαγές σας έχουν αποθηκευτεί",
80 "settings.account.buttonSave": "Ενημέρωση προφίλ",
81 "settings.account.mining.thankyou": "Σας ευχαριστούμε για την υποστήριξη του Franz με την ισχύ επεξεργασίας σας",
82 "settings.account.mining.active": "Τώρα πραγματοποιείτε υπολογισμούς {hashes} ανά δευτερόλεπτο.",
83 "settings.account.mining.moreInformation": "Λάβετε περισσότερες πληροφορίες",
84 "settings.account.mining.cancel": "Άκυρο εξόρυξη",
85 "settings.navigation.availableServices": "Διαθέσιμες υπηρεσίες",
86 "settings.navigation.yourServices": "Οι υπηρεσίες σας",
87 "settings.navigation.account": "Λογαριασμός",
88 "settings.navigation.settings": "Ρυθμίσεις",
89 "settings.navigation.logout": "Αποσύνδεση",
90 "settings.recipes.headline": "Διαθέσιμες υπηρεσίες",
91 "settings.recipes.mostPopular": "Τα πιο δημοφιλή",
92 "settings.recipes.all": "Όλες οι υπηρεσίες",
93 "settings.recipes.dev": "Ανάπτυξη",
94 "settings.recipes.nothingFound": "Λυπούμαστε αλλά καμία υπηρεσία δεν ταιριάζει με τον όρο αναζήτησης.",
95 "settings.recipes.servicesSuccessfulAddedInfo": "Υπηρεσία προστέθηκε με επιτυχία",
96 "settings.service.form.saveButton": "Αποθήκευση υπηρεσίας",
97 "settings.service.form.deleteButton": "Διαγραφή υπηρεσίας",
98 "settings.service.form.availableServices": "Διαθέσιμες υπηρεσίες",
99 "settings.service.form.yourServices": "Οι υπηρεσίες σας",
100 "settings.service.form.addServiceHeadline": "Προσθήκη {όνομα}",
101 "settings.service.form.editServiceHeadline": "Επεξεργασία {όνομα}",
102 "settings.service.form.tabHosted": "Φιλοξενείται",
103 "settings.service.form.tabOnPremise": "Αυτο-φιλοξενείται ⭐️",
104 "settings.service.form.customUrlValidationError": "Δεν ήταν δυνατή η επικύρωση του προσαρμοσμένου διακομιστή {name}.",
105 "settings.service.form.customUrlPremiumInfo": "Για να προσθέσετε υπηρεσίες που φιλοξενούνται μόνος σας, χρειάζεστε έναν λογαριασμό υποστήριξης Premium Franz.",
106 "settings.service.form.customUrlUpgradeAccount": "Αναβάθμιση του λογαριασμού σας",
107 "settings.service.form.indirectMessageInfo": "Θα ειδοποιηθείτε για όλα τα νέα μηνύματα σε ένα κανάλι, όχι μόνο @username, @channel, @here, ...",
108 "settings.service.error.headline": "Σφάλμα",
109 "settings.service.error.goBack": "Επιστροφή στις υπηρεσίες",
110 "settings.service.error.message": "Δεν ήταν δυνατή η φόρτωση της συνταγής υπηρεσίας.",
111 "settings.services.tooltip.isDisabled": "Η υπηρεσία είναι απενεργοποιημένη",
112 "settings.services.tooltip.notificationsDisabled": "Οι ειδοποιήσεις είναι απενεργοποιημένες",
113 "settings.services.headline": "Οι υπηρεσίες σας",
114 "settings.services.noServicesAdded": "Δεν έχετε προσθέσει ακόμα υπηρεσίες.",
115 "settings.services.discoverServices": "Ανακαλύψτε τις υπηρεσίες",
116 "settings.services.updatedInfo": "Οι αλλαγές σας έχουν αποθηκευτεί",
117 "settings.services.deletedInfo": "Η υπηρεσία έχει διαγραφεί",
118 "settings.app.headline": "Ρυθμίσεις",
119 "settings.app.headlineΓενικά": "Γενικά",
120 "settings.app.headlineLanguage": "Γλώσσα",
121 "settings.app.headlineUpdates": "Ενημερώσεις",
122 "settings.app.buttonSearchForUpdate": "Έλεγχος για ενημερώσεις",
123 "settings.app.buttonInstallUpdate": "Επανεκκίνηση & εγκατάσταση ενημερώσεων",
124 "settings.app.updateStatusSearching": "Ψάχνει για ενημέρωση",
125 "settings.app.updateStatusAvailable": "Διαθέσιμη ενημέρωση, λήψη ...",
126 "settings.app.updateStatusUpToDate": "Χρησιμοποιείτε την τελευταία έκδοση του Franz",
127 "settings.app.form.autoLaunchOnStart": "Εκκίνηση του Franz στην αρχή",
128 "settings.app.form.autoLaunchInBackground": "Άνοιγμα στο παρασκήνιο",
129 "settings.app.form.enableSystemTray": "Εμφάνιση του Franz στο δίσκο συστήματος",
130 "settings.app.form.minimizeToSystemTray": "Ελαχιστοποίηση του Franz στο δίσκο συστήματος",
131 "settings.app.form.runInBackground": "Κρατήστε Franz στο παρασκήνιο κατά το κλείσιμο του παραθύρου",
132 "settings.app.form.language": "Γλώσσα",
133 "settings.app.form.beta": "Συμπεριλάβετε εκδόσεις beta",
134 "settings.app.currentVersion": "Τρέχουσα έκδοση:",
135 "settings.service.form.name": "Όνομα",
136 "settings.service.form.enableService": "Ενεργοποίηση υπηρεσίας",
137 "settings.service.form.enableNotification": "Ενεργοποίηση ειδοποιήσεων",
138 "settings.service.form.team": "Ομάδα",
139 "settings.service.form.customUrl": "Προσαρμοσμένος διακομιστής",
140 "settings.service.form.indirectMessages": "Εμφάνιση ειδοποίησης μηνύματος για όλα τα νέα μηνύματα",
141 "settings.user.form.firstname": "Όνομα",
142 "settings.user.form.lastname": "Επίθετο",
143 "settings.user.form.email": "Email",
144 "settings.user.form.currentPassword": "Τρέχων κωδικός πρόσβασης",
145 "settings.user.form.newPassword": "Νέος κωδικός πρόσβασης",
146 "settings.user.form.accountType.label": "Τύπος λογαριασμού",
147 "settings.user.form.accountType.individual": "Ατομική",
148 "settings.user.form.accountType.non-profit": "Μη κερδοσκοπικό",
149 "settings.user.form.accountType.company": "Εταιρεία",
150 "subscription.type.free": "δωρεάν",
151 "subscription.type.month": "μήνας",
152 "subscription.type.year": "έτος",
153 "subscription.type.mining": "Υποστήριξη Franz με ισχύ CPU",
154 "subscription.mining.headline": "Πώς λειτουργεί αυτό;",
155 "subscription.mining.experimental": "πειραματική",
156 "subscription.mining.line1": "Franz χρησιμοποιεί περίπου το 20-50% της CPU σας για να εξορύξει την κρυπτογράφηση Monero που ισούται περίπου με $ 5 / έτος.",
157 "subscription.mining.line2": "Θα προσαρμόσουμε τη χρήση της CPU με βάση τη συμπεριφορά εργασίας σας ώστε να μην αποστραγγίσουμε την μπαταρία σας και να επιβραδύνουμε εσάς και το μηχάνημά σας.",
158 "subscription.mining.line3": "Εφόσον ο Miner είναι ενεργός, θα έχετε απεριόριστη πρόσβαση σε όλα τα χαρακτηριστικά του Franz Premium Supporter.",
159 "subscription.mining.moreInformation": "Λάβετε περισσότερες πληροφορίες σχετικά με αυτό το πακέτο.",
160 "subscriptionPopup.buttonCancel": "Ακύρωση",
161 "subscriptionPopup.buttonDone": "Έγινε",
162 "tabs.item.reload": "Επαναφόρτωση",
163 "tabs.item.edit": "Επεξεργασία",
164 "tabs.item.disableNotifications": "Απενεργοποίηση ειδοποιήσεων",
165 "tabs.item.enableNotification": "Ενεργοποίηση ειδοποιήσεων",
166 "tabs.item.disableService": "Απενεργοποίηση υπηρεσίας",
167 "tabs.item.deleteService": "Διαγραφή υπηρεσίας"
168}
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 194b8047c..b9ed51b83 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -126,6 +126,7 @@
126 "settings.app.updateStatusUpToDate": "You are using the latest version of Franz", 126 "settings.app.updateStatusUpToDate": "You are using the latest version of Franz",
127 "settings.app.form.autoLaunchOnStart": "Launch Franz on start", 127 "settings.app.form.autoLaunchOnStart": "Launch Franz on start",
128 "settings.app.form.autoLaunchInBackground": "Open in background", 128 "settings.app.form.autoLaunchInBackground": "Open in background",
129 "settings.app.form.enableSystemTray": "Show Franz in system tray",
129 "settings.app.form.minimizeToSystemTray": "Minimize Franz to system tray", 130 "settings.app.form.minimizeToSystemTray": "Minimize Franz to system tray",
130 "settings.app.form.runInBackground": "Keep Franz in background when closing the window", 131 "settings.app.form.runInBackground": "Keep Franz in background when closing the window",
131 "settings.app.form.language": "Language", 132 "settings.app.form.language": "Language",
diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json
new file mode 100644
index 000000000..84cf54492
--- /dev/null
+++ b/src/i18n/locales/fr.json
@@ -0,0 +1,167 @@
1{
2 "global.api.unhealthy": "Impossible de se connecter aux services en ligne de Franz",
3 "global.notConnectedToTheInternet": "Vous n'êtes pas connecté à Internet.",
4 "welcome.signupButton": "Créer un compte gratuitement",
5 "welcome.loginButton": "Connectez-vous à votre compte",
6 "welcome.slogan": "Une messagerie qui fonctionne pour vous",
7 "login.headline": "S'inscrire",
8 "login.email.label": "Adresse e-mail",
9 "login.password.label": "Mot de passe",
10 "login.submit.label": "Se connecter",
11 "login.invalidCredentials": "E-mail ou mot de passe invalide",
12 "login.tokenExpired": "Votre session a expiré, veuillez vous reconnecter.",
13 "login.serverLogout": "Votre session a expiré, veuillez vous reconnecter.",
14 "login.link.signup": "Créer un compte gratuitement",
15 "login.link.password": "Réinitialiser le mot de passe",
16 "password.headline": "Réinitialiser le mot de passe",
17 "password.email.label": "Adresse e-mail",
18 "password.submit.label": "Soumettre",
19 "password.noUser": "Aucun utilisateur avec cette adresse e-mail n'a été trouvé",
20 "password.successInfo": "Merci de consulter vos e-mails",
21 "password.link.signup": "Créer un compte gratuitement",
22 "password.link.login": "Connectez-vous à votre compte",
23 "signup.headline": "S'inscrire",
24 "signup.firstname.label": "Prénom",
25 "signup.lastname.label": "Nom",
26 "signup.email.label": "Adresse e-mail",
27 "signup.company.label": "Compagnie",
28 "signup.password.label": "Mot de passe",
29 "signup.submit.label": "Créer un compte",
30 "signup.link.login": "Vous possédez déjà un compte ? Connectez-vous",
31 "signup.emailDuplicate": "Un utilisateur avec cette adresse e-mail existe déjà",
32 "signup.legal.info": "En créant un compte Franz, vous acceptez les",
33 "signup.legal.terms": "Conditions d'utilisation",
34 "signup.legal.privacy": "Déclaration de confidentialité",
35 "pricing.headline": "Supportez Franz",
36 "pricing.support.label": "Sélectionnez votre plan de soutien",
37 "pricing.submit.label": "Je veux soutenir le développement de Franz",
38 "pricing.link.skipPayment": "Je ne veux pas soutenir le développement de Franz.",
39 "import.headline": "Importez vos services depuis Franz 4",
40 "import.notSupportedHeadline": "Services non supportés actuellement dans Franz 5",
41 "import.submit.label": "Importer des services",
42 "import.skip.label": "Je veux ajouter des services manuellement",
43 "invite.submit.label": "Envoyer des invitations",
44 "invite.headline.friends": "Invitez 3 de vos amis ou collègues",
45 "invite.name.label": "Nom",
46 "invite.email.label": "Adresse e-mail",
47 "invite.skip.label": "Je veux faire cela plus tard",
48 "subscription.submit.label": "Je veux soutenir le développement de Franz",
49 "subscription.paymentSessionError": "Impossible d'initialiser le formulaire de paiement",
50 "subscription.includedFeatures": "Le compte payant Supporter Premium Franz inclut",
51 "subscription.features.onpremise": "Add on-premise/hosted services like HipChat",
52 "subscription.features.customServices": "Des services privés pour vous et votre équipe",
53 "subscription.features.encryptedSync": "Synchronisation de session chiffrée",
54 "subscription.features.vpn": "Support des Proxy et VPN",
55 "subscription.features.ads": "Aucune publicité !",
56 "subscription.features.comingSoon": "arrive bientôt",
57 "infobar.servicesUpdated": "Vos services ont été mis à jour.",
58 "infobar.updateAvailable": "Une nouvelle mise à jour est disponible pour Franz.",
59 "infobar.buttonReloadServices": "Recharger les services",
60 "infobar.buttonInstallUpdate": "Redémarrer et installer la mise à jour",
61 "infobar.requiredRequestsFailed": "Impossible de charger les services et les informations de l'utilisateur",
62 "sidebar.settings": "Paramètres",
63 "services.welcome": "Bienvenue sur Franz",
64 "services.getStarted": "Commencer",
65 "settings.account.headline": "Compte",
66 "settings.account.headlineSubscription": "Votre abonnement",
67 "settings.account.headlineUpgrade": "Améliorez votre compte et supportez Franz",
68 "settings.account.headlineInvoices": "Factures",
69 "settings.account.manageSubscription.label": "Gérer votre abonnement",
70 "settings.account.accountType.basic": "Compte basique",
71 "settings.account.accountType.premium": "Compte Supporter Premium",
72 "settings.account.account.editButton": "Modifier le compte",
73 "settings.account.invoiceDownload": "Télécharger",
74 "settings.account.userInfoRequestFailed": "Impossible de charger les informations de l'utilisateur",
75 "settings.account.tryReloadUserInfoRequest": "Réessayer",
76 "settings.account.headlineProfile": "Mettre à jour le profil",
77 "settings.account.headlineAccount": "Informations de compte",
78 "settings.account.headlinePassword": "Changer le mot de passe",
79 "settings.account.successInfo": "Vos modifications ont été enregistrées",
80 "settings.account.buttonSave": "Mettre à jour le profil",
81 "settings.account.mining.thankyou": "Merci de soutenir Franz avec votre puissance de calcul.",
82 "settings.account.mining.active": "Vous êtes en train d'effectuer {hashes} calculs par seconde.",
83 "settings.account.mining.moreInformation": "Obtenir plus d'informations",
84 "settings.account.mining.cancel": "Annuler le minage",
85 "settings.navigation.availableServices": "Services disponibles",
86 "settings.navigation.yourServices": "Vos services",
87 "settings.navigation.account": "Compte",
88 "settings.navigation.settings": "Paramètres",
89 "settings.navigation.logout": "Se déconnecter",
90 "settings.recipes.headline": "Services disponibles",
91 "settings.recipes.mostPopular": "Les plus populaires",
92 "settings.recipes.all": "Tous les services",
93 "settings.recipes.dev": "Développement",
94 "settings.recipes.nothingFound": "Désolé, aucun service ne correspond à votre recherche.",
95 "settings.recipes.servicesSuccessfulAddedInfo": "Service ajouté avec succès",
96 "settings.service.form.saveButton": "Enregistrer le service",
97 "settings.service.form.deleteButton": "Supprimer le service",
98 "settings.service.form.availableServices": "Services disponibles",
99 "settings.service.form.yourServices": "Vos services",
100 "settings.service.form.addServiceHeadline": "Ajouter {name}",
101 "settings.service.form.editServiceHeadline": "Modifier {name}",
102 "settings.service.form.tabHosted": "Hébergé",
103 "settings.service.form.tabOnPremise": "Auto-hébergé ⭐️",
104 "settings.service.form.customUrlValidationError": "Impossible de valider le {name} personnalisé du serveur.",
105 "settings.service.form.customUrlPremiumInfo": "Pour ajouter des services auto-hébergés, vous avez besoin d'un compte Supporter Premium Franz.",
106 "settings.service.form.customUrlUpgradeAccount": "Améliorez votre compte",
107 "settings.service.form.indirectMessageInfo": "Vous serez averti de tous les nouveaux messages dans un salon, pas seulement @username, @channel, @here, ...",
108 "settings.service.error.headline": "Erreur",
109 "settings.service.error.goBack": "Retour aux services",
110 "settings.service.error.message": "Could not load service recipe.",
111 "settings.services.tooltip.isDisabled": "Le service est désactivé",
112 "settings.services.tooltip.notificationsDisabled": "Les notifications sont désactivées",
113 "settings.services.headline": "Vos services",
114 "settings.services.noServicesAdded": "Vous n'avez pas encore ajouté de services.",
115 "settings.services.discoverServices": "Découvrir des services",
116 "settings.services.updatedInfo": "Vos modifications ont été enregistrées",
117 "settings.services.deletedInfo": "Le service a été supprimé",
118 "settings.app.headline": "Paramètres",
119 "settings.app.headlineGeneral": "Général",
120 "settings.app.headlineLanguage": "Langue",
121 "settings.app.headlineUpdates": "Mises à jour",
122 "settings.app.buttonSearchForUpdate": "Vérifier les mises à jour",
123 "settings.app.buttonInstallUpdate": "Redémarrer et installer la mise à jour",
124 "settings.app.updateStatusSearching": "Recherche des mises à jour",
125 "settings.app.updateStatusAvailable": "Mise à jour disponible, téléchargement...",
126 "settings.app.updateStatusUpToDate": "Vous utilisez la dernière version de Franz",
127 "settings.app.form.autoLaunchOnStart": "Lancer Franz au démarrage",
128 "settings.app.form.autoLaunchInBackground": "Ouvrir en arrière-plan",
129 "settings.app.form.minimizeToSystemTray": "Minimiser Franz dans la zone de notification",
130 "settings.app.form.runInBackground": "Gardez Franz en arrière-plan lors de la fermeture de la fenêtre",
131 "settings.app.form.language": "Langue",
132 "settings.app.form.beta": "Inclure les versions bêta",
133 "settings.app.currentVersion": "Version actuelle :",
134 "settings.service.form.name": "Nom",
135 "settings.service.form.enableService": "Activer le service",
136 "settings.service.form.enableNotification": "Activer les notifications",
137 "settings.service.form.team": "Équipe",
138 "settings.service.form.customUrl": "Serveur personnalisé",
139 "settings.service.form.indirectMessages": "Afficher le badge des messages pour tous les nouveaux messages",
140 "settings.user.form.firstname": "Prénom",
141 "settings.user.form.lastname": "Nom",
142 "settings.user.form.email": "E-mail",
143 "settings.user.form.currentPassword": "Mot de passe actuel",
144 "settings.user.form.newPassword": "Nouveau mot de passe",
145 "settings.user.form.accountType.label": "Type de compte",
146 "settings.user.form.accountType.individual": "Individuel",
147 "settings.user.form.accountType.non-profit": "Non lucratif",
148 "settings.user.form.accountType.company": "Compagnie",
149 "subscription.type.free": "gratuit",
150 "subscription.type.month": "mois",
151 "subscription.type.year": "année",
152 "subscription.type.mining": "Soutenez Franz avec de la puissance de calcul",
153 "subscription.mining.headline": "Comment cela fonctionne-t-il?",
154 "subscription.mining.experimental": "expérimental",
155 "subscription.mining.line1": "En activant \"Soutenez Franz avec de la puissance de calcul\", Franz utilisera environ de 20 à 50% de votre CPU pour miner la crypto-monnaie Monero, ce qui équivaut à environ 5$/an.",
156 "subscription.mining.line2": "Nous adapterons l'utilisation du processeur en fonction de vos habitudes de travail pour ne pas vider votre batterie et ne pas ralentir votre machine.",
157 "subscription.mining.line3": "Tant que le minage est actif, vous aurez un accès illimité à toutes les fonctionnalités Supporter Premium Franz.",
158 "subscription.mining.moreInformation": "Obtenir plus d'informations.",
159 "subscriptionPopup.buttonCancel": "Annuler",
160 "subscriptionPopup.buttonDone": "Terminé",
161 "tabs.item.reload": "Recharger",
162 "tabs.item.edit": "Modifier",
163 "tabs.item.disableNotifications": "Désactiver les notifications",
164 "tabs.item.enableNotification": "Activer les notifications",
165 "tabs.item.disableService": "Désactiver le service",
166 "tabs.item.deleteService": "Supprimer le service"
167}
diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json
new file mode 100644
index 000000000..a283154c9
--- /dev/null
+++ b/src/i18n/locales/ja.json
@@ -0,0 +1,167 @@
1{
2 "global.api.unhealthy": "Franzオンラインサービスに接続できません。",
3 "global.notConnectedToTheInternet": "Internetに接続されていません。",
4 "welcome.signupButton": "無料アカウントを作成",
5 "welcome.loginButton": "アカウントにログイン",
6 "welcome.slogan": "Messaging that works for you",
7 "login.headline": "サインイン",
8 "login.email.label": "メールアドレス",
9 "login.password.label": "パスワード",
10 "login.submit.label": "サインイン",
11 "login.invalidCredentials": "メールアドレスかパスワードに誤りがあります。",
12 "login.tokenExpired": "セッションが切れました。ログインし直して下さい。",
13 "login.serverLogout": "セッションが切れました。ログインし直して下さい。",
14 "login.link.signup": "無料アカウントを作成",
15 "login.link.password": "パスワードをリセット",
16 "password.headline": "パスワードをリセット",
17 "password.email.label": "メールアドレス",
18 "password.submit.label": "送信",
19 "password.noUser": "このメールアドレスは登録されていません",
20 "password.successInfo": "メールを確認して下さい",
21 "password.link.signup": "無料アカウントを作成",
22 "password.link.login": "サインイン",
23 "signup.headline": "アカウントの作成",
24 "signup.firstname.label": "名",
25 "signup.lastname.label": "姓",
26 "signup.email.label": "メールアドレス",
27 "signup.company.label": "会社名",
28 "signup.password.label": "パスワード",
29 "signup.submit.label": "作成する",
30 "signup.link.login": "アカウントを既に持っていますか? こちらからサインイン",
31 "signup.emailDuplicate": "このメールアドレスは既に登録されています",
32 "signup.legal.info": "Franzアカウントを作成することで、以下の規約に同意したものとみなします",
33 "signup.legal.terms": "利用規約",
34 "signup.legal.privacy": "プライバシーについて",
35 "pricing.headline": "Franzを支援する",
36 "pricing.support.label": "プランを選択して下さい",
37 "pricing.submit.label": "Franzの開発を支援したい",
38 "pricing.link.skipPayment": "Franzの開発を支援しない",
39 "import.headline": "Franz 4サービスのインポート",
40 "import.notSupportedHeadline": "サービスの機能はFranz 5ではまだ対応されていません",
41 "import.submit.label": "サービスのインポート",
42 "import.skip.label": "サービスの追加は後で行う",
43 "invite.submit.label": "招待を送る",
44 "invite.headline.friends": "あなたの友人や同僚の方を3名までFranzに招待できます",
45 "invite.name.label": "氏名",
46 "invite.email.label": "メールアドレス",
47 "invite.skip.label": "後にする",
48 "subscription.submit.label": "Franzの開発を支援したい",
49 "subscription.paymentSessionError": "支払いフォームを初期化出来ません",
50 "subscription.includedFeatures": "Franz Premium Supporter有料アカウントには以下が含まれます",
51 "subscription.features.onpremise": "HipChatのようなオンプレミス/ホスト型サービスの追加",
52 "subscription.features.customServices": "あなたとあなたのチームのためのプライベートサービス",
53 "subscription.features.encryptedSync": "暗号化されたセッションの同期",
54 "subscription.features.vpn": "プロキシサーバーとVPNのサポート",
55 "subscription.features.ads": "広告は一切ありません!",
56 "subscription.features.comingSoon": "まもなく登場",
57 "infobar.servicesUpdated": "サービスが更新されました",
58 "infobar.updateAvailable": "Franzの新しい更新があります",
59 "infobar.buttonReloadServices": "Serviceのリロード",
60 "infobar.buttonInstallUpdate": "再起動して更新をインストールする",
61 "infobar.requiredRequestsFailed": "サービスとユーザー情報が読み込めません",
62 "sidebar.settings": "設定",
63 "services.welcome": "Franzにようこそ",
64 "services.getStarted": "はじめる",
65 "settings.account.headline": "アカウント",
66 "settings.account.headlineSubscription": "サブスクリプション内容",
67 "settings.account.headlineUpgrade": "アカウントをアップグレードし、Franzを支援する",
68 "settings.account.headlineInvoices": "Invoices",
69 "settings.account.manageSubscription.label": "サブスクリプションの管理",
70 "settings.account.accountType.basic": "Basicアカウント",
71 "settings.account.accountType.premium": "Premium Supporterアカウント",
72 "settings.account.account.editButton": "アカウントを編集する",
73 "settings.account.invoiceDownload": "ダウンロード",
74 "settings.account.userInfoRequestFailed": "ユーザー情報が読み込めません",
75 "settings.account.tryReloadUserInfoRequest": "リトライ",
76 "settings.account.headlineProfile": "プロフィールを更新する",
77 "settings.account.headlineAccount": "アカウント情報",
78 "settings.account.headlinePassword": "パスワードを変更する",
79 "settings.account.successInfo": "変更内容が保存されました",
80 "settings.account.buttonSave": "プロフィールを更新",
81 "settings.account.mining.thankyou": "お使いのPCの処理能力をFranzの支援に活用して頂き、ありがとうございます。",
82 "settings.account.mining.active": "1秒あたり{hashes}個のハッシュを計算中です。",
83 "settings.account.mining.moreInformation": "詳細を確認する",
84 "settings.account.mining.cancel": "マイニングをキャンセルする",
85 "settings.navigation.availableServices": "利用可能なサービス",
86 "settings.navigation.yourServices": "利用中のサービス",
87 "settings.navigation.account": "アカウント",
88 "settings.navigation.settings": "設定",
89 "settings.navigation.logout": "ログアウト",
90 "settings.recipes.headline": "利用可能なサービス",
91 "settings.recipes.mostPopular": "最も人気",
92 "settings.recipes.all": "全てのサービス",
93 "settings.recipes.dev": "開発版",
94 "settings.recipes.nothingFound": "すみませんが、検索ワードに該当するサービスが見つかりませんでした。",
95 "settings.recipes.servicesSuccessfulAddedInfo": "サービスが追加されました",
96 "settings.service.form.saveButton": "サービスを保存する",
97 "settings.service.form.deleteButton": "サービスを削除する",
98 "settings.service.form.availableServices": "利用可能なサービス",
99 "settings.service.form.yourServices": "利用中のサービス",
100 "settings.service.form.addServiceHeadline": "{name}を追加",
101 "settings.service.form.editServiceHeadline": "{name}を編集",
102 "settings.service.form.tabHosted": "ホスト",
103 "settings.service.form.tabOnPremise": "セルフホスト ⭐️",
104 "settings.service.form.customUrlValidationError": "カスタムサービス{name}を検証できませんでした。",
105 "settings.service.form.customUrlPremiumInfo": "独自サービスを追加するためには、Franz Premium Supporterアカウントが必要です。",
106 "settings.service.form.customUrlUpgradeAccount": "アカウントをアップグレードする",
107 "settings.service.form.indirectMessageInfo": "@username、@channel、@hereだけでなく、チャンネル内のすべての新規メッセージについて通知されます。",
108 "settings.service.error.headline": "エラー",
109 "settings.service.error.goBack": "サービスに戻る",
110 "settings.service.error.message": "サービスのレシピが読み込めません。",
111 "settings.services.tooltip.isDisabled": "サービスが無効です",
112 "settings.services.tooltip.notificationsDisabled": "通知が無効です",
113 "settings.services.headline": "利用中のサービス",
114 "settings.services.noServicesAdded": "まだ、どのサービスも追加されていません。",
115 "settings.services.discoverServices": "サービスを見つける",
116 "settings.services.updatedInfo": "変更内容が保存されました",
117 "settings.services.deletedInfo": "サービスが削除されました",
118 "settings.app.headline": "設定",
119 "settings.app.headlineGeneral": "一般",
120 "settings.app.headlineLanguage": "言語",
121 "settings.app.headlineUpdates": "更新",
122 "settings.app.buttonSearchForUpdate": "更新の確認",
123 "settings.app.buttonInstallUpdate": "再起動して更新をインストール",
124 "settings.app.updateStatusSearching": "更新を確認中",
125 "settings.app.updateStatusAvailable": "更新が見つかりました。ダウンロードしています...",
126 "settings.app.updateStatusUpToDate": "お使いのFranzは最新です",
127 "settings.app.form.autoLaunchOnStart": "システム起動時にFranzを開く",
128 "settings.app.form.autoLaunchInBackground": "バックグラウンドで開く",
129 "settings.app.form.minimizeToSystemTray": "Franzをシステムトレイに最小化する",
130 "settings.app.form.runInBackground": "ウインドウを閉じた際にFranzをバックグラウンドで実行させておく",
131 "settings.app.form.language": "言語",
132 "settings.app.form.beta": "Betaバージョンを含める",
133 "settings.app.currentVersion": "現在のバージョン:",
134 "settings.service.form.name": "サービス名",
135 "settings.service.form.enableService": "サービスを有効にする",
136 "settings.service.form.enableNotification": "通知を有効にする",
137 "settings.service.form.team": "チーム",
138 "settings.service.form.customUrl": "カスタムサーバー",
139 "settings.service.form.indirectMessages": "すべての新規メッセージについてバッジを表示する",
140 "settings.user.form.firstname": "名",
141 "settings.user.form.lastname": "姓",
142 "settings.user.form.email": "メールアドレス",
143 "settings.user.form.currentPassword": "現在のパスワード",
144 "settings.user.form.newPassword": "新しいパスワード",
145 "settings.user.form.accountType.label": "アカウントの種類",
146 "settings.user.form.accountType.individual": "個人",
147 "settings.user.form.accountType.non-profit": "非営利",
148 "settings.user.form.accountType.company": "法人",
149 "subscription.type.free": "無料",
150 "subscription.type.month": "月間",
151 "subscription.type.year": "年間",
152 "subscription.type.mining": "PCの処理能力を使ってFranzを支援する",
153 "subscription.mining.headline": "これはどのように動作しているか",
154 "subscription.mining.experimental": "実験的",
155 "subscription.mining.line1": "\"PCの処理能力を使ってFranzを支援する\"を有効にすることで、Franzはおよそ20-50%のCPUパワーを暗号通貨Moneroのマイニングに使用し、これはおよそ年間で5ドル分にあたります。",
156 "subscription.mining.line2": "処理能力に基づいてCPUの使用率を適応しますのでバッテリーを無駄に消費したり、システムを遅くすることはありません。",
157 "subscription.mining.line3": "マイニングが機能している限り、Franz Premium Supporterの全ての機能を無制限で利用できます。",
158 "subscription.mining.moreInformation": "このプランの詳細を確認する。",
159 "subscriptionPopup.buttonCancel": "キャンセルしました",
160 "subscriptionPopup.buttonDone": "完了しました",
161 "tabs.item.reload": "リロード",
162 "tabs.item.edit": "編集",
163 "tabs.item.disableNotifications": "通知を無効にする",
164 "tabs.item.enableNotification": "通知を有効にする",
165 "tabs.item.disableService": "サービスを無効にする",
166 "tabs.item.deleteService": "サービスを削除する"
167}
diff --git a/src/i18n/locales/nl-BE.json b/src/i18n/locales/nl-BE.json
new file mode 100644
index 000000000..40cc14c50
--- /dev/null
+++ b/src/i18n/locales/nl-BE.json
@@ -0,0 +1,167 @@
1{
2 "global.api.unhealthy": "Kan geen verbinding maken met de Franz online services",
3 "global.notConnectedToTheInternet": "Je bent niet verbonden met het internet.",
4 "welcome.signupButton": "Maak een gratis account aan",
5 "welcome.loginButton": "Inloggen op je account",
6 "welcome.slogan": "Messaging that works for you",
7 "login.headline": "Inloggen",
8 "login.email.label": "E-mailadres",
9 "login.password.label": "Wachtwoord",
10 "login.submit.label": "Log in",
11 "login.invalidCredentials": "E-mailadres of wachtwoord ongeldig",
12 "login.tokenExpired": "Je sessie is verlopen, log opnieuw in a.u.b..",
13 "login.serverLogout": "Je sessie is verlopen, log opnieuw in a.u.b..",
14 "login.link.signup": "Gratis account aanmaken",
15 "login.link.password": "Wachtwoord resetten",
16 "password.headline": "Wachtwoord resetten",
17 "password.email.label": "E-mailadres",
18 "password.submit.label": "Doorgaan",
19 "password.noUser": "Geen gebruiker met dit e-mailadres gevonden",
20 "password.successInfo": "Kijk je mail na",
21 "password.link.signup": "Gratis account aanmaken",
22 "password.link.login": "Inloggen op je account",
23 "signup.headline": "Registreren",
24 "signup.firstname.label": "Naam",
25 "signup.lastname.label": "Achternaam",
26 "signup.email.label": "E-mailadres",
27 "signup.company.label": "Bedrijf",
28 "signup.password.label": "Wachtwoord",
29 "signup.submit.label": "Account aanmaken",
30 "signup.link.login": "Al een account, inloggen?",
31 "signup.emailDuplicate": "Er bestaat reeds een gebruiker met dat e-mailadres",
32 "signup.legal.info": "Door een account aan te maken aanvaard je de",
33 "signup.legal.terms": "Servicevoorwaarden",
34 "signup.legal.privacy": "Privacyverklaring",
35 "pricing.headline": "Franz Steunen",
36 "pricing.support.label": "Selecteer je steunplan",
37 "pricing.submit.label": "Ik wil de ontwikkeling van Franz steunen",
38 "pricing.link.skipPayment": "Ik wil de ontwikkeling van Franz niet steunen.",
39 "import.headline": "Je Franz 4 services importeren",
40 "import.notSupportedHeadline": "Services nog niet ondersteund in Franz 5",
41 "import.submit.label": "Services importeren",
42 "import.skip.label": "Ik wil services handmatig toevoegen",
43 "invite.submit.label": "Uitnodiging sturen",
44 "invite.headline.friends": "3 van je vrienden of collega's uitnodigen",
45 "invite.name.label": "Naam",
46 "invite.email.label": "E-mailadres",
47 "invite.skip.label": "Ik wil dit later doen",
48 "subscription.submit.label": "Ik wil de ontwikkeling van Franz steunen",
49 "subscription.paymentSessionError": "Betalingsformulier kon niet geladen worden",
50 "subscription.includedFeatures": "Een betalend account voor Franz omvat",
51 "subscription.features.onpremise": "Intern gehoste services zoals HipChat",
52 "subscription.features.customServices": "Persoonlijke services voor jou en je team",
53 "subscription.features.encryptedSync": "Synchronisatie van geëncrypteerde sessies",
54 "subscription.features.vpn": "Proxy & VPN ondersteuning",
55 "subscription.features.ads": "Geen reclame, nooit!",
56 "subscription.features.comingSoon": "komt binnenkort",
57 "infobar.servicesUpdated": "Je services zijn geüpdated.",
58 "infobar.updateAvailable": "Er is een nieuwe update van Franz beschikbaar.",
59 "infobar.buttonReloadServices": "Services herladen",
60 "infobar.buttonInstallUpdate": "Herstarten & update installeren",
61 "infobar.requiredRequestsFailed": "Kon services en gebruikersinformatie niet laden",
62 "sidebar.settings": "Instellingen",
63 "services.welcome": "Welkom bij Franz",
64 "services.getStarted": "Begin",
65 "settings.account.headline": "Account",
66 "settings.account.headlineSubscription": "Je abonnement",
67 "settings.account.headlineUpgrade": "Upgrade je account & ondersteun Franz",
68 "settings.account.headlineInvoices": "Facturen",
69 "settings.account.manageSubscription.label": "Je abonnement beheren",
70 "settings.account.accountType.basic": "Basisaccount",
71 "settings.account.accountType.premium": "Premium Supporter Account",
72 "settings.account.account.editButton": "Account aanpassen",
73 "settings.account.invoiceDownload": "Downloaden",
74 "settings.account.userInfoRequestFailed": "Kon de gebruikersinformatie niet laden",
75 "settings.account.tryReloadUserInfoRequest": "Probeer opnieuw",
76 "settings.account.headlineProfile": "Profiel aanpassen",
77 "settings.account.headlineAccount": "Accountinformatie",
78 "settings.account.headlinePassword": "Wachtwoord veranderen",
79 "settings.account.successInfo": "Je wijzigingen werden bewaard",
80 "settings.account.buttonSave": "Profiel aanpassen",
81 "settings.account.mining.thankyou": "Bedankt om Franz te steunen met je rekenkracht.",
82 "settings.account.mining.active": "Op dit moment maak je {hashes} berekeningen per seconde.",
83 "settings.account.mining.moreInformation": "Meer informatie",
84 "settings.account.mining.cancel": "Mijnen annuleren",
85 "settings.navigation.availableServices": "Beschikbare services",
86 "settings.navigation.yourServices": "Jouw services",
87 "settings.navigation.account": "Account",
88 "settings.navigation.settings": "Instellingen",
89 "settings.navigation.logout": "Uitloggen",
90 "settings.recipes.headline": "Beschikbare services",
91 "settings.recipes.mostPopular": "Meest populair",
92 "settings.recipes.all": "Alle services",
93 "settings.recipes.dev": "Ontwikkeling",
94 "settings.recipes.nothingFound": "Sorry, maar geen enkele service kwam overeen met je zoekterm.",
95 "settings.recipes.servicesSuccessfulAddedInfo": "Service succesvol toegevoegd",
96 "settings.service.form.saveButton": "Service bewaren",
97 "settings.service.form.deleteButton": "Service verwijderen",
98 "settings.service.form.availableServices": "Beschikbare services",
99 "settings.service.form.yourServices": "Jouw services",
100 "settings.service.form.addServiceHeadline": "{name} toevoegen",
101 "settings.service.form.editServiceHeadline": "{name} aanpassen",
102 "settings.service.form.tabHosted": "Gehost",
103 "settings.service.form.tabOnPremise": "Intern gehost ⭐️",
104 "settings.service.form.customUrlValidationError": "Kon de custom {name} server niet valideren.",
105 "settings.service.form.customUrlPremiumInfo": "Om intern gehoste services toe te voegen heb je een Franz Premium Supporter Account nodig.",
106 "settings.service.form.customUrlUpgradeAccount": "Je account upgraden",
107 "settings.service.form.indirectMessageInfo": "Je wordt verwittigd over alle nieuwe berichten in een kanaal, niet alleen @username, @channel, @here, ...",
108 "settings.service.error.headline": "Fout",
109 "settings.service.error.goBack": "Terug naar de services",
110 "settings.service.error.message": "Kon het service-recept niet laden.",
111 "settings.services.tooltip.isDisabled": "Service staat uit",
112 "settings.services.tooltip.notificationsDisabled": "Notificaties staan uit",
113 "settings.services.headline": "Jouw services",
114 "settings.services.noServicesAdded": "Je hebt nog geen services toegevoegd.",
115 "settings.services.discoverServices": "Services ontdekken",
116 "settings.services.updatedInfo": "Je veranderingen werden bewaard",
117 "settings.services.deletedInfo": "Service werd verwijderd",
118 "settings.app.headline": "Instellingen",
119 "settings.app.headlineGeneral": "Algemeen",
120 "settings.app.headlineLanguage": "Talen",
121 "settings.app.headlineUpdates": "Updates",
122 "settings.app.buttonSearchForUpdate": "Controleren op updates",
123 "settings.app.buttonInstallUpdate": "Herstart & installeer update",
124 "settings.app.updateStatusSearching": "Zoeken naar updates",
125 "settings.app.updateStatusAvailable": "Update beschikbaar, wordt gedownload...",
126 "settings.app.updateStatusUpToDate": "Je gebruikt de laatste versie van Franz",
127 "settings.app.form.autoLaunchOnStart": "Franz lanceren bij het starten",
128 "settings.app.form.autoLaunchInBackground": "In de achtergrond openen",
129 "settings.app.form.minimizeToSystemTray": "Franz naar je systeemvak minimaliseren",
130 "settings.app.form.runInBackground": "Franz in de achtergrond draaien wanneer je het venster sluit",
131 "settings.app.form.language": "Taal",
132 "settings.app.form.beta": "Ook beta versies",
133 "settings.app.currentVersion": "Huidige versie:",
134 "settings.service.form.name": "Naam",
135 "settings.service.form.enableService": "Service aanzetten",
136 "settings.service.form.enableNotification": "Notificaties aanzetten",
137 "settings.service.form.team": "Team",
138 "settings.service.form.customUrl": "Aangepaste server",
139 "settings.service.form.indirectMessages": "Toon berichten-badge voor alle nieuwe berichten",
140 "settings.user.form.firstname": "Naam",
141 "settings.user.form.lastname": "Achternaam",
142 "settings.user.form.email": "Email",
143 "settings.user.form.currentPassword": "Huidig wachtwoord",
144 "settings.user.form.newPassword": "Nieuw wachtwoord",
145 "settings.user.form.accountType.label": "Account type",
146 "settings.user.form.accountType.individual": "Particulier",
147 "settings.user.form.accountType.non-profit": "Non-Profit",
148 "settings.user.form.accountType.company": "Bedrijf",
149 "subscription.type.free": "gratis",
150 "subscription.type.month": "maand",
151 "subscription.type.year": "jaar",
152 "subscription.type.mining": "Franz ondersteunen met rekenkracht",
153 "subscription.mining.headline": "Hoe werkt dit?",
154 "subscription.mining.experimental": "experimenteel",
155 "subscription.mining.line1": "Door \"Ondersteunen met rekenkracht\" aan te zetten zal Franz ongeveer 20-50% van je CPU gebruiken om Monero cryptocurrency te minen, wat ongeveer op €4,3/jaar neerkomt.",
156 "subscription.mining.line2": "Het CPU gebruik zal aangepast worden aan je werkgedrag zodat we je batterij niet leeg laten lopen of jou en je machine vertragen.",
157 "subscription.mining.line3": "Zolang de miner actief is heb je ongelimiteerde toegang tot alle Franz Premium Supporter Features.",
158 "subscription.mining.moreInformation": "Meer informatie over dit plan.",
159 "subscriptionPopup.buttonCancel": "Annuleren",
160 "subscriptionPopup.buttonDone": "Klaar",
161 "tabs.item.reload": "Herladen",
162 "tabs.item.edit": "Aanpassen",
163 "tabs.item.disableNotifications": "Notificaties uitschakelen",
164 "tabs.item.enableNotification": "Notificaties inschakelen",
165 "tabs.item.disableService": "Service uitschakelen",
166 "tabs.item.deleteService": "Service verwijderen"
167}
diff --git a/src/i18n/locales/nl.json b/src/i18n/locales/nl.json
new file mode 100644
index 000000000..159d1f328
--- /dev/null
+++ b/src/i18n/locales/nl.json
@@ -0,0 +1,168 @@
1{
2 "global.api.unhealthy": "Kan niet verbinden met Franz online services",
3 "global.notConnectedToTheInternet": "Je bent niet verbonden met het internet.",
4 "welcome.signupButton": "Maak een gratis account",
5 "welcome.loginButton": "Log in op je account",
6 "welcome.slogan": "Messaging dat voor jou werkt",
7 "login.headline": "Inloggen",
8 "login.email.label": "E-mailadres",
9 "login.password.label": "Wachtwoord",
10 "login.submit.label": "Inloggen",
11 "login.invalidCredentials": "E-mailadres of wachtwoord ongeldig",
12 "login.tokenExpired": "De sessie is verlopen, log opnieuw in alsjeblieft.",
13 "login.serverLogout": "De sessie is verlopen, log opnieuw in alsjeblieft..",
14 "login.link.signup": "Maak een gratis account",
15 "login.link.password": "Wachtwoord vergeten",
16 "password.headline": "Wachtwoord vergeten",
17 "password.email.label": "E-mailadres",
18 "password.submit.label": "Verzenden",
19 "password.noUser": "Geen gebruiker bekend met dat e-mailadres",
20 "password.successInfo": "Controleer alsjeblieft je e-mail",
21 "password.link.signup": "Maak een nieuw account aan",
22 "password.link.login": "Log in op je account",
23 "signup.headline": "Aanmelden",
24 "signup.firstname.label": "Voornaam",
25 "signup.lastname.label": "Achternaam",
26 "signup.email.label": "E-mailadres",
27 "signup.company.label": "Bedrijf",
28 "signup.password.label": "Wachtwoord",
29 "signup.submit.label": "Maak account aan",
30 "signup.link.login": "Al een account? Log in!",
31 "signup.emailDuplicate": "Er bestaat al een gebruiker met dat e-mailadres",
32 "signup.legal.info": "Door een Franz account aan te maken ga je akkoord met de",
33 "signup.legal.terms": "Gebruiksvoorwaarden",
34 "signup.legal.privacy": "Privacy Voorwaarden",
35 "pricing.headline": "Ondersteun Franz",
36 "pricing.support.label": "Selecteer je ondersteuningsplan",
37 "pricing.submit.label": "Ik wil de ontwikkeling van Franz ondersteunen",
38 "pricing.link.skipPayment": "Ik wil de ontwikkeling van Franz niet ondersteunen.",
39 "import.headline": "Importeer je Franz 4 services",
40 "import.notSupportedHeadline": "Services nog niet ondersteund in Franz 5",
41 "import.submit.label": "Importeer services",
42 "import.skip.label": "Ik wil services handmatig toevoegen",
43 "invite.submit.label": "Verzend uitnodigingen",
44 "invite.headline.friends": "Nodig 3 van je vrienden of collega's uit",
45 "invite.name.label": "Naam",
46 "invite.email.label": "E-mailadres",
47 "invite.skip.label": "Ik wil dit later doen",
48 "subscription.submit.label": "Ik wil de ontwikkeling van Franz ondersteunen",
49 "subscription.paymentSessionError": "Kan betaalformulier niet initialiseren",
50 "subscription.includedFeatures": "Betaald Franz Premium Supporter Account bevat",
51 "subscription.features.onpremise": "Add on-geschikt/gehoste services zoals HipChat",
52 "subscription.features.customServices": "Privé services voor jou en je team",
53 "subscription.features.encryptedSync": "Beveiligde sessie synchronisatie",
54 "subscription.features.vpn": "Proxy & VPN ondersteuning",
55 "subscription.features.ads": "Geen advertenties, nooit!",
56 "subscription.features.comingSoon": "komt binnenkort",
57 "infobar.servicesUpdated": "Je services zijn geüpdatet.",
58 "infobar.updateAvailable": "Een nieuwe update voor Franz is beschikbaar.",
59 "infobar.buttonReloadServices": "Herlaad services",
60 "infobar.buttonInstallUpdate": "Herstart & installeer update",
61 "infobar.requiredRequestsFailed": "Kon services en gebruikerinformatie niet laden",
62 "sidebar.settings": "Instellingen",
63 "services.welcome": "Welkom bij Franz",
64 "services.getStarted": "Beginnen",
65 "settings.account.headline": "Account",
66 "settings.account.headlineSubscription": "Je abonnement",
67 "settings.account.headlineUpgrade": "Upgrade je account & ondersteun Franz",
68 "settings.account.headlineInvoices": "Facturen",
69 "settings.account.manageSubscription.label": "Beheer je abonnement",
70 "settings.account.accountType.basic": "Basis Account",
71 "settings.account.accountType.premium": "Premium Supporter Account",
72 "settings.account.account.editButton": "Bewerk account",
73 "settings.account.invoiceDownload": "Download",
74 "settings.account.userInfoRequestFailed": "Kon gebruikerinformatie niet laden",
75 "settings.account.tryReloadUserInfoRequest": "Probeer opnieuw",
76 "settings.account.headlineProfile": "Update profiel",
77 "settings.account.headlineAccount": "Account informatie",
78 "settings.account.headlinePassword": "Wijzig wachtwoord",
79 "settings.account.successInfo": "Je wijzigingen zijn opgeslagen",
80 "settings.account.buttonSave": "Update profiel",
81 "settings.account.mining.thankyou": "Bedankt voor je ondersteuning van Franz met je rekenkracht.",
82 "settings.account.mining.active": "Op dit moment voer je {hashes} berekingen per seconde uit.",
83 "settings.account.mining.moreInformation": "Meer informatie",
84 "settings.account.mining.cancel": "Stop mining",
85 "settings.navigation.availableServices": "Beschikbare services",
86 "settings.navigation.yourServices": "Jouw services",
87 "settings.navigation.account": "Account",
88 "settings.navigation.settings": "Instellingen",
89 "settings.navigation.logout": "Uitloggen",
90 "settings.recipes.headline": "Beschikbare services",
91 "settings.recipes.mostPopular": "Meest populair",
92 "settings.recipes.all": "Alle services",
93 "settings.recipes.dev": "Ontwikkeling",
94 "settings.recipes.nothingFound": "Geen service kwam overeen met je zoekopdracht.",
95 "settings.recipes.servicesSuccessfulAddedInfo": "Service succesvol toegevoegd",
96 "settings.service.form.saveButton": "Opslaan service",
97 "settings.service.form.deleteButton": "Verwijder service",
98 "settings.service.form.availableServices": "Beschikbare services",
99 "settings.service.form.yourServices": "Jouw services",
100 "settings.service.form.addServiceHeadline": "Toevoegen {name}",
101 "settings.service.form.editServiceHeadline": "Bewerk {name}",
102 "settings.service.form.tabHosted": "Gehost",
103 "settings.service.form.tabOnPremise": "Zelf-gehoste ??",
104 "settings.service.form.customUrlValidationError": "Kon custom server {name} niet valideren.",
105 "settings.service.form.customUrlPremiumInfo": "Om zelf-gehoste services toe te kunnen voegen, heb je een Franz Premium Supporter Account nodig.",
106 "settings.service.form.customUrlUpgradeAccount": "Upgrade je account",
107 "settings.service.form.indirectMessageInfo": "Je ontvangt meldingen van alle nieuwe berichten in een kanaal, niet alleen @username, @channel, @here, ...",
108 "settings.service.error.headline": "Fout",
109 "settings.service.error.goBack": "Terug naar services",
110 "settings.service.error.message": "Kon servicerecept niet laden.",
111 "settings.services.tooltip.isDisabled": "Service is uitgeschakeld",
112 "settings.services.tooltip.notificationsDisabled": "Meldingen zijn uitgeschakeld",
113 "settings.services.headline": "Jouw services",
114 "settings.services.noServicesAdded": "Je hebt nog geen services toegevoegd.",
115 "settings.services.discoverServices": "Ontdek services",
116 "settings.services.updatedInfo": "Je wijzigingen zijn opgeslagen",
117 "settings.services.deletedInfo": "Service is verwijderd",
118 "settings.app.headline": "Instellingen",
119 "settings.app.headlineGeneral": "Algemeen",
120 "settings.app.headlineLanguage": "Taal",
121 "settings.app.headlineUpdates": "Updates",
122 "settings.app.buttonSearchForUpdate": "Controleer op updates",
123 "settings.app.buttonInstallUpdate": "Herstart & installeer update",
124 "settings.app.updateStatusSearching": "Zoekt naar updates",
125 "settings.app.updateStatusAvailable": "Update beschikbaar, downloaden...",
126 "settings.app.updateStatusUpToDate": "Je gebruikt de laatste versie van Franz",
127 "settings.app.form.autoLaunchOnStart": "Lanceer Franz bij opstarten",
128 "settings.app.form.autoLaunchInBackground": "Open op de achtergrond",
129 "settings.app.form.enableSystemTray": "Toon Franz in de systeembalk",
130 "settings.app.form.minimizeToSystemTray": "Minimaliseer Franz naar de systeembal",
131 "settings.app.form.runInBackground": "Houd Franz op de achtergrond wanneer het venster gesloten wordt",
132 "settings.app.form.language": "Taal",
133 "settings.app.form.beta": "Inclusief beta versies",
134 "settings.app.currentVersion": "Huidige versie:",
135 "settings.service.form.name": "Naam",
136 "settings.service.form.enableService": "Activeer service",
137 "settings.service.form.enableNotification": "Activeer meldingen",
138 "settings.service.form.team": "Team",
139 "settings.service.form.customUrl": "Custom server",
140 "settings.service.form.indirectMessages": "Toon berichtenbadge voor alle nieuwe berichten",
141 "settings.user.form.firstname": "Voornaam",
142 "settings.user.form.lastname": "Achternaam",
143 "settings.user.form.email": "E-mailadres",
144 "settings.user.form.currentPassword": "Huidig wachtwoord",
145 "settings.user.form.newPassword": "Nieuw wachtwoord",
146 "settings.user.form.accountType.label": "Account type",
147 "settings.user.form.accountType.individual": "Individueel",
148 "settings.user.form.accountType.non-profit": "Non-Profit",
149 "settings.user.form.accountType.company": "Bedrijf",
150 "subscription.type.free": "gratis",
151 "subscription.type.month": "maand",
152 "subscription.type.year": "jaar",
153 "subscription.type.mining": "Ondersteun Franz met rekenkracht",
154 "subscription.mining.headline": "Hoe werkt dit?",
155 "subscription.mining.experimental": "experimenteel",
156 "subscription.mining.line1": "Door \"Ondersteun met rekenkracht\" te activeren, zal Franz ongeveer 20-50% van je CPU gebruiken om de cryptomunt Monero te minen, wat overeenkomt met ongeveer $ 5/jaar.",
157 "subscription.mining.line2": "We zullen het CPU-gebruik aanpassen aan je gebruik en daarmee voorkomen dat de batterij niet leegloopt of dat jij en je werk afgeremd wordt.",
158 "subscription.mining.line3": "Zolang de miner actief is, heb je onbeperkt toegang tot alle Franz Premium Supporter Features.",
159 "subscription.mining.moreInformation": "Verkrijg meer informatie over dit plan.",
160 "subscriptionPopup.buttonCancel": "Cancel",
161 "subscriptionPopup.buttonDone": "Klaar",
162 "tabs.item.reload": "Herlaad",
163 "tabs.item.edit": "Bewerk",
164 "tabs.item.disableNotifications": "Uitschakelen meldingen",
165 "tabs.item.enableNotification": "Inschakelen meldingen",
166 "tabs.item.disableService": "Uitschakelen service",
167 "tabs.item.deleteService": "Verwijderen service"
168}
diff --git a/src/i18n/locales/pl.json b/src/i18n/locales/pl.json
new file mode 100644
index 000000000..1a8e9ad54
--- /dev/null
+++ b/src/i18n/locales/pl.json
@@ -0,0 +1,167 @@
1{
2 "global.api.unhealthy": "Nie można połączyć się z usługą Franz",
3 "global.notConnectedToTheInternet": "Brak połączenia z Internetem.",
4 "welcome.signupButton": "Stwórz darmowe konto",
5 "welcome.loginButton": "Zaloguj się na swoje konto",
6 "welcome.slogan": "Komunikator który działa",
7 "login.headline": "Zaloguj się",
8 "login.email.label": "Adres email",
9 "login.password.label": "Hasło",
10 "login.submit.label": "Zaloguj się",
11 "login.invalidCredentials": "Adres email lub hasło są błędne",
12 "login.tokenExpired": "Twoja sesja wygasła, zaloguj się ponownie.",
13 "login.serverLogout": "Twoja sesja wygasła, zaloguj się ponownie.",
14 "login.link.signup": "Stwórz darmowe konto",
15 "login.link.password": "Zresetuj hasło",
16 "password.headline": "Zresetuj hasło",
17 "password.email.label": "Adres email",
18 "password.submit.label": "Wyślij",
19 "password.noUser": "Nie znaleziono użytkownika z takim adresem email",
20 "password.successInfo": "Sprawdź swoją skrzynkę email",
21 "password.link.signup": "Stwórz darmowe konto",
22 "password.link.login": "Zaloguj się na swoje konto",
23 "signup.headline": "Zarejestruj się",
24 "signup.firstname.label": "Imię",
25 "signup.lastname.label": "Nazwisko",
26 "signup.email.label": "Adres email",
27 "signup.company.label": "Firma",
28 "signup.password.label": "Hasło",
29 "signup.submit.label": "Stwórz konto",
30 "signup.link.login": "Masz już konto, zalogować się?",
31 "signup.emailDuplicate": "Użytkownik z takim adresem email już istnieje",
32 "signup.legal.info": "Poprzez utworzenie konta Franz akceptujesz",
33 "signup.legal.terms": "Warunki świadczenia usług",
34 "signup.legal.privacy": "Polityka prywatności",
35 "pricing.headline": "Wspomóż aplikację Franz",
36 "pricing.support.label": "Wybierz plan wsparcia",
37 "pricing.submit.label": "Chcę wspierać rozwój aplikacji Franz",
38 "pricing.link.skipPayment": "Nie chcę wspierać rozwoju aplikacji Franz.",
39 "import.headline": "Zaimportuj usługi Franz 4",
40 "import.notSupportedHeadline": "Usługi nie są jeszcze wspierane w Franz 5",
41 "import.submit.label": "Zaimportuj usługi",
42 "import.skip.label": "Chcę dodać usługi ręcznie",
43 "invite.submit.label": "Wyślij zaproszenia",
44 "invite.headline.friends": "Zaproś 3 znajomych lub kolegów z pracy",
45 "invite.name.label": "Nazwa",
46 "invite.email.label": "Adres email",
47 "invite.skip.label": "Chcę to zrobić później",
48 "subscription.submit.label": "Chcę wspierać rozwój aplikacji Franz",
49 "subscription.paymentSessionError": "Nie można wczytać formularza płatności",
50 "subscription.includedFeatures": "Płatne konto Franz Premium obejmuje",
51 "subscription.features.onpremise": "Dodawanie lokalnych/hostowanych usług takich jak HipChat",
52 "subscription.features.customServices": "Prywatne usługi dla Ciebie i Twojego zespołu",
53 "subscription.features.encryptedSync": "Szyfrowana synchronizacja sesji",
54 "subscription.features.vpn": "Wsprarcie Proxy i VPN",
55 "subscription.features.ads": "Brak reklam, na zawsze!",
56 "subscription.features.comingSoon": "wkrótce dostępne",
57 "infobar.servicesUpdated": "Twoje usługi zostały zaaktualizowane.",
58 "infobar.updateAvailable": "Aktualizacja aplikacji Franz jest dostępna.",
59 "infobar.buttonReloadServices": "Przeładuj usługi",
60 "infobar.buttonInstallUpdate": "Uruchom ponownie i zainstaluj aktualizacje",
61 "infobar.requiredRequestsFailed": "Nie można wczytać usług i informacji o użytkowniku",
62 "sidebar.settings": "Ustawienia",
63 "services.welcome": "Witaj w aplikcji Franz",
64 "services.getStarted": "Zacznij",
65 "settings.account.headline": "Konto",
66 "settings.account.headlineSubscription": "Twoja subskrypcja",
67 "settings.account.headlineUpgrade": "Ulepsz swoje konto i wspieraj aplikację Franz",
68 "settings.account.headlineInvoices": "Faktury",
69 "settings.account.manageSubscription.label": "Zarządzaj swoimi subskrypcjami",
70 "settings.account.accountType.basic": "Podstawowe konto",
71 "settings.account.accountType.premium": "Konto Premium",
72 "settings.account.account.editButton": "Edytuj konto",
73 "settings.account.invoiceDownload": "Pobieranie",
74 "settings.account.userInfoRequestFailed": "Nie można wczytać informacji o użytkowniku",
75 "settings.account.tryReloadUserInfoRequest": "Spróbuj ponownie",
76 "settings.account.headlineProfile": "Aktualizuj profil",
77 "settings.account.headlineAccount": "Informacje o koncie",
78 "settings.account.headlinePassword": "Zmiana hasła",
79 "settings.account.successInfo": "Zmiany zostały zapisane",
80 "settings.account.buttonSave": "Aktualizuj profil",
81 "settings.account.mining.thankyou": "Dziękuję za wsparcie aplikacji Franz mocą obliczeniową.",
82 "settings.account.mining.active": "Obecnie wykonujesz {hashes} operacji na sekundę.",
83 "settings.account.mining.moreInformation": "Dowiedz się więcej",
84 "settings.account.mining.cancel": "Anuluj kopanie",
85 "settings.navigation.availableServices": "Dostępne usługi",
86 "settings.navigation.yourServices": "Twoje usługi",
87 "settings.navigation.account": "Konto",
88 "settings.navigation.settings": "Ustawienia",
89 "settings.navigation.logout": "Wylogowanie",
90 "settings.recipes.headline": "Dostępne usługi",
91 "settings.recipes.mostPopular": "Najpopularniejsze",
92 "settings.recipes.all": "Wszystkie usługi",
93 "settings.recipes.dev": "Rozwojowe",
94 "settings.recipes.nothingFound": "Żadna usługa nie została znaleziona.",
95 "settings.recipes.servicesSuccessfulAddedInfo": "Usługa została dodana pomyślnie",
96 "settings.service.form.saveButton": "Zapisz usługę",
97 "settings.service.form.deleteButton": "Usuń usługę",
98 "settings.service.form.availableServices": "Dostępne usługi",
99 "settings.service.form.yourServices": "Twoje usługi",
100 "settings.service.form.addServiceHeadline": "Dodaj {name}",
101 "settings.service.form.editServiceHeadline": "Edytuj {name}",
102 "settings.service.form.tabHosted": "Hostowane",
103 "settings.service.form.tabOnPremise": "Hostowane lokalnie ⭐️",
104 "settings.service.form.customUrlValidationError": "Nie można zweryfikować spersonalizowanego {name} serwera.",
105 "settings.service.form.customUrlPremiumInfo": "Aby dodać usługi hostowane lokalnie, musisz posiadać konto Premium.",
106 "settings.service.form.customUrlUpgradeAccount": "Ulepsz swoje konto",
107 "settings.service.form.indirectMessageInfo": "Będziesz informowany o wszystkich nowych wiadomościach na kanale, nie tylko @username, @channel, @here, ...",
108 "settings.service.error.headline": "Błąd",
109 "settings.service.error.goBack": "Wróć do usług",
110 "settings.service.error.message": "Nie można wczytać przepisu usługi.",
111 "settings.services.tooltip.isDisabled": "Usługa jest nieaktywna",
112 "settings.services.tooltip.notificationsDisabled": "Powiadomienia są nieaktywne",
113 "settings.services.headline": "Twoje usługi",
114 "settings.services.noServicesAdded": "Nie dodałeś jeszcze żadnych usług.",
115 "settings.services.discoverServices": "Przeglądaj usługi",
116 "settings.services.updatedInfo": "Zmiany zostały zapisane",
117 "settings.services.deletedInfo": "Usługa została usunięta",
118 "settings.app.headline": "Ustawienia",
119 "settings.app.headlineGeneral": "Ogólne",
120 "settings.app.headlineLanguage": "Język",
121 "settings.app.headlineUpdates": "Aktualizacje",
122 "settings.app.buttonSearchForUpdate": "Sprawdź czy są dostęne aktualizacje",
123 "settings.app.buttonInstallUpdate": "Uruchom ponownie i zainstaluj aktualizacje",
124 "settings.app.updateStatusSearching": "Szukam aktualizacji",
125 "settings.app.updateStatusAvailable": "Dostępna aktualizacja, pobieram...",
126 "settings.app.updateStatusUpToDate": "Używasz najnowszej wersji aplikacji Franz",
127 "settings.app.form.autoLaunchOnStart": "Uruchom aplikację Franz przy starcie systemu",
128 "settings.app.form.autoLaunchInBackground": "Uruchom w tle",
129 "settings.app.form.minimizeToSystemTray": "Zminimalizuj aplikację Franz",
130 "settings.app.form.runInBackground": "Zachowaj aplikację Franz w tle po zamknięciu okna",
131 "settings.app.form.language": "Język",
132 "settings.app.form.beta": "Uwzględniaj wersje beta",
133 "settings.app.currentVersion": "Obecna wersja:",
134 "settings.service.form.name": "Nazwa",
135 "settings.service.form.enableService": "Aktywuj usługę",
136 "settings.service.form.enableNotification": "Aktywuj powiadomienia",
137 "settings.service.form.team": "Zespół",
138 "settings.service.form.customUrl": "Spersonalizowany serwer",
139 "settings.service.form.indirectMessages": "Pokaż ikonę wiadomości dla wszystkich nowych wiadomości",
140 "settings.user.form.firstname": "Imię",
141 "settings.user.form.lastname": "Nazwisko",
142 "settings.user.form.email": "Adres email",
143 "settings.user.form.currentPassword": "Obecne hasło",
144 "settings.user.form.newPassword": "Nowe hasło",
145 "settings.user.form.accountType.label": "Typ konta",
146 "settings.user.form.accountType.individual": "Prywatne",
147 "settings.user.form.accountType.non-profit": "Non-Profit",
148 "settings.user.form.accountType.company": "Firma",
149 "subscription.type.free": "za darmo",
150 "subscription.type.month": "miesiąc",
151 "subscription.type.year": "rok",
152 "subscription.type.mining": "Wspieraj aplikację Franz mocą obliczeniową",
153 "subscription.mining.headline": "Jak to działa?",
154 "subscription.mining.experimental": "eksperymentalne",
155 "subscription.mining.line1": "Włączając \"wspieraj mocą obliczeniową\", aplikacja Franz będzie używać około 20-50% mocy Twojego procesora aby kopać kryptowalutę Monero co jest równe około $5/rok.",
156 "subscription.mining.line2": "Będziemy dostosowywać zużycie procesora do stylu Twojej pracy tak aby nie zużywać baterii i nie spowalniać działania urządzenia.",
157 "subscription.mining.line3": "Tak długo jak kopanie będzie aktywne, będziesz mieć nielimitowany dostęp do wszystkich funkcji dostępnych w koncie Premium.",
158 "subscription.mining.moreInformation": "Dowiedz się więcej o tym planie.",
159 "subscriptionPopup.buttonCancel": "Anuluj",
160 "subscriptionPopup.buttonDone": "Zrobione",
161 "tabs.item.reload": "Przeładuj",
162 "tabs.item.edit": "Edytuj",
163 "tabs.item.disableNotifications": "Wyłącz powiadomienia",
164 "tabs.item.enableNotification": "Włącz powiadomienia",
165 "tabs.item.disableService": "Wyłącz usługę",
166 "tabs.item.deleteService": "Usuń usługę"
167}
diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json
new file mode 100644
index 000000000..38f0836a7
--- /dev/null
+++ b/src/i18n/locales/pt-BR.json
@@ -0,0 +1,167 @@
1{
2 "global.api.unhealthy": "Não foi possível conectar aos serviços online do Franz",
3 "global.notConnectedToTheInternet": "Você não está conectado à internet.",
4 "welcome.signupButton": "Criar uma conta grátis",
5 "welcome.loginButton": "Fazer login na sua conta",
6 "welcome.slogan": "Mensagens que funcionam para você",
7 "login.headline": "Login",
8 "login.email.label": "Endereço de email",
9 "login.password.label": "Senha",
10 "login.submit.label": "Login",
11 "login.invalidCredentials": "Email ou senha inválida",
12 "login.tokenExpired": "Sua sessão expirou, faça o login novamente.",
13 "login.serverLogout": "Sua sessão expirou, faça o login novamente.",
14 "login.link.signup": "Criar uma conta grátis",
15 "login.link.password": "Trocar a senha",
16 "password.headline": "Trocar a senha",
17 "password.email.label": "Endereço de email",
18 "password.submit.label": "Enviar",
19 "password.noUser": "Nenhum usuário com este email foi encontrado",
20 "password.successInfo": "Por favor, verifique o seu email",
21 "password.link.signup": "Criar uma conta grátis",
22 "password.link.login": "Fazer login na sua conta",
23 "signup.headline": "Cadastrar-se",
24 "signup.firstname.label": "Nome",
25 "signup.lastname.label": "Sobrenome",
26 "signup.email.label": "Endereço de email",
27 "signup.company.label": "Empresa",
28 "signup.password.label": "Senha",
29 "signup.submit.label": "Criar conta",
30 "signup.link.login": "Já tem uma conta. Fazer login?",
31 "signup.emailDuplicate": "Um usuário com esta conta já existe",
32 "signup.legal.info": "Ao criar uma conta Franz você aceita os ",
33 "signup.legal.terms": "Termos de Serviço",
34 "signup.legal.privacy": "Declaração de Privacidade",
35 "pricing.headline": "Apoie o Franz",
36 "pricing.support.label": "Selecione seu plano de apoio",
37 "pricing.submit.label": "Eu quero apoiar o desenvolvimento do Franz",
38 "pricing.link.skipPayment": "Eu não quero apoiar o desenvolvimento do Franz.",
39 "import.headline": "Importe seus serviços do Franz 4",
40 "import.notSupportedHeadline": "Serviços ainda não suportados no Franz 5",
41 "import.submit.label": "Importar serviços",
42 "import.skip.label": "Eu quero adicionar serviços manualmente",
43 "invite.submit.label": "Enviar convites",
44 "invite.headline.friends": "Convide 3 dos seus amigos ou colegas",
45 "invite.name.label": "Nome",
46 "invite.email.label": "Endereço de email",
47 "invite.skip.label": "Eu quero fazer isso depois",
48 "subscription.submit.label": "Eu quero apoiar o desenvolvimento do Franz",
49 "subscription.paymentSessionError": "Não foi possível abrir o formulário de pagamento",
50 "subscription.includedFeatures": "Conta Paga Franz Premium inclui",
51 "subscription.features.onpremise": "Adicionar serviços locais/hospedados como HipChat",
52 "subscription.features.customServices": "Serviços privados para você e sua equipe",
53 "subscription.features.encryptedSync": "Sincronização encriptada das sessões",
54 "subscription.features.vpn": "Suporte à proxy & VPN",
55 "subscription.features.ads": "Sem anúncios, sempre!",
56 "subscription.features.comingSoon": "em breve",
57 "infobar.servicesUpdated": "Seus serviços foram atualizados.",
58 "infobar.updateAvailable": "Uma nova atualização do Franz está disponível.",
59 "infobar.buttonReloadServices": "Recarregar serviços",
60 "infobar.buttonInstallUpdate": "Reiniciar & instalar atualização",
61 "infobar.requiredRequestsFailed": "Não foi possível carregar serviços e informações do usuário",
62 "sidebar.settings": "Configurações",
63 "services.welcome": "Bem-vindo ao Franz",
64 "services.getStarted": "Começar",
65 "settings.account.headline": "Conta",
66 "settings.account.headlineSubscription": "Sua assinatura",
67 "settings.account.headlineUpgrade": "Atualize a sua conta & apoie o Franz",
68 "settings.account.headlineInvoices": "Recibos",
69 "settings.account.manageSubscription.label": "Gerencie a sua assinatura",
70 "settings.account.accountType.basic": "Conta Básica",
71 "settings.account.accountType.premium": "Conta Apoiador Premium",
72 "settings.account.account.editButton": "Editar conta",
73 "settings.account.invoiceDownload": "Download",
74 "settings.account.userInfoRequestFailed": "Não foi possível carregar as informações do usuário",
75 "settings.account.tryReloadUserInfoRequest": "Tente novamente",
76 "settings.account.headlineProfile": "Atualizar perfil",
77 "settings.account.headlineAccount": "Informações de conta",
78 "settings.account.headlinePassword": "Mudar senha",
79 "settings.account.successInfo": "Suas mudanças foram salvas",
80 "settings.account.buttonSave": "Atualizar perfil",
81 "settings.account.mining.thankyou": "Obrigado por apoiar o Franz com poder de processamento.",
82 "settings.account.mining.active": "Você está realizando {hashes} cálculos por segundo agora.",
83 "settings.account.mining.moreInformation": "Obter mais informações",
84 "settings.account.mining.cancel": "Cancelar mineração",
85 "settings.navigation.availableServices": "Serviços disponíveis",
86 "settings.navigation.yourServices": "Seus serviços",
87 "settings.navigation.account": "Conta",
88 "settings.navigation.settings": "Configurações",
89 "settings.navigation.logout": "Logout",
90 "settings.recipes.headline": "Serviços disponíveis",
91 "settings.recipes.mostPopular": "Mais populares",
92 "settings.recipes.all": "Todos serviços",
93 "settings.recipes.dev": "Desenvolvimento",
94 "settings.recipes.nothingFound": "Desculpe, mas nenhum serviço corresponde a sua pesquisa.",
95 "settings.recipes.servicesSuccessfulAddedInfo": "Serviço adicionado com sucesso",
96 "settings.service.form.saveButton": "Salvar serviço",
97 "settings.service.form.deleteButton": "Apagar serviço",
98 "settings.service.form.availableServices": "Serviços disponíveis",
99 "settings.service.form.yourServices": "Seus serviços",
100 "settings.service.form.addServiceHeadline": "Adicionar {name}",
101 "settings.service.form.editServiceHeadline": "Editar {name}",
102 "settings.service.form.tabHosted": "Hospedado",
103 "settings.service.form.tabOnPremise": "Auto-hospedado ⭐️",
104 "settings.service.form.customUrlValidationError": "Não foi possível validar o servidor personalizado {name}.",
105 "settings.service.form.customUrlPremiumInfo": "Para adicionar serviços auto-hospedados, você precisa de uma conta Franz Apoiador Premium.",
106 "settings.service.form.customUrlUpgradeAccount": "Atualize a sua conta",
107 "settings.service.form.indirectMessageInfo": "Você será notificado por todas as mensagens em um canal, não apenas @usuário, @channel, @here, ...",
108 "settings.service.error.headline": "Erro",
109 "settings.service.error.goBack": "Voltar aos serviços",
110 "settings.service.error.message": "Não foi possível carregar a receita de serviço.",
111 "settings.services.tooltip.isDisabled": "Serviço desativado",
112 "settings.services.tooltip.notificationsDisabled": "Notificações desativadas",
113 "settings.services.headline": "Seus serviços",
114 "settings.services.noServicesAdded": "Você ainda não adicionou nenhum serviço.",
115 "settings.services.discoverServices": "Descobrir serviços",
116 "settings.services.updatedInfo": "Suas mudanças foram salvas",
117 "settings.services.deletedInfo": "Serviço apagado",
118 "settings.app.headline": "Configurações",
119 "settings.app.headlineGeneral": "Geral",
120 "settings.app.headlineLanguage": "Idioma",
121 "settings.app.headlineUpdates": "Atualizações",
122 "settings.app.buttonSearchForUpdate": "Verificar por atualizações",
123 "settings.app.buttonInstallUpdate": "Reiniciar & instalar atualização",
124 "settings.app.updateStatusSearching": "Em busca de atualização",
125 "settings.app.updateStatusAvailable": "Atualização disponível, fazendo download...",
126 "settings.app.updateStatusUpToDate": "Você está usando a última versão do Franz",
127 "settings.app.form.autoLaunchOnStart": "Abrir o Franz iniciar o sistema",
128 "settings.app.form.autoLaunchInBackground": "Abrir no fundo",
129 "settings.app.form.minimizeToSystemTray": "Minimizar o Franz para a bandeja do sistema",
130 "settings.app.form.runInBackground": "Manter o Franz no fundo quando fechar a janela",
131 "settings.app.form.language": "Idioma",
132 "settings.app.form.beta": "Incluir versões beta",
133 "settings.app.currentVersion": "Versão atual:",
134 "settings.service.form.name": "Nome",
135 "settings.service.form.enableService": "Ativar serviço",
136 "settings.service.form.enableNotification": "Ativar notificações",
137 "settings.service.form.team": "Equipe",
138 "settings.service.form.customUrl": "Serviços personalizado",
139 "settings.service.form.indirectMessages": "Mostrar avisos para todas as mensagens",
140 "settings.user.form.firstname": "Nome",
141 "settings.user.form.lastname": "Sobrenome",
142 "settings.user.form.email": "Email",
143 "settings.user.form.currentPassword": "Senha atual",
144 "settings.user.form.newPassword": "Nova senha",
145 "settings.user.form.accountType.label": "Tipo de conta",
146 "settings.user.form.accountType.individual": "Individual",
147 "settings.user.form.accountType.non-profit": "Sem fins lucrativos",
148 "settings.user.form.accountType.company": "Empresa",
149 "subscription.type.free": "grátis",
150 "subscription.type.month": "mês",
151 "subscription.type.year": "ano",
152 "subscription.type.mining": "Apoie o Franz com poder de processamento",
153 "subscription.mining.headline": "Como isso funciona?",
154 "subscription.mining.experimental": "experimental",
155 "subscription.mining.line1": "Habilitando o \"Apoio com poder de processamento\", o Franz vai usar cerca de 20-50% da sua CPU para minerar a criptomoeda Monero que equivale a aproximadamente $ 5/ano.",
156 "subscription.mining.line2": "Nós iremos adaptar o uso da CPU baseado nos seus hábitos para não drenar sua bateria nem deixar o seu computador lento.",
157 "subscription.mining.line3": "Enquanto o minerador estiver ativo, você terá acesso ilimitado à todas funções do Franz Apoiador Premium.",
158 "subscription.mining.moreInformation": "Obter mais informações sobre este plano.",
159 "subscriptionPopup.buttonCancel": "Cancelar",
160 "subscriptionPopup.buttonDone": "Feito",
161 "tabs.item.reload": "Recarregar",
162 "tabs.item.edit": "Editar",
163 "tabs.item.disableNotifications": "Desativar notificações",
164 "tabs.item.enableNotification": "Ativar notificações",
165 "tabs.item.disableService": "Desativar serviço",
166 "tabs.item.deleteService": "Apagar serviço"
167}
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json
new file mode 100644
index 000000000..44ced9e43
--- /dev/null
+++ b/src/i18n/locales/ru.json
@@ -0,0 +1,168 @@
1{
2 "global.api.unhealthy": "Невозможно подключиться к сервисам Franz",
3 "global.notConnectedToTheInternet": "Нет Интернет-соединения",
4 "welcome.signupButton": "Создать аккаунт",
5 "welcome.loginButton": "Вход",
6 "welcome.slogan": "Общение, которое просто работает",
7 "login.headline": "Регистрация",
8 "login.email.label": "Email адрес",
9 "login.password.label": "Пароль",
10 "login.submit.label": "Регистрация",
11 "login.invalidCredentials": "Неправильный email или пароль",
12 "login.tokenExpired": "Сессия устарела, пожалуйста, войдите снова.",
13 "login.serverLogout": "Сессия устарела, пожалуйста, войдите снова.",
14 "login.link.signup": "Создать бесплатный аккаунт",
15 "login.link.password": "Восстановить пароль",
16 "password.headline": "Восстановление пароля",
17 "password.email.label": "Email адрес",
18 "password.submit.label": "Отправить",
19 "password.noUser": "Не найдено пользователя с таким email",
20 "password.successInfo": "Проверьте Ваш email",
21 "password.link.signup": "Создать аккаунт",
22 "password.link.login": "Вход",
23 "signup.headline": "Регистрация",
24 "signup.firstname.label": "Имя",
25 "signup.lastname.label": "Фамилия",
26 "signup.email.label": "Email адрес",
27 "signup.company.label": "Организация",
28 "signup.password.label": "Пароль",
29 "signup.submit.label": "Создать аккаунт",
30 "signup.link.login": "Уже есть аккаунт, войти?",
31 "signup.emailDuplicate": "Пользователь с указанным email уже существует",
32 "signup.legal.info": "Создавая аккаунт Franz, Вы принимаете",
33 "signup.legal.terms": "Условия обслуживания",
34 "signup.legal.privacy": "Политика конфиденциальности",
35 "pricing.headline": "Поддержать Franz",
36 "pricing.support.label": "Выберите план поддержки",
37 "pricing.submit.label": "Я хочу поддержать разработку Franz",
38 "pricing.link.skipPayment": "Я не хочу поддерживать разработку Franz.",
39 "import.headline": "Импортировать сервисы Franz 4",
40 "import.notSupportedHeadline": "Сервисы еще не поддержаны в Franz 5",
41 "import.submit.label": "Импортировать сервисы",
42 "import.skip.label": "Я хочу добавить сервисы вручную",
43 "invite.submit.label": "Выслать приглашения",
44 "invite.headline.friends": "Пригласите 3х друзей или коллег",
45 "invite.name.label": "Имя",
46 "invite.email.label": "Email адрес",
47 "invite.skip.label": "Я сделаю это позже",
48 "subscription.submit.label": "Я хочу поддержать разработку Franz",
49 "subscription.paymentSessionError": "Невозможно загрузить форму оплаты",
50 "subscription.includedFeatures": "Оплаченный Franz Премиум аккаунт включает",
51 "subscription.features.onpremise": "Добавить облачные службы или службы со своим хостингом типа HipChat",
52 "subscription.features.customServices": "Настраиваемые сервисы для Вас и Вашей команды",
53 "subscription.features.encryptedSync": "Шифрованная синхронизация сессии",
54 "subscription.features.vpn": "Поддержка прокси и VPN",
55 "subscription.features.ads": "Без рекламы, навсегда!",
56 "subscription.features.comingSoon": "следите за обновлениями",
57 "infobar.servicesUpdated": "Ваши сервисы были обновлены.",
58 "infobar.updateAvailable": "Доступно обновление Franz.",
59 "infobar.buttonReloadServices": "Перезагрузить сервисы",
60 "infobar.buttonInstallUpdate": "Перезапустить и обновить",
61 "infobar.requiredRequestsFailed": "Невозможно загрузить сервисы и информацию пользователя",
62 "sidebar.settings": "Настройки",
63 "services.welcome": "Добро пожаловать во Franz",
64 "services.getStarted": "Начать работу",
65 "settings.account.headline": "Аккаунт",
66 "settings.account.headlineSubscription": "Ваша подписка",
67 "settings.account.headlineUpgrade": "Улучшить аккаунт и поддержать Franz",
68 "settings.account.headlineInvoices": "Счета",
69 "settings.account.manageSubscription.label": "Управление подпиской",
70 "settings.account.accountType.basic": "Базовый аккаунт",
71 "settings.account.accountType.premium": "Премиум аккаунт",
72 "settings.account.account.editButton": "Редактировать аккаунт",
73 "settings.account.invoiceDownload": "Скачать",
74 "settings.account.userInfoRequestFailed": "Невозможно загрузить информацию пользователя",
75 "settings.account.tryReloadUserInfoRequest": "Попробовать снова",
76 "settings.account.headlineProfile": "Обновить профиль",
77 "settings.account.headlineAccount": "Информация аккаунта",
78 "settings.account.headlinePassword": "Сменить пароль",
79 "settings.account.successInfo": "Изменения сохранены",
80 "settings.account.buttonSave": "Сохранить изменения",
81 "settings.account.mining.thankyou": "Спасибо за поддержку Franz Вашими процессорными мощностями.",
82 "settings.account.mining.active": "Вы выполняете {hashes} вычислений в секунду.",
83 "settings.account.mining.moreInformation": "Больше информации",
84 "settings.account.mining.cancel": "Отменить майнинг",
85 "settings.navigation.availableServices": "Доступные сервисы",
86 "settings.navigation.yourServices": "Ваши сервисы",
87 "settings.navigation.account": "Аккаунт",
88 "settings.navigation.settings": "Настройки",
89 "settings.navigation.logout": "Выход",
90 "settings.recipes.headline": "Доступные сервисы",
91 "settings.recipes.mostPopular": "Популярные",
92 "settings.recipes.all": "Все сервисы",
93 "settings.recipes.dev": "Разработка",
94 "settings.recipes.nothingFound": "Ничего не найдено по Вашему запросу.",
95 "settings.recipes.servicesSuccessfulAddedInfo": "Сервис успешно добавлен",
96 "settings.service.form.saveButton": "Сохранить сервис",
97 "settings.service.form.deleteButton": "Удалить сервис",
98 "settings.service.form.availableServices": "Доступные сервисы",
99 "settings.service.form.yourServices": "Ваши сервисы",
100 "settings.service.form.addServiceHeadline": "Добавление {name}",
101 "settings.service.form.editServiceHeadline": "Редактирование {name}",
102 "settings.service.form.tabHosted": "Hosted",
103 "settings.service.form.tabOnPremise": "Свой хостинг ⭐️",
104 "settings.service.form.customUrlValidationError": "Невозможно проверить сервер {name}.",
105 "settings.service.form.customUrlPremiumInfo": "Для добавния сервиса на своем хостинге, необходим аккаунт Franz Premium.",
106 "settings.service.form.customUrlUpgradeAccount": "Улучшить аккаунт",
107 "settings.service.form.indirectMessageInfo": "Вы будете получать уведомления для всех сообщений, не только для @username, @channel, @here, ...",
108 "settings.service.error.headline": "Ошибка",
109 "settings.service.error.goBack": "Вернуться к сервисам",
110 "settings.service.error.message": "Невозможно загрузить рецепт сервиса.",
111 "settings.services.tooltip.isDisabled": "Сервис отключен",
112 "settings.services.tooltip.notificationsDisabled": "Уведомления отключены",
113 "settings.services.headline": "Ваши сервисы",
114 "settings.services.noServicesAdded": "У Вас пока нет сервисов",
115 "settings.services.discoverServices": "Найти сервисы",
116 "settings.services.updatedInfo": "Изменения сохранены",
117 "settings.services.deletedInfo": "Сервис удален",
118 "settings.app.headline": "Настройки",
119 "settings.app.headlineGeneral": "Общие",
120 "settings.app.headlineLanguage": "Язык",
121 "settings.app.headlineUpdates": "Обновления",
122 "settings.app.buttonSearchForUpdate": "Проверить обновления",
123 "settings.app.buttonInstallUpdate": "Перезапустить и обновить",
124 "settings.app.updateStatusSearching": "Поиск обновлений",
125 "settings.app.updateStatusAvailable": "Доступно обновление, загрука...",
126 "settings.app.updateStatusUpToDate": "Вы используете актуальную версию Franz",
127 "settings.app.form.autoLaunchOnStart": "Запускать Franz при старте",
128 "settings.app.form.autoLaunchInBackground": "Открывать в фоне",
129 "settings.app.form.enableSystemTray": "Показывать Franz в трее",
130 "settings.app.form.minimizeToSystemTray": "Сворачивать Franz в трей",
131 "settings.app.form.runInBackground": "Оставлять Franz в фоне при закрытии окна",
132 "settings.app.form.language": "Язык",
133 "settings.app.form.beta": "Включая бета версии",
134 "settings.app.currentVersion": "Текущая версия:",
135 "settings.service.form.name": "Название",
136 "settings.service.form.enableService": "Включить сервис",
137 "settings.service.form.enableNotification": "Включить уведомления",
138 "settings.service.form.team": "Команда",
139 "settings.service.form.customUrl": "Адрес сервера",
140 "settings.service.form.indirectMessages": "Показывать значок уведомлений для всех новых сообщений",
141 "settings.user.form.firstname": "Имя",
142 "settings.user.form.lastname": "Фамилия",
143 "settings.user.form.email": "Email",
144 "settings.user.form.currentPassword": "Текущий пароль",
145 "settings.user.form.newPassword": "Новый пароль",
146 "settings.user.form.accountType.label": "Тип аккаунта",
147 "settings.user.form.accountType.individual": "Индивидуальный",
148 "settings.user.form.accountType.non-profit": "Некоммерческий",
149 "settings.user.form.accountType.company": "Компания",
150 "subscription.type.free": "бесплатно",
151 "subscription.type.month": "месяц",
152 "subscription.type.year": "год",
153 "subscription.type.mining": "Поддерживать Franz, предоставляя процессорную мощность",
154 "subscription.mining.headline": "Как это работает?",
155 "subscription.mining.experimental": "экспериментально",
156 "subscription.mining.line1": "Включая \"Поддерживать Franz, предоставляя процессорную мощность\", Franz будет использовать 20-50% процессорного времени для майнинга криптовалюты Monero в примерном объеме 5$/год.",
157 "subscription.mining.line2": "Мы будем регулировать использование процессора, чтобы не садить батарею и не мешать Вашей работе",
158 "subscription.mining.line3": "Пока разрешен майнинг, Вам будут достуны все возможности Franz Premium без ограничений",
159 "subscription.mining.moreInformation": "Узнать больше об этом плане.",
160 "subscriptionPopup.buttonCancel": "Отмена",
161 "subscriptionPopup.buttonDone": "Готово",
162 "tabs.item.reload": "Перезагрузить",
163 "tabs.item.edit": "Редактировать",
164 "tabs.item.disableNotifications": "Отключить уведомления",
165 "tabs.item.enableNotification": "Включить уведомления",
166 "tabs.item.disableService": "Отключить сервис",
167 "tabs.item.deleteService": "Удалить сервис"
168}
diff --git a/src/i18n/locales/ua.json b/src/i18n/locales/ua.json
new file mode 100644
index 000000000..63135e52c
--- /dev/null
+++ b/src/i18n/locales/ua.json
@@ -0,0 +1,167 @@
1{
2 "global.api.unhealthy": "Не можна підключитись до онлайн сервісів Franz",
3 "global.notConnectedToTheInternet": "Ви не підключені до Інтернету.",
4 "welcome.signupButton": "Створити безплатний акаунт",
5 "welcome.loginButton": "Увійдіть до свого акаунту",
6 "welcome.slogan": "Обмін повідомленнями, який працює для вас",
7 "login.headline": "Увійти",
8 "login.email.label": "Email адреса",
9 "login.password.label": "Пароль",
10 "login.submit.label": "Увійти",
11 "login.invalidCredentials": "Email або пароль некоректні",
12 "login.tokenExpired": "Ваша сесія закінчилась, будь ласка, зайдіть знову.",
13 "login.serverLogout": "Ваша сесія закінчилась, будь ласка, зайдіть знову.",
14 "login.link.signup": "Створити безплатний акаунт",
15 "login.link.password": "Скинути пароль",
16 "password.headline": "Скинути пароль",
17 "password.email.label": "Email адреса",
18 "password.submit.label": "Подати",
19 "password.noUser": "Не знайдено жодного користувача з цією email адресою",
20 "password.successInfo": "Будь ласка, перевірте ваш email",
21 "password.link.signup": "Створити безплатний акаунт",
22 "password.link.login": "Увійти до вашого акаунту",
23 "signup.headline": "Увійти",
24 "signup.firstname.label": "Ім'я",
25 "signup.lastname.label": "Прізвище",
26 "signup.email.label": "Email адреса",
27 "signup.company.label": "Компанія",
28 "signup.password.label": "Пароль",
29 "signup.submit.label": "Створити акаунт",
30 "signup.link.login": "У вас вже є обліковий запис, увійти?",
31 "signup.emailDuplicate": "Користувач із цією email адресою вже існує",
32 "signup.legal.info": "Створенням акаунту Franz ви приймаєте",
33 "signup.legal.terms": "Умови використання",
34 "signup.legal.privacy": "Заява про конфіденційність",
35 "pricing.headline": "Підтримайте Franz",
36 "pricing.support.label": "Виберіть свій план підтримки",
37 "pricing.submit.label": "Я хочу підтримати розробку Franz",
38 "pricing.link.skipPayment": "Я не хочу підтримувати розробку Franz.",
39 "import.headline": "Імпортувати ваші сервіси з Franz 4",
40 "import.notSupportedHeadline": "Сервіси ще не підтримуються в Franz 5",
41 "import.submit.label": "Імпортувати сервіси",
42 "import.skip.label": "Я хочу додати сервіси вручну",
43 "invite.submit.label": "Відправити запрошення",
44 "invite.headline.friends": "Запросіть 3 ваших друзів або колег",
45 "invite.name.label": "Ім'я",
46 "invite.email.label": "Email адреса",
47 "invite.skip.label": "Я хочу зробити це пізніше",
48 "subscription.submit.label": "Я хочу підтримати розробку Franz",
49 "subscription.paymentSessionError": "Не вдалося ініціалізувати форму платежу",
50 "subscription.includedFeatures": "Платний Преміальний Акаунт Прихильника Franz включає",
51 "subscription.features.onpremise": "Додайте on-premise / hosted сервіси, такі як Hipchat",
52 "subscription.features.customServices": "Приватні сервіси для вас і вашої команди",
53 "subscription.features.encryptedSync": "Шифрована синхронізація сеансу",
54 "subscription.features.vpn": "Підтримка проксі та VPN",
55 "subscription.features.ads": "Жодної реклами!",
56 "subscription.features.comingSoon": "очікуйте незабаром",
57 "infobar.servicesUpdated": "Ваші сервіси було оновлено.",
58 "infobar.updateAvailable": "Нове оновлення для Franz доступне.",
59 "infobar.buttonReloadServices": "Перезавантажити сервіси",
60 "infobar.buttonInstallUpdate": "Перезавантажити і встановити оновлення",
61 "infobar.requiredRequestsFailed": "Не вдалося завантажити сервіси та інформацію користувача",
62 "sidebar.settings": "Налаштування",
63 "services.welcome": "Ласкаво просимо в Franz",
64 "services.getStarted": "Почати",
65 "settings.account.headline": "Акаунт",
66 "settings.account.headlineSubscription": "Ваша підписка",
67 "settings.account.headlineUpgrade": "Оновити ваш акаунт і підтримати Franz",
68 "settings.account.headlineInvoices": "Інвойси",
69 "settings.account.manageSubscription.label": "Керування вашою підпискою",
70 "settings.account.accountType.basic": "Базовий акаунт",
71 "settings.account.accountType.premium": "Преміум Акаунт Прихильника",
72 "settings.account.account.editButton": "Редагувати акаунт",
73 "settings.account.invoiceDownload": "Завантажити",
74 "settings.account.userInfoRequestFailed": "Не вдалося завантажити інформацію користувача",
75 "settings.account.tryReloadUserInfoRequest": "Спробуйте ще раз",
76 "settings.account.headlineProfile": "Оновити профіль",
77 "settings.account.headlineAccount": "Інформація про акаунт",
78 "settings.account.headlinePassword": "Змінити пароль",
79 "settings.account.successInfo": "Ваші зміни були збережені",
80 "settings.account.buttonSave": "Оновити профіль",
81 "settings.account.mining.thankyou": "Дякую, що підтримуєте Franz своєю обчислювальною потужністю.",
82 "settings.account.mining.active": "Ви зараз здійснюєте {hashes} розрахунків за секунду.",
83 "settings.account.mining.moreInformation": "Отримати більше інформації",
84 "settings.account.mining.cancel": "Скасувати видобуток",
85 "settings.navigation.availableServices": "Доступні сервіси",
86 "settings.navigation.yourServices": "Ваші сервіси",
87 "settings.navigation.account": "Акаунт",
88 "settings.navigation.settings": "Налаштування",
89 "settings.navigation.logout": "Вийти",
90 "settings.recipes.headline": "Доступні сервіси",
91 "settings.recipes.mostPopular": "Найбільш популярні",
92 "settings.recipes.all": "Всі сервіси",
93 "settings.recipes.dev": "Розробка",
94 "settings.recipes.nothingFound": "Вибачте, але жоден сервіс не відповідає пошуковому терміну.",
95 "settings.recipes.servicesSuccessfulAddedInfo": "Сервіс успішно додано",
96 "settings.service.form.saveButton": "Зберегти сервіс",
97 "settings.service.form.deleteButton": "Видалити сервіс",
98 "settings.service.form.availableServices": "Доступні сервіси",
99 "settings.service.form.yourServices": "Ваші сервіси",
100 "settings.service.form.addServiceHeadline": "Додати {name}",
101 "settings.service.form.editServiceHeadline": "Редагувати {name}",
102 "settings.service.form.tabHosted": "Розміщений",
103 "settings.service.form.tabOnPremise": "Самостійно розміщений ⭐️",
104 "settings.service.form.customUrlValidationError": "Не вдалось підтвердити власний {name} сервер.",
105 "settings.service.form.customUrlPremiumInfo": "Щоб додати самостійно розміщені сервіси, вам потріьно мати Преміумним Акаунт Прихильника Franz.",
106 "settings.service.form.customUrlUpgradeAccount": "Оновити ваш обліковий запис",
107 "settings.service.form.indirectMessageInfo": "Ви отримаєте сповіщення про всі нові повідомлення в каналі, а не лише про @username, @channel, @here, ...",
108 "settings.service.error.headline": "Помилка",
109 "settings.service.error.goBack": "Повернутись до сервісів",
110 "settings.service.error.message": "Не вдалось завантажити серверний протокол.",
111 "settings.services.tooltip.isDisabled": "Сервіс відключений",
112 "settings.services.tooltip.notificationsDisabled": "Сповіщення відключені",
113 "settings.services.headline": "Ваші сервіси",
114 "settings.services.noServicesAdded": "Ви ще не додавали жодних сервісів.",
115 "settings.services.discoverServices": "Відкрийте для себе сервіси",
116 "settings.services.updatedInfo": "Ваші зміни були збережені",
117 "settings.services.deletedInfo": "Сервіс було видалено",
118 "settings.app.headline": "Налаштування",
119 "settings.app.headlineGeneral": "Загальні",
120 "settings.app.headlineLanguage": "Мова",
121 "settings.app.headlineUpdates": "Оновлення",
122 "settings.app.buttonSearchForUpdate": "Перевірити наявність оновлень",
123 "settings.app.buttonInstallUpdate": "Перезавантажити і встановити оновлення",
124 "settings.app.updateStatusSearching": "Шукає оновлення",
125 "settings.app.updateStatusAvailable": "Оновлення доступне, завантаження...",
126 "settings.app.updateStatusUpToDate": "Ви використовуєте останню версію Franz",
127 "settings.app.form.autoLaunchOnStart": "Запускати Franz на початку",
128 "settings.app.form.autoLaunchInBackground": "Відкрити у фоновому режимі",
129 "settings.app.form.minimizeToSystemTray": "Мінімізувати Franz до системного лотка",
130 "settings.app.form.runInBackground": "Тримати Franz в фоні при закритті вікна",
131 "settings.app.form.language": "Мова",
132 "settings.app.form.beta": "Включити бета-версії",
133 "settings.app.currentVersion": "Поточна версія:",
134 "settings.service.form.name": "Ім'я",
135 "settings.service.form.enableService": "Увімкнути сервіс",
136 "settings.service.form.enableNotification": "Увімкнути сповіщення",
137 "settings.service.form.team": "Команда",
138 "settings.service.form.customUrl": "Користувацький сервер",
139 "settings.service.form.indirectMessages": "Показувати значок повідомлення для всіх нових повідомлень",
140 "settings.user.form.firstname": "Ім'я",
141 "settings.user.form.lastname": "Прізвище",
142 "settings.user.form.email": "Email",
143 "settings.user.form.currentPassword": "Поточний пароль",
144 "settings.user.form.newPassword": "Новий пароль",
145 "settings.user.form.accountType.label": "Тип акаунту",
146 "settings.user.form.accountType.individual": "Індивідуальний",
147 "settings.user.form.accountType.non-profit": "Некомерційний",
148 "settings.user.form.accountType.company": "Компанія",
149 "subscription.type.free": "безплатно",
150 "subscription.type.month": "місяць",
151 "subscription.type.year": "рік",
152 "subscription.type.mining": "Підтримати Franz обчислювальною потужністю",
153 "subscription.mining.headline": "Як це працює?",
154 "subscription.mining.experimental": "експериментальний",
155 "subscription.mining.line1": "Вмикаючи \"Підтримати обчислювальною потужністю\", Franz буде використовувати приблизно 20-50% вашого процесора щоб майнити криптовалюту Monero, що приблизно рівне $ 5/рік.",
156 "subscription.mining.line2": "Ми адаптуємо використання процесора відповідно до вашої поведінки, щоб не виснажувати акумулятор, не сповільнити вашу роботу і роботу вашої машини.",
157 "subscription.mining.line3": "Поки майнер активний, ви матимете необмежений доступ до всіх особливостей підтримки Franz Premium.",
158 "subscription.mining.moreInformation": "Отримати більше інформації про цей план.",
159 "subscriptionPopup.buttonCancel": "Відмінити",
160 "subscriptionPopup.buttonDone": "Готово",
161 "tabs.item.reload": "Перезавантажити",
162 "tabs.item.edit": "Редагувати",
163 "tabs.item.disableNotifications": "Вимкнути сповіщення",
164 "tabs.item.enableNotification": "Увімкнути сповіщення",
165 "tabs.item.disableService": "Вимкнути сервіс",
166 "tabs.item.deleteService": "Видалити сервіс"
167}
diff --git a/src/index.js b/src/index.js
index 3244c44ad..9ca059f48 100644
--- a/src/index.js
+++ b/src/index.js
@@ -2,21 +2,22 @@ import { app, BrowserWindow, shell } from 'electron';
2import fs from 'fs-extra'; 2import fs from 'fs-extra';
3import path from 'path'; 3import path from 'path';
4 4
5// eslint-disable-next-line 5/* eslint-disable */
6if (require('electron-squirrel-startup')) app.quit(); 6if (require('electron-squirrel-startup')) app.quit();
7 7
8import windowStateKeeper from 'electron-window-state'; // eslint-disable-line 8import windowStateKeeper from 'electron-window-state';
9 9
10import { isDevMode, isWindows } from './environment'; // eslint-disable-line 10import { isDevMode, isWindows } from './environment';
11import ipcApi from './electron/ipc-api'; // eslint-disable-line 11import ipcApi from './electron/ipc-api';
12import Settings from './electron/Settings'; // eslint-disable-line 12import Tray from './lib/Tray';
13import { appId } from './package.json'; // eslint-disable-line 13import Settings from './electron/Settings';
14import './electron/exception'; // eslint-disable-line 14import { appId } from './package.json';
15import './electron/exception';
16/* eslint-enable */
15 17
16// Keep a global reference of the window object, if you don't, the window will 18// Keep a global reference of the window object, if you don't, the window will
17// be closed automatically when the JavaScript object is garbage collected. 19// be closed automatically when the JavaScript object is garbage collected.
18let mainWindow; 20let mainWindow;
19const settings = new Settings();
20let willQuitApp = false; 21let willQuitApp = false;
21 22
22// Ensure that the recipe directory exists 23// Ensure that the recipe directory exists
@@ -27,6 +28,23 @@ if (isWindows) {
27 app.setAppUserModelId(appId); 28 app.setAppUserModelId(appId);
28} 29}
29 30
31// Force single window
32if (process.platform !== 'darwin') {
33 const isSecondInstance = app.makeSingleInstance(() => {
34 if (mainWindow) {
35 if (mainWindow.isMinimized()) mainWindow.restore();
36 mainWindow.focus();
37 }
38 });
39
40 if (isSecondInstance) {
41 app.quit();
42 }
43}
44
45// Initialize Settings
46const settings = new Settings();
47
30const createWindow = async () => { 48const createWindow = async () => {
31 // Remember window size 49 // Remember window size
32 const mainWindowState = windowStateKeeper({ 50 const mainWindowState = windowStateKeeper({
@@ -47,8 +65,11 @@ const createWindow = async () => {
47 autoHideMenuBar: true, 65 autoHideMenuBar: true,
48 }); 66 });
49 67
68 // Initialize System Tray
69 const trayIcon = new Tray(mainWindow);
70
50 // Initialize ipcApi 71 // Initialize ipcApi
51 ipcApi({ mainWindow, settings }); 72 ipcApi({ mainWindow, settings, trayIcon });
52 73
53 // Manage Window State 74 // Manage Window State
54 mainWindowState.manage(mainWindow); 75 mainWindowState.manage(mainWindow);
@@ -85,6 +106,7 @@ const createWindow = async () => {
85 106
86 if (settings.get('minimizeToSystemTray')) { 107 if (settings.get('minimizeToSystemTray')) {
87 mainWindow.setSkipTaskbar(true); 108 mainWindow.setSkipTaskbar(true);
109 trayIcon.show();
88 } 110 }
89 }); 111 });
90 112
@@ -102,6 +124,10 @@ const createWindow = async () => {
102 if (app.wasMaximized) { 124 if (app.wasMaximized) {
103 mainWindow.maximize(); 125 mainWindow.maximize();
104 } 126 }
127
128 if (!settings.get('enableSystemTray')) {
129 trayIcon.hide();
130 }
105 }); 131 });
106 132
107 mainWindow.on('show', () => { 133 mainWindow.on('show', () => {
diff --git a/src/lib/Menu.js b/src/lib/Menu.js
index 9f23c4d70..a6cde4d36 100644
--- a/src/lib/Menu.js
+++ b/src/lib/Menu.js
@@ -49,6 +49,7 @@ const template = [
49 }, 49 },
50 { 50 {
51 role: 'zoomin', 51 role: 'zoomin',
52 accelerator: 'CommandOrControl+=',
52 }, 53 },
53 { 54 {
54 role: 'zoomout', 55 role: 'zoomout',
diff --git a/src/lib/Tray.js b/src/lib/Tray.js
new file mode 100644
index 000000000..67150971e
--- /dev/null
+++ b/src/lib/Tray.js
@@ -0,0 +1,73 @@
1import { app, Tray, Menu, systemPreferences } from 'electron';
2import path from 'path';
3
4const FILE_EXTENSION = process.platform === 'win32' ? 'ico' : 'png';
5const INDICATOR_TRAY_PLAIN = 'tray';
6const INDICATOR_TRAY_UNREAD = 'tray-unread';
7
8export default class TrayIcon {
9 mainWindow = null;
10 trayIcon = null;
11
12 constructor(mainWindow) {
13 this.mainWindow = mainWindow;
14 }
15
16 show() {
17 if (this.trayIcon) return;
18
19 this.trayIcon = new Tray(this._getAsset('tray', INDICATOR_TRAY_PLAIN));
20 const trayMenuTemplate = [
21 {
22 label: 'Show Franz',
23 click() {
24 this.mainWindow.show();
25 },
26 }, {
27 label: 'Quit Franz',
28 click() {
29 app.quit();
30 },
31 },
32 ];
33
34 const trayMenu = Menu.buildFromTemplate(trayMenuTemplate);
35 this.trayIcon.setContextMenu(trayMenu);
36
37 this.trayIcon.on('click', () => {
38 this.mainWindow.show();
39 });
40 }
41
42 hide() {
43 if (this.trayIcon) {
44 this.trayIcon.destroy();
45 this.trayIcon = null;
46 }
47 }
48
49 setIndicator(indicator) {
50 if (!this.trayIcon) return;
51
52 this.trayIcon.setImage(this._getAsset('tray', indicator !== 0 ? INDICATOR_TRAY_UNREAD : INDICATOR_TRAY_PLAIN));
53
54 if (process.platform === 'darwin') {
55 this.trayIcon.setPressedImage(
56 this._getAsset('tray', `${indicator !== 0 ? INDICATOR_TRAY_UNREAD : INDICATOR_TRAY_PLAIN}-active`),
57 );
58 }
59 }
60
61
62 _getAsset(type, asset) {
63 let platform = process.platform;
64
65 if (platform === 'darwin' && systemPreferences.isDarkMode()) {
66 platform = `${platform}-dark`;
67 }
68
69 return path.join(
70 __dirname, '..', 'assets', 'images', type, platform, `${asset}.${FILE_EXTENSION}`,
71 );
72 }
73}
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js
index a5e0839f2..7dbef985d 100644
--- a/src/stores/AppStore.js
+++ b/src/stores/AppStore.js
@@ -16,10 +16,6 @@ import Miner from '../lib/Miner';
16const { app, getCurrentWindow, powerMonitor } = remote; 16const { app, getCurrentWindow, powerMonitor } = remote;
17const defaultLocale = 'en-US'; 17const defaultLocale = 'en-US';
18 18
19const appFolder = path.dirname(process.execPath);
20const updateExe = path.resolve(appFolder, '..', 'Update.exe');
21const exeName = path.basename(process.execPath);
22
23export default class AppStore extends Store { 19export default class AppStore extends Store {
24 updateStatusTypes = { 20 updateStatusTypes = {
25 CHECKING: 'CHECKING', 21 CHECKING: 'CHECKING',
@@ -84,7 +80,7 @@ export default class AppStore extends Store {
84 // Check for updates once every 4 hours 80 // Check for updates once every 4 hours
85 setInterval(() => this._checkForUpdates(), CHECK_INTERVAL); 81 setInterval(() => this._checkForUpdates(), CHECK_INTERVAL);
86 // Check for an update in 30s (need a delay to prevent Squirrel Installer lock file issues) 82 // Check for an update in 30s (need a delay to prevent Squirrel Installer lock file issues)
87 setTimeout(() => this._checkForUpdates(), 3000); 83 setTimeout(() => this._checkForUpdates(), 30000);
88 ipcRenderer.on('autoUpdate', (event, data) => { 84 ipcRenderer.on('autoUpdate', (event, data) => {
89 if (data.available) { 85 if (data.available) {
90 this.updateStatus = this.updateStatusTypes.AVAILABLE; 86 this.updateStatus = this.updateStatusTypes.AVAILABLE;
@@ -125,6 +121,18 @@ export default class AppStore extends Store {
125 this.actions.service.openDevToolsForActiveService(); 121 this.actions.service.openDevToolsForActiveService();
126 }); 122 });
127 123
124 // Set active the next service
125 key(
126 '⌘+pagedown, ctrl+pagedown, ⌘+shift+tab, ctrl+shift+tab', () => {
127 this.actions.service.setActiveNext();
128 });
129
130 // Set active the prev service
131 key(
132 '⌘+pageup, ctrl+pageup, ⌘+tab, ctrl+tab', () => {
133 this.actions.service.setActivePrev();
134 });
135
128 this.locale = this._getDefaultLocale(); 136 this.locale = this._getDefaultLocale();
129 137
130 this._healthCheck(); 138 this._healthCheck();
@@ -161,24 +169,27 @@ export default class AppStore extends Store {
161 @action _launchOnStartup({ enable, openInBackground }) { 169 @action _launchOnStartup({ enable, openInBackground }) {
162 this.autoLaunchOnStart = enable; 170 this.autoLaunchOnStart = enable;
163 171
164 const settings = { 172 let settings = {
165 openAtLogin: enable, 173 openAtLogin: enable,
166 openAsHidden: openInBackground,
167 path: updateExe,
168 args: [
169 '--processStart', `"${exeName}"`,
170 ],
171 }; 174 };
172 175
173 // For Windows 176 // For Windows
174 if (openInBackground) { 177 if (process.platform === 'win32') {
175 settings.args.push( 178 settings = Object.assign({
176 '--process-start-args', '"--hidden"', 179 openAsHidden: openInBackground,
177 ); 180 path: app.getPath('exe'),
181 args: [
182 '--processStart', `"${path.basename(app.getPath('exe'))}"`,
183 ],
184 }, settings);
185
186 if (openInBackground) {
187 settings.args.push(
188 '--process-start-args', '"--hidden"',
189 );
190 }
178 } 191 }
179 192
180 app.setLoginItemSettings(settings);
181
182 gaEvent('App', enable ? 'enable autostart' : 'disable autostart'); 193 gaEvent('App', enable ? 'enable autostart' : 'disable autostart');
183 } 194 }
184 195
@@ -291,6 +302,12 @@ export default class AppStore extends Store {
291 // we need to wait until the settings request is resolved 302 // we need to wait until the settings request is resolved
292 await this.stores.settings.allSettingsRequest; 303 await this.stores.settings.allSettingsRequest;
293 304
305 // We don't set autostart on first launch for macOS as disabling
306 // the option is currently broken
307 // https://github.com/meetfranz/franz/issues/17
308 // https://github.com/electron/electron/issues/10880
309 if (process.platform === 'darwin') return;
310
294 if (!this.stores.settings.all.appStarts) { 311 if (!this.stores.settings.all.appStarts) {
295 this.actions.app.launchOnStartup({ 312 this.actions.app.launchOnStartup({
296 enable: true, 313 enable: true,
@@ -301,7 +318,7 @@ export default class AppStore extends Store {
301 318
302 _checkAutoStart() { 319 _checkAutoStart() {
303 const loginItem = app.getLoginItemSettings({ 320 const loginItem = app.getLoginItemSettings({
304 path: updateExe, 321 path: app.getPath('exe'),
305 }); 322 });
306 323
307 this.autoLaunchOnStart = loginItem.openAtLogin; 324 this.autoLaunchOnStart = loginItem.openAtLogin;
diff --git a/src/stores/RecipesStore.js b/src/stores/RecipesStore.js
index cdc274685..67fee1d50 100644
--- a/src/stores/RecipesStore.js
+++ b/src/stores/RecipesStore.js
@@ -65,6 +65,10 @@ export default class RecipesStore extends Store {
65 @action async _update() { 65 @action async _update() {
66 const recipeIds = this.recipeIdForServices; 66 const recipeIds = this.recipeIdForServices;
67 const recipes = {}; 67 const recipes = {};
68
69 // Hackfix, reference this.all to fetch services
70 console.debug(`Check Recipe updates for ${this.all.map(recipe => recipe.id)}`);
71
68 recipeIds.forEach((r) => { 72 recipeIds.forEach((r) => {
69 const recipe = this.one(r); 73 const recipe = this.one(r);
70 recipes[r] = recipe.version; 74 recipes[r] = recipe.version;
diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js
index 77d2e7da4..19db05494 100644
--- a/src/stores/ServicesStore.js
+++ b/src/stores/ServicesStore.js
@@ -24,6 +24,8 @@ export default class ServicesStore extends Store {
24 24
25 // Register action handlers 25 // Register action handlers
26 this.actions.service.setActive.listen(this._setActive.bind(this)); 26 this.actions.service.setActive.listen(this._setActive.bind(this));
27 this.actions.service.setActiveNext.listen(this._setActiveNext.bind(this));
28 this.actions.service.setActivePrev.listen(this._setActivePrev.bind(this));
27 this.actions.service.showAddServiceInterface.listen(this._showAddServiceInterface.bind(this)); 29 this.actions.service.showAddServiceInterface.listen(this._showAddServiceInterface.bind(this));
28 this.actions.service.createService.listen(this._createService.bind(this)); 30 this.actions.service.createService.listen(this._createService.bind(this));
29 this.actions.service.createFromLegacyService.listen(this._createFromLegacyService.bind(this)); 31 this.actions.service.createFromLegacyService.listen(this._createFromLegacyService.bind(this));
@@ -206,6 +208,24 @@ export default class ServicesStore extends Store {
206 service.isActive = true; 208 service.isActive = true;
207 } 209 }
208 210
211 @action _setActiveNext() {
212 const nextIndex = this._wrapIndex(this.enabled.findIndex(service => service.isActive), 1, this.enabled.length);
213
214 this.all.forEach((s, index) => {
215 this.all[index].isActive = false;
216 });
217 this.enabled[nextIndex].isActive = true;
218 }
219
220 @action _setActivePrev() {
221 const prevIndex = this._wrapIndex(this.enabled.findIndex(service => service.isActive), -1, this.enabled.length);
222
223 this.all.forEach((s, index) => {
224 this.all[index].isActive = false;
225 });
226 this.enabled[prevIndex].isActive = true;
227 }
228
209 @action _setUnreadMessageCount({ serviceId, count }) { 229 @action _setUnreadMessageCount({ serviceId, count }) {
210 const service = this.one(serviceId); 230 const service = this.one(serviceId);
211 231
@@ -500,4 +520,8 @@ export default class ServicesStore extends Store {
500 _reorderAnalytics = debounce(() => { 520 _reorderAnalytics = debounce(() => {
501 gaEvent('Service', 'order'); 521 gaEvent('Service', 'order');
502 }, 5000); 522 }, 5000);
523
524 _wrapIndex(index, delta, size) {
525 return (((index + delta) % size) + size) % size;
526 }
503} 527}
diff --git a/src/stores/UserStore.js b/src/stores/UserStore.js
index 4927d615f..1cb2ecac3 100644
--- a/src/stores/UserStore.js
+++ b/src/stores/UserStore.js
@@ -192,6 +192,15 @@ export default class UserStore extends Store {
192 @action async _importLegacyServices({ services }) { 192 @action async _importLegacyServices({ services }) {
193 this.isImportLegacyServicesExecuting = true; 193 this.isImportLegacyServicesExecuting = true;
194 194
195 // Reduces recipe duplicates
196 const recipes = services.filter((obj, pos, arr) => arr.map(mapObj => mapObj.recipe.id).indexOf(obj.recipe.id) === pos).map(s => s.recipe.id);
197
198 // Install recipes
199 for (const recipe of recipes) {
200 // eslint-disable-next-line
201 await this.stores.recipes._install({ recipeId: recipe });
202 }
203
195 for (const service of services) { 204 for (const service of services) {
196 this.actions.service.createFromLegacyService({ 205 this.actions.service.createFromLegacyService({
197 data: service, 206 data: service,
diff --git a/src/styles/infobox.scss b/src/styles/infobox.scss
index ad363314d..7ab094058 100644
--- a/src/styles/infobox.scss
+++ b/src/styles/infobox.scss
@@ -31,6 +31,11 @@
31 color: #FFF; 31 color: #FFF;
32 } 32 }
33 33
34 &.infobox--warning {
35 background: $theme-brand-warning;
36 color: #FFF;
37 }
38
34 .mdi { 39 .mdi {
35 margin-right: 10px; 40 margin-right: 10px;
36 } 41 }
diff --git a/src/styles/main.scss b/src/styles/main.scss
index 8afc86f98..0a082729c 100644
--- a/src/styles/main.scss
+++ b/src/styles/main.scss
@@ -20,6 +20,7 @@ $mdi-font-path: '../node_modules/mdi/fonts';
20@import './auth.scss'; 20@import './auth.scss';
21@import './tooltip.scss'; 21@import './tooltip.scss';
22@import './info-bar.scss'; 22@import './info-bar.scss';
23@import './status-bar-target-url.scss';
23@import './animations.scss'; 24@import './animations.scss';
24@import './infobox.scss'; 25@import './infobox.scss';
25@import './badge.scss'; 26@import './badge.scss';
diff --git a/src/styles/status-bar-target-url.scss b/src/styles/status-bar-target-url.scss
new file mode 100644
index 000000000..bc7438be9
--- /dev/null
+++ b/src/styles/status-bar-target-url.scss
@@ -0,0 +1,14 @@
1@import './config.scss';
2
3.status-bar-target-url {
4 height: auto;
5 background: $theme-gray-lighter;
6 padding: 4px;
7 position: absolute;
8 box-shadow: 0 0 8px rgba(black, 0.2);
9 font-size: 12px;
10 color: $theme-gray-dark;
11 bottom: 0;
12 right: 0;
13 border-top-left-radius: 5px;
14}
diff --git a/yarn.lock b/yarn.lock
index c7a6fe805..4e596b555 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -66,13 +66,6 @@ accepts@~1.0.7:
66 mime-types "~1.0.0" 66 mime-types "~1.0.0"
67 negotiator "0.4.7" 67 negotiator "0.4.7"
68 68
69accepts@~1.3.4:
70 version "1.3.4"
71 resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f"
72 dependencies:
73 mime-types "~2.1.16"
74 negotiator "0.6.1"
75
76acorn-jsx@^3.0.0: 69acorn-jsx@^3.0.0:
77 version "3.0.1" 70 version "3.0.1"
78 resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" 71 resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
@@ -91,12 +84,6 @@ after@0.8.2:
91 version "0.8.2" 84 version "0.8.2"
92 resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" 85 resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
93 86
94agent-base@^4.1.0:
95 version "4.1.1"
96 resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.1.1.tgz#92d8a4fc2524a3b09b3666a33b6c97960f23d6a4"
97 dependencies:
98 es6-promisify "^5.0.0"
99
100ajv-keywords@^1.0.0: 87ajv-keywords@^1.0.0:
101 version "1.5.1" 88 version "1.5.1"
102 resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" 89 resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
@@ -131,10 +118,6 @@ ansi-align@^2.0.0:
131 dependencies: 118 dependencies:
132 string-width "^2.0.0" 119 string-width "^2.0.0"
133 120
134ansi-escapes@^2.0.0:
135 version "2.0.0"
136 resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b"
137
138ansi-escapes@^3.0.0: 121ansi-escapes@^3.0.0:
139 version "3.0.0" 122 version "3.0.0"
140 resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" 123 resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92"
@@ -223,10 +206,6 @@ array-find-index@^1.0.1:
223 version "1.0.2" 206 version "1.0.2"
224 resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 207 resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
225 208
226array-flatten@1.1.1:
227 version "1.1.1"
228 resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
229
230array-initial@^1.0.0: 209array-initial@^1.0.0:
231 version "1.0.1" 210 version "1.0.1"
232 resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.0.1.tgz#86122222a29c1ed42347f6334111afa40f8b20ec" 211 resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.0.1.tgz#86122222a29c1ed42347f6334111afa40f8b20ec"
@@ -326,10 +305,6 @@ async-foreach@^0.1.3:
326 version "0.1.3" 305 version "0.1.3"
327 resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" 306 resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
328 307
329async-limiter@~1.0.0:
330 version "1.0.0"
331 resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
332
333async-settle@^1.0.0: 308async-settle@^1.0.0:
334 version "1.0.0" 309 version "1.0.0"
335 resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" 310 resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b"
@@ -1199,29 +1174,10 @@ bluebird-lst@^1.0.2, bluebird-lst@^1.0.3:
1199 dependencies: 1174 dependencies:
1200 bluebird "^3.5.0" 1175 bluebird "^3.5.0"
1201 1176
1202bluebird@^2.9.34:
1203 version "2.11.0"
1204 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
1205
1206bluebird@^3.1.1, bluebird@^3.4.7, bluebird@^3.5.0: 1177bluebird@^3.1.1, bluebird@^3.4.7, bluebird@^3.5.0:
1207 version "3.5.0" 1178 version "3.5.0"
1208 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" 1179 resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
1209 1180
1210body-parser@1.18.2:
1211 version "1.18.2"
1212 resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
1213 dependencies:
1214 bytes "3.0.0"
1215 content-type "~1.0.4"
1216 debug "2.6.9"
1217 depd "~1.1.1"
1218 http-errors "~1.6.2"
1219 iconv-lite "0.4.19"
1220 on-finished "~2.3.0"
1221 qs "6.5.1"
1222 raw-body "2.3.2"
1223 type-is "~1.6.15"
1224
1225boom@2.x.x: 1181boom@2.x.x:
1226 version "2.10.1" 1182 version "2.10.1"
1227 resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 1183 resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
@@ -1255,12 +1211,6 @@ braces@^1.8.2:
1255 preserve "^0.2.0" 1211 preserve "^0.2.0"
1256 repeat-element "^1.1.2" 1212 repeat-element "^1.1.2"
1257 1213
1258breakword@^1.0.3:
1259 version "1.0.3"
1260 resolved "https://registry.yarnpkg.com/breakword/-/breakword-1.0.3.tgz#71e091bbb78bb4ef003cf3ed2b2e062c6927f7dd"
1261 dependencies:
1262 wcwidth "^1.0.1"
1263
1264browserslist@^2.1.2: 1214browserslist@^2.1.2:
1265 version "2.4.0" 1215 version "2.4.0"
1266 resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.4.0.tgz#693ee93d01e66468a6348da5498e011f578f87f8" 1216 resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.4.0.tgz#693ee93d01e66468a6348da5498e011f578f87f8"
@@ -1280,10 +1230,6 @@ builtin-modules@^1.0.0, builtin-modules@^1.1.1:
1280 version "1.1.1" 1230 version "1.1.1"
1281 resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 1231 resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
1282 1232
1283bytes@3.0.0:
1284 version "3.0.0"
1285 resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
1286
1287caller-path@^0.1.0: 1233caller-path@^0.1.0:
1288 version "0.1.0" 1234 version "0.1.0"
1289 resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 1235 resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
@@ -1372,6 +1318,10 @@ chokidar@^1.4.3:
1372 optionalDependencies: 1318 optionalDependencies:
1373 fsevents "^1.0.0" 1319 fsevents "^1.0.0"
1374 1320
1321chownr@^1.0.1:
1322 version "1.0.1"
1323 resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
1324
1375chromium-pickle-js@^0.2.0: 1325chromium-pickle-js@^0.2.0:
1376 version "0.2.0" 1326 version "0.2.0"
1377 resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" 1327 resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
@@ -1392,7 +1342,7 @@ cli-boxes@^1.0.0:
1392 version "1.0.0" 1342 version "1.0.0"
1393 resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 1343 resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
1394 1344
1395cli-cursor@^2.0.0, cli-cursor@^2.1.0: 1345cli-cursor@^2.1.0:
1396 version "2.1.0" 1346 version "2.1.0"
1397 resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 1347 resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
1398 dependencies: 1348 dependencies:
@@ -1426,7 +1376,7 @@ clone@^0.2.0:
1426 version "0.2.0" 1376 version "0.2.0"
1427 resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" 1377 resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"
1428 1378
1429clone@^1.0.0, clone@^1.0.2: 1379clone@^1.0.0:
1430 version "1.0.2" 1380 version "1.0.2"
1431 resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" 1381 resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
1432 1382
@@ -1438,25 +1388,6 @@ code-point-at@^1.0.0:
1438 version "1.1.0" 1388 version "1.1.0"
1439 resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 1389 resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
1440 1390
1441coin-hive-stratum@^1.0.0:
1442 version "1.0.0"
1443 resolved "https://registry.yarnpkg.com/coin-hive-stratum/-/coin-hive-stratum-1.0.0.tgz#b7714ae3537b5701e293d654c163f2b9bfa709cb"
1444 dependencies:
1445 minimist "^1.2.0"
1446 ws "^3.2.0"
1447
1448coin-hive@^1.6.0:
1449 version "1.6.0"
1450 resolved "https://registry.yarnpkg.com/coin-hive/-/coin-hive-1.6.0.tgz#32149e7552dfddae15121a36604db0e64a10b1d1"
1451 dependencies:
1452 coin-hive-stratum "^1.0.0"
1453 elegant-spinner "^1.0.1"
1454 express "^4.15.4"
1455 log-update "^2.1.0"
1456 minimist "^1.2.0"
1457 puppeteer "^0.10.2"
1458 tty-table "^2.5.5"
1459
1460collection-map@^1.0.0: 1391collection-map@^1.0.0:
1461 version "1.0.0" 1392 version "1.0.0"
1462 resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" 1393 resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c"
@@ -1561,14 +1492,6 @@ contains-path@^0.1.0:
1561 version "0.1.0" 1492 version "0.1.0"
1562 resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" 1493 resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
1563 1494
1564content-disposition@0.5.2:
1565 version "0.5.2"
1566 resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
1567
1568content-type@~1.0.4:
1569 version "1.0.4"
1570 resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
1571
1572conventional-commit-types@^2.0.0: 1495conventional-commit-types@^2.0.0:
1573 version "2.2.0" 1496 version "2.2.0"
1574 resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz#5db95739d6c212acbe7b6f656a11b940baa68946" 1497 resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz#5db95739d6c212acbe7b6f656a11b940baa68946"
@@ -1577,10 +1500,6 @@ convert-source-map@^1.1.1, convert-source-map@^1.5.0:
1577 version "1.5.0" 1500 version "1.5.0"
1578 resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" 1501 resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5"
1579 1502
1580cookie-signature@1.0.6:
1581 version "1.0.6"
1582 resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
1583
1584cookie@0.3.1: 1503cookie@0.3.1:
1585 version "0.3.1" 1504 version "0.3.1"
1586 resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 1505 resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
@@ -1650,29 +1569,6 @@ crypto-random-string@^1.0.0:
1650 version "1.0.0" 1569 version "1.0.0"
1651 resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" 1570 resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
1652 1571
1653csv-generate@^1.0.0:
1654 version "1.0.0"
1655 resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-1.0.0.tgz#bd52886859d0c925f3e51f60f3abed262fa15caf"
1656
1657csv-parse@^1.2.0:
1658 version "1.2.3"
1659 resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-1.2.3.tgz#466206b51eaf77ccb50c3fadebd098cdeb2c69e7"
1660
1661csv-stringify@^1.0.0:
1662 version "1.0.4"
1663 resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-1.0.4.tgz#bc18bab9ad4cef3195fd257980b58b479c42d3e5"
1664 dependencies:
1665 lodash.get "^4.0.0"
1666
1667csv@^1.1.1:
1668 version "1.1.1"
1669 resolved "https://registry.yarnpkg.com/csv/-/csv-1.1.1.tgz#d9952d59b1f964a7afbcdd804d6818a73199a477"
1670 dependencies:
1671 csv-generate "^1.0.0"
1672 csv-parse "^1.2.0"
1673 csv-stringify "^1.0.0"
1674 stream-transform "^0.1.0"
1675
1676cuint@^0.2.1, cuint@^0.2.2: 1572cuint@^0.2.1, cuint@^0.2.2:
1677 version "0.2.2" 1573 version "0.2.2"
1678 resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" 1574 resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"
@@ -1732,12 +1628,6 @@ debug@2.3.3:
1732 dependencies: 1628 dependencies:
1733 ms "0.7.2" 1629 ms "0.7.2"
1734 1630
1735debug@2.6.9, debug@^2.4.1:
1736 version "2.6.9"
1737 resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
1738 dependencies:
1739 ms "2.0.0"
1740
1741debug@^2.1.3, debug@^2.2.0, debug@^2.5.1, debug@^2.6.1, debug@^2.6.3, debug@^2.6.6, debug@^2.6.8: 1631debug@^2.1.3, debug@^2.2.0, debug@^2.5.1, debug@^2.6.1, debug@^2.6.3, debug@^2.6.6, debug@^2.6.8:
1742 version "2.6.8" 1632 version "2.6.8"
1743 resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" 1633 resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
@@ -1782,12 +1672,6 @@ default-resolution@^2.0.0:
1782 version "2.0.0" 1672 version "2.0.0"
1783 resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" 1673 resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684"
1784 1674
1785defaults@^1.0.3:
1786 version "1.0.3"
1787 resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
1788 dependencies:
1789 clone "^1.0.2"
1790
1791define-properties@^1.1.2: 1675define-properties@^1.1.2:
1792 version "1.1.2" 1676 version "1.1.2"
1793 resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 1677 resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
@@ -1819,18 +1703,10 @@ depd@0.4.4:
1819 version "0.4.4" 1703 version "0.4.4"
1820 resolved "https://registry.yarnpkg.com/depd/-/depd-0.4.4.tgz#07091fae75f97828d89b4a02a2d4778f0e7c0662" 1704 resolved "https://registry.yarnpkg.com/depd/-/depd-0.4.4.tgz#07091fae75f97828d89b4a02a2d4778f0e7c0662"
1821 1705
1822depd@1.1.1, depd@~1.1.1:
1823 version "1.1.1"
1824 resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
1825
1826destroy@1.0.3: 1706destroy@1.0.3:
1827 version "1.0.3" 1707 version "1.0.3"
1828 resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.3.tgz#b433b4724e71fd8551d9885174851c5fc377e2c9" 1708 resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.3.tgz#b433b4724e71fd8551d9885174851c5fc377e2c9"
1829 1709
1830destroy@~1.0.4:
1831 version "1.0.4"
1832 resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
1833
1834detect-file@^0.1.0: 1710detect-file@^0.1.0:
1835 version "0.1.0" 1711 version "0.1.0"
1836 resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" 1712 resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63"
@@ -1918,10 +1794,6 @@ ee-first@1.0.5:
1918 version "1.0.5" 1794 version "1.0.5"
1919 resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.0.5.tgz#8c9b212898d8cd9f1a9436650ce7be202c9e9ff0" 1795 resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.0.5.tgz#8c9b212898d8cd9f1a9436650ce7be202c9e9ff0"
1920 1796
1921ee-first@1.1.1:
1922 version "1.1.1"
1923 resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
1924
1925electron-builder-http@19.15.0, electron-builder-http@~19.15.0: 1797electron-builder-http@19.15.0, electron-builder-http@~19.15.0:
1926 version "19.15.0" 1798 version "19.15.0"
1927 resolved "https://registry.yarnpkg.com/electron-builder-http/-/electron-builder-http-19.15.0.tgz#d34cc28cf9db9ad28494283be8116e83a2e78f4c" 1799 resolved "https://registry.yarnpkg.com/electron-builder-http/-/electron-builder-http-19.15.0.tgz#d34cc28cf9db9ad28494283be8116e83a2e78f4c"
@@ -2161,26 +2033,18 @@ electron-window-state@^4.1.0:
2161 jsonfile "^2.2.3" 2033 jsonfile "^2.2.3"
2162 mkdirp "^0.5.1" 2034 mkdirp "^0.5.1"
2163 2035
2164electron@^1.7.6: 2036electron@^1.7.9:
2165 version "1.7.6" 2037 version "1.7.9"
2166 resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.6.tgz#fb69ea31bd03df0eff247f26f0b538bd29b6ee72" 2038 resolved "https://registry.yarnpkg.com/electron/-/electron-1.7.9.tgz#add54e9f8f83ed02f6519ec10135f698b19336cf"
2167 dependencies: 2039 dependencies:
2168 "@types/node" "^7.0.18" 2040 "@types/node" "^7.0.18"
2169 electron-download "^3.0.1" 2041 electron-download "^3.0.1"
2170 extract-zip "^1.0.3" 2042 extract-zip "^1.0.3"
2171 2043
2172elegant-spinner@^1.0.1:
2173 version "1.0.1"
2174 resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
2175
2176emojis-list@^2.0.0: 2044emojis-list@^2.0.0:
2177 version "2.1.0" 2045 version "2.1.0"
2178 resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" 2046 resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
2179 2047
2180encodeurl@~1.0.1:
2181 version "1.0.1"
2182 resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
2183
2184encoding@^0.1.11, encoding@^0.1.12: 2048encoding@^0.1.11, encoding@^0.1.12:
2185 version "0.1.12" 2049 version "0.1.12"
2186 resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 2050 resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
@@ -2275,16 +2139,10 @@ es6-iterator@2, es6-iterator@^2.0.1:
2275 es5-ext "^0.10.14" 2139 es5-ext "^0.10.14"
2276 es6-symbol "^3.1" 2140 es6-symbol "^3.1"
2277 2141
2278es6-promise@^4.0.3, es6-promise@^4.0.5: 2142es6-promise@^4.0.5:
2279 version "4.1.1" 2143 version "4.1.1"
2280 resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" 2144 resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a"
2281 2145
2282es6-promisify@^5.0.0:
2283 version "5.0.0"
2284 resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
2285 dependencies:
2286 es6-promise "^4.0.3"
2287
2288es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1: 2146es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1:
2289 version "3.1.1" 2147 version "3.1.1"
2290 resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 2148 resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
@@ -2305,10 +2163,6 @@ escape-html@1.0.1:
2305 version "1.0.1" 2163 version "1.0.1"
2306 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.1.tgz#181a286ead397a39a92857cfb1d43052e356bff0" 2164 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.1.tgz#181a286ead397a39a92857cfb1d43052e356bff0"
2307 2165
2308escape-html@~1.0.3:
2309 version "1.0.3"
2310 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
2311
2312escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 2166escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
2313 version "1.0.5" 2167 version "1.0.5"
2314 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 2168 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
@@ -2467,10 +2321,6 @@ esutils@^2.0.2:
2467 version "2.0.2" 2321 version "2.0.2"
2468 resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 2322 resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
2469 2323
2470etag@~1.8.1:
2471 version "1.8.1"
2472 resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
2473
2474event-kit@^2.0.0: 2324event-kit@^2.0.0:
2475 version "2.3.0" 2325 version "2.3.0"
2476 resolved "https://registry.yarnpkg.com/event-kit/-/event-kit-2.3.0.tgz#459ba0646d4b7dbca5d9bf2b3c4e2d0103e85e15" 2326 resolved "https://registry.yarnpkg.com/event-kit/-/event-kit-2.3.0.tgz#459ba0646d4b7dbca5d9bf2b3c4e2d0103e85e15"
@@ -2511,41 +2361,6 @@ expand-tilde@^2.0.2:
2511 dependencies: 2361 dependencies:
2512 homedir-polyfill "^1.0.1" 2362 homedir-polyfill "^1.0.1"
2513 2363
2514express@^4.15.4:
2515 version "4.16.1"
2516 resolved "https://registry.yarnpkg.com/express/-/express-4.16.1.tgz#6b33b560183c9b253b7b62144df33a4654ac9ed0"
2517 dependencies:
2518 accepts "~1.3.4"
2519 array-flatten "1.1.1"
2520 body-parser "1.18.2"
2521 content-disposition "0.5.2"
2522 content-type "~1.0.4"
2523 cookie "0.3.1"
2524 cookie-signature "1.0.6"
2525 debug "2.6.9"
2526 depd "~1.1.1"
2527 encodeurl "~1.0.1"
2528 escape-html "~1.0.3"
2529 etag "~1.8.1"
2530 finalhandler "1.1.0"
2531 fresh "0.5.2"
2532 merge-descriptors "1.0.1"
2533 methods "~1.1.2"
2534 on-finished "~2.3.0"
2535 parseurl "~1.3.2"
2536 path-to-regexp "0.1.7"
2537 proxy-addr "~2.0.2"
2538 qs "6.5.1"
2539 range-parser "~1.2.0"
2540 safe-buffer "5.1.1"
2541 send "0.16.1"
2542 serve-static "1.13.1"
2543 setprototypeof "1.1.0"
2544 statuses "~1.3.1"
2545 type-is "~1.6.15"
2546 utils-merge "1.0.1"
2547 vary "~1.1.2"
2548
2549extend-shallow@^2.0.1: 2364extend-shallow@^2.0.1:
2550 version "2.0.1" 2365 version "2.0.1"
2551 resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 2366 resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
@@ -2570,7 +2385,7 @@ extglob@^0.3.1:
2570 dependencies: 2385 dependencies:
2571 is-extglob "^1.0.0" 2386 is-extglob "^1.0.0"
2572 2387
2573extract-zip@^1.0.3, extract-zip@^1.6.5: 2388extract-zip@^1.0.3:
2574 version "1.6.5" 2389 version "1.6.5"
2575 resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.5.tgz#99a06735b6ea20ea9b705d779acffcc87cff0440" 2390 resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.5.tgz#99a06735b6ea20ea9b705d779acffcc87cff0440"
2576 dependencies: 2391 dependencies:
@@ -2661,18 +2476,6 @@ finalhandler@0.1.0:
2661 debug "1.0.4" 2476 debug "1.0.4"
2662 escape-html "1.0.1" 2477 escape-html "1.0.1"
2663 2478
2664finalhandler@1.1.0:
2665 version "1.1.0"
2666 resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
2667 dependencies:
2668 debug "2.6.9"
2669 encodeurl "~1.0.1"
2670 escape-html "~1.0.3"
2671 on-finished "~2.3.0"
2672 parseurl "~1.3.2"
2673 statuses "~1.3.1"
2674 unpipe "~1.0.0"
2675
2676find-cache-dir@^0.1.1: 2479find-cache-dir@^0.1.1:
2677 version "0.1.1" 2480 version "0.1.1"
2678 resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" 2481 resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
@@ -2772,18 +2575,10 @@ form-data@~2.1.1:
2772 combined-stream "^1.0.5" 2575 combined-stream "^1.0.5"
2773 mime-types "^2.1.12" 2576 mime-types "^2.1.12"
2774 2577
2775forwarded@~0.1.2:
2776 version "0.1.2"
2777 resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
2778
2779fresh@0.2.2: 2578fresh@0.2.2:
2780 version "0.2.2" 2579 version "0.2.2"
2781 resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.2.2.tgz#9731dcf5678c7faeb44fb903c4f72df55187fa77" 2580 resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.2.2.tgz#9731dcf5678c7faeb44fb903c4f72df55187fa77"
2782 2581
2783fresh@0.5.2:
2784 version "0.5.2"
2785 resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
2786
2787fs-exists-sync@^0.1.0: 2582fs-exists-sync@^0.1.0:
2788 version "0.1.0" 2583 version "0.1.0"
2789 resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" 2584 resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
@@ -2857,7 +2652,7 @@ fstream-ignore@^1.0.5:
2857 inherits "2" 2652 inherits "2"
2858 minimatch "^3.0.0" 2653 minimatch "^3.0.0"
2859 2654
2860fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@^1.0.8: 2655fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
2861 version "1.0.11" 2656 version "1.0.11"
2862 resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 2657 resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
2863 dependencies: 2658 dependencies:
@@ -3364,15 +3159,6 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.5.0:
3364 version "2.5.0" 3159 version "2.5.0"
3365 resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" 3160 resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
3366 3161
3367http-errors@1.6.2, http-errors@~1.6.2:
3368 version "1.6.2"
3369 resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
3370 dependencies:
3371 depd "1.1.1"
3372 inherits "2.0.3"
3373 setprototypeof "1.0.3"
3374 statuses ">= 1.3.1 < 2"
3375
3376http-signature@~1.1.0: 3162http-signature@~1.1.0:
3377 version "1.1.1" 3163 version "1.1.1"
3378 resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 3164 resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
@@ -3381,13 +3167,6 @@ http-signature@~1.1.0:
3381 jsprim "^1.2.2" 3167 jsprim "^1.2.2"
3382 sshpk "^1.7.0" 3168 sshpk "^1.7.0"
3383 3169
3384https-proxy-agent@^2.1.0:
3385 version "2.1.0"
3386 resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.1.0.tgz#1391bee7fd66aeabc0df2a1fa90f58954f43e443"
3387 dependencies:
3388 agent-base "^4.1.0"
3389 debug "^2.4.1"
3390
3391hyperquest@~1.2.0: 3170hyperquest@~1.2.0:
3392 version "1.2.0" 3171 version "1.2.0"
3393 resolved "https://registry.yarnpkg.com/hyperquest/-/hyperquest-1.2.0.tgz#39e1fef66888dc7ce0dec6c0dd814f6fc8944ad5" 3172 resolved "https://registry.yarnpkg.com/hyperquest/-/hyperquest-1.2.0.tgz#39e1fef66888dc7ce0dec6c0dd814f6fc8944ad5"
@@ -3395,11 +3174,7 @@ hyperquest@~1.2.0:
3395 duplexer2 "~0.0.2" 3174 duplexer2 "~0.0.2"
3396 through2 "~0.6.3" 3175 through2 "~0.6.3"
3397 3176
3398iconv-lite@0.4.19, iconv-lite@^0.4.17: 3177iconv-lite@^0.4.17, iconv-lite@~0.4.13:
3399 version "0.4.19"
3400 resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
3401
3402iconv-lite@~0.4.13:
3403 version "0.4.18" 3178 version "0.4.18"
3404 resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" 3179 resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2"
3405 3180
@@ -3440,7 +3215,7 @@ inherits@1:
3440 version "1.0.2" 3215 version "1.0.2"
3441 resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" 3216 resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
3442 3217
3443inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: 3218inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
3444 version "2.0.3" 3219 version "2.0.3"
3445 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 3220 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
3446 3221
@@ -3514,10 +3289,6 @@ invert-kv@^1.0.0:
3514 version "1.0.0" 3289 version "1.0.0"
3515 resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 3290 resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
3516 3291
3517ipaddr.js@1.5.2:
3518 version "1.5.2"
3519 resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0"
3520
3521is-absolute@^0.2.3: 3292is-absolute@^0.2.3:
3522 version "0.2.6" 3293 version "0.2.6"
3523 resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" 3294 resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb"
@@ -4187,14 +3958,6 @@ log-symbols@^1.0.2:
4187 dependencies: 3958 dependencies:
4188 chalk "^1.0.0" 3959 chalk "^1.0.0"
4189 3960
4190log-update@^2.1.0:
4191 version "2.1.0"
4192 resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.1.0.tgz#ea37258b5354edb02e73b29190016c87d1c87141"
4193 dependencies:
4194 ansi-escapes "^2.0.0"
4195 cli-cursor "^2.0.0"
4196 wrap-ansi "^3.0.1"
4197
4198longest@^1.0.1: 3961longest@^1.0.1:
4199 version "1.0.1" 3962 version "1.0.1"
4200 resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" 3963 resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
@@ -4264,10 +4027,6 @@ mdi@^1.9.33:
4264 version "1.9.33" 4027 version "1.9.33"
4265 resolved "https://registry.yarnpkg.com/mdi/-/mdi-1.9.33.tgz#3caf6d95fc6b800633630bd62ba0cf1fbde6b2e2" 4028 resolved "https://registry.yarnpkg.com/mdi/-/mdi-1.9.33.tgz#3caf6d95fc6b800633630bd62ba0cf1fbde6b2e2"
4266 4029
4267media-typer@0.3.0:
4268 version "0.3.0"
4269 resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
4270
4271mem@^1.1.0: 4030mem@^1.1.0:
4272 version "1.1.0" 4031 version "1.1.0"
4273 resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" 4032 resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
@@ -4289,10 +4048,6 @@ meow@^3.1.0, meow@^3.7.0:
4289 redent "^1.0.0" 4048 redent "^1.0.0"
4290 trim-newlines "^1.0.0" 4049 trim-newlines "^1.0.0"
4291 4050
4292merge-descriptors@1.0.1:
4293 version "1.0.1"
4294 resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
4295
4296merge-stream@^0.1.7: 4051merge-stream@^0.1.7:
4297 version "0.1.8" 4052 version "0.1.8"
4298 resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-0.1.8.tgz#48a07b3b4a121d74a3edbfdcdb4b08adbf0240b1" 4053 resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-0.1.8.tgz#48a07b3b4a121d74a3edbfdcdb4b08adbf0240b1"
@@ -4305,14 +4060,6 @@ merge-stream@^1.0.0:
4305 dependencies: 4060 dependencies:
4306 readable-stream "^2.0.1" 4061 readable-stream "^2.0.1"
4307 4062
4308merge@^1.2.0:
4309 version "1.2.0"
4310 resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
4311
4312methods@~1.1.2:
4313 version "1.1.2"
4314 resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
4315
4316micromatch@^2.1.5, micromatch@^2.3.7: 4063micromatch@^2.1.5, micromatch@^2.3.7:
4317 version "2.3.11" 4064 version "2.3.11"
4318 resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 4065 resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
@@ -4335,7 +4082,7 @@ mime-db@~1.30.0:
4335 version "1.30.0" 4082 version "1.30.0"
4336 resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" 4083 resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
4337 4084
4338mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.7: 4085mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.7:
4339 version "2.1.17" 4086 version "2.1.17"
4340 resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" 4087 resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
4341 dependencies: 4088 dependencies:
@@ -4349,10 +4096,6 @@ mime@1.2.11:
4349 version "1.2.11" 4096 version "1.2.11"
4350 resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" 4097 resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10"
4351 4098
4352mime@1.4.1:
4353 version "1.4.1"
4354 resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
4355
4356mime@^1.3.4, mime@^1.3.6: 4099mime@^1.3.4, mime@^1.3.6:
4357 version "1.4.0" 4100 version "1.4.0"
4358 resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.0.tgz#69e9e0db51d44f2a3b56e48b7817d7d137f1a343" 4101 resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.0.tgz#69e9e0db51d44f2a3b56e48b7817d7d137f1a343"
@@ -4388,6 +4131,18 @@ minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
4388 version "1.2.0" 4131 version "1.2.0"
4389 resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 4132 resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
4390 4133
4134minipass@^2.2.1:
4135 version "2.2.1"
4136 resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.2.1.tgz#5ada97538b1027b4cf7213432428578cb564011f"
4137 dependencies:
4138 yallist "^3.0.0"
4139
4140minizlib@^1.0.4:
4141 version "1.0.4"
4142 resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.0.4.tgz#8ebb51dd8bbe40b0126b5633dbb36b284a2f523c"
4143 dependencies:
4144 minipass "^2.2.1"
4145
4391mkdirp@0.5.0: 4146mkdirp@0.5.0:
4392 version "0.5.0" 4147 version "0.5.0"
4393 resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" 4148 resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
@@ -4436,10 +4191,6 @@ moment@2.x.x, moment@^2.17.1:
4436 version "2.18.1" 4191 version "2.18.1"
4437 resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" 4192 resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"
4438 4193
4439mout@^0.11.0:
4440 version "0.11.1"
4441 resolved "https://registry.yarnpkg.com/mout/-/mout-0.11.1.tgz#ba3611df5f0e5b1ffbfd01166b8f02d1f5fa2b99"
4442
4443ms@0.6.2: 4194ms@0.6.2:
4444 version "0.6.2" 4195 version "0.6.2"
4445 resolved "https://registry.yarnpkg.com/ms/-/ms-0.6.2.tgz#d89c2124c6fdc1353d65a8b77bf1aac4b193708c" 4196 resolved "https://registry.yarnpkg.com/ms/-/ms-0.6.2.tgz#d89c2124c6fdc1353d65a8b77bf1aac4b193708c"
@@ -4470,14 +4221,10 @@ mute-stream@0.0.4:
4470 version "0.0.4" 4221 version "0.0.4"
4471 resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.4.tgz#a9219960a6d5d5d046597aee51252c6655f7177e" 4222 resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.4.tgz#a9219960a6d5d5d046597aee51252c6655f7177e"
4472 4223
4473mute-stream@0.0.7: 4224mute-stream@0.0.7, mute-stream@~0.0.4:
4474 version "0.0.7" 4225 version "0.0.7"
4475 resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 4226 resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
4476 4227
4477mute-stream@~0.0.4:
4478 version "0.0.5"
4479 resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
4480
4481nan@^2.0.0, nan@^2.0.5, nan@^2.3.0, nan@^2.3.2: 4228nan@^2.0.0, nan@^2.0.5, nan@^2.3.0, nan@^2.3.2:
4482 version "2.7.0" 4229 version "2.7.0"
4483 resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" 4230 resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46"
@@ -4739,12 +4486,6 @@ on-finished@2.1.0:
4739 dependencies: 4486 dependencies:
4740 ee-first "1.0.5" 4487 ee-first "1.0.5"
4741 4488
4742on-finished@~2.3.0:
4743 version "2.3.0"
4744 resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
4745 dependencies:
4746 ee-first "1.1.1"
4747
4748once@^1.3.0, once@^1.3.2, once@^1.3.3, once@^1.4.0: 4489once@^1.3.0, once@^1.3.2, once@^1.3.3, once@^1.4.0:
4749 version "1.4.0" 4490 version "1.4.0"
4750 resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 4491 resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
@@ -4909,10 +4650,6 @@ parseurl@~1.3.0:
4909 version "1.3.1" 4650 version "1.3.1"
4910 resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" 4651 resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
4911 4652
4912parseurl@~1.3.2:
4913 version "1.3.2"
4914 resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
4915
4916path-dirname@^1.0.0: 4653path-dirname@^1.0.0:
4917 version "1.0.2" 4654 version "1.0.2"
4918 resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 4655 resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
@@ -4953,10 +4690,6 @@ path-root@^0.1.1:
4953 dependencies: 4690 dependencies:
4954 path-root-regex "^0.1.0" 4691 path-root-regex "^0.1.0"
4955 4692
4956path-to-regexp@0.1.7:
4957 version "0.1.7"
4958 resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
4959
4960path-type@^1.0.0: 4693path-type@^1.0.0:
4961 version "1.1.0" 4694 version "1.1.0"
4962 resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 4695 resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
@@ -5080,17 +4813,6 @@ prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8:
5080 fbjs "^0.8.9" 4813 fbjs "^0.8.9"
5081 loose-envify "^1.3.1" 4814 loose-envify "^1.3.1"
5082 4815
5083proxy-addr@~2.0.2:
5084 version "2.0.2"
5085 resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec"
5086 dependencies:
5087 forwarded "~0.1.2"
5088 ipaddr.js "1.5.2"
5089
5090proxy-from-env@^1.0.0:
5091 version "1.0.0"
5092 resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
5093
5094proxy-middleware@~0.15.0: 4816proxy-middleware@~0.15.0:
5095 version "0.15.0" 4817 version "0.15.0"
5096 resolved "https://registry.yarnpkg.com/proxy-middleware/-/proxy-middleware-0.15.0.tgz#a3fdf1befb730f951965872ac2f6074c61477a56" 4818 resolved "https://registry.yarnpkg.com/proxy-middleware/-/proxy-middleware-0.15.0.tgz#a3fdf1befb730f951965872ac2f6074c61477a56"
@@ -5121,27 +4843,10 @@ punycode@^1.4.1:
5121 version "1.4.1" 4843 version "1.4.1"
5122 resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 4844 resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
5123 4845
5124puppeteer@^0.10.2:
5125 version "0.10.2"
5126 resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-0.10.2.tgz#b4a959a722bf626ca481f2aeba11fdb810f2c98f"
5127 dependencies:
5128 debug "^2.6.8"
5129 extract-zip "^1.6.5"
5130 https-proxy-agent "^2.1.0"
5131 mime "^1.3.4"
5132 progress "^2.0.0"
5133 proxy-from-env "^1.0.0"
5134 rimraf "^2.6.1"
5135 ws "^3.0.0"
5136
5137q@^1.1.2: 4846q@^1.1.2:
5138 version "1.5.0" 4847 version "1.5.0"
5139 resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" 4848 resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1"
5140 4849
5141qs@6.5.1:
5142 version "6.5.1"
5143 resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
5144
5145qs@~6.4.0: 4850qs@~6.4.0:
5146 version "6.4.0" 4851 version "6.4.0"
5147 resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 4852 resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
@@ -5170,19 +4875,6 @@ range-parser@~1.0.0:
5170 version "1.0.3" 4875 version "1.0.3"
5171 resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" 4876 resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175"
5172 4877
5173range-parser@~1.2.0:
5174 version "1.2.0"
5175 resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
5176
5177raw-body@2.3.2:
5178 version "2.3.2"
5179 resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
5180 dependencies:
5181 bytes "3.0.0"
5182 http-errors "1.6.2"
5183 iconv-lite "0.4.19"
5184 unpipe "1.0.0"
5185
5186rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: 4878rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1:
5187 version "1.2.1" 4879 version "1.2.1"
5188 resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" 4880 resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
@@ -5592,7 +5284,7 @@ rxjs@^5.0.0-beta.12, rxjs@^5.0.1, rxjs@^5.1.1:
5592 dependencies: 5284 dependencies:
5593 symbol-observable "^1.0.1" 5285 symbol-observable "^1.0.1"
5594 5286
5595safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 5287safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
5596 version "5.1.1" 5288 version "5.1.1"
5597 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 5289 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
5598 5290
@@ -5642,24 +5334,6 @@ semver@~5.3.0:
5642 version "5.3.0" 5334 version "5.3.0"
5643 resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 5335 resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
5644 5336
5645send@0.16.1:
5646 version "0.16.1"
5647 resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3"
5648 dependencies:
5649 debug "2.6.9"
5650 depd "~1.1.1"
5651 destroy "~1.0.4"
5652 encodeurl "~1.0.1"
5653 escape-html "~1.0.3"
5654 etag "~1.8.1"
5655 fresh "0.5.2"
5656 http-errors "~1.6.2"
5657 mime "1.4.1"
5658 ms "2.0.0"
5659 on-finished "~2.3.0"
5660 range-parser "~1.2.0"
5661 statuses "~1.3.1"
5662
5663send@0.8.5: 5337send@0.8.5:
5664 version "0.8.5" 5338 version "0.8.5"
5665 resolved "https://registry.yarnpkg.com/send/-/send-0.8.5.tgz#37f708216e6f50c175e74c69fec53484e2fd82c7" 5339 resolved "https://registry.yarnpkg.com/send/-/send-0.8.5.tgz#37f708216e6f50c175e74c69fec53484e2fd82c7"
@@ -5682,15 +5356,6 @@ serve-index@~1.1.4:
5682 batch "0.5.1" 5356 batch "0.5.1"
5683 parseurl "~1.3.0" 5357 parseurl "~1.3.0"
5684 5358
5685serve-static@1.13.1:
5686 version "1.13.1"
5687 resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719"
5688 dependencies:
5689 encodeurl "~1.0.1"
5690 escape-html "~1.0.3"
5691 parseurl "~1.3.2"
5692 send "0.16.1"
5693
5694serve-static@~1.5.2: 5359serve-static@~1.5.2:
5695 version "1.5.4" 5360 version "1.5.4"
5696 resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.5.4.tgz#819fb37ae46bd02dd520b77fcf7fd8f5112f9782" 5361 resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.5.4.tgz#819fb37ae46bd02dd520b77fcf7fd8f5112f9782"
@@ -5712,14 +5377,6 @@ setimmediate@^1.0.5:
5712 version "1.0.5" 5377 version "1.0.5"
5713 resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 5378 resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
5714 5379
5715setprototypeof@1.0.3:
5716 version "1.0.3"
5717 resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
5718
5719setprototypeof@1.1.0:
5720 version "1.1.0"
5721 resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
5722
5723shebang-command@^1.2.0: 5380shebang-command@^1.2.0:
5724 version "1.2.0" 5381 version "1.2.0"
5725 resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 5382 resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
@@ -5756,15 +5413,6 @@ slice-ansi@0.0.4:
5756 version "0.0.4" 5413 version "0.0.4"
5757 resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" 5414 resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
5758 5415
5759smartwrap@^1.0.7:
5760 version "1.0.9"
5761 resolved "https://registry.yarnpkg.com/smartwrap/-/smartwrap-1.0.9.tgz#7001aa8331482b6fc5021574d68ef04460bb21ca"
5762 dependencies:
5763 breakword "^1.0.3"
5764 merge "^1.2.0"
5765 wcwidth "^1.0.1"
5766 yargs "^8.0.1"
5767
5768smoothscroll-polyfill@^0.3.4: 5416smoothscroll-polyfill@^0.3.4:
5769 version "0.3.6" 5417 version "0.3.6"
5770 resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.3.6.tgz#492be845195157cdc2fc529a95d89e7a71509172" 5418 resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.3.6.tgz#492be845195157cdc2fc529a95d89e7a71509172"
@@ -5901,10 +5549,6 @@ stat-mode@^0.2.2:
5901 version "0.2.2" 5549 version "0.2.2"
5902 resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" 5550 resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502"
5903 5551
5904"statuses@>= 1.3.1 < 2", statuses@~1.3.1:
5905 version "1.3.1"
5906 resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
5907
5908stdout-stream@^1.4.0: 5552stdout-stream@^1.4.0:
5909 version "1.4.0" 5553 version "1.4.0"
5910 resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" 5554 resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b"
@@ -5919,10 +5563,6 @@ stream-shift@^1.0.0:
5919 version "1.0.0" 5563 version "1.0.0"
5920 resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" 5564 resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
5921 5565
5922stream-transform@^0.1.0:
5923 version "0.1.2"
5924 resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-0.1.2.tgz#7d8e6b4e03ac4781778f8c79517501bfb0762a9f"
5925
5926strict-uri-encode@^1.0.0: 5566strict-uri-encode@^1.0.0:
5927 version "1.1.0" 5567 version "1.1.0"
5928 resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" 5568 resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
@@ -5941,7 +5581,7 @@ string-width@^1.0.1, string-width@^1.0.2:
5941 is-fullwidth-code-point "^1.0.0" 5581 is-fullwidth-code-point "^1.0.0"
5942 strip-ansi "^3.0.0" 5582 strip-ansi "^3.0.0"
5943 5583
5944string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: 5584string-width@^2.0.0, string-width@^2.1.0:
5945 version "2.1.1" 5585 version "2.1.1"
5946 resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 5586 resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
5947 dependencies: 5587 dependencies:
@@ -6076,17 +5716,7 @@ tar-pack@^3.4.0:
6076 tar "^2.2.1" 5716 tar "^2.2.1"
6077 uid-number "^0.0.6" 5717 uid-number "^0.0.6"
6078 5718
6079tar.gz@^1.0.5: 5719tar@^2.0.0, tar@^2.2.1:
6080 version "1.0.5"
6081 resolved "https://registry.yarnpkg.com/tar.gz/-/tar.gz-1.0.5.tgz#e1ada7e45ef2241b4b1ee58123c8f40b5d3c1bc4"
6082 dependencies:
6083 bluebird "^2.9.34"
6084 commander "^2.8.1"
6085 fstream "^1.0.8"
6086 mout "^0.11.0"
6087 tar "^2.1.1"
6088
6089tar@^2.0.0, tar@^2.1.1, tar@^2.2.1:
6090 version "2.2.1" 5720 version "2.2.1"
6091 resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 5721 resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
6092 dependencies: 5722 dependencies:
@@ -6094,6 +5724,16 @@ tar@^2.0.0, tar@^2.1.1, tar@^2.2.1:
6094 fstream "^1.0.2" 5724 fstream "^1.0.2"
6095 inherits "2" 5725 inherits "2"
6096 5726
5727tar@^4.0.2:
5728 version "4.0.2"
5729 resolved "https://registry.yarnpkg.com/tar/-/tar-4.0.2.tgz#e8e22bf3eec330e5c616d415a698395e294e8fad"
5730 dependencies:
5731 chownr "^1.0.1"
5732 minipass "^2.2.1"
5733 minizlib "^1.0.4"
5734 mkdirp "^0.5.0"
5735 yallist "^3.0.2"
5736
6097tempfile@^1.1.1: 5737tempfile@^1.1.1:
6098 version "1.1.1" 5738 version "1.1.1"
6099 resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" 5739 resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2"
@@ -6234,19 +5874,6 @@ tryit@^1.0.1:
6234 version "1.0.3" 5874 version "1.0.3"
6235 resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" 5875 resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
6236 5876
6237tty-table@^2.5.5:
6238 version "2.5.5"
6239 resolved "https://registry.yarnpkg.com/tty-table/-/tty-table-2.5.5.tgz#248ef188468ff1dff75a379c77cbe1f1c81c8a79"
6240 dependencies:
6241 chalk "^1.1.0"
6242 csv "^1.1.1"
6243 merge "^1.2.0"
6244 smartwrap "^1.0.7"
6245 strip-ansi "^3.0.0"
6246 use-strict "^1.0.1"
6247 wcwidth "^1.0.1"
6248 yargs "^8.0.1"
6249
6250tunnel-agent@^0.6.0: 5877tunnel-agent@^0.6.0:
6251 version "0.6.0" 5878 version "0.6.0"
6252 resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 5879 resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
@@ -6263,13 +5890,6 @@ type-check@~0.3.2:
6263 dependencies: 5890 dependencies:
6264 prelude-ls "~1.1.2" 5891 prelude-ls "~1.1.2"
6265 5892
6266type-is@~1.6.15:
6267 version "1.6.15"
6268 resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
6269 dependencies:
6270 media-typer "0.3.0"
6271 mime-types "~2.1.15"
6272
6273typedarray@^0.0.6: 5893typedarray@^0.0.6:
6274 version "0.0.6" 5894 version "0.0.6"
6275 resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 5895 resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
@@ -6286,10 +5906,6 @@ ultron@1.0.x:
6286 version "1.0.2" 5906 version "1.0.2"
6287 resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 5907 resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
6288 5908
6289ultron@~1.1.0:
6290 version "1.1.0"
6291 resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864"
6292
6293unc-path-regex@^0.1.0: 5909unc-path-regex@^0.1.0:
6294 version "0.1.2" 5910 version "0.1.2"
6295 resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" 5911 resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
@@ -6333,10 +5949,6 @@ universalify@^0.1.0:
6333 version "0.1.1" 5949 version "0.1.1"
6334 resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" 5950 resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
6335 5951
6336unpipe@1.0.0, unpipe@~1.0.0:
6337 version "1.0.0"
6338 resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
6339
6340unzip-response@^2.0.1: 5952unzip-response@^2.0.1:
6341 version "2.0.1" 5953 version "2.0.1"
6342 resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" 5954 resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
@@ -6360,10 +5972,6 @@ url-parse-lax@^1.0.0:
6360 dependencies: 5972 dependencies:
6361 prepend-http "^1.0.1" 5973 prepend-http "^1.0.1"
6362 5974
6363use-strict@^1.0.1:
6364 version "1.0.1"
6365 resolved "https://registry.yarnpkg.com/use-strict/-/use-strict-1.0.1.tgz#0bb80d94f49a4a05192b84a8c7d34e95f1a7e3a0"
6366
6367user-home@^1.1.1: 5975user-home@^1.1.1:
6368 version "1.1.1" 5976 version "1.1.1"
6369 resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 5977 resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
@@ -6380,10 +5988,6 @@ utils-merge@1.0.0:
6380 version "1.0.0" 5988 version "1.0.0"
6381 resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" 5989 resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
6382 5990
6383utils-merge@1.0.1:
6384 version "1.0.1"
6385 resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
6386
6387uuid-1345@^0.99.6: 5991uuid-1345@^0.99.6:
6388 version "0.99.6" 5992 version "0.99.6"
6389 resolved "https://registry.yarnpkg.com/uuid-1345/-/uuid-1345-0.99.6.tgz#b1270ae015a7721c7adec6c46ec169c6098aed40" 5993 resolved "https://registry.yarnpkg.com/uuid-1345/-/uuid-1345-0.99.6.tgz#b1270ae015a7721c7adec6c46ec169c6098aed40"
@@ -6415,10 +6019,6 @@ validate-npm-package-license@^3.0.1:
6415 spdx-correct "~1.0.0" 6019 spdx-correct "~1.0.0"
6416 spdx-expression-parse "~1.0.0" 6020 spdx-expression-parse "~1.0.0"
6417 6021
6418vary@~1.1.2:
6419 version "1.1.2"
6420 resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
6421
6422verror@1.10.0: 6022verror@1.10.0:
6423 version "1.10.0" 6023 version "1.10.0"
6424 resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 6024 resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
@@ -6499,12 +6099,6 @@ warning@^3.0.0:
6499 dependencies: 6099 dependencies:
6500 loose-envify "^1.0.0" 6100 loose-envify "^1.0.0"
6501 6101
6502wcwidth@^1.0.1:
6503 version "1.0.1"
6504 resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
6505 dependencies:
6506 defaults "^1.0.3"
6507
6508whatwg-fetch@>=0.10.0: 6102whatwg-fetch@>=0.10.0:
6509 version "2.0.3" 6103 version "2.0.3"
6510 resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" 6104 resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
@@ -6554,13 +6148,6 @@ wrap-ansi@^2.0.0:
6554 string-width "^1.0.1" 6148 string-width "^1.0.1"
6555 strip-ansi "^3.0.1" 6149 strip-ansi "^3.0.1"
6556 6150
6557wrap-ansi@^3.0.1:
6558 version "3.0.1"
6559 resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba"
6560 dependencies:
6561 string-width "^2.1.1"
6562 strip-ansi "^4.0.0"
6563
6564wrappy@1: 6151wrappy@1:
6565 version "1.0.2" 6152 version "1.0.2"
6566 resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 6153 resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -6600,14 +6187,6 @@ ws@1.1.4:
6600 options ">=0.0.5" 6187 options ">=0.0.5"
6601 ultron "1.0.x" 6188 ultron "1.0.x"
6602 6189
6603ws@^3.0.0, ws@^3.2.0:
6604 version "3.2.0"
6605 resolved "https://registry.yarnpkg.com/ws/-/ws-3.2.0.tgz#d5d3d6b11aff71e73f808f40cc69d52bb6d4a185"
6606 dependencies:
6607 async-limiter "~1.0.0"
6608 safe-buffer "~5.1.0"
6609 ultron "~1.1.0"
6610
6611wtf-8@1.0.0: 6190wtf-8@1.0.0:
6612 version "1.0.0" 6191 version "1.0.0"
6613 resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" 6192 resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a"
@@ -6660,6 +6239,10 @@ yallist@^2.1.2:
6660 version "2.1.2" 6239 version "2.1.2"
6661 resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 6240 resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
6662 6241
6242yallist@^3.0.0, yallist@^3.0.2:
6243 version "3.0.2"
6244 resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
6245
6663yargs-parser@^5.0.0: 6246yargs-parser@^5.0.0:
6664 version "5.0.0" 6247 version "5.0.0"
6665 resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" 6248 resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
@@ -6702,7 +6285,7 @@ yargs@^7.0.0, yargs@^7.0.2:
6702 y18n "^3.2.1" 6285 y18n "^3.2.1"
6703 yargs-parser "^5.0.0" 6286 yargs-parser "^5.0.0"
6704 6287
6705yargs@^8.0.1, yargs@^8.0.2: 6288yargs@^8.0.2:
6706 version "8.0.2" 6289 version "8.0.2"
6707 resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" 6290 resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
6708 dependencies: 6291 dependencies: