bundle size optimizations

This commit is contained in:
jeffvli
2025-11-18 12:47:53 -08:00
parent e45c126a3f
commit e3402a1e44
42 changed files with 142 additions and 30 deletions
+9 -2
View File
@@ -1,5 +1,6 @@
import { PostProcessorModule, StringMap, TOptions } from 'i18next';
import { PostProcessorModule, TOptions } from 'i18next';
import i18n from 'i18next';
import backend from 'i18next-http-backend';
import { initReactI18next } from 'react-i18next';
import ar from './locales/ar.json';
@@ -207,7 +208,12 @@ const ignoreSentenceCaseLanguages = ['de'];
const sentenceCasePostProcessor: PostProcessorModule = {
name: 'sentenceCase',
process: (value: string, _key: string, _options: TOptions<StringMap>, translator: any) => {
process: (
value: string,
_key: string,
_options: TOptions<Record<string, string>>,
translator: any,
) => {
const sentences = value.split('. ');
return sentences
@@ -227,6 +233,7 @@ i18n.use(lowerCasePostProcessor)
.use(upperCasePostProcessor)
.use(titleCasePostProcessor)
.use(sentenceCasePostProcessor)
.use(backend)
.use(initReactI18next) // passes i18n down to react-i18next
.init({
fallbackLng: 'en',
+57 -6
View File
@@ -1,15 +1,62 @@
import { MantineProvider } from '@mantine/core';
import '@mantine/core/styles.css';
import '@mantine/dates/styles.css';
import { Notifications } from '@mantine/notifications';
// Base mantine styles (required)
import '@mantine/core/styles/baseline.css';
import '@mantine/core/styles/default-css-variables.css';
import '@mantine/core/styles/global.css';
// Shared mantine styles
import '@mantine/core/styles/ScrollArea.css';
import '@mantine/core/styles/UnstyledButton.css';
import '@mantine/core/styles/VisuallyHidden.css';
import '@mantine/core/styles/Paper.css';
import '@mantine/core/styles/Popover.css';
import '@mantine/core/styles/CloseButton.css';
import '@mantine/core/styles/Group.css';
import '@mantine/core/styles/Loader.css';
import '@mantine/core/styles/Overlay.css';
import '@mantine/core/styles/ModalBase.css';
import '@mantine/core/styles/Input.css';
import '@mantine/core/styles/InlineInput.css';
import '@mantine/core/styles/Flex.css';
import '@mantine/core/styles/FloatingIndicator.css';
import '@mantine/core/styles/ActionIcon.css';
// Component-specific mantine styles (needs to be updated if new components are added)
import '@mantine/core/styles/Accordion.css';
import '@mantine/core/styles/ActionIcon.css';
import '@mantine/core/styles/Badge.css';
import '@mantine/core/styles/Button.css';
import '@mantine/core/styles/Center.css';
import '@mantine/core/styles/Checkbox.css';
import '@mantine/core/styles/Code.css';
import '@mantine/core/styles/ColorInput.css';
import '@mantine/core/styles/Dialog.css';
import '@mantine/core/styles/Divider.css';
import '@mantine/core/styles/Flex.css';
import '@mantine/core/styles/Grid.css';
import '@mantine/core/styles/Group.css';
import '@mantine/core/styles/Kbd.css';
import '@mantine/core/styles/LoadingOverlay.css';
import '@mantine/core/styles/Menu.css';
import '@mantine/core/styles/Modal.css';
import '@mantine/core/styles/NumberInput.css';
import '@mantine/core/styles/Pagination.css';
import '@mantine/core/styles/PasswordInput.css';
import '@mantine/core/styles/Pill.css';
import '@mantine/core/styles/Rating.css';
import '@mantine/core/styles/SegmentedControl.css';
import '@mantine/core/styles/Slider.css';
import '@mantine/core/styles/Stack.css';
import '@mantine/core/styles/Switch.css';
import '@mantine/core/styles/Table.css';
import '@mantine/core/styles/Tabs.css';
import '@mantine/core/styles/Text.css';
import '@mantine/core/styles/Title.css';
import '@mantine/core/styles/Tooltip.css';
import '@mantine/dates/styles.css';
import '@mantine/notifications/styles.css';
import isElectron from 'is-electron';
import { useEffect, useMemo, useRef, useState } from 'react';
import '/@/shared/styles/global.css';
import 'overlayscrollbars/overlayscrollbars.css';
import i18n from '/@/i18n/i18n';
import { useDiscordRpc } from '/@/renderer/features/discord-rpc/use-discord-rpc';
import { PlayerProvider } from '/@/renderer/features/player/context/player-context';
@@ -21,6 +68,10 @@ import { useCssSettings, useHotkeySettings, useSettingsStore } from '/@/renderer
import { useAppTheme } from '/@/renderer/themes/use-app-theme';
import { sanitizeCss } from '/@/renderer/utils/sanitize';
import { WebAudio } from '/@/shared/types/types';
import '/@/shared/styles/global.css';
import 'overlayscrollbars/overlayscrollbars.css';
import '/styles/overlayscrollbars.css';
const ipc = isElectron() ? window.api.ipc : null;
@@ -1,4 +1,4 @@
import { throttle } from 'lodash';
import throttle from 'lodash/throttle';
import { AnimatePresence, motion, Variants } from 'motion/react';
import { useOverlayScrollbars } from 'overlayscrollbars-react';
import {
@@ -1,5 +1,5 @@
import isElectron from 'is-electron';
import { debounce } from 'lodash';
import debounce from 'lodash/debounce';
import { useCallback, useEffect, useRef, useState } from 'react';
import { api } from '/@/renderer/api';
+15 -15
View File
@@ -122,56 +122,56 @@ button {
@font-face {
font-family: Archivo;
font-weight: 100 1000;
src: url('../../../assets/fonts/Archivo-VariableFont_wdth,wght.ttf');
src: url('../../../assets/fonts/Archivo-VariableFont_wdth,wght.woff2');
}
@font-face {
font-family: Raleway;
font-weight: 100 1000;
src: url('../../../assets/fonts/Raleway-VariableFont_wght.ttf');
src: url('../../../assets/fonts/Raleway-VariableFont_wght.woff2');
}
@font-face {
font-family: Fredoka;
font-weight: 100 1000;
src: url('../../../assets/fonts/Fredoka-VariableFont_wdth,wght.ttf');
src: url('../../../assets/fonts/Fredoka-VariableFont_wdth,wght.woff2');
}
@font-face {
font-family: 'League Spartan';
font-weight: 100 1000;
src: url('../../../assets/fonts/LeagueSpartan-VariableFont_wght.ttf');
src: url('../../../assets/fonts/LeagueSpartan-VariableFont_wght.woff2');
}
@font-face {
font-family: Lexend;
font-weight: 100 1000;
src: url('../../../assets/fonts/Lexend-VariableFont_wght.ttf');
src: url('../../../assets/fonts/Lexend-VariableFont_wght.woff2');
}
@font-face {
font-family: Inter;
font-weight: 100 1000;
src: url('../../../assets/fonts/Inter-VariableFont_slnt,wght.ttf');
src: url('../../../assets/fonts/Inter-VariableFont_slnt,wght.woff2');
}
@font-face {
font-family: Sora;
font-weight: 100 1000;
src: url('../../../assets/fonts/Sora-VariableFont_wght.ttf');
src: url('../../../assets/fonts/Sora-VariableFont_wght.woff2');
}
@font-face {
font-family: 'Work Sans';
font-weight: 100 1000;
src: url('../../../assets/fonts/WorkSans-VariableFont_wght.ttf');
src: url('../../../assets/fonts/WorkSans-VariableFont_wght.woff2');
}
@font-face {
font-family: Poppins;
font-style: normal;
font-weight: 400;
src: url('../../../assets/fonts/Poppins-Regular.ttf');
src: url('../../../assets/fonts/Poppins-Regular.woff2');
font-display: swap;
}
@@ -179,7 +179,7 @@ button {
font-family: Poppins;
font-style: normal;
font-weight: 600;
src: url('../../../assets/fonts/Poppins-SemiBold.ttf');
src: url('../../../assets/fonts/Poppins-SemiBold.woff2');
font-display: swap;
}
@@ -187,7 +187,7 @@ button {
font-family: Poppins;
font-style: normal;
font-weight: 700;
src: url('../../../assets/fonts/Poppins-Bold.ttf');
src: url('../../../assets/fonts/Poppins-Bold.woff2');
font-display: swap;
}
@@ -195,7 +195,7 @@ button {
font-family: Poppins;
font-style: normal;
font-weight: 800;
src: url('../../../assets/fonts/Poppins-ExtraBold.ttf');
src: url('../../../assets/fonts/Poppins-ExtraBold.woff2');
font-display: swap;
}
@@ -203,20 +203,20 @@ button {
font-family: Poppins;
font-style: normal;
font-weight: 900;
src: url('../../../assets/fonts/Poppins-Black.ttf');
src: url('../../../assets/fonts/Poppins-Black.woff2');
font-display: swap;
}
@font-face {
font-family: Raleway;
font-weight: 100 1000;
src: url('../../../assets/fonts/Raleway-VariableFont_wght.ttf');
src: url('../../../assets/fonts/Raleway-VariableFont_wght.woff2');
}
@font-face {
font-family: 'Noto Sans JP';
font-weight: 100 900;
src: url('../../../assets/fonts/NotoSansJP-VariableFont_wght.ttf');
src: url('../../../assets/fonts/NotoSansJP-VariableFont_wght.woff2');
unicode-range: U+3000-9FFF, U+FF00-FFEF; /* Japanese characters */
}
-1
View File
@@ -1,4 +1,3 @@
import { Omit } from 'lodash';
import orderBy from 'lodash/orderBy';
import reverse from 'lodash/reverse';
import shuffle from 'lodash/shuffle';