mirror of
https://github.com/agam778/MS-365-Electron.git
synced 2026-02-17 09:02:10 +00:00
Compare commits
185 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d293b80829 | ||
|
|
975265dd02 | ||
|
|
4c78fdb40c | ||
|
|
ad4a55c8ec | ||
|
|
076764c692 | ||
|
|
a8b27d1374 | ||
|
|
3d1ebf20a4 | ||
|
|
7f5f9efd96 | ||
|
|
b25735efc4 | ||
|
|
d54ea55b7c | ||
|
|
4a20ffa428 | ||
|
|
1e125f0639 | ||
|
|
56a0ce9867 | ||
|
|
a512def03c | ||
|
|
911f9494de | ||
|
|
78531e1223 | ||
|
|
ef3df90c36 | ||
|
|
f91e52a9ba | ||
|
|
d0f7c484ec | ||
|
|
c81c2c4767 | ||
|
|
f2d65bfc7a | ||
|
|
7ccf303d43 | ||
|
|
6b0431f435 | ||
|
|
17c320e185 | ||
|
|
e592d94ff7 | ||
|
|
1067c8611f | ||
|
|
7854c45c59 | ||
|
|
67bea6101b | ||
|
|
5d81b725af | ||
|
|
8e4ccf4670 | ||
|
|
9b56ef4903 | ||
|
|
c195ebbe75 | ||
|
|
479893e5b4 | ||
|
|
dd98d975b8 | ||
|
|
52b4c4513a | ||
|
|
9fb83b8b00 | ||
|
|
71c4146679 | ||
|
|
7fe0ea5fc4 | ||
|
|
9f89a9f0b8 | ||
|
|
8b7a804784 | ||
|
|
650d9e6c9d | ||
|
|
388a4ca247 | ||
|
|
60847f12fe | ||
|
|
d2490fbc52 | ||
|
|
78a8a3b969 | ||
|
|
8c6aa9f5fa | ||
|
|
360c874e5d | ||
|
|
a0cb6259ae | ||
|
|
fd7d61b291 | ||
|
|
c2c91002d2 | ||
|
|
0066e6c5d0 | ||
|
|
aa1e367521 | ||
|
|
33498611cf | ||
|
|
ff2eb6800a | ||
|
|
fac66cce16 | ||
|
|
eb526c4ec9 | ||
|
|
eb10d3def9 | ||
|
|
b8f4a5eba5 | ||
|
|
9a9af15e2e | ||
|
|
c4e72a6e47 | ||
|
|
dc5b3c86d5 | ||
|
|
67d61a4cc9 | ||
|
|
ffc3042053 | ||
|
|
1068ed3a55 | ||
|
|
55d3e94cf9 | ||
|
|
e2abaca1e8 | ||
|
|
675deb3bbf | ||
|
|
f6cf3d92bf | ||
|
|
7a3f3c28df | ||
|
|
abbab926fe | ||
|
|
35f8bbdcd3 | ||
|
|
3c96dd5d12 | ||
|
|
8310966216 | ||
|
|
795ddb6e30 | ||
|
|
4c9e57a6d4 | ||
|
|
a9ce64c986 | ||
|
|
265a33f2a8 | ||
|
|
70cce42bd3 | ||
|
|
667d5e4422 | ||
|
|
338ecea70d | ||
|
|
295f189a8f | ||
|
|
fda67cccd4 | ||
|
|
9774c4f4f7 | ||
|
|
4cc4f71535 | ||
|
|
6f49a5554f | ||
|
|
aaa862364e | ||
|
|
0a3e4514a9 | ||
|
|
701d63c900 | ||
|
|
8f24d0184a | ||
|
|
34fdc82b50 | ||
|
|
48bab03708 | ||
|
|
af448cac3d | ||
|
|
102126d6d3 | ||
|
|
0b308b066f | ||
|
|
e60ffc52c9 | ||
|
|
ed0e90c451 | ||
|
|
3f67f7575f | ||
|
|
9fac90d90b | ||
|
|
36e42e311b | ||
|
|
bffa016eb9 | ||
|
|
c85ae12648 | ||
|
|
bc7968978a | ||
|
|
058711af45 | ||
|
|
179c52c28b | ||
|
|
acdae139d6 | ||
|
|
9a0bdc8fae | ||
|
|
81fe8c3ec0 | ||
|
|
8887d8a365 | ||
|
|
83ecdcd09b | ||
|
|
191876de3d | ||
|
|
56ab9b5007 | ||
|
|
7de220f5c6 | ||
|
|
7c295c51e6 | ||
|
|
34fc4ede8d | ||
|
|
dc23b1a58d | ||
|
|
664ddf81bf | ||
|
|
705f0447e7 | ||
|
|
69565c589a | ||
|
|
75d032248f | ||
|
|
7bd0ad2462 | ||
|
|
dc64f14fcb | ||
|
|
6e7a551d86 | ||
|
|
477f534049 | ||
|
|
25ac26214b | ||
|
|
e884d01cb1 | ||
|
|
729e9e276d | ||
|
|
df135f9578 | ||
|
|
e333196dc2 | ||
|
|
77c7cb08c0 | ||
|
|
96a4020e1e | ||
|
|
cbe9194a35 | ||
|
|
e238550568 | ||
|
|
e942b06a10 | ||
|
|
affc7bb676 | ||
|
|
4d0d742520 | ||
|
|
686d3ac491 | ||
|
|
6a706a96f4 | ||
|
|
bcd15e05cd | ||
|
|
c9ea1d2d3b | ||
|
|
c094b28f74 | ||
|
|
62932046e4 | ||
|
|
6ff03b85b9 | ||
|
|
83a1084e06 | ||
|
|
2db6bb827c | ||
|
|
9faa1cde1f | ||
|
|
6d209c1a5b | ||
|
|
ec2421da96 | ||
|
|
09ef206be5 | ||
|
|
e12e5b39b4 | ||
|
|
8dceb827d6 | ||
|
|
92a7b9376d | ||
|
|
a13d790df3 | ||
|
|
09d24e3948 | ||
|
|
2cc3d0c953 | ||
|
|
d5eba0741f | ||
|
|
102746ec3c | ||
|
|
529147bf01 | ||
|
|
39bd965a90 | ||
|
|
d203b214ec | ||
|
|
2b0eb255eb | ||
|
|
876ad5dfb7 | ||
|
|
796c4f63fd | ||
|
|
a3ee81bc32 | ||
|
|
0800464da5 | ||
|
|
03e009b301 | ||
|
|
805f5e1587 | ||
|
|
643b2c134c | ||
|
|
37754a6168 | ||
|
|
45b287dba6 | ||
|
|
10bf359f15 | ||
|
|
69fd40ba07 | ||
|
|
38359f68d1 | ||
|
|
942115fab9 | ||
|
|
9647ca2214 | ||
|
|
cd7ba5d5b4 | ||
|
|
13d5a51c67 | ||
|
|
225f8b2b63 | ||
|
|
3c758d6332 | ||
|
|
4dd73fc13c | ||
|
|
7f7b759706 | ||
|
|
b586c1c48c | ||
|
|
eda2165706 | ||
|
|
075ddf615e | ||
|
|
2f42a345bf | ||
|
|
b08c91a50e |
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
@@ -12,10 +12,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Install Node.js, NPM and Yarn
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: latest
|
||||
|
||||
|
||||
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
@@ -12,10 +12,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
|
||||
- name: Install Node.js, NPM and Yarn
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: latest
|
||||
|
||||
@@ -36,7 +36,7 @@ jobs:
|
||||
shell: bash
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.os }}-dist
|
||||
path: |
|
||||
|
||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@@ -7,7 +7,7 @@ jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v8
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
stale-issue-message: 'Message to comment on stale issues. If none provided, will not mark issues stale'
|
||||
stale-pr-message: 'Message to comment on stale PRs. If none provided, will not mark PRs stale'
|
||||
|
||||
10
.vscode/settings.json
vendored
Normal file
10
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint",
|
||||
"editor.formatOnType": false,
|
||||
"editor.formatOnPaste": true,
|
||||
"editor.formatOnSave": true,
|
||||
"editor.formatOnSaveMode": "file",
|
||||
"files.autoSave": "onFocusChange",
|
||||
"prettier.printWidth": 100,
|
||||
"vs-code-prettier-eslint.prettierLast": false
|
||||
}
|
||||
Binary file not shown.
BIN
.yarn/cache/@cliqz-adblocker-content-npm-1.26.12-3d830a12e1-941d6195a8.zip
vendored
Normal file
BIN
.yarn/cache/@cliqz-adblocker-content-npm-1.26.12-3d830a12e1-941d6195a8.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@cliqz-adblocker-electron-npm-1.26.12-d2b809d772-d106a0046e.zip
vendored
Normal file
BIN
.yarn/cache/@cliqz-adblocker-electron-npm-1.26.12-d2b809d772-d106a0046e.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@cliqz-adblocker-electron-preload-npm-1.26.12-98c7b7ec60-9730fa49df.zip
vendored
Normal file
BIN
.yarn/cache/@cliqz-adblocker-electron-preload-npm-1.26.12-98c7b7ec60-9730fa49df.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@cliqz-adblocker-extended-selectors-npm-1.26.12-1172b29ea2-0f50c02dbe.zip
vendored
Normal file
BIN
.yarn/cache/@cliqz-adblocker-extended-selectors-npm-1.26.12-1172b29ea2-0f50c02dbe.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@cliqz-adblocker-npm-1.26.12-c5692d440d-05cfb455ad.zip
vendored
Normal file
BIN
.yarn/cache/@cliqz-adblocker-npm-1.26.12-c5692d440d-05cfb455ad.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@electron-notarize-npm-2.1.0-300931d556-ac58f39f4b.zip
vendored
Normal file
BIN
.yarn/cache/@electron-notarize-npm-2.1.0-300931d556-ac58f39f4b.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@electron-osx-sign-npm-1.0.5-22146fb2fe-6c662e8bb4.zip
vendored
Normal file
BIN
.yarn/cache/@electron-osx-sign-npm-1.0.5-22146fb2fe-6c662e8bb4.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@electron-universal-npm-1.4.1-4989028044-257f3a25a4.zip
vendored
Normal file
BIN
.yarn/cache/@electron-universal-npm-1.4.1-4989028044-257f3a25a4.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@eslint-community-regexpp-npm-4.6.2-0fc083c210-a3c341377b.zip
vendored
Normal file
BIN
.yarn/cache/@eslint-community-regexpp-npm-4.6.2-0fc083c210-a3c341377b.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@eslint-eslintrc-npm-2.1.4-1ff4b5f908-10957c7592.zip
vendored
Normal file
BIN
.yarn/cache/@eslint-eslintrc-npm-2.1.4-1ff4b5f908-10957c7592.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@humanwhocodes-object-schema-npm-2.0.1-c23364bbfc-24929487b1.zip
vendored
Normal file
BIN
.yarn/cache/@humanwhocodes-object-schema-npm-2.0.1-c23364bbfc-24929487b1.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/@npmcli-agent-npm-2.2.0-cf04e8a830-3b25312edb.zip
vendored
Normal file
BIN
.yarn/cache/@npmcli-agent-npm-2.2.0-cf04e8a830-3b25312edb.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@types-chrome-npm-0.0.248-50cc65ab10-3e3c193af1.zip
vendored
Normal file
BIN
.yarn/cache/@types-chrome-npm-0.0.248-50cc65ab10-3e3c193af1.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@types-firefox-webext-browser-npm-111.0.5-61aee8163c-8e61fb65d0.zip
vendored
Normal file
BIN
.yarn/cache/@types-firefox-webext-browser-npm-111.0.5-61aee8163c-8e61fb65d0.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/@ungap-structured-clone-npm-1.2.0-648f0b82e0-4f656b7b46.zip
vendored
Normal file
BIN
.yarn/cache/@ungap-structured-clone-npm-1.2.0-648f0b82e0-4f656b7b46.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/@xhayper-discord-rpc-npm-1.1.1-8538219719-f3e6e3337a.zip
vendored
Normal file
BIN
.yarn/cache/@xhayper-discord-rpc-npm-1.1.1-8538219719-f3e6e3337a.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/abbrev-npm-2.0.0-0eb38a17e5-0e994ad2aa.zip
vendored
Normal file
BIN
.yarn/cache/abbrev-npm-2.0.0-0eb38a17e5-0e994ad2aa.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/agent-base-npm-7.1.0-4b12ba5111-f7828f9914.zip
vendored
Normal file
BIN
.yarn/cache/agent-base-npm-7.1.0-4b12ba5111-f7828f9914.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/axios-npm-1.6.2-2334cb6eee-4a7429e2b7.zip
vendored
Normal file
BIN
.yarn/cache/axios-npm-1.6.2-2334cb6eee-4a7429e2b7.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/builder-util-runtime-npm-9.2.3-3905baa738-f25d6f1235.zip
vendored
Normal file
BIN
.yarn/cache/builder-util-runtime-npm-9.2.3-3905baa738-f25d6f1235.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/cacache-npm-18.0.1-11c6564db0-5a0b3b2ea4.zip
vendored
Normal file
BIN
.yarn/cache/cacache-npm-18.0.1-11c6564db0-5a0b3b2ea4.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/dmg-license-npm-1.0.11-e97c20b75a-8.zip
vendored
BIN
.yarn/cache/dmg-license-npm-1.0.11-e97c20b75a-8.zip
vendored
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/electron-dl-npm-3.5.1-9463e218c9-3d176b2005.zip
vendored
Normal file
BIN
.yarn/cache/electron-dl-npm-3.5.1-9463e218c9-3d176b2005.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/electron-log-npm-5.0.1-598c753e33-f7e0266171.zip
vendored
Normal file
BIN
.yarn/cache/electron-log-npm-5.0.1-598c753e33-f7e0266171.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/electron-npm-28.0.0-d90b8e0071-5e0da4f3a8.zip
vendored
Normal file
BIN
.yarn/cache/electron-npm-28.0.0-d90b8e0071-5e0da4f3a8.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/eslint-visitor-keys-npm-3.4.3-a356ac7e46-36e9ef87fc.zip
vendored
Normal file
BIN
.yarn/cache/eslint-visitor-keys-npm-3.4.3-a356ac7e46-36e9ef87fc.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/espree-npm-9.6.1-a50722a5a9-eb8c149c7a.zip
vendored
Normal file
BIN
.yarn/cache/espree-npm-9.6.1-a50722a5a9-eb8c149c7a.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/glob-npm-10.3.10-da1ef8b112-4f2fe2511e.zip
vendored
Normal file
BIN
.yarn/cache/glob-npm-10.3.10-da1ef8b112-4f2fe2511e.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/http-proxy-agent-npm-7.0.0-106a57cc8c-48d4fac997.zip
vendored
Normal file
BIN
.yarn/cache/http-proxy-agent-npm-7.0.0-106a57cc8c-48d4fac997.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/https-proxy-agent-npm-7.0.2-83ea6a5d42-088969a0dd.zip
vendored
Normal file
BIN
.yarn/cache/https-proxy-agent-npm-7.0.2-83ea6a5d42-088969a0dd.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/isexe-npm-3.1.1-9c0061eead-7fe1931ee4.zip
vendored
Normal file
BIN
.yarn/cache/isexe-npm-3.1.1-9c0061eead-7fe1931ee4.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/jackspeak-npm-2.3.6-42e1233172-57d43ad11e.zip
vendored
Normal file
BIN
.yarn/cache/jackspeak-npm-2.3.6-42e1233172-57d43ad11e.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/lru-cache-npm-10.1.0-f3d3a0f0ab-58056d33e2.zip
vendored
Normal file
BIN
.yarn/cache/lru-cache-npm-10.1.0-f3d3a0f0ab-58056d33e2.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/make-fetch-happen-npm-13.0.0-f87a92bb87-7c7a6d381c.zip
vendored
Normal file
BIN
.yarn/cache/make-fetch-happen-npm-13.0.0-f87a92bb87-7c7a6d381c.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/minipass-collect-npm-2.0.1-73d3907e40-b251bceea6.zip
vendored
Normal file
BIN
.yarn/cache/minipass-collect-npm-2.0.1-73d3907e40-b251bceea6.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/minipass-npm-7.0.4-eacb4e042e-87585e258b.zip
vendored
Normal file
BIN
.yarn/cache/minipass-npm-7.0.4-eacb4e042e-87585e258b.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/node-gyp-npm-10.0.1-48708ce70b-60a74e66d3.zip
vendored
Normal file
BIN
.yarn/cache/node-gyp-npm-10.0.1-48708ce70b-60a74e66d3.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/nopt-npm-7.2.0-dd734b678d-a9c0f57fb8.zip
vendored
Normal file
BIN
.yarn/cache/nopt-npm-7.2.0-dd734b678d-a9c0f57fb8.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/path-scurry-npm-1.10.1-52bd946f2e-e2557cff3a.zip
vendored
Normal file
BIN
.yarn/cache/path-scurry-npm-1.10.1-52bd946f2e-e2557cff3a.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/proc-log-npm-3.0.0-a8c21c2f0f-02b64e1b39.zip
vendored
Normal file
BIN
.yarn/cache/proc-log-npm-3.0.0-a8c21c2f0f-02b64e1b39.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/socks-proxy-agent-npm-8.0.2-df165543cf-4fb165df08.zip
vendored
Normal file
BIN
.yarn/cache/socks-proxy-agent-npm-8.0.2-df165543cf-4fb165df08.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/tldts-core-npm-6.1.0-151f8f4d4b-e7cb17397e.zip
vendored
Normal file
BIN
.yarn/cache/tldts-core-npm-6.1.0-151f8f4d4b-e7cb17397e.zip
vendored
Normal file
Binary file not shown.
Binary file not shown.
BIN
.yarn/cache/tldts-experimental-npm-6.1.0-d0c2c007a3-a4b0058635.zip
vendored
Normal file
BIN
.yarn/cache/tldts-experimental-npm-6.1.0-d0c2c007a3-a4b0058635.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/which-npm-4.0.0-dd31cd4928-f17e84c042.zip
vendored
Normal file
BIN
.yarn/cache/which-npm-4.0.0-dd31cd4928-f17e84c042.zip
vendored
Normal file
Binary file not shown.
BIN
.yarn/cache/ws-npm-8.13.0-26ffa3016a-53e991bbf9.zip
vendored
BIN
.yarn/cache/ws-npm-8.13.0-26ffa3016a-53e991bbf9.zip
vendored
Binary file not shown.
BIN
.yarn/cache/ws-npm-8.14.2-b339ac47a2-3ca0dad26e.zip
vendored
Normal file
BIN
.yarn/cache/ws-npm-8.14.2-b339ac47a2-3ca0dad26e.zip
vendored
Normal file
Binary file not shown.
541
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
541
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
File diff suppressed because one or more lines are too long
874
.yarn/releases/yarn-3.6.1.cjs
vendored
874
.yarn/releases/yarn-3.6.1.cjs
vendored
File diff suppressed because one or more lines are too long
935
.yarn/releases/yarn-4.7.0.cjs
vendored
Executable file
935
.yarn/releases/yarn-4.7.0.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
@@ -1,7 +1,3 @@
|
||||
nodeLinker: node-modules
|
||||
|
||||
plugins:
|
||||
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
|
||||
spec: "@yarnpkg/plugin-interactive-tools"
|
||||
|
||||
yarnPath: .yarn/releases/yarn-3.6.1.cjs
|
||||
yarnPath: .yarn/releases/yarn-4.7.0.cjs
|
||||
|
||||
90
README.md
90
README.md
@@ -1,5 +1,5 @@
|
||||
<p align="center"><img src="https://github.com/agam778/MS-365-Electron/blob/main/assets/banner.png?raw=true" alt="Intro Image"></p>
|
||||
<p align="center">Thanks a lot to <a href="https://t.me/NextWorksGFX">@NextWorksGFX</a> for this amazing banner!</p>
|
||||
<p align="center"><img src="https://github.com/agam778/MS-365-Electron/blob/main/assets/banner.png?raw=true" alt="Credits: "></p>
|
||||
<p align="center">Thanks to <a href="https://t.me/NextWorksGFX">@NextWorksGFX</a> for this amazing banner!</p>
|
||||
<p align="center">Unofficial Microsoft 365 Web Desktop Wrapper made with Electron</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -18,9 +18,6 @@
|
||||
<a href="https://github.com/agam778/MS-365-Electron/releases/">
|
||||
<img align="center" src="https://img.shields.io/github/downloads/agam778/MS-365-Electron/total?label=Downloads&style=style=flat">
|
||||
</a>
|
||||
<a href="https://github.com/agam778/MS-365-Electron/releases/latest/">
|
||||
<img align="center" src="https://img.shields.io/github/downloads/agam778/MS-365-Electron/latest/total?label=Downloads%40Latest">
|
||||
</a>
|
||||
<a href="https://github.com/agam778/MS-365-Electron/actions/workflows/build.yml">
|
||||
<img align="center" src="https://github.com/agam778/MS-365-Electron/actions/workflows/build.yml/badge.svg">
|
||||
</a>
|
||||
@@ -42,43 +39,43 @@
|
||||
- [💿 Installation on Linux](#-installation-on-linux)
|
||||
- [Installation on Ubuntu/Debian based distributions](#installation-on-ubuntudebian-based-distributions)
|
||||
- [Installation on Red Hat/Fedora based distributions](#installation-on-red-hatfedora-based-distributions)
|
||||
- [Installation on Arch/Manjaro Linux based distributions](#installation-on-archmanjaro-linux-based-distributions)
|
||||
- [Installation on Gentoo Linux](#installation-on-gentoo-linux)
|
||||
- [Installation on Arch Linux based distributions](#installation-on-arch-linux-based-distributions)
|
||||
- [Installation on Void Linux](#installation-on-void-linux)
|
||||
- [Maintained by: @xHyroM](#maintained-by-xhyrom)
|
||||
- [Installation on Gentoo Linux (Unmaintained)](#installation-on-gentoo-linux-unmaintained)
|
||||
- [💻 Developing Locally](#-developing-locally)
|
||||
- [📃 MIT License](#-mit-license)
|
||||
- [*Disclaimer: Not affiliated with Microsoft. Office, the name, website, images/icons are the intellectual properties of Microsoft.*](#disclaimer-not-affiliated-with-microsoft-office-the-name-website-imagesicons-are-the-intellectual-properties-of-microsoft)
|
||||
|
||||
# Introduction
|
||||
|
||||
This project is basically a Desktop wrapper for the web version of [Microsoft 365](https://microsoft365.com), which is free but with some basic limits.
|
||||
MS-365-Electron streamlines your workflow by offering a dedicated desktop interface for the free, web-based version of [Microsoft 365](https://microsoft365.com). Think of it as a convenient launchpad for web applications like Word, Excel, and PowerPoint, eliminating the need to navigate through browser tabs.
|
||||
|
||||
I initially made this project because I wanted to use Microsoft 365 on my Linux system with a native experience. Later, I decided to make it public so that others can enjoy this too!
|
||||
|
||||
Don't expect this to be a full-fledged Microsoft 365 Desktop Suite (like we have for Windows/macOS), it's just a wrapper of the web version of Microsoft 365.
|
||||
This is not a full-fledged Microsoft 365 Suite, but just a web wrapper for Microsoft 365 Web, made with Electron.
|
||||
|
||||
Note - Windows Hello or Sign in with Security key is **not** supported and will show you an error. You will have to manually sign in with your E-Mail and Password.
|
||||
|
||||
***Do Expect bugs***
|
||||
***Do expect bugs***
|
||||
|
||||
Supported Platforms
|
||||
|
||||
1. Windows x64 (EXE File)
|
||||
2. macOS x64 (DMG File)
|
||||
1. Windows - x64 (EXE File)
|
||||
2. macOS - x64 and M-series Macs (DMG File)
|
||||
3. Ubuntu/Debian based distributions (DEB File)
|
||||
4. Red Hat Linux/Fedora based distributions (RPM File)
|
||||
5. Arch/Manjaro Linux based distributions (Uploaded on AUR)
|
||||
6. Gentoo Linux (Unofficial overlay)
|
||||
7. All Distributions supporting AppImage (AppImage File); and
|
||||
8. All Distributions supporting Snap (Uploaded on Snap Store)
|
||||
5. Arch Linux based distributions (Uploaded on AUR)
|
||||
6. Void Linux (Maintained by: [@xHyroM](https://github.com/xHyroM))
|
||||
7. Gentoo Linux (Unofficial overlay) **[MAINTAINER NEEDED]**
|
||||
8. All Distributions supporting AppImage (AppImage File); and
|
||||
9. All Distributions supporting Snap (Uploaded on Snap Store)
|
||||
|
||||
# List of Features
|
||||
|
||||
- Discord RPC
|
||||
- Dynamic Icons:
|
||||
- For macOS: Change icon in dock according to the app you've opened [[Preview]](https://github-production-user-asset-6210df.s3.amazonaws.com/68941022/245203309-3d0dfc1b-02e9-43a8-85d7-9493a2b86b56.mp4)
|
||||
- For Windows: Set overlay icon [[Preview]](https://github.com/agam778/MS-365-Electron/assets/68941022/791b661b-2b7d-43a6-96df-ee9c30c9b18a)
|
||||
- For macOS: App's icon in dock changes according to the app you've opened [[Preview]](https://github-production-user-asset-6210df.s3.amazonaws.com/68941022/245203309-3d0dfc1b-02e9-43a8-85d7-9493a2b86b56.mp4)
|
||||
- For Windows: Sets overlay icon [[Preview]](https://github.com/agam778/MS-365-Electron/assets/68941022/791b661b-2b7d-43a6-96df-ee9c30c9b18a)
|
||||
- For Linux: Nothing, yet
|
||||
- Block Ads within the app
|
||||
- Block Ads and Trackers within the app, preventing ads in websites like Outlook
|
||||
- Directly open apps from the menu
|
||||
- Ability to use useragent strings of Windows, macOS or Linux
|
||||
- Switch between normal and enterprise/education/developer account in the same app
|
||||
@@ -153,9 +150,9 @@ For Installing in Red Hat/Fedora based distribution :-
|
||||
2) Scroll down and click the `.rpm` file to download it.
|
||||
3) Then run the rpm file and click Install to install the App. Launch it from the Applications Menu.
|
||||
|
||||
### Installation on Arch/Manjaro Linux based distributions
|
||||
### Installation on Arch Linux based distributions
|
||||
|
||||
1. Install any AUR helper like [`yay`](https://github.com/Jguer/yay)
|
||||
1. Install any AUR helper like [`yay`](https://github.com/Jguer/yay) or [paru](https://github.com/Morganamilo/paru)
|
||||
|
||||
2. There are 2 packages in the AUR
|
||||
- `ms-365-electron-bin`: For installing pre-built releases
|
||||
@@ -169,7 +166,32 @@ For Installing in Red Hat/Fedora based distribution :-
|
||||
|
||||
4. Wait for it to install and tada! The app is installed.
|
||||
|
||||
### Installation on Gentoo Linux
|
||||
### Installation on Void Linux
|
||||
#### Maintained by: [@xHyroM](https://github.com/xHyroM)
|
||||
|
||||
1. In order to install the package, create a new .conf file in the /etc/xbps.d directory containing the repository URL:
|
||||
|
||||
```bash
|
||||
$ sudo nano /etc/xbps.d/99-xhyrom-dev.conf
|
||||
|
||||
repository=https://void-repo.xhyrom.dev
|
||||
```
|
||||
|
||||
2. Synchronize the repository and import the RSA key:
|
||||
|
||||
```bash
|
||||
sudo xbps-install -S
|
||||
```
|
||||
|
||||
3. Install the package:
|
||||
|
||||
```bash
|
||||
sudo xbps-install -S ms-365-electron
|
||||
```
|
||||
|
||||
### Installation on Gentoo Linux (Unmaintained)
|
||||
|
||||
_Maintainer needed_
|
||||
|
||||
1. This is supported by an ebuild uploaded on my unofficial overlay. First, enable the overlay on your system:
|
||||
|
||||
@@ -194,16 +216,10 @@ yarn install
|
||||
```
|
||||
```bash
|
||||
$ yarn run
|
||||
yarn run v1.22.18
|
||||
info Commands available from binary scripts: asar, dircompare, ejs, electron, electron-builder, electron-osx-flat, electron-osx-sign, extract-zip, install-app-deps, is-ci, jake, js-yaml, json5, mime, mkdirp, node-which, rc, rimraf, semver
|
||||
info Project commands
|
||||
- dist
|
||||
electron-builder
|
||||
- pack
|
||||
electron-builder --dir
|
||||
- start
|
||||
electron .
|
||||
question Which command would you like to run?:
|
||||
➤ YN0000: start 'electron .'
|
||||
➤ YN0000: pack 'electron-builder --dir'
|
||||
➤ YN0000: dist 'electron-builder'
|
||||
➤ YN0000: Done in 0s 2ms
|
||||
```
|
||||
|
||||
To start the app, run `yarn start`<br>
|
||||
@@ -211,4 +227,6 @@ To build the app, run `yarn dist`
|
||||
|
||||
# 📃 MIT License
|
||||
|
||||
#### *Disclaimer: Not affiliated with Microsoft. Office, the name, website, images/icons are the intellectual properties of Microsoft.*
|
||||
View the [LICENSE](./LICENSE)
|
||||
|
||||
*Disclaimer: Not affiliated with Microsoft. Office, the name, website, images/icons are the intellectual properties of Microsoft.*
|
||||
|
||||
14
app/config/dimensions.js
Normal file
14
app/config/dimensions.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import { app, screen } from "electron";
|
||||
let screenWidth, screenHeight;
|
||||
|
||||
app.on("ready", () => {
|
||||
({ width: screenWidth, height: screenHeight } = screen.getPrimaryDisplay().workAreaSize);
|
||||
});
|
||||
|
||||
export function getScreenWidth() {
|
||||
return screenWidth;
|
||||
}
|
||||
|
||||
export function getScreenHeight() {
|
||||
return screenHeight;
|
||||
}
|
||||
1026
app/config/menu.js
Normal file
1026
app/config/menu.js
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,12 @@
|
||||
const { Client } = require("@xhayper/discord-rpc");
|
||||
const { dialog, BrowserWindow } = require("electron");
|
||||
const { setValue } = require("./store");
|
||||
import { dialog, BrowserWindow } from "electron";
|
||||
import { Client } from "@xhayper/discord-rpc";
|
||||
import { setValue } from "./store.js";
|
||||
|
||||
const client = new Client({
|
||||
clientId: "942637872530460742",
|
||||
});
|
||||
|
||||
async function rpcError(status) {
|
||||
export async function rpcError(status) {
|
||||
const rpcerror = dialog.showMessageBoxSync(BrowserWindow.getFocusedWindow(), {
|
||||
type: "error",
|
||||
title: "Discord RPC Error",
|
||||
@@ -19,14 +19,14 @@ async function rpcError(status) {
|
||||
}
|
||||
}
|
||||
|
||||
async function clearActivity() {
|
||||
export async function clearActivity() {
|
||||
await client.user?.clearActivity().catch((err) => {
|
||||
rpcError("clearing");
|
||||
console.error(err);
|
||||
});
|
||||
}
|
||||
|
||||
async function setActivity(details) {
|
||||
export async function setActivity(details) {
|
||||
if (!client.user) {
|
||||
await loginToRPC();
|
||||
}
|
||||
@@ -43,15 +43,9 @@ async function setActivity(details) {
|
||||
});
|
||||
}
|
||||
|
||||
async function loginToRPC() {
|
||||
export async function loginToRPC() {
|
||||
await client.login().catch((err) => {
|
||||
rpcError("logging into");
|
||||
console.error(err);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
clearActivity,
|
||||
setActivity,
|
||||
loginToRPC,
|
||||
};
|
||||
41
app/config/store.js
Normal file
41
app/config/store.js
Normal file
@@ -0,0 +1,41 @@
|
||||
import useragents from "../useragents.json" with { type: "json" };
|
||||
import Store from "electron-store";
|
||||
|
||||
const store = new Store();
|
||||
|
||||
export function getValue(key) {
|
||||
return store.get(key);
|
||||
}
|
||||
|
||||
export function setValue(key, value) {
|
||||
store.set(key, value);
|
||||
}
|
||||
|
||||
export function getValueOrDefault(key, defaultValue) {
|
||||
const value = store.get(key);
|
||||
if (value === undefined) {
|
||||
store.set(key, defaultValue);
|
||||
return defaultValue;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
getValueOrDefault("enterprise-or-normal", "?auth=1");
|
||||
getValueOrDefault("websites-in-new-window", "true");
|
||||
getValueOrDefault("autohide-menubar", "false");
|
||||
getValueOrDefault("useragentstring", useragents.Windows);
|
||||
getValueOrDefault("discordrpcstatus", "false");
|
||||
getValueOrDefault("blockadsandtrackers", "false");
|
||||
getValueOrDefault("dynamicicons", "true");
|
||||
getValueOrDefault("autoupdater", "true");
|
||||
getValueOrDefault("custompage", "home");
|
||||
getValueOrDefault("windowWidth", 0.71);
|
||||
getValueOrDefault("windowHeight", 0.74);
|
||||
getValueOrDefault("customWindowSize", false);
|
||||
getValueOrDefault("externalLinks", "true");
|
||||
|
||||
if (getValue("enterprise-or-normal") === "https://microsoft365.com/?auth=1") {
|
||||
setValue("enterprise-or-normal", "?auth=1");
|
||||
} else if (getValue("enterprise-or-normal") === "https://microsoft365.com/?auth=2") {
|
||||
setValue("enterprise-or-normal", "?auth=2");
|
||||
}
|
||||
82
app/config/utils.js
Normal file
82
app/config/utils.js
Normal file
@@ -0,0 +1,82 @@
|
||||
import { app, dialog, shell } from "electron";
|
||||
import axios from "axios";
|
||||
import { setValue } from "./store.js";
|
||||
import updaterpkg from "electron-updater";
|
||||
|
||||
const { autoUpdater } = updaterpkg;
|
||||
|
||||
export async function checkForUpdates() {
|
||||
try {
|
||||
const res = await axios.get(
|
||||
"https://api.github.com/repos/agam778/MS-365-Electron/releases/latest"
|
||||
);
|
||||
const data = res.data;
|
||||
const currentVersion = "v" + app.getVersion();
|
||||
const latestVersion = data.tag_name;
|
||||
|
||||
if (currentVersion !== latestVersion) {
|
||||
if (process.platform === "win32" || process.platform === "darwin") {
|
||||
autoUpdater.checkForUpdatesAndNotify().then((result) => {
|
||||
if (result === null) {
|
||||
dialog.showMessageBoxSync({
|
||||
type: "info",
|
||||
title: "No Update Available",
|
||||
message: `Current version: ${currentVersion}\nLatest version: ${latestVersion}\n\nYou are already using the latest version.`,
|
||||
buttons: ["OK"],
|
||||
});
|
||||
}
|
||||
});
|
||||
return;
|
||||
} else {
|
||||
const updatedialog = dialog.showMessageBoxSync({
|
||||
type: "info",
|
||||
title: "Update Available",
|
||||
message: `Current version: ${currentVersion}\nLatest version: ${latestVersion}\n\nPlease update to the latest version.`,
|
||||
buttons: ["Download", "Close"],
|
||||
});
|
||||
if (updatedialog === 0) {
|
||||
shell.openExternal("https://github.com/agam778/MS-365-Electron/releases/latest");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dialog.showMessageBoxSync({
|
||||
type: "info",
|
||||
title: "No Update Available",
|
||||
message: `Your App's version: ${currentVersion}\nLatest version: ${latestVersion}\n\nYou are already using the latest version.`,
|
||||
buttons: ["OK"],
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error checking for updates:", error);
|
||||
}
|
||||
}
|
||||
|
||||
export async function openExternalLink(url) {
|
||||
await shell.openExternal(url);
|
||||
}
|
||||
|
||||
export async function openLogsFolder() {
|
||||
if (process.platform === "win32") {
|
||||
await shell.openPath(
|
||||
"C:\\Users\\" + process.env.USERNAME + "\\AppData\\Roaming\\ms-365-electron\\logs\\"
|
||||
);
|
||||
} else if (process.platform === "darwin") {
|
||||
await shell.openPath("/Users/" + process.env.USER + "/Library/Logs/ms-365-electron/");
|
||||
} else if (process.platform === "linux") {
|
||||
await shell.openPath("/home/" + process.env.USER + "/.config/ms-365-electron/logs/");
|
||||
}
|
||||
}
|
||||
|
||||
export function setUserAgent(useragent) {
|
||||
setValue("useragentstring", useragent);
|
||||
const updatedialog = dialog.showMessageBoxSync({
|
||||
type: "info",
|
||||
title: "User-Agent string changed",
|
||||
message: `You have switched to the ${useragent} User-Agent string.\n\nPlease restart the app for the changes to take effect.`,
|
||||
buttons: ["Later", "Restart"],
|
||||
});
|
||||
if (updatedialog === 1) {
|
||||
app.relaunch();
|
||||
app.exit();
|
||||
}
|
||||
}
|
||||
125
app/domains.json
Normal file
125
app/domains.json
Normal file
@@ -0,0 +1,125 @@
|
||||
{
|
||||
"domains": [
|
||||
"*.1drv.ms",
|
||||
"*.microsoft365.com",
|
||||
"*.office365.com",
|
||||
"*.live.com",
|
||||
"*.office.com",
|
||||
"*.microsoftonline.com",
|
||||
"*.onenote.com",
|
||||
"*.onedrive.com",
|
||||
"*.outlook.com",
|
||||
"*.microsoft.com",
|
||||
"*.cloud.microsoft",
|
||||
"*.skype.com",
|
||||
"*.clipchamp.com",
|
||||
"*.sharepoint.com",
|
||||
"*.yammer.com",
|
||||
"*.outlook.cloud.microsoft",
|
||||
"*.outlook.office.com",
|
||||
"*.outlook.office365.com",
|
||||
"*.protection.outlook.com",
|
||||
"*.mail.protection.outlook.com",
|
||||
"*.mx.microsoft",
|
||||
"*.sharepointonline.com",
|
||||
"*.storage.live.com",
|
||||
"*.search.production.apac.trafficmanager.net",
|
||||
"*.search.production.emea.trafficmanager.net",
|
||||
"*.search.production.us.trafficmanager.net",
|
||||
"*.wns.windows.com",
|
||||
"*.admin.onedrive.com",
|
||||
"*.officeclient.microsoft.com",
|
||||
"*.g.live.com",
|
||||
"*.oneclient.sfx.ms",
|
||||
"*.spoprod-a.akamaihd.net",
|
||||
"*.svc.ms",
|
||||
"*.teams.microsoft.com",
|
||||
"*.lync.com",
|
||||
"*.keydelivery.mediaservices.windows.net",
|
||||
"*.streaming.mediaservices.windows.net",
|
||||
"*.mlccdn.blob.core.windows.net",
|
||||
"*.aka.ms",
|
||||
"*.users.storage.live.com",
|
||||
"*.adl.windows.com",
|
||||
"*.secure.skypeassets.com",
|
||||
"*.mlccdnprod.azureedge.net",
|
||||
"*.skype.com",
|
||||
"*.compass-ssl.microsoft.com",
|
||||
"*.officeapps.live.com",
|
||||
"*.online.office.com",
|
||||
"*.office.live.com",
|
||||
"*.office.net",
|
||||
"*.onenote.com",
|
||||
"*.cdn.onenote.net",
|
||||
"*.ajax.aspnetcdn.com",
|
||||
"*.apis.live.net",
|
||||
"*.www.onedrive.com",
|
||||
"*.auth.microsoft.com",
|
||||
"*.msftidentity.com",
|
||||
"*.msidentity.com",
|
||||
"*.account.activedirectory.windowsazure.com",
|
||||
"*.accounts.accesscontrol.windows.net",
|
||||
"*.adminwebservice.microsoftonline.com",
|
||||
"*.api.passwordreset.microsoftonline.com",
|
||||
"*.autologon.microsoftazuread-sso.com",
|
||||
"*.becws.microsoftonline.com",
|
||||
"*.ccs.login.microsoftonline.com",
|
||||
"*.clientconfig.microsoftonline-p.net",
|
||||
"*.companymanager.microsoftonline.com",
|
||||
"*.device.login.microsoftonline.com",
|
||||
"*.graph.microsoft.com",
|
||||
"*.graph.windows.net",
|
||||
"*.login-us.microsoftonline.com",
|
||||
"*.login.microsoft.com",
|
||||
"*.login.microsoftonline-p.com",
|
||||
"*.login.microsoftonline.com",
|
||||
"*.login.windows.net",
|
||||
"*.logincert.microsoftonline.com",
|
||||
"*.loginex.microsoftonline.com",
|
||||
"*.nexus.microsoftonline-p.com",
|
||||
"*.passwordreset.microsoftonline.com",
|
||||
"*.provisioningapi.microsoftonline.com",
|
||||
"*.hip.live.com",
|
||||
"*.microsoftonline-p.com",
|
||||
"*.msauth.net",
|
||||
"*.msauthimages.net",
|
||||
"*.msecnd.net",
|
||||
"*.msftauth.net",
|
||||
"*.msftauthimages.net",
|
||||
"*.phonefactor.net",
|
||||
"*.enterpriseregistration.windows.net",
|
||||
"*.policykeyservice.dc.ad.msft.net",
|
||||
"*.sharepointonline.com",
|
||||
"*.staffhub.ms",
|
||||
"*.staffhubweb.azureedge.net",
|
||||
"*.sway.com",
|
||||
"*.www.sway.com",
|
||||
"*.eus-www.sway-cdn.com",
|
||||
"*.eus-www.sway-extensions.com",
|
||||
"*.wus-www.sway-cdn.com",
|
||||
"*.wus-www.sway-extensions.com",
|
||||
"*.microsoftusercontent.com",
|
||||
"*.azure-apim.net",
|
||||
"*.flow.microsoft.com",
|
||||
"*.powerapps.com",
|
||||
"*.powerautomate.com",
|
||||
"*.activity.windows.com",
|
||||
"*.cortana.ai",
|
||||
"*.admin.microsoft.com",
|
||||
"*.cdn.odc.officeapps.live.com",
|
||||
"*.cdn.uci.officeapps.live.com",
|
||||
"*.cloud.microsoft",
|
||||
"*.static.microsoft",
|
||||
"*.usercontent.microsoft",
|
||||
"*.compliance.microsoft.com",
|
||||
"*.protection.office.com",
|
||||
"*.security.microsoft.com",
|
||||
"*.defender.microsoft.com",
|
||||
"*.blob.core.windows.net",
|
||||
"*.firstpartyapps.oaspapps.com",
|
||||
"*.prod.firstpartyapps.oaspapps.com.akadns.net",
|
||||
"*.telemetryservice.firstpartyapps.oaspapps.com",
|
||||
"*.wus-firstpartyapps.oaspapps.com"
|
||||
],
|
||||
"source": "https://learn.microsoft.com/en-us/microsoft-365/enterprise/urls-and-ip-address-ranges?view=o365-worldwide"
|
||||
}
|
||||
293
app/main.js
293
app/main.js
@@ -1,53 +1,63 @@
|
||||
const { app, Menu, BrowserWindow, dialog, nativeImage } = require("electron");
|
||||
const { autoUpdater } = require("electron-updater");
|
||||
const checkInternetConnected = require("check-internet-connected");
|
||||
const ElectronDl = require("electron-dl");
|
||||
const contextMenu = require("electron-context-menu");
|
||||
const path = require("path");
|
||||
const log = require("electron-log");
|
||||
const { setActivity, loginToRPC, clearActivity } = require("./rpc");
|
||||
const useragents = require("./useragents.json");
|
||||
const { ElectronBlocker } = require("@cliqz/adblocker-electron");
|
||||
const { getValue } = require("./store");
|
||||
const { menulayout } = require("./menu");
|
||||
import { app, Menu, BrowserWindow, dialog, nativeImage, shell } from "electron";
|
||||
import { clearActivity, setActivity, loginToRPC } from "./config/rpc.js";
|
||||
import { ElectronBlocker } from "@cliqz/adblocker-electron";
|
||||
import { setValue, getValue } from "./config/store.js";
|
||||
import { dirname, join } from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
log.transports.file.level = "verbose";
|
||||
console.log = log.log;
|
||||
Object.assign(console, log.functions);
|
||||
import { getScreenWidth, getScreenHeight } from "./config/dimensions.js";
|
||||
import Windows from "./useragents.json" with { type: "json" };
|
||||
import checkInternetConnected from "check-internet-connected";
|
||||
import domains from "./domains.json" with { type: "json" };
|
||||
import contextMenu from "electron-context-menu";
|
||||
import updaterpkg from "electron-updater";
|
||||
import ElectronDl from "electron-dl";
|
||||
import menulayout from "./config/menu.js";
|
||||
import logpkg from "electron-log";
|
||||
|
||||
const { transports, log: _log, functions } = logpkg;
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const windowHeight = getValue("windowHeight");
|
||||
const windowWidth = getValue("windowWidth");
|
||||
const __dirname = dirname(__filename);
|
||||
const { autoUpdater } = updaterpkg;
|
||||
|
||||
transports.file.level = "verbose";
|
||||
console.log = _log;
|
||||
Object.assign(console, functions);
|
||||
|
||||
function createWindow() {
|
||||
const enterpriseOrNormal = getValue("enterprise-or-normal");
|
||||
const custompage = getValue("custompage");
|
||||
const partition = enterpriseOrNormal === "?auth=1" ? "persist:personal" : "persist:work";
|
||||
|
||||
const win = new BrowserWindow({
|
||||
width: 1181,
|
||||
height: 670,
|
||||
icon: path.join(__dirname, "/assets/icons/png/1024x1024.png"),
|
||||
width: Math.round(getScreenWidth() * getValue("windowWidth")),
|
||||
height: Math.round(getScreenHeight() * getValue("windowHeight")),
|
||||
icon: join(__dirname, "/assets/icons/png/1024x1024.png"),
|
||||
show: false,
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
devTools: true,
|
||||
partition: partition,
|
||||
},
|
||||
});
|
||||
|
||||
if (getValue("autohide-menubar") === "true") {
|
||||
win.setAutoHideMenuBar(true);
|
||||
} else {
|
||||
win.setAutoHideMenuBar(false);
|
||||
}
|
||||
win.setAutoHideMenuBar(getValue("autohide-menubar") === "true");
|
||||
|
||||
const splash = new BrowserWindow({
|
||||
width: 810,
|
||||
height: 610,
|
||||
width: Math.round(getScreenWidth() * 0.49),
|
||||
height: Math.round(getScreenHeight() * 0.65),
|
||||
transparent: true,
|
||||
frame: false,
|
||||
icon: path.join(__dirname, "/assets/icons/png/1024x1024.png"),
|
||||
icon: join(__dirname, "/assets/icons/png/1024x1024.png"),
|
||||
});
|
||||
|
||||
splash.loadURL(`https://agam778.github.io/MS-365-Electron/loading`);
|
||||
win.loadURL(
|
||||
`${getValue("enterprise-or-normal") || "https://microsoft365.com/?auth=1"}`,
|
||||
{
|
||||
userAgent: getValue("useragentstring") || useragents.Windows,
|
||||
}
|
||||
);
|
||||
|
||||
win.loadURL(`https://microsoft365.com/${custompage}/${enterpriseOrNormal}`, {
|
||||
userAgent: getValue("useragentstring") || Windows,
|
||||
});
|
||||
|
||||
win.webContents.on("did-finish-load", () => {
|
||||
splash.destroy();
|
||||
@@ -104,163 +114,159 @@ app.on("ready", () => {
|
||||
|
||||
app.on("web-contents-created", (event, contents) => {
|
||||
contents.setWindowOpenHandler(({ url }) => {
|
||||
if (getValue("websites-in-new-window") === "false") {
|
||||
if (url.includes("page=Download")) {
|
||||
return { action: "allow" };
|
||||
} else {
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.loadURL(url)
|
||||
.catch((err) => {
|
||||
// do not show error
|
||||
});
|
||||
if (getValue("discordrpcstatus") === "true") {
|
||||
setActivity(
|
||||
`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`
|
||||
);
|
||||
const urlObject = new URL(url);
|
||||
const domain = urlObject.hostname;
|
||||
const protocol = urlObject.protocol;
|
||||
|
||||
if (getValue("externalLinks") === "true") {
|
||||
if (protocol === "http:" || protocol === "https:") {
|
||||
const isAllowedDomain = domains.domains.some((allowedDomain) =>
|
||||
new RegExp(`^${allowedDomain.replace("*.", ".*")}$`).test(domain)
|
||||
);
|
||||
|
||||
if (isAllowedDomain) {
|
||||
if (getValue("websites-in-new-window") === "false") {
|
||||
if (url.includes("page=Download")) return { action: "allow" };
|
||||
BrowserWindow.getFocusedWindow().loadURL(url).catch();
|
||||
if (getValue("discordrpcstatus") === "true") {
|
||||
setActivity(`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`);
|
||||
}
|
||||
return { action: "deny" };
|
||||
} else {
|
||||
if (getValue("discordrpcstatus") === "true") {
|
||||
setActivity(`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`);
|
||||
}
|
||||
return {
|
||||
action: "allow",
|
||||
overrideBrowserWindowOptions: {
|
||||
width: Math.round(getScreenWidth() * (windowWidth - 0.07)),
|
||||
height: Math.round(getScreenHeight() * (windowHeight - 0.07)),
|
||||
},
|
||||
};
|
||||
}
|
||||
} else {
|
||||
shell.openExternal(url);
|
||||
return { action: "deny" };
|
||||
}
|
||||
} else {
|
||||
return { action: "deny" };
|
||||
}
|
||||
} else {
|
||||
if (getValue("discordrpcstatus") === "true") {
|
||||
setActivity(
|
||||
`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`
|
||||
);
|
||||
if (getValue("websites-in-new-window") === "false") {
|
||||
if (url.includes("page=Download")) return { action: "allow" };
|
||||
BrowserWindow.getFocusedWindow().loadURL(url).catch();
|
||||
if (getValue("discordrpcstatus") === "true") {
|
||||
setActivity(`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`);
|
||||
}
|
||||
return { action: "deny" };
|
||||
} else {
|
||||
if (getValue("discordrpcstatus") === "true") {
|
||||
setActivity(`On "${BrowserWindow.getFocusedWindow().webContents.getTitle()}"`);
|
||||
}
|
||||
return {
|
||||
action: "allow",
|
||||
overrideBrowserWindowOptions: {
|
||||
width: Math.round(getScreenWidth() * (windowWidth - 0.07)),
|
||||
height: Math.round(getScreenHeight() * (windowHeight - 0.07)),
|
||||
},
|
||||
};
|
||||
}
|
||||
return { action: "allow" };
|
||||
}
|
||||
});
|
||||
contents.on("did-finish-load", () => {
|
||||
if (getValue("dynamicicons") === "true") {
|
||||
if (BrowserWindow.getFocusedWindow()) {
|
||||
if (
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getURL()
|
||||
.includes("&ithint=file%2cpptx") ||
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getTitle()
|
||||
.includes(".pptx")
|
||||
BrowserWindow.getFocusedWindow().webContents.getURL().includes("&ithint=file%2cpptx") ||
|
||||
BrowserWindow.getFocusedWindow().webContents.getTitle().includes(".pptx")
|
||||
) {
|
||||
if (process.platform === "darwin") {
|
||||
app.dock.setIcon(
|
||||
path.join(__dirname, "../assets/icons/apps/powerpoint-mac.png")
|
||||
);
|
||||
app.dock.setIcon(join(__dirname, "../assets/icons/apps/powerpoint-mac.png"));
|
||||
} else if (process.platform === "win32") {
|
||||
let nimage = nativeImage.createFromPath(
|
||||
path.join(__dirname, "../assets/icons/apps/powerpoint.png")
|
||||
join(__dirname, "../assets/icons/apps/powerpoint.png")
|
||||
);
|
||||
BrowserWindow.getAllWindows().forEach((window) => {
|
||||
window.setOverlayIcon(nimage, "PowerPoint");
|
||||
});
|
||||
}
|
||||
} else if (
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getURL()
|
||||
.includes("&ithint=file%2cdocx") ||
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getTitle()
|
||||
.includes(".docx")
|
||||
BrowserWindow.getFocusedWindow().webContents.getURL().includes("&ithint=file%2cdocx") ||
|
||||
BrowserWindow.getFocusedWindow().webContents.getTitle().includes(".docx")
|
||||
) {
|
||||
if (process.platform === "darwin") {
|
||||
app.dock.setIcon(
|
||||
path.join(__dirname, "../assets/icons/apps/word-mac.png")
|
||||
);
|
||||
app.dock.setIcon(join(__dirname, "../assets/icons/apps/word-mac.png"));
|
||||
} else if (process.platform === "win32") {
|
||||
let nimage = nativeImage.createFromPath(
|
||||
path.join(__dirname, "../assets/icons/apps/word.png")
|
||||
join(__dirname, "../assets/icons/apps/word.png")
|
||||
);
|
||||
BrowserWindow.getAllWindows().forEach((window) => {
|
||||
window.setOverlayIcon(nimage, "Word");
|
||||
});
|
||||
}
|
||||
} else if (
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getURL()
|
||||
.includes("&ithint=file%2cxlsx") ||
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getTitle()
|
||||
.includes(".xlsx")
|
||||
BrowserWindow.getFocusedWindow().webContents.getURL().includes("&ithint=file%2cxlsx") ||
|
||||
BrowserWindow.getFocusedWindow().webContents.getTitle().includes(".xlsx")
|
||||
) {
|
||||
if (process.platform === "darwin") {
|
||||
app.dock.setIcon(
|
||||
path.join(__dirname, "../assets/icons/apps/excel-mac.png")
|
||||
);
|
||||
app.dock.setIcon(join(__dirname, "../assets/icons/apps/excel-mac.png"));
|
||||
} else if (process.platform === "win32") {
|
||||
let nimage = nativeImage.createFromPath(
|
||||
path.join(__dirname, "../assets/icons/apps/excel.png")
|
||||
join(__dirname, "../assets/icons/apps/excel.png")
|
||||
);
|
||||
BrowserWindow.getAllWindows().forEach((window) => {
|
||||
window.setOverlayIcon(nimage, "Excel");
|
||||
});
|
||||
}
|
||||
} else if (
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getURL()
|
||||
.includes("outlook.live.com") ||
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getURL()
|
||||
.includes("outlook.office.com")
|
||||
BrowserWindow.getFocusedWindow().webContents.getURL().includes("outlook.live.com") ||
|
||||
BrowserWindow.getFocusedWindow().webContents.getURL().includes("outlook.office.com")
|
||||
) {
|
||||
if (process.platform === "darwin") {
|
||||
app.dock.setIcon(
|
||||
path.join(__dirname, "../assets/icons/apps/outlook-mac.png")
|
||||
);
|
||||
app.dock.setIcon(join(__dirname, "../assets/icons/apps/outlook-mac.png"));
|
||||
} else if (process.platform === "win32") {
|
||||
let nimage = nativeImage.createFromPath(
|
||||
path.join(__dirname, "../assets/icons/apps/outlook.png")
|
||||
join(__dirname, "../assets/icons/apps/outlook.png")
|
||||
);
|
||||
BrowserWindow.getAllWindows().forEach((window) => {
|
||||
window.setOverlayIcon(nimage, "Outlook");
|
||||
});
|
||||
}
|
||||
} else if (
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getURL()
|
||||
.includes("onedrive.live.com") ||
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getURL()
|
||||
.includes("onedrive.aspx")
|
||||
BrowserWindow.getFocusedWindow().webContents.getURL().includes("onedrive.live.com") ||
|
||||
BrowserWindow.getFocusedWindow().webContents.getURL().includes("onedrive.aspx")
|
||||
) {
|
||||
if (process.platform === "darwin") {
|
||||
app.dock.setIcon(
|
||||
path.join(__dirname, "../assets/icons/apps/onedrive-mac.png")
|
||||
);
|
||||
app.dock.setIcon(join(__dirname, "../assets/icons/apps/onedrive-mac.png"));
|
||||
} else if (process.platform === "win32") {
|
||||
let nimage = nativeImage.createFromPath(
|
||||
path.join(__dirname, "../assets/icons/apps/onedrive.png")
|
||||
join(__dirname, "../assets/icons/apps/onedrive.png")
|
||||
);
|
||||
BrowserWindow.getAllWindows().forEach((window) => {
|
||||
window.setOverlayIcon(nimage, "OneDrive");
|
||||
});
|
||||
}
|
||||
} else if (
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getURL()
|
||||
.includes("teams.live.com")
|
||||
BrowserWindow.getFocusedWindow().webContents.getURL().includes("teams.live.com")
|
||||
) {
|
||||
if (process.platform === "darwin") {
|
||||
app.dock.setIcon(
|
||||
path.join(__dirname, "../assets/icons/apps/teams-mac.png")
|
||||
);
|
||||
app.dock.setIcon(join(__dirname, "../assets/icons/apps/teams-mac.png"));
|
||||
} else if (process.platform === "win32") {
|
||||
let nimage = nativeImage.createFromPath(
|
||||
path.join(__dirname, "../assets/icons/apps/teams.png")
|
||||
join(__dirname, "../assets/icons/apps/teams.png")
|
||||
);
|
||||
BrowserWindow.getAllWindows().forEach((window) => {
|
||||
window.setOverlayIcon(nimage, "Teams");
|
||||
});
|
||||
}
|
||||
} else if (
|
||||
BrowserWindow.getFocusedWindow()
|
||||
.webContents.getURL()
|
||||
.includes("&ithint=onenote")
|
||||
BrowserWindow.getFocusedWindow().webContents.getURL().includes("&ithint=onenote")
|
||||
) {
|
||||
if (process.platform === "darwin") {
|
||||
app.dock.setIcon(
|
||||
path.join(__dirname, "../assets/icons/apps/onenote-mac.png")
|
||||
);
|
||||
app.dock.setIcon(join(__dirname, "../assets/icons/apps/onenote-mac.png"));
|
||||
} else if (process.platform === "win32") {
|
||||
let nimage = nativeImage.createFromPath(
|
||||
path.join(__dirname, "../assets/icons/apps/onenote.png")
|
||||
join(__dirname, "../assets/icons/apps/onenote.png")
|
||||
);
|
||||
BrowserWindow.getAllWindows().forEach((window) => {
|
||||
window.setOverlayIcon(nimage, "OneNote");
|
||||
@@ -277,10 +283,69 @@ app.on("web-contents-created", (event, contents) => {
|
||||
}
|
||||
}
|
||||
}
|
||||
BrowserWindow.getAllWindows().forEach((window) => {
|
||||
if (window.webContents.getURL().includes("outlook.live.com")) {
|
||||
window.webContents
|
||||
.executeJavaScript(
|
||||
`
|
||||
const observer = new MutationObserver((mutationsList) => {
|
||||
let adElementFound = false;
|
||||
for (const mutation of mutationsList) {
|
||||
if (mutation.type === 'childList') {
|
||||
const adElement = document.querySelector('div.GssDD');
|
||||
if (adElement) {
|
||||
adElement.remove();
|
||||
adElementFound = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (adElementFound) {
|
||||
observer.disconnect();
|
||||
}
|
||||
});
|
||||
|
||||
observer.observe(document.body, { childList: true, subtree: true });
|
||||
|
||||
const adElement = document.querySelector('div.GssDD');
|
||||
if (adElement) {
|
||||
adElement.remove();
|
||||
observer.disconnect();
|
||||
}
|
||||
`
|
||||
)
|
||||
.catch();
|
||||
}
|
||||
});
|
||||
contents.insertCSS(
|
||||
`
|
||||
::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: transparent;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: #555;
|
||||
}
|
||||
`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
app.on("browser-window-created", (event, window) => {
|
||||
if (getValue("autohide-menubar") === "true") {
|
||||
window.setAutoHideMenuBar(true);
|
||||
} else {
|
||||
window.setAutoHideMenuBar(false);
|
||||
}
|
||||
window.webContents.on("did-finish-load", () => {
|
||||
if (getValue("discordrpcstatus") === "true") {
|
||||
setActivity(`On "${window.webContents.getTitle()}"`);
|
||||
|
||||
1229
app/menu.js
1229
app/menu.js
File diff suppressed because it is too large
Load Diff
21
app/store.js
21
app/store.js
@@ -1,21 +0,0 @@
|
||||
const Store = require("electron-store");
|
||||
const store = new Store();
|
||||
|
||||
function getValue(key) {
|
||||
return store.get(key);
|
||||
}
|
||||
|
||||
function setValue(key, value) {
|
||||
store.set(key, value);
|
||||
}
|
||||
|
||||
function getValueOrDefault(key, defaultValue) {
|
||||
const value = store.get(key);
|
||||
if (value === undefined) {
|
||||
store.set(key, defaultValue);
|
||||
return defaultValue;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
module.exports = { getValue, setValue, getValueOrDefault };
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"Windows": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
|
||||
"macOS": "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
|
||||
"Linux": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
|
||||
"Windows": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
|
||||
"macOS": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
|
||||
"Linux": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
|
||||
}
|
||||
|
||||
210
docs/index.css
210
docs/index.css
@@ -5,6 +5,12 @@ body {
|
||||
background-size: auto;
|
||||
background-repeat: no-repeat;
|
||||
background-attachment: fixed;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
@@ -19,16 +25,55 @@ body {
|
||||
--font-size-sm: 14px;
|
||||
--color-aliceblue-100: #f3f8ff;
|
||||
--br-5xs: 8px;
|
||||
--color-download: #00a7ff;
|
||||
--color-github: #333;
|
||||
}
|
||||
|
||||
.download-now {
|
||||
position: relative;
|
||||
font-size: var(--font-size-sm);
|
||||
line-height: 19px;
|
||||
font-weight: 600;
|
||||
.container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
max-width: 1200px;
|
||||
padding: 20px;
|
||||
font-family: var(--font-poppins);
|
||||
color: var(--color-aliceblue-100);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.ms-365-electron {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: center;
|
||||
width: 50%;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.heading {
|
||||
font-size: 85px;
|
||||
line-height: 90px;
|
||||
color: #292e37;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.byagam778 {
|
||||
font-size: 38px;
|
||||
line-height: 50px;
|
||||
font-family: 'SF Pro Text',-apple-system,BlinkMacSystemFont,var(--font-san-francisco);
|
||||
color: #00acff;
|
||||
cursor: pointer;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.description {
|
||||
font-size: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.buttons {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.download,
|
||||
@@ -37,155 +82,100 @@ body {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
background-color: transparent;
|
||||
position: absolute;
|
||||
margin-top: 597px;
|
||||
border-radius: var(--br-5xs);
|
||||
width: 190px;
|
||||
height: 62px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: all 0.5ms ease;
|
||||
}
|
||||
|
||||
.download {
|
||||
margin-left: 172px;
|
||||
background: linear-gradient(90.05deg, #45bfff 26.58%, #00a7ff);
|
||||
background: linear-gradient(90.05deg, #45bfff 26.58%, var(--color-download));
|
||||
box-shadow: 0 24px 30px -16px rgba(45, 183, 255, 0.25);
|
||||
}
|
||||
|
||||
.github {
|
||||
margin-left: 392px;
|
||||
background: linear-gradient(90.05deg, #424242 26.58%, #333);
|
||||
background: linear-gradient(90.05deg, #424242 26.58%, var(--color-github));
|
||||
box-shadow: 0 24px 30px -16px rgba(66, 66, 66, 0.25);
|
||||
}
|
||||
|
||||
.description,
|
||||
.heading {
|
||||
position: absolute;
|
||||
margin-top: 505px;
|
||||
margin-left: 172px;
|
||||
line-height: 26px;
|
||||
display: inline-block;
|
||||
width: 388px;
|
||||
.download:hover {
|
||||
background: transparent;
|
||||
border: 3px solid var(--color-download);
|
||||
color: black;
|
||||
}
|
||||
|
||||
.heading {
|
||||
margin-top: 285px;
|
||||
margin-left: 166px;
|
||||
font-size: 85px;
|
||||
line-height: 90px;
|
||||
color: #292e37;
|
||||
width: 461px;
|
||||
.github:hover {
|
||||
background: transparent;
|
||||
border: 3px solid var(--color-github);
|
||||
color: black;
|
||||
}
|
||||
|
||||
.byagam778 {
|
||||
position: absolute;
|
||||
margin-top: 219px;
|
||||
margin-left: 170px;
|
||||
font-size: 38px;
|
||||
line-height: 50px;
|
||||
font-family: 'SF Pro Text',-apple-system,BlinkMacSystemFont,var(--font-san-francisco);
|
||||
color: #00acff;
|
||||
cursor: pointer;
|
||||
.download-now {
|
||||
font-size: var(--font-size-sm);
|
||||
line-height: 19px;
|
||||
font-weight: 600;
|
||||
color: var(--color-aliceblue-100);
|
||||
transition: color 0.5s ease;
|
||||
}
|
||||
|
||||
.content,
|
||||
.preview-icon {
|
||||
position: absolute;
|
||||
margin-top: -93px;
|
||||
margin-left: 0;
|
||||
width: 890px;
|
||||
height: 834px;
|
||||
}
|
||||
|
||||
.content {
|
||||
transform: translate(-50%, -50%);
|
||||
margin-left: 30%;
|
||||
margin-top: 21.5%;
|
||||
.download:hover .download-now,
|
||||
.github:hover .download-now {
|
||||
color: black;
|
||||
}
|
||||
|
||||
.preview-icon {
|
||||
position: absolute;
|
||||
margin-top: 23%;
|
||||
margin-left: 68%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 708px;
|
||||
height: 447px;
|
||||
width: 50%;
|
||||
max-width: 708px;
|
||||
height: auto;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.ms-365-electron {
|
||||
width: 100%;
|
||||
height: 696px;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
text-align: left;
|
||||
font-size: 18px;
|
||||
color: #525d73;
|
||||
font-family: var(--font-poppins);
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.preview-icon {
|
||||
width: 78%;
|
||||
height: auto;
|
||||
margin-top: 45%;
|
||||
margin-left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
.container {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.content {
|
||||
margin-top: 77%;
|
||||
.preview-icon {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.ms-365-electron {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.heading {
|
||||
text-align: center;
|
||||
font-size: 30px;
|
||||
height: auto;
|
||||
margin-top: 56%;
|
||||
margin-left: 59%;
|
||||
transform: translate(-50%, -50%);
|
||||
line-height: 36px;
|
||||
}
|
||||
|
||||
.byagam778 {
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
font-size: 26px;
|
||||
height: auto;
|
||||
margin-top: 50%;
|
||||
margin-left: 59%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.description {
|
||||
text-align: center;
|
||||
width: 40%;
|
||||
font-size: 20px;
|
||||
height: auto;
|
||||
margin-top: 65%;
|
||||
margin-left: 59%;
|
||||
transform: translate(-50%, -50%);
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.download,
|
||||
.github {
|
||||
text-align: center;
|
||||
font-size: 20px;
|
||||
margin-top: 85%;
|
||||
margin-left: 59%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.download {
|
||||
text-align: center;
|
||||
font-size: 20px;
|
||||
margin-top: 77%;
|
||||
margin-left: 59%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 160px;
|
||||
height: 54px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.download-now {
|
||||
font-size: 14px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.buttons {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user