{
selectedFeaturePreview: '',
showAiSettingsModal: false,
showGenerateSqlModal: false,
- navigationPanelOpen: false,
- navigationPanelJustClosed: false,
ongoingQueriesPanelOpen: false,
mobileMenuOpen: false,
}
@@ -149,8 +147,6 @@ const getInitialState = () => {
selectedFeaturePreview: '',
showAiSettingsModal: false,
showGenerateSqlModal: false,
- navigationPanelOpen: false,
- navigationPanelJustClosed: false,
ongoingQueriesPanelOpen: false,
mobileMenuOpen: false,
}
@@ -215,27 +211,6 @@ export const appState = proxy({
appState.showGenerateSqlModal = value
},
- navigationPanelOpen: false,
- navigationPanelJustClosed: false,
- setNavigationPanelOpen: (value: boolean, trackJustClosed: boolean = false) => {
- if (value === false) {
- if (trackJustClosed) {
- appState.navigationPanelOpen = false
- appState.navigationPanelJustClosed = true
- } else {
- appState.navigationPanelOpen = false
- appState.navigationPanelJustClosed = false
- }
- } else {
- if (appState.navigationPanelJustClosed === false) {
- appState.navigationPanelOpen = true
- }
- }
- },
- setNavigationPanelJustClosed: (value: boolean) => {
- appState.navigationPanelJustClosed = value
- },
-
resetAiAssistantPanel: () => {
appState.aiAssistantPanel = {
...INITIAL_AI_ASSISTANT,
diff --git a/apps/studio/styles/main.scss b/apps/studio/styles/main.scss
index 1a97ce799d5..42081c2bdc9 100644
--- a/apps/studio/styles/main.scss
+++ b/apps/studio/styles/main.scss
@@ -15,6 +15,14 @@
--chart-5: 27 87% 67%;
--chart-warning: hsl(var(--warning-default));
--chart-destructive: hsl(var(--destructive-default));
+ --sidebar-background: var(--background-dash-sidebar);
+ --sidebar-foreground: var(--foreground-default);
+ --sidebar-primary: var(--foreground-default);
+ --sidebar-primary-foreground: var(--warning-default);
+ --sidebar-accent: var(--background-selection);
+ --sidebar-accent-foreground: var(--foreground-default);
+ --sidebar-border: var(--border-default);
+ --sidebar-ring: 217.2 91.2% 59.8%;
}
.dark {
@@ -25,6 +33,14 @@
--chart-5: 340 75% 55%;
--chart-warning: hsl(var(--warning-default));
--chart-destructive: hsl(var(--destructive-default));
+ --sidebar-background: var(--background-dash-sidebar);
+ --sidebar-foreground: var(--foreground-default);
+ --sidebar-primary: var(--foreground-default);
+ --sidebar-primary-foreground: var(--warning-default);
+ --sidebar-accent: var(--background-selection);
+ --sidebar-accent-foreground: var(--foreground-default);
+ --sidebar-border: var(--border-default);
+ --sidebar-ring: 217.2 91.2% 59.8%;
}
@layer utilities {
diff --git a/packages/config/tailwind.config.js b/packages/config/tailwind.config.js
index 88c13876744..70cda2e9a53 100644
--- a/packages/config/tailwind.config.js
+++ b/packages/config/tailwind.config.js
@@ -112,6 +112,16 @@ const uiConfig = ui({
extend: {
colors: {
...kebabToNested(colorExtend),
+ sidebar: {
+ DEFAULT: 'hsl(var(--sidebar-background))',
+ foreground: 'hsl(var(--sidebar-foreground))',
+ primary: 'hsl(var(--sidebar-primary))',
+ 'primary-foreground': 'hsl(var(--sidebar-primary-foreground))',
+ accent: 'hsl(var(--sidebar-accent))',
+ 'accent-foreground': 'hsl(var(--sidebar-accent-foreground))',
+ border: 'hsl(var(--sidebar-border))',
+ ring: 'hsl(var(--sidebar-ring))',
+ },
},
typography: ({ theme }) => ({
diff --git a/packages/ui/src/components/shadcn/ui/sidebar.tsx b/packages/ui/src/components/shadcn/ui/sidebar.tsx
index 77aea8b0612..e2e57e05f41 100644
--- a/packages/ui/src/components/shadcn/ui/sidebar.tsx
+++ b/packages/ui/src/components/shadcn/ui/sidebar.tsx
@@ -149,6 +149,7 @@ SidebarProvider.displayName = 'SidebarProvider'
const Sidebar = React.forwardRef<
HTMLDivElement,
React.ComponentProps<'div'> & {
+ overflowing?: boolean
side?: 'left' | 'right'
variant?: 'sidebar' | 'floating' | 'inset'
collapsible?: 'offcanvas' | 'icon' | 'none'
@@ -156,6 +157,7 @@ const Sidebar = React.forwardRef<
>(
(
{
+ overflowing = false,
side = 'left',
variant = 'sidebar',
collapsible = 'offcanvas',
@@ -205,7 +207,10 @@ const Sidebar = React.forwardRef<
return (
svg]:size-5 [&>svg]:shrink-0',
+ 'duration-100 flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opa] ease-linear focus-visible:ring-2 [&>svg]:size-5 [&>svg]:shrink-0',
'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',
className
)}
@@ -497,7 +501,9 @@ const SidebarMenuItem = React.forwardRefspan:last-child]:truncate [&>svg]:size-5 [&>svg]:shrink-0 text-foreground-lighter data-[active=true]:text-foreground',
+ cn(
+ 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md py-2 px-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 [&>span:last-child]:truncate [&>svg]:size-5 [&>svg]:shrink-0 text-foreground-lighter data-[active=true]:text-foreground'
+ ),
{
variants: {
variant: {
@@ -510,10 +516,15 @@ const sidebarMenuButtonVariants = cva(
sm: 'h-7 text-xs',
lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0',
},
+ hasIcon: {
+ true: 'group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!pl-1.5 group-data-[collapsible=icon]:!pr-2',
+ false: '',
+ },
},
defaultVariants: {
variant: 'default',
size: 'default',
+ hasIcon: true,
},
}
)
@@ -524,6 +535,7 @@ const SidebarMenuButton = React.forwardRef<
asChild?: boolean
isActive?: boolean
tooltip?: string | React.ComponentProps
+ hasIcon?: boolean
} & VariantProps
>(
(
@@ -532,6 +544,7 @@ const SidebarMenuButton = React.forwardRef<
isActive = false,
variant = 'default',
size = 'default',
+ hasIcon = true,
tooltip,
className,
...props
@@ -547,7 +560,8 @@ const SidebarMenuButton = React.forwardRef<
data-sidebar="menu-button"
data-size={size}
data-active={isActive}
- className={cn(sidebarMenuButtonVariants({ variant, size }), className)}
+ data-has-icon={hasIcon}
+ className={cn(sidebarMenuButtonVariants({ variant, size, hasIcon }), className)}
{...props}
/>
)
@@ -737,4 +751,5 @@ export {
SidebarSeparator,
SidebarTrigger,
useSidebar,
+ sidebarMenuButtonVariants,
}