Remove twenty-ui-deprecated and migrate frontend to twenty-ui (#21596)

Migrates `twenty-front`, `twenty-sdk`, and
`twenty-front-component-renderer` from `twenty-ui-deprecated` to
`twenty-ui` (mechanical import swap — the packages have API parity) and
deletes the deprecated package along with its workspace/CI/config
wiring.

Also adds `@linaria/react`/`@linaria/core` as direct deps of
`twenty-front` (it used them transitively via the deprecated package).

Note: move the required status check from `ci-ui-status-check` to
`ci-new-ui-status-check`.

Argos: the Storybook box-model/button-reset baseline shift (the bulk of
the visual diffs) is isolated in #21665 — Storybook now loads
twenty-ui's global `reset.scss`, which the production app already ships.
Once #21665 merges and this branch is rebased, the remaining Argos diffs
are component-level visual-parity items only.
This commit is contained in:
Raphaël Bosi
2026-06-17 11:41:11 +02:00
committed by GitHub
parent 079040f1c0
commit 9c9c34fccf
2267 changed files with 3289 additions and 43134 deletions
@@ -11,7 +11,7 @@ import { t } from '@lingui/core/macro';
import { CronExpressionParser } from 'cron-parser';
import { dateLocaleState } from '~/localization/states/dateLocaleState';
import { formatDateTimeString } from '~/utils/string/formatDateTimeString';
import { themeCssVariables } from 'twenty-ui-deprecated/theme-constants';
import { themeCssVariables } from 'twenty-ui/theme-constants';
const getNextExecutions = (
cronExpression: string,
@@ -21,9 +21,9 @@ import { Trans, useLingui } from '@lingui/react/macro';
import { useCallback, useMemo, useState } from 'react';
import { isDefined } from 'twenty-shared/utils';
import { TRIGGER_STEP_ID } from 'twenty-shared/workflow';
import { IconChevronLeft, IconSettings } from 'twenty-ui-deprecated/display';
import { MenuItem } from 'twenty-ui-deprecated/navigation';
import { themeCssVariables } from 'twenty-ui-deprecated/theme-constants';
import { IconChevronLeft, IconSettings } from 'twenty-ui/display';
import { MenuItem } from 'twenty-ui/navigation';
import { themeCssVariables } from 'twenty-ui/theme-constants';
const StyledLabel = styled.span`
color: ${themeCssVariables.font.color.light};
@@ -15,9 +15,9 @@ import { useLingui } from '@lingui/react/macro';
import { QUERY_MAX_RECORDS } from 'twenty-shared/constants';
import { isDefined } from 'twenty-shared/utils';
import { TRIGGER_STEP_ID } from 'twenty-shared/workflow';
import { useIcons } from 'twenty-ui-deprecated/display';
import { type SelectOption } from 'twenty-ui-deprecated/input';
import { themeCssVariables } from 'twenty-ui-deprecated/theme-constants';
import { useIcons } from 'twenty-ui/display';
import { type SelectOption } from 'twenty-ui/input';
import { themeCssVariables } from 'twenty-ui/theme-constants';
type WorkflowEditTriggerManualProps = {
trigger: WorkflowManualTrigger;
@@ -19,12 +19,12 @@ import { isDefined } from 'twenty-shared/utils';
import { getOutputSchemaFromValue } from 'twenty-shared/logic-function';
import { TRIGGER_STEP_ID } from 'twenty-shared/workflow';
import { t } from '@lingui/core/macro';
import { IconCopy } from 'twenty-ui-deprecated/display';
import { IconCopy } from 'twenty-ui/display';
import { useDebouncedCallback } from 'use-debounce';
import { REACT_APP_SERVER_BASE_URL } from '~/config';
import { useCopyToClipboard } from '~/hooks/useCopyToClipboard';
import { ThemeContext } from 'twenty-ui-deprecated/theme-constants';
import { ThemeContext } from 'twenty-ui/theme-constants';
type WorkflowEditTriggerWebhookFormProps = {
trigger: WorkflowWebhookTrigger;
@@ -4,7 +4,7 @@ import {
IconHours24,
IconTimeDuration60,
IconBrandDaysCounter,
} from 'twenty-ui-deprecated/display';
} from 'twenty-ui/display';
export type CronTriggerInterval = 'DAYS' | 'HOURS' | 'MINUTES' | 'CUSTOM';
export const CRON_TRIGGER_INTERVAL_OPTIONS: Array<{
@@ -3,7 +3,7 @@ import {
IconCheckbox,
type IconComponent,
IconSquare,
} from 'twenty-ui-deprecated/display';
} from 'twenty-ui/display';
export const MANUAL_TRIGGER_AVAILABILITY_OPTIONS: Array<{
label: string;
@@ -3,7 +3,7 @@ import {
type IconComponent,
IconId,
IconListDetails,
} from 'twenty-ui-deprecated/display';
} from 'twenty-ui/display';
export const MANUAL_TRIGGER_AVAILABILITY_TYPE_OPTIONS: Array<{
label: string;
@@ -2,7 +2,7 @@ import {
type IconComponent,
IconPinned,
IconPinnedOff,
} from 'twenty-ui-deprecated/display';
} from 'twenty-ui/display';
export const MANUAL_TRIGGER_IS_PINNED_OPTIONS: Array<{
label: string;
@@ -1,8 +1,4 @@
import {
type IconComponent,
IconLockOpen,
IconFlag,
} from 'twenty-ui-deprecated/display';
import { type IconComponent, IconLockOpen, IconFlag } from 'twenty-ui/display';
export type AuthenticationMethods = 'API_KEY' | null;
export const WEBHOOK_TRIGGER_AUTHENTICATION_OPTIONS: Array<{
@@ -2,7 +2,7 @@ import {
type IconComponent,
IconHttpGet,
IconHttpPost,
} from 'twenty-ui-deprecated/display';
} from 'twenty-ui/display';
export type WebhookHttpMethods = 'GET' | 'POST';
export const WEBHOOK_TRIGGER_HTTP_METHOD_OPTIONS: Array<{
@@ -1,5 +1,5 @@
import { getTriggerIconColor } from '@/workflow/workflow-trigger/utils/getTriggerIconColor';
import { themeCssVariables } from 'twenty-ui-deprecated/theme-constants';
import { themeCssVariables } from 'twenty-ui/theme-constants';
describe('getTriggerIconColor', () => {
it('returns the blue css variable for DATABASE_EVENT', () => {
@@ -1,5 +1,5 @@
import { type WorkflowTriggerType } from '@/workflow/types/Workflow';
import { themeCssVariables } from 'twenty-ui-deprecated/theme-constants';
import { themeCssVariables } from 'twenty-ui/theme-constants';
export const getTriggerIconColor = (
triggerType: WorkflowTriggerType,