yt-grabber 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +29 -0
- package/.prettierrc +19 -0
- package/.vscode/extensions.json +7 -0
- package/.vscode/settings.json +23 -0
- package/.yarnrc.yml +13 -0
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/package.json +115 -0
- package/public/index.html +20 -0
- package/public/screenshots/cutting.png +0 -0
- package/public/screenshots/downloading.png +0 -0
- package/public/screenshots/editing.png +0 -0
- package/public/screenshots/errors.png +0 -0
- package/public/screenshots/settings.png +0 -0
- package/public/screenshots/tracklist.png +0 -0
- package/src/@types/global.d.ts +7 -0
- package/src/@types/i18next-scanner-webpack.d.ts +1 -0
- package/src/@types/stylus.d.ts +4 -0
- package/src/@types/svg.d.ts +1 -0
- package/src/App.styl +24 -0
- package/src/App.tsx +31 -0
- package/src/bootstrap.tsx +30 -0
- package/src/common/CancellablePromise.ts +22 -0
- package/src/common/ComponentDisplayMode.ts +8 -0
- package/src/common/Delay.ts +3 -0
- package/src/common/FileSystem.ts +171 -0
- package/src/common/Helpers.ts +270 -0
- package/src/common/Mappings.ts +14 -0
- package/src/common/PuppeteerOptions.ts +45 -0
- package/src/common/Selectors.ts +21 -0
- package/src/common/Store.ts +108 -0
- package/src/common/Theme.ts +4 -0
- package/src/common/Youtube.ts +80 -0
- package/src/components/appBar/AppBar.styl +22 -0
- package/src/components/appBar/AppBar.tsx +73 -0
- package/src/components/directoryPicker/DirectoryPicker.tsx +44 -0
- package/src/components/fileField/FileField.styl +3 -0
- package/src/components/fileField/FileField.tsx +152 -0
- package/src/components/languagePicker/LanguagePicker.styl +38 -0
- package/src/components/languagePicker/LanguagePicker.tsx +145 -0
- package/src/components/logo/Logo.tsx +15 -0
- package/src/components/modals/DetailsModal.styl +9 -0
- package/src/components/modals/DetailsModal.tsx +85 -0
- package/src/components/numberField/NumberField.styl +13 -0
- package/src/components/numberField/NumberField.tsx +154 -0
- package/src/components/progress/Progress.styl +15 -0
- package/src/components/progress/Progress.tsx +18 -0
- package/src/components/splitButton/SplitButton.styl +0 -0
- package/src/components/splitButton/SplitButton.tsx +125 -0
- package/src/components/themePicker/ThemePicker.styl +19 -0
- package/src/components/themePicker/ThemePicker.tsx +65 -0
- package/src/components/themeSwitcher/ThemeSwitcher.styl +10 -0
- package/src/components/themeSwitcher/ThemeSwitcher.tsx +43 -0
- package/src/components/youtube/formatSelector/FormatSelector.styl +3 -0
- package/src/components/youtube/formatSelector/FormatSelector.tsx +202 -0
- package/src/components/youtube/inputPanel/InputPanel.styl +7 -0
- package/src/components/youtube/inputPanel/InputPanel.tsx +189 -0
- package/src/components/youtube/mediaInfoPanel/MediaInfoPanel.styl +80 -0
- package/src/components/youtube/mediaInfoPanel/MediaInfoPanel.tsx +113 -0
- package/src/components/youtube/trackList/TrackList.styl +64 -0
- package/src/components/youtube/trackList/TrackList.tsx +258 -0
- package/src/enums/DataResponse.ts +5 -0
- package/src/enums/Media.ts +16 -0
- package/src/enums/MediaFormat.ts +10 -0
- package/src/enums/MimeTypes.ts +14 -0
- package/src/hooks/useCancellablePromises.ts +25 -0
- package/src/hooks/useClickCounter.ts +24 -0
- package/src/hooks/useData.ts +61 -0
- package/src/hooks/useMultiClickHandler.ts +41 -0
- package/src/i18next.ts +33 -0
- package/src/index.ts +65 -0
- package/src/react/actions/Action.ts +3 -0
- package/src/react/actions/AppActions.ts +41 -0
- package/src/react/contexts/AppContext.tsx +51 -0
- package/src/react/contexts/AppThemeContext.tsx +38 -0
- package/src/react/contexts/DataContext copy.tsx +76 -0
- package/src/react/contexts/DataContext.tsx +41 -0
- package/src/react/hooks/useAppTheme.ts +14 -0
- package/src/react/reducers/AppReducer.tsx +45 -0
- package/src/react/reducers/Reducer.ts +7 -0
- package/src/react/states/AppState.ts +29 -0
- package/src/react/states/State.ts +29 -0
- package/src/renderer.tsx +13 -0
- package/src/resources/bin/yt-dlp.exe +0 -0
- package/src/resources/fonts/Baloo-Regular.ttf +0 -0
- package/src/resources/fonts/Lato-Black.ttf +0 -0
- package/src/resources/fonts/Lato-BlackItalic.ttf +0 -0
- package/src/resources/fonts/Lato-Bold.ttf +0 -0
- package/src/resources/fonts/Lato-BoldItalic.ttf +0 -0
- package/src/resources/fonts/Lato-Italic.ttf +0 -0
- package/src/resources/fonts/Lato-Light.ttf +0 -0
- package/src/resources/fonts/Lato-LightItalic.ttf +0 -0
- package/src/resources/fonts/Lato-Regular.ttf +0 -0
- package/src/resources/fonts/Lato-Thin.ttf +0 -0
- package/src/resources/fonts/Lato-ThinItalic.ttf +0 -0
- package/src/resources/fonts/Material-Icons.woff2 +0 -0
- package/src/resources/icons/favicon-16x16.png +0 -0
- package/src/resources/icons/favicon-32x32.png +0 -0
- package/src/resources/icons/favicon.ico +0 -0
- package/src/resources/icons/logo-shape.png +0 -0
- package/src/resources/icons/logo-shape.svg +59 -0
- package/src/resources/images/loading.svg +28 -0
- package/src/resources/images/logo.png +0 -0
- package/src/resources/locales/de-DE/flag.svg +1 -0
- package/src/resources/locales/de-DE/translation.json +44 -0
- package/src/resources/locales/en-GB/flag.svg +43 -0
- package/src/resources/locales/en-GB/translation.json +44 -0
- package/src/resources/locales/pl-PL/flag.svg +36 -0
- package/src/resources/locales/pl-PL/translation.json +44 -0
- package/src/styles/MaterialThemes.ts +331 -0
- package/src/styles/fonts.styl +71 -0
- package/src/styles/mixins.styl +22 -0
- package/src/tests/CompleteTracksMock.ts +17384 -0
- package/src/tests/MissingDetailsTracksMock.ts +7737 -0
- package/src/theme/ColorThemes.ts +190 -0
- package/src/theme/Colors.ts +92 -0
- package/src/theme/Shadows.ts +9 -0
- package/src/theme/Shape.ts +7 -0
- package/src/theme/Theme.ts +24 -0
- package/src/theme/Typography.ts +56 -0
- package/src/views/development/DevelopmentView.styl +22 -0
- package/src/views/development/DevelopmentView.tsx +57 -0
- package/src/views/home/HomeView.styl +60 -0
- package/src/views/home/HomeView.tsx +505 -0
- package/src/views/settings/SettingsView.styl +27 -0
- package/src/views/settings/SettingsView.tsx +255 -0
- package/tsconfig.json +20 -0
- package/webpack.config.ts +226 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import {alpha, ColorSystemOptions, PaletteMode} from "@mui/material";
|
|
2
|
+
|
|
3
|
+
import {Blue, Color, Gray, Green, Orange, Red} from "./Colors";
|
|
4
|
+
|
|
5
|
+
export type ThemeColorScheme = {
|
|
6
|
+
primary: Color;
|
|
7
|
+
secondary: Color;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type ColorTheme = {
|
|
11
|
+
primary: {
|
|
12
|
+
light: string;
|
|
13
|
+
main: string;
|
|
14
|
+
dark: string;
|
|
15
|
+
contrastText: string;
|
|
16
|
+
},
|
|
17
|
+
secondary: {
|
|
18
|
+
light: string;
|
|
19
|
+
main: string;
|
|
20
|
+
dark: string;
|
|
21
|
+
contrastText: string;
|
|
22
|
+
},
|
|
23
|
+
background: {
|
|
24
|
+
default: string;
|
|
25
|
+
paper: string;
|
|
26
|
+
},
|
|
27
|
+
divider: string;
|
|
28
|
+
text: {
|
|
29
|
+
primary: string;
|
|
30
|
+
secondary: string;
|
|
31
|
+
disabled: string;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const SlateBlue: Color = {
|
|
36
|
+
50: "hsl(231, 35%, 95%)",
|
|
37
|
+
100: "hsl(231, 35%, 85%)",
|
|
38
|
+
200: "hsl(231, 35%, 75%)",
|
|
39
|
+
300: "hsl(232, 25%, 65%)",
|
|
40
|
+
400: "hsl(232, 25%, 55%)",
|
|
41
|
+
500: "hsl(232, 25%, 50%)",
|
|
42
|
+
600: "hsl(232, 25%, 40%)",
|
|
43
|
+
700: "hsl(233, 35%, 30%)",
|
|
44
|
+
800: "hsl(233, 35%, 20%)",
|
|
45
|
+
900: "hsl(233, 35%, 15%)",
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const Purple: Color = {
|
|
49
|
+
50: "hsl(337, 75%, 95%)",
|
|
50
|
+
100: "hsl(337, 75%, 85%)",
|
|
51
|
+
200: "hsl(337, 75%, 75%)",
|
|
52
|
+
300: "hsl(338, 85%, 65%)",
|
|
53
|
+
400: "hsl(338, 85%, 55%)",
|
|
54
|
+
500: "hsl(338, 85%, 50%)",
|
|
55
|
+
600: "hsl(338, 85%, 40%)",
|
|
56
|
+
700: "hsl(339, 75%, 30%)",
|
|
57
|
+
800: "hsl(339, 75%, 20%)",
|
|
58
|
+
900: "hsl(339, 75%, 15%)",
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const getThemeColorSystem = (name: string, mode: PaletteMode): ColorSystemOptions => {
|
|
62
|
+
const colorScheme = ThemeColorSchemes[name];
|
|
63
|
+
|
|
64
|
+
return {
|
|
65
|
+
palette: {
|
|
66
|
+
mode,
|
|
67
|
+
primary: {
|
|
68
|
+
light: colorScheme.primary[200],
|
|
69
|
+
main: colorScheme.primary[400],
|
|
70
|
+
dark: colorScheme.primary[700],
|
|
71
|
+
contrastText: colorScheme.primary[50],
|
|
72
|
+
...(mode === "dark" && {
|
|
73
|
+
light: colorScheme.primary[300],
|
|
74
|
+
main: colorScheme.primary[500],
|
|
75
|
+
dark: colorScheme.primary[800],
|
|
76
|
+
contrastText: colorScheme.primary[50],
|
|
77
|
+
}),
|
|
78
|
+
},
|
|
79
|
+
secondary: {
|
|
80
|
+
light: colorScheme.secondary[200],
|
|
81
|
+
main: colorScheme.secondary[400],
|
|
82
|
+
dark: colorScheme.secondary[700],
|
|
83
|
+
contrastText: colorScheme.secondary[50],
|
|
84
|
+
...(mode === "dark" && {
|
|
85
|
+
light: colorScheme.secondary[300],
|
|
86
|
+
main: colorScheme.secondary[600],
|
|
87
|
+
dark: colorScheme.secondary[900],
|
|
88
|
+
contrastText: colorScheme.secondary[50],
|
|
89
|
+
}),
|
|
90
|
+
},
|
|
91
|
+
info: {
|
|
92
|
+
light: Blue[100],
|
|
93
|
+
main: Blue[300],
|
|
94
|
+
dark: Blue[600],
|
|
95
|
+
contrastText: Gray[50],
|
|
96
|
+
...(mode === "dark" && {
|
|
97
|
+
contrastText: Blue[300],
|
|
98
|
+
light: Blue[500],
|
|
99
|
+
main: Blue[700],
|
|
100
|
+
dark: Blue[900],
|
|
101
|
+
}),
|
|
102
|
+
},
|
|
103
|
+
warning: {
|
|
104
|
+
light: Orange[300],
|
|
105
|
+
main: Orange[400],
|
|
106
|
+
dark: Orange[800],
|
|
107
|
+
...(mode === "dark" && {
|
|
108
|
+
light: Orange[400],
|
|
109
|
+
main: Orange[500],
|
|
110
|
+
dark: Orange[700],
|
|
111
|
+
}),
|
|
112
|
+
},
|
|
113
|
+
error: {
|
|
114
|
+
light: Red[300],
|
|
115
|
+
main: Red[400],
|
|
116
|
+
dark: Red[800],
|
|
117
|
+
...(mode === "dark" && {
|
|
118
|
+
light: Red[400],
|
|
119
|
+
main: Red[500],
|
|
120
|
+
dark: Red[700],
|
|
121
|
+
}),
|
|
122
|
+
},
|
|
123
|
+
success: {
|
|
124
|
+
light: Green[300],
|
|
125
|
+
main: Green[400],
|
|
126
|
+
dark: Green[800],
|
|
127
|
+
...(mode === "dark" && {
|
|
128
|
+
light: Green[400],
|
|
129
|
+
main: Green[500],
|
|
130
|
+
dark: Green[700],
|
|
131
|
+
}),
|
|
132
|
+
},
|
|
133
|
+
grey: Gray,
|
|
134
|
+
divider: mode === "dark" ? alpha(colorScheme.primary[700], 0.6) : alpha(colorScheme.primary[300], 0.4),
|
|
135
|
+
background: {
|
|
136
|
+
default: Gray[200],
|
|
137
|
+
paper: Gray[50],
|
|
138
|
+
...(mode === "dark" && {
|
|
139
|
+
default: Gray.A700,
|
|
140
|
+
paper: colorScheme.primary[900],
|
|
141
|
+
}),
|
|
142
|
+
},
|
|
143
|
+
text: {
|
|
144
|
+
primary: colorScheme.primary[600],
|
|
145
|
+
secondary: colorScheme.primary[300],
|
|
146
|
+
disabled: colorScheme.primary[100],
|
|
147
|
+
...(mode === "dark" && {
|
|
148
|
+
primary: colorScheme.primary[100],
|
|
149
|
+
secondary: colorScheme.primary[400],
|
|
150
|
+
disabled: colorScheme.primary[700]
|
|
151
|
+
}),
|
|
152
|
+
},
|
|
153
|
+
// AppBar: {
|
|
154
|
+
// darkBg: colorScheme.primary[300],
|
|
155
|
+
// defaultBg: colorScheme.primary[300],
|
|
156
|
+
// darkColor: colorScheme.primary[900],
|
|
157
|
+
// ...(mode === "dark" && {
|
|
158
|
+
// darkBg: colorScheme.primary[900],
|
|
159
|
+
// defaultBg: colorScheme.primary[900],
|
|
160
|
+
// darkColor: colorScheme.primary[100],
|
|
161
|
+
// }),
|
|
162
|
+
// },
|
|
163
|
+
|
|
164
|
+
action: {
|
|
165
|
+
hover: alpha(Gray[200], 0.2),
|
|
166
|
+
selected: alpha(Gray[200], 0.3),
|
|
167
|
+
// active: Gray.A200,
|
|
168
|
+
focus: Gray.A200,
|
|
169
|
+
...(mode === "dark" && {
|
|
170
|
+
hover: alpha(Gray[600], 0.2),
|
|
171
|
+
selected: alpha(Gray[600], 0.3),
|
|
172
|
+
active: Gray[200],
|
|
173
|
+
focus: Gray[200],
|
|
174
|
+
}),
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export const ThemeColorSchemes: { [key: string]: ThemeColorScheme } = {
|
|
182
|
+
Sky: {
|
|
183
|
+
primary: SlateBlue,
|
|
184
|
+
secondary: Purple
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
// export const ColorThemes: { [key: string]: ColorTheme } = {
|
|
189
|
+
// Sky: getTheme,
|
|
190
|
+
// };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {CommonColors} from "@mui/material";
|
|
2
|
+
|
|
3
|
+
export interface Color {
|
|
4
|
+
50: string;
|
|
5
|
+
100: string;
|
|
6
|
+
200: string;
|
|
7
|
+
300: string;
|
|
8
|
+
400: string;
|
|
9
|
+
500: string;
|
|
10
|
+
600: string;
|
|
11
|
+
700: string;
|
|
12
|
+
800: string;
|
|
13
|
+
900: string;
|
|
14
|
+
A100?: string;
|
|
15
|
+
A200?: string;
|
|
16
|
+
A400?: string;
|
|
17
|
+
A700?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const Common: CommonColors = {
|
|
21
|
+
black: "hsl(0, 0%, 100%)",
|
|
22
|
+
white: "hsl(0, 0%, 0%)",
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const Blue: Color = {
|
|
26
|
+
50: "hsl(210, 100%, 95%)",
|
|
27
|
+
100: "hsl(210, 100%, 92%)",
|
|
28
|
+
200: "hsl(210, 100%, 80%)",
|
|
29
|
+
300: "hsl(210, 100%, 65%)",
|
|
30
|
+
400: "hsl(210, 98%, 55%)",
|
|
31
|
+
500: "hsl(210, 98%, 48%)",
|
|
32
|
+
600: "hsl(210, 98%, 42%)",
|
|
33
|
+
700: "hsl(210, 100%, 35%)",
|
|
34
|
+
800: "hsl(210, 100%, 21%)",
|
|
35
|
+
900: "hsl(210, 100%, 16%)",
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const Green: Color = {
|
|
39
|
+
50: "hsl(120, 80%, 98%)",
|
|
40
|
+
100: "hsl(120, 75%, 94%)",
|
|
41
|
+
200: "hsl(120, 75%, 87%)",
|
|
42
|
+
300: "hsl(120, 61%, 77%)",
|
|
43
|
+
400: "hsl(120, 44%, 53%)",
|
|
44
|
+
500: "hsl(120, 59%, 30%)",
|
|
45
|
+
600: "hsl(120, 70%, 25%)",
|
|
46
|
+
700: "hsl(120, 75%, 16%)",
|
|
47
|
+
800: "hsl(120, 84%, 10%)",
|
|
48
|
+
900: "hsl(120, 87%, 6%)",
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export const Orange: Color = {
|
|
52
|
+
50: "hsl(45, 100%, 97%)",
|
|
53
|
+
100: "hsl(45, 92%, 90%)",
|
|
54
|
+
200: "hsl(45, 94%, 80%)",
|
|
55
|
+
300: "hsl(45, 90%, 65%)",
|
|
56
|
+
400: "hsl(45, 90%, 40%)",
|
|
57
|
+
500: "hsl(45, 90%, 35%)",
|
|
58
|
+
600: "hsl(45, 91%, 25%)",
|
|
59
|
+
700: "hsl(45, 94%, 20%)",
|
|
60
|
+
800: "hsl(45, 95%, 16%)",
|
|
61
|
+
900: "hsl(45, 93%, 12%)",
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const Red: Color = {
|
|
65
|
+
50: "hsl(0, 100%, 97%)",
|
|
66
|
+
100: "hsl(0, 92%, 90%)",
|
|
67
|
+
200: "hsl(0, 94%, 80%)",
|
|
68
|
+
300: "hsl(0, 90%, 65%)",
|
|
69
|
+
400: "hsl(0, 90%, 40%)",
|
|
70
|
+
500: "hsl(0, 90%, 30%)",
|
|
71
|
+
600: "hsl(0, 91%, 25%)",
|
|
72
|
+
700: "hsl(0, 94%, 18%)",
|
|
73
|
+
800: "hsl(0, 95%, 12%)",
|
|
74
|
+
900: "hsl(0, 93%, 6%)",
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const Gray: Color = {
|
|
78
|
+
50: "hsl(220, 35%, 97%)",
|
|
79
|
+
100: "hsl(220, 30%, 94%)",
|
|
80
|
+
200: "hsl(220, 20%, 88%)",
|
|
81
|
+
300: "hsl(220, 20%, 80%)",
|
|
82
|
+
400: "hsl(220, 20%, 65%)",
|
|
83
|
+
500: "hsl(220, 20%, 42%)",
|
|
84
|
+
600: "hsl(220, 20%, 35%)",
|
|
85
|
+
700: "hsl(220, 20%, 25%)",
|
|
86
|
+
800: "hsl(220, 20%, 22%)",
|
|
87
|
+
900: "hsl(220, 20%, 15%)",
|
|
88
|
+
A100: "hsl(220, 20%, 10%)",
|
|
89
|
+
A200: "hsl(220, 20%, 7%)",
|
|
90
|
+
A400: "hsl(220, 20%, 5%)",
|
|
91
|
+
A700: "hsl(220, 25%, 3%)",
|
|
92
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {ColorSystemOptions, CssVarsThemeOptions, Palette, PaletteMode} from "@mui/material/styles";
|
|
2
|
+
|
|
3
|
+
import {getThemeColorSystem} from "./ColorThemes";
|
|
4
|
+
import Shadows from "./Shadows";
|
|
5
|
+
import Shape from "./Shape";
|
|
6
|
+
import Typography from "./Typography";
|
|
7
|
+
|
|
8
|
+
export type ColorScheme = {palette: Partial<Palette>};
|
|
9
|
+
|
|
10
|
+
export const getThemeDefinition = (name: string): CssVarsThemeOptions => {
|
|
11
|
+
return {
|
|
12
|
+
colorSchemes: getThemeColorSchemes(name),
|
|
13
|
+
shadows: Shadows,
|
|
14
|
+
typography: Typography,
|
|
15
|
+
shape: Shape,
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const getThemeColorSchemes = (name: string): Record<PaletteMode, ColorSystemOptions> => {
|
|
20
|
+
return {
|
|
21
|
+
light: getThemeColorSystem(name, "light"),
|
|
22
|
+
dark: getThemeColorSystem(name, "dark"),
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import {createTheme} from "@mui/material/styles";
|
|
2
|
+
import {Typography} from "@mui/system";
|
|
3
|
+
|
|
4
|
+
const defaultTheme = createTheme();
|
|
5
|
+
|
|
6
|
+
export const typography: Typography = {
|
|
7
|
+
fontFamily: "Lato, sans-serif",
|
|
8
|
+
h1: {
|
|
9
|
+
fontSize: defaultTheme.typography.pxToRem(48),
|
|
10
|
+
fontWeight: 600,
|
|
11
|
+
lineHeight: 1.2,
|
|
12
|
+
letterSpacing: -0.5,
|
|
13
|
+
},
|
|
14
|
+
h2: {
|
|
15
|
+
fontSize: defaultTheme.typography.pxToRem(36),
|
|
16
|
+
fontWeight: 600,
|
|
17
|
+
lineHeight: 1.2,
|
|
18
|
+
},
|
|
19
|
+
h3: {
|
|
20
|
+
fontSize: defaultTheme.typography.pxToRem(30),
|
|
21
|
+
lineHeight: 1.2,
|
|
22
|
+
},
|
|
23
|
+
h4: {
|
|
24
|
+
fontSize: defaultTheme.typography.pxToRem(24),
|
|
25
|
+
fontWeight: 600,
|
|
26
|
+
lineHeight: 1.5,
|
|
27
|
+
},
|
|
28
|
+
h5: {
|
|
29
|
+
fontSize: defaultTheme.typography.pxToRem(20),
|
|
30
|
+
fontWeight: 600,
|
|
31
|
+
},
|
|
32
|
+
h6: {
|
|
33
|
+
fontSize: defaultTheme.typography.pxToRem(18),
|
|
34
|
+
fontWeight: 600,
|
|
35
|
+
},
|
|
36
|
+
subtitle1: {
|
|
37
|
+
fontSize: defaultTheme.typography.pxToRem(18),
|
|
38
|
+
},
|
|
39
|
+
subtitle2: {
|
|
40
|
+
fontSize: defaultTheme.typography.pxToRem(14),
|
|
41
|
+
fontWeight: 500,
|
|
42
|
+
},
|
|
43
|
+
body1: {
|
|
44
|
+
fontSize: defaultTheme.typography.pxToRem(14),
|
|
45
|
+
},
|
|
46
|
+
body2: {
|
|
47
|
+
fontSize: defaultTheme.typography.pxToRem(14),
|
|
48
|
+
fontWeight: 400,
|
|
49
|
+
},
|
|
50
|
+
caption: {
|
|
51
|
+
fontSize: defaultTheme.typography.pxToRem(12),
|
|
52
|
+
fontWeight: 400,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export default typography;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
@import "../../styles/mixins.styl"
|
|
2
|
+
@import "../../styles/fonts.styl"
|
|
3
|
+
|
|
4
|
+
.development
|
|
5
|
+
display: flex
|
|
6
|
+
flex-direction: column
|
|
7
|
+
flex-grow: 1
|
|
8
|
+
justify-content: space-between
|
|
9
|
+
|
|
10
|
+
.form
|
|
11
|
+
padding: 1rem
|
|
12
|
+
|
|
13
|
+
.root-column
|
|
14
|
+
display: block
|
|
15
|
+
flex-grow: 1
|
|
16
|
+
|
|
17
|
+
.footer
|
|
18
|
+
display: flex
|
|
19
|
+
justify-content: center
|
|
20
|
+
align-items: center
|
|
21
|
+
padding: 1rem
|
|
22
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React, {useEffect, useState} from "react";
|
|
2
|
+
import {useTranslation} from "react-i18next";
|
|
3
|
+
import {useDebounceValue} from "usehooks-ts";
|
|
4
|
+
|
|
5
|
+
import {Box, Button, Divider, FormControlLabel, Stack, Switch} from "@mui/material";
|
|
6
|
+
import Grid from "@mui/material/Grid2";
|
|
7
|
+
|
|
8
|
+
import {ApplicationOptions} from "../../common/Store";
|
|
9
|
+
import {useAppContext} from "../../react/contexts/AppContext";
|
|
10
|
+
import Styles from "./DevelopmentView.styl";
|
|
11
|
+
|
|
12
|
+
export const DevelopmentView: React.FC = () => {
|
|
13
|
+
const {actions} = useAppContext();
|
|
14
|
+
const {t} = useTranslation();
|
|
15
|
+
const [options, setOptions] = useState<ApplicationOptions>(global.store.get("application"));
|
|
16
|
+
const [debouncedOptions] = useDebounceValue(options, 500);
|
|
17
|
+
|
|
18
|
+
const handleClose = async () => {
|
|
19
|
+
actions.setLocation("/");
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const handleDebugModeChange = (e: React.ChangeEvent<HTMLInputElement>, checked: boolean) => {
|
|
23
|
+
setOptions((prev) => ({ ...prev, debugMode: checked }));
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
global.store.set("application", debouncedOptions);
|
|
28
|
+
}, [debouncedOptions]);
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<Box className={Styles.development}>
|
|
32
|
+
<Stack
|
|
33
|
+
component="form"
|
|
34
|
+
className={Styles.form}
|
|
35
|
+
direction="row"
|
|
36
|
+
spacing={2}
|
|
37
|
+
divider={<Divider orientation="vertical" />}
|
|
38
|
+
>
|
|
39
|
+
<Stack direction="column" spacing={3} className={Styles.rootColumn}>
|
|
40
|
+
<FormControlLabel
|
|
41
|
+
control={<Switch checked={options.debugMode} onChange={handleDebugModeChange} />}
|
|
42
|
+
label={t("debugMode")}
|
|
43
|
+
/>
|
|
44
|
+
</Stack>
|
|
45
|
+
</Stack>
|
|
46
|
+
<Grid className={Styles.footer}>
|
|
47
|
+
<Stack className={Styles.actions} direction="row" spacing={2}>
|
|
48
|
+
<Button variant="contained" color="primary" onClick={handleClose}>
|
|
49
|
+
{t("close")}
|
|
50
|
+
</Button>
|
|
51
|
+
</Stack>
|
|
52
|
+
</Grid>
|
|
53
|
+
</Box>
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export default DevelopmentView;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
@import "../../styles/mixins.styl"
|
|
2
|
+
@import "../../styles/fonts.styl"
|
|
3
|
+
|
|
4
|
+
.home {
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
flex-grow: 1;
|
|
8
|
+
justify-content: space-between;
|
|
9
|
+
overflow: hidden;
|
|
10
|
+
|
|
11
|
+
.header {
|
|
12
|
+
> div:global(.MuiGrid2-root) {
|
|
13
|
+
display: flex;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.formats {
|
|
18
|
+
justify-content: center;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.header {
|
|
22
|
+
position: relative;
|
|
23
|
+
|
|
24
|
+
.format-info {
|
|
25
|
+
display: flex;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.cancel {
|
|
31
|
+
position: absolute;
|
|
32
|
+
display: flex;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
align-items: center;
|
|
35
|
+
width: 100%;
|
|
36
|
+
top: 0;
|
|
37
|
+
z-index: 999;
|
|
38
|
+
height: 100%;
|
|
39
|
+
backdrop-filter: brightness(0.6);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.content {
|
|
43
|
+
overflow: overlay;
|
|
44
|
+
flex-grow: 1;
|
|
45
|
+
align-content: flex-start;
|
|
46
|
+
justify-content: center;
|
|
47
|
+
|
|
48
|
+
.error {
|
|
49
|
+
width: 100%;
|
|
50
|
+
justify-content: center;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.footer {
|
|
55
|
+
display: flex;
|
|
56
|
+
justify-content: center;
|
|
57
|
+
align-items: center;
|
|
58
|
+
padding: 0.5rem 0.5rem 1rem 0.5rem;
|
|
59
|
+
}
|
|
60
|
+
}
|