Refactored the CommandMenuLinkInfo component to utilize the new LinkIconWithLinkOverlay component, enhancing the visual representation of links with an optional favicon. Additionally, modified the LinkIconWithLinkOverlay to improve favicon handling by tracking failed favicon links, ensuring better user experience and consistency in the navigation menu.
Introduced the LinkIconWithLinkOverlay component to display a link icon with an optional favicon overlay in the navigation menu. This component utilizes the getLinkFaviconUrl utility to fetch favicons based on provided links and integrates with the NavigationMenuItemIcon to enhance link item rendering. Additionally, updated NavigationMenuItemIcon to utilize the new component for link items, improving visual consistency and user experience.
Updated the shouldBeRegistered functions across various record actions to incorporate the isNavigationMenuInEditMode state. This enhancement ensures that actions are correctly registered or disabled based on the navigation menu's edit mode, improving user experience and interaction clarity. Additionally, modified related hooks and components to utilize this new state for better control over action availability.
Updated the CommandMenuNewSidebarItemViewPickerSubView component to filter views based on their visibility, ensuring only workspace-visible views are included. Additionally, modified the getAvailableObjectMetadataForNewSidebarItem utility to filter active non-system object metadata items by index view availability, enhancing the accuracy of available items in the command menu.
Enhanced the CommandMenuObjectMenuItem component by adding an iconColor prop for improved customization. Additionally, updated the buildCreateNavigationMenuItemInput utility to include a color property if defined in the draft item, allowing for better visual representation in navigation menus.
Adjusted the size of the ViewIcon from 10px to 12px and changed the stroke from large to medium in the ObjectIconWithViewOverlay component. This update enhances the visual consistency and alignment with the overall design system.
Added a disableDrag prop to various command menu components, including CommandMenuItemWithAddToNavigationDrag and CommandMenuNewSidebarItemMainMenu. This enhancement allows for better control over drag interactions, preventing dragging when certain conditions are met. Updated related components to utilize this new prop, improving user experience and interaction clarity across the command menu.
Enhanced the CommandMenuItemWithAddToNavigationDrag and CommandMenuNewSidebarItemMainMenu components by introducing a disabled state. This allows for better control over user interactions, preventing actions when items are not selectable. Updated styles and logic to reflect the disabled state, improving overall usability and clarity in the command menu.
Refactored the calculation of folder content length in the WorkspaceNavigationMenuItemsFolder component to improve code clarity. The logic for determining the length in edit mode has been simplified, enhancing readability while maintaining functionality.
Removed redundant condition for checking edit mode in the WorkspaceNavigationMenuItemsFolder component. This change streamlines the logic for rendering folder content and improves code clarity while maintaining intended functionality.
Refactored the position handling logic in the useNavigationMenuItemMoveRemove hook to utilize a new getPositionBetween utility for calculating item positions. This change enhances the accuracy of position updates when moving items within the navigation menu. Additionally, updated related functions to directly use draft item positions, improving overall code clarity and functionality.
Modified click handlers in various components, including CurrentWorkspaceMemberFavorites, CurrentWorkspaceMemberOrphanFavorites, FavoritesFolderContent, and navigation menu items, to stop event propagation when deleting favorites or navigation items. This change enhances user experience by preventing unintended interactions while maintaining functionality.
Refactored the click handling logic in the NavigationDrawerItemForObjectMetadataItem component to streamline the conditions for handling clicks based on the edit mode state. This change improves code readability and maintains the intended functionality for navigation interactions.
Enhanced multiple navigation components, including WorkspaceNavigationMenuItemsFolder, WorkspaceSectionAddMenuItemButton, NavigationDrawerItem, and NavigationDrawerSubItem, by introducing a variant prop. This addition allows for improved styling options, specifically supporting a 'tertiary' variant, which enhances visual differentiation and user experience across the navigation interface.
Enhanced the WorkspaceNavigationMenuItemsFolder and WorkspaceFolderReadOnly components by adding the alwaysShowRightOptions prop. This improvement ensures that right options are consistently displayed, enhancing user interaction within the navigation menus.
Enhanced multiple navigation drawer components by adding the isOpen prop to the NavigationDrawerSectionTitle, allowing for better control of the open/close state. This improves the user experience by providing visual feedback on the navigation sections' status.
Enhanced the WorkspaceNavigationMenuItems component by integrating a navigation command that triggers when entering edit mode. This allows users to seamlessly navigate to the command menu for adding a new sidebar item, improving the editing experience.
Implemented a check for edit mode in the CurrentWorkspaceMemberNavigationMenuItemFoldersDispatcher component. If the navigation menu is in edit mode, the component will return null, preventing rendering of the folder items during editing. This enhances user experience by avoiding unnecessary UI elements during editing sessions.
Updated multiple components to utilize themeCssVariables for styling instead of runtime theme access. This change enhances performance and consistency across the application by leveraging CSS custom properties for spacing, borders, and colors.
## Summary
Completes the migration of the frontend styling system from **Emotion**
(`@emotion/styled`, `@emotion/react`) to **Linaria** (`@linaria/react`,
`@linaria/core`), a zero-runtime CSS-in-JS library where styles are
extracted at build time.
This is the final step of the migration — all ~494 files across
`twenty-front`, `twenty-ui`, `twenty-website`, and `twenty-sdk` are now
fully converted.
## Changes
### Styling Migration (across ~480 component files)
- Replaced all `@emotion/styled` imports with `@linaria/react`
- Converted runtime theme access patterns (`({ theme }) => theme.x.y`)
to build-time `themeCssVariables` CSS custom properties
- Replaced `useTheme()` hook (from Emotion) with
`useContext(ThemeContext)` where runtime theme values are still needed
(e.g., passing colors to non-CSS props like icon components)
- Removed `@emotion/react` `css` helper usages in favor of Linaria
template literals
### Dependency & Configuration Changes
- **Removed**: `@emotion/react`, `@emotion/styled` from root
`package.json`
- **Added**: `@wyw-in-js/babel-preset`, `next-with-linaria` (for
twenty-website SSR support)
- Updated Nx generator defaults from `@emotion/styled` to
`@linaria/react` in `nx.json`
- Simplified `vite.config.ts` (removed Emotion-specific configuration)
- Updated `twenty-website/next.config.js` to use `next-with-linaria` for
SSR Linaria support
### Storybook & Testing
- Removed `ThemeProvider` from Emotion in Storybook previews
(`twenty-front`, `twenty-sdk`)
- Now relies solely on `ThemeContextProvider` for theme injection
### Documentation
- Removed the temporary `docs/emotion-to-linaria-migration-plan.md`
(migration complete)
- Updated `CLAUDE.md` and `README.md` to reflect Linaria as the styling
stack
- Updated frontend style guide docs across all locales
## How it works
Linaria extracts styles at build time via the `@wyw-in-js/vite` plugin.
All expressions in `styled` template literals must be **statically
evaluable** — no runtime theme objects or closures over component state.
- **Static styles** use `themeCssVariables` which map to CSS custom
properties (`var(--theme-color-x)`)
- **Runtime theme access** (for non-CSS use cases like icon `color`
props) uses `useContext(ThemeContext)` instead of Emotion's `useTheme()`
Removed unnecessary props from styled components in WorkspaceNavigationMenuItemsFolder and WorkspaceFolderReadOnly, enhancing code clarity and maintainability. This update streamlines the component structure while preserving existing functionality.
Updated the destination assignment logic in the WorkspaceDndKitProvider to handle dropping items into folders more accurately. The logic now checks if the target is a folder and adjusts the droppable ID accordingly, enhancing the drag-and-drop functionality and user experience within the navigation menu.
Updated the folder ID assignment logic in the useSaveNavigationMenuItemsDraft hook to ensure that the folder ID is resolved correctly when it is not null. This change improves the accuracy of the draft item updates while maintaining existing functionality.
Updated the NavigationDrawerSectionForWorkspaceItemsListDndKit component by reorganizing imports and introducing a new styled component for list item rows. This refactor improves code clarity and maintainability while preserving existing functionality.
Updated the WorkspaceNavigationMenuItemsFolder component by reorganizing imports and removing an unused variable. Enhanced the rendering logic for adding menu items in edit mode, improving code clarity and maintainability. This refactor aims to optimize the component's structure while maintaining existing functionality.
Added new functions to improve drag-and-drop interactions, including validation for dropping items into folders and handling effective drop target IDs. Updated WorkspaceDndKitDroppableSlot to support customizable collision priorities, enhancing the drag-and-drop experience. This update aims to streamline user interactions and prevent invalid drop actions within the navigation menu.
Enhanced the drag-and-drop functionality by adding checks to prevent dropping items into folders when the source item is also a folder. Updated the WorkspaceDndKitProvider to utilize the new validation logic and refined the NavigationItemDropTarget and WorkspaceNavigationMenuItemsFolder components to reflect forbidden drop states. This update aims to improve user experience and prevent invalid drop actions within the navigation menu.
Refactored the WorkspaceNavigationMenuItemsFolder component to improve the rendering of sortable items and integrate NavigationItemDropTarget for better drag-and-drop interactions. This update includes the addition of drop target IDs and enhances user feedback during item manipulation within the workspace navigation menu.
Enhanced the drag-and-drop functionality by introducing a 'clone' feedback message in both CommandMenuItemWithAddToNavigationDragDndKit and WorkspaceDndKitSortableItem components. This improvement aims to provide clearer user feedback during drag-and-drop operations.
Introduced a new state for tracking the last drop index and improved the handleDragOver function to calculate drop positions more accurately. Updated the WorkspaceDndKitSortableItem to utilize the SortableKeyboardPlugin, enhancing keyboard accessibility during drag-and-drop operations. Additionally, refactored the WorkspaceNavigationMenuItemsFolder to streamline the rendering of sortable items.
- apollo enrich application (via OAuth 2)
- add applicationId to var env in logic function executor
- update `getDefaultUrl` logic
---------
Co-authored-by: Charles Bochet <charles@twenty.com>
<img width="450" height="212" alt="Capture d’écran 2026-03-03 à 11 41
54"
src="https://github.com/user-attachments/assets/b2c29a48-7dc0-4b16-a085-8f305d21f7ca"
/>
New status `FAIL_SAFE` added. This status propagates to the following
nodes until reaching the iterator, that will start the new iteration.
The difference with `SKIP` is that, when the parent nodes have at least
one `FAIL_SAFE`, it becomes `FAIL_SAFE` too. While a parent 1 `SKIP` +
parent 2 `SUCCESS` => to be executed.
I also thought about just going back to the iterator as a break would,
but since we have branches, it may lead to inconsistent statuses with
parallel updates.
Added support for favorites drag-and-drop interactions by introducing the `getFavoritesDropTargetIdFromDestination` utility and integrating it into the `handleDragUpdate` and `handleDragEnd` methods. This enhancement improves user experience when managing favorite items within the navigation menu.
Refactored the `StyledDroppableWrapper` component to utilize data attributes for drag-and-drop states instead of props. This change enhances code clarity and maintainability while ensuring consistent styling behavior during drag-and-drop interactions.
Eliminated the `StyledWorkspaceDroppableList` styled component and its associated imports to streamline the code and improve maintainability. This change contributes to a cleaner component structure in the NavigationDrawerSectionForWorkspaceItems.
Enhanced the CurrentWorkspaceMemberNavigationMenuItemFoldersDispatcher component by wrapping the CurrentWorkspaceMemberNavigationMenuItemFolders with FavoritesDragDropProviderContent. This change supports drag-and-drop functionality within the navigation menu item editing context, improving user experience during folder management.
Refactored the `StyledDropTarget` component by removing unnecessary props and utilizing data attributes for drag-and-drop states. This change enhances code clarity and maintainability while ensuring consistent styling behavior during drag-and-drop interactions.