aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package.json5
-rw-r--r--pnpm-lock.yaml587
-rw-r--r--src/@types/stores.types.ts1
-rw-r--r--src/actions/app.ts6
-rw-r--r--src/actions/ui.ts3
-rw-r--r--src/components/downloadManager/DownloadManagerDashboard.tsx288
-rw-r--r--src/components/downloadManager/DownloadManagerLayout.tsx81
-rw-r--r--src/components/layout/Sidebar.tsx27
-rw-r--r--src/components/settings/settings/EditSettingsForm.tsx2
-rw-r--r--src/config.ts1
-rw-r--r--src/containers/download-manager/DownloadManagerScreen.tsx15
-rw-r--r--src/containers/download-manager/DownloadManagerWindow.tsx46
-rw-r--r--src/containers/layout/AppLayoutContainer.tsx4
-rw-r--r--src/containers/settings/EditSettingsScreen.tsx14
-rw-r--r--src/environment.ts2
-rw-r--r--src/i18n/globalMessages.ts4
-rw-r--r--src/i18n/locales/en-US.json4
-rw-r--r--src/index.ts10
-rw-r--r--src/lib/Menu.ts19
-rw-r--r--src/models/Service.ts81
-rw-r--r--src/routes.tsx11
-rw-r--r--src/stores/AppStore.ts104
-rw-r--r--src/stores/UIStore.ts7
-rw-r--r--src/styles/layout.scss21
24 files changed, 1250 insertions, 93 deletions
diff --git a/package.json b/package.json
index bda85fa1e..8cd3a3c66 100644
--- a/package.json
+++ b/package.json
@@ -62,9 +62,13 @@
62 "@adonisjs/shield": "1.1.0", 62 "@adonisjs/shield": "1.1.0",
63 "@adonisjs/validator": "5.1.0", 63 "@adonisjs/validator": "5.1.0",
64 "@electron/remote": "2.0.10", 64 "@electron/remote": "2.0.10",
65 "@emotion/react": "11.11.1",
66 "@emotion/styled": "11.11.0",
65 "@krisdages/electron-process-manager": "3.0.0", 67 "@krisdages/electron-process-manager": "3.0.0",
66 "@mdi/js": "7.2.96", 68 "@mdi/js": "7.2.96",
67 "@mdi/react": "1.6.1", 69 "@mdi/react": "1.6.1",
70 "@mui/icons-material": "5.14.7",
71 "@mui/material": "5.14.7",
68 "@octokit/core": "5.0.0", 72 "@octokit/core": "5.0.0",
69 "@sentry/electron": "4.1.2", 73 "@sentry/electron": "4.1.2",
70 "@superwf/mobx-react-router": "7.4.0", 74 "@superwf/mobx-react-router": "7.4.0",
@@ -103,6 +107,7 @@
103 "os-name": "4.0.1", 107 "os-name": "4.0.1",
104 "pretty-bytes": "5.6.0", 108 "pretty-bytes": "5.6.0",
105 "prop-types": "15.8.1", 109 "prop-types": "15.8.1",
110 "rc-progress": "3.5.1",
106 "react": "18.2.0", 111 "react": "18.2.0",
107 "react-color": "2.19.3", 112 "react-color": "2.19.3",
108 "react-confetti": "6.1.0", 113 "react-confetti": "6.1.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 725b80aa4..0ae59f33a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -47,6 +47,12 @@ dependencies:
47 '@electron/remote': 47 '@electron/remote':
48 specifier: 2.0.10 48 specifier: 2.0.10
49 version: 2.0.10(electron@25.5.0) 49 version: 2.0.10(electron@25.5.0)
50 '@emotion/react':
51 specifier: 11.11.1
52 version: 11.11.1(@types/react@18.2.20)(react@18.2.0)
53 '@emotion/styled':
54 specifier: 11.11.0
55 version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.20)(react@18.2.0)
50 '@krisdages/electron-process-manager': 56 '@krisdages/electron-process-manager':
51 specifier: 3.0.0 57 specifier: 3.0.0
52 version: 3.0.0(@electron/remote@2.0.10)(electron@25.5.0)(rxjs@7.8.1) 58 version: 3.0.0(@electron/remote@2.0.10)(electron@25.5.0)(rxjs@7.8.1)
@@ -56,6 +62,12 @@ dependencies:
56 '@mdi/react': 62 '@mdi/react':
57 specifier: 1.6.1 63 specifier: 1.6.1
58 version: 1.6.1 64 version: 1.6.1
65 '@mui/icons-material':
66 specifier: 5.14.7
67 version: 5.14.7(@mui/material@5.14.7)(@types/react@18.2.20)(react@18.2.0)
68 '@mui/material':
69 specifier: 5.14.7
70 version: 5.14.7(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0)
59 '@octokit/core': 71 '@octokit/core':
60 specifier: 5.0.0 72 specifier: 5.0.0
61 version: 5.0.0 73 version: 5.0.0
@@ -170,6 +182,9 @@ dependencies:
170 prop-types: 182 prop-types:
171 specifier: 15.8.1 183 specifier: 15.8.1
172 version: 15.8.1 184 version: 15.8.1
185 rc-progress:
186 specifier: 3.5.1
187 version: 3.5.1(react-dom@18.2.0)(react@18.2.0)
173 react: 188 react:
174 specifier: 18.2.0 189 specifier: 18.2.0
175 version: 18.2.0 190 version: 18.2.0
@@ -657,14 +672,6 @@ packages:
657 dependencies: 672 dependencies:
658 '@babel/highlight': 7.22.10 673 '@babel/highlight': 7.22.10
659 chalk: 2.4.2 674 chalk: 2.4.2
660 dev: true
661
662 /@babel/code-frame@7.22.5:
663 resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==}
664 engines: {node: '>=6.9.0'}
665 dependencies:
666 '@babel/highlight': 7.22.5
667 dev: true
668 675
669 /@babel/compat-data@7.22.9: 676 /@babel/compat-data@7.22.9:
670 resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} 677 resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==}
@@ -684,7 +691,7 @@ packages:
684 '@babel/parser': 7.22.10 691 '@babel/parser': 7.22.10
685 '@babel/template': 7.22.5 692 '@babel/template': 7.22.5
686 '@babel/traverse': 7.22.10 693 '@babel/traverse': 7.22.10
687 '@babel/types': 7.22.10 694 '@babel/types': 7.22.11
688 convert-source-map: 1.9.0 695 convert-source-map: 1.9.0
689 debug: 4.3.4 696 debug: 4.3.4
690 gensync: 1.0.0-beta.2 697 gensync: 1.0.0-beta.2
@@ -735,7 +742,7 @@ packages:
735 resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} 742 resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==}
736 engines: {node: '>=6.9.0'} 743 engines: {node: '>=6.9.0'}
737 dependencies: 744 dependencies:
738 '@babel/types': 7.22.10 745 '@babel/types': 7.22.11
739 '@jridgewell/gen-mapping': 0.3.3 746 '@jridgewell/gen-mapping': 0.3.3
740 '@jridgewell/trace-mapping': 0.3.19 747 '@jridgewell/trace-mapping': 0.3.19
741 jsesc: 2.5.2 748 jsesc: 2.5.2
@@ -762,22 +769,21 @@ packages:
762 engines: {node: '>=6.9.0'} 769 engines: {node: '>=6.9.0'}
763 dependencies: 770 dependencies:
764 '@babel/template': 7.22.5 771 '@babel/template': 7.22.5
765 '@babel/types': 7.22.10 772 '@babel/types': 7.22.11
766 dev: true 773 dev: true
767 774
768 /@babel/helper-hoist-variables@7.22.5: 775 /@babel/helper-hoist-variables@7.22.5:
769 resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 776 resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
770 engines: {node: '>=6.9.0'} 777 engines: {node: '>=6.9.0'}
771 dependencies: 778 dependencies:
772 '@babel/types': 7.22.10 779 '@babel/types': 7.22.11
773 dev: true 780 dev: true
774 781
775 /@babel/helper-module-imports@7.22.5: 782 /@babel/helper-module-imports@7.22.5:
776 resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} 783 resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==}
777 engines: {node: '>=6.9.0'} 784 engines: {node: '>=6.9.0'}
778 dependencies: 785 dependencies:
779 '@babel/types': 7.22.10 786 '@babel/types': 7.22.11
780 dev: true
781 787
782 /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.10): 788 /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.10):
783 resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} 789 resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==}
@@ -816,25 +822,23 @@ packages:
816 resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 822 resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
817 engines: {node: '>=6.9.0'} 823 engines: {node: '>=6.9.0'}
818 dependencies: 824 dependencies:
819 '@babel/types': 7.22.10 825 '@babel/types': 7.22.11
820 dev: true 826 dev: true
821 827
822 /@babel/helper-split-export-declaration@7.22.6: 828 /@babel/helper-split-export-declaration@7.22.6:
823 resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 829 resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
824 engines: {node: '>=6.9.0'} 830 engines: {node: '>=6.9.0'}
825 dependencies: 831 dependencies:
826 '@babel/types': 7.22.10 832 '@babel/types': 7.22.11
827 dev: true 833 dev: true
828 834
829 /@babel/helper-string-parser@7.22.5: 835 /@babel/helper-string-parser@7.22.5:
830 resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} 836 resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
831 engines: {node: '>=6.9.0'} 837 engines: {node: '>=6.9.0'}
832 dev: true
833 838
834 /@babel/helper-validator-identifier@7.22.5: 839 /@babel/helper-validator-identifier@7.22.5:
835 resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} 840 resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
836 engines: {node: '>=6.9.0'} 841 engines: {node: '>=6.9.0'}
837 dev: true
838 842
839 /@babel/helper-validator-option@7.22.5: 843 /@babel/helper-validator-option@7.22.5:
840 resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} 844 resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==}
@@ -847,7 +851,7 @@ packages:
847 dependencies: 851 dependencies:
848 '@babel/template': 7.22.5 852 '@babel/template': 7.22.5
849 '@babel/traverse': 7.22.10 853 '@babel/traverse': 7.22.10
850 '@babel/types': 7.22.10 854 '@babel/types': 7.22.11
851 transitivePeerDependencies: 855 transitivePeerDependencies:
852 - supports-color 856 - supports-color
853 dev: true 857 dev: true
@@ -870,23 +874,13 @@ packages:
870 '@babel/helper-validator-identifier': 7.22.5 874 '@babel/helper-validator-identifier': 7.22.5
871 chalk: 2.4.2 875 chalk: 2.4.2
872 js-tokens: 4.0.0 876 js-tokens: 4.0.0
873 dev: true
874
875 /@babel/highlight@7.22.5:
876 resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==}
877 engines: {node: '>=6.9.0'}
878 dependencies:
879 '@babel/helper-validator-identifier': 7.22.5
880 chalk: 2.4.2
881 js-tokens: 4.0.0
882 dev: true
883 877
884 /@babel/parser@7.22.10: 878 /@babel/parser@7.22.10:
885 resolution: {integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==} 879 resolution: {integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==}
886 engines: {node: '>=6.0.0'} 880 engines: {node: '>=6.0.0'}
887 hasBin: true 881 hasBin: true
888 dependencies: 882 dependencies:
889 '@babel/types': 7.22.10 883 '@babel/types': 7.22.11
890 dev: true 884 dev: true
891 885
892 /@babel/parser@7.22.11: 886 /@babel/parser@7.22.11:
@@ -1045,13 +1039,19 @@ packages:
1045 dependencies: 1039 dependencies:
1046 regenerator-runtime: 0.13.11 1040 regenerator-runtime: 0.13.11
1047 1041
1042 /@babel/runtime@7.22.11:
1043 resolution: {integrity: sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==}
1044 engines: {node: '>=6.9.0'}
1045 dependencies:
1046 regenerator-runtime: 0.14.0
1047
1048 /@babel/template@7.22.5: 1048 /@babel/template@7.22.5:
1049 resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} 1049 resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==}
1050 engines: {node: '>=6.9.0'} 1050 engines: {node: '>=6.9.0'}
1051 dependencies: 1051 dependencies:
1052 '@babel/code-frame': 7.22.10 1052 '@babel/code-frame': 7.22.10
1053 '@babel/parser': 7.22.10 1053 '@babel/parser': 7.22.10
1054 '@babel/types': 7.22.10 1054 '@babel/types': 7.22.11
1055 dev: true 1055 dev: true
1056 1056
1057 /@babel/traverse@7.22.10: 1057 /@babel/traverse@7.22.10:
@@ -1065,7 +1065,7 @@ packages:
1065 '@babel/helper-hoist-variables': 7.22.5 1065 '@babel/helper-hoist-variables': 7.22.5
1066 '@babel/helper-split-export-declaration': 7.22.6 1066 '@babel/helper-split-export-declaration': 7.22.6
1067 '@babel/parser': 7.22.10 1067 '@babel/parser': 7.22.10
1068 '@babel/types': 7.22.10 1068 '@babel/types': 7.22.11
1069 debug: 4.3.4 1069 debug: 4.3.4
1070 globals: 11.12.0 1070 globals: 11.12.0
1071 transitivePeerDependencies: 1071 transitivePeerDependencies:
@@ -1090,15 +1090,6 @@ packages:
1090 - supports-color 1090 - supports-color
1091 dev: true 1091 dev: true
1092 1092
1093 /@babel/types@7.22.10:
1094 resolution: {integrity: sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==}
1095 engines: {node: '>=6.9.0'}
1096 dependencies:
1097 '@babel/helper-string-parser': 7.22.5
1098 '@babel/helper-validator-identifier': 7.22.5
1099 to-fast-properties: 2.0.0
1100 dev: true
1101
1102 /@babel/types@7.22.11: 1093 /@babel/types@7.22.11:
1103 resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} 1094 resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==}
1104 engines: {node: '>=6.9.0'} 1095 engines: {node: '>=6.9.0'}
@@ -1106,7 +1097,6 @@ packages:
1106 '@babel/helper-string-parser': 7.22.5 1097 '@babel/helper-string-parser': 7.22.5
1107 '@babel/helper-validator-identifier': 7.22.5 1098 '@babel/helper-validator-identifier': 7.22.5
1108 to-fast-properties: 2.0.0 1099 to-fast-properties: 2.0.0
1109 dev: true
1110 1100
1111 /@bcoe/v8-coverage@0.2.3: 1101 /@bcoe/v8-coverage@0.2.3:
1112 resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 1102 resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
@@ -1405,16 +1395,132 @@ packages:
1405 - supports-color 1395 - supports-color
1406 dev: true 1396 dev: true
1407 1397
1398 /@emotion/babel-plugin@11.11.0:
1399 resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==}
1400 dependencies:
1401 '@babel/helper-module-imports': 7.22.5
1402 '@babel/runtime': 7.22.11
1403 '@emotion/hash': 0.9.1
1404 '@emotion/memoize': 0.8.1
1405 '@emotion/serialize': 1.1.2
1406 babel-plugin-macros: 3.1.0
1407 convert-source-map: 1.9.0
1408 escape-string-regexp: 4.0.0
1409 find-root: 1.1.0
1410 source-map: 0.5.7
1411 stylis: 4.2.0
1412 dev: false
1413
1414 /@emotion/cache@11.11.0:
1415 resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==}
1416 dependencies:
1417 '@emotion/memoize': 0.8.1
1418 '@emotion/sheet': 1.2.2
1419 '@emotion/utils': 1.2.1
1420 '@emotion/weak-memoize': 0.3.1
1421 stylis: 4.2.0
1422 dev: false
1423
1424 /@emotion/hash@0.9.1:
1425 resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==}
1426 dev: false
1427
1408 /@emotion/is-prop-valid@0.7.3: 1428 /@emotion/is-prop-valid@0.7.3:
1409 resolution: {integrity: sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==} 1429 resolution: {integrity: sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==}
1410 dependencies: 1430 dependencies:
1411 '@emotion/memoize': 0.7.1 1431 '@emotion/memoize': 0.7.1
1412 dev: false 1432 dev: false
1413 1433
1434 /@emotion/is-prop-valid@1.2.1:
1435 resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==}
1436 dependencies:
1437 '@emotion/memoize': 0.8.1
1438 dev: false
1439
1414 /@emotion/memoize@0.7.1: 1440 /@emotion/memoize@0.7.1:
1415 resolution: {integrity: sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg==} 1441 resolution: {integrity: sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg==}
1416 dev: false 1442 dev: false
1417 1443
1444 /@emotion/memoize@0.8.1:
1445 resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
1446 dev: false
1447
1448 /@emotion/react@11.11.1(@types/react@18.2.20)(react@18.2.0):
1449 resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==}
1450 peerDependencies:
1451 '@types/react': '*'
1452 react: '>=16.8.0'
1453 peerDependenciesMeta:
1454 '@types/react':
1455 optional: true
1456 dependencies:
1457 '@babel/runtime': 7.22.11
1458 '@emotion/babel-plugin': 11.11.0
1459 '@emotion/cache': 11.11.0
1460 '@emotion/serialize': 1.1.2
1461 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0)
1462 '@emotion/utils': 1.2.1
1463 '@emotion/weak-memoize': 0.3.1
1464 '@types/react': 18.2.20
1465 hoist-non-react-statics: 3.3.2
1466 react: 18.2.0
1467 dev: false
1468
1469 /@emotion/serialize@1.1.2:
1470 resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==}
1471 dependencies:
1472 '@emotion/hash': 0.9.1
1473 '@emotion/memoize': 0.8.1
1474 '@emotion/unitless': 0.8.1
1475 '@emotion/utils': 1.2.1
1476 csstype: 3.1.2
1477 dev: false
1478
1479 /@emotion/sheet@1.2.2:
1480 resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==}
1481 dev: false
1482
1483 /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.2.20)(react@18.2.0):
1484 resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==}
1485 peerDependencies:
1486 '@emotion/react': ^11.0.0-rc.0
1487 '@types/react': '*'
1488 react: '>=16.8.0'
1489 peerDependenciesMeta:
1490 '@types/react':
1491 optional: true
1492 dependencies:
1493 '@babel/runtime': 7.22.11
1494 '@emotion/babel-plugin': 11.11.0
1495 '@emotion/is-prop-valid': 1.2.1
1496 '@emotion/react': 11.11.1(@types/react@18.2.20)(react@18.2.0)
1497 '@emotion/serialize': 1.1.2
1498 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0)
1499 '@emotion/utils': 1.2.1
1500 '@types/react': 18.2.20
1501 react: 18.2.0
1502 dev: false
1503
1504 /@emotion/unitless@0.8.1:
1505 resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
1506 dev: false
1507
1508 /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0):
1509 resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==}
1510 peerDependencies:
1511 react: '>=16.8.0'
1512 dependencies:
1513 react: 18.2.0
1514 dev: false
1515
1516 /@emotion/utils@1.2.1:
1517 resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==}
1518 dev: false
1519
1520 /@emotion/weak-memoize@0.3.1:
1521 resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==}
1522 dev: false
1523
1418 /@esbuild/android-arm64@0.16.17: 1524 /@esbuild/android-arm64@0.16.17:
1419 resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} 1525 resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==}
1420 engines: {node: '>=12'} 1526 engines: {node: '>=12'}
@@ -1659,12 +1765,40 @@ packages:
1659 resolution: {integrity: sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==} 1765 resolution: {integrity: sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==}
1660 dev: false 1766 dev: false
1661 1767
1768 /@floating-ui/core@1.4.1:
1769 resolution: {integrity: sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==}
1770 dependencies:
1771 '@floating-ui/utils': 0.1.1
1772 dev: false
1773
1662 /@floating-ui/dom@1.4.5: 1774 /@floating-ui/dom@1.4.5:
1663 resolution: {integrity: sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==} 1775 resolution: {integrity: sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==}
1664 dependencies: 1776 dependencies:
1665 '@floating-ui/core': 1.3.1 1777 '@floating-ui/core': 1.3.1
1666 dev: false 1778 dev: false
1667 1779
1780 /@floating-ui/dom@1.5.1:
1781 resolution: {integrity: sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==}
1782 dependencies:
1783 '@floating-ui/core': 1.4.1
1784 '@floating-ui/utils': 0.1.1
1785 dev: false
1786
1787 /@floating-ui/react-dom@2.0.2(react-dom@18.2.0)(react@18.2.0):
1788 resolution: {integrity: sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==}
1789 peerDependencies:
1790 react: '>=16.8.0'
1791 react-dom: '>=16.8.0'
1792 dependencies:
1793 '@floating-ui/dom': 1.5.1
1794 react: 18.2.0
1795 react-dom: 18.2.0(react@18.2.0)
1796 dev: false
1797
1798 /@floating-ui/utils@0.1.1:
1799 resolution: {integrity: sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==}
1800 dev: false
1801
1668 /@formatjs/cli@6.1.3: 1802 /@formatjs/cli@6.1.3:
1669 resolution: {integrity: sha512-PdTXZTY8LqxwmvFqdifn89gjXnPUpGtGyFs0BnoeLuOuxZFSnBfIs5WQCVMaJnr1+0vNNlXyT0VAIAwjRpf6BA==} 1803 resolution: {integrity: sha512-PdTXZTY8LqxwmvFqdifn89gjXnPUpGtGyFs0BnoeLuOuxZFSnBfIs5WQCVMaJnr1+0vNNlXyT0VAIAwjRpf6BA==}
1670 engines: {node: '>= 16'} 1804 engines: {node: '>= 16'}
@@ -1746,6 +1880,7 @@ packages:
1746 1880
1747 /@gar/promisify@1.1.3: 1881 /@gar/promisify@1.1.3:
1748 resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} 1882 resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
1883 requiresBuild: true
1749 dev: false 1884 dev: false
1750 optional: true 1885 optional: true
1751 1886
@@ -2170,6 +2305,182 @@ packages:
2170 prop-types: 15.8.1 2305 prop-types: 15.8.1
2171 dev: false 2306 dev: false
2172 2307
2308 /@mui/base@5.0.0-beta.13(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0):
2309 resolution: {integrity: sha512-uC0l97pBspfDAp+iz2cJq8YZ8Sd9i73V77+WzUiOAckIVEyCm5dyVDZCCO2/phmzckVEeZCGcytybkjMQuhPQw==}
2310 engines: {node: '>=12.0.0'}
2311 peerDependencies:
2312 '@types/react': ^17.0.0 || ^18.0.0
2313 react: ^17.0.0 || ^18.0.0
2314 react-dom: ^17.0.0 || ^18.0.0
2315 peerDependenciesMeta:
2316 '@types/react':
2317 optional: true
2318 dependencies:
2319 '@babel/runtime': 7.22.11
2320 '@emotion/is-prop-valid': 1.2.1
2321 '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0)(react@18.2.0)
2322 '@mui/types': 7.2.4(@types/react@18.2.20)
2323 '@mui/utils': 5.14.7(react@18.2.0)
2324 '@popperjs/core': 2.11.8
2325 '@types/react': 18.2.20
2326 clsx: 2.0.0
2327 prop-types: 15.8.1
2328 react: 18.2.0
2329 react-dom: 18.2.0(react@18.2.0)
2330 react-is: 18.2.0
2331 dev: false
2332
2333 /@mui/core-downloads-tracker@5.14.7:
2334 resolution: {integrity: sha512-sCWTUNElBPgB30iLvWe3PU7SIlTKZNf6/E/sko85iHVeHCM6WPkDw+y89CrZYjhFNmPqt2fIQM/pZu+rP2lFLA==}
2335 dev: false
2336
2337 /@mui/icons-material@5.14.7(@mui/material@5.14.7)(@types/react@18.2.20)(react@18.2.0):
2338 resolution: {integrity: sha512-mWp4DwMa8c1Gx9yOEtPgxM4b+e6hAbtZyzfSubdBwrnEE6G5D2rbAJ5MB+If6kfI48JaYaJ5j8+zAdmZLuZc0A==}
2339 engines: {node: '>=12.0.0'}
2340 peerDependencies:
2341 '@mui/material': ^5.0.0
2342 '@types/react': ^17.0.0 || ^18.0.0
2343 react: ^17.0.0 || ^18.0.0
2344 peerDependenciesMeta:
2345 '@types/react':
2346 optional: true
2347 dependencies:
2348 '@babel/runtime': 7.22.11
2349 '@mui/material': 5.14.7(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0)
2350 '@types/react': 18.2.20
2351 react: 18.2.0
2352 dev: false
2353
2354 /@mui/material@5.14.7(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0):
2355 resolution: {integrity: sha512-jIZj9F7zMv6IlyaYDVv5M2Kp20jIX8c0kzuwteySHS/A0IvPVyomQEPtWc51MCbpDNCqzwoZUp3rQtA2lI8k7A==}
2356 engines: {node: '>=12.0.0'}
2357 peerDependencies:
2358 '@emotion/react': ^11.5.0
2359 '@emotion/styled': ^11.3.0
2360 '@types/react': ^17.0.0 || ^18.0.0
2361 react: ^17.0.0 || ^18.0.0
2362 react-dom: ^17.0.0 || ^18.0.0
2363 peerDependenciesMeta:
2364 '@emotion/react':
2365 optional: true
2366 '@emotion/styled':
2367 optional: true
2368 '@types/react':
2369 optional: true
2370 dependencies:
2371 '@babel/runtime': 7.22.11
2372 '@emotion/react': 11.11.1(@types/react@18.2.20)(react@18.2.0)
2373 '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.20)(react@18.2.0)
2374 '@mui/base': 5.0.0-beta.13(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0)
2375 '@mui/core-downloads-tracker': 5.14.7
2376 '@mui/system': 5.14.7(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.20)(react@18.2.0)
2377 '@mui/types': 7.2.4(@types/react@18.2.20)
2378 '@mui/utils': 5.14.7(react@18.2.0)
2379 '@types/react': 18.2.20
2380 '@types/react-transition-group': 4.4.6
2381 clsx: 2.0.0
2382 csstype: 3.1.2
2383 prop-types: 15.8.1
2384 react: 18.2.0
2385 react-dom: 18.2.0(react@18.2.0)
2386 react-is: 18.2.0
2387 react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0)
2388 dev: false
2389
2390 /@mui/private-theming@5.14.7(@types/react@18.2.20)(react@18.2.0):
2391 resolution: {integrity: sha512-Y86+hmDnJab2Ka42PgxKpK3oL7EiacbeeX3X/lG9LGO0wSc45wZjHeTfIlVSkkUCkexiMKEJp5NlSjZhr27NRQ==}
2392 engines: {node: '>=12.0.0'}
2393 peerDependencies:
2394 '@types/react': ^17.0.0 || ^18.0.0
2395 react: ^17.0.0 || ^18.0.0
2396 peerDependenciesMeta:
2397 '@types/react':
2398 optional: true
2399 dependencies:
2400 '@babel/runtime': 7.22.11
2401 '@mui/utils': 5.14.7(react@18.2.0)
2402 '@types/react': 18.2.20
2403 prop-types: 15.8.1
2404 react: 18.2.0
2405 dev: false
2406
2407 /@mui/styled-engine@5.14.7(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0):
2408 resolution: {integrity: sha512-hKBETEDsIAkL8/mBwPiQj/vw28OeIhMXC3Tvj4J2bb9snxAKpiZioR1PwqP+6P41twsC/GKBd0Vr9oaWYaHuMg==}
2409 engines: {node: '>=12.0.0'}
2410 peerDependencies:
2411 '@emotion/react': ^11.4.1
2412 '@emotion/styled': ^11.3.0
2413 react: ^17.0.0 || ^18.0.0
2414 peerDependenciesMeta:
2415 '@emotion/react':
2416 optional: true
2417 '@emotion/styled':
2418 optional: true
2419 dependencies:
2420 '@babel/runtime': 7.22.11
2421 '@emotion/cache': 11.11.0
2422 '@emotion/react': 11.11.1(@types/react@18.2.20)(react@18.2.0)
2423 '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.20)(react@18.2.0)
2424 csstype: 3.1.2
2425 prop-types: 15.8.1
2426 react: 18.2.0
2427 dev: false
2428
2429 /@mui/system@5.14.7(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.20)(react@18.2.0):
2430 resolution: {integrity: sha512-jeZtHglc+Pi6qjGoopT6O4RqYXVBMqHVOsjMGP0hxGSSPm1T4gsAu7jU8eqGx9YwwjvvJ0eotTjFqw7iJ6qE2Q==}
2431 engines: {node: '>=12.0.0'}
2432 peerDependencies:
2433 '@emotion/react': ^11.5.0
2434 '@emotion/styled': ^11.3.0
2435 '@types/react': ^17.0.0 || ^18.0.0
2436 react: ^17.0.0 || ^18.0.0
2437 peerDependenciesMeta:
2438 '@emotion/react':
2439 optional: true
2440 '@emotion/styled':
2441 optional: true
2442 '@types/react':
2443 optional: true
2444 dependencies:
2445 '@babel/runtime': 7.22.11
2446 '@emotion/react': 11.11.1(@types/react@18.2.20)(react@18.2.0)
2447 '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.20)(react@18.2.0)
2448 '@mui/private-theming': 5.14.7(@types/react@18.2.20)(react@18.2.0)
2449 '@mui/styled-engine': 5.14.7(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0)
2450 '@mui/types': 7.2.4(@types/react@18.2.20)
2451 '@mui/utils': 5.14.7(react@18.2.0)
2452 '@types/react': 18.2.20
2453 clsx: 2.0.0
2454 csstype: 3.1.2
2455 prop-types: 15.8.1
2456 react: 18.2.0
2457 dev: false
2458
2459 /@mui/types@7.2.4(@types/react@18.2.20):
2460 resolution: {integrity: sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==}
2461 peerDependencies:
2462 '@types/react': '*'
2463 peerDependenciesMeta:
2464 '@types/react':
2465 optional: true
2466 dependencies:
2467 '@types/react': 18.2.20
2468 dev: false
2469
2470 /@mui/utils@5.14.7(react@18.2.0):
2471 resolution: {integrity: sha512-RtheP/aBoPogVdi8vj8Vo2IFnRa4mZVmnD0RGlVZ49yF60rZs+xP4/KbpIrTr83xVs34QmHQ2aQ+IX7I0a0dDw==}
2472 engines: {node: '>=12.0.0'}
2473 peerDependencies:
2474 react: ^17.0.0 || ^18.0.0
2475 dependencies:
2476 '@babel/runtime': 7.22.11
2477 '@types/prop-types': 15.7.5
2478 '@types/react-is': 18.2.1
2479 prop-types: 15.8.1
2480 react: 18.2.0
2481 react-is: 18.2.0
2482 dev: false
2483
2173 /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: 2484 /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1:
2174 resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} 2485 resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==}
2175 dependencies: 2486 dependencies:
@@ -2204,6 +2515,7 @@ packages:
2204 2515
2205 /@npmcli/fs@1.1.1: 2516 /@npmcli/fs@1.1.1:
2206 resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} 2517 resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==}
2518 requiresBuild: true
2207 dependencies: 2519 dependencies:
2208 '@gar/promisify': 1.1.3 2520 '@gar/promisify': 1.1.3
2209 semver: 7.5.4 2521 semver: 7.5.4
@@ -2221,6 +2533,7 @@ packages:
2221 resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} 2533 resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==}
2222 engines: {node: '>=10'} 2534 engines: {node: '>=10'}
2223 deprecated: This functionality has been moved to @npmcli/fs 2535 deprecated: This functionality has been moved to @npmcli/fs
2536 requiresBuild: true
2224 dependencies: 2537 dependencies:
2225 mkdirp: 1.0.4 2538 mkdirp: 1.0.4
2226 rimraf: 3.0.2 2539 rimraf: 3.0.2
@@ -2312,6 +2625,10 @@ packages:
2312 tslib: 2.6.1 2625 tslib: 2.6.1
2313 dev: true 2626 dev: true
2314 2627
2628 /@popperjs/core@2.11.8:
2629 resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
2630 dev: false
2631
2315 /@remix-run/router@1.8.0: 2632 /@remix-run/router@1.8.0:
2316 resolution: {integrity: sha512-mrfKqIHnSZRyIzBcanNJmVQELTnX+qagEDlcKO90RgRBVOZGSGvZKeDihTRfWcqoDn5N/NkUcwWTccnpN18Tfg==} 2633 resolution: {integrity: sha512-mrfKqIHnSZRyIzBcanNJmVQELTnX+qagEDlcKO90RgRBVOZGSGvZKeDihTRfWcqoDn5N/NkUcwWTccnpN18Tfg==}
2317 engines: {node: '>=14.0.0'} 2634 engines: {node: '>=14.0.0'}
@@ -2447,6 +2764,7 @@ packages:
2447 /@tootallnate/once@1.1.2: 2764 /@tootallnate/once@1.1.2:
2448 resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} 2765 resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==}
2449 engines: {node: '>= 6'} 2766 engines: {node: '>= 6'}
2767 requiresBuild: true
2450 dev: false 2768 dev: false
2451 optional: true 2769 optional: true
2452 2770
@@ -2479,7 +2797,7 @@ packages:
2479 resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==} 2797 resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==}
2480 dependencies: 2798 dependencies:
2481 '@babel/parser': 7.22.10 2799 '@babel/parser': 7.22.10
2482 '@babel/types': 7.22.10 2800 '@babel/types': 7.22.11
2483 '@types/babel__generator': 7.6.4 2801 '@types/babel__generator': 7.6.4
2484 '@types/babel__template': 7.4.1 2802 '@types/babel__template': 7.4.1
2485 '@types/babel__traverse': 7.18.2 2803 '@types/babel__traverse': 7.18.2
@@ -2488,20 +2806,20 @@ packages:
2488 /@types/babel__generator@7.6.4: 2806 /@types/babel__generator@7.6.4:
2489 resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} 2807 resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
2490 dependencies: 2808 dependencies:
2491 '@babel/types': 7.22.10 2809 '@babel/types': 7.22.11
2492 dev: true 2810 dev: true
2493 2811
2494 /@types/babel__template@7.4.1: 2812 /@types/babel__template@7.4.1:
2495 resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} 2813 resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
2496 dependencies: 2814 dependencies:
2497 '@babel/parser': 7.22.10 2815 '@babel/parser': 7.22.10
2498 '@babel/types': 7.22.10 2816 '@babel/types': 7.22.11
2499 dev: true 2817 dev: true
2500 2818
2501 /@types/babel__traverse@7.18.2: 2819 /@types/babel__traverse@7.18.2:
2502 resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} 2820 resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==}
2503 dependencies: 2821 dependencies:
2504 '@babel/types': 7.22.10 2822 '@babel/types': 7.22.11
2505 dev: true 2823 dev: true
2506 2824
2507 /@types/cacheable-request@6.0.3: 2825 /@types/cacheable-request@6.0.3:
@@ -2628,6 +2946,10 @@ packages:
2628 resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} 2946 resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
2629 dev: true 2947 dev: true
2630 2948
2949 /@types/parse-json@4.0.0:
2950 resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
2951 dev: false
2952
2631 /@types/plist@3.0.2: 2953 /@types/plist@3.0.2:
2632 resolution: {integrity: sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==} 2954 resolution: {integrity: sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==}
2633 requiresBuild: true 2955 requiresBuild: true
@@ -2653,6 +2975,12 @@ packages:
2653 '@types/react': 18.2.20 2975 '@types/react': 18.2.20
2654 dev: true 2976 dev: true
2655 2977
2978 /@types/react-is@18.2.1:
2979 resolution: {integrity: sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==}
2980 dependencies:
2981 '@types/react': 18.2.20
2982 dev: false
2983
2656 /@types/react-loader@2.4.5: 2984 /@types/react-loader@2.4.5:
2657 resolution: {integrity: sha512-eBtnKxGx/B+z6kSOMiVBYLPZmXLZDVoChSYk57N91HZKB1wSPICHPrgvlhC5j8Y7MCfoYRt4/emRwh2OQIhFrg==} 2985 resolution: {integrity: sha512-eBtnKxGx/B+z6kSOMiVBYLPZmXLZDVoChSYk57N91HZKB1wSPICHPrgvlhC5j8Y7MCfoYRt4/emRwh2OQIhFrg==}
2658 dependencies: 2986 dependencies:
@@ -2663,7 +2991,6 @@ packages:
2663 resolution: {integrity: sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==} 2991 resolution: {integrity: sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==}
2664 dependencies: 2992 dependencies:
2665 '@types/react': 18.2.20 2993 '@types/react': 18.2.20
2666 dev: true
2667 2994
2668 /@types/react@18.2.20: 2995 /@types/react@18.2.20:
2669 resolution: {integrity: sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==} 2996 resolution: {integrity: sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==}
@@ -3135,6 +3462,7 @@ packages:
3135 /aggregate-error@3.1.0: 3462 /aggregate-error@3.1.0:
3136 resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} 3463 resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
3137 engines: {node: '>=8'} 3464 engines: {node: '>=8'}
3465 requiresBuild: true
3138 dependencies: 3466 dependencies:
3139 clean-stack: 2.2.0 3467 clean-stack: 2.2.0
3140 indent-string: 4.0.0 3468 indent-string: 4.0.0
@@ -3411,7 +3739,6 @@ packages:
3411 engines: {node: '>=4'} 3739 engines: {node: '>=4'}
3412 dependencies: 3740 dependencies:
3413 color-convert: 1.9.3 3741 color-convert: 1.9.3
3414 dev: true
3415 3742
3416 /ansi-styles@4.3.0: 3743 /ansi-styles@4.3.0:
3417 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 3744 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
@@ -3531,6 +3858,7 @@ packages:
3531 /are-we-there-yet@3.0.1: 3858 /are-we-there-yet@3.0.1:
3532 resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} 3859 resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
3533 engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 3860 engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
3861 requiresBuild: true
3534 dependencies: 3862 dependencies:
3535 delegates: 1.0.0 3863 delegates: 1.0.0
3536 readable-stream: 3.6.2 3864 readable-stream: 3.6.2
@@ -3808,11 +4136,20 @@ packages:
3808 engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 4136 engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
3809 dependencies: 4137 dependencies:
3810 '@babel/template': 7.22.5 4138 '@babel/template': 7.22.5
3811 '@babel/types': 7.22.10 4139 '@babel/types': 7.22.11
3812 '@types/babel__core': 7.1.20 4140 '@types/babel__core': 7.1.20
3813 '@types/babel__traverse': 7.18.2 4141 '@types/babel__traverse': 7.18.2
3814 dev: true 4142 dev: true
3815 4143
4144 /babel-plugin-macros@3.1.0:
4145 resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
4146 engines: {node: '>=10', npm: '>=6'}
4147 dependencies:
4148 '@babel/runtime': 7.22.11
4149 cosmiconfig: 7.1.0
4150 resolve: 1.22.4
4151 dev: false
4152
3816 /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.10): 4153 /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.10):
3817 resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} 4154 resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
3818 peerDependencies: 4155 peerDependencies:
@@ -3897,6 +4234,7 @@ packages:
3897 4234
3898 /bindings@1.5.0: 4235 /bindings@1.5.0:
3899 resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} 4236 resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
4237 requiresBuild: true
3900 dependencies: 4238 dependencies:
3901 file-uri-to-path: 1.0.0 4239 file-uri-to-path: 1.0.0
3902 dev: false 4240 dev: false
@@ -3938,6 +4276,7 @@ packages:
3938 4276
3939 /boolean@3.2.0: 4277 /boolean@3.2.0:
3940 resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} 4278 resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==}
4279 requiresBuild: true
3941 optional: true 4280 optional: true
3942 4281
3943 /bplist-parser@0.2.0: 4282 /bplist-parser@0.2.0:
@@ -4110,6 +4449,7 @@ packages:
4110 /cacache@15.3.0: 4449 /cacache@15.3.0:
4111 resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} 4450 resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==}
4112 engines: {node: '>= 10'} 4451 engines: {node: '>= 10'}
4452 requiresBuild: true
4113 dependencies: 4453 dependencies:
4114 '@npmcli/fs': 1.1.1 4454 '@npmcli/fs': 1.1.1
4115 '@npmcli/move-file': 1.1.2 4455 '@npmcli/move-file': 1.1.2
@@ -4208,7 +4548,6 @@ packages:
4208 /callsites@3.1.0: 4548 /callsites@3.1.0:
4209 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 4549 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
4210 engines: {node: '>=6'} 4550 engines: {node: '>=6'}
4211 dev: true
4212 4551
4213 /camelcase-keys@6.2.2: 4552 /camelcase-keys@6.2.2:
4214 resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} 4553 resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
@@ -4244,7 +4583,6 @@ packages:
4244 ansi-styles: 3.2.1 4583 ansi-styles: 3.2.1
4245 escape-string-regexp: 1.0.5 4584 escape-string-regexp: 1.0.5
4246 supports-color: 5.5.0 4585 supports-color: 5.5.0
4247 dev: true
4248 4586
4249 /chalk@4.1.2: 4587 /chalk@4.1.2:
4250 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 4588 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -4344,6 +4682,7 @@ packages:
4344 /clean-stack@2.2.0: 4682 /clean-stack@2.2.0:
4345 resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} 4683 resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
4346 engines: {node: '>=6'} 4684 engines: {node: '>=6'}
4685 requiresBuild: true
4347 4686
4348 /cli-cursor@3.1.0: 4687 /cli-cursor@3.1.0:
4349 resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} 4688 resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
@@ -4456,6 +4795,11 @@ packages:
4456 readable-stream: 2.3.8 4795 readable-stream: 2.3.8
4457 dev: true 4796 dev: true
4458 4797
4798 /clsx@2.0.0:
4799 resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
4800 engines: {node: '>=6'}
4801 dev: false
4802
4459 /co-body@6.1.0: 4803 /co-body@6.1.0:
4460 resolution: {integrity: sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==} 4804 resolution: {integrity: sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==}
4461 dependencies: 4805 dependencies:
@@ -4654,7 +4998,6 @@ packages:
4654 4998
4655 /convert-source-map@1.9.0: 4999 /convert-source-map@1.9.0:
4656 resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 5000 resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
4657 dev: true
4658 5001
4659 /convert-source-map@2.0.0: 5002 /convert-source-map@2.0.0:
4660 resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 5003 resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@@ -4696,6 +5039,17 @@ packages:
4696 typescript: 5.0.4 5039 typescript: 5.0.4
4697 dev: true 5040 dev: true
4698 5041
5042 /cosmiconfig@7.1.0:
5043 resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
5044 engines: {node: '>=10'}
5045 dependencies:
5046 '@types/parse-json': 4.0.0
5047 import-fresh: 3.3.0
5048 parse-json: 5.2.0
5049 path-type: 4.0.0
5050 yaml: 1.10.2
5051 dev: false
5052
4699 /cosmiconfig@8.1.3: 5053 /cosmiconfig@8.1.3:
4700 resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} 5054 resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==}
4701 engines: {node: '>=14'} 5055 engines: {node: '>=14'}
@@ -4778,7 +5132,7 @@ packages:
4778 /css-jss@10.10.0: 5132 /css-jss@10.10.0:
4779 resolution: {integrity: sha512-YyMIS/LsSKEGXEaVJdjonWe18p4vXLo8CMA4FrW/kcaEyqdIGKCFXao31gbJddXEdIxSXFFURWrenBJPlKTgAA==} 5133 resolution: {integrity: sha512-YyMIS/LsSKEGXEaVJdjonWe18p4vXLo8CMA4FrW/kcaEyqdIGKCFXao31gbJddXEdIxSXFFURWrenBJPlKTgAA==}
4780 dependencies: 5134 dependencies:
4781 '@babel/runtime': 7.21.5 5135 '@babel/runtime': 7.22.11
4782 jss: 10.10.0 5136 jss: 10.10.0
4783 jss-preset-default: 10.10.0 5137 jss-preset-default: 10.10.0
4784 dev: false 5138 dev: false
@@ -4786,7 +5140,7 @@ packages:
4786 /css-vendor@2.0.8: 5140 /css-vendor@2.0.8:
4787 resolution: {integrity: sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==} 5141 resolution: {integrity: sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==}
4788 dependencies: 5142 dependencies:
4789 '@babel/runtime': 7.21.5 5143 '@babel/runtime': 7.22.11
4790 is-in-browser: 1.1.3 5144 is-in-browser: 1.1.3
4791 dev: false 5145 dev: false
4792 5146
@@ -4824,7 +5178,7 @@ packages:
4824 resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} 5178 resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
4825 engines: {node: '>=0.11'} 5179 engines: {node: '>=0.11'}
4826 dependencies: 5180 dependencies:
4827 '@babel/runtime': 7.21.5 5181 '@babel/runtime': 7.22.11
4828 dev: true 5182 dev: true
4829 5183
4830 /dbus-next@0.10.2: 5184 /dbus-next@0.10.2:
@@ -5106,6 +5460,7 @@ packages:
5106 5460
5107 /detect-node@2.1.0: 5461 /detect-node@2.1.0:
5108 resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} 5462 resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
5463 requiresBuild: true
5109 optional: true 5464 optional: true
5110 5465
5111 /didyoumean@1.2.2: 5466 /didyoumean@1.2.2:
@@ -5186,7 +5541,7 @@ packages:
5186 /dom-helpers@5.2.1: 5541 /dom-helpers@5.2.1:
5187 resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} 5542 resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
5188 dependencies: 5543 dependencies:
5189 '@babel/runtime': 7.21.5 5544 '@babel/runtime': 7.22.11
5190 csstype: 3.1.2 5545 csstype: 3.1.2
5191 dev: false 5546 dev: false
5192 5547
@@ -5416,12 +5771,12 @@ packages:
5416 5771
5417 /err-code@2.0.3: 5772 /err-code@2.0.3:
5418 resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} 5773 resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
5774 requiresBuild: true
5419 5775
5420 /error-ex@1.3.2: 5776 /error-ex@1.3.2:
5421 resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 5777 resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
5422 dependencies: 5778 dependencies:
5423 is-arrayish: 0.2.1 5779 is-arrayish: 0.2.1
5424 dev: true
5425 5780
5426 /error-symbol@0.1.0: 5781 /error-symbol@0.1.0:
5427 resolution: {integrity: sha512-VyjaKxUmeDX/m2lxm/aknsJ1GWDWUO2Ze2Ad8S1Pb9dykAm9TjSKp5CjrNyltYqZ5W/PO6TInAmO2/BfwMyT1g==} 5782 resolution: {integrity: sha512-VyjaKxUmeDX/m2lxm/aknsJ1GWDWUO2Ze2Ad8S1Pb9dykAm9TjSKp5CjrNyltYqZ5W/PO6TInAmO2/BfwMyT1g==}
@@ -5528,6 +5883,7 @@ packages:
5528 5883
5529 /es6-error@4.1.1: 5884 /es6-error@4.1.1:
5530 resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} 5885 resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
5886 requiresBuild: true
5531 optional: true 5887 optional: true
5532 5888
5533 /es6-iterator@2.0.3: 5889 /es6-iterator@2.0.3:
@@ -5634,7 +5990,6 @@ packages:
5634 /escape-string-regexp@1.0.5: 5990 /escape-string-regexp@1.0.5:
5635 resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 5991 resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
5636 engines: {node: '>=0.8.0'} 5992 engines: {node: '>=0.8.0'}
5637 dev: true
5638 5993
5639 /escape-string-regexp@2.0.0: 5994 /escape-string-regexp@2.0.0:
5640 resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 5995 resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
@@ -5708,7 +6063,7 @@ packages:
5708 resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} 6063 resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
5709 dependencies: 6064 dependencies:
5710 debug: 3.2.7 6065 debug: 3.2.7
5711 is-core-module: 2.12.1 6066 is-core-module: 2.13.0
5712 resolve: 1.22.4 6067 resolve: 1.22.4
5713 transitivePeerDependencies: 6068 transitivePeerDependencies:
5714 - supports-color 6069 - supports-color
@@ -6406,6 +6761,7 @@ packages:
6406 6761
6407 /file-uri-to-path@1.0.0: 6762 /file-uri-to-path@1.0.0:
6408 resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} 6763 resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
6764 requiresBuild: true
6409 dev: false 6765 dev: false
6410 optional: true 6766 optional: true
6411 6767
@@ -6432,6 +6788,10 @@ packages:
6432 to-regex-range: 5.0.1 6788 to-regex-range: 5.0.1
6433 dev: true 6789 dev: true
6434 6790
6791 /find-root@1.1.0:
6792 resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
6793 dev: false
6794
6435 /find-up@4.1.0: 6795 /find-up@4.1.0:
6436 resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 6796 resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
6437 engines: {node: '>=8'} 6797 engines: {node: '>=8'}
@@ -6638,6 +6998,7 @@ packages:
6638 6998
6639 /fs.realpath@1.0.0: 6999 /fs.realpath@1.0.0:
6640 resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 7000 resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
7001 requiresBuild: true
6641 7002
6642 /fsevents@2.3.3: 7003 /fsevents@2.3.3:
6643 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 7004 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
@@ -6686,6 +7047,7 @@ packages:
6686 /gauge@4.0.4: 7047 /gauge@4.0.4:
6687 resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} 7048 resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
6688 engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 7049 engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
7050 requiresBuild: true
6689 dependencies: 7051 dependencies:
6690 aproba: 2.0.0 7052 aproba: 2.0.0
6691 color-support: 1.1.3 7053 color-support: 1.1.3
@@ -6961,7 +7323,6 @@ packages:
6961 /has-flag@3.0.0: 7323 /has-flag@3.0.0:
6962 resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 7324 resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
6963 engines: {node: '>=4'} 7325 engines: {node: '>=4'}
6964 dev: true
6965 7326
6966 /has-flag@4.0.0: 7327 /has-flag@4.0.0:
6967 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 7328 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@@ -7113,6 +7474,7 @@ packages:
7113 /http-proxy-agent@4.0.1: 7474 /http-proxy-agent@4.0.1:
7114 resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} 7475 resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==}
7115 engines: {node: '>= 6'} 7476 engines: {node: '>= 6'}
7477 requiresBuild: true
7116 dependencies: 7478 dependencies:
7117 '@tootallnate/once': 1.1.2 7479 '@tootallnate/once': 1.1.2
7118 agent-base: 6.0.2 7480 agent-base: 6.0.2
@@ -7185,6 +7547,7 @@ packages:
7185 7547
7186 /humanize-ms@1.2.1: 7548 /humanize-ms@1.2.1:
7187 resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} 7549 resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
7550 requiresBuild: true
7188 dependencies: 7551 dependencies:
7189 ms: 2.1.3 7552 ms: 2.1.3
7190 7553
@@ -7239,7 +7602,6 @@ packages:
7239 dependencies: 7602 dependencies:
7240 parent-module: 1.0.1 7603 parent-module: 1.0.1
7241 resolve-from: 4.0.0 7604 resolve-from: 4.0.0
7242 dev: true
7243 7605
7244 /import-local@3.1.0: 7606 /import-local@3.1.0:
7245 resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} 7607 resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==}
@@ -7269,6 +7631,7 @@ packages:
7269 7631
7270 /infer-owner@1.0.4: 7632 /infer-owner@1.0.4:
7271 resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} 7633 resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==}
7634 requiresBuild: true
7272 dev: false 7635 dev: false
7273 optional: true 7636 optional: true
7274 7637
@@ -7279,6 +7642,7 @@ packages:
7279 7642
7280 /inflight@1.0.6: 7643 /inflight@1.0.6:
7281 resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 7644 resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
7645 requiresBuild: true
7282 dependencies: 7646 dependencies:
7283 once: 1.4.0 7647 once: 1.4.0
7284 wrappy: 1.0.2 7648 wrappy: 1.0.2
@@ -7348,6 +7712,7 @@ packages:
7348 7712
7349 /ip@2.0.0: 7713 /ip@2.0.0:
7350 resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} 7714 resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
7715 requiresBuild: true
7351 7716
7352 /ipaddr.js@1.9.1: 7717 /ipaddr.js@1.9.1:
7353 resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 7718 resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
@@ -7394,7 +7759,6 @@ packages:
7394 7759
7395 /is-arrayish@0.2.1: 7760 /is-arrayish@0.2.1:
7396 resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 7761 resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
7397 dev: true
7398 7762
7399 /is-arrayish@0.3.2: 7763 /is-arrayish@0.3.2:
7400 resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 7764 resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
@@ -8062,7 +8426,7 @@ packages:
8062 resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} 8426 resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==}
8063 engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 8427 engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
8064 dependencies: 8428 dependencies:
8065 '@babel/code-frame': 7.22.5 8429 '@babel/code-frame': 7.22.10
8066 '@jest/types': 29.6.1 8430 '@jest/types': 29.6.1
8067 '@types/stack-utils': 2.0.1 8431 '@types/stack-utils': 2.0.1
8068 chalk: 4.1.2 8432 chalk: 4.1.2
@@ -8206,7 +8570,7 @@ packages:
8206 '@babel/generator': 7.22.10 8570 '@babel/generator': 7.22.10
8207 '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.10) 8571 '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.10)
8208 '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.10) 8572 '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.10)
8209 '@babel/types': 7.22.10 8573 '@babel/types': 7.22.11
8210 '@jest/expect-utils': 29.6.2 8574 '@jest/expect-utils': 29.6.2
8211 '@jest/transform': 29.6.2 8575 '@jest/transform': 29.6.2
8212 '@jest/types': 29.6.1 8576 '@jest/types': 29.6.1
@@ -8366,14 +8730,13 @@ packages:
8366 resolution: {integrity: sha512-TuDuZ5KrgyjoCIppdPXBMqiGfota55+odM+j2cQ5rt/XKyKmqGB3Whz1F8SN8+60yYGy/Nu5lbRZ+rx8kBIvBw==} 8730 resolution: {integrity: sha512-TuDuZ5KrgyjoCIppdPXBMqiGfota55+odM+j2cQ5rt/XKyKmqGB3Whz1F8SN8+60yYGy/Nu5lbRZ+rx8kBIvBw==}
8367 engines: {node: '>=10'} 8731 engines: {node: '>=10'}
8368 dependencies: 8732 dependencies:
8369 '@babel/runtime': 7.21.5 8733 '@babel/runtime': 7.22.11
8370 chalk: 4.1.2 8734 chalk: 4.1.2
8371 pegjs: 0.10.0 8735 pegjs: 0.10.0
8372 dev: true 8736 dev: true
8373 8737
8374 /json-parse-even-better-errors@2.3.1: 8738 /json-parse-even-better-errors@2.3.1:
8375 resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 8739 resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
8376 dev: true
8377 8740
8378 /json-schema-traverse@0.4.1: 8741 /json-schema-traverse@0.4.1:
8379 resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 8742 resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -8462,7 +8825,7 @@ packages:
8462 /jss-plugin-camel-case@10.10.0: 8825 /jss-plugin-camel-case@10.10.0:
8463 resolution: {integrity: sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==} 8826 resolution: {integrity: sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==}
8464 dependencies: 8827 dependencies:
8465 '@babel/runtime': 7.21.5 8828 '@babel/runtime': 7.22.11
8466 hyphenate-style-name: 1.0.4 8829 hyphenate-style-name: 1.0.4
8467 jss: 10.10.0 8830 jss: 10.10.0
8468 dev: false 8831 dev: false
@@ -8470,7 +8833,7 @@ packages:
8470 /jss-plugin-compose@10.10.0: 8833 /jss-plugin-compose@10.10.0:
8471 resolution: {integrity: sha512-F5kgtWpI2XfZ3Z8eP78tZEYFdgTIbpA/TMuX3a8vwrNolYtN1N4qJR/Ob0LAsqIwCMLojtxN7c7Oo/+Vz6THow==} 8834 resolution: {integrity: sha512-F5kgtWpI2XfZ3Z8eP78tZEYFdgTIbpA/TMuX3a8vwrNolYtN1N4qJR/Ob0LAsqIwCMLojtxN7c7Oo/+Vz6THow==}
8472 dependencies: 8835 dependencies:
8473 '@babel/runtime': 7.21.5 8836 '@babel/runtime': 7.22.11
8474 jss: 10.10.0 8837 jss: 10.10.0
8475 tiny-warning: 1.0.3 8838 tiny-warning: 1.0.3
8476 dev: false 8839 dev: false
@@ -8478,21 +8841,21 @@ packages:
8478 /jss-plugin-default-unit@10.10.0: 8841 /jss-plugin-default-unit@10.10.0:
8479 resolution: {integrity: sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==} 8842 resolution: {integrity: sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==}
8480 dependencies: 8843 dependencies:
8481 '@babel/runtime': 7.21.5 8844 '@babel/runtime': 7.22.11
8482 jss: 10.10.0 8845 jss: 10.10.0
8483 dev: false 8846 dev: false
8484 8847
8485 /jss-plugin-expand@10.10.0: 8848 /jss-plugin-expand@10.10.0:
8486 resolution: {integrity: sha512-ymT62W2OyDxBxr7A6JR87vVX9vTq2ep5jZLIdUSusfBIEENLdkkc0lL/Xaq8W9s3opUq7R0sZQpzRWELrfVYzA==} 8849 resolution: {integrity: sha512-ymT62W2OyDxBxr7A6JR87vVX9vTq2ep5jZLIdUSusfBIEENLdkkc0lL/Xaq8W9s3opUq7R0sZQpzRWELrfVYzA==}
8487 dependencies: 8850 dependencies:
8488 '@babel/runtime': 7.21.5 8851 '@babel/runtime': 7.22.11
8489 jss: 10.10.0 8852 jss: 10.10.0
8490 dev: false 8853 dev: false
8491 8854
8492 /jss-plugin-extend@10.10.0: 8855 /jss-plugin-extend@10.10.0:
8493 resolution: {integrity: sha512-sKYrcMfr4xxigmIwqTjxNcHwXJIfvhvjTNxF+Tbc1NmNdyspGW47Ey6sGH8BcQ4FFQhLXctpWCQSpDwdNmXSwg==} 8856 resolution: {integrity: sha512-sKYrcMfr4xxigmIwqTjxNcHwXJIfvhvjTNxF+Tbc1NmNdyspGW47Ey6sGH8BcQ4FFQhLXctpWCQSpDwdNmXSwg==}
8494 dependencies: 8857 dependencies:
8495 '@babel/runtime': 7.21.5 8858 '@babel/runtime': 7.22.11
8496 jss: 10.10.0 8859 jss: 10.10.0
8497 tiny-warning: 1.0.3 8860 tiny-warning: 1.0.3
8498 dev: false 8861 dev: false
@@ -8500,14 +8863,14 @@ packages:
8500 /jss-plugin-global@10.10.0: 8863 /jss-plugin-global@10.10.0:
8501 resolution: {integrity: sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==} 8864 resolution: {integrity: sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==}
8502 dependencies: 8865 dependencies:
8503 '@babel/runtime': 7.21.5 8866 '@babel/runtime': 7.22.11
8504 jss: 10.10.0 8867 jss: 10.10.0
8505 dev: false 8868 dev: false
8506 8869
8507 /jss-plugin-nested@10.10.0: 8870 /jss-plugin-nested@10.10.0:
8508 resolution: {integrity: sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==} 8871 resolution: {integrity: sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==}
8509 dependencies: 8872 dependencies:
8510 '@babel/runtime': 7.21.5 8873 '@babel/runtime': 7.22.11
8511 jss: 10.10.0 8874 jss: 10.10.0
8512 tiny-warning: 1.0.3 8875 tiny-warning: 1.0.3
8513 dev: false 8876 dev: false
@@ -8515,14 +8878,14 @@ packages:
8515 /jss-plugin-props-sort@10.10.0: 8878 /jss-plugin-props-sort@10.10.0:
8516 resolution: {integrity: sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==} 8879 resolution: {integrity: sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==}
8517 dependencies: 8880 dependencies:
8518 '@babel/runtime': 7.21.5 8881 '@babel/runtime': 7.22.11
8519 jss: 10.10.0 8882 jss: 10.10.0
8520 dev: false 8883 dev: false
8521 8884
8522 /jss-plugin-rule-value-function@10.10.0: 8885 /jss-plugin-rule-value-function@10.10.0:
8523 resolution: {integrity: sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==} 8886 resolution: {integrity: sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==}
8524 dependencies: 8887 dependencies:
8525 '@babel/runtime': 7.21.5 8888 '@babel/runtime': 7.22.11
8526 jss: 10.10.0 8889 jss: 10.10.0
8527 tiny-warning: 1.0.3 8890 tiny-warning: 1.0.3
8528 dev: false 8891 dev: false
@@ -8530,7 +8893,7 @@ packages:
8530 /jss-plugin-rule-value-observable@10.10.0: 8893 /jss-plugin-rule-value-observable@10.10.0:
8531 resolution: {integrity: sha512-ZLMaYrR3QE+vD7nl3oNXuj79VZl9Kp8/u6A1IbTPDcuOu8b56cFdWRZNZ0vNr8jHewooEeq2doy8Oxtymr2ZPA==} 8894 resolution: {integrity: sha512-ZLMaYrR3QE+vD7nl3oNXuj79VZl9Kp8/u6A1IbTPDcuOu8b56cFdWRZNZ0vNr8jHewooEeq2doy8Oxtymr2ZPA==}
8532 dependencies: 8895 dependencies:
8533 '@babel/runtime': 7.21.5 8896 '@babel/runtime': 7.22.11
8534 jss: 10.10.0 8897 jss: 10.10.0
8535 symbol-observable: 1.2.0 8898 symbol-observable: 1.2.0
8536 dev: false 8899 dev: false
@@ -8538,7 +8901,7 @@ packages:
8538 /jss-plugin-template@10.10.0: 8901 /jss-plugin-template@10.10.0:
8539 resolution: {integrity: sha512-ocXZBIOJOA+jISPdsgkTs8wwpK6UbsvtZK5JI7VUggTD6LWKbtoxUzadd2TpfF+lEtlhUmMsCkTRNkITdPKa6w==} 8902 resolution: {integrity: sha512-ocXZBIOJOA+jISPdsgkTs8wwpK6UbsvtZK5JI7VUggTD6LWKbtoxUzadd2TpfF+lEtlhUmMsCkTRNkITdPKa6w==}
8540 dependencies: 8903 dependencies:
8541 '@babel/runtime': 7.21.5 8904 '@babel/runtime': 7.22.11
8542 jss: 10.10.0 8905 jss: 10.10.0
8543 tiny-warning: 1.0.3 8906 tiny-warning: 1.0.3
8544 dev: false 8907 dev: false
@@ -8546,7 +8909,7 @@ packages:
8546 /jss-plugin-vendor-prefixer@10.10.0: 8909 /jss-plugin-vendor-prefixer@10.10.0:
8547 resolution: {integrity: sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==} 8910 resolution: {integrity: sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==}
8548 dependencies: 8911 dependencies:
8549 '@babel/runtime': 7.21.5 8912 '@babel/runtime': 7.22.11
8550 css-vendor: 2.0.8 8913 css-vendor: 2.0.8
8551 jss: 10.10.0 8914 jss: 10.10.0
8552 dev: false 8915 dev: false
@@ -8554,7 +8917,7 @@ packages:
8554 /jss-preset-default@10.10.0: 8917 /jss-preset-default@10.10.0:
8555 resolution: {integrity: sha512-GL175Wt2FGhjE+f+Y3aWh+JioL06/QWFgZp53CbNNq6ZkVU0TDplD8Bxm9KnkotAYn3FlplNqoW5CjyLXcoJ7Q==} 8918 resolution: {integrity: sha512-GL175Wt2FGhjE+f+Y3aWh+JioL06/QWFgZp53CbNNq6ZkVU0TDplD8Bxm9KnkotAYn3FlplNqoW5CjyLXcoJ7Q==}
8556 dependencies: 8919 dependencies:
8557 '@babel/runtime': 7.21.5 8920 '@babel/runtime': 7.22.11
8558 jss: 10.10.0 8921 jss: 10.10.0
8559 jss-plugin-camel-case: 10.10.0 8922 jss-plugin-camel-case: 10.10.0
8560 jss-plugin-compose: 10.10.0 8923 jss-plugin-compose: 10.10.0
@@ -8772,7 +9135,6 @@ packages:
8772 9135
8773 /lines-and-columns@1.2.4: 9136 /lines-and-columns@1.2.4:
8774 resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 9137 resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
8775 dev: true
8776 9138
8777 /livereload-js@2.4.0: 9139 /livereload-js@2.4.0:
8778 resolution: {integrity: sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==} 9140 resolution: {integrity: sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==}
@@ -9026,6 +9388,7 @@ packages:
9026 /make-fetch-happen@9.1.0: 9388 /make-fetch-happen@9.1.0:
9027 resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} 9389 resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==}
9028 engines: {node: '>= 10'} 9390 engines: {node: '>= 10'}
9391 requiresBuild: true
9029 dependencies: 9392 dependencies:
9030 agentkeepalive: 4.2.1 9393 agentkeepalive: 4.2.1
9031 cacache: 15.3.0 9394 cacache: 15.3.0
@@ -9100,6 +9463,7 @@ packages:
9100 /matcher@3.0.0: 9463 /matcher@3.0.0:
9101 resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} 9464 resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==}
9102 engines: {node: '>=10'} 9465 engines: {node: '>=10'}
9466 requiresBuild: true
9103 dependencies: 9467 dependencies:
9104 escape-string-regexp: 4.0.0 9468 escape-string-regexp: 4.0.0
9105 optional: true 9469 optional: true
@@ -9278,6 +9642,7 @@ packages:
9278 /minipass-fetch@1.4.1: 9642 /minipass-fetch@1.4.1:
9279 resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} 9643 resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==}
9280 engines: {node: '>=8'} 9644 engines: {node: '>=8'}
9645 requiresBuild: true
9281 dependencies: 9646 dependencies:
9282 minipass: 3.3.6 9647 minipass: 3.3.6
9283 minipass-sized: 1.0.3 9648 minipass-sized: 1.0.3
@@ -9991,7 +10356,6 @@ packages:
9991 engines: {node: '>=6'} 10356 engines: {node: '>=6'}
9992 dependencies: 10357 dependencies:
9993 callsites: 3.1.0 10358 callsites: 3.1.0
9994 dev: true
9995 10359
9996 /parse-filepath@1.0.2: 10360 /parse-filepath@1.0.2:
9997 resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} 10361 resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==}
@@ -10010,7 +10374,6 @@ packages:
10010 error-ex: 1.3.2 10374 error-ex: 1.3.2
10011 json-parse-even-better-errors: 2.3.1 10375 json-parse-even-better-errors: 2.3.1
10012 lines-and-columns: 1.2.4 10376 lines-and-columns: 1.2.4
10013 dev: true
10014 10377
10015 /parse-node-version@1.0.1: 10378 /parse-node-version@1.0.1:
10016 resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} 10379 resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
@@ -10088,7 +10451,6 @@ packages:
10088 /path-type@4.0.0: 10451 /path-type@4.0.0:
10089 resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 10452 resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
10090 engines: {node: '>=8'} 10453 engines: {node: '>=8'}
10091 dev: true
10092 10454
10093 /pause-stream@0.0.11: 10455 /pause-stream@0.0.11:
10094 resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} 10456 resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
@@ -10288,6 +10650,7 @@ packages:
10288 10650
10289 /promise-inflight@1.0.1: 10651 /promise-inflight@1.0.1:
10290 resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} 10652 resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
10653 requiresBuild: true
10291 peerDependencies: 10654 peerDependencies:
10292 bluebird: '*' 10655 bluebird: '*'
10293 peerDependenciesMeta: 10656 peerDependenciesMeta:
@@ -10624,6 +10987,31 @@ packages:
10624 unpipe: 1.0.0 10987 unpipe: 1.0.0
10625 dev: false 10988 dev: false
10626 10989
10990 /rc-progress@3.5.1(react-dom@18.2.0)(react@18.2.0):
10991 resolution: {integrity: sha512-V6Amx6SbLRwPin/oD+k1vbPrO8+9Qf8zW1T8A7o83HdNafEVvAxPV5YsgtKFP+Ud5HghLj33zKOcEHrcrUGkfw==}
10992 peerDependencies:
10993 react: '>=16.9.0'
10994 react-dom: '>=16.9.0'
10995 dependencies:
10996 '@babel/runtime': 7.21.5
10997 classnames: 2.3.2
10998 rc-util: 5.37.0(react-dom@18.2.0)(react@18.2.0)
10999 react: 18.2.0
11000 react-dom: 18.2.0(react@18.2.0)
11001 dev: false
11002
11003 /rc-util@5.37.0(react-dom@18.2.0)(react@18.2.0):
11004 resolution: {integrity: sha512-cPMV8DzaHI1KDaS7XPRXAf4J7mtBqjvjikLpQieaeOO7+cEbqY2j7Kso/T0R0OiEZTNcLS/8Zl9YrlXiO9UbjQ==}
11005 peerDependencies:
11006 react: '>=16.9.0'
11007 react-dom: '>=16.9.0'
11008 dependencies:
11009 '@babel/runtime': 7.22.11
11010 react: 18.2.0
11011 react-dom: 18.2.0(react@18.2.0)
11012 react-is: 16.13.1
11013 dev: false
11014
10627 /react-color@2.19.3(react@18.2.0): 11015 /react-color@2.19.3(react@18.2.0):
10628 resolution: {integrity: sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==} 11016 resolution: {integrity: sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==}
10629 peerDependencies: 11017 peerDependencies:
@@ -10714,7 +11102,6 @@ packages:
10714 11102
10715 /react-is@18.2.0: 11103 /react-is@18.2.0:
10716 resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 11104 resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
10717 dev: true
10718 11105
10719 /react-jss@10.10.0(react@18.2.0): 11106 /react-jss@10.10.0(react@18.2.0):
10720 resolution: {integrity: sha512-WLiq84UYWqNBF6579/uprcIUnM1TSywYq6AIjKTTTG5ziJl9Uy+pwuvpN3apuyVwflMbD60PraeTKT7uWH9XEQ==} 11107 resolution: {integrity: sha512-WLiq84UYWqNBF6579/uprcIUnM1TSywYq6AIjKTTTG5ziJl9Uy+pwuvpN3apuyVwflMbD60PraeTKT7uWH9XEQ==}
@@ -10846,7 +11233,7 @@ packages:
10846 react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 11233 react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
10847 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 11234 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
10848 dependencies: 11235 dependencies:
10849 '@babel/runtime': 7.21.5 11236 '@babel/runtime': 7.22.11
10850 memoize-one: 5.2.1 11237 memoize-one: 5.2.1
10851 react: 18.2.0 11238 react: 18.2.0
10852 react-dom: 18.2.0(react@18.2.0) 11239 react-dom: 18.2.0(react@18.2.0)
@@ -10990,6 +11377,9 @@ packages:
10990 /regenerator-runtime@0.13.11: 11377 /regenerator-runtime@0.13.11:
10991 resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} 11378 resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
10992 11379
11380 /regenerator-runtime@0.14.0:
11381 resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
11382
10993 /regex-not@1.0.2: 11383 /regex-not@1.0.2:
10994 resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} 11384 resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
10995 engines: {node: '>=0.10.0'} 11385 engines: {node: '>=0.10.0'}
@@ -11143,7 +11533,6 @@ packages:
11143 /resolve-from@4.0.0: 11533 /resolve-from@4.0.0:
11144 resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 11534 resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
11145 engines: {node: '>=4'} 11535 engines: {node: '>=4'}
11146 dev: true
11147 11536
11148 /resolve-from@5.0.0: 11537 /resolve-from@5.0.0:
11149 resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 11538 resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
@@ -11171,7 +11560,7 @@ packages:
11171 resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 11560 resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
11172 hasBin: true 11561 hasBin: true
11173 dependencies: 11562 dependencies:
11174 is-core-module: 2.12.1 11563 is-core-module: 2.13.0
11175 path-parse: 1.0.7 11564 path-parse: 1.0.7
11176 supports-preserve-symlinks-flag: 1.0.0 11565 supports-preserve-symlinks-flag: 1.0.0
11177 dev: true 11566 dev: true
@@ -11188,7 +11577,7 @@ packages:
11188 resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} 11577 resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
11189 hasBin: true 11578 hasBin: true
11190 dependencies: 11579 dependencies:
11191 is-core-module: 2.12.1 11580 is-core-module: 2.13.0
11192 path-parse: 1.0.7 11581 path-parse: 1.0.7
11193 supports-preserve-symlinks-flag: 1.0.0 11582 supports-preserve-symlinks-flag: 1.0.0
11194 dev: true 11583 dev: true
@@ -11214,6 +11603,7 @@ packages:
11214 /retry@0.12.0: 11603 /retry@0.12.0:
11215 resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} 11604 resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
11216 engines: {node: '>= 4'} 11605 engines: {node: '>= 4'}
11606 requiresBuild: true
11217 11607
11218 /reusify@1.0.4: 11608 /reusify@1.0.4:
11219 resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 11609 resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
@@ -11241,6 +11631,7 @@ packages:
11241 /roarr@2.15.4: 11631 /roarr@2.15.4:
11242 resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} 11632 resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==}
11243 engines: {node: '>=8.0'} 11633 engines: {node: '>=8.0'}
11634 requiresBuild: true
11244 dependencies: 11635 dependencies:
11245 boolean: 3.2.0 11636 boolean: 3.2.0
11246 detect-node: 2.1.0 11637 detect-node: 2.1.0
@@ -11378,6 +11769,7 @@ packages:
11378 11769
11379 /semver-compare@1.0.0: 11770 /semver-compare@1.0.0:
11380 resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} 11771 resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
11772 requiresBuild: true
11381 optional: true 11773 optional: true
11382 11774
11383 /semver@5.5.1: 11775 /semver@5.5.1:
@@ -11460,6 +11852,7 @@ packages:
11460 /serialize-error@7.0.1: 11852 /serialize-error@7.0.1:
11461 resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} 11853 resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
11462 engines: {node: '>=10'} 11854 engines: {node: '>=10'}
11855 requiresBuild: true
11463 dependencies: 11856 dependencies:
11464 type-fest: 0.13.1 11857 type-fest: 0.13.1
11465 optional: true 11858 optional: true
@@ -11652,6 +12045,7 @@ packages:
11652 /smart-buffer@4.2.0: 12045 /smart-buffer@4.2.0:
11653 resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} 12046 resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
11654 engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} 12047 engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
12048 requiresBuild: true
11655 12049
11656 /snapdragon-node@2.1.1: 12050 /snapdragon-node@2.1.1:
11657 resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} 12051 resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
@@ -11688,6 +12082,7 @@ packages:
11688 /socks-proxy-agent@6.2.1: 12082 /socks-proxy-agent@6.2.1:
11689 resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} 12083 resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==}
11690 engines: {node: '>= 10'} 12084 engines: {node: '>= 10'}
12085 requiresBuild: true
11691 dependencies: 12086 dependencies:
11692 agent-base: 6.0.2 12087 agent-base: 6.0.2
11693 debug: 4.3.4 12088 debug: 4.3.4
@@ -11829,6 +12224,7 @@ packages:
11829 12224
11830 /sprintf-js@1.1.2: 12225 /sprintf-js@1.1.2:
11831 resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} 12226 resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==}
12227 requiresBuild: true
11832 optional: true 12228 optional: true
11833 12229
11834 /sqlite3@5.1.6: 12230 /sqlite3@5.1.6:
@@ -11875,6 +12271,7 @@ packages:
11875 /ssri@8.0.1: 12271 /ssri@8.0.1:
11876 resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} 12272 resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==}
11877 engines: {node: '>= 8'} 12273 engines: {node: '>= 8'}
12274 requiresBuild: true
11878 dependencies: 12275 dependencies:
11879 minipass: 3.3.6 12276 minipass: 3.3.6
11880 dev: false 12277 dev: false
@@ -12076,6 +12473,10 @@ packages:
12076 engines: {node: '>=8'} 12473 engines: {node: '>=8'}
12077 dev: true 12474 dev: true
12078 12475
12476 /stylis@4.2.0:
12477 resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==}
12478 dev: false
12479
12079 /success-symbol@0.1.0: 12480 /success-symbol@0.1.0:
12080 resolution: {integrity: sha512-7S6uOTxPklNGxOSbDIg4KlVLBQw1UiGVyfCUYgYxrZUKRblUkmGj7r8xlfQoFudvqLv6Ap5gd76/IIFfI9JG2A==} 12481 resolution: {integrity: sha512-7S6uOTxPklNGxOSbDIg4KlVLBQw1UiGVyfCUYgYxrZUKRblUkmGj7r8xlfQoFudvqLv6Ap5gd76/IIFfI9JG2A==}
12081 engines: {node: '>=0.10.0'} 12482 engines: {node: '>=0.10.0'}
@@ -12094,7 +12495,6 @@ packages:
12094 engines: {node: '>=4'} 12495 engines: {node: '>=4'}
12095 dependencies: 12496 dependencies:
12096 has-flag: 3.0.0 12497 has-flag: 3.0.0
12097 dev: true
12098 12498
12099 /supports-color@7.2.0: 12499 /supports-color@7.2.0:
12100 resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 12500 resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
@@ -12303,7 +12703,6 @@ packages:
12303 /to-fast-properties@2.0.0: 12703 /to-fast-properties@2.0.0:
12304 resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 12704 resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
12305 engines: {node: '>=4'} 12705 engines: {node: '>=4'}
12306 dev: true
12307 12706
12308 /to-object-path@0.3.0: 12707 /to-object-path@0.3.0:
12309 resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} 12708 resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
@@ -12517,6 +12916,7 @@ packages:
12517 /type-fest@0.13.1: 12916 /type-fest@0.13.1:
12518 resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} 12917 resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
12519 engines: {node: '>=10'} 12918 engines: {node: '>=10'}
12919 requiresBuild: true
12520 optional: true 12920 optional: true
12521 12921
12522 /type-fest@0.18.1: 12922 /type-fest@0.18.1:
@@ -12660,6 +13060,7 @@ packages:
12660 13060
12661 /unique-filename@1.1.1: 13061 /unique-filename@1.1.1:
12662 resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} 13062 resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==}
13063 requiresBuild: true
12663 dependencies: 13064 dependencies:
12664 unique-slug: 2.0.2 13065 unique-slug: 2.0.2
12665 dev: false 13066 dev: false
@@ -12674,6 +13075,7 @@ packages:
12674 13075
12675 /unique-slug@2.0.2: 13076 /unique-slug@2.0.2:
12676 resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} 13077 resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==}
13078 requiresBuild: true
12677 dependencies: 13079 dependencies:
12678 imurmurhash: 0.1.4 13080 imurmurhash: 0.1.4
12679 dev: false 13081 dev: false
@@ -13125,6 +13527,11 @@ packages:
13125 /yallist@4.0.0: 13527 /yallist@4.0.0:
13126 resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 13528 resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
13127 13529
13530 /yaml@1.10.2:
13531 resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
13532 engines: {node: '>= 6'}
13533 dev: false
13534
13128 /yamlparser@0.0.2: 13535 /yamlparser@0.0.2:
13129 resolution: {integrity: sha512-Cou9FCGblEENtn1/8La5wkDM/ISMh2bzu5Wh7dYzCzA0o9jD4YGyLkUJxe84oPBGoB92f+Oy4ZjVhA8S0C2wlQ==} 13536 resolution: {integrity: sha512-Cou9FCGblEENtn1/8La5wkDM/ISMh2bzu5Wh7dYzCzA0o9jD4YGyLkUJxe84oPBGoB92f+Oy4ZjVhA8S0C2wlQ==}
13130 dev: false 13537 dev: false
diff --git a/src/@types/stores.types.ts b/src/@types/stores.types.ts
index dc5da563f..973889802 100644
--- a/src/@types/stores.types.ts
+++ b/src/@types/stores.types.ts
@@ -125,6 +125,7 @@ export interface AppStore extends TypedStore {
125 FAILED: 'FAILED'; 125 FAILED: 'FAILED';
126 }; 126 };
127 universalDarkMode: boolean; 127 universalDarkMode: boolean;
128 isDownloading: () => boolean;
128 cacheSize: () => void; 129 cacheSize: () => void;
129 debugInfo: () => void; 130 debugInfo: () => void;
130 enableLongPressServiceHint: boolean; 131 enableLongPressServiceHint: boolean;
diff --git a/src/actions/app.ts b/src/actions/app.ts
index 2e60c9327..07cc47078 100644
--- a/src/actions/app.ts
+++ b/src/actions/app.ts
@@ -28,4 +28,10 @@ export default <ActionDefinitions>{
28 toggleMuteApp: {}, 28 toggleMuteApp: {},
29 toggleCollapseMenu: {}, 29 toggleCollapseMenu: {},
30 clearAllCache: {}, 30 clearAllCache: {},
31 addDownload: {},
32 removeDownload: {},
33 updateDownload: {},
34 endedDownload: {},
35 stopDownload: {},
36 togglePauseDownload: {},
31}; 37};
diff --git a/src/actions/ui.ts b/src/actions/ui.ts
index 7d2dbccfa..f496c5c07 100644
--- a/src/actions/ui.ts
+++ b/src/actions/ui.ts
@@ -5,6 +5,9 @@ export default <ActionDefinitions>{
5 openSettings: { 5 openSettings: {
6 path: PropTypes.string, 6 path: PropTypes.string,
7 }, 7 },
8 openDownloads: {
9 path: PropTypes.string,
10 },
8 closeSettings: {}, 11 closeSettings: {},
9 toggleServiceUpdatedInfoBar: { 12 toggleServiceUpdatedInfoBar: {
10 visible: PropTypes.bool, 13 visible: PropTypes.bool,
diff --git a/src/components/downloadManager/DownloadManagerDashboard.tsx b/src/components/downloadManager/DownloadManagerDashboard.tsx
new file mode 100644
index 000000000..86facc476
--- /dev/null
+++ b/src/components/downloadManager/DownloadManagerDashboard.tsx
@@ -0,0 +1,288 @@
1import { Component } from 'react';
2import { observer } from 'mobx-react';
3import { IntlShape, defineMessages, injectIntl } from 'react-intl';
4import { shell } from 'electron';
5import prettyBytes from 'pretty-bytes';
6import {
7 Typography,
8 Card,
9 CardContent,
10 LinearProgress,
11 Box,
12 IconButton,
13 ListItemButton,
14 ListItemIcon,
15 ListItemText,
16} from '@mui/material';
17import { mdiDownload } from '@mdi/js';
18import PlayArrowIcon from '@mui/icons-material/PlayArrow';
19import PauseIcon from '@mui/icons-material/Pause';
20import CancelIcon from '@mui/icons-material/Cancel';
21import FolderIcon from '@mui/icons-material/Folder';
22import DeleteIcon from '@mui/icons-material/Delete';
23import ClearAllIcon from '@mui/icons-material/ClearAll';
24import { round } from 'lodash';
25import { RealStores } from '../../stores';
26import { Actions } from '../../actions/lib/actions';
27import Icon from '../ui/icon';
28
29const messages = defineMessages({
30 headline: {
31 id: 'downloadManager.headline',
32 defaultMessage: 'Download Manager',
33 },
34 empty: {
35 id: 'downloadManager.empty',
36 defaultMessage: 'Your download list is empty.',
37 },
38});
39
40interface IProps {
41 intl: IntlShape;
42 stores?: RealStores;
43 actions?: Actions;
44}
45
46interface IState {
47 data: string;
48}
49
50// eslint-disable-next-line react/prefer-stateless-function
51class DownloadManagerDashboard extends Component<IProps, IState> {
52 render() {
53 const { intl, stores, actions } = this.props;
54
55 const downloads = stores?.app.downloads ?? [];
56
57 return (
58 <div className="settings__main">
59 <div className="settings__header">
60 <span className="settings__header-item">
61 <Box
62 sx={{
63 display: 'flex',
64 justifyContent: 'center',
65 alignItems: 'center',
66 }}
67 gap={1.5}
68 >
69 <Icon icon={mdiDownload} size={1.5} />
70 {intl.formatMessage(messages.headline)}
71 <span className="badge badge--success">beta</span>
72 </Box>
73 </span>
74 </div>
75 <div className="settings__body">
76 {downloads.length === 0 ? (
77 <Box
78 sx={{
79 display: 'flex',
80 flexDirection: 'column',
81 justifyContent: 'center',
82 alignItems: 'center',
83 }}
84 gap={4}
85 >
86 <Icon icon={mdiDownload} size={1.8} />
87 <Typography variant="h4">
88 {intl.formatMessage(messages.empty)}
89 </Typography>
90 </Box>
91 ) : (
92 <Box
93 sx={{
94 display: 'flex',
95 flexDirection: 'row',
96 justifyContent: 'flex-end',
97 height: 'fit-content',
98 }}
99 >
100 <Box
101 sx={{
102 maxWidth: '176px',
103 }}
104 >
105 <ListItemButton
106 onClick={() => {
107 actions?.app.removeDownload(null);
108 }}
109 >
110 <ListItemIcon>
111 <ClearAllIcon />
112 </ListItemIcon>
113 <ListItemText primary="Clear all completed" />
114 </ListItemButton>
115 </Box>
116 </Box>
117 )}
118 {downloads.map(download => {
119 const {
120 totalBytes,
121 receivedBytes,
122 filename,
123 url,
124 savePath,
125 state,
126 id,
127 paused,
128 } = download;
129
130 const downloadPercentage =
131 receivedBytes !== undefined && totalBytes !== undefined
132 ? round((receivedBytes / totalBytes) * 100, 2)
133 : null;
134
135 const stateParse =
136 state === 'progressing'
137 ? paused === false || paused === undefined
138 ? null
139 : 'Paused'
140 : state === 'cancelled'
141 ? 'Cancelled'
142 : state === 'completed'
143 ? null
144 : 'Error';
145
146 return (
147 <Card
148 key={id}
149 style={{
150 marginBottom: '16px',
151 height: 'fit-content',
152 display: 'flex',
153 }}
154 >
155 <Box
156 sx={{ display: 'flex', flexDirection: 'column', flexGrow: 1 }}
157 >
158 <CardContent>
159 <Box
160 sx={{
161 display: 'flex',
162 }}
163 gap={2}
164 >
165 <button
166 type="button"
167 disabled={state !== 'completed'}
168 style={{
169 pointerEvents:
170 state === 'completed' ? undefined : 'none',
171 }}
172 onClick={() => {
173 if (savePath) shell.openPath(savePath);
174 }}
175 >
176 <Typography
177 variant="h6"
178 color={state === 'completed' ? 'primary' : undefined}
179 sx={{
180 textDecoration:
181 stateParse !== null && stateParse !== 'Paused'
182 ? 'line-through'
183 : state === 'completed'
184 ? 'underline'
185 : null,
186 }}
187 >
188 {filename}
189 </Typography>
190 </button>
191 <Typography
192 variant="h6"
193 color={stateParse === 'Paused' ? '#ed6c02' : undefined}
194 >
195 {stateParse !== null && stateParse !== 'Paused'
196 ? stateParse
197 : stateParse === 'Paused'
198 ? stateParse
199 : null}
200 </Typography>
201 </Box>
202 <Typography variant="body2">{url}</Typography>
203 <LinearProgress
204 variant="determinate"
205 value={downloadPercentage || 0}
206 style={{ marginTop: '8px', marginBottom: '8px' }}
207 />
208 <Typography variant="body2">
209 {`${
210 downloadPercentage ? `${downloadPercentage}% - ` : ''
211 }${
212 receivedBytes ? `${prettyBytes(receivedBytes)} of ` : ''
213 }${totalBytes ? prettyBytes(totalBytes) : ''}`}
214 </Typography>
215 </CardContent>
216 </Box>
217
218 <Box
219 sx={{
220 display: 'flex',
221 flexDirection: 'column',
222 justifyContent: 'center',
223 alignItems: 'center',
224 padding: '8px',
225 }}
226 >
227 {state !== 'completed' && state !== 'cancelled' && (
228 <IconButton
229 color="error"
230 size="small"
231 onClick={() => {
232 actions?.app.stopDownload(id);
233 }}
234 >
235 <CancelIcon />
236 </IconButton>
237 )}
238 {state === 'progressing' && (
239 <IconButton
240 color={
241 paused === false || paused === undefined
242 ? 'warning'
243 : 'success'
244 }
245 size="small"
246 onClick={() => {
247 actions?.app.togglePauseDownload(id);
248 }}
249 >
250 {(paused === false || paused === undefined) && (
251 <PauseIcon />
252 )}
253 {paused && <PlayArrowIcon />}
254 </IconButton>
255 )}
256 {(state === 'cancelled' || state === 'completed') && (
257 <IconButton
258 color="error"
259 onClick={() => {
260 actions?.app.removeDownload(id);
261 }}
262 size="small"
263 >
264 <DeleteIcon />
265 </IconButton>
266 )}
267 {state !== 'cancelled' && (
268 <IconButton
269 color="primary"
270 onClick={() => {
271 if (savePath) shell.showItemInFolder(savePath);
272 }}
273 size="small"
274 >
275 <FolderIcon />
276 </IconButton>
277 )}
278 </Box>
279 </Card>
280 );
281 })}
282 </div>
283 </div>
284 );
285 }
286}
287
288export default injectIntl(observer(DownloadManagerDashboard));
diff --git a/src/components/downloadManager/DownloadManagerLayout.tsx b/src/components/downloadManager/DownloadManagerLayout.tsx
new file mode 100644
index 000000000..1e018cfb8
--- /dev/null
+++ b/src/components/downloadManager/DownloadManagerLayout.tsx
@@ -0,0 +1,81 @@
1import React, { Component } from 'react';
2import { inject, observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4
5import { mdiClose } from '@mdi/js';
6import { Outlet } from 'react-router-dom';
7import { Actions } from '../../actions/lib/actions';
8import { isEscKeyPress } from '../../jsUtils';
9import Appear from '../ui/effects/Appear';
10import ErrorBoundary from '../util/ErrorBoundary';
11import Icon from '../ui/icon';
12
13const messages = defineMessages({
14 closeSettings: {
15 id: 'settings.app.closeSettings',
16 defaultMessage: 'Close settings',
17 },
18});
19
20interface IProps extends WrappedComponentProps {
21 actions?: Actions;
22 // eslint-disable-next-line react/no-unused-prop-types
23 children?: React.ReactNode;
24}
25
26@inject('stores', 'actions')
27@observer
28class DownloadManagerLayout extends Component<IProps> {
29 componentDidMount() {
30 document.addEventListener('keydown', this.handleKeyDown.bind(this), false);
31 }
32
33 componentWillUnmount() {
34 document.removeEventListener(
35 'keydown',
36 // eslint-disable-next-line unicorn/no-invalid-remove-event-listener
37 this.handleKeyDown.bind(this),
38 false,
39 );
40 }
41
42 handleKeyDown(e) {
43 if (isEscKeyPress(e.keyCode)) {
44 this.props.actions!.ui.closeSettings();
45 }
46 }
47
48 render() {
49 const { closeSettings } = this.props.actions!.ui;
50
51 const { intl } = this.props;
52
53 return (
54 <Appear transitionName="fadeIn-fast">
55 <div className="settings-wrapper">
56 <ErrorBoundary>
57 <button
58 type="button"
59 className="settings-wrapper__action"
60 onClick={closeSettings}
61 aria-label={intl.formatMessage(messages.closeSettings)}
62 />
63 <div className="settings franz-form">
64 <Outlet />
65 <button
66 type="button"
67 className="settings__close"
68 onClick={closeSettings}
69 aria-label={intl.formatMessage(messages.closeSettings)}
70 >
71 <Icon icon={mdiClose} size={1.35} />
72 </button>
73 </div>
74 </ErrorBoundary>
75 </div>
76 </Appear>
77 );
78 }
79}
80
81export default injectIntl<'intl', IProps>(DownloadManagerLayout);
diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx
index 6fd911a24..7904d7653 100644
--- a/src/components/layout/Sidebar.tsx
+++ b/src/components/layout/Sidebar.tsx
@@ -14,11 +14,12 @@ import {
14 mdiPlusBox, 14 mdiPlusBox,
15 mdiViewGrid, 15 mdiViewGrid,
16 mdiViewSplitVertical, 16 mdiViewSplitVertical,
17 mdiDownload,
17} from '@mdi/js'; 18} from '@mdi/js';
18
19import Tabbar from '../services/tabs/Tabbar'; 19import Tabbar from '../services/tabs/Tabbar';
20import { 20import {
21 addNewServiceShortcutKey, 21 addNewServiceShortcutKey,
22 downloadsShortcutKey,
22 lockFerdiumShortcutKey, 23 lockFerdiumShortcutKey,
23 muteFerdiumShortcutKey, 24 muteFerdiumShortcutKey,
24 settingsShortcutKey, 25 settingsShortcutKey,
@@ -91,6 +92,7 @@ interface IProps extends WrappedComponentProps {
91 toggleCollapseMenu: () => void; 92 toggleCollapseMenu: () => void;
92 toggleWorkspaceDrawer: () => void; 93 toggleWorkspaceDrawer: () => void;
93 openSettings: (args: { path: string }) => void; 94 openSettings: (args: { path: string }) => void;
95 openDownloads: (args: { path: string }) => void;
94 // eslint-disable-next-line react/no-unused-prop-types 96 // eslint-disable-next-line react/no-unused-prop-types
95 closeSettings: () => void; 97 closeSettings: () => void;
96 setActive: (args: { serviceId: string }) => void; 98 setActive: (args: { serviceId: string }) => void;
@@ -141,6 +143,7 @@ class Sidebar extends Component<IProps, IState> {
141 render() { 143 render() {
142 const { 144 const {
143 openSettings, 145 openSettings,
146 openDownloads,
144 toggleMuteApp, 147 toggleMuteApp,
145 toggleCollapseMenu, 148 toggleCollapseMenu,
146 isAppMuted, 149 isAppMuted,
@@ -156,6 +159,7 @@ class Sidebar extends Component<IProps, IState> {
156 hideWorkspacesButton, 159 hideWorkspacesButton,
157 hideNotificationsButton, 160 hideNotificationsButton,
158 hideSettingsButton, 161 hideSettingsButton,
162 hideDownloadButton,
159 hideSplitModeButton, 163 hideSplitModeButton,
160 useHorizontalStyle, 164 useHorizontalStyle,
161 splitMode, 165 splitMode,
@@ -180,6 +184,8 @@ class Sidebar extends Component<IProps, IState> {
180 184
181 const { isMenuCollapsed } = stores!.settings.all.app; 185 const { isMenuCollapsed } = stores!.settings.all.app;
182 186
187 const { isDownloading, justFinishedDownloading } = stores!.app;
188
183 return ( 189 return (
184 <div className="sidebar"> 190 <div className="sidebar">
185 <Tabbar 191 <Tabbar
@@ -340,6 +346,25 @@ class Sidebar extends Component<IProps, IState> {
340 style={{ height: 'auto', overflowY: 'unset' }} 346 style={{ height: 'auto', overflowY: 'unset' }}
341 /> 347 />
342 )} 348 )}
349
350 {!hideDownloadButton && !isMenuCollapsed ? (
351 <button
352 type="button"
353 onClick={() => openDownloads({ path: '/downloadmanager' })}
354 className={
355 'sidebar__button' +
356 `${isDownloading ? ' sidebar__button--downloading' : ''}` +
357 `${justFinishedDownloading ? ' sidebar__button--done' : ''}`
358 }
359 data-tooltip-id="tooltip-sidebar-button"
360 data-tooltip-content={`${intl.formatMessage(
361 globalMessages.downloads,
362 )} (${downloadsShortcutKey(false)})`}
363 >
364 <Icon icon={mdiDownload} size={1.8} />
365 </button>
366 ) : null}
367
343 {!hideSettingsButton && !isMenuCollapsed ? ( 368 {!hideSettingsButton && !isMenuCollapsed ? (
344 <button 369 <button
345 type="button" 370 type="button"
diff --git a/src/components/settings/settings/EditSettingsForm.tsx b/src/components/settings/settings/EditSettingsForm.tsx
index 0b5d4374d..210c8d9e9 100644
--- a/src/components/settings/settings/EditSettingsForm.tsx
+++ b/src/components/settings/settings/EditSettingsForm.tsx
@@ -794,6 +794,8 @@ class EditSettingsForm extends Component<IProps, IState> {
794 794
795 <Toggle {...form.$('hideSettingsButton').bind()} /> 795 <Toggle {...form.$('hideSettingsButton').bind()} />
796 796
797 <Toggle {...form.$('hideDownloadButton').bind()} />
798
797 <Toggle {...form.$('alwaysShowWorkspaces').bind()} /> 799 <Toggle {...form.$('alwaysShowWorkspaces').bind()} />
798 </div> 800 </div>
799 )} 801 )}
diff --git a/src/config.ts b/src/config.ts
index 21a7462b9..d8b028104 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -424,6 +424,7 @@ export const DEFAULT_APP_SETTINGS = {
424 hideWorkspacesButton: false, 424 hideWorkspacesButton: false,
425 hideNotificationsButton: false, 425 hideNotificationsButton: false,
426 hideSettingsButton: false, 426 hideSettingsButton: false,
427 hideDownloadButton: false,
427 alwaysShowWorkspaces: false, 428 alwaysShowWorkspaces: false,
428 liftSingleInstanceLock: false, 429 liftSingleInstanceLock: false,
429 enableLongPressServiceHint: false, 430 enableLongPressServiceHint: false,
diff --git a/src/containers/download-manager/DownloadManagerScreen.tsx b/src/containers/download-manager/DownloadManagerScreen.tsx
new file mode 100644
index 000000000..5d395a180
--- /dev/null
+++ b/src/containers/download-manager/DownloadManagerScreen.tsx
@@ -0,0 +1,15 @@
1import { Component, ReactElement } from 'react';
2import ErrorBoundary from '../../components/util/ErrorBoundary';
3import DownloadManager from '../../components/downloadManager/DownloadManagerDashboard';
4
5class DownloadManagerScreen extends Component {
6 render(): ReactElement {
7 return (
8 <ErrorBoundary>
9 <DownloadManager {...this.props} />
10 </ErrorBoundary>
11 );
12 }
13}
14
15export default DownloadManagerScreen;
diff --git a/src/containers/download-manager/DownloadManagerWindow.tsx b/src/containers/download-manager/DownloadManagerWindow.tsx
new file mode 100644
index 000000000..e13e51774
--- /dev/null
+++ b/src/containers/download-manager/DownloadManagerWindow.tsx
@@ -0,0 +1,46 @@
1import { inject, observer } from 'mobx-react';
2import { Component, ReactPortal } from 'react';
3import ReactDOM from 'react-dom';
4import { Outlet } from 'react-router-dom';
5
6import { StoresProps } from '../../@types/ferdium-components.types';
7import Layout from '../../components/downloadManager/DownloadManagerLayout';
8import ErrorBoundary from '../../components/util/ErrorBoundary';
9
10interface IProps {}
11
12@inject('stores', 'actions')
13@observer
14class DownloadManagerContainer extends Component<IProps> {
15 portalRoot: any;
16
17 el: HTMLDivElement;
18
19 constructor(props: StoresProps) {
20 super(props);
21
22 this.portalRoot = document.querySelector('#portalContainer');
23 this.el = document.createElement('div');
24 }
25
26 componentDidMount(): void {
27 this.portalRoot.append(this.el);
28 }
29
30 componentWillUnmount(): void {
31 this.el.remove();
32 }
33
34 render(): ReactPortal {
35 return ReactDOM.createPortal(
36 <ErrorBoundary>
37 <Layout>
38 <Outlet />
39 </Layout>
40 </ErrorBoundary>,
41 this.el,
42 );
43 }
44}
45
46export default DownloadManagerContainer;
diff --git a/src/containers/layout/AppLayoutContainer.tsx b/src/containers/layout/AppLayoutContainer.tsx
index e30c0e067..8748f1032 100644
--- a/src/containers/layout/AppLayoutContainer.tsx
+++ b/src/containers/layout/AppLayoutContainer.tsx
@@ -52,7 +52,8 @@ class AppLayoutContainer extends Component<IProps> {
52 const { installUpdate, toggleMuteApp, toggleCollapseMenu } = 52 const { installUpdate, toggleMuteApp, toggleCollapseMenu } =
53 this.props.actions.app; 53 this.props.actions.app;
54 54
55 const { openSettings, closeSettings } = this.props.actions.ui; 55 const { openSettings, closeSettings, openDownloads } =
56 this.props.actions.ui;
56 57
57 const isLoadingFeatures = 58 const isLoadingFeatures =
58 features.featuresRequest.isExecuting && 59 features.featuresRequest.isExecuting &&
@@ -89,6 +90,7 @@ class AppLayoutContainer extends Component<IProps> {
89 isAppMuted={settings.all.app.isAppMuted} 90 isAppMuted={settings.all.app.isAppMuted}
90 isMenuCollapsed={settings.all.app.isMenuCollapsed} 91 isMenuCollapsed={settings.all.app.isMenuCollapsed}
91 openSettings={openSettings} 92 openSettings={openSettings}
93 openDownloads={openDownloads}
92 closeSettings={closeSettings} 94 closeSettings={closeSettings}
93 reorder={reorder} 95 reorder={reorder}
94 reload={reload} 96 reload={reload}
diff --git a/src/containers/settings/EditSettingsScreen.tsx b/src/containers/settings/EditSettingsScreen.tsx
index b9732ead0..8190bef3e 100644
--- a/src/containers/settings/EditSettingsScreen.tsx
+++ b/src/containers/settings/EditSettingsScreen.tsx
@@ -255,6 +255,10 @@ const messages = defineMessages({
255 id: 'settings.app.form.hideSettingsButton', 255 id: 'settings.app.form.hideSettingsButton',
256 defaultMessage: 'Hide Settings button', 256 defaultMessage: 'Hide Settings button',
257 }, 257 },
258 hideDownloadButton: {
259 id: 'settings.app.form.hideDownloadButton',
260 defaultMessage: 'Hide Downloads button',
261 },
258 alwaysShowWorkspaces: { 262 alwaysShowWorkspaces: {
259 id: 'settings.app.form.alwaysShowWorkspaces', 263 id: 'settings.app.form.alwaysShowWorkspaces',
260 defaultMessage: 'Always show workspace drawer', 264 defaultMessage: 'Always show workspace drawer',
@@ -425,6 +429,7 @@ class EditSettingsScreen extends Component<
425 hideWorkspacesButton: Boolean(settingsData.hideWorkspacesButton), 429 hideWorkspacesButton: Boolean(settingsData.hideWorkspacesButton),
426 hideNotificationsButton: Boolean(settingsData.hideNotificationsButton), 430 hideNotificationsButton: Boolean(settingsData.hideNotificationsButton),
427 hideSettingsButton: Boolean(settingsData.hideSettingsButton), 431 hideSettingsButton: Boolean(settingsData.hideSettingsButton),
432 hideDownloadButton: Boolean(settingsData.hideDownloadButton),
428 alwaysShowWorkspaces: Boolean(settingsData.alwaysShowWorkspaces), 433 alwaysShowWorkspaces: Boolean(settingsData.alwaysShowWorkspaces),
429 accentColor: settingsData.accentColor, 434 accentColor: settingsData.accentColor,
430 progressbarAccentColor: settingsData.progressbarAccentColor, 435 progressbarAccentColor: settingsData.progressbarAccentColor,
@@ -1081,6 +1086,15 @@ class EditSettingsScreen extends Component<
1081 default: DEFAULT_APP_SETTINGS.hideSettingsButton, 1086 default: DEFAULT_APP_SETTINGS.hideSettingsButton,
1082 type: 'checkbox', 1087 type: 'checkbox',
1083 }, 1088 },
1089 hideDownloadButton: {
1090 label: intl.formatMessage(messages.hideDownloadButton),
1091 value: ifUndefined<boolean>(
1092 settings.all.app.hideDownloadButton,
1093 DEFAULT_APP_SETTINGS.hideDownloadButton,
1094 ),
1095 default: DEFAULT_APP_SETTINGS.hideDownloadButton,
1096 type: 'checkbox',
1097 },
1084 alwaysShowWorkspaces: { 1098 alwaysShowWorkspaces: {
1085 label: intl.formatMessage(messages.alwaysShowWorkspaces), 1099 label: intl.formatMessage(messages.alwaysShowWorkspaces),
1086 value: ifUndefined<boolean>( 1100 value: ifUndefined<boolean>(
diff --git a/src/environment.ts b/src/environment.ts
index c3b9e7e58..87e2f4f66 100644
--- a/src/environment.ts
+++ b/src/environment.ts
@@ -42,5 +42,7 @@ export const splitModeToggleShortcutKey = (isAccelerator = true) =>
42 `${cmdOrCtrlShortcutKey(isAccelerator)}+${altKey(isAccelerator)}+S`; 42 `${cmdOrCtrlShortcutKey(isAccelerator)}+${altKey(isAccelerator)}+S`;
43export const settingsShortcutKey = (isAccelerator = true) => 43export const settingsShortcutKey = (isAccelerator = true) =>
44 `${cmdOrCtrlShortcutKey(isAccelerator)}+${isMac ? ',' : 'P'}`; 44 `${cmdOrCtrlShortcutKey(isAccelerator)}+${isMac ? ',' : 'P'}`;
45export const downloadsShortcutKey = (isAccelerator = true) =>
46 `${cmdOrCtrlShortcutKey(isAccelerator)}+J`;
45export const toggleFullScreenKey = () => 47export const toggleFullScreenKey = () =>
46 isMac ? `CTRL + ${cmdKey} + F` : 'F11'; 48 isMac ? `CTRL + ${cmdKey} + F` : 'F11';
diff --git a/src/i18n/globalMessages.ts b/src/i18n/globalMessages.ts
index 9f55da57a..1c5e6a4ba 100644
--- a/src/i18n/globalMessages.ts
+++ b/src/i18n/globalMessages.ts
@@ -66,6 +66,10 @@ export default defineMessages({
66 id: 'global.quitConfirmation', 66 id: 'global.quitConfirmation',
67 defaultMessage: 'Do you really want to quit Ferdium?', 67 defaultMessage: 'Do you really want to quit Ferdium?',
68 }, 68 },
69 downloads: {
70 id: 'global.downloads',
71 defaultMessage: 'Downloads',
72 },
69 settings: { 73 settings: {
70 id: 'global.settings', 74 id: 'global.settings',
71 defaultMessage: 'Settings', 75 defaultMessage: 'Settings',
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 82c0f1b02..da6d825b6 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -9,6 +9,8 @@
9 "connectionLostBanner.cta": "Reload Service", 9 "connectionLostBanner.cta": "Reload Service",
10 "connectionLostBanner.informationLink": "What happened?", 10 "connectionLostBanner.informationLink": "What happened?",
11 "connectionLostBanner.message": "Oh no! Ferdium lost the connection to {name}.", 11 "connectionLostBanner.message": "Oh no! Ferdium lost the connection to {name}.",
12 "downloadManager.empty": "Your download list is empty.",
13 "downloadManager.headline": "Download Manager",
12 "feature.basicAuth.signIn": "Sign In", 14 "feature.basicAuth.signIn": "Sign In",
13 "feature.publishDebugInfo.error": "There was an error while trying to publish the debug information. Please try again later or view the console for more information.", 15 "feature.publishDebugInfo.error": "There was an error while trying to publish the debug information. Please try again later or view the console for more information.",
14 "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdium. By publishing your debug information you accept Ferdium Debugger's privacy policy and terms of service", 16 "feature.publishDebugInfo.info": "Publishing your debug information helps us find issues and errors in Ferdium. By publishing your debug information you accept Ferdium Debugger's privacy policy and terms of service",
@@ -23,6 +25,7 @@
23 "global.api.unhealthy": "Can't connect to {serverNameParse} online services", 25 "global.api.unhealthy": "Can't connect to {serverNameParse} online services",
24 "global.cancel": "Cancel", 26 "global.cancel": "Cancel",
25 "global.clearCache": "Clear cache", 27 "global.clearCache": "Clear cache",
28 "global.downloads": "Downloads",
26 "global.edit": "Edit", 29 "global.edit": "Edit",
27 "global.no": "No", 30 "global.no": "No",
28 "global.notConnectedToTheInternet": "You are not connected to the internet.", 31 "global.notConnectedToTheInternet": "You are not connected to the internet.",
@@ -219,6 +222,7 @@
219 "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup", 222 "settings.app.form.hibernateOnStartup": "Keep services in hibernation on startup",
220 "settings.app.form.hibernationStrategy": "Hibernation strategy", 223 "settings.app.form.hibernationStrategy": "Hibernation strategy",
221 "settings.app.form.hideCollapseButton": "Hide Collapse button", 224 "settings.app.form.hideCollapseButton": "Hide Collapse button",
225 "settings.app.form.hideDownloadButton": "Hide Downloads button",
222 "settings.app.form.hideNotificationsButton": "Hide Notifications & Sound button", 226 "settings.app.form.hideNotificationsButton": "Hide Notifications & Sound button",
223 "settings.app.form.hideRecipesButton": "Hide Recipes button", 227 "settings.app.form.hideRecipesButton": "Hide Recipes button",
224 "settings.app.form.hideSettingsButton": "Hide Settings button", 228 "settings.app.form.hideSettingsButton": "Hide Settings button",
diff --git a/src/index.ts b/src/index.ts
index cbc10bdbe..5accc4570 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -674,6 +674,16 @@ ipcMain.on('window.toolbar-double-clicked', () => {
674 } 674 }
675}); 675});
676 676
677ipcMain.on('stop-download', (_e, data) => {
678 debug(`stopping download from main process ${data}`);
679 mainWindow?.webContents.send('stop-download', data);
680});
681
682ipcMain.on('toggle-pause-download', (_e, data) => {
683 debug(`stopping download from main process ${data}`);
684 mainWindow?.webContents.send('toggle-pause-download', data);
685});
686
677// Quit when all windows are closed. 687// Quit when all windows are closed.
678app.on('window-all-closed', () => { 688app.on('window-all-closed', () => {
679 // On OS X it is common for applications and their menu bar 689 // On OS X it is common for applications and their menu bar
diff --git a/src/lib/Menu.ts b/src/lib/Menu.ts
index a90fd8bea..8ad4441d2 100644
--- a/src/lib/Menu.ts
+++ b/src/lib/Menu.ts
@@ -32,6 +32,7 @@ import {
32 nodeVersion, 32 nodeVersion,
33 osArch, 33 osArch,
34 toggleFullScreenKey, 34 toggleFullScreenKey,
35 downloadsShortcutKey,
35} from '../environment'; 36} from '../environment';
36import { CUSTOM_WEBSITE_RECIPE_ID, LIVE_API_FERDIUM_WEBSITE } from '../config'; 37import { CUSTOM_WEBSITE_RECIPE_ID, LIVE_API_FERDIUM_WEBSITE } from '../config';
37import { ferdiumVersion } from '../environment-remote'; 38import { ferdiumVersion } from '../environment-remote';
@@ -875,6 +876,15 @@ class FranzMenu implements StoresProps {
875 type: 'separator', 876 type: 'separator',
876 }, 877 },
877 { 878 {
879 label: intl.formatMessage(globalMessages.downloads),
880 accelerator: `${downloadsShortcutKey()}`,
881 click: () => {
882 this.actions.ui.openDownloads({ path: '/downloadmanager' });
883 },
884 enabled: this.stores.user.isLoggedIn,
885 visible: !locked,
886 },
887 {
878 label: intl.formatMessage(globalMessages.settings), 888 label: intl.formatMessage(globalMessages.settings),
879 accelerator: `${settingsShortcutKey()}`, 889 accelerator: `${settingsShortcutKey()}`,
880 click: () => { 890 click: () => {
@@ -991,6 +1001,15 @@ class FranzMenu implements StoresProps {
991 } else { 1001 } else {
992 tpl[0].submenu = [ 1002 tpl[0].submenu = [
993 { 1003 {
1004 label: intl.formatMessage(globalMessages.downloads),
1005 accelerator: `${downloadsShortcutKey()}`,
1006 click: () => {
1007 this.actions.ui.openDownloads({ path: '/downloadmanager' });
1008 },
1009 enabled: this.stores.user.isLoggedIn,
1010 visible: !locked,
1011 },
1012 {
994 label: intl.formatMessage(globalMessages.settings), 1013 label: intl.formatMessage(globalMessages.settings),
995 accelerator: `${settingsShortcutKey()}`, 1014 accelerator: `${settingsShortcutKey()}`,
996 click: () => { 1015 click: () => {
diff --git a/src/models/Service.ts b/src/models/Service.ts
index 265b3e13c..b1f0bc271 100644
--- a/src/models/Service.ts
+++ b/src/models/Service.ts
@@ -1,9 +1,10 @@
1import { join } from 'node:path'; 1import { join, basename } from 'node:path';
2import { autorun, action, computed, makeObservable, observable } from 'mobx'; 2import { autorun, action, computed, makeObservable, observable } from 'mobx';
3import { ipcRenderer } from 'electron'; 3import { ipcRenderer } from 'electron';
4import { webContents } from '@electron/remote'; 4import { webContents } from '@electron/remote';
5import ElectronWebView from 'react-electron-web-view'; 5import ElectronWebView from 'react-electron-web-view';
6 6
7import { v4 as uuidV4 } from 'uuid';
7import { todosStore } from '../features/todos'; 8import { todosStore } from '../features/todos';
8import { isValidExternalURL, normalizedUrl } from '../helpers/url-helpers'; 9import { isValidExternalURL, normalizedUrl } from '../helpers/url-helpers';
9import UserAgent from './UserAgent'; 10import UserAgent from './UserAgent';
@@ -523,6 +524,84 @@ export default class Service {
523 }); 524 });
524 525
525 if (webviewWebContents) { 526 if (webviewWebContents) {
527 webviewWebContents.session.on('will-download', (event, item) => {
528 event.preventDefault();
529
530 const downloadId = uuidV4();
531
532 window['ferdium'].actions.app.addDownload({
533 id: downloadId,
534 serviceId: this.id,
535 filename: item.getFilename(),
536 url: item.getURL(),
537 savePath: item.getSavePath(),
538 });
539
540 item.addListener('updated', (event, state) => {
541 if (state === 'interrupted') {
542 debug('Download is interrupted but can be resumed');
543 } else if (state === 'progressing') {
544 if (item.isPaused()) {
545 debug('Download is paused');
546 } else {
547 debug(`Received bytes: ${item.getReceivedBytes()}`);
548 }
549 }
550 window['ferdium'].actions.app.updateDownload({
551 id: downloadId,
552 serviceId: this.id,
553 filename: basename(item.getSavePath()),
554 url: item.getURL(),
555 savePath: item.getSavePath(),
556 receivedBytes: item.getReceivedBytes(),
557 totalBytes: item.getTotalBytes(),
558 state,
559 });
560 debug('download updated', event, state);
561 });
562 item.addListener('done', (event, state) => {
563 debug('download done', event, state);
564 if (state === 'completed') {
565 debug('Download successfully');
566 } else {
567 if (state === 'cancelled' && item.getSavePath() === '') {
568 window['ferdium'].actions.app.removeDownload(downloadId);
569 debug('Download is cancelled');
570 }
571 debug(`Download failed: ${state}`);
572 }
573
574 window['ferdium'].actions.app.endedDownload({
575 id: downloadId,
576 serviceId: this.id,
577 receivedBytes: item.getReceivedBytes(),
578 totalBytes: item.getTotalBytes(),
579 state,
580 });
581 });
582
583 ipcRenderer.on('toggle-pause-download', (_, data) => {
584 debug('toggle-pause-download', item.isPaused(), item.getState());
585 if (data.downloadId === downloadId || data.downloadId === undefined) {
586 if (item.isPaused()) {
587 item.resume();
588 } else {
589 item.pause();
590 }
591 }
592 debug('toggle-pause-download', item.isPaused(), item.getState());
593 window['ferdium'].actions.app.updateDownload({
594 id: downloadId,
595 paused: item.isPaused(),
596 });
597 });
598
599 ipcRenderer.on('stop-download', (_, data) => {
600 if (data === undefined || downloadId === data.downloadId) {
601 item.cancel();
602 }
603 });
604 });
526 webviewWebContents.on('login', (event, _, authInfo, callback) => { 605 webviewWebContents.on('login', (event, _, authInfo, callback) => {
527 // const authCallback = callback; 606 // const authCallback = callback;
528 debug('browser login event', authInfo); 607 debug('browser login event', authInfo);
diff --git a/src/routes.tsx b/src/routes.tsx
index 9f81e46d9..436f25ea4 100644
--- a/src/routes.tsx
+++ b/src/routes.tsx
@@ -35,6 +35,8 @@ import { WORKSPACES_ROUTES } from './features/workspaces/constants';
35import { StoresProps } from './@types/ferdium-components.types'; 35import { StoresProps } from './@types/ferdium-components.types';
36import { Actions } from './actions/lib/actions'; 36import { Actions } from './actions/lib/actions';
37import { RealStores } from './stores'; 37import { RealStores } from './stores';
38import DownloadManagerScreen from './containers/download-manager/DownloadManagerScreen';
39import DownloadManagerWindow from './containers/download-manager/DownloadManagerWindow';
38 40
39interface IProps { 41interface IProps {
40 history: HashHistory; 42 history: HashHistory;
@@ -116,6 +118,15 @@ class FerdiumRoutes extends Component<IProps> {
116 /> 118 />
117 </Route> 119 </Route>
118 <Route 120 <Route
121 path="/downloadmanager"
122 element={<DownloadManagerWindow {...this.props} />}
123 >
124 <Route
125 path="/downloadmanager"
126 element={<DownloadManagerScreen {...this.props} />}
127 />
128 </Route>
129 <Route
119 path="/settings" 130 path="/settings"
120 element={<SettingsWindow {...this.props} />} 131 element={<SettingsWindow {...this.props} />}
121 > 132 >
diff --git a/src/stores/AppStore.ts b/src/stores/AppStore.ts
index b317d99fc..1c1336819 100644
--- a/src/stores/AppStore.ts
+++ b/src/stores/AppStore.ts
@@ -61,6 +61,22 @@ const CATALINA_NOTIFICATION_HACK_KEY =
61 61
62const locales = generatedTranslations(); 62const locales = generatedTranslations();
63 63
64interface Download {
65 id: string;
66 serviceId: string;
67 filename: string;
68 url: string;
69 savePath?: string;
70 state?: 'progressing' | 'interrupted' | 'completed' | 'cancelled';
71 paused?: boolean;
72 canResume?: boolean;
73 progress?: number;
74 totalBytes?: number;
75 receivedBytes?: number;
76 startTime?: number;
77 endTime?: number;
78}
79
64export default class AppStore extends TypedStore { 80export default class AppStore extends TypedStore {
65 updateStatusTypes = { 81 updateStatusTypes = {
66 CHECKING: 'CHECKING', 82 CHECKING: 'CHECKING',
@@ -114,6 +130,10 @@ export default class AppStore extends TypedStore {
114 130
115 fetchDataInterval: null | NodeJS.Timer = null; 131 fetchDataInterval: null | NodeJS.Timer = null;
116 132
133 @observable downloads: Download[] = [];
134
135 @observable justFinishedDownloading: boolean = false;
136
117 constructor(stores: Stores, api: ApiInterface, actions: Actions) { 137 constructor(stores: Stores, api: ApiInterface, actions: Actions) {
118 super(stores, api, actions); 138 super(stores, api, actions);
119 139
@@ -136,6 +156,14 @@ export default class AppStore extends TypedStore {
136 this._toggleCollapseMenu.bind(this), 156 this._toggleCollapseMenu.bind(this),
137 ); 157 );
138 this.actions.app.clearAllCache.listen(this._clearAllCache.bind(this)); 158 this.actions.app.clearAllCache.listen(this._clearAllCache.bind(this));
159 this.actions.app.addDownload.listen(this._addDownload.bind(this));
160 this.actions.app.removeDownload.listen(this._removeDownload.bind(this));
161 this.actions.app.updateDownload.listen(this._updateDownload.bind(this));
162 this.actions.app.endedDownload.listen(this._endedDownload.bind(this));
163 this.actions.app.stopDownload.listen(this._stopDownload.bind(this));
164 this.actions.app.togglePauseDownload.listen(
165 this._togglePauseDownload.bind(this),
166 );
139 167
140 this.registerReactions([ 168 this.registerReactions([
141 this._offlineCheck.bind(this), 169 this._offlineCheck.bind(this),
@@ -300,6 +328,10 @@ export default class AppStore extends TypedStore {
300 return this.getAppCacheSizeRequest.execute().result; 328 return this.getAppCacheSizeRequest.execute().result;
301 } 329 }
302 330
331 @computed get isDownloading() {
332 return this.downloads.some(download => download.state === 'progressing');
333 }
334
303 @computed get debugInfo() { 335 @computed get debugInfo() {
304 const settings = cleanseJSObject(this.stores.settings.app); 336 const settings = cleanseJSObject(this.stores.settings.app);
305 settings.lockedPassword = '******'; 337 settings.lockedPassword = '******';
@@ -518,6 +550,78 @@ export default class AppStore extends TypedStore {
518 this.locale = value; 550 this.locale = value;
519 } 551 }
520 552
553 @action _addDownload(download: Download) {
554 this.downloads.unshift(download);
555 debug('Download added', this.downloads);
556 }
557
558 @action _removeDownload(id: string | null) {
559 debug(`Removed download ${id}`);
560 if (id === null) {
561 const indexesToRemove: number[] = [];
562 this.downloads.map(item => {
563 if (!item.state) return;
564 if (item.state === 'completed' || item.state === 'cancelled') {
565 indexesToRemove.push(this.downloads.indexOf(item));
566 }
567 });
568
569 if (indexesToRemove.length === 0) return;
570
571 this.downloads = this.downloads.filter(
572 (_, index) => !indexesToRemove.includes(index),
573 );
574
575 debug('Removed all completed downloads');
576 return;
577 }
578
579 const index = this.downloads.findIndex(item => item.id === id);
580 if (index !== -1) {
581 this.downloads.splice(index, 1);
582 }
583
584 debug(`Removed download ${id}`);
585 }
586
587 @action _updateDownload(download: Download) {
588 const index = this.downloads.findIndex(item => item.id === download.id);
589 if (index !== -1) {
590 this.downloads[index] = { ...this.downloads[index], ...download };
591 }
592
593 debug('Download updated', this.downloads[index]);
594 }
595
596 @action _endedDownload(download: Download) {
597 const index = this.downloads.findIndex(item => item.id === download.id);
598 if (index !== -1) {
599 this.downloads[index] = { ...this.downloads[index], ...download };
600 }
601
602 debug('Download ended', this.downloads[index]);
603
604 if (!this.isDownloading && download.state === 'completed') {
605 this.justFinishedDownloading = true;
606
607 setTimeout(() => {
608 this.justFinishedDownloading = false;
609 }, ms('2s'));
610 }
611 }
612
613 @action _stopDownload(downloadId: string | undefined) {
614 ipcRenderer.send('stop-download', {
615 downloadId,
616 });
617 }
618
619 @action _togglePauseDownload(downloadId: string | undefined) {
620 ipcRenderer.send('toggle-pause-download', {
621 downloadId,
622 });
623 }
624
521 _setLocale() { 625 _setLocale() {
522 if (this.stores.user?.isLoggedIn && this.stores.user?.data.locale) { 626 if (this.stores.user?.isLoggedIn && this.stores.user?.data.locale) {
523 this._changeLocale(this.stores.user.data.locale); 627 this._changeLocale(this.stores.user.data.locale);
diff --git a/src/stores/UIStore.ts b/src/stores/UIStore.ts
index 4ed45fc3b..a3330c2e6 100644
--- a/src/stores/UIStore.ts
+++ b/src/stores/UIStore.ts
@@ -18,6 +18,7 @@ export default class UIStore extends TypedStore {
18 makeObservable(this); 18 makeObservable(this);
19 19
20 // Register action handlers 20 // Register action handlers
21 this.actions.ui.openDownloads.listen(this._openDownloads.bind(this));
21 this.actions.ui.openSettings.listen(this._openSettings.bind(this)); 22 this.actions.ui.openSettings.listen(this._openSettings.bind(this));
22 this.actions.ui.closeSettings.listen(this._closeSettings.bind(this)); 23 this.actions.ui.closeSettings.listen(this._closeSettings.bind(this));
23 this.actions.ui.toggleServiceUpdatedInfoBar.listen( 24 this.actions.ui.toggleServiceUpdatedInfoBar.listen(
@@ -97,6 +98,12 @@ export default class UIStore extends TypedStore {
97 } 98 }
98 99
99 // Actions 100 // Actions
101 @action _openDownloads({ path = '/downloadmanager' }): void {
102 const downloadsPath =
103 path === '/downloadmanager' ? path : `/downloadmanager/${path}`;
104 this.stores.router.push(downloadsPath);
105 }
106
100 @action _openSettings({ path = '/settings' }): void { 107 @action _openSettings({ path = '/settings' }): void {
101 const settingsPath = path === '/settings' ? path : `/settings/${path}`; 108 const settingsPath = path === '/settings' ? path : `/settings/${path}`;
102 this.stores.router.push(settingsPath); 109 this.stores.router.push(settingsPath);
diff --git a/src/styles/layout.scss b/src/styles/layout.scss
index 173ca3184..591f7c54b 100644
--- a/src/styles/layout.scss
+++ b/src/styles/layout.scss
@@ -204,6 +204,27 @@ body.win32:not(.isFullScreen) .app .app__content {
204 } 204 }
205} 205}
206 206
207@keyframes isDownloadingFade {
208 50% {
209 color: $theme-brand-primary;
210 }
211}
212
213@keyframes isDownloadingDoneFade {
214 50% {
215 color: green;
216 }
217}
218
219.sidebar__button--downloading {
220 animation: isDownloadingFade 1s cubic-bezier(0.755, 0.05, 0.855, 0.06)
221 infinite;
222}
223
224.sidebar__button--done {
225 animation: isDownloadingDoneFade 0.2s linear infinite;
226}
227
207.grid .grid__row { 228.grid .grid__row {
208 display: flex; 229 display: flex;
209 flex-direction: row; 230 flex-direction: row;