diff --git a/packages/twenty-front/src/loading/components/LeftPanelSkeletonLoader.tsx b/packages/twenty-front/src/loading/components/LeftPanelSkeletonLoader.tsx
index badd24e1d7..142010b863 100644
--- a/packages/twenty-front/src/loading/components/LeftPanelSkeletonLoader.tsx
+++ b/packages/twenty-front/src/loading/components/LeftPanelSkeletonLoader.tsx
@@ -19,7 +19,7 @@ const StyledAnimatedContainer = styled(motion.div)`
flex-shrink: 0;
height: 100%;
overflow: hidden;
- padding: ${themeCssVariables.spacing[3]} 0 ${themeCssVariables.spacing[4]}
+ padding: ${themeCssVariables.spacing[2]} 0 ${themeCssVariables.spacing[4]}
${themeCssVariables.spacing[2]};
`;
diff --git a/packages/twenty-front/src/modules/ai/components/NavigationDrawerAiChatContent.tsx b/packages/twenty-front/src/modules/ai/components/NavigationDrawerAiChatContent.tsx
index defafb2ce2..eee406cd44 100644
--- a/packages/twenty-front/src/modules/ai/components/NavigationDrawerAiChatContent.tsx
+++ b/packages/twenty-front/src/modules/ai/components/NavigationDrawerAiChatContent.tsx
@@ -27,8 +27,7 @@ const StyledThreadList = styled.div`
flex: 1;
flex-direction: column;
min-height: 0;
- padding: ${themeCssVariables.spacing[2]} ${themeCssVariables.spacing[0]};
- width: calc(100% - ${themeCssVariables.spacing[2]});
+ width: 100%;
`;
const StyledSectionsContainer = styled.div`
diff --git a/packages/twenty-front/src/modules/ai/components/NavigationDrawerAiChatThreadSection.tsx b/packages/twenty-front/src/modules/ai/components/NavigationDrawerAiChatThreadSection.tsx
index 5bd91f2be5..866618cd5d 100644
--- a/packages/twenty-front/src/modules/ai/components/NavigationDrawerAiChatThreadSection.tsx
+++ b/packages/twenty-front/src/modules/ai/components/NavigationDrawerAiChatThreadSection.tsx
@@ -5,20 +5,15 @@ import { themeCssVariables } from 'twenty-ui-deprecated/theme-constants';
import { NavigationDrawerAiChatThreadItem } from '@/ai/components/NavigationDrawerAiChatThreadItem';
import { NavigationDrawerAnimatedCollapseWrapper } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerAnimatedCollapseWrapper';
+import { NavigationDrawerSection } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSection';
import { NavigationDrawerSectionTitle } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSectionTitle';
import { useNavigationSection } from '@/ui/navigation/navigation-drawer/hooks/useNavigationSection';
import { type AgentChatThread } from '~/generated-metadata/graphql';
-const StyledSection = styled.section`
- display: flex;
- flex-direction: column;
-`;
-
const StyledThreadList = styled.div`
display: flex;
flex-direction: column;
gap: ${themeCssVariables.spacing['0.5']};
- padding-top: ${themeCssVariables.betweenSiblingsGap};
`;
export type NavigationDrawerAiChatThreadSectionProps = {
@@ -44,7 +39,7 @@ export const NavigationDrawerAiChatThreadSection = ({
useNavigationSection(sectionId);
return (
-
+
) : null}
-
+
);
};
diff --git a/packages/twenty-front/src/modules/navigation-menu-item/display/sections/favorites/components/FavoritesSectionDispatcher.tsx b/packages/twenty-front/src/modules/navigation-menu-item/display/sections/favorites/components/FavoritesSectionDispatcher.tsx
index d1fb1a950a..8b7a243aee 100644
--- a/packages/twenty-front/src/modules/navigation-menu-item/display/sections/favorites/components/FavoritesSectionDispatcher.tsx
+++ b/packages/twenty-front/src/modules/navigation-menu-item/display/sections/favorites/components/FavoritesSectionDispatcher.tsx
@@ -1,6 +1,7 @@
import { isLayoutCustomizationModeEnabledState } from '@/layout-customization/states/isLayoutCustomizationModeEnabledState';
import { NavigationSections } from '@/navigation-menu-item/common/constants/NavigationSections.constants';
import { NavigationMenuItemDndKitProvider } from '@/navigation-menu-item/display/dnd/providers/NavigationMenuItemDndKitProvider';
+import { useSortedNavigationMenuItems } from '@/navigation-menu-item/display/hooks/useSortedNavigationMenuItems';
import { FavoritesSection } from '@/navigation-menu-item/display/sections/favorites/components/FavoritesSection';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { AnimatedEaseInOut } from 'twenty-ui-deprecated/utilities';
@@ -9,6 +10,13 @@ export const FavoritesSectionDispatcher = () => {
const isLayoutCustomizationModeEnabled = useAtomStateValue(
isLayoutCustomizationModeEnabledState,
);
+ const { navigationMenuItemsSorted } = useSortedNavigationMenuItems();
+
+ const hasFavorites = navigationMenuItemsSorted.some((item) => !item.folderId);
+
+ if (!hasFavorites) {
+ return null;
+ }
return (
diff --git a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx
index ff8072c49a..2fd59b610a 100644
--- a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx
+++ b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawer.tsx
@@ -34,6 +34,7 @@ export const MainNavigationDrawer = ({ className }: { className?: string }) => {
}
/>
diff --git a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerScrollableItems.tsx b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerScrollableItems.tsx
index 6f6836a703..9c45b6c38a 100644
--- a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerScrollableItems.tsx
+++ b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerScrollableItems.tsx
@@ -1,9 +1,6 @@
import { NavigationDrawerOpenedSection } from '@/navigation-menu-item/display/sections/components/NavigationDrawerOpenedSection';
import { NavigationDrawerWorkspaceSectionSkeletonLoader } from '@/object-metadata/components/NavigationDrawerWorkspaceSectionSkeletonLoader';
-import { isLayoutCustomizationModeEnabledState } from '@/layout-customization/states/isLayoutCustomizationModeEnabledState';
-import { NavigationDrawerOtherSection } from '@/navigation/components/NavigationDrawerOtherSection';
-import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { styled } from '@linaria/react';
import { lazy, Suspense } from 'react';
@@ -32,10 +29,6 @@ const StyledScrollableItemsContainer = styled.div`
`;
export const MainNavigationDrawerScrollableItems = () => {
- const isLayoutCustomizationModeEnabled = useAtomStateValue(
- isLayoutCustomizationModeEnabledState,
- );
-
return (
@@ -43,7 +36,6 @@ export const MainNavigationDrawerScrollableItems = () => {
- {!isLayoutCustomizationModeEnabled && }
);
};
diff --git a/packages/twenty-front/src/modules/navigation/components/NavigationDrawerTabbedContent.tsx b/packages/twenty-front/src/modules/navigation/components/NavigationDrawerTabbedContent.tsx
index fffac0d093..28b50bac9a 100644
--- a/packages/twenty-front/src/modules/navigation/components/NavigationDrawerTabbedContent.tsx
+++ b/packages/twenty-front/src/modules/navigation/components/NavigationDrawerTabbedContent.tsx
@@ -1,9 +1,10 @@
import { NavigationDrawerAiChatContent } from '@/ai/components/NavigationDrawerAiChatContent';
import { styled } from '@linaria/react';
-import { type ReactNode, useState } from 'react';
+import { type ReactNode } from 'react';
type NavigationDrawerTabbedContentProps = {
showAiChatContent: boolean;
+ shouldMountAiChatContent: boolean;
navigationContent: ReactNode;
};
@@ -13,20 +14,15 @@ const StyledTabContent = styled.div<{ isHidden: boolean }>`
export const NavigationDrawerTabbedContent = ({
showAiChatContent,
+ shouldMountAiChatContent,
navigationContent,
}: NavigationDrawerTabbedContentProps) => {
- const [hasOpenedAiChat, setHasOpenedAiChat] = useState(showAiChatContent);
-
- if (showAiChatContent && !hasOpenedAiChat) {
- setHasOpenedAiChat(true);
- }
-
return (
<>
{navigationContent}
- {hasOpenedAiChat && (
+ {shouldMountAiChatContent && (
diff --git a/packages/twenty-front/src/modules/navigation/components/SettingsNavigationDrawer.tsx b/packages/twenty-front/src/modules/navigation/components/SettingsNavigationDrawer.tsx
index 721bc4933a..848fdf993a 100644
--- a/packages/twenty-front/src/modules/navigation/components/SettingsNavigationDrawer.tsx
+++ b/packages/twenty-front/src/modules/navigation/components/SettingsNavigationDrawer.tsx
@@ -4,12 +4,14 @@ import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFla
import { SettingsNavigationDrawerItems } from '@/settings/components/SettingsNavigationDrawerItems';
import { NavigationDrawer } from '@/ui/navigation/navigation-drawer/components/NavigationDrawer';
import { NavigationDrawerFixedContent } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerFixedContent';
+import { NavigationDrawerSection } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSection';
import { NavigationDrawerScrollableContent } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerScrollableContent';
import { isAdvancedModeEnabledState } from '@/ui/navigation/navigation-drawer/states/isAdvancedModeEnabledState';
import { navigationDrawerActiveTabState } from '@/ui/navigation/states/navigationDrawerActiveTabState';
import { NAVIGATION_DRAWER_TABS } from '@/ui/navigation/states/navigationDrawerTabs';
import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
+import { css } from '@linaria/core';
import { styled } from '@linaria/react';
import { useLingui } from '@lingui/react/macro';
import { useIsMobile } from 'twenty-ui-deprecated/utilities';
@@ -17,9 +19,17 @@ import { AdvancedSettingsToggle } from 'twenty-ui-deprecated/navigation';
import { themeCssVariables } from 'twenty-ui-deprecated/theme-constants';
import { PermissionFlagType } from '~/generated-metadata/graphql';
-const StyledAdvancedToggleWrapper = styled.div<{ isMobile: boolean }>`
+const StyledAdvancedToggleFixedContent = styled.div<{ isMobile: boolean }>`
+ flex-shrink: 0;
+ margin-top: auto;
+ padding-left: ${({ isMobile }) =>
+ isMobile ? themeCssVariables.spacing[5] : '0'};
padding-right: ${({ isMobile }) =>
- isMobile ? '0' : themeCssVariables.spacing[1]};
+ isMobile ? themeCssVariables.spacing[5] : '0'};
+`;
+
+const advancedSettingsToggleClassName = css`
+ padding-right: 0;
`;
export const SettingsNavigationDrawer = ({
@@ -42,7 +52,7 @@ export const SettingsNavigationDrawer = ({
navigationDrawerActiveTab === NAVIGATION_DRAWER_TABS.AI_CHAT_HISTORY;
return (
-
+
{hasAiPermission && (
@@ -52,20 +62,22 @@ export const SettingsNavigationDrawer = ({
}
/>
{!showAiChatContent && (
-
-
+
+
-
-
+
+
)}
);
diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/ForbiddenFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/ForbiddenFieldDisplay.tsx
index 1e57be96ba..a6b13aa2db 100644
--- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/ForbiddenFieldDisplay.tsx
+++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/display/components/ForbiddenFieldDisplay.tsx
@@ -17,11 +17,12 @@ const StyledContainer = styled.div`
font-size: ${themeCssVariables.font.size.md};
font-weight: ${themeCssVariables.font.weight.regular};
gap: ${themeCssVariables.spacing[1]};
- height: ${themeCssVariables.spacing[3]};
+ height: ${themeCssVariables.spacing[5]};
+ line-height: ${themeCssVariables.text.lineHeight.md};
overflow: hidden;
-
- padding: ${themeCssVariables.spacing[1]};
+ padding: 0 ${themeCssVariables.spacing[1]};
user-select: none;
+ white-space: nowrap;
`;
export const ForbiddenFieldDisplay = () => {
diff --git a/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
index de98860f00..76c58928c9 100644
--- a/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
+++ b/packages/twenty-front/src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
@@ -4,13 +4,7 @@ import { useMutation, useQuery } from '@apollo/client/react';
import { t } from '@lingui/core/macro';
import { SettingsPath } from 'twenty-shared/types';
import { getSettingsPath } from 'twenty-shared/utils';
-import { Tag } from 'twenty-ui-deprecated/components';
-import {
- H2Title,
- IconBolt,
- IconLock,
- IconRobot,
-} from 'twenty-ui-deprecated/display';
+import { H2Title, IconBolt, IconRobot } from 'twenty-ui-deprecated/display';
import { Card, Section } from 'twenty-ui-deprecated/layout';
import { themeCssVariables } from 'twenty-ui-deprecated/theme-constants';
@@ -49,6 +43,7 @@ import {
AiModelRole,
type AdminAiModelConfig,
} from '~/generated-admin/graphql';
+import { OrganizationAdornment } from '~/pages/settings/enterprise/components/OrganizationAdornment';
const USAGE_TABLE_GRID_TEMPLATE_COLUMNS = '1fr 120px';
@@ -202,14 +197,7 @@ export const SettingsAdminAI = () => {
- }
+ adornment={}
/>
{
Icon={IconRobot}
title={t`Smart Model`}
description={t`Default model for chats and complex reasoning`}
+ divider
>
);
};
diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader.tsx b/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader.tsx
index fe50c9a2db..f70643b94f 100644
--- a/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader.tsx
+++ b/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader.tsx
@@ -8,6 +8,7 @@ const StyledHeader = styled.li`
border-bottom: 1px solid ${themeCssVariables.border.color.light};
border-top-left-radius: ${themeCssVariables.border.radius.sm};
border-top-right-radius: ${themeCssVariables.border.radius.sm};
+ box-sizing: content-box;
color: ${themeCssVariables.font.color.primary};
cursor: ${({ onClick }) => (onClick ? 'pointer' : 'default')};
display: flex;
diff --git a/packages/twenty-front/src/modules/ui/layout/page/components/MainAppLayoutWithSidePanel.tsx b/packages/twenty-front/src/modules/ui/layout/page/components/MainAppLayoutWithSidePanel.tsx
index 79ec196bbe..4b28d9f212 100644
--- a/packages/twenty-front/src/modules/ui/layout/page/components/MainAppLayoutWithSidePanel.tsx
+++ b/packages/twenty-front/src/modules/ui/layout/page/components/MainAppLayoutWithSidePanel.tsx
@@ -3,7 +3,19 @@ import { useCommandMenuHotKeys } from '@/command-menu/hooks/useCommandMenuHotKey
import { SidePanelForDesktop } from '@/side-panel/components/SidePanelForDesktop';
import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
import { styled } from '@linaria/react';
-import { Outlet } from 'react-router-dom';
+import { AnimatePresence, motion } from 'framer-motion';
+import { useLocation, useOutlet } from 'react-router-dom';
+import { AppPath } from 'twenty-shared/types';
+
+const APP_TO_SETTINGS_TRANSITION_DURATION_IN_SECONDS = 0.3;
+
+const SETTINGS_PATH_PREFIX = `/${AppPath.Settings}`;
+
+const getMainAppLayoutRouteSection = (pathname: string) =>
+ pathname === SETTINGS_PATH_PREFIX ||
+ pathname.startsWith(`${SETTINGS_PATH_PREFIX}/`)
+ ? 'settings'
+ : 'app';
const StyledRow = styled.div`
display: flex;
@@ -21,6 +33,47 @@ const StyledContent = styled.div`
overflow: hidden;
`;
+const StyledContentTransitionContainer = styled.div`
+ display: grid;
+ flex: 1 1 0;
+ min-height: 0;
+ min-width: 0;
+ overflow: hidden;
+`;
+
+const StyledContentTransitionPage = styled(motion.div)`
+ display: flex;
+ grid-area: 1 / 1;
+ min-height: 0;
+ min-width: 0;
+ width: 100%;
+`;
+
+const MainAppLayoutOutlet = () => {
+ const { pathname } = useLocation();
+ const outlet = useOutlet();
+ const routeSection = getMainAppLayoutRouteSection(pathname);
+
+ return (
+
+
+
+ {outlet}
+
+
+
+ );
+};
+
export const MainAppLayoutWithSidePanel = () => {
const isMobile = useIsMobile();
@@ -29,7 +82,7 @@ export const MainAppLayoutWithSidePanel = () => {
return (
-
+
{isMobile ? : }
diff --git a/packages/twenty-front/src/modules/ui/layout/page/components/PageCardHeader.tsx b/packages/twenty-front/src/modules/ui/layout/page/components/PageCardHeader.tsx
index ce7d182251..687627a5b1 100644
--- a/packages/twenty-front/src/modules/ui/layout/page/components/PageCardHeader.tsx
+++ b/packages/twenty-front/src/modules/ui/layout/page/components/PageCardHeader.tsx
@@ -20,6 +20,7 @@ type PageCardHeaderProps = {
tag?: ReactNode;
actionButton?: ReactNode;
centerTitle?: boolean;
+ titleColor?: string;
};
const StyledHeader = styled.div`
@@ -43,9 +44,10 @@ const StyledLeft = styled.div`
overflow: hidden;
`;
-const StyledTitle = styled.div`
+const StyledTitle = styled.div<{ titleColor?: string }>`
align-items: center;
- color: ${themeCssVariables.font.color.primary};
+ color: ${({ titleColor }) =>
+ titleColor ?? themeCssVariables.font.color.primary};
display: flex;
font-size: ${themeCssVariables.font.size.md};
font-weight: ${themeCssVariables.font.weight.semiBold};
@@ -79,6 +81,7 @@ export const PageCardHeader = ({
tag,
actionButton,
centerTitle = false,
+ titleColor,
}: PageCardHeaderProps) => {
const isMobile = useIsMobile();
const isNavigationDrawerExpanded = useNavigationDrawerExpanded();
@@ -104,11 +107,13 @@ export const PageCardHeader = ({
? breadcrumb
: isDefined(links) && }
{!centerTitle && hasTitleContent && (
- {titleContent}
+ {titleContent}
)}
{centerTitle && hasTitleContent && (
- {titleContent}
+
+ {titleContent}
+
)}
[data-table-row]:first-child:not(:has([data-table-header])),
+ > [data-table-row]:has([data-table-header])
+ + [data-table-row]:not(:has([data-table-header])) {
+ margin-top: ${themeCssVariables.spacing[2]};
+ }
+
+ > [data-table-row]:last-child:not(:has([data-table-header])) {
+ margin-bottom: ${themeCssVariables.spacing[2]};
+ }
+`;
export { StyledTable as Table };
diff --git a/packages/twenty-front/src/modules/ui/layout/table/components/TableHeader.tsx b/packages/twenty-front/src/modules/ui/layout/table/components/TableHeader.tsx
index 6cdb3023b6..799b6e01fd 100644
--- a/packages/twenty-front/src/modules/ui/layout/table/components/TableHeader.tsx
+++ b/packages/twenty-front/src/modules/ui/layout/table/components/TableHeader.tsx
@@ -1,11 +1,14 @@
import { styled } from '@linaria/react';
+import { type ComponentPropsWithoutRef, type Ref, forwardRef } from 'react';
import { themeCssVariables } from 'twenty-ui-deprecated/theme-constants';
-const StyledTableHeader = styled.div<{
+type TableHeaderProps = Omit, 'onClick'> & {
align?: 'left' | 'center' | 'right';
onClick?: () => void;
padding?: string;
-}>`
+};
+
+const StyledTableHeader = styled.div`
align-items: center;
border-bottom: 1px solid ${themeCssVariables.border.color.light};
color: ${themeCssVariables.font.color.tertiary};
@@ -24,4 +27,13 @@ const StyledTableHeader = styled.div<{
text-align: ${({ align }) => align ?? 'left'};
`;
-export { StyledTableHeader as TableHeader };
+export const TableHeader = forwardRef(
+ (props: TableHeaderProps, ref: Ref) => (
+
+ ),
+);
diff --git a/packages/twenty-front/src/modules/ui/layout/table/components/TableRow.tsx b/packages/twenty-front/src/modules/ui/layout/table/components/TableRow.tsx
index 7ffda2eec6..a377762306 100644
--- a/packages/twenty-front/src/modules/ui/layout/table/components/TableRow.tsx
+++ b/packages/twenty-front/src/modules/ui/layout/table/components/TableRow.tsx
@@ -107,6 +107,7 @@ export const TableRow = ({
className={className}
style={style}
data-clickable={isClickable}
+ data-table-row
mobileGridAutoColumns={mobileGridAutoColumns}
height={height}
cursor={cursor}
diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/MultiWorkspaceDropdownButton.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/MultiWorkspaceDropdownButton.tsx
index 76a8e107bb..fb10935138 100644
--- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/MultiWorkspaceDropdownButton.tsx
+++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/MultiWorkspaceDropdownButton.tsx
@@ -32,7 +32,7 @@ export const MultiWorkspaceDropdownButton = () => {
return (
{
>
+ {isSupportChatConfigured && (
+
+ )}
{
@@ -233,13 +240,6 @@ export const MultiWorkspaceDropdownDefaultComponents = () => {
>
- {isSupportChatConfigured && (
-
- )}
);
diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspacesDropdownStyles.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspacesDropdownStyles.tsx
index b02fb7cb71..32480ed724 100644
--- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspacesDropdownStyles.tsx
+++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspacesDropdownStyles.tsx
@@ -15,6 +15,7 @@ export const StyledContainer = styled.div<{
display: flex;
gap: ${({ isNavigationDrawerExpanded }) =>
isNavigationDrawerExpanded ? themeCssVariables.spacing[2] : '0'};
+ height: ${themeCssVariables.spacing[7]};
max-width: 100%;
min-width: 0;
opacity: ${({ disabled }) => (disabled ? 0.5 : 1)};
diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawer.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawer.tsx
index c254e01cd4..e2beab25aa 100644
--- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawer.tsx
+++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawer.tsx
@@ -62,7 +62,7 @@ const StyledContainer = styled.div<{
flex-direction: column;
gap: ${themeCssVariables.spacing[3]};
height: 100%;
- padding: ${themeCssVariables.spacing[3]} 0 ${themeCssVariables.spacing[4]}
+ padding: ${themeCssVariables.spacing[2]} 0 ${themeCssVariables.spacing[4]}
${themeCssVariables.spacing[2]};
width: ${({ isExpanded }) =>
isExpanded ? `var(${NAVIGATION_DRAWER_WIDTH_VAR})` : '100%'};
diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerBackButton.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerBackButton.tsx
index 0a137065de..a4ebcee2fc 100644
--- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerBackButton.tsx
+++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerBackButton.tsx
@@ -23,19 +23,22 @@ type NavigationDrawerBackButtonProps = {
const StyledIconAndButtonContainer = styled.button`
align-items: center;
background: inherit;
- border: none;
- color: ${themeCssVariables.font.color.secondary};
+ border: 1px solid transparent;
+ border-radius: ${themeCssVariables.border.radius.sm};
+ box-sizing: border-box;
+ color: ${themeCssVariables.font.color.primary};
cursor: pointer;
display: flex;
flex-direction: row;
font-family: ${themeCssVariables.font.family};
+ font-size: ${themeCssVariables.font.size.md};
font-weight: ${themeCssVariables.font.weight.medium};
gap: ${themeCssVariables.spacing[2]};
- padding: ${themeCssVariables.spacing[1]};
- width: 100%;
+ height: ${themeCssVariables.spacing[7]};
+ padding: 2px ${themeCssVariables.spacing[1]} 2px 2px;
+ width: fit-content;
&:hover {
background: ${themeCssVariables.background.transparent.light};
- border-radius: ${themeCssVariables.border.radius.sm};
}
`;
@@ -43,6 +46,7 @@ const StyledContainer = styled.div`
align-items: center;
display: flex;
flex-direction: row;
+ flex-shrink: 0;
height: ${themeCssVariables.spacing[8]};
justify-content: space-between;
`;
@@ -84,8 +88,8 @@ export const NavigationDrawerBackButton = ({
{title}
diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerFixedContent.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerFixedContent.tsx
index f8e027cf76..305ba7bbe5 100644
--- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerFixedContent.tsx
+++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerFixedContent.tsx
@@ -6,6 +6,7 @@ import { useIsMobile } from 'twenty-ui-deprecated/utilities';
import { themeCssVariables } from 'twenty-ui-deprecated/theme-constants';
const StyledFixedContainer = styled.div<{ isMobile?: boolean }>`
+ flex-shrink: 0;
padding-left: ${({ isMobile }) =>
isMobile ? themeCssVariables.spacing[5] : '0'};
padding-right: ${({ isMobile }) =>
diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerHeader.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerHeader.tsx
index e3c0ffad92..86b512ca31 100644
--- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerHeader.tsx
+++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerHeader.tsx
@@ -19,6 +19,7 @@ const StyledContainer = styled.div<{ isExpanded: boolean }>`
align-items: ${({ isExpanded }) => (isExpanded ? 'center' : 'flex-start')};
display: flex;
flex-direction: ${({ isExpanded }) => (isExpanded ? 'row' : 'column')};
+ flex-shrink: 0;
gap: ${({ isExpanded }) => (isExpanded ? '0' : themeCssVariables.spacing[4])};
min-height: ${PAGE_BAR_MIN_HEIGHT}px;
padding-right: ${themeCssVariables.spacing[2]};
@@ -37,7 +38,8 @@ const StyledRightActions = styled.div<{ isExpanded: boolean }>`
display: flex;
flex-direction: ${({ isExpanded }) => (isExpanded ? 'row' : 'column')};
flex-shrink: 0;
- gap: ${({ isExpanded }) => (isExpanded ? '0' : themeCssVariables.spacing[1])};
+ gap: ${({ isExpanded }) =>
+ isExpanded ? '2px' : themeCssVariables.spacing[1]};
margin-left: ${({ isExpanded }) => (isExpanded ? 'auto' : '0')};
transition: gap calc(${themeCssVariables.animation.duration.normal} * 1s) ease;
`;
@@ -45,7 +47,7 @@ const StyledRightActions = styled.div<{ isExpanded: boolean }>`
const StyledNavigationDrawerCollapseButtonContainer = styled.div`
> * {
height: ${themeCssVariables.spacing[6]};
- padding-right: ${themeCssVariables.spacing[1]};
+ padding-right: 0;
width: ${themeCssVariables.spacing[6]};
}
diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItemBreadcrumb.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItemBreadcrumb.tsx
index e66c40a308..0bfdab2a5c 100644
--- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItemBreadcrumb.tsx
+++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItemBreadcrumb.tsx
@@ -40,13 +40,13 @@ const StyledSecondaryFullVerticalBar = styled.div<{ darker: boolean }>`
? themeCssVariables.font.color.tertiary
: themeCssVariables.border.color.strong};
- height: 28px;
+ height: calc(${themeCssVariables.spacing[7]} + 1px);
position: relative;
top: -17px;
width: 1px;
@media (max-width: ${MOBILE_VIEWPORT}px) {
- height: ${themeCssVariables.spacing[8]};
+ height: calc(${themeCssVariables.spacing[8]} + 1px);
}
`;
diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerScrollableContent.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerScrollableContent.tsx
index 01e9cbaa98..f3dab40fd8 100644
--- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerScrollableContent.tsx
+++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerScrollableContent.tsx
@@ -9,10 +9,18 @@ const StyledItemsContainer = styled.div`
display: flex;
flex-direction: column;
height: 100%;
+ min-height: 0;
+ width: 100%;
+`;
+
+const StyledNavigationDrawerScrollWrapper = styled(ScrollWrapper)`
+ flex: 1 1 auto;
+ min-height: 0;
`;
const StyledScrollableMobileInnerContainer = styled.div`
height: 100%;
+ min-height: 0;
padding-left: ${themeCssVariables.spacing[5]};
padding-right: ${themeCssVariables.spacing[5]};
`;
@@ -26,7 +34,7 @@ export const NavigationDrawerScrollableContent = ({
const isMobile = useIsMobile();
return (
- {children}>
)}
-
+
);
};
diff --git a/packages/twenty-front/src/pages/settings/ai/components/SettingsAgentSkillsTab.tsx b/packages/twenty-front/src/pages/settings/ai/components/SettingsAgentSkillsTab.tsx
index e1578495a3..c1e0e36d06 100644
--- a/packages/twenty-front/src/pages/settings/ai/components/SettingsAgentSkillsTab.tsx
+++ b/packages/twenty-front/src/pages/settings/ai/components/SettingsAgentSkillsTab.tsx
@@ -22,8 +22,8 @@ import { SETTINGS_SKILL_TABLE_METADATA } from '~/pages/settings/ai/constants/Set
import { normalizeSearchText } from '~/utils/normalizeSearchText';
import { SettingsAgentSkillsTable } from './SettingsAgentSkillsTable';
-const StyledSearchInput = styled(SearchInput)`
- margin-bottom: ${themeCssVariables.spacing[4]};
+const StyledSearchContainer = styled.div`
+ padding-bottom: ${themeCssVariables.spacing[2]};
`;
export const SettingsAgentSkillsTab = () => {
@@ -89,32 +89,34 @@ export const SettingsAgentSkillsTab = () => {
description={t`Use filter to see existing skills or create your own`}
/>
- (
-
-
-
-
-
- }
- />
- )}
- />
+
+ (
+
+
+
+
+
+ }
+ />
+ )}
+ />
+
{
Icon={IconBrain}
title={t`Smart Model`}
description={t`Used for chats, agents, and complex reasoning`}
+ divider
>