diff --git a/src/frontend/apps/web/src/features/chat/ui/chat-container.tsx b/src/frontend/apps/web/src/features/chat/ui/chat-container.tsx index d2592860..d87c319a 100644 --- a/src/frontend/apps/web/src/features/chat/ui/chat-container.tsx +++ b/src/frontend/apps/web/src/features/chat/ui/chat-container.tsx @@ -1,5 +1,5 @@ import { SidebarInset, SidebarProvider } from '@workspace/ui/components'; -import { SidebarContainer } from '@/src/shared/components/sidebar'; +import { SidebarContainer } from '@/src/features/workspace'; import ChatHeader from './chat-header'; import ChatSection from './chat-section'; @@ -7,7 +7,7 @@ import ChatSection from './chat-section'; const ChatContainer = ({ stockSlug }: { stockSlug: string }) => { return ( - + diff --git a/src/frontend/apps/web/src/features/workspace/.keep b/src/frontend/apps/web/src/features/workspace/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/frontend/apps/web/src/features/workspace/index.tsx b/src/frontend/apps/web/src/features/workspace/index.tsx new file mode 100644 index 00000000..5ecdd1f3 --- /dev/null +++ b/src/frontend/apps/web/src/features/workspace/index.tsx @@ -0,0 +1 @@ +export * from './ui'; diff --git a/src/frontend/apps/web/src/features/workspace/ui/index.ts b/src/frontend/apps/web/src/features/workspace/ui/index.ts new file mode 100644 index 00000000..ec5d1a52 --- /dev/null +++ b/src/frontend/apps/web/src/features/workspace/ui/index.ts @@ -0,0 +1 @@ +export { default as SidebarContainer } from './sidebar-container'; diff --git a/src/frontend/apps/web/src/shared/components/sidebar/ui/sidebar-container.tsx b/src/frontend/apps/web/src/features/workspace/ui/sidebar-container.tsx similarity index 68% rename from src/frontend/apps/web/src/shared/components/sidebar/ui/sidebar-container.tsx rename to src/frontend/apps/web/src/features/workspace/ui/sidebar-container.tsx index 71c813ae..01af0779 100644 --- a/src/frontend/apps/web/src/shared/components/sidebar/ui/sidebar-container.tsx +++ b/src/frontend/apps/web/src/features/workspace/ui/sidebar-container.tsx @@ -14,7 +14,7 @@ import { } from '@workspace/ui/components'; import { ChevronRight } from 'lucide-react'; -const SidebarContainer = () => { +const SidebarContainer = ({ stockSlug }: { stockSlug: string }) => { const data = { navMain: [ { @@ -48,8 +48,17 @@ const SidebarContainer = () => { }; return ( - #WSName - + +
+
+ Workspace +
+
+ {stockSlug} +
+
+
+ {data.navMain.map((item) => ( { {item.title} - + @@ -75,6 +84,7 @@ const SidebarContainer = () => { {item.title} diff --git a/src/frontend/apps/web/src/shared/components/sidebar/index.ts b/src/frontend/apps/web/src/shared/components/sidebar/index.ts deleted file mode 100644 index 932a53ec..00000000 --- a/src/frontend/apps/web/src/shared/components/sidebar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as SidebarContainer } from './ui/sidebar-container'; diff --git a/src/frontend/packages/ui/src/components/Sidebar/sidebar.tsx b/src/frontend/packages/ui/src/components/Sidebar/sidebar.tsx index e19b11d6..c18466be 100644 --- a/src/frontend/packages/ui/src/components/Sidebar/sidebar.tsx +++ b/src/frontend/packages/ui/src/components/Sidebar/sidebar.tsx @@ -522,17 +522,18 @@ const SidebarMenuItem = React.forwardRef< SidebarMenuItem.displayName = 'SidebarMenuItem'; const sidebarMenuButtonVariants = cva( - 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', + 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm font-medium outline-none ring-sidebar-ring transition-all duration-200 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-active data-[active=true]:text-sidebar-active-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', { variants: { variant: { - default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground', + default: + 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:translate-x-1', outline: - 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]', + 'bg-background shadow-sm hover:shadow-md transition-shadow duration-200 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground', }, size: { - default: 'h-8 text-sm', - sm: 'h-7 text-xs', + default: 'h-9 text-sm', + sm: 'h-8 text-xs', lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0', }, }, diff --git a/src/frontend/packages/ui/src/styles/globals.css b/src/frontend/packages/ui/src/styles/globals.css index 486482a4..ffcd334b 100644 --- a/src/frontend/packages/ui/src/styles/globals.css +++ b/src/frontend/packages/ui/src/styles/globals.css @@ -29,14 +29,23 @@ --chart-3: 197 37% 24%; --chart-4: 43 74% 66%; --chart-5: 27 87% 67%; - --sidebar-background: 0 0% 98%; - --sidebar-foreground: 240 5.3% 26.1%; - --sidebar-primary: 240 5.9% 10%; - --sidebar-primary-foreground: 0 0% 98%; - --sidebar-accent: 240 4.8% 95.9%; - --sidebar-accent-foreground: 240 5.9% 10%; - --sidebar-border: 220 13% 91%; - --sidebar-ring: 217.2 91.2% 59.8%; + /* 메인 사이드바 스타일링 */ + --sidebar-background: 24 85% 60%; + --sidebar-foreground: 0 0% 100%; + --sidebar-primary: 0 0% 100%; + --sidebar-primary-foreground: 24 85% 60%; + + /* 메뉴 아이템 스타일링 */ + --sidebar-accent: 24 85% 55%; + --sidebar-accent-foreground: 0 0% 100%; + + /* 구분선과 테두리 */ + --sidebar-border: 0 0% 100% / 0.1; + --sidebar-ring: 0 0% 100%; + + /* 활성 상태 스타일링 */ + --sidebar-active: 0 0% 100% / 0.2; + --sidebar-active-foreground: 0 0% 100%; } .dark { @@ -64,14 +73,23 @@ --chart-3: 30 80% 55%; --chart-4: 280 65% 60%; --chart-5: 340 75% 55%; - --sidebar-background: 240 5.9% 10%; - --sidebar-foreground: 240 4.8% 95.9%; - --sidebar-primary: 224.3 76.3% 48%; - --sidebar-primary-foreground: 0 0% 100%; - --sidebar-accent: 240 3.7% 15.9%; - --sidebar-accent-foreground: 240 4.8% 95.9%; - --sidebar-border: 240 3.7% 15.9%; - --sidebar-ring: 217.2 91.2% 59.8%; + /* 다크모드 스타일링 */ + --sidebar-background: 24 80% 50%; + --sidebar-foreground: 0 0% 100%; + --sidebar-primary: 0 0% 100%; + --sidebar-primary-foreground: 24 80% 50%; + + /* 다크모드 메뉴 아이템 */ + --sidebar-accent: 24 80% 45%; + --sidebar-accent-foreground: 0 0% 100%; + + /* 다크모드 구분선과 테두리 */ + --sidebar-border: 0 0% 100% / 0.1; + --sidebar-ring: 0 0% 100%; + + /* 다크모드 활성 상태 */ + --sidebar-active: 0 0% 100% / 0.2; + --sidebar-active-foreground: 0 0% 100%; } } diff --git a/src/frontend/packages/ui/tailwind.config.ts b/src/frontend/packages/ui/tailwind.config.ts index 480152d7..12c1e276 100644 --- a/src/frontend/packages/ui/tailwind.config.ts +++ b/src/frontend/packages/ui/tailwind.config.ts @@ -4,7 +4,11 @@ import { fontFamily } from 'tailwindcss/defaultTheme'; const config = { darkMode: ['class'], - content: ['app/**/*.{ts,tsx}', 'src/**/*.{ts,tsx}', '../../packages/ui/src/components/**/*.{ts,tsx}'], + content: [ + 'app/**/*.{ts,tsx}', + 'src/**/*.{ts,tsx}', + '../../packages/ui/src/components/**/*.{ts,tsx}', + ], theme: { extend: { fontFamily: {