Set up localization with feature flag control (#9649)

Refers #8128 

Changes Introduced:
- Added i18n configuration.
- Added a feature flag for localization.
- Enabled language switching based on the flag.

---------

Co-authored-by: Félix Malfait <felix@twenty.com>
This commit is contained in:
Anne Deepa Prasanna
2025-01-17 01:30:56 +05:30
committed by GitHub
parent b81ffcc77c
commit f44b31573a
38 changed files with 912 additions and 79 deletions

1
.gitignore vendored
View File

@ -18,6 +18,7 @@
!.yarn/sdks
!.yarn/versions
.vercel
.swc
**/**/logs/**

View File

@ -22,6 +22,8 @@
"@jsdevtools/rehype-toc": "^3.0.2",
"@linaria/core": "^6.2.0",
"@linaria/react": "^6.2.1",
"@lingui/core": "^5.1.2",
"@lingui/react": "^5.1.2",
"@mdx-js/react": "^3.0.0",
"@microsoft/microsoft-graph-client": "^3.0.7",
"@nestjs/apollo": "^11.0.5",
@ -202,6 +204,9 @@
"@graphql-codegen/typescript": "^3.0.4",
"@graphql-codegen/typescript-operations": "^3.0.4",
"@graphql-codegen/typescript-react-apollo": "^3.3.7",
"@lingui/cli": "^5.1.2",
"@lingui/swc-plugin": "^5.0.2",
"@lingui/vite-plugin": "^5.1.2",
"@microsoft/microsoft-graph-types": "^2.40.0",
"@nestjs/cli": "^9.0.0",
"@nestjs/schematics": "^9.0.0",

View File

@ -2,7 +2,7 @@
"jsc": {
"target": "es2017",
"parser": {
"syntax": "typescript",
"syntax": "typescript",
"tsx": true,
"decorators": false,
"dynamicImport": false
@ -19,6 +19,19 @@
"hidden": {
"jest": true
}
},
"experimental": {
"plugins": [
[
"@lingui/swc-plugin",
{
"runtimeModules": {
"i18n": ["@lingui/core", "i18n"],
"trans": ["@lingui/react", "Trans"]
}
}
]
]
}
},
"module": {

View File

@ -12,7 +12,16 @@ const jestConfig: JestConfigWithTsJest = {
testEnvironment: 'jsdom',
transformIgnorePatterns: ['../../node_modules/'],
transform: {
'^.+\\.(ts|js|tsx|jsx)$': '@swc/jest',
'^.+\\.(ts|js|tsx|jsx)$': [
'@swc/jest',
{
jsc: {
experimental: {
plugins: [], // Disable Lingui plugin during tests
},
},
},
],
},
moduleNameMapper: {
'\\.(jpg|jpeg|png|gif|webp|svg|svg\\?react)$':

View File

@ -0,0 +1,12 @@
import { defineConfig } from '@lingui/cli';
export default defineConfig({
sourceLocale: 'en',
locales: ['fr', 'en', 'pt', 'de', 'it', 'es', 'zh'],
catalogs: [
{
path: '<rootDir>/src/locales/{locale}/messages',
include: ['src'],
},
],
});

View File

@ -153,6 +153,20 @@
"configurations": {
"ci": {}
}
},
"lingui:extract": {
"executor": "nx:run-commands",
"options": {
"cwd": "{projectRoot}",
"command": "lingui extract"
}
},
"lingui:compile": {
"executor": "nx:run-commands",
"options": {
"cwd": "{projectRoot}",
"command": "lingui compile --typescript"
}
}
}
}

View File

@ -330,7 +330,8 @@ export enum FeatureFlagKey {
IsPostgreSqlIntegrationEnabled = 'IsPostgreSQLIntegrationEnabled',
IsStripeIntegrationEnabled = 'IsStripeIntegrationEnabled',
IsUniqueIndexesEnabled = 'IsUniqueIndexesEnabled',
IsWorkflowEnabled = 'IsWorkflowEnabled'
IsWorkflowEnabled = 'IsWorkflowEnabled',
IsLocalizationEnabled = 'IsLocalizationEnabled'
}
export type FieldConnection = {

View File

@ -0,0 +1 @@
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"vXIe7J\":[\"Language\"],\"AXTJAW\":[\"Select your preferred language\"]}")as Messages;

View File

@ -0,0 +1,16 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2025-01-16 16:50+0100\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: en\n"
#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:51
msgid "Language"
msgstr "Language"
#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:52
msgid "Select your preferred language"
msgstr "Select your preferred language"

View File

@ -0,0 +1 @@
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"vXIe7J\":[\"Language\"],\"AXTJAW\":[\"Select your preferred language\"]}")as Messages;

View File

@ -0,0 +1 @@
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"vXIe7J\":[\"Language\"],\"AXTJAW\":[\"Select your preferred language\"]}")as Messages;

View File

@ -0,0 +1,16 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2025-01-16 16:50+0100\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: fr\n"
#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:51
msgid "Language"
msgstr "Langue"
#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:52
msgid "Select your preferred language"
msgstr "Sélectionnez votre langue préférée"

View File

@ -0,0 +1 @@
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"vXIe7J\":[\"Langue\"],\"AXTJAW\":[\"Sélectionnez votre langue préférée\"]}")as Messages;

View File

@ -0,0 +1 @@
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"vXIe7J\":[\"Language\"],\"AXTJAW\":[\"Select your preferred language\"]}")as Messages;

View File

@ -0,0 +1 @@
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"vXIe7J\":[\"Language\"],\"AXTJAW\":[\"Select your preferred language\"]}")as Messages;

View File

@ -0,0 +1 @@
/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"vXIe7J\":[\"Language\"],\"AXTJAW\":[\"Select your preferred language\"]}")as Messages;

View File

@ -5,29 +5,41 @@ import { RecoilDebugObserverEffect } from '@/debug/components/RecoilDebugObserve
import { AppErrorBoundary } from '@/error-handler/components/AppErrorBoundary';
import { ExceptionHandlerProvider } from '@/error-handler/components/ExceptionHandlerProvider';
import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
import { i18n } from '@lingui/core';
import { I18nProvider } from '@lingui/react';
import { HelmetProvider } from 'react-helmet-async';
import { RecoilRoot } from 'recoil';
import { RecoilURLSyncJSON } from 'recoil-sync';
import { IconsProvider } from 'twenty-ui';
import { messages as enMessages } from '../../../locales/en/messages';
import { messages as frMessages } from '../../../locales/fr/messages';
i18n.load({
en: enMessages,
fr: frMessages,
});
i18n.activate('fr');
export const App = () => {
return (
<RecoilRoot>
<RecoilURLSyncJSON location={{ part: 'queryParams' }}>
<AppErrorBoundary>
<CaptchaProvider>
<RecoilDebugObserverEffect />
<ApolloDevLogEffect />
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager">
<IconsProvider>
<ExceptionHandlerProvider>
<HelmetProvider>
<AppRouter />
</HelmetProvider>
</ExceptionHandlerProvider>
</IconsProvider>
</SnackBarProviderScope>
</CaptchaProvider>
<I18nProvider i18n={i18n}>
<CaptchaProvider>
<RecoilDebugObserverEffect />
<ApolloDevLogEffect />
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager">
<IconsProvider>
<ExceptionHandlerProvider>
<HelmetProvider>
<AppRouter />
</HelmetProvider>
</ExceptionHandlerProvider>
</IconsProvider>
</SnackBarProviderScope>
</CaptchaProvider>
</I18nProvider>
</AppErrorBoundary>
</RecoilURLSyncJSON>
</RecoilRoot>

View File

@ -123,11 +123,11 @@ const SettingsProfile = lazy(() =>
})),
);
const SettingsAppearance = lazy(() =>
const SettingsExperience = lazy(() =>
import(
'~/pages/settings/profile/appearance/components/SettingsAppearance'
'~/pages/settings/profile/appearance/components/SettingsExperience'
).then((module) => ({
default: module.SettingsAppearance,
default: module.SettingsExperience,
})),
);
@ -278,7 +278,7 @@ export const SettingsRoutes = ({
<Suspense fallback={<SettingsSkeletonLoader />}>
<Routes>
<Route path={SettingsPath.ProfilePage} element={<SettingsProfile />} />
<Route path={SettingsPath.Appearance} element={<SettingsAppearance />} />
<Route path={SettingsPath.Experience} element={<SettingsExperience />} />
<Route path={SettingsPath.Accounts} element={<SettingsAccounts />} />
<Route path={SettingsPath.NewAccount} element={<SettingsNewAccount />} />
<Route

View File

@ -60,6 +60,7 @@ import { useRedirectToWorkspaceDomain } from '@/domain-manager/hooks/useRedirect
import { domainConfigurationState } from '@/domain-manager/states/domainConfigurationState';
import { isAppWaitingForFreshObjectMetadataState } from '@/object-metadata/states/isAppWaitingForFreshObjectMetadataState';
import { workspaceAuthProvidersState } from '@/workspace/states/workspaceAuthProvidersState';
import { i18n } from '@lingui/core';
import { useSearchParams } from 'react-router-dom';
export const useAuth = () => {
@ -279,6 +280,7 @@ export const useAuth = () => {
)
: TimeFormat[detectTimeFormat()],
});
i18n.activate(workspaceMember.locale ?? 'en');
}
const workspace = user.currentWorkspace ?? null;

View File

@ -76,6 +76,6 @@ export const Main: Story = {};
export const Settings: Story = {
args: {
mobileNavigationDrawer: 'settings',
routePath: '/settings/appearance',
routePath: '/settings/experience',
},
};

View File

@ -16,8 +16,8 @@ import {
IconPrinter,
IconSettings,
} from 'twenty-ui';
import { FeatureFlag, FieldMetadataType } from '~/generated-metadata/graphql';
import { FeatureFlagKey } from '~/generated/graphql';
import { FieldMetadataType } from '~/generated-metadata/graphql';
import { FeatureFlag, FeatureFlagKey } from '~/generated/graphql';
export const useRecordShowContainerTabs = (
loading: boolean,

View File

@ -106,7 +106,7 @@ export const SettingsNavigationDrawerItems = () => {
/>
<SettingsNavigationDrawerItem
label="Experience"
path={SettingsPath.Appearance}
path={SettingsPath.Experience}
Icon={IconColorSwatch}
/>
<NavigationDrawerItemGroup>

View File

@ -1,6 +1,6 @@
export enum SettingsPath {
ProfilePage = 'profile',
Appearance = 'appearance',
Experience = 'experience',
Accounts = 'accounts',
NewAccount = 'accounts/new',
AccountsCalendars = 'accounts/calendars',

View File

@ -142,7 +142,7 @@ export const Settings: Story = {
/>
<NavigationDrawerItem
label="Appearance"
to={getSettingsPagePath(SettingsPath.Appearance)}
to={getSettingsPagePath(SettingsPath.Experience)}
Icon={IconColorSwatch}
/>
<NavigationDrawerItemGroup>

View File

@ -16,6 +16,7 @@ import { detectTimeZone } from '@/localization/utils/detectTimeZone';
import { getDateFormatFromWorkspaceDateFormat } from '@/localization/utils/getDateFormatFromWorkspaceDateFormat';
import { getTimeFormatFromWorkspaceTimeFormat } from '@/localization/utils/getTimeFormatFromWorkspaceTimeFormat';
import { ColorScheme } from '@/workspace-member/types/WorkspaceMember';
import { i18n } from '@lingui/core';
import { WorkspaceMember } from '~/generated-metadata/graphql';
import { useGetCurrentUserQuery } from '~/generated/graphql';
import { isDefined } from '~/utils/isDefined';
@ -91,6 +92,8 @@ export const UserProviderEffect = () => {
? getTimeFormatFromWorkspaceTimeFormat(workspaceMember.timeFormat)
: TimeFormat[detectTimeFormat()],
});
i18n.activate(workspaceMember.locale ?? 'en');
}
if (isDefined(workspaceMembers)) {

View File

@ -7,15 +7,15 @@ import {
import { graphqlMocks } from '~/testing/graphqlMocks';
import { userEvent, within } from '@storybook/test';
import { SettingsAppearance } from '../profile/appearance/components/SettingsAppearance';
import { SettingsExperience } from '../profile/appearance/components/SettingsExperience';
Date.now = () => new Date('2022-06-13T12:33:37.000Z').getTime();
const meta: Meta<PageDecoratorArgs> = {
title: 'Pages/Settings/SettingsAppearance',
component: SettingsAppearance,
title: 'Pages/Settings/SettingsExperience',
component: SettingsExperience,
decorators: [PageDecorator],
args: { routePath: '/settings/appearance' },
args: { routePath: '/settings/experience' },
parameters: {
msw: graphqlMocks,
date: new Date(2021, 1, 1),
@ -24,13 +24,13 @@ const meta: Meta<PageDecoratorArgs> = {
export default meta;
export type Story = StoryObj<typeof SettingsAppearance>;
export type Story = StoryObj<typeof SettingsExperience>;
export const Default: Story = {
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
await canvas.findByText('Appearance', undefined, {
await canvas.findAllByText('Experience', undefined, {
timeout: 3000,
});

View File

@ -0,0 +1,96 @@
import styled from '@emotion/styled';
import { useRecoilState } from 'recoil';
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord';
import { Select } from '@/ui/input/components/Select';
import { i18n } from '@lingui/core';
import { isDefined } from '~/utils/isDefined';
import { logError } from '~/utils/logError';
const StyledContainer = styled.div`
display: flex;
flex-direction: column;
gap: ${({ theme }) => theme.spacing(4)};
`;
export const LocalePicker = () => {
const [currentWorkspaceMember, setCurrentWorkspaceMember] = useRecoilState(
currentWorkspaceMemberState,
);
const { updateOneRecord } = useUpdateOneRecord({
objectNameSingular: CoreObjectNameSingular.WorkspaceMember,
});
const updateWorkspaceMember = async (changedFields: any) => {
if (!currentWorkspaceMember?.id) {
throw new Error('User is not logged in');
}
try {
await updateOneRecord({
idToUpdate: currentWorkspaceMember.id,
updateOneRecordInput: changedFields,
});
} catch (error) {
logError(error);
}
};
if (!isDefined(currentWorkspaceMember)) return;
const handleLocaleChange = (value: string) => {
setCurrentWorkspaceMember({
...currentWorkspaceMember,
...{ locale: value },
});
updateWorkspaceMember({ locale: value });
i18n.activate(value);
};
return (
<StyledContainer>
<Select
dropdownId="preferred-locale"
dropdownWidthAuto
fullWidth
value={i18n.locale}
options={[
{
label: 'Portuguese',
value: 'pt',
},
{
label: 'French',
value: 'fr',
},
{
label: 'German',
value: 'de',
},
{
label: 'Italian',
value: 'it',
},
{
label: 'Spanish',
value: 'es',
},
{
label: 'English',
value: 'en',
},
{
label: 'Chinese',
value: 'zh',
},
]}
onChange={(value) => handleLocaleChange(value)}
/>
</StyledContainer>
);
};

View File

@ -5,11 +5,22 @@ import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath';
import { SettingsPath } from '@/types/SettingsPath';
import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer';
import { useColorScheme } from '@/ui/theme/hooks/useColorScheme';
import { DateTimeSettings } from '~/pages/settings/profile/appearance/components/DateTimeSettings';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
export const SettingsAppearance = () => {
import { useLingui } from '@lingui/react/macro';
import { FeatureFlagKey } from '~/generated/graphql';
import { DateTimeSettings } from '~/pages/settings/profile/appearance/components/DateTimeSettings';
import { LocalePicker } from '~/pages/settings/profile/appearance/components/LocalePicker';
export const SettingsExperience = () => {
const { colorScheme, setColorScheme } = useColorScheme();
const isLocalizationEnabled = useIsFeatureEnabled(
FeatureFlagKey.IsLocalizationEnabled,
);
const { t } = useLingui();
return (
<SubMenuTopBarContainer
title="Experience"
@ -33,6 +44,16 @@ export const SettingsAppearance = () => {
/>
<DateTimeSettings />
</Section>
{isLocalizationEnabled && (
<Section>
<H2Title
title={t`Language`}
description={t`Select your preferred language`}
/>
<LocalePicker />
</Section>
)}
</SettingsPageContainer>
</SubMenuTopBarContainer>
);

View File

@ -24,7 +24,10 @@ import { RecoilDebugObserverEffect } from '@/debug/components/RecoilDebugObserve
import { ObjectMetadataItemsProvider } from '@/object-metadata/components/ObjectMetadataItemsProvider';
import { PrefetchDataProvider } from '@/prefetch/components/PrefetchDataProvider';
import { WorkspaceProviderEffect } from '@/workspace/components/WorkspaceProviderEffect';
import { i18n } from '@lingui/core';
import { I18nProvider } from '@lingui/react';
import { IconsProvider } from 'twenty-ui';
import { messages as enMessages } from '../../locales/en/messages';
import { FullHeightStorybookLayout } from '../FullHeightStorybookLayout';
export type PageDecoratorArgs = {
@ -63,35 +66,42 @@ const ApolloStorybookDevLogEffect = () => {
return <></>;
};
i18n.load({
en: enMessages,
});
i18n.activate('en');
const Providers = () => {
return (
<RecoilRoot>
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager">
<RecoilDebugObserverEffect />
<ApolloProvider client={mockedApolloClient}>
<ApolloStorybookDevLogEffect />
<ClientConfigProviderEffect />
<ClientConfigProvider>
<UserProviderEffect />
<WorkspaceProviderEffect />
<UserProvider>
<ApolloMetadataClientMockedProvider>
<ObjectMetadataItemsProvider>
<FullHeightStorybookLayout>
<HelmetProvider>
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager">
<IconsProvider>
<PrefetchDataProvider>
<Outlet />
</PrefetchDataProvider>
</IconsProvider>
</SnackBarProviderScope>
</HelmetProvider>
</FullHeightStorybookLayout>
</ObjectMetadataItemsProvider>
</ApolloMetadataClientMockedProvider>
</UserProvider>
</ClientConfigProvider>
<I18nProvider i18n={i18n}>
<ApolloStorybookDevLogEffect />
<ClientConfigProviderEffect />
<ClientConfigProvider>
<UserProviderEffect />
<WorkspaceProviderEffect />
<UserProvider>
<ApolloMetadataClientMockedProvider>
<ObjectMetadataItemsProvider>
<FullHeightStorybookLayout>
<HelmetProvider>
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager">
<IconsProvider>
<PrefetchDataProvider>
<Outlet />
</PrefetchDataProvider>
</IconsProvider>
</SnackBarProviderScope>
</HelmetProvider>
</FullHeightStorybookLayout>
</ObjectMetadataItemsProvider>
</ApolloMetadataClientMockedProvider>
</UserProvider>
</ClientConfigProvider>
</I18nProvider>
</ApolloProvider>
</SnackBarProviderScope>
</RecoilRoot>

View File

@ -15,8 +15,8 @@ describe('title-utils', () => {
expect(getPageTitleFromPath('/settings/profile')).toBe(
SettingsPageTitles.Profile,
);
expect(getPageTitleFromPath('/settings/appearance')).toBe(
SettingsPageTitles.Appearance,
expect(getPageTitleFromPath('/settings/experience')).toBe(
SettingsPageTitles.Experience,
);
expect(getPageTitleFromPath('/settings/accounts')).toBe(
SettingsPageTitles.Accounts,

View File

@ -4,7 +4,7 @@ import { SettingsPath } from '@/types/SettingsPath';
export enum SettingsPageTitles {
Accounts = 'Account - Settings',
Appearance = 'Appearance - Settings',
Experience = 'Experience - Settings',
Profile = 'Profile - Settings',
Objects = 'Data model - Settings',
Members = 'Members - Settings',
@ -17,7 +17,7 @@ export enum SettingsPageTitles {
enum SettingsPathPrefixes {
Accounts = `${AppBasePath.Settings}/${SettingsPath.Accounts}`,
Appearance = `${AppBasePath.Settings}/${SettingsPath.Appearance}`,
Experience = `${AppBasePath.Settings}/${SettingsPath.Experience}`,
Profile = `${AppBasePath.Settings}/${SettingsPath.ProfilePage}`,
Objects = `${AppBasePath.Settings}/${SettingsPath.Objects}`,
Members = `${AppBasePath.Settings}/${SettingsPath.WorkspaceMembersPage}`,
@ -49,8 +49,8 @@ export const getPageTitleFromPath = (pathname: string): string => {
return 'Create Workspace';
case AppPath.CreateProfile:
return 'Create Profile';
case SettingsPathPrefixes.Appearance:
return SettingsPageTitles.Appearance;
case SettingsPathPrefixes.Experience:
return SettingsPageTitles.Experience;
case SettingsPathPrefixes.Accounts:
return SettingsPageTitles.Accounts;
case SettingsPathPrefixes.Profile:

View File

@ -1,4 +1,5 @@
/* eslint-disable no-console */
import { lingui } from '@lingui/vite-plugin';
import { isNonEmptyString } from '@sniptt/guards';
import react from '@vitejs/plugin-react-swc';
import wyw from '@wyw-in-js/vite';
@ -93,11 +94,17 @@ export default defineConfig(({ command, mode }) => {
},
plugins: [
react({ jsxImportSource: '@emotion/react' }),
react({
jsxImportSource: '@emotion/react',
plugins: [['@lingui/swc-plugin', {}]],
}),
tsconfigPaths({
projects: ['tsconfig.json', '../twenty-ui/tsconfig.json'],
}),
svgr(),
lingui({
configPath: path.resolve(__dirname, './lingui.config.ts'),
}),
checker(checkers),
// TODO: fix this, we have to restrict the include to only the components that are using linaria
// Otherwise the build will fail because wyw tries to include emotion styled components

View File

@ -75,6 +75,11 @@ export const seedFeatureFlags = async (
workspaceId: workspaceId,
value: true,
},
{
key: FeatureFlagKey.IsLocalizationEnabled,
workspaceId: workspaceId,
value: true,
},
])
.execute();
};

