@@ -4,7 +4,7 @@ import type { NavigationMenuItem } from "@nuxt/ui";
44const localePath = useLocalePath ();
55
66const { t } = useI18n ();
7- const { isWindows } = usePlatform ();
7+ const { isLinux, isMacOS, isWindows } = usePlatform ();
88const { theme } = useSettingManager ();
99const { initialTheme, listenOSThemeChange } = useThemeAdapter ();
1010
@@ -14,6 +14,8 @@ const commonButtonProps = {
1414 color: " neutral" as const
1515};
1616
17+ const showCustomWindowControls = computed (() => ! isMacOS .value );
18+
1719const windowControlButtons = computed (() => {
1820 return [
1921 {
@@ -44,19 +46,26 @@ const windowControlButtons = computed(() => {
4446});
4547
4648const windowControlRailClass = computed (() => {
47- return isWindows .value ? " w-36" : " w-0" ;
49+ if (isWindows .value ) return " w-36" ;
50+ if (isLinux .value ) return " w-32" ;
51+ return " w-0" ;
4852});
4953
5054const getWindowControlButtonClass = (buttonKey : string ) => {
51- const baseClass = " rounded-none w-12 h-13 p-1 flex items-center justify-center" ;
55+ const isLinuxStyle = isLinux .value ;
56+ const baseClass = isLinuxStyle
57+ ? " h-9 w-9 rounded-full p-1 flex items-center justify-center transition-colors"
58+ : " rounded-none w-12 h-13 p-1 flex items-center justify-center" ;
5259
5360 switch (buttonKey ) {
5461 case " minimize" :
55- return ` ${baseClass } ` ;
62+ return isLinuxStyle ? ` ${ baseClass } hover:bg-black/6 dark:hover:bg-white/10 ` : ` ${baseClass } ` ;
5663 case " maximize" :
57- return ` ${baseClass } ` ;
64+ return isLinuxStyle ? ` ${ baseClass } hover:bg-black/6 dark:hover:bg-white/10 ` : ` ${baseClass } ` ;
5865 case " close" :
59- return ` ${baseClass } hover:bg-red-500 hover:text-white active:bg-red-600 ` ;
66+ return isLinuxStyle
67+ ? ` ${baseClass } hover:bg-red-500/12 hover:text-red-600 dark:hover:bg-red-500/18 dark:hover:text-red-300 `
68+ : ` ${baseClass } hover:bg-red-500 hover:text-white active:bg-red-600 ` ;
6069 default :
6170 return baseClass ;
6271 }
@@ -95,14 +104,15 @@ onMounted(() => {
95104
96105<template >
97106 <UPage
98- class="h-screen flex flex-col"
107+ class="relative h-screen flex flex-col"
99108 :ui =" {
100109 center: ' flex flex-col h-full min-h-0'
101110 } "
102111 :style =" {
103112 backgroundColor: theme === ' dark' ? ' #2C2C2C' : ' #F5F5F5'
104113 } "
105114 >
115+ <WindowResizeFrame :enabled =" isLinux " />
106116 <UPageHeader
107117 :ui =" {
108118 root: ' p-0'
@@ -131,7 +141,7 @@ onMounted(() => {
131141 :class =" windowControlRailClass"
132142 data-tauri-drag-region =" false"
133143 >
134- <template v-if =" isWindows " >
144+ <template v-if =" showCustomWindowControls " >
135145 <template v-for =" button of windowControlButtons " :key =" button .key " >
136146 <UButton
137147 :icon =" button .iconName "
0 commit comments