Migrate to Mantine v8 and Design Changes (#961)

* mantine v8 migration

* various design changes and improvements
This commit is contained in:
Jeff 2025-06-24 00:04:36 -07:00 committed by GitHub
parent bea55d48a8
commit c1330d92b2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
473 changed files with 12469 additions and 11607 deletions

View file

@ -1,6 +1,6 @@
import { create } from 'zustand';
import { devtools } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { createWithEqualityFn } from 'zustand/traditional';
export interface AlbumArtistListDataSlice extends AlbumArtistListDataState {
actions: {
@ -12,7 +12,7 @@ export interface AlbumArtistListDataState {
itemData: any[];
}
export const useAlbumArtistListDataStore = create<AlbumArtistListDataSlice>()(
export const useAlbumArtistListDataStore = createWithEqualityFn<AlbumArtistListDataSlice>()(
devtools(
immer((set) => ({
actions: {

View file

@ -1,6 +1,6 @@
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { createWithEqualityFn } from 'zustand/traditional';
import { DataTableProps } from '/@/renderer/store/settings.store';
import { mergeOverridingColumns } from '/@/renderer/store/utils';
@ -37,7 +37,7 @@ type TableProps = DataTableProps & {
scrollOffset: number;
};
export const useAlbumArtistStore = create<AlbumArtistSlice>()(
export const useAlbumArtistStore = createWithEqualityFn<AlbumArtistSlice>()(
persist(
devtools(
immer((set, get) => ({

View file

@ -1,6 +1,6 @@
import { create } from 'zustand';
import { devtools } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { createWithEqualityFn } from 'zustand/traditional';
export interface AlbumListDataSlice extends AlbumListDataState {
actions: {
@ -13,7 +13,7 @@ export interface AlbumListDataState {
itemData: any[];
}
export const useAlbumListDataStore = create<AlbumListDataSlice>()(
export const useAlbumListDataStore = createWithEqualityFn<AlbumListDataSlice>()(
devtools(
immer((set) => ({
actions: {

View file

@ -1,7 +1,7 @@
import merge from 'lodash/merge';
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { createWithEqualityFn } from 'zustand/traditional';
import { Platform } from '/@/shared/types/types';
@ -42,7 +42,7 @@ type TitlebarProps = {
outOfView: boolean;
};
export const useAppStore = create<AppSlice>()(
export const useAppStore = createWithEqualityFn<AppSlice>()(
persist(
devtools(
immer((set, get) => ({

View file

@ -1,8 +1,8 @@
import merge from 'lodash/merge';
import { nanoid } from 'nanoid/non-secure';
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { createWithEqualityFn } from 'zustand/traditional';
import { useAlbumArtistListDataStore } from '/@/renderer/store/album-artist-list-data.store';
import { useAlbumListDataStore } from '/@/renderer/store/album-list-data.store';
@ -25,7 +25,7 @@ export interface AuthState {
serverList: Record<string, ServerListItem>;
}
export const useAuthStore = create<AuthSlice>()(
export const useAuthStore = createWithEqualityFn<AuthSlice>()(
persist(
devtools(
immer((set, get) => ({

View file

@ -1,6 +1,6 @@
import { create } from 'zustand';
import { devtools, subscribeWithSelector } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { createWithEqualityFn } from 'zustand/traditional';
export interface EventSlice extends EventState {
actions: {
@ -32,7 +32,7 @@ export type RatingEvent = {
export type UserEvent = FavoriteEvent | PlayEvent | RatingEvent;
export const useEventStore = create<EventSlice>()(
export const useEventStore = createWithEqualityFn<EventSlice>()(
subscribeWithSelector(
devtools(
immer((set) => ({

View file

@ -1,7 +1,7 @@
import merge from 'lodash/merge';
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { createWithEqualityFn } from 'zustand/traditional';
export interface FullScreenPlayerSlice extends FullScreenPlayerState {
actions: {
@ -19,7 +19,7 @@ interface FullScreenPlayerState {
useImageAspectRatio: boolean;
}
export const useFullScreenPlayerStore = create<FullScreenPlayerSlice>()(
export const useFullScreenPlayerStore = createWithEqualityFn<FullScreenPlayerSlice>()(
persist(
devtools(
immer((set, get) => ({

View file

@ -1,7 +1,7 @@
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { shallow } from 'zustand/shallow';
import { createWithEqualityFn } from 'zustand/traditional';
import { DataTableProps, PersistedTableColumn } from '/@/renderer/store/settings.store';
import { mergeOverridingColumns } from '/@/renderer/store/utils';
@ -107,7 +107,7 @@ type FilterType =
| PlaylistListFilter
| SongListFilter;
export const useListStore = create<ListSlice>()(
export const useListStore = createWithEqualityFn<ListSlice>()(
persist(
devtools(
immer((set, get) => ({
@ -346,7 +346,7 @@ export const useListStore = create<ListSlice>()(
detail: {},
item: {
album: {
display: ListDisplayType.POSTER,
display: ListDisplayType.GRID,
filter: {
sortBy: AlbumListSort.RECENTLY_ADDED,
sortOrder: SortOrder.DESC,
@ -387,7 +387,7 @@ export const useListStore = create<ListSlice>()(
},
},
albumArtist: {
display: ListDisplayType.POSTER,
display: ListDisplayType.GRID,
filter: {
sortBy: AlbumArtistListSort.NAME,
sortOrder: SortOrder.DESC,
@ -416,7 +416,7 @@ export const useListStore = create<ListSlice>()(
},
},
albumArtistAlbum: {
display: ListDisplayType.POSTER,
display: ListDisplayType.GRID,
filter: {
sortBy: AlbumListSort.RECENTLY_ADDED,
sortOrder: SortOrder.DESC,
@ -514,7 +514,7 @@ export const useListStore = create<ListSlice>()(
},
},
artist: {
display: ListDisplayType.POSTER,
display: ListDisplayType.GRID,
filter: {
role: '',
sortBy: AlbumArtistListSort.NAME,
@ -573,7 +573,7 @@ export const useListStore = create<ListSlice>()(
},
},
playlist: {
display: ListDisplayType.POSTER,
display: ListDisplayType.GRID,
filter: {
sortBy: PlaylistListSort.NAME,
sortOrder: SortOrder.DESC,

View file

@ -2,10 +2,10 @@ import map from 'lodash/map';
import merge from 'lodash/merge';
import shuffle from 'lodash/shuffle';
import { nanoid } from 'nanoid/non-secure';
import { create } from 'zustand';
import { devtools, persist, subscribeWithSelector } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { shallow } from 'zustand/shallow';
import { createWithEqualityFn } from 'zustand/traditional';
import { PlayerData, QueueData, QueueSong } from '/@/shared/types/domain-types';
import { Play, PlayerRepeat, PlayerShuffle, PlayerStatus } from '/@/shared/types/types';
@ -79,7 +79,7 @@ export interface PlayerState {
volume: number;
}
export const usePlayerStore = create<PlayerSlice>()(
export const usePlayerStore = createWithEqualityFn<PlayerSlice>()(
subscribeWithSelector(
persist(
devtools(

View file

@ -1,6 +1,6 @@
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { createWithEqualityFn } from 'zustand/traditional';
import { PlaylistListFilter, SongListFilter } from '/@/renderer/store/list.store';
import { DataTableProps } from '/@/renderer/store/settings.store';
@ -58,7 +58,7 @@ type TableProps = DataTableProps & {
scrollOffset: number;
};
export const usePlaylistStore = create<PlaylistSlice>()(
export const usePlaylistStore = createWithEqualityFn<PlaylistSlice>()(
persist(
devtools(
immer((set, get) => ({

View file

@ -3,17 +3,17 @@ import type { ContextMenuItemType } from '/@/renderer/features/context-menu';
import { ColDef } from '@ag-grid-community/core';
import isElectron from 'is-electron';
import { generatePath } from 'react-router';
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';
import { shallow } from 'zustand/shallow';
import { createWithEqualityFn } from 'zustand/traditional';
import i18n from '/@/i18n/i18n';
import { AppRoute } from '/@/renderer/router/routes';
import { usePlayerStore } from '/@/renderer/store/player.store';
import { mergeOverridingColumns } from '/@/renderer/store/utils';
import { randomString } from '/@/renderer/utils';
import { AppTheme } from '/@/shared/types/domain-types';
import { AppTheme } from '/@/shared/themes/app-theme-types';
import { LibraryItem, LyricSource } from '/@/shared/types/domain-types';
import {
CrossfadeStyle,
@ -26,8 +26,6 @@ import {
TableType,
} from '/@/shared/types/types';
const utils = isElectron() ? window.api.utils : null;
export type SidebarItemType = {
disabled: boolean;
id: string;
@ -338,7 +336,8 @@ type MpvSettings = {
// Determines the default/initial windowBarStyle value based on the current platform.
const getPlatformDefaultWindowBarStyle = (): Platform => {
return utils ? (utils.isMacOS() ? Platform.MACOS : Platform.WINDOWS) : Platform.WEB;
// Prefer native window bar
return Platform.LINUX;
};
const platformDefaultWindowBarStyle: Platform = getPlatformDefaultWindowBarStyle();
@ -355,7 +354,7 @@ const initialState: SettingsState = {
showServerImage: false,
},
font: {
builtIn: 'Inter',
builtIn: 'Poppins',
custom: null,
system: null,
type: FontType.BUILT_IN,
@ -366,7 +365,7 @@ const initialState: SettingsState = {
albumBackground: false,
albumBackgroundBlur: 6,
artistItems,
buttonSize: 20,
buttonSize: 15,
disabledContextMenu: {},
doubleClickQueueAll: true,
externalLinks: true,
@ -382,7 +381,7 @@ const initialState: SettingsState = {
passwordStore: undefined,
playButtonBehavior: Play.NOW,
playerbarOpenDrawer: false,
resume: false,
resume: true,
showQueueDrawerButton: false,
sidebarCollapsedNavigation: true,
sidebarCollapseShared: false,
@ -398,7 +397,7 @@ const initialState: SettingsState = {
themeDark: AppTheme.DEFAULT_DARK,
themeLight: AppTheme.DEFAULT_LIGHT,
volumeWheelStep: 5,
volumeWidth: 60,
volumeWidth: 70,
zoomFactor: 100,
},
hotkeys: {
@ -437,7 +436,7 @@ const initialState: SettingsState = {
zoomIn: { allowGlobal: true, hotkey: '', isGlobal: false },
zoomOut: { allowGlobal: true, hotkey: '', isGlobal: false },
},
globalMediaHotkeys: true,
globalMediaHotkeys: false,
},
lyrics: {
alignment: 'center',
@ -445,13 +444,13 @@ const initialState: SettingsState = {
enableNeteaseTranslation: false,
fetch: false,
follow: true,
fontSize: 46,
fontSizeUnsync: 20,
gap: 5,
gapUnsync: 0,
fontSize: 24,
fontSizeUnsync: 24,
gap: 24,
gapUnsync: 24,
showMatch: true,
showProvider: true,
sources: [],
sources: [LyricSource.NETEASE, LyricSource.LRCLIB],
translationApiKey: '',
translationApiProvider: '',
translationTargetLanguage: 'en',
@ -507,10 +506,6 @@ const initialState: SettingsState = {
column: TableColumn.DURATION,
width: 100,
},
{
column: TableColumn.BIT_RATE,
width: 300,
},
{
column: TableColumn.PLAY_COUNT,
width: 100,
@ -659,7 +654,7 @@ const initialState: SettingsState = {
},
};
export const useSettingsStore = create<SettingsSlice>()(
export const useSettingsStore = createWithEqualityFn<SettingsSlice>()(
persist(
devtools(
immer((set, get) => ({