View File

@ -15,4 +15,5 @@ export enum FeatureFlagKey {
IsCommandMenuV2Enabled = 'IS_COMMAND_MENU_V2_ENABLED',
IsCrmMigrationEnabled = 'IS_CRM_MIGRATION_ENABLED',
IsJsonFilterEnabled = 'IS_JSON_FILTER_ENABLED',
IsLocalizationEnabled = 'IS_LOCALIZATION_ENABLED',
}

View File

@ -8,4 +8,4 @@
"http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","en-US","/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:38:02.518","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
"http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","en-US","/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:41:11.844","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
"http://localhost:3001/settings/profile","en-US","/settings/profile","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:41:23.864","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
"http://localhost:3001/settings/appearance","en-US","/settings/appearance","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:41:25.972","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
"http://localhost:3001/settings/experience","en-US","/settings/experience","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:41:25.972","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"

1 href locale pathname referrer sessionId timeZone timestamp userAgent userId version workspaceId
8 http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d en-US /settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d 8fc30143-b648-4fc0-afe7-e55e1c452003 Europe/Paris 2024-10-17 12:38:02.518 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 20202020-9e3b-46d4-a556-88b9ddc2b034 1 20202020-1c25-4d02-bf25-6aeccf7ea419
9 http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d en-US /settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d 8fc30143-b648-4fc0-afe7-e55e1c452003 Europe/Paris 2024-10-17 12:41:11.844 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 20202020-9e3b-46d4-a556-88b9ddc2b034 1 20202020-1c25-4d02-bf25-6aeccf7ea419
10 http://localhost:3001/settings/profile en-US /settings/profile http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d 8fc30143-b648-4fc0-afe7-e55e1c452003 Europe/Paris 2024-10-17 12:41:23.864 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 20202020-9e3b-46d4-a556-88b9ddc2b034 1 20202020-1c25-4d02-bf25-6aeccf7ea419
11 http://localhost:3001/settings/appearance http://localhost:3001/settings/experience en-US /settings/appearance /settings/experience http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d 8fc30143-b648-4fc0-afe7-e55e1c452003 Europe/Paris 2024-10-17 12:41:25.972 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 20202020-9e3b-46d4-a556-88b9ddc2b034 1 20202020-1c25-4d02-bf25-6aeccf7ea419

