diff --git a/src/os/Taskbar/Taskbar.tsx b/src/os/Taskbar/Taskbar.tsx
index aa45a50..e504dde 100644
--- a/src/os/Taskbar/Taskbar.tsx
+++ b/src/os/Taskbar/Taskbar.tsx
@@ -52,13 +52,20 @@ export default function Taskbar({ className, config = "default", ...rest }: Task
const windows = useWindowStore((state) => state.windows);
const activeWindowId = useWindowStore((state) => state.activeWindowId);
const setActiveWindow = useWindowStore((state) => state.setActiveWindow);
+ const minimizedWindows = useWindowStore((state) => state.minimizedWindows);
+ const restoreWindow = useWindowStore((state) => state.restoreWindow);
const showStart = config === "default" || config === "noSystemTray";
const showSystemTray = config === "default" || config === "noStartButton";
const handleTabClick = (id: WindowAppId) => {
- // Taskbar 탭 클릭 시 해당 window로 focus
- setActiveWindow(id);
+ const isMinimized = !!minimizedWindows[id];
+
+ if (isMinimized) {
+ restoreWindow(id);
+ } else {
+ setActiveWindow(id);
+ }
};
return (
@@ -71,12 +78,14 @@ export default function Taskbar({ className, config = "default", ...rest }: Task
const app = WINDOW_APPS[window.id];
if (!app) return null;
+ const isMinimized = !!minimizedWindows[window.id];
+
return (
handleTabClick(window.id)}
/>
diff --git a/src/os/TitleBar/TitleBar.tsx b/src/os/TitleBar/TitleBar.tsx
index 2bacb76..863024f 100644
--- a/src/os/TitleBar/TitleBar.tsx
+++ b/src/os/TitleBar/TitleBar.tsx
@@ -21,10 +21,13 @@ const sizeConfig = {
} as const;
export interface TitleBarProps extends React.ComponentPropsWithoutRef<"div">, TitleBarVariantProps {
- icon?: FunctionComponent>; // FunctionComponent → ComponentType
- title?: string; // text → title (prop 이름 통일)
+ icon?: FunctionComponent>;
+ title?: string;
buttons?: "all" | "closeOnly" | null;
onClose?: () => void;
+ onMinimize?: () => void;
+ onMaximize?: () => void;
+ isMaximized?: boolean;
}
/**
@@ -92,11 +95,33 @@ export default function TitleBar({
title,
buttons = null,
onClose,
+ onMinimize,
+ onMaximize,
+ isMaximized,
className,
...rest
}: TitleBarProps) {
const { iconClassName, buttonSizeClass, iconSizeClass } = sizeConfig[size ?? "small"];
+ const handleButtonMouseDown = (event: React.MouseEvent) => {
+ event.stopPropagation();
+ };
+
+ const handleMinimize = (event: React.MouseEvent) => {
+ event.stopPropagation();
+ onMinimize?.();
+ };
+
+ const handleMaximize = (event: React.MouseEvent) => {
+ event.stopPropagation();
+ onMaximize?.();
+ };
+
+ const handleClose = (event: React.MouseEvent) => {
+ event.stopPropagation();
+ onClose?.();
+ };
+
return (
@@ -133,7 +160,9 @@ export default function TitleBar({
@@ -141,7 +170,8 @@ export default function TitleBar({
)}