View File

@ -28,6 +28,13 @@ npx nx run twenty-front:graphql:generate
npx nx run twenty-front:lint # pass --fix to fix lint errors
```
## Translations
```bash
npx nx run twenty-front:lingui:extract
npx nx run twenty-front:lingui:compile
```
### Test
```bash

603
yarn.lock
View File

@ -1610,6 +1610,17 @@ __metadata:
languageName: node
linkType: hard
"@babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2":
version: 7.26.2
resolution: "@babel/code-frame@npm:7.26.2"
dependencies:
"@babel/helper-validator-identifier": "npm:^7.25.9"
js-tokens: "npm:^4.0.0"
picocolors: "npm:^1.0.0"
checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8
languageName: node
linkType: hard
"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2":
version: 7.25.2
resolution: "@babel/compat-data@npm:7.25.2"
@ -1617,6 +1628,13 @@ __metadata:
languageName: node
linkType: hard
"@babel/compat-data@npm:^7.26.5":
version: 7.26.5
resolution: "@babel/compat-data@npm:7.26.5"
checksum: 10c0/9d2b41f0948c3dfc5de44d9f789d2208c2ea1fd7eb896dfbb297fe955e696728d6f363c600cd211e7f58ccbc2d834fe516bb1e4cf883bbabed8a32b038afc1a0
languageName: node
linkType: hard
"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0, @babel/core@npm:^7.14.5, @babel/core@npm:^7.18.9, @babel/core@npm:^7.20.12, @babel/core@npm:^7.21.3, @babel/core@npm:^7.22.5, @babel/core@npm:^7.23.0, @babel/core@npm:^7.23.2, @babel/core@npm:^7.23.5, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.5, @babel/core@npm:^7.7.5":
version: 7.25.2
resolution: "@babel/core@npm:7.25.2"
@ -1640,6 +1658,29 @@ __metadata:
languageName: node
linkType: hard
"@babel/core@npm:^7.21.0":
version: 7.26.0
resolution: "@babel/core@npm:7.26.0"
dependencies:
"@ampproject/remapping": "npm:^2.2.0"
"@babel/code-frame": "npm:^7.26.0"
"@babel/generator": "npm:^7.26.0"
"@babel/helper-compilation-targets": "npm:^7.25.9"
"@babel/helper-module-transforms": "npm:^7.26.0"
"@babel/helpers": "npm:^7.26.0"
"@babel/parser": "npm:^7.26.0"
"@babel/template": "npm:^7.25.9"
"@babel/traverse": "npm:^7.25.9"
"@babel/types": "npm:^7.26.0"
convert-source-map: "npm:^2.0.0"
debug: "npm:^4.1.0"
gensync: "npm:^1.0.0-beta.2"
json5: "npm:^2.2.3"
semver: "npm:^6.3.1"
checksum: 10c0/91de73a7ff5c4049fbc747930aa039300e4d2670c2a91f5aa622f1b4868600fc89b01b6278385fbcd46f9574186fa3d9b376a9e7538e50f8d118ec13cfbcb63e
languageName: node
linkType: hard
"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.22.5, @babel/generator@npm:^7.23.0, @babel/generator@npm:^7.23.5, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.7.2":
version: 7.25.0
resolution: "@babel/generator@npm:7.25.0"
@ -1652,6 +1693,19 @@ __metadata:
languageName: node
linkType: hard
"@babel/generator@npm:^7.21.1, @babel/generator@npm:^7.26.0, @babel/generator@npm:^7.26.5":
version: 7.26.5
resolution: "@babel/generator@npm:7.26.5"
dependencies:
"@babel/parser": "npm:^7.26.5"
"@babel/types": "npm:^7.26.5"
"@jridgewell/gen-mapping": "npm:^0.3.5"
"@jridgewell/trace-mapping": "npm:^0.3.25"
jsesc: "npm:^3.0.2"
checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0
languageName: node
linkType: hard
"@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.24.7":
version: 7.24.7
resolution: "@babel/helper-annotate-as-pure@npm:7.24.7"
@ -1684,6 +1738,19 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-compilation-targets@npm:^7.25.9":
version: 7.26.5
resolution: "@babel/helper-compilation-targets@npm:7.26.5"
dependencies:
"@babel/compat-data": "npm:^7.26.5"
"@babel/helper-validator-option": "npm:^7.25.9"
browserslist: "npm:^4.24.0"
lru-cache: "npm:^5.1.1"
semver: "npm:^6.3.1"
checksum: 10c0/9da5c77e5722f1a2fcb3e893049a01d414124522bbf51323bb1a0c9dcd326f15279836450fc36f83c9e8a846f3c40e88be032ed939c5a9840922bed6073edfb4
languageName: node
linkType: hard
"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.0":
version: 7.25.0
resolution: "@babel/helper-create-class-features-plugin@npm:7.25.0"
@ -1749,6 +1816,16 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-module-imports@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/helper-module-imports@npm:7.25.9"
dependencies:
"@babel/traverse": "npm:^7.25.9"
"@babel/types": "npm:^7.25.9"
checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70
languageName: node
linkType: hard
"@babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.0, @babel/helper-module-transforms@npm:^7.25.2":
version: 7.25.2
resolution: "@babel/helper-module-transforms@npm:7.25.2"
@ -1763,6 +1840,19 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-module-transforms@npm:^7.26.0":
version: 7.26.0
resolution: "@babel/helper-module-transforms@npm:7.26.0"
dependencies:
"@babel/helper-module-imports": "npm:^7.25.9"
"@babel/helper-validator-identifier": "npm:^7.25.9"
"@babel/traverse": "npm:^7.25.9"
peerDependencies:
"@babel/core": ^7.0.0
checksum: 10c0/ee111b68a5933481d76633dad9cdab30c41df4479f0e5e1cc4756dc9447c1afd2c9473b5ba006362e35b17f4ebddd5fca090233bef8dfc84dca9d9127e56ec3a
languageName: node
linkType: hard
"@babel/helper-optimise-call-expression@npm:^7.24.7":
version: 7.24.7
resolution: "@babel/helper-optimise-call-expression@npm:7.24.7"
@ -1832,6 +1922,13 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-string-parser@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/helper-string-parser@npm:7.25.9"
checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6
languageName: node
linkType: hard
"@babel/helper-validator-identifier@npm:^7.22.20, @babel/helper-validator-identifier@npm:^7.24.7":
version: 7.24.7
resolution: "@babel/helper-validator-identifier@npm:7.24.7"
@ -1839,6 +1936,13 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-validator-identifier@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/helper-validator-identifier@npm:7.25.9"
checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d
languageName: node
linkType: hard
"@babel/helper-validator-option@npm:^7.24.7, @babel/helper-validator-option@npm:^7.24.8":
version: 7.24.8
resolution: "@babel/helper-validator-option@npm:7.24.8"
@ -1846,6 +1950,13 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-validator-option@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/helper-validator-option@npm:7.25.9"
checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e
languageName: node
linkType: hard
"@babel/helper-wrap-function@npm:^7.25.0":
version: 7.25.0
resolution: "@babel/helper-wrap-function@npm:7.25.0"
@ -1867,6 +1978,16 @@ __metadata:
languageName: node
linkType: hard
"@babel/helpers@npm:^7.26.0":
version: 7.26.0
resolution: "@babel/helpers@npm:7.26.0"
dependencies:
"@babel/template": "npm:^7.25.9"
"@babel/types": "npm:^7.26.0"
checksum: 10c0/343333cced6946fe46617690a1d0789346960910225ce359021a88a60a65bc0d791f0c5d240c0ed46cf8cc63b5fd7df52734ff14e43b9c32feae2b61b1647097
languageName: node
linkType: hard
"@babel/highlight@npm:^7.24.7":
version: 7.24.7
resolution: "@babel/highlight@npm:7.24.7"
@ -1890,6 +2011,17 @@ __metadata:
languageName: node
linkType: hard
"@babel/parser@npm:^7.22.0, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.5":
version: 7.26.5
resolution: "@babel/parser@npm:7.26.5"
dependencies:
"@babel/types": "npm:^7.26.5"
bin:
parser: ./bin/babel-parser.js
checksum: 10c0/2e77dd99ee028ee3c10fa03517ae1169f2432751adf71315e4dc0d90b61639d51760d622f418f6ac665ae4ea65f8485232a112ea0e76f18e5900225d3d19a61e
languageName: node
linkType: hard
"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.3":
version: 7.25.3
resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.3"
@ -3207,6 +3339,17 @@ __metadata:
languageName: node
linkType: hard
"@babel/template@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/template@npm:7.25.9"
dependencies:
"@babel/code-frame": "npm:^7.25.9"
"@babel/parser": "npm:^7.25.9"
"@babel/types": "npm:^7.25.9"
checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab
languageName: node
linkType: hard
"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.5, @babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3":
version: 7.25.3
resolution: "@babel/traverse@npm:7.25.3"
@ -3222,6 +3365,21 @@ __metadata:
languageName: node
linkType: hard
"@babel/traverse@npm:^7.25.9":
version: 7.26.5
resolution: "@babel/traverse@npm:7.26.5"
dependencies:
"@babel/code-frame": "npm:^7.26.2"
"@babel/generator": "npm:^7.26.5"
"@babel/parser": "npm:^7.26.5"
"@babel/template": "npm:^7.25.9"
"@babel/types": "npm:^7.26.5"
debug: "npm:^4.3.1"
globals: "npm:^11.1.0"
checksum: 10c0/0779059ecf63e31446564cf31adf170e701e8017ef02c819c57924a9a83d6b2ce41dbff3ef295589da9410497a3e575655bb8084ca470e0ab1bc193128afa9fe
languageName: node
linkType: hard
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.5, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
version: 7.25.2
resolution: "@babel/types@npm:7.25.2"
@ -3233,6 +3391,16 @@ __metadata:
languageName: node
linkType: hard
"@babel/types@npm:^7.21.2, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.5":
version: 7.26.5
resolution: "@babel/types@npm:7.26.5"
dependencies:
"@babel/helper-string-parser": "npm:^7.25.9"
"@babel/helper-validator-identifier": "npm:^7.25.9"
checksum: 10c0/0278053b69d7c2b8573aa36dc5242cad95f0d965e1c0ed21ccacac6330092e59ba5949753448f6d6eccf6ad59baaef270295cc05218352e060ea8c68388638c4
languageName: node
linkType: hard
"@base2/pretty-print-object@npm:1.0.1":
version: 1.0.1
resolution: "@base2/pretty-print-object@npm:1.0.1"
@ -6738,6 +6906,172 @@ __metadata:
languageName: node
linkType: hard
"@lingui/babel-plugin-extract-messages@npm:^5.1.2":
version: 5.1.2
resolution: "@lingui/babel-plugin-extract-messages@npm:5.1.2"
checksum: 10c0/57152f6eae9b12d20a8dee9e0fb1c7b31d0f5dcf477c14db77b949d935390f9917dd01c7f746372a74ef81f51f92d79c6e90eea7def01b505e7591955dae41ef
languageName: node
linkType: hard
"@lingui/babel-plugin-lingui-macro@npm:^5.1.2":
version: 5.1.2
resolution: "@lingui/babel-plugin-lingui-macro@npm:5.1.2"
dependencies:
"@babel/core": "npm:^7.20.12"
"@babel/runtime": "npm:^7.20.13"
"@babel/types": "npm:^7.20.7"
"@lingui/conf": "npm:^5.1.2"
"@lingui/core": "npm:^5.1.2"
"@lingui/message-utils": "npm:^5.1.2"
peerDependencies:
babel-plugin-macros: 2 || 3
peerDependenciesMeta:
babel-plugin-macros:
optional: true
checksum: 10c0/b8b82e19a7b8dd227c2b4d6f6c0759c9cf64be6833cfe8c7e69813b5d8a12d12e56f19c4e9770aec93db92495dc8dc72b95a2b2c1b4bd59414c87090137d74ca
languageName: node
linkType: hard
"@lingui/cli@npm:^5.1.2":
version: 5.1.2
resolution: "@lingui/cli@npm:5.1.2"
dependencies:
"@babel/core": "npm:^7.21.0"
"@babel/generator": "npm:^7.21.1"
"@babel/parser": "npm:^7.22.0"
"@babel/runtime": "npm:^7.21.0"
"@babel/types": "npm:^7.21.2"
"@lingui/babel-plugin-extract-messages": "npm:^5.1.2"
"@lingui/babel-plugin-lingui-macro": "npm:^5.1.2"
"@lingui/conf": "npm:^5.1.2"
"@lingui/core": "npm:^5.1.2"
"@lingui/format-po": "npm:^5.1.2"
"@lingui/message-utils": "npm:^5.1.2"
babel-plugin-macros: "npm:^3.0.1"
chalk: "npm:^4.1.0"
chokidar: "npm:3.5.1"
cli-table: "npm:^0.3.11"
commander: "npm:^10.0.0"
convert-source-map: "npm:^2.0.0"
date-fns: "npm:^3.6.0"
esbuild: "npm:^0.21.5"
glob: "npm:^11.0.0"
inquirer: "npm:^7.3.3"
micromatch: "npm:^4.0.7"
normalize-path: "npm:^3.0.0"
ora: "npm:^5.1.0"
pathe: "npm:^1.1.0"
pkg-up: "npm:^3.1.0"
pofile: "npm:^1.1.4"
pseudolocale: "npm:^2.0.0"
ramda: "npm:^0.27.1"
source-map: "npm:^0.8.0-beta.0"
bin:
lingui: ./dist/lingui.js
checksum: 10c0/c29055b4d2bcfc50e343dbecb786fac63c084ff6fbfc589979cca46dba8d5b76a7b045b2d3be43a672b53c22222ab68b6341d23eb0fedf0a1345912715c4622d
languageName: node
linkType: hard
"@lingui/conf@npm:^5.1.2":
version: 5.1.2
resolution: "@lingui/conf@npm:5.1.2"
dependencies:
"@babel/runtime": "npm:^7.20.13"
chalk: "npm:^4.1.0"
cosmiconfig: "npm:^8.0.0"
jest-validate: "npm:^29.4.3"
jiti: "npm:^1.17.1"
lodash.get: "npm:^4.4.2"
checksum: 10c0/01a29754db921f920031c4db007d13f0de0bec5ee58978ded0018cfa862819013a06a45349e0c05ac47d0dde3b58d1120fb4f027ae95b8e2b9afcde8d925e061
languageName: node
linkType: hard
"@lingui/core@npm:^5.1.2":
version: 5.1.2
resolution: "@lingui/core@npm:5.1.2"
dependencies:
"@babel/runtime": "npm:^7.20.13"
"@lingui/message-utils": "npm:^5.1.2"
unraw: "npm:^3.0.0"
peerDependencies:
"@lingui/babel-plugin-lingui-macro": 5.1.2
babel-plugin-macros: 2 || 3
peerDependenciesMeta:
"@lingui/babel-plugin-lingui-macro":
optional: true
babel-plugin-macros:
optional: true
checksum: 10c0/94092bc8630395af5093c0661c1d8f8d6525f09d55be5e68f948e5b9c79e47ef627b12c6102dbe764113695e477a6bb46caae335869b4ef818e452ef202520ac
languageName: node
linkType: hard
"@lingui/format-po@npm:^5.1.2":
version: 5.1.2
resolution: "@lingui/format-po@npm:5.1.2"
dependencies:
"@lingui/conf": "npm:^5.1.2"
"@lingui/message-utils": "npm:^5.1.2"
date-fns: "npm:^3.6.0"
pofile: "npm:^1.1.4"
checksum: 10c0/a2c46399e6fb46e75f84e1c30b2642a6fc4c18090efed9f3d28b0f5bad529dd0e86a548987bf92e294248e12fdf29741c0c694f59db2037c2f02458a5521c56f
languageName: node
linkType: hard
"@lingui/message-utils@npm:^5.1.2":
version: 5.1.2
resolution: "@lingui/message-utils@npm:5.1.2"
dependencies:
"@messageformat/parser": "npm:^5.0.0"
js-sha256: "npm:^0.10.1"
checksum: 10c0/9b7636327c9399964cf203f5383a42475346b311c31e9fcf329d6a795f04c99886aaf17be17a658c5f112750f74ecb1c413ad91749bcd2f53f44e546c438fa6d
languageName: node
linkType: hard
"@lingui/react@npm:^5.1.2":
version: 5.1.2
resolution: "@lingui/react@npm:5.1.2"
dependencies:
"@babel/runtime": "npm:^7.20.13"
"@lingui/core": "npm:^5.1.2"
peerDependencies:
"@lingui/babel-plugin-lingui-macro": 5.1.2
babel-plugin-macros: 2 || 3
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
peerDependenciesMeta:
"@lingui/babel-plugin-lingui-macro":
optional: true
babel-plugin-macros:
optional: true
checksum: 10c0/894476f00918140fe186ef6f53e150d00dd850d9cf7ed93ca91f14d3bcc00eeb6701afca8c26e96db602fb9c545bb694eea014566653e5da38a11d685e3525d7
languageName: node
linkType: hard
"@lingui/swc-plugin@npm:^5.0.2":
version: 5.0.2
resolution: "@lingui/swc-plugin@npm:5.0.2"
peerDependencies:
"@lingui/core": 5
peerDependenciesMeta:
"@swc/core":
optional: true
next:
optional: true
checksum: 10c0/5f7ca68349b642f7034800f6080c4f28f33d97059a8611144b9d78878cf14727b9293e4f5aec5c82a4930617f4bcacd2c25618e6d39ded7ceac15465f3b5aed2
languageName: node
linkType: hard
"@lingui/vite-plugin@npm:^5.1.2":
version: 5.1.2
resolution: "@lingui/vite-plugin@npm:5.1.2"
dependencies:
"@lingui/cli": "npm:^5.1.2"
"@lingui/conf": "npm:^5.1.2"
peerDependencies:
vite: ^3 || ^4 || ^5.0.9 || ^6
checksum: 10c0/38acf4a58cdce908aaa77e6a10ade0c1692fa485a7c208f877451ae3cfea9102492313458b002e36cb066849d469021881893ada174a39589538f3d89c792d4b
languageName: node
linkType: hard
"@ljharb/through@npm:^2.3.9":
version: 2.3.13
resolution: "@ljharb/through@npm:2.3.13"
@ -6858,6 +7192,15 @@ __metadata:
languageName: node
linkType: hard
"@messageformat/parser@npm:^5.0.0":
version: 5.1.1
resolution: "@messageformat/parser@npm:5.1.1"
dependencies:
moo: "npm:^0.5.1"
checksum: 10c0/fc24596d85a20fa9959a0a1c34f9bfd341e4f6eb235d0648e54296e0bed2ebe91d067c7b91036aea8cc2e4af4ddb0722257b0c04f3c610cd9c7ef4f7659d8668
languageName: node
linkType: hard
"@microsoft/api-extractor-model@npm:7.28.13":
version: 7.28.13
resolution: "@microsoft/api-extractor-model@npm:7.28.13"
@ -18874,7 +19217,7 @@ __metadata:
languageName: node
linkType: hard
"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2":
"anymatch@npm:^3.0.3, anymatch@npm:~3.1.1, anymatch@npm:~3.1.2":
version: 3.1.3
resolution: "anymatch@npm:3.1.3"
dependencies:
@ -19952,7 +20295,7 @@ __metadata:
languageName: node
linkType: hard
"babel-plugin-macros@npm:^3.1.0":
"babel-plugin-macros@npm:^3.0.1, babel-plugin-macros@npm:^3.1.0":
version: 3.1.0
resolution: "babel-plugin-macros@npm:3.1.0"
dependencies:
@ -21283,6 +21626,20 @@ __metadata:
languageName: node
linkType: hard
"browserslist@npm:^4.24.0":
version: 4.24.4
resolution: "browserslist@npm:4.24.4"
dependencies:
caniuse-lite: "npm:^1.0.30001688"
electron-to-chromium: "npm:^1.5.73"
node-releases: "npm:^2.0.19"
update-browserslist-db: "npm:^1.1.1"
bin:
browserslist: cli.js
checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9
languageName: node
linkType: hard
"bs-logger@npm:0.x":
version: 0.2.6
resolution: "bs-logger@npm:0.2.6"
@ -21704,6 +22061,13 @@ __metadata:
languageName: node
linkType: hard
"caniuse-lite@npm:^1.0.30001688":
version: 1.0.30001692
resolution: "caniuse-lite@npm:1.0.30001692"
checksum: 10c0/fca5105561ea12f3de593f3b0f062af82f7d07519e8dbcb97f34e7fd23349bcef1b1622a9a6cd2164d98e3d2f20059ef7e271edae46567aef88caf4c16c7708a
languageName: node
linkType: hard
"capital-case@npm:^1.0.4":
version: 1.0.4
resolution: "capital-case@npm:1.0.4"
@ -21992,6 +22356,25 @@ __metadata:
languageName: node
linkType: hard
"chokidar@npm:3.5.1":
version: 3.5.1
resolution: "chokidar@npm:3.5.1"
dependencies:
anymatch: "npm:~3.1.1"
braces: "npm:~3.0.2"
fsevents: "npm:~2.3.1"
glob-parent: "npm:~5.1.0"
is-binary-path: "npm:~2.1.0"
is-glob: "npm:~4.0.1"
normalize-path: "npm:~3.0.0"
readdirp: "npm:~3.5.0"
dependenciesMeta:
fsevents:
optional: true
checksum: 10c0/894d2fdeeef6a0bc61993a20b864e29e9296f2308628b8b2edf1bef2d59ab11f21938eebbbcbf581f15d16d3e030c08860d2fb035f7b9f3baebac57049a37959
languageName: node
linkType: hard
"chokidar@npm:3.5.3":
version: 3.5.3
resolution: "chokidar@npm:3.5.3"
@ -22285,7 +22668,7 @@ __metadata:
languageName: node
linkType: hard
"cli-table@npm:^0.3.1":
"cli-table@npm:^0.3.1, cli-table@npm:^0.3.11":
version: 0.3.11
resolution: "cli-table@npm:0.3.11"
dependencies:
@ -24063,7 +24446,7 @@ __metadata:
languageName: node
linkType: hard
"date-fns@npm:^3.3.1":
"date-fns@npm:^3.3.1, date-fns@npm:^3.6.0":
version: 3.6.0
resolution: "date-fns@npm:3.6.0"
checksum: 10c0/0b5fb981590ef2f8e5a3ba6cd6d77faece0ea7f7158948f2eaae7bbb7c80a8f63ae30b01236c2923cf89bb3719c33aeb150c715ea4fe4e86e37dcf06bed42fb6
@ -25129,6 +25512,13 @@ __metadata:
languageName: node
linkType: hard
"electron-to-chromium@npm:^1.5.73":
version: 1.5.83
resolution: "electron-to-chromium@npm:1.5.83"
checksum: 10c0/12380962d057c4679add1047cdddb18b909904614272da0527e505a3859eaffde2022dd0688ce7f230582de96405c3d33b667680614475cdafd3f629caa2fee1
languageName: node
linkType: hard
"elliptic@npm:^6.5.3, elliptic@npm:^6.5.5":
version: 6.5.6
resolution: "elliptic@npm:6.5.6"
@ -25729,7 +26119,7 @@ __metadata:
languageName: node
linkType: hard
"esbuild@npm:^0.21.3":
"esbuild@npm:^0.21.3, esbuild@npm:^0.21.5":
version: 0.21.5
resolution: "esbuild@npm:0.21.5"
dependencies:
@ -25899,6 +26289,13 @@ __metadata:
languageName: node
linkType: hard
"escalade@npm:^3.2.0":
version: 3.2.0
resolution: "escalade@npm:3.2.0"
checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65
languageName: node
linkType: hard
"escape-carriage@npm:^1.3.1":
version: 1.3.1
resolution: "escape-carriage@npm:1.3.1"
@ -27848,7 +28245,7 @@ __metadata:
languageName: node
linkType: hard
"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3":
"fsevents@npm:^2.3.2, fsevents@npm:~2.3.1, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3":
version: 2.3.3
resolution: "fsevents@npm:2.3.3"
dependencies:
@ -27867,7 +28264,7 @@ __metadata:
languageName: node
linkType: hard
"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin<compat/fsevents>, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin<compat/fsevents>, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin<compat/fsevents>":
"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin<compat/fsevents>, fsevents@patch:fsevents@npm%3A~2.3.1#optional!builtin<compat/fsevents>, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin<compat/fsevents>, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin<compat/fsevents>":
version: 2.3.3
resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin<compat/fsevents>::version=2.3.3&hash=df0bf1"
dependencies:
@ -28190,7 +28587,7 @@ __metadata:
languageName: node
linkType: hard
"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2":
"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.0, glob-parent@npm:~5.1.2":
version: 5.1.2
resolution: "glob-parent@npm:5.1.2"
dependencies:
@ -28271,6 +28668,22 @@ __metadata:
languageName: node
linkType: hard
"glob@npm:^11.0.0":
version: 11.0.1
resolution: "glob@npm:11.0.1"
dependencies:
foreground-child: "npm:^3.1.0"
jackspeak: "npm:^4.0.1"
minimatch: "npm:^10.0.0"
minipass: "npm:^7.1.2"
package-json-from-dist: "npm:^1.0.0"
path-scurry: "npm:^2.0.0"
bin:
glob: dist/esm/bin.mjs
checksum: 10c0/2b32588be52e9e90f914c7d8dec32f3144b81b84054b0f70e9adfebf37cd7014570489f2a79d21f7801b9a4bd4cca94f426966bfd00fb64a5b705cfe10da3a03
languageName: node
linkType: hard
"glob@npm:^7.0.0, glob@npm:^7.1.0, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0, glob@npm:^7.2.3":
version: 7.2.3
resolution: "glob@npm:7.2.3"
@ -30272,6 +30685,27 @@ __metadata:
languageName: node
linkType: hard
"inquirer@npm:^7.3.3":
version: 7.3.3
resolution: "inquirer@npm:7.3.3"
dependencies:
ansi-escapes: "npm:^4.2.1"
chalk: "npm:^4.1.0"
cli-cursor: "npm:^3.1.0"
cli-width: "npm:^3.0.0"
external-editor: "npm:^3.0.3"
figures: "npm:^3.0.0"
lodash: "npm:^4.17.19"
mute-stream: "npm:0.0.8"
run-async: "npm:^2.4.0"
rxjs: "npm:^6.6.0"
string-width: "npm:^4.1.0"
strip-ansi: "npm:^6.0.0"
through: "npm:^2.3.6"
checksum: 10c0/96e75974cfd863fe6653c075e41fa5f1a290896df141189816db945debabcd92d3277145f11aef8d2cfca5409ab003ccdd18a099744814057b52a2f27aeb8c94
languageName: node
linkType: hard
"insert-module-globals@npm:^7.2.1":
version: 7.2.1
resolution: "insert-module-globals@npm:7.2.1"
@ -31364,6 +31798,15 @@ __metadata:
languageName: node
linkType: hard
"jackspeak@npm:^4.0.1":
version: 4.0.2
resolution: "jackspeak@npm:4.0.2"
dependencies:
"@isaacs/cliui": "npm:^8.0.2"
checksum: 10c0/b26039d11c0163a95b1e58851b9ac453cce64ad6d1eb98a00b303ad5eeb761b29d33c9419d1e16c016d3f7151c8edf7df223e6cf93a1907655fd95d6ce85c0de
languageName: node
linkType: hard
"jake@npm:^10.8.5":
version: 10.9.2
resolution: "jake@npm:10.9.2"
@ -31907,7 +32350,7 @@ __metadata:
languageName: node
linkType: hard
"jest-validate@npm:^29.7.0":
"jest-validate@npm:^29.4.3, jest-validate@npm:^29.7.0":
version: 29.7.0
resolution: "jest-validate@npm:29.7.0"
dependencies:
@ -32166,6 +32609,13 @@ __metadata:
languageName: node
linkType: hard
"js-sha256@npm:^0.10.1":
version: 0.10.1
resolution: "js-sha256@npm:0.10.1"
checksum: 10c0/c63119f7c7f8afc24bfa24c1a6b51147c3b562316b6341a375a1cef88569340ec0dbf2cda429ecf472cabfbae47a0b93a0cb82b8730883de066593c3f816c53b
languageName: node
linkType: hard
"js-sha3@npm:0.8.0":
version: 0.8.0
resolution: "js-sha3@npm:0.8.0"
@ -33843,6 +34293,13 @@ __metadata:
languageName: node
linkType: hard
"lru-cache@npm:^11.0.0":
version: 11.0.2
resolution: "lru-cache@npm:11.0.2"
checksum: 10c0/c993b8e06ead0b24b969c1dbb5b301716aed66e320e9014a80012f5febe280b438f28ff50046b2c55ff404e889351ccb332ff91f8dd175a21f5eae80e3fb155f
languageName: node
linkType: hard
"lru-cache@npm:^4.0.1":
version: 4.1.5
resolution: "lru-cache@npm:4.1.5"
@ -35373,7 +35830,7 @@ __metadata:
languageName: node
linkType: hard
"micromatch@npm:^4.0.8":
"micromatch@npm:^4.0.7, micromatch@npm:^4.0.8":
version: 4.0.8
resolution: "micromatch@npm:4.0.8"
dependencies:
@ -35537,6 +35994,15 @@ __metadata:
languageName: node
linkType: hard
"minimatch@npm:^10.0.0":
version: 10.0.1
resolution: "minimatch@npm:10.0.1"
dependencies:
brace-expansion: "npm:^2.0.1"
checksum: 10c0/e6c29a81fe83e1877ad51348306be2e8aeca18c88fdee7a99df44322314279e15799e41d7cb274e4e8bb0b451a3bc622d6182e157dfa1717d6cda75e9cd8cd5d
languageName: node
linkType: hard
"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2":
version: 3.1.2
resolution: "minimatch@npm:3.1.2"
@ -35869,6 +36335,13 @@ __metadata:
languageName: node
linkType: hard
"moo@npm:^0.5.1":
version: 0.5.2
resolution: "moo@npm:0.5.2"
checksum: 10c0/a9d9ad8198a51fe35d297f6e9fdd718298ca0b39a412e868a0ebd92286379ab4533cfc1f1f34516177f5129988ab25fe598f78e77c84e3bfe0d4a877b56525a8
languageName: node
linkType: hard
"motion-dom@npm:^11.16.4":
version: 11.16.4
resolution: "motion-dom@npm:11.16.4"
@ -36607,6 +37080,13 @@ __metadata:
languageName: node
linkType: hard
"node-releases@npm:^2.0.19":
version: 2.0.19
resolution: "node-releases@npm:2.0.19"
checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa
languageName: node
linkType: hard
"nodemailer@npm:^6.9.8":
version: 6.9.14
resolution: "nodemailer@npm:6.9.14"
@ -37461,7 +37941,7 @@ __metadata:
languageName: node
linkType: hard
"ora@npm:5.4.1, ora@npm:^5.4.1":
"ora@npm:5.4.1, ora@npm:^5.1.0, ora@npm:^5.4.1":
version: 5.4.1
resolution: "ora@npm:5.4.1"
dependencies:
@ -38231,6 +38711,16 @@ __metadata:
languageName: node
linkType: hard
"path-scurry@npm:^2.0.0":
version: 2.0.0
resolution: "path-scurry@npm:2.0.0"
dependencies:
lru-cache: "npm:^11.0.0"
minipass: "npm:^7.1.2"
checksum: 10c0/3da4adedaa8e7ef8d6dc4f35a0ff8f05a9b4d8365f2b28047752b62d4c1ad73eec21e37b1579ef2d075920157856a3b52ae8309c480a6f1a8bbe06ff8e52b33c
languageName: node
linkType: hard
"path-to-regexp@npm:0.1.7":
version: 0.1.7
resolution: "path-to-regexp@npm:0.1.7"
@ -38275,7 +38765,7 @@ __metadata:
languageName: node
linkType: hard
"pathe@npm:^1.1.1, pathe@npm:^1.1.2":
"pathe@npm:^1.1.0, pathe@npm:^1.1.1, pathe@npm:^1.1.2":
version: 1.1.2
resolution: "pathe@npm:1.1.2"
checksum: 10c0/64ee0a4e587fb0f208d9777a6c56e4f9050039268faaaaecd50e959ef01bf847b7872785c36483fa5cdcdbdfdb31fef2ff222684d4fc21c330ab60395c681897
@ -38505,6 +38995,13 @@ __metadata:
languageName: node
linkType: hard
"picocolors@npm:^1.1.1":
version: 1.1.1
resolution: "picocolors@npm:1.1.1"
checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58
languageName: node
linkType: hard
"picomatch@npm:3.0.1":
version: 3.0.1
resolution: "picomatch@npm:3.0.1"
@ -38611,6 +39108,15 @@ __metadata:
languageName: node
linkType: hard
"pkg-up@npm:^3.1.0":
version: 3.1.0
resolution: "pkg-up@npm:3.1.0"
dependencies:
find-up: "npm:^3.0.0"
checksum: 10c0/ecb60e1f8e1f611c0bdf1a0b6a474d6dfb51185567dc6f29cdef37c8d480ecba5362e006606bb290519bbb6f49526c403fabea93c3090c20368d98bb90c999ab
languageName: node
linkType: hard
"planer@npm:^1.2.0":
version: 1.2.0
resolution: "planer@npm:1.2.0"
@ -38685,6 +39191,13 @@ __metadata:
languageName: node
linkType: hard
"pofile@npm:^1.1.4":
version: 1.1.4
resolution: "pofile@npm:1.1.4"
checksum: 10c0/75f764906f64faf9db26c37be8f9b3d57caddca059623b629940eef19f6e917bcfa7b9171e00623582130e97acd5a3db2f6384e42aa142d1d39a056cdaba3be3
languageName: node
linkType: hard
"polished@npm:^4.1.3, polished@npm:^4.2.2":
version: 4.3.1
resolution: "polished@npm:4.3.1"
@ -39559,6 +40072,17 @@ __metadata:
languageName: node
linkType: hard
"pseudolocale@npm:^2.0.0":
version: 2.1.0
resolution: "pseudolocale@npm:2.1.0"
dependencies:
commander: "npm:^10.0.0"
bin:
pseudolocale: dist/cli.mjs
checksum: 10c0/8ee38c52fcbb338514aaf3c1ec6675c9bd129b767cef8fb05bc0feab0b10daacdb69632d902f08db7a8099cd0ae204dad72e552b565a547337b14eccfb3c3eff
languageName: node
linkType: hard
"pseudomap@npm:^1.0.2":
version: 1.0.2
resolution: "pseudomap@npm:1.0.2"
@ -39791,6 +40315,13 @@ __metadata:
languageName: node
linkType: hard
"ramda@npm:^0.27.1":
version: 0.27.2
resolution: "ramda@npm:0.27.2"
checksum: 10c0/1bbcb5bcde33ab2669810644f920b8af4e228967ff800962100803dcdad57b09c5eeee50d9871c74aa20ce496a2d96ec48774e545d7943c8f742ccac5e0fa072
languageName: node
linkType: hard
"random-bytes@npm:~1.0.0":
version: 1.0.0
resolution: "random-bytes@npm:1.0.0"
@ -40676,6 +41207,15 @@ __metadata:
languageName: node
linkType: hard
"readdirp@npm:~3.5.0":
version: 3.5.0
resolution: "readdirp@npm:3.5.0"
dependencies:
picomatch: "npm:^2.2.1"
checksum: 10c0/293de2ed981884a09e76fbf90bddc7e1a87667e57e0284ddc8c177e3151b0d179a9a56441d9f2f3654423924ec100af57ba9e507086527f98fd1d21bdd041c3e
languageName: node
linkType: hard
"readdirp@npm:~3.6.0":
version: 3.6.0
resolution: "readdirp@npm:3.6.0"
@ -41869,6 +42409,15 @@ __metadata:
languageName: node
linkType: hard
"rxjs@npm:^6.6.0":
version: 6.6.7
resolution: "rxjs@npm:6.6.7"
dependencies:
tslib: "npm:^1.9.0"
checksum: 10c0/e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe
languageName: node
linkType: hard
"sade@npm:^1.7.3":
version: 1.8.1
resolution: "sade@npm:1.8.1"
@ -42751,7 +43300,7 @@ __metadata:
languageName: node
linkType: hard
"source-map@npm:0.8.0-beta.0":
"source-map@npm:0.8.0-beta.0, source-map@npm:^0.8.0-beta.0":
version: 0.8.0-beta.0
resolution: "source-map@npm:0.8.0-beta.0"
dependencies:
@ -44779,7 +45328,7 @@ __metadata:
languageName: node
linkType: hard
"tslib@npm:^1, tslib@npm:^1.13.0, tslib@npm:^1.8.1, tslib@npm:^1.9.3":
"tslib@npm:^1, tslib@npm:^1.13.0, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3":
version: 1.14.1
resolution: "tslib@npm:1.14.1"
checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2
@ -45120,6 +45669,11 @@ __metadata:
"@jsdevtools/rehype-toc": "npm:^3.0.2"
"@linaria/core": "npm:^6.2.0"
"@linaria/react": "npm:^6.2.1"
"@lingui/cli": "npm:^5.1.2"
"@lingui/core": "npm:^5.1.2"
"@lingui/react": "npm:^5.1.2"
"@lingui/swc-plugin": "npm:^5.0.2"
"@lingui/vite-plugin": "npm:^5.1.2"
"@mdx-js/react": "npm:^3.0.0"
"@microsoft/microsoft-graph-client": "npm:^3.0.7"
"@microsoft/microsoft-graph-types": "npm:^2.40.0"
@ -46310,6 +46864,13 @@ __metadata:
languageName: node
linkType: hard
"unraw@npm:^3.0.0":
version: 3.0.0
resolution: "unraw@npm:3.0.0"
checksum: 10c0/cd1e7a961c8dc075bdf07300bc046da6bc8c4f1b88c68191c392520f0c64914fa783d48f2431c668f79b1afbd4bab16e864c7aca3cc06ddc94567c1fec114b43
languageName: node
linkType: hard
"untildify@npm:^4.0.0":
version: 4.0.0
resolution: "untildify@npm:4.0.0"
@ -46344,6 +46905,20 @@ __metadata:
languageName: node
linkType: hard
"update-browserslist-db@npm:^1.1.1":
version: 1.1.2
resolution: "update-browserslist-db@npm:1.1.2"
dependencies:
escalade: "npm:^3.2.0"
picocolors: "npm:^1.1.1"
peerDependencies:
browserslist: ">= 4.21.0"
bin:
update-browserslist-db: cli.js
checksum: 10c0/9cb353998d6d7d6ba1e46b8fa3db888822dd972212da4eda609d185eb5c3557a93fd59780ceb757afd4d84240518df08542736969e6a5d6d6ce2d58e9363aac6
languageName: node
linkType: hard
"update-notifier@npm:5.1.0":
version: 5.1.0
resolution: "update-notifier@npm:5.1.0"