diff --git a/package.json b/package.json index 58084915be54..9b7211be5b36 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,8 @@ "@octokit/graphql": "^7.0.2", "@ptc-org/nestjs-query-core": "^4.2.0", "@ptc-org/nestjs-query-typeorm": "4.2.1-alpha.2", - "@react-email/components": "0.0.12", - "@react-email/render": "0.0.10", + "@react-email/components": "0.0.32", + "@react-email/render": "0.0.17", "@sentry/node": "^8", "@sentry/profiling-node": "^8", "@sentry/react": "^8", diff --git a/packages/twenty-chrome-extension/package.json b/packages/twenty-chrome-extension/package.json index a9dffcb331cd..935a06e8d689 100644 --- a/packages/twenty-chrome-extension/package.json +++ b/packages/twenty-chrome-extension/package.json @@ -6,5 +6,8 @@ "type": "module", "scripts": { "build": "npx vite build" + }, + "dependencies": { + "twenty-shared": "workspace:*" } } diff --git a/packages/twenty-chrome-extension/src/background/index.ts b/packages/twenty-chrome-extension/src/background/index.ts index b892790d44b3..9288c1b97fd2 100644 --- a/packages/twenty-chrome-extension/src/background/index.ts +++ b/packages/twenty-chrome-extension/src/background/index.ts @@ -1,4 +1,4 @@ -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; // Open options page programmatically in a new tab. // chrome.runtime.onInstalled.addListener((details) => { diff --git a/packages/twenty-chrome-extension/src/contentScript/createButton.ts b/packages/twenty-chrome-extension/src/contentScript/createButton.ts index b68adca357e5..2a616526af06 100644 --- a/packages/twenty-chrome-extension/src/contentScript/createButton.ts +++ b/packages/twenty-chrome-extension/src/contentScript/createButton.ts @@ -1,4 +1,4 @@ -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; interface CustomDiv extends HTMLDivElement { onClickHandler: (newHandler: () => void) => void; diff --git a/packages/twenty-chrome-extension/src/contentScript/extractCompanyProfile.ts b/packages/twenty-chrome-extension/src/contentScript/extractCompanyProfile.ts index 14d65addbc6d..b912158a1c0c 100644 --- a/packages/twenty-chrome-extension/src/contentScript/extractCompanyProfile.ts +++ b/packages/twenty-chrome-extension/src/contentScript/extractCompanyProfile.ts @@ -1,10 +1,10 @@ +import { isDefined } from 'twenty-shared'; import { createDefaultButton } from '~/contentScript/createButton'; import changeSidePanelUrl from '~/contentScript/utils/changeSidepanelUrl'; import extractCompanyLinkedinLink from '~/contentScript/utils/extractCompanyLinkedinLink'; import extractDomain from '~/contentScript/utils/extractDomain'; import { createCompany, fetchCompany } from '~/db/company.db'; import { CompanyInput } from '~/db/types/company.types'; -import { isDefined } from '~/utils/isDefined'; export const checkIfCompanyExists = async () => { const { tab: activeTab } = await chrome.runtime.sendMessage({ diff --git a/packages/twenty-chrome-extension/src/contentScript/extractPersonProfile.ts b/packages/twenty-chrome-extension/src/contentScript/extractPersonProfile.ts index eefcfefac725..ae0afa87a5df 100644 --- a/packages/twenty-chrome-extension/src/contentScript/extractPersonProfile.ts +++ b/packages/twenty-chrome-extension/src/contentScript/extractPersonProfile.ts @@ -1,9 +1,9 @@ +import { isDefined } from 'twenty-shared'; import { createDefaultButton } from '~/contentScript/createButton'; import changeSidePanelUrl from '~/contentScript/utils/changeSidepanelUrl'; import extractFirstAndLastName from '~/contentScript/utils/extractFirstAndLastName'; import { createPerson, fetchPerson } from '~/db/person.db'; import { PersonInput } from '~/db/types/person.types'; -import { isDefined } from '~/utils/isDefined'; export const checkIfPersonExists = async () => { const { tab: activeTab } = await chrome.runtime.sendMessage({ diff --git a/packages/twenty-chrome-extension/src/contentScript/index.ts b/packages/twenty-chrome-extension/src/contentScript/index.ts index e5b0216c2b7d..db538b29c4a5 100644 --- a/packages/twenty-chrome-extension/src/contentScript/index.ts +++ b/packages/twenty-chrome-extension/src/contentScript/index.ts @@ -1,6 +1,6 @@ +import { isDefined } from 'twenty-shared'; import { insertButtonForCompany } from '~/contentScript/extractCompanyProfile'; import { insertButtonForPerson } from '~/contentScript/extractPersonProfile'; -import { isDefined } from '~/utils/isDefined'; // Inject buttons into the DOM when SPA is reloaded on the resource url. // e.g. reload the page when on https://www.linkedin.com/in/mabdullahabaid/ diff --git a/packages/twenty-chrome-extension/src/contentScript/insertSettingsButton.ts b/packages/twenty-chrome-extension/src/contentScript/insertSettingsButton.ts index e5722355f05f..35111027812b 100644 --- a/packages/twenty-chrome-extension/src/contentScript/insertSettingsButton.ts +++ b/packages/twenty-chrome-extension/src/contentScript/insertSettingsButton.ts @@ -1,4 +1,4 @@ -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const btn = document.getElementById('twenty-settings-btn'); if (!isDefined(btn)) { diff --git a/packages/twenty-chrome-extension/src/contentScript/utils/changeSidepanelUrl.ts b/packages/twenty-chrome-extension/src/contentScript/utils/changeSidepanelUrl.ts index 087346e57360..43f5ba5550aa 100644 --- a/packages/twenty-chrome-extension/src/contentScript/utils/changeSidepanelUrl.ts +++ b/packages/twenty-chrome-extension/src/contentScript/utils/changeSidepanelUrl.ts @@ -1,4 +1,4 @@ -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const changeSidePanelUrl = async (url: string) => { if (isDefined(url)) { diff --git a/packages/twenty-chrome-extension/src/contentScript/utils/extractCompanyLinkedinLink.ts b/packages/twenty-chrome-extension/src/contentScript/utils/extractCompanyLinkedinLink.ts index 31424e4cf286..d4f2c5e49261 100644 --- a/packages/twenty-chrome-extension/src/contentScript/utils/extractCompanyLinkedinLink.ts +++ b/packages/twenty-chrome-extension/src/contentScript/utils/extractCompanyLinkedinLink.ts @@ -1,6 +1,6 @@ // Extract "https://www.linkedin.com/company/twenty/" from any of the following urls, which the user can visit while on the company page. -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; // "https://www.linkedin.com/company/twenty/" "https://www.linkedin.com/company/twenty/about/" "https://www.linkedin.com/company/twenty/people/". const extractCompanyLinkedinLink = (activeTabUrl: string) => { diff --git a/packages/twenty-chrome-extension/src/db/auth.db.ts b/packages/twenty-chrome-extension/src/db/auth.db.ts index 9bc4c3d77db3..42a88e80737e 100644 --- a/packages/twenty-chrome-extension/src/db/auth.db.ts +++ b/packages/twenty-chrome-extension/src/db/auth.db.ts @@ -1,10 +1,10 @@ +import { isDefined } from 'twenty-shared'; import { ExchangeAuthCodeInput, ExchangeAuthCodeResponse, Tokens, } from '~/db/types/auth.types'; import { EXCHANGE_AUTHORIZATION_CODE } from '~/graphql/auth/mutations'; -import { isDefined } from '~/utils/isDefined'; import { callMutation } from '~/utils/requestDb'; export const exchangeAuthorizationCode = async ( diff --git a/packages/twenty-chrome-extension/src/db/company.db.ts b/packages/twenty-chrome-extension/src/db/company.db.ts index bff265f79ee6..b5bee62abaf8 100644 --- a/packages/twenty-chrome-extension/src/db/company.db.ts +++ b/packages/twenty-chrome-extension/src/db/company.db.ts @@ -1,3 +1,4 @@ +import { isDefined } from 'twenty-shared'; import { CompanyInput, CreateCompanyResponse, @@ -6,7 +7,6 @@ import { import { Company, CompanyFilterInput } from '~/generated/graphql'; import { CREATE_COMPANY } from '~/graphql/company/mutations'; import { FIND_COMPANY } from '~/graphql/company/queries'; -import { isDefined } from '~/utils/isDefined'; import { callMutation, callQuery } from '../utils/requestDb'; diff --git a/packages/twenty-chrome-extension/src/db/person.db.ts b/packages/twenty-chrome-extension/src/db/person.db.ts index 607233ba97ce..fd78909d277d 100644 --- a/packages/twenty-chrome-extension/src/db/person.db.ts +++ b/packages/twenty-chrome-extension/src/db/person.db.ts @@ -1,3 +1,4 @@ +import { isDefined } from 'twenty-shared'; import { CreatePersonResponse, FindPersonResponse, @@ -6,7 +7,6 @@ import { import { Person, PersonFilterInput } from '~/generated/graphql'; import { CREATE_PERSON } from '~/graphql/person/mutations'; import { FIND_PERSON } from '~/graphql/person/queries'; -import { isDefined } from '~/utils/isDefined'; import { callMutation, callQuery } from '../utils/requestDb'; diff --git a/packages/twenty-chrome-extension/src/db/token.db.ts b/packages/twenty-chrome-extension/src/db/token.db.ts index 44fc354b38c2..8bfb01a9a86d 100644 --- a/packages/twenty-chrome-extension/src/db/token.db.ts +++ b/packages/twenty-chrome-extension/src/db/token.db.ts @@ -1,8 +1,8 @@ import { ApolloClient, InMemoryCache } from '@apollo/client'; +import { isDefined } from 'twenty-shared'; import { Tokens } from '~/db/types/auth.types'; import { RENEW_TOKEN } from '~/graphql/auth/mutations'; -import { isDefined } from '~/utils/isDefined'; export const renewToken = async ( appToken: string, diff --git a/packages/twenty-chrome-extension/src/options/App.tsx b/packages/twenty-chrome-extension/src/options/App.tsx index ba8e79110138..aeab5219b5ac 100644 --- a/packages/twenty-chrome-extension/src/options/App.tsx +++ b/packages/twenty-chrome-extension/src/options/App.tsx @@ -1,8 +1,8 @@ import { useEffect, useState } from 'react'; +import { isDefined } from 'twenty-shared'; import Settings from '~/options/Settings'; import Sidepanel from '~/options/Sidepanel'; -import { isDefined } from '~/utils/isDefined'; const App = () => { const [currentScreen, setCurrentScreen] = useState(''); diff --git a/packages/twenty-chrome-extension/src/options/Settings.tsx b/packages/twenty-chrome-extension/src/options/Settings.tsx index e4c959ba089f..b9671c030470 100644 --- a/packages/twenty-chrome-extension/src/options/Settings.tsx +++ b/packages/twenty-chrome-extension/src/options/Settings.tsx @@ -1,10 +1,10 @@ -import { useEffect, useState } from 'react'; import styled from '@emotion/styled'; +import { useEffect, useState } from 'react'; import { MainButton } from '@/ui/input/button/MainButton'; import { TextInput } from '@/ui/input/components/TextInput'; +import { isDefined } from 'twenty-shared'; import { clearStore } from '~/utils/apolloClient'; -import { isDefined } from '~/utils/isDefined'; const StyledWrapper = styled.div` align-items: center; diff --git a/packages/twenty-chrome-extension/src/options/Sidepanel.tsx b/packages/twenty-chrome-extension/src/options/Sidepanel.tsx index 3bea68701af3..bbdfcc21f4d6 100644 --- a/packages/twenty-chrome-extension/src/options/Sidepanel.tsx +++ b/packages/twenty-chrome-extension/src/options/Sidepanel.tsx @@ -1,8 +1,8 @@ -import { useCallback, useEffect, useRef, useState } from 'react'; import styled from '@emotion/styled'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { MainButton } from '@/ui/input/button/MainButton'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const StyledIframe = styled.iframe` display: block; diff --git a/packages/twenty-chrome-extension/src/options/modules/ui/input/components/Toggle.tsx b/packages/twenty-chrome-extension/src/options/modules/ui/input/components/Toggle.tsx index 7decf1d13ff4..83a75d818eb9 100644 --- a/packages/twenty-chrome-extension/src/options/modules/ui/input/components/Toggle.tsx +++ b/packages/twenty-chrome-extension/src/options/modules/ui/input/components/Toggle.tsx @@ -1,8 +1,8 @@ -import { useEffect, useState } from 'react'; import styled from '@emotion/styled'; import { motion } from 'framer-motion'; +import { useEffect, useState } from 'react'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export type ToggleSize = 'small' | 'medium'; diff --git a/packages/twenty-chrome-extension/src/utils/apolloClient.ts b/packages/twenty-chrome-extension/src/utils/apolloClient.ts index 058a2a16b8b6..a8d01dfda615 100644 --- a/packages/twenty-chrome-extension/src/utils/apolloClient.ts +++ b/packages/twenty-chrome-extension/src/utils/apolloClient.ts @@ -2,7 +2,7 @@ import { ApolloClient, from, HttpLink, InMemoryCache } from '@apollo/client'; import { setContext } from '@apollo/client/link/context'; import { onError } from '@apollo/client/link/error'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const clearStore = () => { chrome.storage.local.remove([ diff --git a/packages/twenty-chrome-extension/src/utils/requestDb.ts b/packages/twenty-chrome-extension/src/utils/requestDb.ts index c647089f639a..77d37e10d565 100644 --- a/packages/twenty-chrome-extension/src/utils/requestDb.ts +++ b/packages/twenty-chrome-extension/src/utils/requestDb.ts @@ -1,8 +1,8 @@ import { OperationVariables } from '@apollo/client'; import { DocumentNode } from 'graphql'; +import { isDefined } from 'twenty-shared'; import getApolloClient from '~/utils/apolloClient'; -import { isDefined } from '~/utils/isDefined'; export const callQuery = async ( query: DocumentNode, diff --git a/packages/twenty-emails/.swcrc b/packages/twenty-emails/.swcrc new file mode 100644 index 000000000000..e5fdfff93147 --- /dev/null +++ b/packages/twenty-emails/.swcrc @@ -0,0 +1,18 @@ +{ + "$schema": "https://json.schemastore.org/swcrc", + "jsc": { + "experimental": { + "plugins": [ + [ + "@lingui/swc-plugin", + { + "runtimeModules": { + "i18n": ["@lingui/core", "i18n"], + "trans": ["@lingui/react", "Trans"] + } + } + ] + ] + } + } +} diff --git a/packages/twenty-emails/lingui.config.js b/packages/twenty-emails/lingui.config.js new file mode 100644 index 000000000000..4350dc5e0876 --- /dev/null +++ b/packages/twenty-emails/lingui.config.js @@ -0,0 +1,30 @@ +import { defineConfig } from '@lingui/cli'; +import { APP_LOCALES } from 'twenty-shared'; + +export default defineConfig({ + sourceLocale: 'en', + locales: Object.values(APP_LOCALES), + pseudoLocale: 'pseudo-en', + fallbackLocales: { + 'pseudo-en': 'en', + }, + extractorParserOptions: { + tsExperimentalDecorators: true, + }, + catalogs: [ + { + path: '/src/locales/{locale}', + include: ['src'], + }, + ], + catalogsMergePath: '/src/locales/generated/{locale}', + compileNamespace: 'ts', + ...(process.env.TRANSLATION_IO_API_KEY_EMAILS + ? { + service: { + name: 'TranslationIO', + apiKey: process.env.TRANSLATION_IO_API_KEY_EMAILS, + }, + } + : {}), +}); diff --git a/packages/twenty-emails/package.json b/packages/twenty-emails/package.json index 19c1cc660708..02f67bd9e6bc 100644 --- a/packages/twenty-emails/package.json +++ b/packages/twenty-emails/package.json @@ -12,7 +12,8 @@ "exports": { ".": { "import": "./dist/index.mjs", - "require": "./dist/index.js" + "require": "./dist/index.js", + "types": "./dist/index.d.ts" } }, "engines": { diff --git a/packages/twenty-emails/project.json b/packages/twenty-emails/project.json index 26a9624da849..c5927d1bfa39 100644 --- a/packages/twenty-emails/project.json +++ b/packages/twenty-emails/project.json @@ -30,6 +30,20 @@ "configurations": { "fix": {} } + }, + "lingui:extract": { + "executor": "nx:run-commands", + "options": { + "cwd": "{projectRoot}", + "command": "lingui extract --overwrite" + } + }, + "lingui:compile": { + "executor": "nx:run-commands", + "options": { + "cwd": "{projectRoot}", + "command": "lingui compile --typescript" + } } } } diff --git a/packages/twenty-emails/src/components/BaseEmail.tsx b/packages/twenty-emails/src/components/BaseEmail.tsx index c98c7013b9b3..c1408ec41c9d 100644 --- a/packages/twenty-emails/src/components/BaseEmail.tsx +++ b/packages/twenty-emails/src/components/BaseEmail.tsx @@ -1,21 +1,56 @@ -import { PropsWithChildren } from 'react'; +import { i18n } from '@lingui/core'; +import { I18nProvider } from '@lingui/react'; import { Container, Html } from '@react-email/components'; +import { PropsWithChildren } from 'react'; import { BaseHead } from 'src/components/BaseHead'; import { Logo } from 'src/components/Logo'; +import { APP_LOCALES } from 'twenty-shared'; +import { messages as deMessages } from '../locales/generated/de'; +import { messages as enMessages } from '../locales/generated/en'; +import { messages as esMessages } from '../locales/generated/es'; +import { messages as frMessages } from '../locales/generated/fr'; +import { messages as itMessages } from '../locales/generated/it'; +import { messages as jaMessages } from '../locales/generated/ja'; +import { messages as koMessages } from '../locales/generated/ko'; +import { messages as pseudoEnMessages } from '../locales/generated/pseudo-en'; +import { messages as ptBRMessages } from '../locales/generated/pt-BR'; +import { messages as ptPTMessages } from '../locales/generated/pt-PT'; +import { messages as zhHansMessages } from '../locales/generated/zh-Hans'; +import { messages as zhHantMessages } from '../locales/generated/zh-Hant'; type BaseEmailProps = PropsWithChildren<{ width?: number; + locale: keyof typeof APP_LOCALES; }>; -export const BaseEmail = ({ children, width }: BaseEmailProps) => { +i18n.load('en', enMessages); +i18n.load('fr', frMessages); +i18n.load('pseudo-en', pseudoEnMessages); +i18n.load('ko', koMessages); +i18n.load('de', deMessages); +i18n.load('it', itMessages); +i18n.load('es', esMessages); +i18n.load('ja', jaMessages); +i18n.load('pt-PT', ptPTMessages); +i18n.load('pt-BR', ptBRMessages); +i18n.load('zh-Hans', zhHansMessages); +i18n.load('zh-Hant', zhHantMessages); + +i18n.activate('en'); + +export const BaseEmail = ({ children, width, locale }: BaseEmailProps) => { + i18n.activate(locale); + return ( - - - - - {children} - - + + + + + + {children} + + + ); }; diff --git a/packages/twenty-emails/src/emails/clean-suspended-workspace.email.tsx b/packages/twenty-emails/src/emails/clean-suspended-workspace.email.tsx index 715768a71b31..5a5581266560 100644 --- a/packages/twenty-emails/src/emails/clean-suspended-workspace.email.tsx +++ b/packages/twenty-emails/src/emails/clean-suspended-workspace.email.tsx @@ -1,3 +1,4 @@ +import { Trans } from '@lingui/react/macro'; import { BaseEmail } from 'src/components/BaseEmail'; import { CallToAction } from 'src/components/CallToAction'; import { MainText } from 'src/components/MainText'; @@ -17,20 +18,24 @@ export const CleanSuspendedWorkspaceEmail = ({ const helloString = userName?.length > 1 ? `Hello ${userName}` : 'Hello'; return ( - + <MainText> {helloString}, <br /> <br /> - Your workspace <b>{workspaceDisplayName}</b> has been deleted as your - subscription expired {inactiveDaysBeforeDelete} days ago. + <Trans> + Your workspace <b>{workspaceDisplayName}</b> has been deleted as your + subscription expired {inactiveDaysBeforeDelete} days ago. + </Trans> <br /> <br /> - All data in this workspace has been permanently deleted. + <Trans>All data in this workspace has been permanently deleted.</Trans> <br /> <br /> - If you wish to use Twenty again, you can create a new workspace. + <Trans> + If you wish to use Twenty again, you can create a new workspace. + </Trans> </MainText> <CallToAction href="https://app.twenty.com/" diff --git a/packages/twenty-emails/src/emails/password-reset-link.email.tsx b/packages/twenty-emails/src/emails/password-reset-link.email.tsx index 9e825402432e..2f4f8f759932 100644 --- a/packages/twenty-emails/src/emails/password-reset-link.email.tsx +++ b/packages/twenty-emails/src/emails/password-reset-link.email.tsx @@ -1,25 +1,32 @@ +import { t } from '@lingui/core/macro'; +import { Trans } from '@lingui/react/macro'; import { BaseEmail } from 'src/components/BaseEmail'; import { CallToAction } from 'src/components/CallToAction'; import { Link } from 'src/components/Link'; import { MainText } from 'src/components/MainText'; import { Title } from 'src/components/Title'; +import { APP_LOCALES } from 'twenty-shared'; type PasswordResetLinkEmailProps = { duration: string; link: string; + locale: keyof typeof APP_LOCALES; }; export const PasswordResetLinkEmail = ({ duration, link, + locale, }: PasswordResetLinkEmailProps) => { return ( - <BaseEmail> - <Title value="Reset your password 🗝" /> - <CallToAction href={link} value="Reset" /> + <BaseEmail locale={locale}> + <Title value={t`Reset your password 🗝`} /> + <CallToAction href={link} value={t`Reset`} /> <MainText> - This link is only valid for the next {duration}. If link does not work, - you can use the login verification link directly: + <Trans> + This link is only valid for the next {duration}. If the link does not + work, you can use the login verification link directly: + </Trans> <br /> <Link href={link} value={link} /> </MainText> diff --git a/packages/twenty-emails/src/emails/password-update-notify.email.tsx b/packages/twenty-emails/src/emails/password-update-notify.email.tsx index 0a85b8967d0b..78d87156af39 100644 --- a/packages/twenty-emails/src/emails/password-update-notify.email.tsx +++ b/packages/twenty-emails/src/emails/password-update-notify.email.tsx @@ -1,38 +1,49 @@ -import { format } from 'date-fns'; +import { i18n } from '@lingui/core'; +import { t } from '@lingui/core/macro'; +import { Trans } from '@lingui/react/macro'; import { BaseEmail } from 'src/components/BaseEmail'; import { CallToAction } from 'src/components/CallToAction'; import { MainText } from 'src/components/MainText'; import { Title } from 'src/components/Title'; +import { APP_LOCALES } from 'twenty-shared'; type PasswordUpdateNotifyEmailProps = { userName: string; email: string; link: string; + locale: keyof typeof APP_LOCALES; }; export const PasswordUpdateNotifyEmail = ({ userName, email, link, + locale, }: PasswordUpdateNotifyEmailProps) => { - const helloString = userName?.length > 1 ? `Dear ${userName}` : 'Dear'; + const helloString = userName?.length > 1 ? t`Dear ${userName}` : t`Hello`; + const formattedDate = i18n.date(new Date()); + return ( - <BaseEmail> - <Title value="Password updated" /> + <BaseEmail locale={locale}> + <Title value={t`Password updated`} /> <MainText> {helloString}, <br /> <br /> - This is a confirmation that password for your account ({email}) was - successfully changed on {format(new Date(), 'MMMM d, yyyy')}. + <Trans> + This is a confirmation that password for your account ({email}) was + successfully changed on {formattedDate}. + </Trans> <br /> <br /> - If you did not initiate this change, please contact your workspace owner - immediately. + <Trans> + If you did not initiate this change, please contact your workspace + owner immediately. + </Trans> <br /> </MainText> - <CallToAction value="Connect to Twenty" href={link} /> + <CallToAction value={t`Connect to Twenty`} href={link} /> </BaseEmail> ); }; diff --git a/packages/twenty-emails/src/emails/send-email-verification-link.email.tsx b/packages/twenty-emails/src/emails/send-email-verification-link.email.tsx index e157ad6ea4fc..71840c2b562b 100644 --- a/packages/twenty-emails/src/emails/send-email-verification-link.email.tsx +++ b/packages/twenty-emails/src/emails/send-email-verification-link.email.tsx @@ -1,26 +1,34 @@ +import { t } from '@lingui/core/macro'; +import { Trans } from '@lingui/react/macro'; + import { BaseEmail } from 'src/components/BaseEmail'; import { CallToAction } from 'src/components/CallToAction'; import { Footer } from 'src/components/Footer'; import { MainText } from 'src/components/MainText'; import { Title } from 'src/components/Title'; +import { APP_LOCALES } from 'twenty-shared'; type SendEmailVerificationLinkEmailProps = { link: string; + locale: keyof typeof APP_LOCALES; }; export const SendEmailVerificationLinkEmail = ({ link, + locale, }: SendEmailVerificationLinkEmailProps) => { return ( - <BaseEmail width={333}> - <Title value="Confirm your email address" /> - <CallToAction href={link} value="Verify Email" /> + <BaseEmail width={333} locale={locale}> + <Title value={t`Confirm your email address`} /> + <CallToAction href={link} value={t`Verify Email`} /> <br /> <br /> <MainText> - Thanks for registering for an account on Twenty! Before we get started, - we just need to confirm that this is you. Click above to verify your - email address. + <Trans> + Thanks for registering for an account on Twenty! Before we get + started, we just need to confirm that this is you. Click above to + verify your email address. + </Trans> </MainText> <Footer /> </BaseEmail> diff --git a/packages/twenty-emails/src/emails/send-invite-link.email.tsx b/packages/twenty-emails/src/emails/send-invite-link.email.tsx index 9d803a89a4fe..5f934b03f519 100644 --- a/packages/twenty-emails/src/emails/send-invite-link.email.tsx +++ b/packages/twenty-emails/src/emails/send-invite-link.email.tsx @@ -1,3 +1,5 @@ +import { t } from '@lingui/core/macro'; +import { Trans } from '@lingui/react/macro'; import { Img } from '@react-email/components'; import { emailTheme } from 'src/common-style'; @@ -10,7 +12,7 @@ import { MainText } from 'src/components/MainText'; import { Title } from 'src/components/Title'; import { WhatIsTwenty } from 'src/components/WhatIsTwenty'; import { capitalize } from 'src/utils/capitalize'; -import { getImageAbsoluteURI } from 'twenty-shared'; +import { APP_LOCALES, getImageAbsoluteURI } from 'twenty-shared'; type SendInviteLinkEmailProps = { link: string; @@ -21,6 +23,7 @@ type SendInviteLinkEmailProps = { lastName: string; }; serverUrl: string; + locale: keyof typeof APP_LOCALES; }; export const SendInviteLinkEmail = ({ @@ -28,14 +31,15 @@ export const SendInviteLinkEmail = ({ workspace, sender, serverUrl, + locale, }: SendInviteLinkEmailProps) => { const workspaceLogo = workspace.logo ? getImageAbsoluteURI({ imageUrl: workspace.logo, baseUrl: serverUrl }) : null; return ( - <BaseEmail width={333}> - <Title value="Join your team on Twenty" /> + <BaseEmail width={333} locale={locale}> + <Title value={t`Join your team on Twenty`} /> <MainText> {capitalize(sender.firstName)} ( <Link @@ -43,13 +47,14 @@ export const SendInviteLinkEmail = ({ value={sender.email} color={emailTheme.font.colors.blue} /> - ) has invited you to join a workspace called <b>{workspace.name}</b> + )<Trans>has invited you to join a workspace called </Trans> + <b>{workspace.name}</b> <br /> </MainText> <HighlightedContainer> {workspaceLogo && <Img src={workspaceLogo} width={40} height={40} />} {workspace.name && <HighlightedText value={workspace.name} />} - <CallToAction href={link} value="Accept invite" /> + <CallToAction href={link} value={t`Accept invite`} /> </HighlightedContainer> <WhatIsTwenty /> </BaseEmail> diff --git a/packages/twenty-emails/src/emails/warn-suspended-workspace.email.tsx b/packages/twenty-emails/src/emails/warn-suspended-workspace.email.tsx index 10bf689ed160..e8f68e1c0fb3 100644 --- a/packages/twenty-emails/src/emails/warn-suspended-workspace.email.tsx +++ b/packages/twenty-emails/src/emails/warn-suspended-workspace.email.tsx @@ -1,3 +1,5 @@ +import { t } from '@lingui/core/macro'; +import { Trans } from '@lingui/react/macro'; import { BaseEmail } from 'src/components/BaseEmail'; import { CallToAction } from 'src/components/CallToAction'; import { MainText } from 'src/components/MainText'; @@ -23,26 +25,32 @@ export const WarnSuspendedWorkspaceEmail = ({ const helloString = userName?.length > 1 ? `Hello ${userName}` : 'Hello'; return ( - <BaseEmail width={333}> + <BaseEmail width={333} locale="en"> <Title value="Suspended Workspace 😴" /> <MainText> {helloString}, <br /> <br /> - It appears that your workspace <b>{workspaceDisplayName}</b> has been - suspended for {daysSinceInactive} days. + <Trans> + It appears that your workspace <b>{workspaceDisplayName}</b> has been + suspended for {daysSinceInactive} days. + </Trans> <br /> <br /> - The workspace will be deactivated in {remainingDays} {dayOrDays}, and - all its data will be deleted. + <Trans> + The workspace will be deactivated in {remainingDays} {dayOrDays}, and + all its data will be deleted. + </Trans> <br /> <br /> - If you wish to continue using Twenty, please update your subscription - within the next {remainingDays} {dayOrDays}. + <Trans> + If you wish to continue using Twenty, please update your subscription + within the next {remainingDays} {dayOrDays}. + </Trans> </MainText> <CallToAction href="https://app.twenty.com/settings/billing" - value="Update your subscription" + value={t`Update your subscription`} /> </BaseEmail> ); diff --git a/packages/twenty-emails/src/locales/de.po b/packages/twenty-emails/src/locales/de.po new file mode 100644 index 000000000000..6ff0521495b0 --- /dev/null +++ b/packages/twenty-emails/src/locales/de.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-02 20:44+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: de\n" + +#: src/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "Einladung annehmen" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "Alle Daten in diesem Arbeitsbereich wurden endgültig gelöscht." + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "Bestätigen Sie Ihre E-Mail Adresse" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "Verbindung zu Twenty" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "Sehr geehrter {userName}" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "Hallo" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "Wenn Sie diese Änderung nicht veranlasst haben, wenden Sie sich bitte umgehend an den Eigentümer Ihres Arbeitsbereichs." + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "Wenn Sie Twenty weiterhin nutzen möchten, aktualisieren Sie Ihr Abonnement bitte innerhalb der nächsten {remainingDays} {dayOrDays}." + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "Wenn Sie Twenty wieder verwenden möchten, können Sie einen neuen Arbeitsbereich erstellen." + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "Es scheint, dass Ihr Arbeitsbereich <0>{workspaceDisplayName}</0> für {daysSinceInactive} Tage gesperrt wurde." + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "Verbinden Sie Ihr Team auf Twenty" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "Passwort aktualisiert" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "Zurücksetzen" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "Ihr Passwort zurücksetzen 🗝" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "Vielen Dank, dass Sie sich für ein Konto bei Twenty registriert haben! Bevor wir loslegen, müssen wir nur bestätigen, dass Sie es sind. Klicken Sie oben, um Ihre E-Mail-Adresse zu bestätigen." + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "Der Arbeitsbereich wird in {remainingDays} {dayOrDays} deaktiviert, und alle seine Daten werden gelöscht." + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "Dies ist eine Bestätigung, dass das Passwort für Ihr Konto ({email}) erfolgreich am {formattedDate} geändert wurde." + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "Dieser Link ist nur für den nächsten {duration} gültig. Wenn der Link nicht funktioniert, können Sie direkt den Link zur Überprüfung der Anmeldung verwenden:" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "Aktualisieren Sie Ihr Abonnement" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "E-Mail verifizieren" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "Ihr Arbeitsbereich <0>{workspaceDisplayName}</0> wurde gelöscht, da Ihr Abonnement vor {inactiveDaysBeforeDelete} Tagen abgelaufen ist." + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "hat Sie eingeladen, an einem Arbeitsbereich namens " diff --git a/packages/twenty-emails/src/locales/en.po b/packages/twenty-emails/src/locales/en.po new file mode 100644 index 000000000000..667fca606460 --- /dev/null +++ b/packages/twenty-emails/src/locales/en.po @@ -0,0 +1,114 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-01 18:53+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" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" + +#: src/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "Accept invite" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "All data in this workspace has been permanently deleted." + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "Confirm your email address" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "Connect to Twenty" + +#: src/emails/password-update-notify.email.tsx:24 +#~ msgid "Dear" +#~ msgstr "Dear" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "Dear {userName}" + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "has invited you to join a workspace called " + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "Hello" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "If you did not initiate this change, please contact your workspace owner immediately." + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "If you wish to use Twenty again, you can create a new workspace." + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "Join your team on Twenty" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "Password updated" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "Reset" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "Reset your password 🗝" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." + +#: src/emails/password-update-notify.email.tsx:36 +#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}.<0/><1/>If you did not initiate this change, please contact your workspace owner immediately." +#~ msgstr "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}.<0/><1/>If you did not initiate this change, please contact your workspace owner immediately." + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" + +#: src/emails/password-reset-link.email.tsx:28 +#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:<0/>" +#~ msgstr "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:<0/>" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "Update your subscription" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "Verify Email" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." diff --git a/packages/twenty-emails/src/locales/es.po b/packages/twenty-emails/src/locales/es.po new file mode 100644 index 000000000000..c50c3d047408 --- /dev/null +++ b/packages/twenty-emails/src/locales/es.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-02 20:44+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: es\n" + +#: src/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "Aceptar invitación" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "Todos los datos de este espacio de trabajo se han eliminado permanentemente." + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "Confirma tu dirección de correo electrónico" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "Conectarse a Twenty" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "Estimado/a {userName}" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "Hola" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "Si usted no ha iniciado este cambio, póngase en contacto inmediatamente con el propietario de su espacio de trabajo." + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "Si desea seguir utilizando Twenty, actualice su suscripción en los próximos {remainingDays} {dayOrDays}." + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "Si deseas volver a utilizar Twenty, puedes crear un nuevo espacio de trabajo." + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "Parece que su espacio de trabajo <0>{workspaceDisplayName}</0> ha sido suspendido durante {daysSinceInactive} días." + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "Únete a tu equipo en Twenty" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "Contraseña actualizada" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "Restablecer" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "Restablece tu contraseña 🗝" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "¡Gracias por registrarte en Twenty! Antes de comenzar, solo necesitamos confirmar que eres tú. Haz clic arriba para verificar tu dirección de correo electrónico." + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "El espacio de trabajo se desactivará en {remainingDays} {dayOrDays} y se borrarán todos sus datos." + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "Esto es una confirmación de que la contraseña de su cuenta ({email}) se ha cambiado correctamente en {formattedDate}." + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "Este enlace sólo es válido para el próximo {duration}. Si el enlace no funciona, puede utilizar directamente el enlace de verificación de inicio de sesión:" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "Actualice su suscripción" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "Verificar correo electrónico" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "Su espacio de trabajo <0>{workspaceDisplayName}</0> se ha eliminado porque su suscripción caducó hace {inactiveDaysBeforeDelete} días." + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "te ha invitado a unirte a un espacio de trabajo llamado " diff --git a/packages/twenty-emails/src/locales/fr.po b/packages/twenty-emails/src/locales/fr.po new file mode 100644 index 000000000000..0ca88fc35695 --- /dev/null +++ b/packages/twenty-emails/src/locales/fr.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-02 20:44+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/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "Accepter l'invitation" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "Toutes les données de cet espace de travail ont été définitivement supprimées." + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "Confirmez votre adresse email" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "Connectez-vous à Twenty" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "Cher(e) {userName}" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "Bonjour" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "Si vous n'êtes pas à l'origine de ce changement, veuillez contacter immédiatement le propriétaire de votre espace de travail." + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "Si vous souhaitez continuer à utiliser Twenty, veuillez mettre à jour votre abonnement dans les {remainingDays} {dayOrDays} à venir." + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "Si vous souhaitez réutiliser Twenty, vous pouvez créer un nouvel espace de travail." + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "Il apparaît que votre espace de travail <0>{workspaceDisplayName}</0> a été suspendu pendant {daysSinceInactive} jours." + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "Rejoignez votre équipe sur Twenty" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "Mot de passe mis à jour" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "Réinitialiser" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "Réinitialiser votre mot de passe 🗝" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "Merci de vous être inscrit sur Twenty! Avant de commencer, nous devons simplement confirmer qu'il s'agit bien de vous. Cliquez ci-dessus pour vérifier votre adresse e-mail." + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "L'espace de travail sera désactivé dans {remainingDays} {dayOrDays} et toutes ses données seront supprimées." + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "Ceci est une confirmation que le mot de passe de votre compte ({email}) a été modifié avec succès le {formattedDate}." + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "Ce lien n'est valable que pour le prochain {duration}. Si le lien ne fonctionne pas, vous pouvez utiliser directement le lien de vérification de la connexion :" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "Mise à jour de votre abonnement" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "Vérifier l'e-mail" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "Votre espace de travail <0>{workspaceDisplayName}</0> a été supprimé car votre abonnement a expiré il y a {inactiveDaysBeforeDelete} jours." + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "vous a invité à rejoindre un espace de travail appelé" diff --git a/packages/twenty-emails/src/locales/generated/de.ts b/packages/twenty-emails/src/locales/generated/de.ts new file mode 100644 index 000000000000..c5f35aa39cba --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/de.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Einladung annehmen\"],\"Yxj+Uc\":[\"Alle Daten in diesem Arbeitsbereich wurden endgültig gelöscht.\"],\"RPHFhC\":[\"Bestätigen Sie Ihre E-Mail Adresse\"],\"nvkBPN\":[\"Verbindung zu Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Sehr geehrter \",[\"userName\"]],\"tGme7M\":[\"hat Sie eingeladen, an einem Arbeitsbereich namens \"],\"uzTaYi\":[\"Hallo\"],\"eE1nG1\":[\"Wenn Sie diese Änderung nicht veranlasst haben, wenden Sie sich bitte umgehend an den Eigentümer Ihres Arbeitsbereichs.\"],\"Gz91L8\":[\"Wenn Sie Twenty weiterhin nutzen möchten, aktualisieren Sie Ihr Abonnement bitte innerhalb der nächsten \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Wenn Sie Twenty wieder verwenden möchten, können Sie einen neuen Arbeitsbereich erstellen.\"],\"7JuhZQ\":[\"Es scheint, dass Ihr Arbeitsbereich <0>\",[\"workspaceDisplayName\"],\"</0> für \",[\"daysSinceInactive\"],\" Tage gesperrt wurde.\"],\"PviVyk\":[\"Verbinden Sie Ihr Team auf Twenty\"],\"ogtYkT\":[\"Passwort aktualisiert\"],\"OfhWJH\":[\"Zurücksetzen\"],\"RE5NiU\":[\"Ihr Passwort zurücksetzen 🗝\"],\"7yDt8q\":[\"Vielen Dank, dass Sie sich für ein Konto bei Twenty registriert haben! Bevor wir loslegen, müssen wir nur bestätigen, dass Sie es sind. Klicken Sie oben, um Ihre E-Mail-Adresse zu bestätigen.\"],\"igorB1\":[\"Der Arbeitsbereich wird in \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" deaktiviert, und alle seine Daten werden gelöscht.\"],\"7OEHy1\":[\"Dies ist eine Bestätigung, dass das Passwort für Ihr Konto (\",[\"email\"],\") erfolgreich am \",[\"formattedDate\"],\" geändert wurde.\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Dieser Link ist nur für den nächsten \",[\"duration\"],\" gültig. Wenn der Link nicht funktioniert, können Sie direkt den Link zur Überprüfung der Anmeldung verwenden:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Aktualisieren Sie Ihr Abonnement\"],\"wCKkSr\":[\"E-Mail verifizieren\"],\"KFmFrQ\":[\"Ihr Arbeitsbereich <0>\",[\"workspaceDisplayName\"],\"</0> wurde gelöscht, da Ihr Abonnement vor \",[\"inactiveDaysBeforeDelete\"],\" Tagen abgelaufen ist.\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/generated/en.ts b/packages/twenty-emails/src/locales/generated/en.ts new file mode 100644 index 000000000000..a7f89e6a52e4 --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/en.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Accept invite\"],\"Yxj+Uc\":[\"All data in this workspace has been permanently deleted.\"],\"RPHFhC\":[\"Confirm your email address\"],\"nvkBPN\":[\"Connect to Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Dear \",[\"userName\"]],\"tGme7M\":[\"has invited you to join a workspace called \"],\"uzTaYi\":[\"Hello\"],\"eE1nG1\":[\"If you did not initiate this change, please contact your workspace owner immediately.\"],\"Gz91L8\":[\"If you wish to continue using Twenty, please update your subscription within the next \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"If you wish to use Twenty again, you can create a new workspace.\"],\"7JuhZQ\":[\"It appears that your workspace <0>\",[\"workspaceDisplayName\"],\"</0> has been suspended for \",[\"daysSinceInactive\"],\" days.\"],\"PviVyk\":[\"Join your team on Twenty\"],\"ogtYkT\":[\"Password updated\"],\"OfhWJH\":[\"Reset\"],\"RE5NiU\":[\"Reset your password 🗝\"],\"7yDt8q\":[\"Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address.\"],\"igorB1\":[\"The workspace will be deactivated in \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", and all its data will be deleted.\"],\"7OEHy1\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Update your subscription\"],\"wCKkSr\":[\"Verify Email\"],\"KFmFrQ\":[\"Your workspace <0>\",[\"workspaceDisplayName\"],\"</0> has been deleted as your subscription expired \",[\"inactiveDaysBeforeDelete\"],\" days ago.\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/generated/es.ts b/packages/twenty-emails/src/locales/generated/es.ts new file mode 100644 index 000000000000..53a2584f21ba --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/es.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Aceptar invitación\"],\"Yxj+Uc\":[\"Todos los datos de este espacio de trabajo se han eliminado permanentemente.\"],\"RPHFhC\":[\"Confirma tu dirección de correo electrónico\"],\"nvkBPN\":[\"Conectarse a Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Estimado/a \",[\"userName\"]],\"tGme7M\":[\"te ha invitado a unirte a un espacio de trabajo llamado \"],\"uzTaYi\":[\"Hola\"],\"eE1nG1\":[\"Si usted no ha iniciado este cambio, póngase en contacto inmediatamente con el propietario de su espacio de trabajo.\"],\"Gz91L8\":[\"Si desea seguir utilizando Twenty, actualice su suscripción en los próximos \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Si deseas volver a utilizar Twenty, puedes crear un nuevo espacio de trabajo.\"],\"7JuhZQ\":[\"Parece que su espacio de trabajo <0>\",[\"workspaceDisplayName\"],\"</0> ha sido suspendido durante \",[\"daysSinceInactive\"],\" días.\"],\"PviVyk\":[\"Únete a tu equipo en Twenty\"],\"ogtYkT\":[\"Contraseña actualizada\"],\"OfhWJH\":[\"Restablecer\"],\"RE5NiU\":[\"Restablece tu contraseña 🗝\"],\"7yDt8q\":[\"¡Gracias por registrarte en Twenty! Antes de comenzar, solo necesitamos confirmar que eres tú. Haz clic arriba para verificar tu dirección de correo electrónico.\"],\"igorB1\":[\"El espacio de trabajo se desactivará en \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" y se borrarán todos sus datos.\"],\"7OEHy1\":[\"Esto es una confirmación de que la contraseña de su cuenta (\",[\"email\"],\") se ha cambiado correctamente en \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Este enlace sólo es válido para el próximo \",[\"duration\"],\". Si el enlace no funciona, puede utilizar directamente el enlace de verificación de inicio de sesión:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Actualice su suscripción\"],\"wCKkSr\":[\"Verificar correo electrónico\"],\"KFmFrQ\":[\"Su espacio de trabajo <0>\",[\"workspaceDisplayName\"],\"</0> se ha eliminado porque su suscripción caducó hace \",[\"inactiveDaysBeforeDelete\"],\" días.\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/generated/fr.ts b/packages/twenty-emails/src/locales/generated/fr.ts new file mode 100644 index 000000000000..7b49e71a5776 --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/fr.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Accepter l'invitation\"],\"Yxj+Uc\":[\"Toutes les données de cet espace de travail ont été définitivement supprimées.\"],\"RPHFhC\":[\"Confirmez votre adresse email\"],\"nvkBPN\":[\"Connectez-vous à Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Cher(e) \",[\"userName\"]],\"tGme7M\":[\"vous a invité à rejoindre un espace de travail appelé\"],\"uzTaYi\":[\"Bonjour\"],\"eE1nG1\":[\"Si vous n'êtes pas à l'origine de ce changement, veuillez contacter immédiatement le propriétaire de votre espace de travail.\"],\"Gz91L8\":[\"Si vous souhaitez continuer à utiliser Twenty, veuillez mettre à jour votre abonnement dans les \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" à venir.\"],\"0weyko\":[\"Si vous souhaitez réutiliser Twenty, vous pouvez créer un nouvel espace de travail.\"],\"7JuhZQ\":[\"Il apparaît que votre espace de travail <0>\",[\"workspaceDisplayName\"],\"</0> a été suspendu pendant \",[\"daysSinceInactive\"],\" jours.\"],\"PviVyk\":[\"Rejoignez votre équipe sur Twenty\"],\"ogtYkT\":[\"Mot de passe mis à jour\"],\"OfhWJH\":[\"Réinitialiser\"],\"RE5NiU\":[\"Réinitialiser votre mot de passe 🗝\"],\"7yDt8q\":[\"Merci de vous être inscrit sur Twenty! Avant de commencer, nous devons simplement confirmer qu'il s'agit bien de vous. Cliquez ci-dessus pour vérifier votre adresse e-mail.\"],\"igorB1\":[\"L'espace de travail sera désactivé dans \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" et toutes ses données seront supprimées.\"],\"7OEHy1\":[\"Ceci est une confirmation que le mot de passe de votre compte (\",[\"email\"],\") a été modifié avec succès le \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Ce lien n'est valable que pour le prochain \",[\"duration\"],\". Si le lien ne fonctionne pas, vous pouvez utiliser directement le lien de vérification de la connexion :\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Mise à jour de votre abonnement\"],\"wCKkSr\":[\"Vérifier l'e-mail\"],\"KFmFrQ\":[\"Votre espace de travail <0>\",[\"workspaceDisplayName\"],\"</0> a été supprimé car votre abonnement a expiré il y a \",[\"inactiveDaysBeforeDelete\"],\" jours.\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/generated/it.ts b/packages/twenty-emails/src/locales/generated/it.ts new file mode 100644 index 000000000000..f7c0f4838722 --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/it.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Accetta invito\"],\"Yxj+Uc\":[\"Tutti i dati di questa area di lavoro sono stati eliminati in modo permanente.\"],\"RPHFhC\":[\"Conferma il tuo indirizzo email\"],\"nvkBPN\":[\"Connettiti a Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Caro \",[\"userName\"]],\"tGme7M\":[\"ti ha invitato a unirti a uno spazio di lavoro chiamato \"],\"uzTaYi\":[\"Ciao\"],\"eE1nG1\":[\"Se non si è avviata questa modifica, contattare immediatamente il proprietario dello spazio di lavoro.\"],\"Gz91L8\":[\"Se si desidera continuare a utilizzare Twenty, aggiornare l'abbonamento entro il prossimo \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Se si desidera utilizzare nuovamente Twenty, è possibile creare una nuova area di lavoro.\"],\"7JuhZQ\":[\"Sembra che il vostro spazio di lavoro <0>\",[\"workspaceDisplayName\"],\"</0> sia stato sospeso per \",[\"daysSinceInactive\"],\" giorni.\"],\"PviVyk\":[\"Unisciti al tuo team su Twenty\"],\"ogtYkT\":[\"Password aggiornata\"],\"OfhWJH\":[\"Ripristina\"],\"RE5NiU\":[\"Ripristina la tua password 🗝\"],\"7yDt8q\":[\"Grazie per esserti registrato su Twenty! Prima di iniziare, dobbiamo solo confermare che sei tu. Clicca sopra per verificare il tuo indirizzo email.\"],\"igorB1\":[\"L'area di lavoro viene disattivata in \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" e tutti i suoi dati vengono cancellati.\"],\"7OEHy1\":[\"Questa è la conferma che la password del vostro account (\",[\"email\"],\") è stata modificata con successo in data \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Questo link è valido solo per il prossimo \",[\"duration\"],\". Se il link non funziona, è possibile utilizzare direttamente il link di verifica del login:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Aggiornare l'abbonamento\"],\"wCKkSr\":[\"Verifica Email\"],\"KFmFrQ\":[\"L'area di lavoro <0>\",[\"workspaceDisplayName\"],\"</0> è stata cancellata perché l'abbonamento è scaduto \",[\"inactiveDaysBeforeDelete\"],\" giorni fa.\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/generated/ja.ts b/packages/twenty-emails/src/locales/generated/ja.ts new file mode 100644 index 000000000000..38c8e59b1d05 --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/ja.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"招待を受ける\"],\"Yxj+Uc\":[\"このワークスペースのデータはすべて永久に削除されました。\"],\"RPHFhC\":[\"メールアドレスの確認\"],\"nvkBPN\":[\"トゥエンティに接続\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[[\"userName\"],\"]様\"],\"tGme7M\":[\"というワークスペースに招待された。 \"],\"uzTaYi\":[\"こんにちは\"],\"eE1nG1\":[\"この変更をあなたが行っていない場合は、直ちにワークスペースの所有者に連絡してください。\"],\"Gz91L8\":[\"Twentyのご利用を継続される場合は、次の\",[\"remainingDays\"],\" \",[\"dayOrDays\"],\"以内にサブスクリプションを更新してください。\"],\"0weyko\":[\"再びTwentyを使用したい場合は、新しいワークスペースを作成することができます。\"],\"7JuhZQ\":[\"ワークスペース<0>\",[\"workspaceDisplayName\"],\"</0>が\",[\"daysSinceInactive\"],\"日間中断されたようです。\"],\"PviVyk\":[\"Twentyでチームに参加しよう\"],\"ogtYkT\":[\"パスワード更新\"],\"OfhWJH\":[\"リセット\"],\"RE5NiU\":[\"パスワードをリセットする\"],\"7yDt8q\":[\"Twentyのアカウント登録ありがとうございます!アカウント登録の前に、ご本人であることを確認させていただきます。上記をクリックしてメールアドレスを確認してください。\"],\"igorB1\":[\"ワークスペースは\",[\"remainingDays\"],\" \",[\"dayOrDays\"],\"で非アクティブになり、そのデータはすべて削除されます。\"],\"7OEHy1\":[\"これは、あなたのアカウント(\",[\"email\"],\")のパスワードが\",[\"formattedDate\"],\"で正常に変更されたことの確認です。\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"このリンクは次の\",[\"duration\"],\"にのみ有効です。リンクが機能しない場合は、ログイン認証リンクを直接ご利用ください:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"購読の更新\"],\"wCKkSr\":[\"電子メールの確認\"],\"KFmFrQ\":[\"サブスクリプションの有効期限が\",[\"inactiveDaysBeforeDelete\"],\"日前に切れたため、ワークスペース<0>\",[\"workspaceDisplayName\"],\"</0>が削除されました。\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/generated/ko.ts b/packages/twenty-emails/src/locales/generated/ko.ts new file mode 100644 index 000000000000..810651852776 --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/ko.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"초대 수락\"],\"Yxj+Uc\":[\"이 작업 공간의 모든 데이터는 영구적으로 삭제되었습니다.\"],\"RPHFhC\":[\"이메일 주소 확인\"],\"nvkBPN\":[\"Twenty에 연결\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[[\"userName\"],\"] 님께\"],\"tGme7M\":[\"라는 작업 공간에 초대되었습니다 \"],\"uzTaYi\":[\"안녕하세요\"],\"eE1nG1\":[\"이 변경을 시작하지 않았다면 즉시 워크스페이스 소유자에게 문의하시기 바랍니다.\"],\"Gz91L8\":[\"Twenty를 계속 사용하시려면 다음 \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" 기간 내에 구독을 업데이트하세요.\"],\"0weyko\":[\"Twenty를 다시 사용하려면 새 워크스페이스를 만들면 됩니다.\"],\"7JuhZQ\":[\"작업 공간 <0>[\",[\"workspaceDisplayName\"],\"</0> ]이 \",[\"daysSinceInactive\"],\" 일 동안 일시 중단된 것 같습니다.\"],\"PviVyk\":[\"Twenty에서 팀에 합류하세요\"],\"ogtYkT\":[\"비밀번호 업데이트\"],\"OfhWJH\":[\"초기화\"],\"RE5NiU\":[\"비밀번호 재설정 🗝\"],\"7yDt8q\":[\"Twenty에 계정을 등록해 주셔서 감사합니다! 시작하기 전에 본인인지 확인해야 합니다. 위를 클릭하여 이메일 주소를 인증하세요.\"],\"igorB1\":[\"워크스페이스는 \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\"에서 비활성화되고 모든 데이터가 삭제됩니다.\"],\"7OEHy1\":[\"계정 비밀번호(\",[\"email\"],\")가 \",[\"formattedDate\"],\"에서 성공적으로 변경되었음을 확인합니다.\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"이 링크는 다음 \",[\"duration\"],\"에만 유효합니다. 링크가 작동하지 않는 경우 로그인 인증 링크를 직접 사용할 수 있습니다:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"구독 업데이트\"],\"wCKkSr\":[\"이메일 확인\"],\"KFmFrQ\":[\"워크스페이스 <0>[\",[\"workspaceDisplayName\"],\"</0> ]는 구독이 만료된 \",[\"inactiveDaysBeforeDelete\"],\" 일 전에 삭제되었습니다.\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/generated/pseudo-en.ts b/packages/twenty-emails/src/locales/generated/pseudo-en.ts new file mode 100644 index 000000000000..a76f60a67cfa --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/pseudo-en.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Àććēƥţ ĩńvĩţē\"],\"Yxj+Uc\":[\"Àĺĺ ďàţà ĩń ţĥĩś ŵōŕķśƥàćē ĥàś ƀēēń ƥēŕḿàńēńţĺŷ ďēĺēţēď.\"],\"RPHFhC\":[\"Ćōńƒĩŕḿ ŷōũŕ ēḿàĩĺ àďďŕēśś\"],\"nvkBPN\":[\"Ćōńńēćţ ţō Ţŵēńţŷ\"],\"JRzgV7\":[\"Ďēàŕ\"],\"Lm5BBI\":[\"Ďēàŕ \",[\"userName\"]],\"tGme7M\":[\"ĥàś ĩńvĩţēď ŷōũ ţō Ĵōĩń à ŵōŕķśƥàćē ćàĺĺēď \"],\"uzTaYi\":[\"Ĥēĺĺō\"],\"eE1nG1\":[\"Ĩƒ ŷōũ ďĩď ńōţ ĩńĩţĩàţē ţĥĩś ćĥàńĝē, ƥĺēàśē ćōńţàćţ ŷōũŕ ŵōŕķśƥàćē ōŵńēŕ ĩḿḿēďĩàţēĺŷ.\"],\"Gz91L8\":[\"Ĩƒ ŷōũ ŵĩśĥ ţō ćōńţĩńũē ũśĩńĝ Ţŵēńţŷ, ƥĺēàśē ũƥďàţē ŷōũŕ śũƀśćŕĩƥţĩōń ŵĩţĥĩń ţĥē ńēxţ \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Ĩƒ ŷōũ ŵĩśĥ ţō ũśē Ţŵēńţŷ àĝàĩń, ŷōũ ćàń ćŕēàţē à ńēŵ ŵōŕķśƥàćē.\"],\"7JuhZQ\":[\"Ĩţ àƥƥēàŕś ţĥàţ ŷōũŕ ŵōŕķśƥàćē <0>\",[\"workspaceDisplayName\"],\"</0> ĥàś ƀēēń śũśƥēńďēď ƒōŕ \",[\"daysSinceInactive\"],\" ďàŷś.\"],\"PviVyk\":[\"ĵōĩń ŷōũŕ ţēàḿ ōń Ţŵēńţŷ\"],\"ogtYkT\":[\"Ƥàśśŵōŕď ũƥďàţēď\"],\"OfhWJH\":[\"Ŕēśēţ\"],\"RE5NiU\":[\"Ŕēśēţ ŷōũŕ ƥàśśŵōŕď 🗝\"],\"7yDt8q\":[\"Ţĥàńķś ƒōŕ ŕēĝĩśţēŕĩńĝ ƒōŕ àń àććōũńţ ōń Ţŵēńţŷ! ßēƒōŕē ŵē ĝēţ śţàŕţēď, ŵē Ĵũśţ ńēēď ţō ćōńƒĩŕḿ ţĥàţ ţĥĩś ĩś ŷōũ. Ćĺĩćķ àƀōvē ţō vēŕĩƒŷ ŷōũŕ ēḿàĩĺ àďďŕēśś.\"],\"igorB1\":[\"Ţĥē ŵōŕķśƥàćē ŵĩĺĺ ƀē ďēàćţĩvàţēď ĩń \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", àńď àĺĺ ĩţś ďàţà ŵĩĺĺ ƀē ďēĺēţēď.\"],\"7OEHy1\":[\"Ţĥĩś ĩś à ćōńƒĩŕḿàţĩōń ţĥàţ ƥàśśŵōŕď ƒōŕ ŷōũŕ àććōũńţ (\",[\"email\"],\") ŵàś śũććēśśƒũĺĺŷ ćĥàńĝēď ōń \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"Ţĥĩś ĩś à ćōńƒĩŕḿàţĩōń ţĥàţ ƥàśśŵōŕď ƒōŕ ŷōũŕ àććōũńţ (\",[\"email\"],\") ŵàś śũććēśśƒũĺĺŷ ćĥàńĝēď ōń \",[\"formattedDate\"],\".<0/><1/>Ĩƒ ŷōũ ďĩď ńōţ ĩńĩţĩàţē ţĥĩś ćĥàńĝē, ƥĺēàśē ćōńţàćţ ŷōũŕ ŵōŕķśƥàćē ōŵńēŕ ĩḿḿēďĩàţēĺŷ.\"],\"R4gMjN\":[\"Ţĥĩś ĺĩńķ ĩś ōńĺŷ vàĺĩď ƒōŕ ţĥē ńēxţ \",[\"duration\"],\". Ĩƒ ţĥē ĺĩńķ ďōēś ńōţ ŵōŕķ, ŷōũ ćàń ũśē ţĥē ĺōĝĩń vēŕĩƒĩćàţĩōń ĺĩńķ ďĩŕēćţĺŷ:\"],\"2oA637\":[\"Ţĥĩś ĺĩńķ ĩś ōńĺŷ vàĺĩď ƒōŕ ţĥē ńēxţ \",[\"duration\"],\". Ĩƒ ţĥē ĺĩńķ ďōēś ńōţ ŵōŕķ, ŷōũ ćàń ũśē ţĥē ĺōĝĩń vēŕĩƒĩćàţĩōń ĺĩńķ ďĩŕēćţĺŷ:<0/>\"],\"H0v4yC\":[\"Ũƥďàţē ŷōũŕ śũƀśćŕĩƥţĩōń\"],\"wCKkSr\":[\"Vēŕĩƒŷ Ēḿàĩĺ\"],\"KFmFrQ\":[\"Ŷōũŕ ŵōŕķśƥàćē <0>\",[\"workspaceDisplayName\"],\"</0> ĥàś ƀēēń ďēĺēţēď àś ŷōũŕ śũƀśćŕĩƥţĩōń ēxƥĩŕēď \",[\"inactiveDaysBeforeDelete\"],\" ďàŷś àĝō.\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/generated/pt-BR.ts b/packages/twenty-emails/src/locales/generated/pt-BR.ts new file mode 100644 index 000000000000..cfc973f3efd5 --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/pt-BR.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Aceitar convite\"],\"Yxj+Uc\":[\"Todos os dados desse espaço de trabalho foram excluídos permanentemente.\"],\"RPHFhC\":[\"Confirme seu endereço de e-mail\"],\"nvkBPN\":[\"Conecte-se ao Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Prezado \",[\"userName\"]],\"tGme7M\":[\"convidou você para participar de um espaço de trabalho chamado \"],\"uzTaYi\":[\"Olá\"],\"eE1nG1\":[\"Se você não iniciou essa alteração, entre em contato com o proprietário do espaço de trabalho imediatamente.\"],\"Gz91L8\":[\"Se quiser continuar usando o Twenty, atualize sua assinatura nos próximos \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Se quiser usar o Twenty novamente, você poderá criar um novo espaço de trabalho.\"],\"7JuhZQ\":[\"Parece que seu espaço de trabalho <0>\",[\"workspaceDisplayName\"],\"</0> foi suspenso por \",[\"daysSinceInactive\"],\" dias.\"],\"PviVyk\":[\"Junte-se à sua equipe no Twenty\"],\"ogtYkT\":[\"Senha atualizada\"],\"OfhWJH\":[\"Redefinir\"],\"RE5NiU\":[\"Redefinir sua senha 🗝\"],\"7yDt8q\":[\"Obrigado por registrar uma conta no Twenty! Antes de começarmos, precisamos confirmar que este é você. Clique acima para verificar seu endereço de e-mail.\"],\"igorB1\":[\"O espaço de trabalho será desativado em \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\", e todos os seus dados serão excluídos.\"],\"7OEHy1\":[\"Esta é uma confirmação de que a senha de sua conta (\",[\"email\"],\") foi alterada com sucesso em \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Esse link é válido somente para o próximo \",[\"duration\"],\". Se o link não funcionar, você poderá usar o link de verificação de login diretamente:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Atualize sua assinatura\"],\"wCKkSr\":[\"Verificar e-mail\"],\"KFmFrQ\":[\"Seu espaço de trabalho <0>\",[\"workspaceDisplayName\"],\"</0> foi excluído porque sua assinatura expirou \",[\"inactiveDaysBeforeDelete\"],\" dias atrás.\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/generated/pt-PT.ts b/packages/twenty-emails/src/locales/generated/pt-PT.ts new file mode 100644 index 000000000000..02f14ae90e78 --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/pt-PT.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"Aceitar convite\"],\"Yxj+Uc\":[\"Todos os dados deste espaço de trabalho foram permanentemente eliminados.\"],\"RPHFhC\":[\"Confirmar o seu endereço de correio eletrónico\"],\"nvkBPN\":[\"Ligar ao Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"Caro \",[\"userName\"]],\"tGme7M\":[\"convidou-o a juntar-se a um espaço de trabalho chamado \"],\"uzTaYi\":[\"Olá\"],\"eE1nG1\":[\"Se não foi você que iniciou esta alteração, contacte imediatamente o proprietário do seu espaço de trabalho.\"],\"Gz91L8\":[\"Se pretender continuar a utilizar o Twenty, actualize a sua subscrição nos próximos \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\".\"],\"0weyko\":[\"Se pretender voltar a utilizar o Twenty, pode criar um novo espaço de trabalho.\"],\"7JuhZQ\":[\"Parece que o seu espaço de trabalho <0>\",[\"workspaceDisplayName\"],\"</0> foi suspenso por \",[\"daysSinceInactive\"],\" dias.\"],\"PviVyk\":[\"Junte-se à sua equipa no Twenty\"],\"ogtYkT\":[\"Palavra-passe actualizada\"],\"OfhWJH\":[\"Reiniciar\"],\"RE5NiU\":[\"Repor a sua palavra-passe 🗝\"],\"7yDt8q\":[\"Obrigado por se ter registado para uma conta no Twenty! Antes de começarmos, só precisamos de confirmar que é você. Clique acima para verificar o seu endereço de e-mail.\"],\"igorB1\":[\"O espaço de trabalho será desativado em \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" e todos os seus dados serão eliminados.\"],\"7OEHy1\":[\"Esta é uma confirmação de que a palavra-passe da sua conta (\",[\"email\"],\") foi alterada com sucesso em \",[\"formattedDate\"],\".\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"Esta hiperligação só é válida para o próximo \",[\"duration\"],\". Se a ligação não funcionar, pode utilizar diretamente a ligação de verificação de início de sessão:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"Atualizar a sua subscrição\"],\"wCKkSr\":[\"Verificar o correio eletrónico\"],\"KFmFrQ\":[\"O seu espaço de trabalho <0>\",[\"workspaceDisplayName\"],\"</0> foi eliminado porque a sua subscrição expirou há \",[\"inactiveDaysBeforeDelete\"],\" dias.\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/generated/zh-Hans.ts b/packages/twenty-emails/src/locales/generated/zh-Hans.ts new file mode 100644 index 000000000000..61edbf7bb83e --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/zh-Hans.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"接受邀请\"],\"Yxj+Uc\":[\"该工作区中的所有数据已被永久删除。\"],\"RPHFhC\":[\"确认您的电子邮件地址\"],\"nvkBPN\":[\"连接到 Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"亲爱的 \",[\"userName\"]],\"tGme7M\":[\"邀请您加入名为\"],\"uzTaYi\":[\"你好\"],\"eE1nG1\":[\"如果您没有启动此更改,请立即联系您的工作区所有者。\"],\"Gz91L8\":[\"如果您希望继续使用 Twenty,请在 \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" 内更新您的订阅。\"],\"0weyko\":[\"如果您想再次使用 Twenty,可以创建一个新的工作区。\"],\"7JuhZQ\":[\"您的工作区<0>\",[\"workspaceDisplayName\"],\"</0>已被暂停 \",[\"daysSinceInactive\"],\" 天。\"],\"PviVyk\":[\"加入您的团队,使用Twenty\"],\"ogtYkT\":[\"密码已更新\"],\"OfhWJH\":[\"重置\"],\"RE5NiU\":[\"重置您的密码 🗝\"],\"7yDt8q\":[\"感谢您在 Twenty 注册帐户!在开始之前,我们只需要确认是您本人。请点击上方验证您的电子邮件地址。\"],\"igorB1\":[\"工作区将在 \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" 中停用,其所有数据将被删除。\"],\"7OEHy1\":[\"确认您的账户(\",[\"email\"],\")密码已在 \",[\"formattedDate\"],\" 上成功更改。\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"此链接仅对下 \",[\"duration\"],\" 次有效。如果链接无效,您可以直接使用登录验证链接:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"更新您的订阅\"],\"wCKkSr\":[\"验证电子邮件\"],\"KFmFrQ\":[\"您的工作区<0>[\",[\"workspaceDisplayName\"],\"</0>] 已被删除,因为您的订阅已于 \",[\"inactiveDaysBeforeDelete\"],\" 天前过期。\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/generated/zh-Hant.ts b/packages/twenty-emails/src/locales/generated/zh-Hant.ts new file mode 100644 index 000000000000..5e787a2aa2fb --- /dev/null +++ b/packages/twenty-emails/src/locales/generated/zh-Hant.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"4WPI3S\":[\"接受邀請\"],\"Yxj+Uc\":[\"该工作区中的所有数据已被永久删除。\"],\"RPHFhC\":[\"確認您的電子郵件地址\"],\"nvkBPN\":[\"連接到 Twenty\"],\"JRzgV7\":[\"Dear\"],\"Lm5BBI\":[\"親愛的 \",[\"userName\"]],\"tGme7M\":[\"已邀請您加入名為\"],\"uzTaYi\":[\"您好\"],\"eE1nG1\":[\"如果您没有启动此更改,请立即联系您的工作区所有者。\"],\"Gz91L8\":[\"如果您希望继续使用 Twenty,请在 \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" 内更新您的订阅。\"],\"0weyko\":[\"如果您想再次使用 Twenty,可以创建一个新的工作区。\"],\"7JuhZQ\":[\"您的工作区<0>\",[\"workspaceDisplayName\"],\"</0>已被暂停 \",[\"daysSinceInactive\"],\" 天。\"],\"PviVyk\":[\"加入您的團隊,來 Twenty\"],\"ogtYkT\":[\"密碼已更新\"],\"OfhWJH\":[\"重設\"],\"RE5NiU\":[\"重設您的密碼 🗝\"],\"7yDt8q\":[\"感謝您在 Twenty 註冊帳戶!在開始之前,我們需要確認這是您。請點擊以上鏈接以驗證您的電子郵件地址。\"],\"igorB1\":[\"工作区将在 \",[\"remainingDays\"],\" \",[\"dayOrDays\"],\" 中停用,其所有数据将被删除。\"],\"7OEHy1\":[\"确认您的账户(\",[\"email\"],\")密码已在 \",[\"formattedDate\"],\" 上成功更改。\"],\"wSOsS+\":[\"This is a confirmation that password for your account (\",[\"email\"],\") was successfully changed on \",[\"formattedDate\"],\".<0/><1/>If you did not initiate this change, please contact your workspace owner immediately.\"],\"R4gMjN\":[\"此链接仅对下 \",[\"duration\"],\" 次有效。如果链接无效,您可以直接使用登录验证链接:\"],\"2oA637\":[\"This link is only valid for the next \",[\"duration\"],\". If the link does not work, you can use the login verification link directly:<0/>\"],\"H0v4yC\":[\"更新您的订阅\"],\"wCKkSr\":[\"驗證電子郵件\"],\"KFmFrQ\":[\"您的工作区<0>[\",[\"workspaceDisplayName\"],\"</0>] 已被删除,因为您的订阅已于 \",[\"inactiveDaysBeforeDelete\"],\" 天前过期。\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-emails/src/locales/it.po b/packages/twenty-emails/src/locales/it.po new file mode 100644 index 000000000000..92b054cdae21 --- /dev/null +++ b/packages/twenty-emails/src/locales/it.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-02 20:44+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: it\n" + +#: src/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "Accetta invito" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "Tutti i dati di questa area di lavoro sono stati eliminati in modo permanente." + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "Conferma il tuo indirizzo email" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "Connettiti a Twenty" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "Caro {userName}" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "Ciao" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "Se non si è avviata questa modifica, contattare immediatamente il proprietario dello spazio di lavoro." + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "Se si desidera continuare a utilizzare Twenty, aggiornare l'abbonamento entro il prossimo {remainingDays} {dayOrDays}." + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "Se si desidera utilizzare nuovamente Twenty, è possibile creare una nuova area di lavoro." + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "Sembra che il vostro spazio di lavoro <0>{workspaceDisplayName}</0> sia stato sospeso per {daysSinceInactive} giorni." + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "Unisciti al tuo team su Twenty" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "Password aggiornata" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "Ripristina" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "Ripristina la tua password 🗝" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "Grazie per esserti registrato su Twenty! Prima di iniziare, dobbiamo solo confermare che sei tu. Clicca sopra per verificare il tuo indirizzo email." + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "L'area di lavoro viene disattivata in {remainingDays} {dayOrDays} e tutti i suoi dati vengono cancellati." + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "Questa è la conferma che la password del vostro account ({email}) è stata modificata con successo in data {formattedDate}." + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "Questo link è valido solo per il prossimo {duration}. Se il link non funziona, è possibile utilizzare direttamente il link di verifica del login:" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "Aggiornare l'abbonamento" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "Verifica Email" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "L'area di lavoro <0>{workspaceDisplayName}</0> è stata cancellata perché l'abbonamento è scaduto {inactiveDaysBeforeDelete} giorni fa." + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "ti ha invitato a unirti a uno spazio di lavoro chiamato " diff --git a/packages/twenty-emails/src/locales/ja.po b/packages/twenty-emails/src/locales/ja.po new file mode 100644 index 000000000000..08fcfcdc79fc --- /dev/null +++ b/packages/twenty-emails/src/locales/ja.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-02 20:44+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: ja\n" + +#: src/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "招待を受ける" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "このワークスペースのデータはすべて永久に削除されました。" + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "メールアドレスの確認" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "トゥエンティに接続" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "{userName}]様" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "こんにちは" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "この変更をあなたが行っていない場合は、直ちにワークスペースの所有者に連絡してください。" + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "Twentyのご利用を継続される場合は、次の{remainingDays} {dayOrDays}以内にサブスクリプションを更新してください。" + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "再びTwentyを使用したい場合は、新しいワークスペースを作成することができます。" + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "ワークスペース<0>{workspaceDisplayName}</0>が{daysSinceInactive}日間中断されたようです。" + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "Twentyでチームに参加しよう" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "パスワード更新" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "リセット" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "パスワードをリセットする" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "Twentyのアカウント登録ありがとうございます!アカウント登録の前に、ご本人であることを確認させていただきます。上記をクリックしてメールアドレスを確認してください。" + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "ワークスペースは{remainingDays} {dayOrDays}で非アクティブになり、そのデータはすべて削除されます。" + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "これは、あなたのアカウント({email})のパスワードが{formattedDate}で正常に変更されたことの確認です。" + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "このリンクは次の{duration}にのみ有効です。リンクが機能しない場合は、ログイン認証リンクを直接ご利用ください:" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "購読の更新" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "電子メールの確認" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "サブスクリプションの有効期限が{inactiveDaysBeforeDelete}日前に切れたため、ワークスペース<0>{workspaceDisplayName}</0>が削除されました。" + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "というワークスペースに招待された。 " diff --git a/packages/twenty-emails/src/locales/ko.po b/packages/twenty-emails/src/locales/ko.po new file mode 100644 index 000000000000..47408c8398f0 --- /dev/null +++ b/packages/twenty-emails/src/locales/ko.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-02 20:44+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: ko\n" + +#: src/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "초대 수락" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "이 작업 공간의 모든 데이터는 영구적으로 삭제되었습니다." + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "이메일 주소 확인" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "Twenty에 연결" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "{userName}] 님께" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "안녕하세요" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "이 변경을 시작하지 않았다면 즉시 워크스페이스 소유자에게 문의하시기 바랍니다." + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "Twenty를 계속 사용하시려면 다음 {remainingDays} {dayOrDays} 기간 내에 구독을 업데이트하세요." + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "Twenty를 다시 사용하려면 새 워크스페이스를 만들면 됩니다." + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "작업 공간 <0>[{workspaceDisplayName}</0> ]이 {daysSinceInactive} 일 동안 일시 중단된 것 같습니다." + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "Twenty에서 팀에 합류하세요" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "비밀번호 업데이트" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "초기화" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "비밀번호 재설정 🗝" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "Twenty에 계정을 등록해 주셔서 감사합니다! 시작하기 전에 본인인지 확인해야 합니다. 위를 클릭하여 이메일 주소를 인증하세요." + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "워크스페이스는 {remainingDays} {dayOrDays}에서 비활성화되고 모든 데이터가 삭제됩니다." + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "계정 비밀번호({email})가 {formattedDate}에서 성공적으로 변경되었음을 확인합니다." + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "이 링크는 다음 {duration}에만 유효합니다. 링크가 작동하지 않는 경우 로그인 인증 링크를 직접 사용할 수 있습니다:" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "구독 업데이트" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "이메일 확인" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "워크스페이스 <0>[{workspaceDisplayName}</0> ]는 구독이 만료된 {inactiveDaysBeforeDelete} 일 전에 삭제되었습니다." + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "라는 작업 공간에 초대되었습니다 " diff --git a/packages/twenty-emails/src/locales/pseudo-en.po b/packages/twenty-emails/src/locales/pseudo-en.po new file mode 100644 index 000000000000..a4095e9c38c1 --- /dev/null +++ b/packages/twenty-emails/src/locales/pseudo-en.po @@ -0,0 +1,114 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-01 18:53+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: pseudo-en\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" + +#: src/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "" + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "" + +#: src/emails/password-update-notify.email.tsx:24 +#~ msgid "Dear" +#~ msgstr "" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "" + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "" + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "" + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "" + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "" + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "" + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "" + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "" + +#: src/emails/password-update-notify.email.tsx:36 +#~ msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}.<0/><1/>If you did not initiate this change, please contact your workspace owner immediately." +#~ msgstr "" + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "" + +#: src/emails/password-reset-link.email.tsx:28 +#~ msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:<0/>" +#~ msgstr "" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "" diff --git a/packages/twenty-emails/src/locales/pt-BR.po b/packages/twenty-emails/src/locales/pt-BR.po new file mode 100644 index 000000000000..73765c4bbe30 --- /dev/null +++ b/packages/twenty-emails/src/locales/pt-BR.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-02 20:44+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: pt-BR\n" + +#: src/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "Aceitar convite" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "Todos os dados desse espaço de trabalho foram excluídos permanentemente." + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "Confirme seu endereço de e-mail" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "Conecte-se ao Twenty" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "Prezado {userName}" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "Olá" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "Se você não iniciou essa alteração, entre em contato com o proprietário do espaço de trabalho imediatamente." + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "Se quiser continuar usando o Twenty, atualize sua assinatura nos próximos {remainingDays} {dayOrDays}." + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "Se quiser usar o Twenty novamente, você poderá criar um novo espaço de trabalho." + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "Parece que seu espaço de trabalho <0>{workspaceDisplayName}</0> foi suspenso por {daysSinceInactive} dias." + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "Junte-se à sua equipe no Twenty" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "Senha atualizada" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "Redefinir" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "Redefinir sua senha 🗝" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "Obrigado por registrar uma conta no Twenty! Antes de começarmos, precisamos confirmar que este é você. Clique acima para verificar seu endereço de e-mail." + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "O espaço de trabalho será desativado em {remainingDays} {dayOrDays}, e todos os seus dados serão excluídos." + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "Esta é uma confirmação de que a senha de sua conta ({email}) foi alterada com sucesso em {formattedDate}." + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "Esse link é válido somente para o próximo {duration}. Se o link não funcionar, você poderá usar o link de verificação de login diretamente:" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "Atualize sua assinatura" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "Verificar e-mail" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "Seu espaço de trabalho <0>{workspaceDisplayName}</0> foi excluído porque sua assinatura expirou {inactiveDaysBeforeDelete} dias atrás." + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "convidou você para participar de um espaço de trabalho chamado " diff --git a/packages/twenty-emails/src/locales/pt-PT.po b/packages/twenty-emails/src/locales/pt-PT.po new file mode 100644 index 000000000000..fce6c484e876 --- /dev/null +++ b/packages/twenty-emails/src/locales/pt-PT.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-02 20:44+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: pt-PT\n" + +#: src/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "Aceitar convite" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "Todos os dados deste espaço de trabalho foram permanentemente eliminados." + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "Confirmar o seu endereço de correio eletrónico" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "Ligar ao Twenty" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "Caro {userName}" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "Olá" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "Se não foi você que iniciou esta alteração, contacte imediatamente o proprietário do seu espaço de trabalho." + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "Se pretender continuar a utilizar o Twenty, actualize a sua subscrição nos próximos {remainingDays} {dayOrDays}." + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "Se pretender voltar a utilizar o Twenty, pode criar um novo espaço de trabalho." + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "Parece que o seu espaço de trabalho <0>{workspaceDisplayName}</0> foi suspenso por {daysSinceInactive} dias." + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "Junte-se à sua equipa no Twenty" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "Palavra-passe actualizada" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "Reiniciar" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "Repor a sua palavra-passe 🗝" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "Obrigado por se ter registado para uma conta no Twenty! Antes de começarmos, só precisamos de confirmar que é você. Clique acima para verificar o seu endereço de e-mail." + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "O espaço de trabalho será desativado em {remainingDays} {dayOrDays} e todos os seus dados serão eliminados." + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "Esta é uma confirmação de que a palavra-passe da sua conta ({email}) foi alterada com sucesso em {formattedDate}." + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "Esta hiperligação só é válida para o próximo {duration}. Se a ligação não funcionar, pode utilizar diretamente a ligação de verificação de início de sessão:" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "Atualizar a sua subscrição" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "Verificar o correio eletrónico" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "O seu espaço de trabalho <0>{workspaceDisplayName}</0> foi eliminado porque a sua subscrição expirou há {inactiveDaysBeforeDelete} dias." + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "convidou-o a juntar-se a um espaço de trabalho chamado " diff --git a/packages/twenty-emails/src/locales/zh-Hans.po b/packages/twenty-emails/src/locales/zh-Hans.po new file mode 100644 index 000000000000..bc4231ff0dfc --- /dev/null +++ b/packages/twenty-emails/src/locales/zh-Hans.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-02 20:44+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: zh-Hans\n" + +#: src/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "接受邀请" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "该工作区中的所有数据已被永久删除。" + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "确认您的电子邮件地址" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "连接到 Twenty" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "亲爱的 {userName}" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "你好" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "如果您没有启动此更改,请立即联系您的工作区所有者。" + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "如果您希望继续使用 Twenty,请在 {remainingDays} {dayOrDays} 内更新您的订阅。" + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "如果您想再次使用 Twenty,可以创建一个新的工作区。" + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "您的工作区<0>{workspaceDisplayName}</0>已被暂停 {daysSinceInactive} 天。" + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "加入您的团队,使用Twenty" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "密码已更新" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "重置" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "重置您的密码 🗝" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "感谢您在 Twenty 注册帐户!在开始之前,我们只需要确认是您本人。请点击上方验证您的电子邮件地址。" + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "工作区将在 {remainingDays} {dayOrDays} 中停用,其所有数据将被删除。" + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "确认您的账户({email})密码已在 {formattedDate} 上成功更改。" + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "此链接仅对下 {duration} 次有效。如果链接无效,您可以直接使用登录验证链接:" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "更新您的订阅" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "验证电子邮件" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "您的工作区<0>[{workspaceDisplayName}</0>] 已被删除,因为您的订阅已于 {inactiveDaysBeforeDelete} 天前过期。" + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "邀请您加入名为" diff --git a/packages/twenty-emails/src/locales/zh-Hant.po b/packages/twenty-emails/src/locales/zh-Hant.po new file mode 100644 index 000000000000..d340fecd866b --- /dev/null +++ b/packages/twenty-emails/src/locales/zh-Hant.po @@ -0,0 +1,96 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-02 20:44+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: zh-Hant\n" + +#: src/emails/send-invite-link.email.tsx:57 +msgid "Accept invite" +msgstr "接受邀請" + +#: src/emails/clean-suspended-workspace.email.tsx:33 +msgid "All data in this workspace has been permanently deleted." +msgstr "该工作区中的所有数据已被永久删除。" + +#: src/emails/send-email-verification-link.email.tsx:22 +msgid "Confirm your email address" +msgstr "確認您的電子郵件地址" + +#: src/emails/password-update-notify.email.tsx:46 +msgid "Connect to Twenty" +msgstr "連接到 Twenty" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Dear {userName}" +msgstr "親愛的 {userName}" + +#: src/emails/password-update-notify.email.tsx:24 +msgid "Hello" +msgstr "您好" + +#: src/emails/password-update-notify.email.tsx:40 +msgid "If you did not initiate this change, please contact your workspace owner immediately." +msgstr "如果您没有启动此更改,请立即联系您的工作区所有者。" + +#: src/emails/warn-suspended-workspace.email.tsx:46 +msgid "If you wish to continue using Twenty, please update your subscription within the next {remainingDays} {dayOrDays}." +msgstr "如果您希望继续使用 Twenty,请在 {remainingDays} {dayOrDays} 内更新您的订阅。" + +#: src/emails/clean-suspended-workspace.email.tsx:36 +msgid "If you wish to use Twenty again, you can create a new workspace." +msgstr "如果您想再次使用 Twenty,可以创建一个新的工作区。" + +#: src/emails/warn-suspended-workspace.email.tsx:34 +msgid "It appears that your workspace <0>{workspaceDisplayName}</0> has been suspended for {daysSinceInactive} days." +msgstr "您的工作区<0>{workspaceDisplayName}</0>已被暂停 {daysSinceInactive} 天。" + +#: src/emails/send-invite-link.email.tsx:42 +msgid "Join your team on Twenty" +msgstr "加入您的團隊,來 Twenty" + +#: src/emails/password-update-notify.email.tsx:29 +msgid "Password updated" +msgstr "密碼已更新" + +#: src/emails/password-reset-link.email.tsx:24 +msgid "Reset" +msgstr "重設" + +#: src/emails/password-reset-link.email.tsx:23 +msgid "Reset your password 🗝" +msgstr "重設您的密碼 🗝" + +#: src/emails/send-email-verification-link.email.tsx:27 +msgid "Thanks for registering for an account on Twenty! Before we get started, we just need to confirm that this is you. Click above to verify your email address." +msgstr "感謝您在 Twenty 註冊帳戶!在開始之前,我們需要確認這是您。請點擊以上鏈接以驗證您的電子郵件地址。" + +#: src/emails/warn-suspended-workspace.email.tsx:40 +msgid "The workspace will be deactivated in {remainingDays} {dayOrDays}, and all its data will be deleted." +msgstr "工作区将在 {remainingDays} {dayOrDays} 中停用,其所有数据将被删除。" + +#: src/emails/password-update-notify.email.tsx:34 +msgid "This is a confirmation that password for your account ({email}) was successfully changed on {formattedDate}." +msgstr "确认您的账户({email})密码已在 {formattedDate} 上成功更改。" + +#: src/emails/password-reset-link.email.tsx:26 +msgid "This link is only valid for the next {duration}. If the link does not work, you can use the login verification link directly:" +msgstr "此链接仅对下 {duration} 次有效。如果链接无效,您可以直接使用登录验证链接:" + +#: src/emails/warn-suspended-workspace.email.tsx:53 +msgid "Update your subscription" +msgstr "更新您的订阅" + +#: src/emails/send-email-verification-link.email.tsx:23 +msgid "Verify Email" +msgstr "驗證電子郵件" + +#: src/emails/clean-suspended-workspace.email.tsx:27 +msgid "Your workspace <0>{workspaceDisplayName}</0> has been deleted as your subscription expired {inactiveDaysBeforeDelete} days ago." +msgstr "您的工作区<0>[{workspaceDisplayName}</0>] 已被删除,因为您的订阅已于 {inactiveDaysBeforeDelete} 天前过期。" + +#: src/emails/send-invite-link.email.tsx:50 +msgid "has invited you to join a workspace called " +msgstr "已邀請您加入名為" diff --git a/packages/twenty-emails/tsconfig.json b/packages/twenty-emails/tsconfig.json index fa9cc814c682..c798c9251a89 100644 --- a/packages/twenty-emails/tsconfig.json +++ b/packages/twenty-emails/tsconfig.json @@ -7,10 +7,10 @@ "allowSyntheticDefaultImports": true, "strict": true, "types": ["vite/client"], - "baseUrl": "." + "baseUrl": ".", }, "files": [], - "include": [], + "include": ["vite.config.ts"], "references": [ { "path": "./tsconfig.lib.json" diff --git a/packages/twenty-emails/tsconfig.lib.json b/packages/twenty-emails/tsconfig.lib.json index df7d81d48218..9765fe7d45a0 100644 --- a/packages/twenty-emails/tsconfig.lib.json +++ b/packages/twenty-emails/tsconfig.lib.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "../../.cache/tsc", + "composite": true, + "declaration": true, "types": [ "node", "@nx/react/typings/image.d.ts", diff --git a/packages/twenty-emails/vite.config.ts b/packages/twenty-emails/vite.config.ts index 4aedc623fb6b..426073cc760f 100644 --- a/packages/twenty-emails/vite.config.ts +++ b/packages/twenty-emails/vite.config.ts @@ -1,5 +1,7 @@ +import { lingui } from '@lingui/vite-plugin'; import react from '@vitejs/plugin-react-swc'; import * as path from 'path'; +import { APP_LOCALES } from 'twenty-shared'; import { defineConfig } from 'vite'; import dts from 'vite-plugin-dts'; import tsconfigPaths from 'vite-tsconfig-paths'; @@ -9,7 +11,12 @@ export default defineConfig({ cacheDir: '../../node_modules/.vite/packages/twenty-emails', plugins: [ - react(), + react({ + plugins: [['@lingui/swc-plugin', {}]], + }), + lingui({ + configPath: path.resolve(__dirname, './lingui.config.ts'), + }), tsconfigPaths(), dts({ entryRoot: 'src', @@ -26,16 +33,20 @@ export default defineConfig({ transformMixedEsModules: true, }, lib: { - // Could also be a dictionary or array of multiple entry points. - entry: 'src/index.ts', + entry: { + index: 'src/index.ts', + ...Object.values(APP_LOCALES).reduce( + (acc, locale) => ({ + ...acc, + [`locales/generated/${locale}`]: `src/locales/generated/${locale}.ts`, + }), + {}, + ), + }, name: 'twenty-emails', - fileName: 'index', - // Change this to the formats you want to support. - // Don't forget to update your package.json as well. formats: ['es', 'cjs'], }, rollupOptions: { - // External packages that should not be bundled into your library. external: ['react', 'react-dom', 'react/jsx-runtime'], }, }, diff --git a/packages/twenty-front/src/generated-metadata/gql.ts b/packages/twenty-front/src/generated-metadata/gql.ts index 2a376b33bddb..39b21a1b2396 100644 --- a/packages/twenty-front/src/generated-metadata/gql.ts +++ b/packages/twenty-front/src/generated-metadata/gql.ts @@ -34,6 +34,7 @@ const documents = { "\n mutation DeleteOneRelationMetadataItem($idToDelete: UUID!) {\n deleteOneRelation(input: { id: $idToDelete }) {\n id\n }\n }\n": types.DeleteOneRelationMetadataItemDocument, "\n query ObjectMetadataItems(\n $objectFilter: ObjectFilter\n $fieldFilter: FieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n shortcut\n isLabelSyncedWithName\n indexMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n name\n indexWhereClause\n indexType\n isUnique\n indexFieldMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n order\n fieldMetadataId\n }\n }\n }\n }\n }\n }\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n isUnique\n createdAt\n updatedAt\n defaultValue\n options\n settings\n isLabelSyncedWithName\n relationDefinition {\n relationId\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n": types.ObjectMetadataItemsDocument, "\n fragment ServerlessFunctionFields on ServerlessFunction {\n id\n name\n description\n runtime\n timeoutSeconds\n syncStatus\n latestVersion\n latestVersionInputSchema\n publishedVersions\n createdAt\n updatedAt\n }\n": types.ServerlessFunctionFieldsFragmentDoc, + "\n \n mutation BuildDraftServerlessFunction(\n $input: BuildDraftServerlessFunctionInput!\n ) {\n buildDraftServerlessFunction(input: $input) {\n ...ServerlessFunctionFields\n }\n }\n": types.BuildDraftServerlessFunctionDocument, "\n \n mutation CreateOneServerlessFunctionItem(\n $input: CreateServerlessFunctionInput!\n ) {\n createOneServerlessFunction(input: $input) {\n ...ServerlessFunctionFields\n }\n }\n": types.CreateOneServerlessFunctionItemDocument, "\n \n mutation DeleteOneServerlessFunction($input: ServerlessFunctionIdInput!) {\n deleteOneServerlessFunction(input: $input) {\n ...ServerlessFunctionFields\n }\n }\n": types.DeleteOneServerlessFunctionDocument, "\n mutation ExecuteOneServerlessFunction(\n $input: ExecuteServerlessFunctionInput!\n ) {\n executeOneServerlessFunction(input: $input) {\n data\n duration\n status\n error\n }\n }\n": types.ExecuteOneServerlessFunctionDocument, @@ -143,6 +144,10 @@ export function graphql(source: "\n query ObjectMetadataItems(\n $objectFilt * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function graphql(source: "\n fragment ServerlessFunctionFields on ServerlessFunction {\n id\n name\n description\n runtime\n timeoutSeconds\n syncStatus\n latestVersion\n latestVersionInputSchema\n publishedVersions\n createdAt\n updatedAt\n }\n"): (typeof documents)["\n fragment ServerlessFunctionFields on ServerlessFunction {\n id\n name\n description\n runtime\n timeoutSeconds\n syncStatus\n latestVersion\n latestVersionInputSchema\n publishedVersions\n createdAt\n updatedAt\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n \n mutation BuildDraftServerlessFunction(\n $input: BuildDraftServerlessFunctionInput!\n ) {\n buildDraftServerlessFunction(input: $input) {\n ...ServerlessFunctionFields\n }\n }\n"): (typeof documents)["\n \n mutation BuildDraftServerlessFunction(\n $input: BuildDraftServerlessFunctionInput!\n ) {\n buildDraftServerlessFunction(input: $input) {\n ...ServerlessFunctionFields\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index e4ac7186852b..4187b89062a7 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -224,6 +224,11 @@ export type BooleanFieldComparison = { isNot?: InputMaybe<Scalars['Boolean']['input']>; }; +export type BuildDraftServerlessFunctionInput = { + /** The id of the function. */ + id: Scalars['ID']['input']; +}; + export enum CalendarChannelVisibility { METADATA = 'METADATA', SHARE_EVERYTHING = 'SHARE_EVERYTHING' @@ -487,6 +492,7 @@ export enum FeatureFlagKey { IsLocalizationEnabled = 'IsLocalizationEnabled', IsMicrosoftSyncEnabled = 'IsMicrosoftSyncEnabled', IsNewRelationEnabled = 'IsNewRelationEnabled', + IsPermissionsEnabled = 'IsPermissionsEnabled', IsPostgreSQLIntegrationEnabled = 'IsPostgreSQLIntegrationEnabled', IsRichTextV2Enabled = 'IsRichTextV2Enabled', IsStripeIntegrationEnabled = 'IsStripeIntegrationEnabled', @@ -763,6 +769,7 @@ export type Mutation = { activateWorkflowVersion: Scalars['Boolean']['output']; activateWorkspace: Workspace; authorizeApp: AuthorizeApp; + buildDraftServerlessFunction: ServerlessFunction; checkoutSession: BillingSessionOutput; computeStepOutputSchema: Scalars['JSON']['output']; createDraftFromWorkflowVersion: WorkflowVersion; @@ -845,6 +852,11 @@ export type MutationAuthorizeAppArgs = { }; +export type MutationBuildDraftServerlessFunctionArgs = { + input: BuildDraftServerlessFunctionInput; +}; + + export type MutationCheckoutSessionArgs = { plan?: BillingPlanKey; recurringInterval: SubscriptionInterval; @@ -1647,6 +1659,7 @@ export type ServerlessFunctionExecutionResult = { /** Status of the serverless function execution */ export enum ServerlessFunctionExecutionStatus { ERROR = 'ERROR', + IDLE = 'IDLE', SUCCESS = 'SUCCESS' } @@ -1657,6 +1670,7 @@ export type ServerlessFunctionIdInput = { /** SyncStatus of the serverlessFunction */ export enum ServerlessFunctionSyncStatus { + BUILDING = 'BUILDING', NOT_READY = 'NOT_READY', READY = 'READY' } @@ -2239,6 +2253,13 @@ export type ObjectMetadataItemsQuery = { __typename?: 'Query', objects: { __type export type ServerlessFunctionFieldsFragment = { __typename?: 'ServerlessFunction', id: any, name: string, description?: string | null, runtime: string, timeoutSeconds: number, syncStatus: ServerlessFunctionSyncStatus, latestVersion?: string | null, latestVersionInputSchema?: any | null, publishedVersions: Array<string>, createdAt: any, updatedAt: any }; +export type BuildDraftServerlessFunctionMutationVariables = Exact<{ + input: BuildDraftServerlessFunctionInput; +}>; + + +export type BuildDraftServerlessFunctionMutation = { __typename?: 'Mutation', buildDraftServerlessFunction: { __typename?: 'ServerlessFunction', id: any, name: string, description?: string | null, runtime: string, timeoutSeconds: number, syncStatus: ServerlessFunctionSyncStatus, latestVersion?: string | null, latestVersionInputSchema?: any | null, publishedVersions: Array<string>, createdAt: any, updatedAt: any } }; + export type CreateOneServerlessFunctionItemMutationVariables = Exact<{ input: CreateServerlessFunctionInput; }>; @@ -2321,6 +2342,7 @@ export const DeleteOneObjectMetadataItemDocument = {"kind":"Document","definitio export const DeleteOneFieldMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneFieldMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneField"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}}]}}]}}]} as unknown as DocumentNode<DeleteOneFieldMetadataItemMutation, DeleteOneFieldMetadataItemMutationVariables>; export const DeleteOneRelationMetadataItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneRelationMetadataItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneRelation"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"idToDelete"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<DeleteOneRelationMetadataItemMutation, DeleteOneRelationMetadataItemMutationVariables>; export const ObjectMetadataItemsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ObjectMetadataItems"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectFilter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"ObjectFilter"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"fieldFilter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"FieldFilter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"objects"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectFilter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"dataSourceId"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadatas"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"100"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadatas"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"100"}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}}]}}]}}]}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fields"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"paging"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"1000"}}]}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"fieldFilter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"relationDefinition"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"relationId"}},{"kind":"Field","name":{"kind":"Name","value":"direction"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"hasPreviousPage"}},{"kind":"Field","name":{"kind":"Name","value":"startCursor"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}}]}}]}}]} as unknown as DocumentNode<ObjectMetadataItemsQuery, ObjectMetadataItemsQueryVariables>; +export const BuildDraftServerlessFunctionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"BuildDraftServerlessFunction"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"BuildDraftServerlessFunctionInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"buildDraftServerlessFunction"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ServerlessFunctionFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerlessFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerlessFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"syncStatus"}},{"kind":"Field","name":{"kind":"Name","value":"latestVersion"}},{"kind":"Field","name":{"kind":"Name","value":"latestVersionInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"publishedVersions"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode<BuildDraftServerlessFunctionMutation, BuildDraftServerlessFunctionMutationVariables>; export const CreateOneServerlessFunctionItemDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateOneServerlessFunctionItem"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CreateServerlessFunctionInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createOneServerlessFunction"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ServerlessFunctionFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerlessFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerlessFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"syncStatus"}},{"kind":"Field","name":{"kind":"Name","value":"latestVersion"}},{"kind":"Field","name":{"kind":"Name","value":"latestVersionInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"publishedVersions"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode<CreateOneServerlessFunctionItemMutation, CreateOneServerlessFunctionItemMutationVariables>; export const DeleteOneServerlessFunctionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteOneServerlessFunction"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ServerlessFunctionIdInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteOneServerlessFunction"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ServerlessFunctionFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerlessFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerlessFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"syncStatus"}},{"kind":"Field","name":{"kind":"Name","value":"latestVersion"}},{"kind":"Field","name":{"kind":"Name","value":"latestVersionInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"publishedVersions"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode<DeleteOneServerlessFunctionMutation, DeleteOneServerlessFunctionMutationVariables>; export const ExecuteOneServerlessFunctionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ExecuteOneServerlessFunction"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ExecuteServerlessFunctionInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"executeOneServerlessFunction"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"}},{"kind":"Field","name":{"kind":"Name","value":"duration"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"error"}}]}}]}}]} as unknown as DocumentNode<ExecuteOneServerlessFunctionMutation, ExecuteOneServerlessFunctionMutationVariables>; diff --git a/packages/twenty-front/src/generated/graphql.tsx b/packages/twenty-front/src/generated/graphql.tsx index 7507542ffae3..cddf23662b92 100644 --- a/packages/twenty-front/src/generated/graphql.tsx +++ b/packages/twenty-front/src/generated/graphql.tsx @@ -1,5 +1,5 @@ -import * as Apollo from '@apollo/client'; import { gql } from '@apollo/client'; +import * as Apollo from '@apollo/client'; export type Maybe<T> = T | null; export type InputMaybe<T> = Maybe<T>; export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] }; @@ -217,6 +217,11 @@ export type BooleanFieldComparison = { isNot?: InputMaybe<Scalars['Boolean']>; }; +export type BuildDraftServerlessFunctionInput = { + /** The id of the function. */ + id: Scalars['ID']; +}; + export enum CalendarChannelVisibility { METADATA = 'METADATA', SHARE_EVERYTHING = 'SHARE_EVERYTHING' @@ -689,6 +694,7 @@ export type Mutation = { activateWorkflowVersion: Scalars['Boolean']; activateWorkspace: Workspace; authorizeApp: AuthorizeApp; + buildDraftServerlessFunction: ServerlessFunction; checkoutSession: BillingSessionOutput; computeStepOutputSchema: Scalars['JSON']; createDraftFromWorkflowVersion: WorkflowVersion; @@ -763,6 +769,11 @@ export type MutationAuthorizeAppArgs = { }; +export type MutationBuildDraftServerlessFunctionArgs = { + input: BuildDraftServerlessFunctionInput; +}; + + export type MutationCheckoutSessionArgs = { plan?: BillingPlanKey; recurringInterval: SubscriptionInterval; @@ -1444,6 +1455,7 @@ export type ServerlessFunctionExecutionResult = { /** Status of the serverless function execution */ export enum ServerlessFunctionExecutionStatus { ERROR = 'ERROR', + IDLE = 'IDLE', SUCCESS = 'SUCCESS' } @@ -1454,6 +1466,7 @@ export type ServerlessFunctionIdInput = { /** SyncStatus of the serverlessFunction */ export enum ServerlessFunctionSyncStatus { + BUILDING = 'BUILDING', NOT_READY = 'NOT_READY', READY = 'READY' } diff --git a/packages/twenty-front/src/hooks/useScrollRestoration.ts b/packages/twenty-front/src/hooks/useScrollRestoration.ts index 9ef8354f7217..1da2f30c350a 100644 --- a/packages/twenty-front/src/hooks/useScrollRestoration.ts +++ b/packages/twenty-front/src/hooks/useScrollRestoration.ts @@ -5,7 +5,7 @@ import { scrollWrapperInstanceComponentState } from '@/ui/utilities/scroll/state import { scrollWrapperScrollTopComponentState } from '@/ui/utilities/scroll/states/scrollWrapperScrollTopComponentState'; import { useRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentStateV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; /** * @deprecated We should now use useScrollToPosition instead diff --git a/packages/twenty-front/src/locales/de.po b/packages/twenty-front/src/locales/de.po index c3ae3bf7fa55..775f697943ca 100644 --- a/packages/twenty-front/src/locales/de.po +++ b/packages/twenty-front/src/locales/de.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 15:08+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -256,11 +256,11 @@ msgstr "Passwort ändern" msgid "Change {to}" msgstr "Ändern {to}" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 msgid "Chinese — Simplified" msgstr "Chinesisch - Vereinfacht" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 msgid "Chinese — Traditional" msgstr "Chinesisch - Traditionell" @@ -846,6 +846,10 @@ msgstr "Laden Sie Ihr Team ein" msgid "Italian" msgstr "Italienisch" +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "Japanisch" + #: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 msgid "Korean" msgstr "Koreanisch" @@ -1106,11 +1110,11 @@ msgstr "Bitte geben Sie \"{confirmationValue}\" ein, um zu bestätigen, dass Sie msgid "Please type {confirmationText} to confirm you want to delete this webhook." msgstr "Bitte geben Sie {confirmationText} ein, um zu bestätigen, dass Sie diesen Webhook löschen möchten." -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 msgid "Portuguese — Brazil" msgstr "Portugiesisch - Brasilien" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 msgid "Portuguese — Portugal" msgstr "Portugiesisch - Portugal" @@ -1125,7 +1129,7 @@ msgstr "Vorschau" msgid "Profile" msgstr "Profil" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:113 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 msgid "Pseudo-English" msgstr "Pseudo-Englisch" diff --git a/packages/twenty-front/src/locales/en.po b/packages/twenty-front/src/locales/en.po index 92866318bb0c..ba9a66359222 100644 --- a/packages/twenty-front/src/locales/en.po +++ b/packages/twenty-front/src/locales/en.po @@ -275,11 +275,11 @@ msgstr "Change {to}" msgid "Change Password" msgstr "Change Password" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 msgid "Chinese — Simplified" msgstr "Chinese — Simplified" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 msgid "Chinese — Traditional" msgstr "Chinese — Traditional" @@ -877,6 +877,10 @@ msgstr "Invite your team" msgid "Italian" msgstr "Italian" +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "Japanese" + #: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 msgid "Korean" msgstr "Korean" @@ -1145,11 +1149,11 @@ msgstr "Please type {confirmationText} to confirm you want to delete this webhoo #~ msgid "Portuguese" #~ msgstr "Portuguese" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 msgid "Portuguese — Brazil" msgstr "Portuguese — Brazil" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 msgid "Portuguese — Portugal" msgstr "Portuguese — Portugal" @@ -1172,7 +1176,7 @@ msgstr "Preview" msgid "Profile" msgstr "Profile" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:113 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 msgid "Pseudo-English" msgstr "Pseudo-English" diff --git a/packages/twenty-front/src/locales/es.po b/packages/twenty-front/src/locales/es.po index 2486438e2953..9677fa2cfa76 100644 --- a/packages/twenty-front/src/locales/es.po +++ b/packages/twenty-front/src/locales/es.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 15:08+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -256,11 +256,11 @@ msgstr "Cambiar contraseña" msgid "Change {to}" msgstr "Cambiar {to}" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 msgid "Chinese — Simplified" msgstr "Chino simplificado" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 msgid "Chinese — Traditional" msgstr "Chino - Tradicional" @@ -846,6 +846,10 @@ msgstr "Invite a su equipo" msgid "Italian" msgstr "Italiano" +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "Japonés" + #: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 msgid "Korean" msgstr "Coreano" @@ -1106,11 +1110,11 @@ msgstr "Escriba \"{confirmationValue}\" para confirmar que desea eliminar esta c msgid "Please type {confirmationText} to confirm you want to delete this webhook." msgstr "Por favor, escriba {confirmationText} para confirmar que desea eliminar este webhook." -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 msgid "Portuguese — Brazil" msgstr "Portugués - Brasil" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 msgid "Portuguese — Portugal" msgstr "Portugués - Portugal" @@ -1125,7 +1129,7 @@ msgstr "Vista previa" msgid "Profile" msgstr "Perfil" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:113 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 msgid "Pseudo-English" msgstr "Pseudoinglés" diff --git a/packages/twenty-front/src/locales/fr.po b/packages/twenty-front/src/locales/fr.po index 9a37fc8a7f48..103c6214547a 100644 --- a/packages/twenty-front/src/locales/fr.po +++ b/packages/twenty-front/src/locales/fr.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 15:08+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -256,11 +256,11 @@ msgstr "Modifier le mot de passe" msgid "Change {to}" msgstr "Modifier {to}" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 msgid "Chinese — Simplified" msgstr "Chinois - simplifié" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 msgid "Chinese — Traditional" msgstr "Chinois - Traditionnel" @@ -846,6 +846,10 @@ msgstr "Invitez votre équipe" msgid "Italian" msgstr "Italien" +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "Japonais" + #: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 msgid "Korean" msgstr "Coréen" @@ -1106,11 +1110,11 @@ msgstr "Veuillez taper \"{confirmationValue}\" pour confirmer que vous souhaitez msgid "Please type {confirmationText} to confirm you want to delete this webhook." msgstr "Veuillez taper {confirmationText} pour confirmer que vous souhaitez supprimer ce webhook." -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 msgid "Portuguese — Brazil" msgstr "Portugais - Brésil" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 msgid "Portuguese — Portugal" msgstr "Portugais - Portugal" @@ -1125,7 +1129,7 @@ msgstr "Avant-première" msgid "Profile" msgstr "Profil" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:113 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 msgid "Pseudo-English" msgstr "Pseudo-anglais" diff --git a/packages/twenty-front/src/locales/generated/de.ts b/packages/twenty-front/src/locales/generated/de.ts index 1542563f30da..f9ec7ec2314c 100644 --- a/packages/twenty-front/src/locales/generated/de.ts +++ b/packages/twenty-front/src/locales/generated/de.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" von \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" API-Schlüssel\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 Workflow-Knotenausführungen\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Feld konfigurieren\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abbrechen\"],\"uyJsf6\":[\"Über\"],\"AeXO77\":[\"Konto\"],\"nD0Y+a\":[\"Konto-Löschung\"],\"bPwFdf\":[\"Konten\"],\"FQBaXG\":[\"Aktivieren Sie\"],\"tu8A/k\":[\"Workflow aktivieren\"],\"F6pfE9\":[\"Aktiv\"],\"Mue4oc\":[\"Aktive API-Schlüssel, die von Ihnen oder Ihrem Team erstellt wurden.\"],\"m16xKo\":[\"Hinzufügen\"],\"DpV70M\":[\"Feld hinzufügen\"],\"dEO3Zx\":[\"Objekt hinzufügen\"],\"sgXUv+\":[\"SSO-Identitätsanbieter hinzufügen\"],\"5+ttxv\":[\"Zur Blockliste hinzufügen\"],\"pBsoKL\":[\"Zu Favoriten hinzufügen\"],\"m2qDV8\":[\"Fügen Sie Ihre erste \",[\"objectLabel\"]],\"vLO+NG\":[\"Hinzugefügt \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Alle\"],\"3saA7W\":[\"Alle (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Alle Rollen\"],\"GMx1K0\":[\"Erlauben Sie Anmeldungen über die Google-Single-Sign-On-Funktion.\"],\"dea+zy\":[\"Erlauben Sie Anmeldungen über Microsofts Single Sign-On-Funktion.\"],\"wMg43c\":[\"Erlauben Sie die Einladung neuer Benutzer durch die Freigabe eines Einladungslinks.\"],\"vHeVg5\":[\"Erlauben Sie den Benutzern, sich mit einer E-Mail und einem Passwort anzumelden.\"],\"mJ6m4C\":[\"Eine optionale Beschreibung\"],\"0RqpZr\":[\"API & Webhooks\"],\"yRnk5W\":[\"API-Schlüssel\"],\"5h8ooz\":[\"API-Schlüssel\"],\"kAtj+q\":[\"API-Name\"],\"aAIQg2\":[\"Erscheinungsbild\"],\"3iX0kh\":[\"Sind Sie sicher, dass Sie Ihr Abrechnungsintervall ändern möchten?\"],\"nYD/Cq\":[\"Aufsteigend\"],\"rfYmIr\":[\"Rollen zuweisen, um die Zugriffsrechte der einzelnen Mitglieder festzulegen\"],\"lxQ+5m\":[\"Zugewiesen an\"],\"Y7Dx6e\":[\"Mindestens eine Authentifizierungsmethode muss aktiviert sein\"],\"P8fBlG\":[\"Authentifizierung\"],\"yIVrHZ\":[\"Autorisieren Sie\"],\"3uQmjD\":[\"Durchschnitt\"],\"Dht9W3\":[\"Zurück zum Inhalt\"],\"R+w/Va\":[\"Rechnungsstellung\"],\"K1172m\":[\"Blockliste\"],\"2yl5lQ\":[\"Buchen Sie einen Anruf\"],\"PmmvzS\":[\"Berechnen Sie\"],\"AjVXBS\":[\"Kalender\"],\"EUpfsd\":[\"Kalendarien\"],\"dEgA5A\":[\"Abbrechen\"],\"0TllC8\":[\"Jederzeit abbrechen\"],\"rRK/Lf\":[\"Plan stornieren\"],\"N6gPiD\":[\"Ihr Abonnement kündigen\"],\"OfzMnb\":[\"Ändern \",[\"to\"]],\"VhMDMg\":[\"Passwort ändern\"],\"SviKkE\":[\"Chinesisch - Vereinfacht\"],\"dzb4Ep\":[\"Chinesisch - Traditionell\"],\"JEFFOR\":[\"Wählen Sie ein Objekt\"],\"KT6rEB\":[\"Wählen Sie Ihren Anbieter\"],\"9qP96p\":[\"Wählen Sie Ihre Probezeit\"],\"yz7wBu\":[\"Schließen Sie\"],\"+zUMwJ\":[\"Konfigurieren Sie eine SSO-Verbindung\"],\"QTNsSm\":[\"Konfigurieren Sie Ihre Kalendereinstellungen und passen Sie sie an.\"],\"aGwm+D\":[\"Konfigurieren Sie die Anzeige von Daten in der App\"],\"Bh4GBD\":[\"Konfigurieren Sie Ihre E-Mail- und Kalendereinstellungen.\"],\"D8ATlr\":[\"Verbinden Sie ein neues Konto mit Ihrem Arbeitsbereich\"],\"Zgi9Fd\":[\"Mit Google verbinden\"],\"IOfqM8\":[\"Verbindung mit Microsoft\"],\"9TzudL\":[\"Verbundene Konten\"],\"M73whl\":[\"Kontext\"],\"xGVfLh\":[\"Weiter\"],\"CcGOj+\":[\"Kopilot\"],\"7eVkEH\":[\"Link zur Einladung kopieren\"],\"Ej5euX\":[\"Kopieren Sie diesen Schlüssel, da er nicht mehr sichtbar sein wird\"],\"wBMjJ2\":[\"Zählen Sie\"],\"EkZfen\":[\"Alle zählen\"],\"vQJINq\":[\"Leer zählen\"],\"DzRsDJ\":[\"Zählung nicht leer\"],\"9FZBbf\":[\"Eindeutige Werte zählen\"],\"zNoOC2\":[\"Erstellen Sie einen Workflow und kehren Sie hierher zurück, um seine Versionen anzuzeigen\"],\"uXGLuq\":[\"API-Schlüssel erstellen\"],\"d0DCww\":[\"Neuen Datensatz erstellen\"],\"dkAPxi\":[\"Webhook erstellen\"],\"8skTDV\":[\"Benutzerdefinierte Objekte\"],\"qt+EaC\":[\"Passen Sie die in den \",[\"objectLabelSingular\"],\"-Ansichten verfügbaren Felder an.\"],\"CMhr4u\":[\"Domäne anpassen\"],\"bCJa9l\":[\"Passen Sie die Sicherheit Ihres Arbeitsbereichs an\"],\"Zz6Cxn\":[\"Gefahrenzone\"],\"5cNMFz\":[\"Datenmodell\"],\"r+cVRP\":[\"Datentyp\"],\"mYGY3B\":[\"Datum\"],\"Ud9zHv\":[\"Datum und Uhrzeit\"],\"5y3O+A\":[\"Deaktivieren Sie\"],\"qk4i22\":[\"Deaktivieren Sie \\\"Objektbezeichnungen und API-Namen synchronisieren\\\", um einen benutzerdefinierten API-Namen festzulegen\"],\"gexAq8\":[\"Deaktivieren Sie dieses Feld\"],\"4tpC8V\":[\"Workflow deaktivieren\"],\"Y2ImVJ\":[\"Definieren Sie den Namen und die Beschreibung Ihres Objekts\"],\"cnGeoo\":[\"Löschen\"],\"ZDGm40\":[\"Konto löschen\"],\"gAz0S5\":[\"Konto und alle zugehörigen Daten löschen\"],\"hGfWDm\":[\"API-Schlüssel löschen\"],\"4dpwsE\":[\"Datensatz löschen\"],\"kf0A63\":[\"Datensätze löschen\"],\"T6S2Ns\":[\"Löschen Sie diese Integration\"],\"snMaH4\":[\"Webhook löschen\"],\"kYu0eF\":[\"Arbeitsbereich löschen\"],\"mk2Ygs\":[\"Löschen Sie Ihren gesamten Arbeitsbereich\"],\"Cko536\":[\"Absteigend\"],\"Nu4oKW\":[\"Beschreibung\"],\"2xxBws\":[\"Zerstören Sie\"],\"n+SX4g\":[\"Entwickler\"],\"zAg2B9\":[\"Entwurf verwerfen\"],\"i66xz9\":[\"Anzeige als relatives Datum\"],\"EoKe5U\":[\"Domäne\"],\"QVVmxi\":[\"Z.B. Backoffice-Integration\"],\"tOkc8o\":[\"Früheste\"],\"JTbQuO\":[\"Frühestes Datum\"],\"v+uKyy\":[\"Abrechnungsintervall bearbeiten\"],\"h2KoTu\":[\"Zahlungsmethode bearbeiten, Rechnungen einsehen und mehr\"],\"6o1M/Q\":[\"Bearbeiten Sie den Namen Ihrer Subdomain oder legen Sie eine benutzerdefinierte Domain fest.\"],\"O3oNi5\":[\"E-Mail\"],\"lfQsvW\":[\"E-Mail-Integration\"],\"QT/Wo7\":[\"E-Mail oder Domain ist bereits in der Blockliste\"],\"BXEcos\":[\"E-Mails\"],\"eXoH4Q\":[\"mitarbeiter\"],\"gqv5ZL\":[\"Mitarbeiter\"],\"N2S1rs\":[\"Leere\"],\"T3juzf\":[\"Endpunkt-URL\"],\"lYGfRP\":[\"Englisch\"],\"/bfFKe\":[\"Genießen Sie eine \",[\"withCreditCardTrialPeriodDuration\"],\"-tägige kostenlose Testphase\"],\"GpB8YV\":[\"Unternehmen\"],\"c3qGJX\":[\"Fehler beim Löschen des Api-Schlüssels: \",[\"err\"]],\"bj7nh3\":[\"Fehler beim Regenerieren des Api-Schlüssels: \",[\"err\"]],\"VSQxWH\":[\"Fehler beim Umschalten des Abonnements \",[\"to\"],\".\"],\"JLxMta\":[\"Erstellen Sie Webhook-Endpunkte für Benachrichtigungen über asynchrone Ereignisse.\"],\"cIgBjB\":[\"Die folgenden Personen und Domänen von der E-Mail-Synchronisierung ausschließen\"],\"fV7V51\":[\"Vorhandene Objekte\"],\"IZ4o2e\":[\"Beenden der Einstellungen\"],\"tXGQvS\":[\"Erwartet, dass der ausgewählte Knoten ein Schrittknoten ist.\"],\"bKBhgb\":[\"Erfahrung\"],\"LxRNPw\":[\"Verfallsdatum\"],\"SkXfL0\":[\"Verfallsdatum\"],\"i9qiyR\":[\"Läuft ab in\"],\"GS+Mus\":[\"Exportieren\"],\"ep2rbf\":[\"Datensätze exportieren\"],\"q46CjD\":[\"In PDF exportieren\"],\"DaGxE0\":[\"Ansicht exportieren\"],\"X9kySA\":[\"Favoriten\"],\"zXgopL\":[\"Feldtyp\"],\"vF68cg\":[\"Felder\"],\"3w/aqw\":[\"Felder zählen\"],\"o7J4JM\":[\"Filter\"],\"cSev+j\":[\"Filter\"],\"nLC6tu\":[\"Französisch\"],\"aTieE0\":[\"von monatlich bis jährlich\"],\"K04lE5\":[\"von jährlich auf monatlich\"],\"scmRyR\":[\"Vollständiger Zugang\"],\"xANKBj\":[\"Funktionen\"],\"Weq9zb\":[\"Allgemein\"],\"DDcvSo\":[\"Deutsch\"],\"NXEW3h\":[\"Holen Sie das Beste aus Ihrem Arbeitsplatz heraus, indem Sie Ihr Team einladen.\"],\"zSGbaR\":[\"Holen Sie sich Ihr Abonnement\"],\"2GT3Hf\":[\"Global\"],\"hWp1MY\":[\"Gewähren Sie dem Twenty-Support vorübergehend Zugang zu Ihrem Arbeitsbereich, damit wir Probleme beheben oder Inhalte in Ihrem Namen wiederherstellen können. Sie können den Zugriff jederzeit widerrufen.\"],\"vLyv1R\":[\"Ausblenden\"],\"XTWO+W\":[\"Icon und Name\"],\"sJGljQ\":[\"Kennung\"],\"j843N3\":[\"Wenn Sie diesen Schlüssel verloren haben, können Sie ihn neu generieren, aber beachten Sie, dass jedes Skript, das diesen Schlüssel verwendet, aktualisiert werden muss. Bitte geben Sie zur Bestätigung \\\"\",[\"confirmationValue\"],\"\\\" ein.\"],\"NoNwIX\":[\"Inaktiv\"],\"pZ/USH\":[\"Indizes\"],\"JE2tjr\":[\"Die Eingabe muss in Großbuchstaben erfolgen und darf nicht mit einer Zahl beginnen\"],\"AwUsnG\":[\"Instanzen\"],\"nbfdhU\":[\"Integrationen\"],\"NtFk/Z\":[\"Ungültiger Autorisierungsanbieter\"],\"B2Tpo0\":[\"Ungültige E-Mail\"],\"/m52AE\":[\"Ungültige E-Mail oder Domäne\"],\"QdoUFL\":[\"Ungültige Formularwerte\"],\"0M8+El\":[\"Per E-Mail einladen\"],\"PWIq/W\":[\"Per Link einladen\"],\"3athPG\":[\"Einladen per Link\"],\"5IfmKA\":[\"Einladungslink an E-Mail-Adressen gesendet\"],\"d+Y+rP\":[\"Laden Sie Ihr Team ein\"],\"Lj7sBL\":[\"Italienisch\"],\"h6S9Yz\":[\"Koreanisch\"],\"zrpwCd\":[\"Labor\"],\"vXIe7J\":[\"Sprache\"],\"wL3cK8\":[\"Neueste\"],\"Kcjbmz\":[\"Spätester Termin\"],\"pQjjYo\":[\"Link in die Zwischenablage kopiert\"],\"FgAxTj\":[\"Abmelden\"],\"nOhz3x\":[\"Abmeldung\"],\"T6YjCk\":[\"Mitglieder verwalten\"],\"4cjU2u\":[\"Verwalten Sie hier die Mitglieder Ihres Bereichs\"],\"FyFNsd\":[\"Verwalten Sie Ihre Internetkonten.\"],\"36kYu0\":[\"Verwalten Sie Ihr Abonnement\"],\"3Sdni6\":[\"Als erledigt markieren\"],\"CK1KXz\":[\"Max\"],\"wlQNTg\":[\"Mitglieder\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"Mehr Optionen\"],\"iSLA/r\":[\"Nach links bewegen\"],\"Ubl2by\":[\"Nach rechts bewegen\"],\"6YtxFj\":[\"Name\"],\"z+6jaZ\":[\"Name Ihres API-Schlüssels\"],\"J7w8lI\":[\"Name Ihres Arbeitsbereichs\"],\"2T8KCk\":[\"Zum nächsten Datensatz navigieren\"],\"veSA19\":[\"Zur nächsten Version navigieren\"],\"ZTEho+\":[\"Zum nächsten Workflow navigieren\"],\"2tw9bo\":[\"Zum vorherigen Datensatz navigieren\"],\"I+Pm5V\":[\"Zur vorherigen Version navigieren\"],\"QVUN3K\":[\"Zum vorherigen Workflow navigieren\"],\"isRobC\":[\"Neu\"],\"Kcr9Fr\":[\"Neues Konto\"],\"o8MyXb\":[\"Neuer Schlüssel\"],\"j313SZ\":[\"Neuer Schlüssel\"],\"hFxdey\":[\"Neues Objekt\"],\"7vhWI8\":[\"Neues Passwort\"],\"BcCzLv\":[\"Neuer Rekord\"],\"2lmOC5\":[\"Neue Rolle\"],\"U1DAok\":[\"Neuer Webhook\"],\"pwenQu\":[\"Kein verbundenes Konto\"],\"0uWxPM\":[\"Es läuft noch kein Workflow\"],\"AQCvCC\":[\"Noch keine Workflow-Versionen\"],\"4wUkDk\":[\"Nicht leer\"],\"W0i24j\":[\"Objekt\"],\"B3toQF\":[\"Objekte\"],\"KNz3EF\":[\"Abseits der ausgetretenen Pfade\"],\"OV5wZZ\":[\"Geöffnet\"],\"0zpgxV\":[\"Optionen\"],\"BzEFor\":[\"oder\"],\"/IX/7x\":[\"Andere\"],\"boJlGf\":[\"Seite nicht gefunden\"],\"8ZsakT\":[\"Passwort\"],\"mi6Rel\":[\"Der Link zum Zurücksetzen des Passworts wurde an die E-Mail gesendet\"],\"SrVzRe\":[\"Prozentsatz\"],\"yIK1GU\":[\"Prozentsatz leer\"],\"PWLd4c\":[\"Prozentsatz nicht leer\"],\"Bv3y5w\":[\"Dauerhaftes Vernichten der Aufzeichnung\"],\"N0+GsR\":[\"Bild\"],\"jEw0Mr\":[\"Bitte geben Sie eine gültige URL ein\"],\"6nsIo3\":[\"Bitte geben Sie \\\"\",[\"confirmationValue\"],\"\\\" ein, um zu bestätigen, dass Sie diesen API-Schlüssel löschen möchten. Beachten Sie, dass jedes Skript, das diesen Schlüssel verwendet, nicht mehr funktioniert.\"],\"mFZTXr\":[\"Bitte geben Sie \",[\"confirmationText\"],\" ein, um zu bestätigen, dass Sie diesen Webhook löschen möchten.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Portugiesisch - Brasilien\"],\"xtXHeo\":[\"Portugiesisch - Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Vorschau\"],\"vERlcd\":[\"Profil\"],\"YJgRqq\":[\"Pseudo-Englisch\"],\"ibPuCP\":[\"Dokumentation lesen\"],\"v3xM25\":[\"Sie erhalten eine E-Mail mit einem Link zur Passwortaktualisierung\"],\"dSCufP\":[\"Datensatz-Auswahl\"],\"vpZcGd\":[\"Einen API-Schlüssel neu generieren\"],\"Mwqo5m\":[\"Schlüssel neu generieren\"],\"D+Mv78\":[\"Schlüssel regenerieren\"],\"5icoS1\":[\"Veröffentlichungen\"],\"t/YqKh\":[\"Entfernen\"],\"T/pF0Z\":[\"Aus Favoriten entfernen\"],\"KbS2K9\":[\"Passwort zurücksetzen\"],\"1IWc1n\":[\"Zurücksetzen auf\"],\"kx0s+n\":[\"Ergebnisse\"],\"5dJK4M\":[\"Rollen\"],\"UX0N2y\":[\"Führen Sie einen Workflow aus und kehren Sie hierher zurück, um seine Ausführungen anzuzeigen\"],\"A1taO8\":[\"Suche\"],\"l1/uy2\":[\"Ein Feld suchen...\"],\"k7kp5/\":[\"Suche in einem Index...\"],\"7taA9j\":[\"Suchfelder\"],\"ofuw3g\":[\"Suche nach einem Objekt...\"],\"IMeaSJ\":[\"Datensätze suchen\"],\"a3LDKx\":[\"Sicherheit\"],\"QREcJS\":[\"Siehe aktive Version\"],\"OpPn5Z\":[\"Siehe Läufe\"],\"EtyY4+\":[\"Siehe Versionen\"],\"lYhPN0\":[\"Siehe Versionsgeschichte\"],\"xraglu\":[\"Wählen Sie die Ereignisse aus, die Sie an diesen Endpunkt senden möchten\"],\"AXTJAW\":[\"Wählen Sie Ihre bevorzugte Sprache\"],\"mjK8F3\":[\"Senden Sie eine Einladungs-E-Mail an Ihr Team\"],\"yy5k7a\":[\"Server-Verwaltungsbereich\"],\"V7fgiB\":[\"Legen Sie die Sichtbarkeit von E-Mails fest, verwalten Sie Ihre Blockliste und vieles mehr.\"],\"cx14rp\":[\"Legen Sie den Namen Ihrer Domain fest\"],\"tn41zE\":[\"Legen Sie den Namen Ihrer Subdomain fest\"],\"Tz0i8g\":[\"Einstellungen\"],\"Vy9kmk\":[\"Geben Sie diesen Link weiter, um Benutzer einzuladen, Ihrem Arbeitsbereich beizutreten\"],\"gWk8gY\":[\"Sollte die Änderung einer Feldbezeichnung auch den API-Namen ändern?\"],\"6Uau97\":[\"Überspringen\"],\"f6Hub0\":[\"Sortieren\"],\"65A04M\":[\"Spanisch\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Subdomain\"],\"omhc+7\":[\"Subdomain bereits belegt\"],\"OlC/tU\":[\"Die Subdomain darf nicht länger als 30 Zeichen sein\"],\"ZETwlU\":[\"Die Subdomain darf nicht kürzer als 3 Zeichen sein\"],\"B5jRKH\":[\"Das Abonnement wurde umgestellt \",[\"to\"]],\"AxQiPW\":[\"Summe\"],\"XYLcNv\":[\"Unterstützung\"],\"9yk9d1\":[\"Schalter \",[\"from\"]],\"qi74XZ\":[\"Schalter \",[\"to\"]],\"L6Fg36\":[\"Abrechnung wechseln \",[\"to\"]],\"AtzMpB\":[\"Feldbezeichnung und API-Name synchronisieren\"],\"E3AMmw\":[\"Systemeinstellungen - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Systemeinstellungen - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Test\"],\"bU9B27\":[\"Test Arbeitsablauf\"],\"2OUtmv\":[\"Die Beschreibung dieses Feldes\"],\"VGZYbZ\":[\"Die mit Ihrem Konto verbundene E-Mail\"],\"h8mvCd\":[\"Der Name und das Symbol dieses Feldes\"],\"L97sPr\":[\"Die Seite, die Sie suchen, ist entweder nicht mehr vorhanden oder wurde nie angezeigt. Bringen wir Sie wieder auf den richtigen Weg\"],\"uWikAA\":[\"Die Werte dieses Feldes\"],\"+69KDk\":[\"Die Werte dieses Feldes müssen eindeutig sein\"],\"PmtLRf\":[\"Es gab ein Problem\"],\"hqCwGc\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Dadurch wird dieser Benutzer dauerhaft gelöscht und aus allen seinen Aufgaben entfernt.\"],\"gWGuHC\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Dadurch wird Ihr gesamter Arbeitsbereich dauerhaft gelöscht. <0/> Bitte geben Sie Ihre E-Mail zur Bestätigung ein.\"],\"n9nSNJ\":[\"Zeitformat\"],\"aqMzDX\":[\"auf monatlich\"],\"WXXiXO\":[\"bis jährlich\"],\"PiUt3N\":[\"Auslöser Typ\"],\"IQ5pAL\":[\"Der Auslösertyp sollte Manuell sein - wenn keine Aufzeichnung(en) ausgewählt ist/sind\"],\"+zy2Nq\":[\"Typ\"],\"U83IeL\":[\"Typ irgendetwas\"],\"wSXm5S\":[\"Einzigartig\"],\"GQCXQS\":[\"Unbegrenzte Kontakte\"],\"ONWvwQ\":[\"Hochladen\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Als Entwurf verwenden\"],\"oTTQsc\":[\"Verwenden Sie nur Buchstaben, Zahlen und Bindestriche. Beginnen und enden Sie mit einem Buchstaben oder einer Zahl\"],\"c6uZUV\":[\"Verwenden Sie unsere API oder fügen Sie Ihre erste \",[\"objectLabel\"],\" manuell hinzu\"],\"7PzzBU\":[\"Benutzer\"],\"IjyOjp\":[\"Benutzer ist nicht eingeloggt\"],\"fXVIZq\":[\"Werte\"],\"KANz0G\":[\"Details zur Rechnungsstellung anzeigen\"],\"6n7jtr\":[\"Visualisieren Sie\"],\"id6ein\":[\"Wir unterstützen Ihre quadratischen PNGs, JPEGs und GIFs unter 10MB\"],\"ZS7vYp\":[\"Für jedes neue Ereignis werden POST-Anfragen an diesen Endpunkt gesendet\"],\"TRDppN\":[\"Webhook\"],\"v1kQyJ\":[\"Webhooks\"],\"C51ilI\":[\"Wann der API-Schlüssel abläuft.\"],\"leUubq\":[\"Wenn die Taste deaktiviert wird\"],\"wvyffT\":[\"Workflow kann nicht getestet werden\"],\"pmUArF\":[\"Arbeitsbereich\"],\"VicISP\":[\"Löschen von Arbeitsbereichen\"],\"Q9pNST\":[\"Schreiben Sie eine Beschreibung\"],\"3d1wCB\":[\"ja\"],\"zSkMV0\":[\"Sie werden sofort für das gesamte Jahr belastet.\"],\"XVnj6K\":[\"Ihr Guthaben wird zur Begleichung der monatlichen Rechnungen verwendet.\"],\"9ivpwk\":[\"Ihr Name, wie er angezeigt werden soll\"],\"RhNbPE\":[\"Ihr Arbeitsbereich wird deaktiviert\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" von \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" API-Schlüssel\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 Workflow-Knotenausführungen\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Feld konfigurieren\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abbrechen\"],\"uyJsf6\":[\"Über\"],\"AeXO77\":[\"Konto\"],\"nD0Y+a\":[\"Konto-Löschung\"],\"bPwFdf\":[\"Konten\"],\"FQBaXG\":[\"Aktivieren Sie\"],\"tu8A/k\":[\"Workflow aktivieren\"],\"F6pfE9\":[\"Aktiv\"],\"Mue4oc\":[\"Aktive API-Schlüssel, die von Ihnen oder Ihrem Team erstellt wurden.\"],\"m16xKo\":[\"Hinzufügen\"],\"DpV70M\":[\"Feld hinzufügen\"],\"dEO3Zx\":[\"Objekt hinzufügen\"],\"sgXUv+\":[\"SSO-Identitätsanbieter hinzufügen\"],\"5+ttxv\":[\"Zur Blockliste hinzufügen\"],\"pBsoKL\":[\"Zu Favoriten hinzufügen\"],\"m2qDV8\":[\"Fügen Sie Ihre erste \",[\"objectLabel\"]],\"vLO+NG\":[\"Hinzugefügt \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Alle\"],\"3saA7W\":[\"Alle (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Alle Rollen\"],\"GMx1K0\":[\"Erlauben Sie Anmeldungen über die Google-Single-Sign-On-Funktion.\"],\"dea+zy\":[\"Erlauben Sie Anmeldungen über Microsofts Single Sign-On-Funktion.\"],\"wMg43c\":[\"Erlauben Sie die Einladung neuer Benutzer durch die Freigabe eines Einladungslinks.\"],\"vHeVg5\":[\"Erlauben Sie den Benutzern, sich mit einer E-Mail und einem Passwort anzumelden.\"],\"mJ6m4C\":[\"Eine optionale Beschreibung\"],\"0RqpZr\":[\"API & Webhooks\"],\"yRnk5W\":[\"API-Schlüssel\"],\"5h8ooz\":[\"API-Schlüssel\"],\"kAtj+q\":[\"API-Name\"],\"aAIQg2\":[\"Erscheinungsbild\"],\"3iX0kh\":[\"Sind Sie sicher, dass Sie Ihr Abrechnungsintervall ändern möchten?\"],\"nYD/Cq\":[\"Aufsteigend\"],\"rfYmIr\":[\"Rollen zuweisen, um die Zugriffsrechte der einzelnen Mitglieder festzulegen\"],\"lxQ+5m\":[\"Zugewiesen an\"],\"Y7Dx6e\":[\"Mindestens eine Authentifizierungsmethode muss aktiviert sein\"],\"P8fBlG\":[\"Authentifizierung\"],\"yIVrHZ\":[\"Autorisieren Sie\"],\"3uQmjD\":[\"Durchschnitt\"],\"Dht9W3\":[\"Zurück zum Inhalt\"],\"R+w/Va\":[\"Rechnungsstellung\"],\"K1172m\":[\"Blockliste\"],\"2yl5lQ\":[\"Buchen Sie einen Anruf\"],\"PmmvzS\":[\"Berechnen Sie\"],\"AjVXBS\":[\"Kalender\"],\"EUpfsd\":[\"Kalendarien\"],\"dEgA5A\":[\"Abbrechen\"],\"0TllC8\":[\"Jederzeit abbrechen\"],\"rRK/Lf\":[\"Plan stornieren\"],\"N6gPiD\":[\"Ihr Abonnement kündigen\"],\"OfzMnb\":[\"Ändern \",[\"to\"]],\"VhMDMg\":[\"Passwort ändern\"],\"SviKkE\":[\"Chinesisch - Vereinfacht\"],\"dzb4Ep\":[\"Chinesisch - Traditionell\"],\"JEFFOR\":[\"Wählen Sie ein Objekt\"],\"KT6rEB\":[\"Wählen Sie Ihren Anbieter\"],\"9qP96p\":[\"Wählen Sie Ihre Probezeit\"],\"yz7wBu\":[\"Schließen Sie\"],\"+zUMwJ\":[\"Konfigurieren Sie eine SSO-Verbindung\"],\"QTNsSm\":[\"Konfigurieren Sie Ihre Kalendereinstellungen und passen Sie sie an.\"],\"aGwm+D\":[\"Konfigurieren Sie die Anzeige von Daten in der App\"],\"Bh4GBD\":[\"Konfigurieren Sie Ihre E-Mail- und Kalendereinstellungen.\"],\"D8ATlr\":[\"Verbinden Sie ein neues Konto mit Ihrem Arbeitsbereich\"],\"Zgi9Fd\":[\"Mit Google verbinden\"],\"IOfqM8\":[\"Verbindung mit Microsoft\"],\"9TzudL\":[\"Verbundene Konten\"],\"M73whl\":[\"Kontext\"],\"xGVfLh\":[\"Weiter\"],\"CcGOj+\":[\"Kopilot\"],\"7eVkEH\":[\"Link zur Einladung kopieren\"],\"Ej5euX\":[\"Kopieren Sie diesen Schlüssel, da er nicht mehr sichtbar sein wird\"],\"wBMjJ2\":[\"Zählen Sie\"],\"EkZfen\":[\"Alle zählen\"],\"vQJINq\":[\"Leer zählen\"],\"DzRsDJ\":[\"Zählung nicht leer\"],\"9FZBbf\":[\"Eindeutige Werte zählen\"],\"zNoOC2\":[\"Erstellen Sie einen Workflow und kehren Sie hierher zurück, um seine Versionen anzuzeigen\"],\"uXGLuq\":[\"API-Schlüssel erstellen\"],\"d0DCww\":[\"Neuen Datensatz erstellen\"],\"dkAPxi\":[\"Webhook erstellen\"],\"8skTDV\":[\"Benutzerdefinierte Objekte\"],\"qt+EaC\":[\"Passen Sie die in den \",[\"objectLabelSingular\"],\"-Ansichten verfügbaren Felder an.\"],\"CMhr4u\":[\"Domäne anpassen\"],\"bCJa9l\":[\"Passen Sie die Sicherheit Ihres Arbeitsbereichs an\"],\"Zz6Cxn\":[\"Gefahrenzone\"],\"5cNMFz\":[\"Datenmodell\"],\"r+cVRP\":[\"Datentyp\"],\"mYGY3B\":[\"Datum\"],\"Ud9zHv\":[\"Datum und Uhrzeit\"],\"5y3O+A\":[\"Deaktivieren Sie\"],\"qk4i22\":[\"Deaktivieren Sie \\\"Objektbezeichnungen und API-Namen synchronisieren\\\", um einen benutzerdefinierten API-Namen festzulegen\"],\"gexAq8\":[\"Deaktivieren Sie dieses Feld\"],\"4tpC8V\":[\"Workflow deaktivieren\"],\"Y2ImVJ\":[\"Definieren Sie den Namen und die Beschreibung Ihres Objekts\"],\"cnGeoo\":[\"Löschen\"],\"ZDGm40\":[\"Konto löschen\"],\"gAz0S5\":[\"Konto und alle zugehörigen Daten löschen\"],\"hGfWDm\":[\"API-Schlüssel löschen\"],\"4dpwsE\":[\"Datensatz löschen\"],\"kf0A63\":[\"Datensätze löschen\"],\"T6S2Ns\":[\"Löschen Sie diese Integration\"],\"snMaH4\":[\"Webhook löschen\"],\"kYu0eF\":[\"Arbeitsbereich löschen\"],\"mk2Ygs\":[\"Löschen Sie Ihren gesamten Arbeitsbereich\"],\"Cko536\":[\"Absteigend\"],\"Nu4oKW\":[\"Beschreibung\"],\"2xxBws\":[\"Zerstören Sie\"],\"n+SX4g\":[\"Entwickler\"],\"zAg2B9\":[\"Entwurf verwerfen\"],\"i66xz9\":[\"Anzeige als relatives Datum\"],\"EoKe5U\":[\"Domäne\"],\"QVVmxi\":[\"Z.B. Backoffice-Integration\"],\"tOkc8o\":[\"Früheste\"],\"JTbQuO\":[\"Frühestes Datum\"],\"v+uKyy\":[\"Abrechnungsintervall bearbeiten\"],\"h2KoTu\":[\"Zahlungsmethode bearbeiten, Rechnungen einsehen und mehr\"],\"6o1M/Q\":[\"Bearbeiten Sie den Namen Ihrer Subdomain oder legen Sie eine benutzerdefinierte Domain fest.\"],\"O3oNi5\":[\"E-Mail\"],\"lfQsvW\":[\"E-Mail-Integration\"],\"QT/Wo7\":[\"E-Mail oder Domain ist bereits in der Blockliste\"],\"BXEcos\":[\"E-Mails\"],\"eXoH4Q\":[\"mitarbeiter\"],\"gqv5ZL\":[\"Mitarbeiter\"],\"N2S1rs\":[\"Leere\"],\"T3juzf\":[\"Endpunkt-URL\"],\"lYGfRP\":[\"Englisch\"],\"/bfFKe\":[\"Genießen Sie eine \",[\"withCreditCardTrialPeriodDuration\"],\"-tägige kostenlose Testphase\"],\"GpB8YV\":[\"Unternehmen\"],\"c3qGJX\":[\"Fehler beim Löschen des Api-Schlüssels: \",[\"err\"]],\"bj7nh3\":[\"Fehler beim Regenerieren des Api-Schlüssels: \",[\"err\"]],\"VSQxWH\":[\"Fehler beim Umschalten des Abonnements \",[\"to\"],\".\"],\"JLxMta\":[\"Erstellen Sie Webhook-Endpunkte für Benachrichtigungen über asynchrone Ereignisse.\"],\"cIgBjB\":[\"Die folgenden Personen und Domänen von der E-Mail-Synchronisierung ausschließen\"],\"fV7V51\":[\"Vorhandene Objekte\"],\"IZ4o2e\":[\"Beenden der Einstellungen\"],\"tXGQvS\":[\"Erwartet, dass der ausgewählte Knoten ein Schrittknoten ist.\"],\"bKBhgb\":[\"Erfahrung\"],\"LxRNPw\":[\"Verfallsdatum\"],\"SkXfL0\":[\"Verfallsdatum\"],\"i9qiyR\":[\"Läuft ab in\"],\"GS+Mus\":[\"Exportieren\"],\"ep2rbf\":[\"Datensätze exportieren\"],\"q46CjD\":[\"In PDF exportieren\"],\"DaGxE0\":[\"Ansicht exportieren\"],\"X9kySA\":[\"Favoriten\"],\"zXgopL\":[\"Feldtyp\"],\"vF68cg\":[\"Felder\"],\"3w/aqw\":[\"Felder zählen\"],\"o7J4JM\":[\"Filter\"],\"cSev+j\":[\"Filter\"],\"nLC6tu\":[\"Französisch\"],\"aTieE0\":[\"von monatlich bis jährlich\"],\"K04lE5\":[\"von jährlich auf monatlich\"],\"scmRyR\":[\"Vollständiger Zugang\"],\"xANKBj\":[\"Funktionen\"],\"Weq9zb\":[\"Allgemein\"],\"DDcvSo\":[\"Deutsch\"],\"NXEW3h\":[\"Holen Sie das Beste aus Ihrem Arbeitsplatz heraus, indem Sie Ihr Team einladen.\"],\"zSGbaR\":[\"Holen Sie sich Ihr Abonnement\"],\"2GT3Hf\":[\"Global\"],\"hWp1MY\":[\"Gewähren Sie dem Twenty-Support vorübergehend Zugang zu Ihrem Arbeitsbereich, damit wir Probleme beheben oder Inhalte in Ihrem Namen wiederherstellen können. Sie können den Zugriff jederzeit widerrufen.\"],\"vLyv1R\":[\"Ausblenden\"],\"XTWO+W\":[\"Icon und Name\"],\"sJGljQ\":[\"Kennung\"],\"j843N3\":[\"Wenn Sie diesen Schlüssel verloren haben, können Sie ihn neu generieren, aber beachten Sie, dass jedes Skript, das diesen Schlüssel verwendet, aktualisiert werden muss. Bitte geben Sie zur Bestätigung \\\"\",[\"confirmationValue\"],\"\\\" ein.\"],\"NoNwIX\":[\"Inaktiv\"],\"pZ/USH\":[\"Indizes\"],\"JE2tjr\":[\"Die Eingabe muss in Großbuchstaben erfolgen und darf nicht mit einer Zahl beginnen\"],\"AwUsnG\":[\"Instanzen\"],\"nbfdhU\":[\"Integrationen\"],\"NtFk/Z\":[\"Ungültiger Autorisierungsanbieter\"],\"B2Tpo0\":[\"Ungültige E-Mail\"],\"/m52AE\":[\"Ungültige E-Mail oder Domäne\"],\"QdoUFL\":[\"Ungültige Formularwerte\"],\"0M8+El\":[\"Per E-Mail einladen\"],\"PWIq/W\":[\"Per Link einladen\"],\"3athPG\":[\"Einladen per Link\"],\"5IfmKA\":[\"Einladungslink an E-Mail-Adressen gesendet\"],\"d+Y+rP\":[\"Laden Sie Ihr Team ein\"],\"Lj7sBL\":[\"Italienisch\"],\"dFtidv\":[\"Japanisch\"],\"h6S9Yz\":[\"Koreanisch\"],\"zrpwCd\":[\"Labor\"],\"vXIe7J\":[\"Sprache\"],\"wL3cK8\":[\"Neueste\"],\"Kcjbmz\":[\"Spätester Termin\"],\"pQjjYo\":[\"Link in die Zwischenablage kopiert\"],\"FgAxTj\":[\"Abmelden\"],\"nOhz3x\":[\"Abmeldung\"],\"T6YjCk\":[\"Mitglieder verwalten\"],\"4cjU2u\":[\"Verwalten Sie hier die Mitglieder Ihres Bereichs\"],\"FyFNsd\":[\"Verwalten Sie Ihre Internetkonten.\"],\"36kYu0\":[\"Verwalten Sie Ihr Abonnement\"],\"3Sdni6\":[\"Als erledigt markieren\"],\"CK1KXz\":[\"Max\"],\"wlQNTg\":[\"Mitglieder\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"Mehr Optionen\"],\"iSLA/r\":[\"Nach links bewegen\"],\"Ubl2by\":[\"Nach rechts bewegen\"],\"6YtxFj\":[\"Name\"],\"z+6jaZ\":[\"Name Ihres API-Schlüssels\"],\"J7w8lI\":[\"Name Ihres Arbeitsbereichs\"],\"2T8KCk\":[\"Zum nächsten Datensatz navigieren\"],\"veSA19\":[\"Zur nächsten Version navigieren\"],\"ZTEho+\":[\"Zum nächsten Workflow navigieren\"],\"2tw9bo\":[\"Zum vorherigen Datensatz navigieren\"],\"I+Pm5V\":[\"Zur vorherigen Version navigieren\"],\"QVUN3K\":[\"Zum vorherigen Workflow navigieren\"],\"isRobC\":[\"Neu\"],\"Kcr9Fr\":[\"Neues Konto\"],\"o8MyXb\":[\"Neuer Schlüssel\"],\"j313SZ\":[\"Neuer Schlüssel\"],\"hFxdey\":[\"Neues Objekt\"],\"7vhWI8\":[\"Neues Passwort\"],\"BcCzLv\":[\"Neuer Rekord\"],\"2lmOC5\":[\"Neue Rolle\"],\"U1DAok\":[\"Neuer Webhook\"],\"pwenQu\":[\"Kein verbundenes Konto\"],\"0uWxPM\":[\"Es läuft noch kein Workflow\"],\"AQCvCC\":[\"Noch keine Workflow-Versionen\"],\"4wUkDk\":[\"Nicht leer\"],\"W0i24j\":[\"Objekt\"],\"B3toQF\":[\"Objekte\"],\"KNz3EF\":[\"Abseits der ausgetretenen Pfade\"],\"OV5wZZ\":[\"Geöffnet\"],\"0zpgxV\":[\"Optionen\"],\"BzEFor\":[\"oder\"],\"/IX/7x\":[\"Andere\"],\"boJlGf\":[\"Seite nicht gefunden\"],\"8ZsakT\":[\"Passwort\"],\"mi6Rel\":[\"Der Link zum Zurücksetzen des Passworts wurde an die E-Mail gesendet\"],\"SrVzRe\":[\"Prozentsatz\"],\"yIK1GU\":[\"Prozentsatz leer\"],\"PWLd4c\":[\"Prozentsatz nicht leer\"],\"Bv3y5w\":[\"Dauerhaftes Vernichten der Aufzeichnung\"],\"N0+GsR\":[\"Bild\"],\"jEw0Mr\":[\"Bitte geben Sie eine gültige URL ein\"],\"6nsIo3\":[\"Bitte geben Sie \\\"\",[\"confirmationValue\"],\"\\\" ein, um zu bestätigen, dass Sie diesen API-Schlüssel löschen möchten. Beachten Sie, dass jedes Skript, das diesen Schlüssel verwendet, nicht mehr funktioniert.\"],\"mFZTXr\":[\"Bitte geben Sie \",[\"confirmationText\"],\" ein, um zu bestätigen, dass Sie diesen Webhook löschen möchten.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Portugiesisch - Brasilien\"],\"xtXHeo\":[\"Portugiesisch - Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Vorschau\"],\"vERlcd\":[\"Profil\"],\"YJgRqq\":[\"Pseudo-Englisch\"],\"ibPuCP\":[\"Dokumentation lesen\"],\"v3xM25\":[\"Sie erhalten eine E-Mail mit einem Link zur Passwortaktualisierung\"],\"dSCufP\":[\"Datensatz-Auswahl\"],\"vpZcGd\":[\"Einen API-Schlüssel neu generieren\"],\"Mwqo5m\":[\"Schlüssel neu generieren\"],\"D+Mv78\":[\"Schlüssel regenerieren\"],\"5icoS1\":[\"Veröffentlichungen\"],\"t/YqKh\":[\"Entfernen\"],\"T/pF0Z\":[\"Aus Favoriten entfernen\"],\"KbS2K9\":[\"Passwort zurücksetzen\"],\"1IWc1n\":[\"Zurücksetzen auf\"],\"kx0s+n\":[\"Ergebnisse\"],\"5dJK4M\":[\"Rollen\"],\"UX0N2y\":[\"Führen Sie einen Workflow aus und kehren Sie hierher zurück, um seine Ausführungen anzuzeigen\"],\"A1taO8\":[\"Suche\"],\"l1/uy2\":[\"Ein Feld suchen...\"],\"k7kp5/\":[\"Suche in einem Index...\"],\"7taA9j\":[\"Suchfelder\"],\"ofuw3g\":[\"Suche nach einem Objekt...\"],\"IMeaSJ\":[\"Datensätze suchen\"],\"a3LDKx\":[\"Sicherheit\"],\"QREcJS\":[\"Siehe aktive Version\"],\"OpPn5Z\":[\"Siehe Läufe\"],\"EtyY4+\":[\"Siehe Versionen\"],\"lYhPN0\":[\"Siehe Versionsgeschichte\"],\"xraglu\":[\"Wählen Sie die Ereignisse aus, die Sie an diesen Endpunkt senden möchten\"],\"AXTJAW\":[\"Wählen Sie Ihre bevorzugte Sprache\"],\"mjK8F3\":[\"Senden Sie eine Einladungs-E-Mail an Ihr Team\"],\"yy5k7a\":[\"Server-Verwaltungsbereich\"],\"V7fgiB\":[\"Legen Sie die Sichtbarkeit von E-Mails fest, verwalten Sie Ihre Blockliste und vieles mehr.\"],\"cx14rp\":[\"Legen Sie den Namen Ihrer Domain fest\"],\"tn41zE\":[\"Legen Sie den Namen Ihrer Subdomain fest\"],\"Tz0i8g\":[\"Einstellungen\"],\"Vy9kmk\":[\"Geben Sie diesen Link weiter, um Benutzer einzuladen, Ihrem Arbeitsbereich beizutreten\"],\"gWk8gY\":[\"Sollte die Änderung einer Feldbezeichnung auch den API-Namen ändern?\"],\"6Uau97\":[\"Überspringen\"],\"f6Hub0\":[\"Sortieren\"],\"65A04M\":[\"Spanisch\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Subdomain\"],\"omhc+7\":[\"Subdomain bereits belegt\"],\"OlC/tU\":[\"Die Subdomain darf nicht länger als 30 Zeichen sein\"],\"ZETwlU\":[\"Die Subdomain darf nicht kürzer als 3 Zeichen sein\"],\"B5jRKH\":[\"Das Abonnement wurde umgestellt \",[\"to\"]],\"AxQiPW\":[\"Summe\"],\"XYLcNv\":[\"Unterstützung\"],\"9yk9d1\":[\"Schalter \",[\"from\"]],\"qi74XZ\":[\"Schalter \",[\"to\"]],\"L6Fg36\":[\"Abrechnung wechseln \",[\"to\"]],\"AtzMpB\":[\"Feldbezeichnung und API-Name synchronisieren\"],\"E3AMmw\":[\"Systemeinstellungen - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Systemeinstellungen - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Test\"],\"bU9B27\":[\"Test Arbeitsablauf\"],\"2OUtmv\":[\"Die Beschreibung dieses Feldes\"],\"VGZYbZ\":[\"Die mit Ihrem Konto verbundene E-Mail\"],\"h8mvCd\":[\"Der Name und das Symbol dieses Feldes\"],\"L97sPr\":[\"Die Seite, die Sie suchen, ist entweder nicht mehr vorhanden oder wurde nie angezeigt. Bringen wir Sie wieder auf den richtigen Weg\"],\"uWikAA\":[\"Die Werte dieses Feldes\"],\"+69KDk\":[\"Die Werte dieses Feldes müssen eindeutig sein\"],\"PmtLRf\":[\"Es gab ein Problem\"],\"hqCwGc\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Dadurch wird dieser Benutzer dauerhaft gelöscht und aus allen seinen Aufgaben entfernt.\"],\"gWGuHC\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Dadurch wird Ihr gesamter Arbeitsbereich dauerhaft gelöscht. <0/> Bitte geben Sie Ihre E-Mail zur Bestätigung ein.\"],\"n9nSNJ\":[\"Zeitformat\"],\"aqMzDX\":[\"auf monatlich\"],\"WXXiXO\":[\"bis jährlich\"],\"PiUt3N\":[\"Auslöser Typ\"],\"IQ5pAL\":[\"Der Auslösertyp sollte Manuell sein - wenn keine Aufzeichnung(en) ausgewählt ist/sind\"],\"+zy2Nq\":[\"Typ\"],\"U83IeL\":[\"Typ irgendetwas\"],\"wSXm5S\":[\"Einzigartig\"],\"GQCXQS\":[\"Unbegrenzte Kontakte\"],\"ONWvwQ\":[\"Hochladen\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Als Entwurf verwenden\"],\"oTTQsc\":[\"Verwenden Sie nur Buchstaben, Zahlen und Bindestriche. Beginnen und enden Sie mit einem Buchstaben oder einer Zahl\"],\"c6uZUV\":[\"Verwenden Sie unsere API oder fügen Sie Ihre erste \",[\"objectLabel\"],\" manuell hinzu\"],\"7PzzBU\":[\"Benutzer\"],\"IjyOjp\":[\"Benutzer ist nicht eingeloggt\"],\"fXVIZq\":[\"Werte\"],\"KANz0G\":[\"Details zur Rechnungsstellung anzeigen\"],\"6n7jtr\":[\"Visualisieren Sie\"],\"id6ein\":[\"Wir unterstützen Ihre quadratischen PNGs, JPEGs und GIFs unter 10MB\"],\"ZS7vYp\":[\"Für jedes neue Ereignis werden POST-Anfragen an diesen Endpunkt gesendet\"],\"TRDppN\":[\"Webhook\"],\"v1kQyJ\":[\"Webhooks\"],\"C51ilI\":[\"Wann der API-Schlüssel abläuft.\"],\"leUubq\":[\"Wenn die Taste deaktiviert wird\"],\"wvyffT\":[\"Workflow kann nicht getestet werden\"],\"pmUArF\":[\"Arbeitsbereich\"],\"VicISP\":[\"Löschen von Arbeitsbereichen\"],\"Q9pNST\":[\"Schreiben Sie eine Beschreibung\"],\"3d1wCB\":[\"ja\"],\"zSkMV0\":[\"Sie werden sofort für das gesamte Jahr belastet.\"],\"XVnj6K\":[\"Ihr Guthaben wird zur Begleichung der monatlichen Rechnungen verwendet.\"],\"9ivpwk\":[\"Ihr Name, wie er angezeigt werden soll\"],\"RhNbPE\":[\"Ihr Arbeitsbereich wird deaktiviert\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/generated/en.ts b/packages/twenty-front/src/locales/generated/en.ts index 7e6e20b172fe..a9ef066840cc 100644 --- a/packages/twenty-front/src/locales/generated/en.ts +++ b/packages/twenty-front/src/locales/generated/en.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" of \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" API Key\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 workflow node executions\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configure field\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abort\"],\"uyJsf6\":[\"About\"],\"AeXO77\":[\"Account\"],\"nD0Y+a\":[\"Account Deletion\"],\"bPwFdf\":[\"Accounts\"],\"FQBaXG\":[\"Activate\"],\"tu8A/k\":[\"Activate Workflow\"],\"F6pfE9\":[\"Active\"],\"Mue4oc\":[\"Active API keys created by you or your team.\"],\"m16xKo\":[\"Add\"],\"DpV70M\":[\"Add Field\"],\"dEO3Zx\":[\"Add object\"],\"sgXUv+\":[\"Add SSO Identity Provider\"],\"5+ttxv\":[\"Add to blocklist\"],\"pBsoKL\":[\"Add to favorites\"],\"m2qDV8\":[\"Add your first \",[\"objectLabel\"]],\"vLO+NG\":[\"Added \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"All\"],\"3saA7W\":[\"All (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"All roles\"],\"GMx1K0\":[\"Allow logins through Google's single sign-on functionality.\"],\"dea+zy\":[\"Allow logins through Microsoft's single sign-on functionality.\"],\"wMg43c\":[\"Allow the invitation of new users by sharing an invite link.\"],\"vHeVg5\":[\"Allow users to sign in with an email and password.\"],\"mJ6m4C\":[\"An optional description\"],\"0RqpZr\":[\"API & Webhooks\"],\"yRnk5W\":[\"API Key\"],\"5h8ooz\":[\"API keys\"],\"kAtj+q\":[\"API Name\"],\"aAIQg2\":[\"Appearance\"],\"3iX0kh\":[\"Are you sure that you want to change your billing interval?\"],\"nYD/Cq\":[\"Ascending\"],\"rfYmIr\":[\"Assign roles to specify each member's access permissions\"],\"lxQ+5m\":[\"Assigned to\"],\"Y7Dx6e\":[\"At least one authentication method must be enabled\"],\"P8fBlG\":[\"Authentication\"],\"yIVrHZ\":[\"Authorize\"],\"3uQmjD\":[\"Average\"],\"Dht9W3\":[\"Back to content\"],\"R+w/Va\":[\"Billing\"],\"K1172m\":[\"Blocklist\"],\"2yl5lQ\":[\"Book a Call\"],\"PmmvzS\":[\"Calculate\"],\"AjVXBS\":[\"Calendar\"],\"EUpfsd\":[\"Calendars\"],\"dEgA5A\":[\"Cancel\"],\"0TllC8\":[\"Cancel anytime\"],\"rRK/Lf\":[\"Cancel Plan\"],\"N6gPiD\":[\"Cancel your subscription\"],\"OfzMnb\":[\"Change \",[\"to\"]],\"VhMDMg\":[\"Change Password\"],\"SviKkE\":[\"Chinese — Simplified\"],\"dzb4Ep\":[\"Chinese — Traditional\"],\"JEFFOR\":[\"Choose an object\"],\"KT6rEB\":[\"Choose your provider\"],\"9qP96p\":[\"Choose your Trial\"],\"yz7wBu\":[\"Close\"],\"+zUMwJ\":[\"Configure an SSO connection\"],\"QTNsSm\":[\"Configure and customize your calendar preferences.\"],\"aGwm+D\":[\"Configure how dates are displayed across the app\"],\"Bh4GBD\":[\"Configure your emails and calendar settings.\"],\"D8ATlr\":[\"Connect a new account to your workspace\"],\"Zgi9Fd\":[\"Connect with Google\"],\"IOfqM8\":[\"Connect with Microsoft\"],\"9TzudL\":[\"Connected accounts\"],\"M73whl\":[\"Context\"],\"xGVfLh\":[\"Continue\"],\"CcGOj+\":[\"Copilot\"],\"7eVkEH\":[\"Copy invitation link\"],\"Ej5euX\":[\"Copy this key as it will not be visible again\"],\"wBMjJ2\":[\"Count\"],\"EkZfen\":[\"Count all\"],\"vQJINq\":[\"Count empty\"],\"DzRsDJ\":[\"Count not empty\"],\"9FZBbf\":[\"Count unique values\"],\"zNoOC2\":[\"Create a workflow and return here to view its versions\"],\"uXGLuq\":[\"Create API key\"],\"d0DCww\":[\"Create new record\"],\"dkAPxi\":[\"Create Webhook\"],\"8skTDV\":[\"Custom objects\"],\"qt+EaC\":[\"Customise the fields available in the \",[\"objectLabelSingular\"],\" views.\"],\"CMhr4u\":[\"Customize Domain\"],\"bCJa9l\":[\"Customize your workspace security\"],\"Zz6Cxn\":[\"Danger zone\"],\"5cNMFz\":[\"Data model\"],\"r+cVRP\":[\"Data type\"],\"mYGY3B\":[\"Date\"],\"Ud9zHv\":[\"Date and time\"],\"5y3O+A\":[\"Deactivate\"],\"qk4i22\":[\"Deactivate \\\"Synchronize Objects Labels and API Names\\\" to set a custom API name\"],\"gexAq8\":[\"Deactivate this field\"],\"4tpC8V\":[\"Deactivate Workflow\"],\"Y2ImVJ\":[\"Define the name and description of your object\"],\"cnGeoo\":[\"Delete\"],\"ZDGm40\":[\"Delete account\"],\"gAz0S5\":[\"Delete account and all the associated data\"],\"hGfWDm\":[\"Delete API key\"],\"4dpwsE\":[\"Delete record\"],\"kf0A63\":[\"Delete records\"],\"T6S2Ns\":[\"Delete this integration\"],\"snMaH4\":[\"Delete webhook\"],\"kYu0eF\":[\"Delete workspace\"],\"mk2Ygs\":[\"Delete your whole workspace\"],\"Cko536\":[\"Descending\"],\"Nu4oKW\":[\"Description\"],\"2xxBws\":[\"Destroy\"],\"n+SX4g\":[\"Developers\"],\"zAg2B9\":[\"Discard Draft\"],\"i66xz9\":[\"Display as relative date\"],\"EoKe5U\":[\"Domain\"],\"QVVmxi\":[\"E.g. backoffice integration\"],\"tOkc8o\":[\"Earliest\"],\"JTbQuO\":[\"Earliest date\"],\"v+uKyy\":[\"Edit billing interval\"],\"h2KoTu\":[\"Edit payment method, see your invoices and more\"],\"6o1M/Q\":[\"Edit your subdomain name or set a custom domain.\"],\"O3oNi5\":[\"Email\"],\"lfQsvW\":[\"Email integration\"],\"QT/Wo7\":[\"Email or domain is already in blocklist\"],\"BXEcos\":[\"Emails\"],\"eXoH4Q\":[\"employees\"],\"gqv5ZL\":[\"Employees\"],\"N2S1rs\":[\"Empty\"],\"T3juzf\":[\"Endpoint URL\"],\"lYGfRP\":[\"English\"],\"/bfFKe\":[\"Enjoy a \",[\"withCreditCardTrialPeriodDuration\"],\"-days free trial\"],\"GpB8YV\":[\"Enterprise\"],\"c3qGJX\":[\"Error deleting api key: \",[\"err\"]],\"bj7nh3\":[\"Error regenerating api key: \",[\"err\"]],\"VSQxWH\":[\"Error while switching subscription \",[\"to\"],\".\"],\"JLxMta\":[\"Establish Webhook endpoints for notifications on asynchronous events.\"],\"cIgBjB\":[\"Exclude the following people and domains from my email sync\"],\"fV7V51\":[\"Existing objects\"],\"IZ4o2e\":[\"Exit Settings\"],\"tXGQvS\":[\"Expected selected node to be a create step node.\"],\"bKBhgb\":[\"Experience\"],\"LxRNPw\":[\"Expiration\"],\"SkXfL0\":[\"Expiration Date\"],\"i9qiyR\":[\"Expires in\"],\"GS+Mus\":[\"Export\"],\"ep2rbf\":[\"Export records\"],\"q46CjD\":[\"Export to PDF\"],\"DaGxE0\":[\"Export view\"],\"X9kySA\":[\"Favorites\"],\"zXgopL\":[\"Field type\"],\"vF68cg\":[\"Fields\"],\"3w/aqw\":[\"Fields Count\"],\"o7J4JM\":[\"Filter\"],\"cSev+j\":[\"Filters\"],\"nLC6tu\":[\"French\"],\"aTieE0\":[\"from monthly to yearly\"],\"K04lE5\":[\"from yearly to monthly\"],\"scmRyR\":[\"Full access\"],\"xANKBj\":[\"Functions\"],\"Weq9zb\":[\"General\"],\"DDcvSo\":[\"German\"],\"NXEW3h\":[\"Get the most out of your workspace by inviting your team.\"],\"zSGbaR\":[\"Get your subscription\"],\"2GT3Hf\":[\"Global\"],\"hWp1MY\":[\"Grant Twenty support temporary access to your workspace so we can troubleshoot problems or recover content on your behalf. You can revoke access at any time.\"],\"vLyv1R\":[\"Hide\"],\"XTWO+W\":[\"Icon and Name\"],\"sJGljQ\":[\"Identifier\"],\"j843N3\":[\"If you’ve lost this key, you can regenerate it, but be aware that any script using this key will need to be updated. Please type\\\"\",[\"confirmationValue\"],\"\\\" to confirm.\"],\"NoNwIX\":[\"Inactive\"],\"pZ/USH\":[\"Indexes\"],\"JE2tjr\":[\"Input must be in camel case and cannot start with a number\"],\"AwUsnG\":[\"Instances\"],\"nbfdhU\":[\"Integrations\"],\"NtFk/Z\":[\"Invalid auth provider\"],\"B2Tpo0\":[\"Invalid email\"],\"/m52AE\":[\"Invalid email or domain\"],\"QdoUFL\":[\"Invalid form values\"],\"0M8+El\":[\"Invite by email\"],\"PWIq/W\":[\"Invite by link\"],\"3athPG\":[\"Invite by Link\"],\"5IfmKA\":[\"Invite link sent to email addresses\"],\"d+Y+rP\":[\"Invite your team\"],\"Lj7sBL\":[\"Italian\"],\"h6S9Yz\":[\"Korean\"],\"zrpwCd\":[\"Lab\"],\"vXIe7J\":[\"Language\"],\"wL3cK8\":[\"Latest\"],\"Kcjbmz\":[\"Latest date\"],\"pQjjYo\":[\"Link copied to clipboard\"],\"FgAxTj\":[\"Log out\"],\"nOhz3x\":[\"Logout\"],\"T6YjCk\":[\"Manage Members\"],\"4cjU2u\":[\"Manage the members of your space here\"],\"FyFNsd\":[\"Manage your internet accounts.\"],\"36kYu0\":[\"Manage your subscription\"],\"3Sdni6\":[\"Mark as done\"],\"CK1KXz\":[\"Max\"],\"wlQNTg\":[\"Members\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"More options\"],\"iSLA/r\":[\"Move left\"],\"Ubl2by\":[\"Move right\"],\"6YtxFj\":[\"Name\"],\"z+6jaZ\":[\"Name of your API key\"],\"J7w8lI\":[\"Name of your workspace\"],\"2T8KCk\":[\"Navigate to next record\"],\"veSA19\":[\"Navigate to next version\"],\"ZTEho+\":[\"Navigate to next workflow\"],\"2tw9bo\":[\"Navigate to previous record\"],\"I+Pm5V\":[\"Navigate to previous version\"],\"QVUN3K\":[\"Navigate to previous workflow\"],\"isRobC\":[\"New\"],\"Kcr9Fr\":[\"New account\"],\"o8MyXb\":[\"New key\"],\"j313SZ\":[\"New Key\"],\"hFxdey\":[\"New Object\"],\"7vhWI8\":[\"New Password\"],\"BcCzLv\":[\"New record\"],\"2lmOC5\":[\"New Role\"],\"U1DAok\":[\"New Webhook\"],\"pwenQu\":[\"No connected account\"],\"0uWxPM\":[\"No workflow runs yet\"],\"AQCvCC\":[\"No workflow versions yet\"],\"4wUkDk\":[\"Not empty\"],\"W0i24j\":[\"Object\"],\"B3toQF\":[\"Objects\"],\"KNz3EF\":[\"Off the beaten path\"],\"OV5wZZ\":[\"Opened\"],\"0zpgxV\":[\"Options\"],\"BzEFor\":[\"or\"],\"/IX/7x\":[\"Other\"],\"boJlGf\":[\"Page Not Found\"],\"8ZsakT\":[\"Password\"],\"mi6Rel\":[\"Password reset link has been sent to the email\"],\"SrVzRe\":[\"Percent\"],\"yIK1GU\":[\"Percent empty\"],\"PWLd4c\":[\"Percent not empty\"],\"Bv3y5w\":[\"Permanently destroy record\"],\"N0+GsR\":[\"Picture\"],\"jEw0Mr\":[\"Please enter a valid URL\"],\"6nsIo3\":[\"Please type \\\"\",[\"confirmationValue\"],\"\\\" to confirm you want to delete this API Key. Be aware that any script using this key will stop working.\"],\"mFZTXr\":[\"Please type \",[\"confirmationText\"],\" to confirm you want to delete this webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Portuguese — Brazil\"],\"xtXHeo\":[\"Portuguese — Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Preview\"],\"vERlcd\":[\"Profile\"],\"YJgRqq\":[\"Pseudo-English\"],\"ibPuCP\":[\"Read documentation\"],\"v3xM25\":[\"Receive an email containing password update link\"],\"dSCufP\":[\"Record Selection\"],\"vpZcGd\":[\"Regenerate an API key\"],\"Mwqo5m\":[\"Regenerate key\"],\"D+Mv78\":[\"Regenerate Key\"],\"5icoS1\":[\"Releases\"],\"t/YqKh\":[\"Remove\"],\"T/pF0Z\":[\"Remove from favorites\"],\"KbS2K9\":[\"Reset Password\"],\"1IWc1n\":[\"Reset to\"],\"kx0s+n\":[\"Results\"],\"5dJK4M\":[\"Roles\"],\"UX0N2y\":[\"Run a workflow and return here to view its executions\"],\"A1taO8\":[\"Search\"],\"l1/uy2\":[\"Search a field...\"],\"k7kp5/\":[\"Search an index...\"],\"7taA9j\":[\"Search fields\"],\"ofuw3g\":[\"Search for an object...\"],\"IMeaSJ\":[\"Search records\"],\"a3LDKx\":[\"Security\"],\"QREcJS\":[\"See active version\"],\"OpPn5Z\":[\"See runs\"],\"EtyY4+\":[\"See versions\"],\"lYhPN0\":[\"See versions history\"],\"xraglu\":[\"Select the events you wish to send to this endpoint\"],\"AXTJAW\":[\"Select your preferred language\"],\"mjK8F3\":[\"Send an invite email to your team\"],\"yy5k7a\":[\"Server Admin Panel\"],\"V7fgiB\":[\"Set email visibility, manage your blocklist and more.\"],\"cx14rp\":[\"Set the name of your domain\"],\"tn41zE\":[\"Set the name of your subdomain\"],\"Tz0i8g\":[\"Settings\"],\"Vy9kmk\":[\"Share this link to invite users to join your workspace\"],\"gWk8gY\":[\"Should changing a field's label also change the API name?\"],\"6Uau97\":[\"Skip\"],\"f6Hub0\":[\"Sort\"],\"65A04M\":[\"Spanish\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Subdomain\"],\"omhc+7\":[\"Subdomain already taken\"],\"OlC/tU\":[\"Subdomain can not be longer than 30 characters\"],\"ZETwlU\":[\"Subdomain can not be shorter than 3 characters\"],\"B5jRKH\":[\"Subscription has been switched \",[\"to\"]],\"AxQiPW\":[\"Sum\"],\"XYLcNv\":[\"Support\"],\"9yk9d1\":[\"Switch \",[\"from\"]],\"qi74XZ\":[\"Switch \",[\"to\"]],\"L6Fg36\":[\"Switch billing \",[\"to\"]],\"AtzMpB\":[\"Synchronize Field Label and API Name\"],\"E3AMmw\":[\"System settings - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"System Settings - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Test\"],\"bU9B27\":[\"Test Workflow\"],\"2OUtmv\":[\"The description of this field\"],\"VGZYbZ\":[\"The email associated to your account\"],\"h8mvCd\":[\"The name and icon of this field\"],\"L97sPr\":[\"The page you're seeking is either gone or never was. Let's get you back on track\"],\"uWikAA\":[\"The values of this field\"],\"+69KDk\":[\"The values of this field must be unique\"],\"PmtLRf\":[\"There was an issue\"],\"hqCwGc\":[\"This action cannot be undone. This will permanently delete this user and remove them from all their assignments.\"],\"gWGuHC\":[\"This action cannot be undone. This will permanently delete your entire workspace. <0/> Please type in your email to confirm.\"],\"n9nSNJ\":[\"Time format\"],\"aqMzDX\":[\"to monthly\"],\"WXXiXO\":[\"to yearly\"],\"PiUt3N\":[\"Trigger Type\"],\"IQ5pAL\":[\"Trigger type should be Manual - when no record(s) are selected\"],\"+zy2Nq\":[\"Type\"],\"U83IeL\":[\"Type anything\"],\"wSXm5S\":[\"Unique\"],\"GQCXQS\":[\"Unlimited contacts\"],\"ONWvwQ\":[\"Upload\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Use as draft\"],\"oTTQsc\":[\"Use letter, number and dash only. Start and finish with a letter or a number\"],\"c6uZUV\":[\"Use our API or add your first \",[\"objectLabel\"],\" manually\"],\"7PzzBU\":[\"User\"],\"IjyOjp\":[\"User is not logged in\"],\"fXVIZq\":[\"Values\"],\"KANz0G\":[\"View billing details\"],\"6n7jtr\":[\"Visualize\"],\"id6ein\":[\"We support your square PNGs, JPEGs and GIFs under 10MB\"],\"ZS7vYp\":[\"We will send POST requests to this endpoint for every new event\"],\"TRDppN\":[\"Webhook\"],\"v1kQyJ\":[\"Webhooks\"],\"C51ilI\":[\"When the API key will expire.\"],\"leUubq\":[\"When the key will be disabled\"],\"wvyffT\":[\"Workflow cannot be tested\"],\"pmUArF\":[\"Workspace\"],\"VicISP\":[\"Workspace Deletion\"],\"Q9pNST\":[\"Write a description\"],\"3d1wCB\":[\"yes\"],\"zSkMV0\":[\"You will be charged immediately for the full year.\"],\"XVnj6K\":[\"Your credit balance will be used to pay the monthly bills.\"],\"9ivpwk\":[\"Your name as it will be displayed\"],\"RhNbPE\":[\"Your workspace will be disabled\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" of \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" API Key\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 workflow node executions\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configure field\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abort\"],\"uyJsf6\":[\"About\"],\"AeXO77\":[\"Account\"],\"nD0Y+a\":[\"Account Deletion\"],\"bPwFdf\":[\"Accounts\"],\"FQBaXG\":[\"Activate\"],\"tu8A/k\":[\"Activate Workflow\"],\"F6pfE9\":[\"Active\"],\"Mue4oc\":[\"Active API keys created by you or your team.\"],\"m16xKo\":[\"Add\"],\"DpV70M\":[\"Add Field\"],\"dEO3Zx\":[\"Add object\"],\"sgXUv+\":[\"Add SSO Identity Provider\"],\"5+ttxv\":[\"Add to blocklist\"],\"pBsoKL\":[\"Add to favorites\"],\"m2qDV8\":[\"Add your first \",[\"objectLabel\"]],\"vLO+NG\":[\"Added \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"All\"],\"3saA7W\":[\"All (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"All roles\"],\"GMx1K0\":[\"Allow logins through Google's single sign-on functionality.\"],\"dea+zy\":[\"Allow logins through Microsoft's single sign-on functionality.\"],\"wMg43c\":[\"Allow the invitation of new users by sharing an invite link.\"],\"vHeVg5\":[\"Allow users to sign in with an email and password.\"],\"mJ6m4C\":[\"An optional description\"],\"0RqpZr\":[\"API & Webhooks\"],\"yRnk5W\":[\"API Key\"],\"5h8ooz\":[\"API keys\"],\"kAtj+q\":[\"API Name\"],\"aAIQg2\":[\"Appearance\"],\"3iX0kh\":[\"Are you sure that you want to change your billing interval?\"],\"nYD/Cq\":[\"Ascending\"],\"rfYmIr\":[\"Assign roles to specify each member's access permissions\"],\"lxQ+5m\":[\"Assigned to\"],\"Y7Dx6e\":[\"At least one authentication method must be enabled\"],\"P8fBlG\":[\"Authentication\"],\"yIVrHZ\":[\"Authorize\"],\"3uQmjD\":[\"Average\"],\"Dht9W3\":[\"Back to content\"],\"R+w/Va\":[\"Billing\"],\"K1172m\":[\"Blocklist\"],\"2yl5lQ\":[\"Book a Call\"],\"PmmvzS\":[\"Calculate\"],\"AjVXBS\":[\"Calendar\"],\"EUpfsd\":[\"Calendars\"],\"dEgA5A\":[\"Cancel\"],\"0TllC8\":[\"Cancel anytime\"],\"rRK/Lf\":[\"Cancel Plan\"],\"N6gPiD\":[\"Cancel your subscription\"],\"OfzMnb\":[\"Change \",[\"to\"]],\"VhMDMg\":[\"Change Password\"],\"SviKkE\":[\"Chinese — Simplified\"],\"dzb4Ep\":[\"Chinese — Traditional\"],\"JEFFOR\":[\"Choose an object\"],\"KT6rEB\":[\"Choose your provider\"],\"9qP96p\":[\"Choose your Trial\"],\"yz7wBu\":[\"Close\"],\"+zUMwJ\":[\"Configure an SSO connection\"],\"QTNsSm\":[\"Configure and customize your calendar preferences.\"],\"aGwm+D\":[\"Configure how dates are displayed across the app\"],\"Bh4GBD\":[\"Configure your emails and calendar settings.\"],\"D8ATlr\":[\"Connect a new account to your workspace\"],\"Zgi9Fd\":[\"Connect with Google\"],\"IOfqM8\":[\"Connect with Microsoft\"],\"9TzudL\":[\"Connected accounts\"],\"M73whl\":[\"Context\"],\"xGVfLh\":[\"Continue\"],\"CcGOj+\":[\"Copilot\"],\"7eVkEH\":[\"Copy invitation link\"],\"Ej5euX\":[\"Copy this key as it will not be visible again\"],\"wBMjJ2\":[\"Count\"],\"EkZfen\":[\"Count all\"],\"vQJINq\":[\"Count empty\"],\"DzRsDJ\":[\"Count not empty\"],\"9FZBbf\":[\"Count unique values\"],\"zNoOC2\":[\"Create a workflow and return here to view its versions\"],\"uXGLuq\":[\"Create API key\"],\"d0DCww\":[\"Create new record\"],\"dkAPxi\":[\"Create Webhook\"],\"8skTDV\":[\"Custom objects\"],\"qt+EaC\":[\"Customise the fields available in the \",[\"objectLabelSingular\"],\" views.\"],\"CMhr4u\":[\"Customize Domain\"],\"bCJa9l\":[\"Customize your workspace security\"],\"Zz6Cxn\":[\"Danger zone\"],\"5cNMFz\":[\"Data model\"],\"r+cVRP\":[\"Data type\"],\"mYGY3B\":[\"Date\"],\"Ud9zHv\":[\"Date and time\"],\"5y3O+A\":[\"Deactivate\"],\"qk4i22\":[\"Deactivate \\\"Synchronize Objects Labels and API Names\\\" to set a custom API name\"],\"gexAq8\":[\"Deactivate this field\"],\"4tpC8V\":[\"Deactivate Workflow\"],\"Y2ImVJ\":[\"Define the name and description of your object\"],\"cnGeoo\":[\"Delete\"],\"ZDGm40\":[\"Delete account\"],\"gAz0S5\":[\"Delete account and all the associated data\"],\"hGfWDm\":[\"Delete API key\"],\"4dpwsE\":[\"Delete record\"],\"kf0A63\":[\"Delete records\"],\"T6S2Ns\":[\"Delete this integration\"],\"snMaH4\":[\"Delete webhook\"],\"kYu0eF\":[\"Delete workspace\"],\"mk2Ygs\":[\"Delete your whole workspace\"],\"Cko536\":[\"Descending\"],\"Nu4oKW\":[\"Description\"],\"2xxBws\":[\"Destroy\"],\"n+SX4g\":[\"Developers\"],\"zAg2B9\":[\"Discard Draft\"],\"i66xz9\":[\"Display as relative date\"],\"EoKe5U\":[\"Domain\"],\"QVVmxi\":[\"E.g. backoffice integration\"],\"tOkc8o\":[\"Earliest\"],\"JTbQuO\":[\"Earliest date\"],\"v+uKyy\":[\"Edit billing interval\"],\"h2KoTu\":[\"Edit payment method, see your invoices and more\"],\"6o1M/Q\":[\"Edit your subdomain name or set a custom domain.\"],\"O3oNi5\":[\"Email\"],\"lfQsvW\":[\"Email integration\"],\"QT/Wo7\":[\"Email or domain is already in blocklist\"],\"BXEcos\":[\"Emails\"],\"eXoH4Q\":[\"employees\"],\"gqv5ZL\":[\"Employees\"],\"N2S1rs\":[\"Empty\"],\"T3juzf\":[\"Endpoint URL\"],\"lYGfRP\":[\"English\"],\"/bfFKe\":[\"Enjoy a \",[\"withCreditCardTrialPeriodDuration\"],\"-days free trial\"],\"GpB8YV\":[\"Enterprise\"],\"c3qGJX\":[\"Error deleting api key: \",[\"err\"]],\"bj7nh3\":[\"Error regenerating api key: \",[\"err\"]],\"VSQxWH\":[\"Error while switching subscription \",[\"to\"],\".\"],\"JLxMta\":[\"Establish Webhook endpoints for notifications on asynchronous events.\"],\"cIgBjB\":[\"Exclude the following people and domains from my email sync\"],\"fV7V51\":[\"Existing objects\"],\"IZ4o2e\":[\"Exit Settings\"],\"tXGQvS\":[\"Expected selected node to be a create step node.\"],\"bKBhgb\":[\"Experience\"],\"LxRNPw\":[\"Expiration\"],\"SkXfL0\":[\"Expiration Date\"],\"i9qiyR\":[\"Expires in\"],\"GS+Mus\":[\"Export\"],\"ep2rbf\":[\"Export records\"],\"q46CjD\":[\"Export to PDF\"],\"DaGxE0\":[\"Export view\"],\"X9kySA\":[\"Favorites\"],\"zXgopL\":[\"Field type\"],\"vF68cg\":[\"Fields\"],\"3w/aqw\":[\"Fields Count\"],\"o7J4JM\":[\"Filter\"],\"cSev+j\":[\"Filters\"],\"nLC6tu\":[\"French\"],\"aTieE0\":[\"from monthly to yearly\"],\"K04lE5\":[\"from yearly to monthly\"],\"scmRyR\":[\"Full access\"],\"xANKBj\":[\"Functions\"],\"Weq9zb\":[\"General\"],\"DDcvSo\":[\"German\"],\"NXEW3h\":[\"Get the most out of your workspace by inviting your team.\"],\"zSGbaR\":[\"Get your subscription\"],\"2GT3Hf\":[\"Global\"],\"hWp1MY\":[\"Grant Twenty support temporary access to your workspace so we can troubleshoot problems or recover content on your behalf. You can revoke access at any time.\"],\"vLyv1R\":[\"Hide\"],\"XTWO+W\":[\"Icon and Name\"],\"sJGljQ\":[\"Identifier\"],\"j843N3\":[\"If you’ve lost this key, you can regenerate it, but be aware that any script using this key will need to be updated. Please type\\\"\",[\"confirmationValue\"],\"\\\" to confirm.\"],\"NoNwIX\":[\"Inactive\"],\"pZ/USH\":[\"Indexes\"],\"JE2tjr\":[\"Input must be in camel case and cannot start with a number\"],\"AwUsnG\":[\"Instances\"],\"nbfdhU\":[\"Integrations\"],\"NtFk/Z\":[\"Invalid auth provider\"],\"B2Tpo0\":[\"Invalid email\"],\"/m52AE\":[\"Invalid email or domain\"],\"QdoUFL\":[\"Invalid form values\"],\"0M8+El\":[\"Invite by email\"],\"PWIq/W\":[\"Invite by link\"],\"3athPG\":[\"Invite by Link\"],\"5IfmKA\":[\"Invite link sent to email addresses\"],\"d+Y+rP\":[\"Invite your team\"],\"Lj7sBL\":[\"Italian\"],\"dFtidv\":[\"Japanese\"],\"h6S9Yz\":[\"Korean\"],\"zrpwCd\":[\"Lab\"],\"vXIe7J\":[\"Language\"],\"wL3cK8\":[\"Latest\"],\"Kcjbmz\":[\"Latest date\"],\"pQjjYo\":[\"Link copied to clipboard\"],\"FgAxTj\":[\"Log out\"],\"nOhz3x\":[\"Logout\"],\"T6YjCk\":[\"Manage Members\"],\"4cjU2u\":[\"Manage the members of your space here\"],\"FyFNsd\":[\"Manage your internet accounts.\"],\"36kYu0\":[\"Manage your subscription\"],\"3Sdni6\":[\"Mark as done\"],\"CK1KXz\":[\"Max\"],\"wlQNTg\":[\"Members\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"More options\"],\"iSLA/r\":[\"Move left\"],\"Ubl2by\":[\"Move right\"],\"6YtxFj\":[\"Name\"],\"z+6jaZ\":[\"Name of your API key\"],\"J7w8lI\":[\"Name of your workspace\"],\"2T8KCk\":[\"Navigate to next record\"],\"veSA19\":[\"Navigate to next version\"],\"ZTEho+\":[\"Navigate to next workflow\"],\"2tw9bo\":[\"Navigate to previous record\"],\"I+Pm5V\":[\"Navigate to previous version\"],\"QVUN3K\":[\"Navigate to previous workflow\"],\"isRobC\":[\"New\"],\"Kcr9Fr\":[\"New account\"],\"o8MyXb\":[\"New key\"],\"j313SZ\":[\"New Key\"],\"hFxdey\":[\"New Object\"],\"7vhWI8\":[\"New Password\"],\"BcCzLv\":[\"New record\"],\"2lmOC5\":[\"New Role\"],\"U1DAok\":[\"New Webhook\"],\"pwenQu\":[\"No connected account\"],\"0uWxPM\":[\"No workflow runs yet\"],\"AQCvCC\":[\"No workflow versions yet\"],\"4wUkDk\":[\"Not empty\"],\"W0i24j\":[\"Object\"],\"B3toQF\":[\"Objects\"],\"KNz3EF\":[\"Off the beaten path\"],\"OV5wZZ\":[\"Opened\"],\"0zpgxV\":[\"Options\"],\"BzEFor\":[\"or\"],\"/IX/7x\":[\"Other\"],\"boJlGf\":[\"Page Not Found\"],\"8ZsakT\":[\"Password\"],\"mi6Rel\":[\"Password reset link has been sent to the email\"],\"SrVzRe\":[\"Percent\"],\"yIK1GU\":[\"Percent empty\"],\"PWLd4c\":[\"Percent not empty\"],\"Bv3y5w\":[\"Permanently destroy record\"],\"N0+GsR\":[\"Picture\"],\"jEw0Mr\":[\"Please enter a valid URL\"],\"6nsIo3\":[\"Please type \\\"\",[\"confirmationValue\"],\"\\\" to confirm you want to delete this API Key. Be aware that any script using this key will stop working.\"],\"mFZTXr\":[\"Please type \",[\"confirmationText\"],\" to confirm you want to delete this webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Portuguese — Brazil\"],\"xtXHeo\":[\"Portuguese — Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Preview\"],\"vERlcd\":[\"Profile\"],\"YJgRqq\":[\"Pseudo-English\"],\"ibPuCP\":[\"Read documentation\"],\"v3xM25\":[\"Receive an email containing password update link\"],\"dSCufP\":[\"Record Selection\"],\"vpZcGd\":[\"Regenerate an API key\"],\"Mwqo5m\":[\"Regenerate key\"],\"D+Mv78\":[\"Regenerate Key\"],\"5icoS1\":[\"Releases\"],\"t/YqKh\":[\"Remove\"],\"T/pF0Z\":[\"Remove from favorites\"],\"KbS2K9\":[\"Reset Password\"],\"1IWc1n\":[\"Reset to\"],\"kx0s+n\":[\"Results\"],\"5dJK4M\":[\"Roles\"],\"UX0N2y\":[\"Run a workflow and return here to view its executions\"],\"A1taO8\":[\"Search\"],\"l1/uy2\":[\"Search a field...\"],\"k7kp5/\":[\"Search an index...\"],\"7taA9j\":[\"Search fields\"],\"ofuw3g\":[\"Search for an object...\"],\"IMeaSJ\":[\"Search records\"],\"a3LDKx\":[\"Security\"],\"QREcJS\":[\"See active version\"],\"OpPn5Z\":[\"See runs\"],\"EtyY4+\":[\"See versions\"],\"lYhPN0\":[\"See versions history\"],\"xraglu\":[\"Select the events you wish to send to this endpoint\"],\"AXTJAW\":[\"Select your preferred language\"],\"mjK8F3\":[\"Send an invite email to your team\"],\"yy5k7a\":[\"Server Admin Panel\"],\"V7fgiB\":[\"Set email visibility, manage your blocklist and more.\"],\"cx14rp\":[\"Set the name of your domain\"],\"tn41zE\":[\"Set the name of your subdomain\"],\"Tz0i8g\":[\"Settings\"],\"Vy9kmk\":[\"Share this link to invite users to join your workspace\"],\"gWk8gY\":[\"Should changing a field's label also change the API name?\"],\"6Uau97\":[\"Skip\"],\"f6Hub0\":[\"Sort\"],\"65A04M\":[\"Spanish\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Subdomain\"],\"omhc+7\":[\"Subdomain already taken\"],\"OlC/tU\":[\"Subdomain can not be longer than 30 characters\"],\"ZETwlU\":[\"Subdomain can not be shorter than 3 characters\"],\"B5jRKH\":[\"Subscription has been switched \",[\"to\"]],\"AxQiPW\":[\"Sum\"],\"XYLcNv\":[\"Support\"],\"9yk9d1\":[\"Switch \",[\"from\"]],\"qi74XZ\":[\"Switch \",[\"to\"]],\"L6Fg36\":[\"Switch billing \",[\"to\"]],\"AtzMpB\":[\"Synchronize Field Label and API Name\"],\"E3AMmw\":[\"System settings - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"System Settings - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Test\"],\"bU9B27\":[\"Test Workflow\"],\"2OUtmv\":[\"The description of this field\"],\"VGZYbZ\":[\"The email associated to your account\"],\"h8mvCd\":[\"The name and icon of this field\"],\"L97sPr\":[\"The page you're seeking is either gone or never was. Let's get you back on track\"],\"uWikAA\":[\"The values of this field\"],\"+69KDk\":[\"The values of this field must be unique\"],\"PmtLRf\":[\"There was an issue\"],\"hqCwGc\":[\"This action cannot be undone. This will permanently delete this user and remove them from all their assignments.\"],\"gWGuHC\":[\"This action cannot be undone. This will permanently delete your entire workspace. <0/> Please type in your email to confirm.\"],\"n9nSNJ\":[\"Time format\"],\"aqMzDX\":[\"to monthly\"],\"WXXiXO\":[\"to yearly\"],\"PiUt3N\":[\"Trigger Type\"],\"IQ5pAL\":[\"Trigger type should be Manual - when no record(s) are selected\"],\"+zy2Nq\":[\"Type\"],\"U83IeL\":[\"Type anything\"],\"wSXm5S\":[\"Unique\"],\"GQCXQS\":[\"Unlimited contacts\"],\"ONWvwQ\":[\"Upload\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Use as draft\"],\"oTTQsc\":[\"Use letter, number and dash only. Start and finish with a letter or a number\"],\"c6uZUV\":[\"Use our API or add your first \",[\"objectLabel\"],\" manually\"],\"7PzzBU\":[\"User\"],\"IjyOjp\":[\"User is not logged in\"],\"fXVIZq\":[\"Values\"],\"KANz0G\":[\"View billing details\"],\"6n7jtr\":[\"Visualize\"],\"id6ein\":[\"We support your square PNGs, JPEGs and GIFs under 10MB\"],\"ZS7vYp\":[\"We will send POST requests to this endpoint for every new event\"],\"TRDppN\":[\"Webhook\"],\"v1kQyJ\":[\"Webhooks\"],\"C51ilI\":[\"When the API key will expire.\"],\"leUubq\":[\"When the key will be disabled\"],\"wvyffT\":[\"Workflow cannot be tested\"],\"pmUArF\":[\"Workspace\"],\"VicISP\":[\"Workspace Deletion\"],\"Q9pNST\":[\"Write a description\"],\"3d1wCB\":[\"yes\"],\"zSkMV0\":[\"You will be charged immediately for the full year.\"],\"XVnj6K\":[\"Your credit balance will be used to pay the monthly bills.\"],\"9ivpwk\":[\"Your name as it will be displayed\"],\"RhNbPE\":[\"Your workspace will be disabled\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/generated/es.ts b/packages/twenty-front/src/locales/generated/es.ts index 93e528428271..d199eab581c6 100644 --- a/packages/twenty-front/src/locales/generated/es.ts +++ b/packages/twenty-front/src/locales/generated/es.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" de \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" Clave API\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 ejecuciones de nodos de flujo de trabajo\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configurar campo\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abortar\"],\"uyJsf6\":[\"Acerca de\"],\"AeXO77\":[\"Cuenta\"],\"nD0Y+a\":[\"Eliminación de la cuenta\"],\"bPwFdf\":[\"Cuentas\"],\"FQBaXG\":[\"Activar\"],\"tu8A/k\":[\"Activar flujo de trabajo\"],\"F6pfE9\":[\"Activo\"],\"Mue4oc\":[\"Claves API activas creadas por usted o su equipo.\"],\"m16xKo\":[\"Añadir\"],\"DpV70M\":[\"Añadir campo\"],\"dEO3Zx\":[\"Añadir objeto\"],\"sgXUv+\":[\"Añadir proveedor de identidad SSO\"],\"5+ttxv\":[\"Añadir a la lista de bloqueo\"],\"pBsoKL\":[\"Añadir a favoritos\"],\"m2qDV8\":[\"Añade tu primer \",[\"objectLabel\"]],\"vLO+NG\":[\"Añadido \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Todos\"],\"3saA7W\":[\"Todos (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Todas las funciones\"],\"GMx1K0\":[\"Permitir el inicio de sesión a través de la funcionalidad de inicio de sesión único de Google.\"],\"dea+zy\":[\"Permitir el inicio de sesión a través de la funcionalidad de inicio de sesión único de Microsoft.\"],\"wMg43c\":[\"Permitir la invitación de nuevos usuarios compartiendo un enlace de invitación.\"],\"vHeVg5\":[\"Permitir que los usuarios se registren con un correo electrónico y una contraseña.\"],\"mJ6m4C\":[\"Una descripción opcional\"],\"0RqpZr\":[\"API y Webhooks\"],\"yRnk5W\":[\"Clave API\"],\"5h8ooz\":[\"Claves API\"],\"kAtj+q\":[\"Nombre API\"],\"aAIQg2\":[\"Apariencia\"],\"3iX0kh\":[\"¿Está seguro de que desea cambiar el intervalo de facturación?\"],\"nYD/Cq\":[\"Ascendente\"],\"rfYmIr\":[\"Asignar funciones para especificar los permisos de acceso de cada miembro\"],\"lxQ+5m\":[\"Asignado a\"],\"Y7Dx6e\":[\"Al menos un método de autenticación debe estar activado\"],\"P8fBlG\":[\"Autenticación\"],\"yIVrHZ\":[\"Autorizar\"],\"3uQmjD\":[\"Media\"],\"Dht9W3\":[\"Volver al contenido\"],\"R+w/Va\":[\"Facturación\"],\"K1172m\":[\"Lista de bloqueo\"],\"2yl5lQ\":[\"Reservar una llamada\"],\"PmmvzS\":[\"Calcule\"],\"AjVXBS\":[\"Calendario\"],\"EUpfsd\":[\"Calendarios\"],\"dEgA5A\":[\"Cancelar\"],\"0TllC8\":[\"Cancelar\"],\"rRK/Lf\":[\"Cancelar plan\"],\"N6gPiD\":[\"Cancelar su suscripción\"],\"OfzMnb\":[\"Cambiar \",[\"to\"]],\"VhMDMg\":[\"Cambiar contraseña\"],\"SviKkE\":[\"Chino simplificado\"],\"dzb4Ep\":[\"Chino - Tradicional\"],\"JEFFOR\":[\"Elija un objeto\"],\"KT6rEB\":[\"Elija su proveedor\"],\"9qP96p\":[\"Elija su prueba\"],\"yz7wBu\":[\"Cerrar\"],\"+zUMwJ\":[\"Configurar una conexión SSO\"],\"QTNsSm\":[\"Configura y personaliza tus preferencias de calendario.\"],\"aGwm+D\":[\"Configurar cómo se muestran las fechas en la aplicación\"],\"Bh4GBD\":[\"Configura tus correos electrónicos y calendario.\"],\"D8ATlr\":[\"Conectar una nueva cuenta a su espacio de trabajo\"],\"Zgi9Fd\":[\"Conectar con Google\"],\"IOfqM8\":[\"Conectar con Microsoft\"],\"9TzudL\":[\"Cuentas conectadas\"],\"M73whl\":[\"Contexto\"],\"xGVfLh\":[\"Continúe\"],\"CcGOj+\":[\"Copiloto\"],\"7eVkEH\":[\"Copiar enlace de invitación\"],\"Ej5euX\":[\"Copie esta clave ya que no será visible de nuevo\"],\"wBMjJ2\":[\"Cuenta\"],\"EkZfen\":[\"Contar todo\"],\"vQJINq\":[\"Cuenta vacía\"],\"DzRsDJ\":[\"Recuento no vacío\"],\"9FZBbf\":[\"Contar valores únicos\"],\"zNoOC2\":[\"Cree un flujo de trabajo y vuelva aquí para ver sus versiones\"],\"uXGLuq\":[\"Crear clave API\"],\"d0DCww\":[\"Crear un nuevo registro\"],\"dkAPxi\":[\"Crear Webhook\"],\"8skTDV\":[\"Objetos personalizados\"],\"qt+EaC\":[\"Personalice los campos disponibles en las vistas \",[\"objectLabelSingular\"],\".\"],\"CMhr4u\":[\"Personalizar dominio\"],\"bCJa9l\":[\"Personalice la seguridad de su espacio de trabajo\"],\"Zz6Cxn\":[\"Zona de peligro\"],\"5cNMFz\":[\"Modelo de datos\"],\"r+cVRP\":[\"Tipo de datos\"],\"mYGY3B\":[\"Fecha\"],\"Ud9zHv\":[\"Fecha y hora\"],\"5y3O+A\":[\"Desactivar\"],\"qk4i22\":[\"Desactive \\\"Sincronizar etiquetas de objetos y nombres de API\\\" para establecer un nombre de API personalizado\"],\"gexAq8\":[\"Desactivar este campo\"],\"4tpC8V\":[\"Desactivar flujo de trabajo\"],\"Y2ImVJ\":[\"Defina el nombre y la descripción de su objeto\"],\"cnGeoo\":[\"Borrar\"],\"ZDGm40\":[\"Eliminar cuenta\"],\"gAz0S5\":[\"Eliminar la cuenta y todos los datos asociados\"],\"hGfWDm\":[\"Borrar clave API\"],\"4dpwsE\":[\"Borrar registro\"],\"kf0A63\":[\"Borrar registros\"],\"T6S2Ns\":[\"Eliminar esta integración\"],\"snMaH4\":[\"Borrar webhook\"],\"kYu0eF\":[\"Eliminar espacio de trabajo\"],\"mk2Ygs\":[\"Borrar todo el espacio de trabajo\"],\"Cko536\":[\"Descendente\"],\"Nu4oKW\":[\"Descripción\"],\"2xxBws\":[\"Destruye\"],\"n+SX4g\":[\"Desarrolladores\"],\"zAg2B9\":[\"Borrador de descarte\"],\"i66xz9\":[\"Mostrar como fecha relativa\"],\"EoKe5U\":[\"Dominio\"],\"QVVmxi\":[\"Por ejemplo, integración de backoffice\"],\"tOkc8o\":[\"Más antiguo\"],\"JTbQuO\":[\"Fecha más temprana\"],\"v+uKyy\":[\"Editar el intervalo de facturación\"],\"h2KoTu\":[\"Editar la forma de pago, ver sus facturas y mucho más\"],\"6o1M/Q\":[\"Edite el nombre de su subdominio o establezca un dominio personalizado.\"],\"O3oNi5\":[\"Correo electrónico\"],\"lfQsvW\":[\"Integración del correo electrónico\"],\"QT/Wo7\":[\"El correo electrónico o el dominio ya están en la lista de bloqueo\"],\"BXEcos\":[\"Correos electrónicos\"],\"eXoH4Q\":[\"empleados\"],\"gqv5ZL\":[\"Empleados\"],\"N2S1rs\":[\"Vacío\"],\"T3juzf\":[\"URL del punto final\"],\"lYGfRP\":[\"Inglés\"],\"/bfFKe\":[\"Disfrute de \",[\"withCreditCardTrialPeriodDuration\"],\"-días de prueba gratis\"],\"GpB8YV\":[\"Empresa\"],\"c3qGJX\":[\"Error al borrar la clave api: \",[\"err\"]],\"bj7nh3\":[\"Error al regenerar la clave api: \",[\"err\"]],\"VSQxWH\":[\"Error al cambiar de abono \",[\"to\"],\".\"],\"JLxMta\":[\"Establezca puntos finales Webhook para notificaciones sobre eventos asíncronos.\"],\"cIgBjB\":[\"Excluir a las siguientes personas y dominios de mi sincronización de correo electrónico\"],\"fV7V51\":[\"Objetos existentes\"],\"IZ4o2e\":[\"Salir de Ajustes\"],\"tXGQvS\":[\"Se espera que el nodo seleccionado sea un nodo de paso de creación.\"],\"bKBhgb\":[\"Experiencia\"],\"LxRNPw\":[\"Caducidad\"],\"SkXfL0\":[\"Fecha de expiración\"],\"i9qiyR\":[\"Expira en\"],\"GS+Mus\":[\"Exportar\"],\"ep2rbf\":[\"Exportar registros\"],\"q46CjD\":[\"Exportar a PDF\"],\"DaGxE0\":[\"Vista de exportación\"],\"X9kySA\":[\"Favoritos\"],\"zXgopL\":[\"Tipo de campo\"],\"vF68cg\":[\"Campos\"],\"3w/aqw\":[\"Recuento de campos\"],\"o7J4JM\":[\"Filtro\"],\"cSev+j\":[\"Filtros\"],\"nLC6tu\":[\"Francés\"],\"aTieE0\":[\"de mensual a anual\"],\"K04lE5\":[\"de anual a mensual\"],\"scmRyR\":[\"Acceso total\"],\"xANKBj\":[\"Funciones\"],\"Weq9zb\":[\"General\"],\"DDcvSo\":[\"Alemán\"],\"NXEW3h\":[\"Aproveche al máximo su espacio de trabajo invitando a su equipo.\"],\"zSGbaR\":[\"Consiga su abono\"],\"2GT3Hf\":[\"Global\"],\"hWp1MY\":[\"Concede al servicio de asistencia de Twenty acceso temporal a tu espacio de trabajo para que podamos solucionar problemas o recuperar contenidos en tu nombre. Puedes revocar el acceso en cualquier momento.\"],\"vLyv1R\":[\"Ocultar\"],\"XTWO+W\":[\"Icono y nombre\"],\"sJGljQ\":[\"Identificador\"],\"j843N3\":[\"Si has perdido esta clave, puedes regenerarla, pero ten en cuenta que cualquier script que utilice esta clave tendrá que ser actualizado. Escribe \\\"\",[\"confirmationValue\"],\"\\\" para confirmar.\"],\"NoNwIX\":[\"Inactivo\"],\"pZ/USH\":[\"Índices\"],\"JE2tjr\":[\"La entrada debe ir en mayúsculas y no puede empezar por un número\"],\"AwUsnG\":[\"Instancias\"],\"nbfdhU\":[\"Integraciones\"],\"NtFk/Z\":[\"Proveedor de autenticación no válido\"],\"B2Tpo0\":[\"Correo electrónico no válido\"],\"/m52AE\":[\"Correo electrónico o dominio no válidos\"],\"QdoUFL\":[\"Valores de formulario no válidos\"],\"0M8+El\":[\"Invitar por correo electrónico\"],\"PWIq/W\":[\"Invitar por enlace\"],\"3athPG\":[\"Invitar por enlace\"],\"5IfmKA\":[\"Envío del enlace de invitación a las direcciones de correo electrónico\"],\"d+Y+rP\":[\"Invite a su equipo\"],\"Lj7sBL\":[\"Italiano\"],\"h6S9Yz\":[\"Coreano\"],\"zrpwCd\":[\"Laboratorio\"],\"vXIe7J\":[\"Idioma\"],\"wL3cK8\":[\"Última\"],\"Kcjbmz\":[\"Última fecha\"],\"pQjjYo\":[\"Enlace copiado en el portapapeles\"],\"FgAxTj\":[\"Cerrar sesión\"],\"nOhz3x\":[\"Cierre de sesión\"],\"T6YjCk\":[\"Gestionar miembros\"],\"4cjU2u\":[\"Gestione aquí los miembros de su espacio\"],\"FyFNsd\":[\"Gestione sus cuentas de Internet.\"],\"36kYu0\":[\"Gestione su suscripción\"],\"3Sdni6\":[\"Marcar como hecho\"],\"CK1KXz\":[\"Max\"],\"wlQNTg\":[\"Miembros\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"Más opciones\"],\"iSLA/r\":[\"Muévete a la izquierda\"],\"Ubl2by\":[\"Muévete a la derecha\"],\"6YtxFj\":[\"Nombre\"],\"z+6jaZ\":[\"Nombre de su clave API\"],\"J7w8lI\":[\"Nombre de su espacio de trabajo\"],\"2T8KCk\":[\"Navegar al registro siguiente\"],\"veSA19\":[\"Navegar a la siguiente versión\"],\"ZTEho+\":[\"Navegar al siguiente flujo de trabajo\"],\"2tw9bo\":[\"Navegar al registro anterior\"],\"I+Pm5V\":[\"Navegar a la versión anterior\"],\"QVUN3K\":[\"Navegar al flujo de trabajo anterior\"],\"isRobC\":[\"Nuevo\"],\"Kcr9Fr\":[\"Nueva cuenta\"],\"o8MyXb\":[\"Nueva llave\"],\"j313SZ\":[\"Nueva llave\"],\"hFxdey\":[\"Nuevo objeto\"],\"7vhWI8\":[\"Nueva contraseña\"],\"BcCzLv\":[\"Nuevo récord\"],\"2lmOC5\":[\"Nueva función\"],\"U1DAok\":[\"Nuevo Webhook\"],\"pwenQu\":[\"Ninguna cuenta conectada\"],\"0uWxPM\":[\"Aún no se ha ejecutado ningún flujo de trabajo\"],\"AQCvCC\":[\"Aún no hay versiones del flujo de trabajo\"],\"4wUkDk\":[\"No vacío\"],\"W0i24j\":[\"Objeto\"],\"B3toQF\":[\"Objetos\"],\"KNz3EF\":[\"Fuera de los caminos trillados\"],\"OV5wZZ\":[\"Abierto\"],\"0zpgxV\":[\"Opciones\"],\"BzEFor\":[\"o\"],\"/IX/7x\":[\"Otros\"],\"boJlGf\":[\"Página no encontrada\"],\"8ZsakT\":[\"Contraseña\"],\"mi6Rel\":[\"Se ha enviado el enlace de restablecimiento de contraseña al correo electrónico\"],\"SrVzRe\":[\"Porcentaje\"],\"yIK1GU\":[\"Porcentaje vacío\"],\"PWLd4c\":[\"Porcentaje no vacío\"],\"Bv3y5w\":[\"Destruir permanentemente el registro\"],\"N0+GsR\":[\"Fotografía\"],\"jEw0Mr\":[\"Introduzca una URL válida\"],\"6nsIo3\":[\"Escriba \\\"\",[\"confirmationValue\"],\"\\\" para confirmar que desea eliminar esta clave de API. Tenga en cuenta que cualquier script que utilice esta clave dejará de funcionar.\"],\"mFZTXr\":[\"Por favor, escriba \",[\"confirmationText\"],\" para confirmar que desea eliminar este webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Portugués - Brasil\"],\"xtXHeo\":[\"Portugués - Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Vista previa\"],\"vERlcd\":[\"Perfil\"],\"YJgRqq\":[\"Pseudoinglés\"],\"ibPuCP\":[\"Leer la documentación\"],\"v3xM25\":[\"Recibir un correo electrónico con un enlace para actualizar la contraseña\"],\"dSCufP\":[\"Selección de discos\"],\"vpZcGd\":[\"Regenerar una clave API\"],\"Mwqo5m\":[\"Regenerar llave\"],\"D+Mv78\":[\"Regenerar llave\"],\"5icoS1\":[\"Comunicados\"],\"t/YqKh\":[\"Eliminar\"],\"T/pF0Z\":[\"Eliminar de favoritos\"],\"KbS2K9\":[\"Restablecer contraseña\"],\"1IWc1n\":[\"Restablecer a\"],\"kx0s+n\":[\"Resultados\"],\"5dJK4M\":[\"Funciones\"],\"UX0N2y\":[\"Ejecute un flujo de trabajo y vuelva aquí para ver sus ejecuciones\"],\"A1taO8\":[\"Buscar en\"],\"l1/uy2\":[\"Buscar un campo...\"],\"k7kp5/\":[\"Buscar en un índice...\"],\"7taA9j\":[\"Campos de búsqueda\"],\"ofuw3g\":[\"Busca un objeto...\"],\"IMeaSJ\":[\"Buscar registros\"],\"a3LDKx\":[\"Seguridad\"],\"QREcJS\":[\"Ver versión activa\"],\"OpPn5Z\":[\"Ver carreras\"],\"EtyY4+\":[\"Ver versiones\"],\"lYhPN0\":[\"Ver historial de versiones\"],\"xraglu\":[\"Seleccione los eventos que desea enviar a este endpoint\"],\"AXTJAW\":[\"Seleccione su idioma preferido\"],\"mjK8F3\":[\"Envíe una invitación por correo electrónico a su equipo\"],\"yy5k7a\":[\"Panel de administración del servidor\"],\"V7fgiB\":[\"Establezca la visibilidad del correo electrónico, gestione su lista de bloqueo y mucho más.\"],\"cx14rp\":[\"Establezca el nombre de su dominio\"],\"tn41zE\":[\"Establezca el nombre de su subdominio\"],\"Tz0i8g\":[\"Ajustes\"],\"Vy9kmk\":[\"Comparte este enlace para invitar a los usuarios a unirse a tu espacio de trabajo\"],\"gWk8gY\":[\"¿Debería cambiar también el nombre de la API al cambiar la etiqueta de un campo?\"],\"6Uau97\":[\"Saltar\"],\"f6Hub0\":[\"Ordenar\"],\"65A04M\":[\"Español\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Subdominio\"],\"omhc+7\":[\"Subdominio ya ocupado\"],\"OlC/tU\":[\"El subdominio no puede tener más de 30 caracteres\"],\"ZETwlU\":[\"El subdominio no puede tener menos de 3 caracteres\"],\"B5jRKH\":[\"Se ha cambiado la suscripción \",[\"to\"]],\"AxQiPW\":[\"Suma\"],\"XYLcNv\":[\"Ayuda\"],\"9yk9d1\":[\"Interruptor \",[\"from\"]],\"qi74XZ\":[\"Interruptor \",[\"to\"]],\"L6Fg36\":[\"Facturación del interruptor \",[\"to\"]],\"AtzMpB\":[\"Sincronizar etiqueta de campo y nombre de API\"],\"E3AMmw\":[\"Ajustes del sistema - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Ajustes del sistema - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Prueba\"],\"bU9B27\":[\"Flujo de trabajo de pruebas\"],\"2OUtmv\":[\"Descripción de este campo\"],\"VGZYbZ\":[\"El correo electrónico asociado a su cuenta\"],\"h8mvCd\":[\"Nombre e icono de este campo\"],\"L97sPr\":[\"La página que busca ha desaparecido o nunca existió. Volvamos a la pista\"],\"uWikAA\":[\"Los valores de este campo\"],\"+69KDk\":[\"Los valores de este campo deben ser únicos\"],\"PmtLRf\":[\"Hubo un problema\"],\"hqCwGc\":[\"Esta acción no se puede deshacer. Esto borrará permanentemente a este usuario y lo eliminará de todas sus asignaciones.\"],\"gWGuHC\":[\"Esta acción no se puede deshacer. Esto borrará permanentemente todo tu espacio de trabajo. <0/> Escriba su correo electrónico para confirmar.\"],\"n9nSNJ\":[\"Formato de hora\"],\"aqMzDX\":[\"al mes\"],\"WXXiXO\":[\"al año\"],\"PiUt3N\":[\"Tipo de disparador\"],\"IQ5pAL\":[\"El tipo de activación debe ser Manual - cuando no se seleccionan registros\"],\"+zy2Nq\":[\"Tipo\"],\"U83IeL\":[\"Tipo cualquier cosa\"],\"wSXm5S\":[\"Único\"],\"GQCXQS\":[\"Contactos ilimitados\"],\"ONWvwQ\":[\"Cargar\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Utilizar como borrador\"],\"oTTQsc\":[\"Utilice sólo letra, número y guión. Empiece y termine con una letra o un número\"],\"c6uZUV\":[\"Utilice nuestra API o añada su primer \",[\"objectLabel\"],\" manualmente\"],\"7PzzBU\":[\"Usuario\"],\"IjyOjp\":[\"El usuario no ha iniciado sesión\"],\"fXVIZq\":[\"Valores\"],\"KANz0G\":[\"Ver detalles de facturación\"],\"6n7jtr\":[\"Visualice\"],\"id6ein\":[\"Admitimos tus PNG, JPEG y GIF cuadrados de menos de 10 MB\"],\"ZS7vYp\":[\"Enviaremos peticiones POST a este endpoint para cada nuevo evento\"],\"TRDppN\":[\"Gancho web\"],\"v1kQyJ\":[\"Webhooks\"],\"C51ilI\":[\"Cuándo caducará la clave API.\"],\"leUubq\":[\"Cuándo se desactivará la tecla\"],\"wvyffT\":[\"No se puede probar el flujo de trabajo\"],\"pmUArF\":[\"Espacio de trabajo\"],\"VicISP\":[\"Eliminación del espacio de trabajo\"],\"Q9pNST\":[\"Escriba una descripción\"],\"3d1wCB\":[\"sí\"],\"zSkMV0\":[\"Se le cobrará inmediatamente el año completo.\"],\"XVnj6K\":[\"Su saldo de crédito se utilizará para pagar las facturas mensuales.\"],\"9ivpwk\":[\"Su nombre tal y como se mostrará\"],\"RhNbPE\":[\"Tu espacio de trabajo se desactivará\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" de \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" Clave API\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 ejecuciones de nodos de flujo de trabajo\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configurar campo\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abortar\"],\"uyJsf6\":[\"Acerca de\"],\"AeXO77\":[\"Cuenta\"],\"nD0Y+a\":[\"Eliminación de la cuenta\"],\"bPwFdf\":[\"Cuentas\"],\"FQBaXG\":[\"Activar\"],\"tu8A/k\":[\"Activar flujo de trabajo\"],\"F6pfE9\":[\"Activo\"],\"Mue4oc\":[\"Claves API activas creadas por usted o su equipo.\"],\"m16xKo\":[\"Añadir\"],\"DpV70M\":[\"Añadir campo\"],\"dEO3Zx\":[\"Añadir objeto\"],\"sgXUv+\":[\"Añadir proveedor de identidad SSO\"],\"5+ttxv\":[\"Añadir a la lista de bloqueo\"],\"pBsoKL\":[\"Añadir a favoritos\"],\"m2qDV8\":[\"Añade tu primer \",[\"objectLabel\"]],\"vLO+NG\":[\"Añadido \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Todos\"],\"3saA7W\":[\"Todos (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Todas las funciones\"],\"GMx1K0\":[\"Permitir el inicio de sesión a través de la funcionalidad de inicio de sesión único de Google.\"],\"dea+zy\":[\"Permitir el inicio de sesión a través de la funcionalidad de inicio de sesión único de Microsoft.\"],\"wMg43c\":[\"Permitir la invitación de nuevos usuarios compartiendo un enlace de invitación.\"],\"vHeVg5\":[\"Permitir que los usuarios se registren con un correo electrónico y una contraseña.\"],\"mJ6m4C\":[\"Una descripción opcional\"],\"0RqpZr\":[\"API y Webhooks\"],\"yRnk5W\":[\"Clave API\"],\"5h8ooz\":[\"Claves API\"],\"kAtj+q\":[\"Nombre API\"],\"aAIQg2\":[\"Apariencia\"],\"3iX0kh\":[\"¿Está seguro de que desea cambiar el intervalo de facturación?\"],\"nYD/Cq\":[\"Ascendente\"],\"rfYmIr\":[\"Asignar funciones para especificar los permisos de acceso de cada miembro\"],\"lxQ+5m\":[\"Asignado a\"],\"Y7Dx6e\":[\"Al menos un método de autenticación debe estar activado\"],\"P8fBlG\":[\"Autenticación\"],\"yIVrHZ\":[\"Autorizar\"],\"3uQmjD\":[\"Media\"],\"Dht9W3\":[\"Volver al contenido\"],\"R+w/Va\":[\"Facturación\"],\"K1172m\":[\"Lista de bloqueo\"],\"2yl5lQ\":[\"Reservar una llamada\"],\"PmmvzS\":[\"Calcule\"],\"AjVXBS\":[\"Calendario\"],\"EUpfsd\":[\"Calendarios\"],\"dEgA5A\":[\"Cancelar\"],\"0TllC8\":[\"Cancelar\"],\"rRK/Lf\":[\"Cancelar plan\"],\"N6gPiD\":[\"Cancelar su suscripción\"],\"OfzMnb\":[\"Cambiar \",[\"to\"]],\"VhMDMg\":[\"Cambiar contraseña\"],\"SviKkE\":[\"Chino simplificado\"],\"dzb4Ep\":[\"Chino - Tradicional\"],\"JEFFOR\":[\"Elija un objeto\"],\"KT6rEB\":[\"Elija su proveedor\"],\"9qP96p\":[\"Elija su prueba\"],\"yz7wBu\":[\"Cerrar\"],\"+zUMwJ\":[\"Configurar una conexión SSO\"],\"QTNsSm\":[\"Configura y personaliza tus preferencias de calendario.\"],\"aGwm+D\":[\"Configurar cómo se muestran las fechas en la aplicación\"],\"Bh4GBD\":[\"Configura tus correos electrónicos y calendario.\"],\"D8ATlr\":[\"Conectar una nueva cuenta a su espacio de trabajo\"],\"Zgi9Fd\":[\"Conectar con Google\"],\"IOfqM8\":[\"Conectar con Microsoft\"],\"9TzudL\":[\"Cuentas conectadas\"],\"M73whl\":[\"Contexto\"],\"xGVfLh\":[\"Continúe\"],\"CcGOj+\":[\"Copiloto\"],\"7eVkEH\":[\"Copiar enlace de invitación\"],\"Ej5euX\":[\"Copie esta clave ya que no será visible de nuevo\"],\"wBMjJ2\":[\"Cuenta\"],\"EkZfen\":[\"Contar todo\"],\"vQJINq\":[\"Cuenta vacía\"],\"DzRsDJ\":[\"Recuento no vacío\"],\"9FZBbf\":[\"Contar valores únicos\"],\"zNoOC2\":[\"Cree un flujo de trabajo y vuelva aquí para ver sus versiones\"],\"uXGLuq\":[\"Crear clave API\"],\"d0DCww\":[\"Crear un nuevo registro\"],\"dkAPxi\":[\"Crear Webhook\"],\"8skTDV\":[\"Objetos personalizados\"],\"qt+EaC\":[\"Personalice los campos disponibles en las vistas \",[\"objectLabelSingular\"],\".\"],\"CMhr4u\":[\"Personalizar dominio\"],\"bCJa9l\":[\"Personalice la seguridad de su espacio de trabajo\"],\"Zz6Cxn\":[\"Zona de peligro\"],\"5cNMFz\":[\"Modelo de datos\"],\"r+cVRP\":[\"Tipo de datos\"],\"mYGY3B\":[\"Fecha\"],\"Ud9zHv\":[\"Fecha y hora\"],\"5y3O+A\":[\"Desactivar\"],\"qk4i22\":[\"Desactive \\\"Sincronizar etiquetas de objetos y nombres de API\\\" para establecer un nombre de API personalizado\"],\"gexAq8\":[\"Desactivar este campo\"],\"4tpC8V\":[\"Desactivar flujo de trabajo\"],\"Y2ImVJ\":[\"Defina el nombre y la descripción de su objeto\"],\"cnGeoo\":[\"Borrar\"],\"ZDGm40\":[\"Eliminar cuenta\"],\"gAz0S5\":[\"Eliminar la cuenta y todos los datos asociados\"],\"hGfWDm\":[\"Borrar clave API\"],\"4dpwsE\":[\"Borrar registro\"],\"kf0A63\":[\"Borrar registros\"],\"T6S2Ns\":[\"Eliminar esta integración\"],\"snMaH4\":[\"Borrar webhook\"],\"kYu0eF\":[\"Eliminar espacio de trabajo\"],\"mk2Ygs\":[\"Borrar todo el espacio de trabajo\"],\"Cko536\":[\"Descendente\"],\"Nu4oKW\":[\"Descripción\"],\"2xxBws\":[\"Destruye\"],\"n+SX4g\":[\"Desarrolladores\"],\"zAg2B9\":[\"Borrador de descarte\"],\"i66xz9\":[\"Mostrar como fecha relativa\"],\"EoKe5U\":[\"Dominio\"],\"QVVmxi\":[\"Por ejemplo, integración de backoffice\"],\"tOkc8o\":[\"Más antiguo\"],\"JTbQuO\":[\"Fecha más temprana\"],\"v+uKyy\":[\"Editar el intervalo de facturación\"],\"h2KoTu\":[\"Editar la forma de pago, ver sus facturas y mucho más\"],\"6o1M/Q\":[\"Edite el nombre de su subdominio o establezca un dominio personalizado.\"],\"O3oNi5\":[\"Correo electrónico\"],\"lfQsvW\":[\"Integración del correo electrónico\"],\"QT/Wo7\":[\"El correo electrónico o el dominio ya están en la lista de bloqueo\"],\"BXEcos\":[\"Correos electrónicos\"],\"eXoH4Q\":[\"empleados\"],\"gqv5ZL\":[\"Empleados\"],\"N2S1rs\":[\"Vacío\"],\"T3juzf\":[\"URL del punto final\"],\"lYGfRP\":[\"Inglés\"],\"/bfFKe\":[\"Disfrute de \",[\"withCreditCardTrialPeriodDuration\"],\"-días de prueba gratis\"],\"GpB8YV\":[\"Empresa\"],\"c3qGJX\":[\"Error al borrar la clave api: \",[\"err\"]],\"bj7nh3\":[\"Error al regenerar la clave api: \",[\"err\"]],\"VSQxWH\":[\"Error al cambiar de abono \",[\"to\"],\".\"],\"JLxMta\":[\"Establezca puntos finales Webhook para notificaciones sobre eventos asíncronos.\"],\"cIgBjB\":[\"Excluir a las siguientes personas y dominios de mi sincronización de correo electrónico\"],\"fV7V51\":[\"Objetos existentes\"],\"IZ4o2e\":[\"Salir de Ajustes\"],\"tXGQvS\":[\"Se espera que el nodo seleccionado sea un nodo de paso de creación.\"],\"bKBhgb\":[\"Experiencia\"],\"LxRNPw\":[\"Caducidad\"],\"SkXfL0\":[\"Fecha de expiración\"],\"i9qiyR\":[\"Expira en\"],\"GS+Mus\":[\"Exportar\"],\"ep2rbf\":[\"Exportar registros\"],\"q46CjD\":[\"Exportar a PDF\"],\"DaGxE0\":[\"Vista de exportación\"],\"X9kySA\":[\"Favoritos\"],\"zXgopL\":[\"Tipo de campo\"],\"vF68cg\":[\"Campos\"],\"3w/aqw\":[\"Recuento de campos\"],\"o7J4JM\":[\"Filtro\"],\"cSev+j\":[\"Filtros\"],\"nLC6tu\":[\"Francés\"],\"aTieE0\":[\"de mensual a anual\"],\"K04lE5\":[\"de anual a mensual\"],\"scmRyR\":[\"Acceso total\"],\"xANKBj\":[\"Funciones\"],\"Weq9zb\":[\"General\"],\"DDcvSo\":[\"Alemán\"],\"NXEW3h\":[\"Aproveche al máximo su espacio de trabajo invitando a su equipo.\"],\"zSGbaR\":[\"Consiga su abono\"],\"2GT3Hf\":[\"Global\"],\"hWp1MY\":[\"Concede al servicio de asistencia de Twenty acceso temporal a tu espacio de trabajo para que podamos solucionar problemas o recuperar contenidos en tu nombre. Puedes revocar el acceso en cualquier momento.\"],\"vLyv1R\":[\"Ocultar\"],\"XTWO+W\":[\"Icono y nombre\"],\"sJGljQ\":[\"Identificador\"],\"j843N3\":[\"Si has perdido esta clave, puedes regenerarla, pero ten en cuenta que cualquier script que utilice esta clave tendrá que ser actualizado. Escribe \\\"\",[\"confirmationValue\"],\"\\\" para confirmar.\"],\"NoNwIX\":[\"Inactivo\"],\"pZ/USH\":[\"Índices\"],\"JE2tjr\":[\"La entrada debe ir en mayúsculas y no puede empezar por un número\"],\"AwUsnG\":[\"Instancias\"],\"nbfdhU\":[\"Integraciones\"],\"NtFk/Z\":[\"Proveedor de autenticación no válido\"],\"B2Tpo0\":[\"Correo electrónico no válido\"],\"/m52AE\":[\"Correo electrónico o dominio no válidos\"],\"QdoUFL\":[\"Valores de formulario no válidos\"],\"0M8+El\":[\"Invitar por correo electrónico\"],\"PWIq/W\":[\"Invitar por enlace\"],\"3athPG\":[\"Invitar por enlace\"],\"5IfmKA\":[\"Envío del enlace de invitación a las direcciones de correo electrónico\"],\"d+Y+rP\":[\"Invite a su equipo\"],\"Lj7sBL\":[\"Italiano\"],\"dFtidv\":[\"Japonés\"],\"h6S9Yz\":[\"Coreano\"],\"zrpwCd\":[\"Laboratorio\"],\"vXIe7J\":[\"Idioma\"],\"wL3cK8\":[\"Última\"],\"Kcjbmz\":[\"Última fecha\"],\"pQjjYo\":[\"Enlace copiado en el portapapeles\"],\"FgAxTj\":[\"Cerrar sesión\"],\"nOhz3x\":[\"Cierre de sesión\"],\"T6YjCk\":[\"Gestionar miembros\"],\"4cjU2u\":[\"Gestione aquí los miembros de su espacio\"],\"FyFNsd\":[\"Gestione sus cuentas de Internet.\"],\"36kYu0\":[\"Gestione su suscripción\"],\"3Sdni6\":[\"Marcar como hecho\"],\"CK1KXz\":[\"Max\"],\"wlQNTg\":[\"Miembros\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"Más opciones\"],\"iSLA/r\":[\"Muévete a la izquierda\"],\"Ubl2by\":[\"Muévete a la derecha\"],\"6YtxFj\":[\"Nombre\"],\"z+6jaZ\":[\"Nombre de su clave API\"],\"J7w8lI\":[\"Nombre de su espacio de trabajo\"],\"2T8KCk\":[\"Navegar al registro siguiente\"],\"veSA19\":[\"Navegar a la siguiente versión\"],\"ZTEho+\":[\"Navegar al siguiente flujo de trabajo\"],\"2tw9bo\":[\"Navegar al registro anterior\"],\"I+Pm5V\":[\"Navegar a la versión anterior\"],\"QVUN3K\":[\"Navegar al flujo de trabajo anterior\"],\"isRobC\":[\"Nuevo\"],\"Kcr9Fr\":[\"Nueva cuenta\"],\"o8MyXb\":[\"Nueva llave\"],\"j313SZ\":[\"Nueva llave\"],\"hFxdey\":[\"Nuevo objeto\"],\"7vhWI8\":[\"Nueva contraseña\"],\"BcCzLv\":[\"Nuevo récord\"],\"2lmOC5\":[\"Nueva función\"],\"U1DAok\":[\"Nuevo Webhook\"],\"pwenQu\":[\"Ninguna cuenta conectada\"],\"0uWxPM\":[\"Aún no se ha ejecutado ningún flujo de trabajo\"],\"AQCvCC\":[\"Aún no hay versiones del flujo de trabajo\"],\"4wUkDk\":[\"No vacío\"],\"W0i24j\":[\"Objeto\"],\"B3toQF\":[\"Objetos\"],\"KNz3EF\":[\"Fuera de los caminos trillados\"],\"OV5wZZ\":[\"Abierto\"],\"0zpgxV\":[\"Opciones\"],\"BzEFor\":[\"o\"],\"/IX/7x\":[\"Otros\"],\"boJlGf\":[\"Página no encontrada\"],\"8ZsakT\":[\"Contraseña\"],\"mi6Rel\":[\"Se ha enviado el enlace de restablecimiento de contraseña al correo electrónico\"],\"SrVzRe\":[\"Porcentaje\"],\"yIK1GU\":[\"Porcentaje vacío\"],\"PWLd4c\":[\"Porcentaje no vacío\"],\"Bv3y5w\":[\"Destruir permanentemente el registro\"],\"N0+GsR\":[\"Fotografía\"],\"jEw0Mr\":[\"Introduzca una URL válida\"],\"6nsIo3\":[\"Escriba \\\"\",[\"confirmationValue\"],\"\\\" para confirmar que desea eliminar esta clave de API. Tenga en cuenta que cualquier script que utilice esta clave dejará de funcionar.\"],\"mFZTXr\":[\"Por favor, escriba \",[\"confirmationText\"],\" para confirmar que desea eliminar este webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Portugués - Brasil\"],\"xtXHeo\":[\"Portugués - Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Vista previa\"],\"vERlcd\":[\"Perfil\"],\"YJgRqq\":[\"Pseudoinglés\"],\"ibPuCP\":[\"Leer la documentación\"],\"v3xM25\":[\"Recibir un correo electrónico con un enlace para actualizar la contraseña\"],\"dSCufP\":[\"Selección de discos\"],\"vpZcGd\":[\"Regenerar una clave API\"],\"Mwqo5m\":[\"Regenerar llave\"],\"D+Mv78\":[\"Regenerar llave\"],\"5icoS1\":[\"Comunicados\"],\"t/YqKh\":[\"Eliminar\"],\"T/pF0Z\":[\"Eliminar de favoritos\"],\"KbS2K9\":[\"Restablecer contraseña\"],\"1IWc1n\":[\"Restablecer a\"],\"kx0s+n\":[\"Resultados\"],\"5dJK4M\":[\"Funciones\"],\"UX0N2y\":[\"Ejecute un flujo de trabajo y vuelva aquí para ver sus ejecuciones\"],\"A1taO8\":[\"Buscar en\"],\"l1/uy2\":[\"Buscar un campo...\"],\"k7kp5/\":[\"Buscar en un índice...\"],\"7taA9j\":[\"Campos de búsqueda\"],\"ofuw3g\":[\"Busca un objeto...\"],\"IMeaSJ\":[\"Buscar registros\"],\"a3LDKx\":[\"Seguridad\"],\"QREcJS\":[\"Ver versión activa\"],\"OpPn5Z\":[\"Ver carreras\"],\"EtyY4+\":[\"Ver versiones\"],\"lYhPN0\":[\"Ver historial de versiones\"],\"xraglu\":[\"Seleccione los eventos que desea enviar a este endpoint\"],\"AXTJAW\":[\"Seleccione su idioma preferido\"],\"mjK8F3\":[\"Envíe una invitación por correo electrónico a su equipo\"],\"yy5k7a\":[\"Panel de administración del servidor\"],\"V7fgiB\":[\"Establezca la visibilidad del correo electrónico, gestione su lista de bloqueo y mucho más.\"],\"cx14rp\":[\"Establezca el nombre de su dominio\"],\"tn41zE\":[\"Establezca el nombre de su subdominio\"],\"Tz0i8g\":[\"Ajustes\"],\"Vy9kmk\":[\"Comparte este enlace para invitar a los usuarios a unirse a tu espacio de trabajo\"],\"gWk8gY\":[\"¿Debería cambiar también el nombre de la API al cambiar la etiqueta de un campo?\"],\"6Uau97\":[\"Saltar\"],\"f6Hub0\":[\"Ordenar\"],\"65A04M\":[\"Español\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Subdominio\"],\"omhc+7\":[\"Subdominio ya ocupado\"],\"OlC/tU\":[\"El subdominio no puede tener más de 30 caracteres\"],\"ZETwlU\":[\"El subdominio no puede tener menos de 3 caracteres\"],\"B5jRKH\":[\"Se ha cambiado la suscripción \",[\"to\"]],\"AxQiPW\":[\"Suma\"],\"XYLcNv\":[\"Ayuda\"],\"9yk9d1\":[\"Interruptor \",[\"from\"]],\"qi74XZ\":[\"Interruptor \",[\"to\"]],\"L6Fg36\":[\"Facturación del interruptor \",[\"to\"]],\"AtzMpB\":[\"Sincronizar etiqueta de campo y nombre de API\"],\"E3AMmw\":[\"Ajustes del sistema - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Ajustes del sistema - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Prueba\"],\"bU9B27\":[\"Flujo de trabajo de pruebas\"],\"2OUtmv\":[\"Descripción de este campo\"],\"VGZYbZ\":[\"El correo electrónico asociado a su cuenta\"],\"h8mvCd\":[\"Nombre e icono de este campo\"],\"L97sPr\":[\"La página que busca ha desaparecido o nunca existió. Volvamos a la pista\"],\"uWikAA\":[\"Los valores de este campo\"],\"+69KDk\":[\"Los valores de este campo deben ser únicos\"],\"PmtLRf\":[\"Hubo un problema\"],\"hqCwGc\":[\"Esta acción no se puede deshacer. Esto borrará permanentemente a este usuario y lo eliminará de todas sus asignaciones.\"],\"gWGuHC\":[\"Esta acción no se puede deshacer. Esto borrará permanentemente todo tu espacio de trabajo. <0/> Escriba su correo electrónico para confirmar.\"],\"n9nSNJ\":[\"Formato de hora\"],\"aqMzDX\":[\"al mes\"],\"WXXiXO\":[\"al año\"],\"PiUt3N\":[\"Tipo de disparador\"],\"IQ5pAL\":[\"El tipo de activación debe ser Manual - cuando no se seleccionan registros\"],\"+zy2Nq\":[\"Tipo\"],\"U83IeL\":[\"Tipo cualquier cosa\"],\"wSXm5S\":[\"Único\"],\"GQCXQS\":[\"Contactos ilimitados\"],\"ONWvwQ\":[\"Cargar\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Utilizar como borrador\"],\"oTTQsc\":[\"Utilice sólo letra, número y guión. Empiece y termine con una letra o un número\"],\"c6uZUV\":[\"Utilice nuestra API o añada su primer \",[\"objectLabel\"],\" manualmente\"],\"7PzzBU\":[\"Usuario\"],\"IjyOjp\":[\"El usuario no ha iniciado sesión\"],\"fXVIZq\":[\"Valores\"],\"KANz0G\":[\"Ver detalles de facturación\"],\"6n7jtr\":[\"Visualice\"],\"id6ein\":[\"Admitimos tus PNG, JPEG y GIF cuadrados de menos de 10 MB\"],\"ZS7vYp\":[\"Enviaremos peticiones POST a este endpoint para cada nuevo evento\"],\"TRDppN\":[\"Gancho web\"],\"v1kQyJ\":[\"Webhooks\"],\"C51ilI\":[\"Cuándo caducará la clave API.\"],\"leUubq\":[\"Cuándo se desactivará la tecla\"],\"wvyffT\":[\"No se puede probar el flujo de trabajo\"],\"pmUArF\":[\"Espacio de trabajo\"],\"VicISP\":[\"Eliminación del espacio de trabajo\"],\"Q9pNST\":[\"Escriba una descripción\"],\"3d1wCB\":[\"sí\"],\"zSkMV0\":[\"Se le cobrará inmediatamente el año completo.\"],\"XVnj6K\":[\"Su saldo de crédito se utilizará para pagar las facturas mensuales.\"],\"9ivpwk\":[\"Su nombre tal y como se mostrará\"],\"RhNbPE\":[\"Tu espacio de trabajo se desactivará\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/generated/fr.ts b/packages/twenty-front/src/locales/generated/fr.ts index d13fdba59a14..99867eb7a245 100644 --- a/packages/twenty-front/src/locales/generated/fr.ts +++ b/packages/twenty-front/src/locales/generated/fr.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" de \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" Clé API\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 exécutions de nœuds de flux de travail\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configurer le champ\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abandonner\"],\"uyJsf6\":[\"A propos de\"],\"AeXO77\":[\"Compte\"],\"nD0Y+a\":[\"Suppression de compte\"],\"bPwFdf\":[\"Comptes\"],\"FQBaXG\":[\"Activer\"],\"tu8A/k\":[\"Activer le flux de travail\"],\"F6pfE9\":[\"Actif\"],\"Mue4oc\":[\"Clés API actives créées par vous ou votre équipe.\"],\"m16xKo\":[\"Ajouter\"],\"DpV70M\":[\"Ajouter un champ\"],\"dEO3Zx\":[\"Ajouter un objet\"],\"sgXUv+\":[\"Ajouter un fournisseur d'identité SSO\"],\"5+ttxv\":[\"Ajouter à la liste de blocage\"],\"pBsoKL\":[\"Ajouter aux favoris\"],\"m2qDV8\":[\"Ajoutez votre premier \",[\"objectLabel\"]],\"vLO+NG\":[\"Ajouté \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Tous\"],\"3saA7W\":[\"Tous (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Tous les rôles\"],\"GMx1K0\":[\"Autoriser les connexions via la fonctionnalité d'authentification unique de Google.\"],\"dea+zy\":[\"Autoriser les connexions via la fonctionnalité d'authentification unique de Microsoft.\"],\"wMg43c\":[\"Permettre l'invitation de nouveaux utilisateurs en partageant un lien d'invitation.\"],\"vHeVg5\":[\"Permettre aux utilisateurs de se connecter à l'aide d'un courriel et d'un mot de passe.\"],\"mJ6m4C\":[\"Une description facultative\"],\"0RqpZr\":[\"API & Webhooks\"],\"yRnk5W\":[\"Clé API\"],\"5h8ooz\":[\"Clés API\"],\"kAtj+q\":[\"Nom de l'API\"],\"aAIQg2\":[\"Apparence\"],\"3iX0kh\":[\"Êtes-vous sûr de vouloir modifier votre intervalle de facturation ?\"],\"nYD/Cq\":[\"Ascendante\"],\"rfYmIr\":[\"Attribuer des rôles pour spécifier les autorisations d'accès de chaque membre\"],\"lxQ+5m\":[\"Affecté à\"],\"Y7Dx6e\":[\"Au moins une méthode d'authentification doit être activée\"],\"P8fBlG\":[\"Authentification\"],\"yIVrHZ\":[\"Autoriser\"],\"3uQmjD\":[\"Moyenne\"],\"Dht9W3\":[\"Retour au contenu\"],\"R+w/Va\":[\"Facturation\"],\"K1172m\":[\"Liste de blocage\"],\"2yl5lQ\":[\"Réserver un appel\"],\"PmmvzS\":[\"Calculer\"],\"AjVXBS\":[\"Calendrier\"],\"EUpfsd\":[\"Calendriers\"],\"dEgA5A\":[\"Annuler\"],\"0TllC8\":[\"Annuler à tout moment\"],\"rRK/Lf\":[\"Annuler le plan\"],\"N6gPiD\":[\"Annuler votre abonnement\"],\"OfzMnb\":[\"Modifier \",[\"to\"]],\"VhMDMg\":[\"Modifier le mot de passe\"],\"SviKkE\":[\"Chinois - simplifié\"],\"dzb4Ep\":[\"Chinois - Traditionnel\"],\"JEFFOR\":[\"Choisir un objet\"],\"KT6rEB\":[\"Choisissez votre fournisseur\"],\"9qP96p\":[\"Choisissez votre essai\"],\"yz7wBu\":[\"Fermer\"],\"+zUMwJ\":[\"Configurer une connexion SSO\"],\"QTNsSm\":[\"Configurez et personnalisez vos préférences en matière de calendrier.\"],\"aGwm+D\":[\"Configurer l'affichage des dates dans l'application\"],\"Bh4GBD\":[\"Configurez vos courriels et votre calendrier.\"],\"D8ATlr\":[\"Connecter un nouveau compte à votre espace de travail\"],\"Zgi9Fd\":[\"Se connecter à Google\"],\"IOfqM8\":[\"Se connecter avec Microsoft\"],\"9TzudL\":[\"Comptes connectés\"],\"M73whl\":[\"Contexte\"],\"xGVfLh\":[\"Continuer\"],\"CcGOj+\":[\"Copilote\"],\"7eVkEH\":[\"Copier le lien de l'invitation\"],\"Ej5euX\":[\"Copiez cette clé car elle ne sera pas visible à nouveau\"],\"wBMjJ2\":[\"Compter\"],\"EkZfen\":[\"Comptez tout\"],\"vQJINq\":[\"Compter les vides\"],\"DzRsDJ\":[\"Le compte n'est pas vide\"],\"9FZBbf\":[\"Compter les valeurs uniques\"],\"zNoOC2\":[\"Créez un flux de travail et revenez ici pour voir ses versions\"],\"uXGLuq\":[\"Créer une clé API\"],\"d0DCww\":[\"Créer un nouvel enregistrement\"],\"dkAPxi\":[\"Créer un Webhook\"],\"8skTDV\":[\"Objets personnalisés\"],\"qt+EaC\":[\"Personnaliser les champs disponibles dans les vues \",[\"objectLabelSingular\"],\".\"],\"CMhr4u\":[\"Personnaliser le domaine\"],\"bCJa9l\":[\"Personnalisez la sécurité de votre espace de travail\"],\"Zz6Cxn\":[\"Zone de danger\"],\"5cNMFz\":[\"Modèle de données\"],\"r+cVRP\":[\"Type de données\"],\"mYGY3B\":[\"Date\"],\"Ud9zHv\":[\"Date et heure\"],\"5y3O+A\":[\"Désactiver\"],\"qk4i22\":[\"Désactiver la fonction \\\"Synchroniser les étiquettes des objets et les noms des API\\\" pour définir un nom d'API personnalisé\"],\"gexAq8\":[\"Désactiver ce champ\"],\"4tpC8V\":[\"Désactiver le flux de travail\"],\"Y2ImVJ\":[\"Définir le nom et la description de votre objet\"],\"cnGeoo\":[\"Supprimer\"],\"ZDGm40\":[\"Supprimer le compte\"],\"gAz0S5\":[\"Supprimer le compte et toutes les données associées\"],\"hGfWDm\":[\"Supprimer la clé API\"],\"4dpwsE\":[\"Supprimer l'enregistrement\"],\"kf0A63\":[\"Supprimer des enregistrements\"],\"T6S2Ns\":[\"Supprimer cette intégration\"],\"snMaH4\":[\"Supprimer le webhook\"],\"kYu0eF\":[\"Supprimer l'espace de travail\"],\"mk2Ygs\":[\"Supprimer l'ensemble de l'espace de travail\"],\"Cko536\":[\"Descente\"],\"Nu4oKW\":[\"Description\"],\"2xxBws\":[\"Détruire\"],\"n+SX4g\":[\"Développeurs\"],\"zAg2B9\":[\"Rejeter le projet\"],\"i66xz9\":[\"Affichage en tant que date relative\"],\"EoKe5U\":[\"Domaine\"],\"QVVmxi\":[\"Par exemple, l'intégration du backoffice\"],\"tOkc8o\":[\"Le plus tôt\"],\"JTbQuO\":[\"Date la plus ancienne\"],\"v+uKyy\":[\"Modifier l'intervalle de facturation\"],\"h2KoTu\":[\"Modifier le mode de paiement, consulter vos factures et plus encore\"],\"6o1M/Q\":[\"Modifiez le nom de votre sous-domaine ou définissez un domaine personnalisé.\"],\"O3oNi5\":[\"Courriel\"],\"lfQsvW\":[\"Intégration du courrier électronique\"],\"QT/Wo7\":[\"L'email ou le domaine est déjà dans la liste de blocage\"],\"BXEcos\":[\"Emails\"],\"eXoH4Q\":[\"employés\"],\"gqv5ZL\":[\"Salariés\"],\"N2S1rs\":[\"Vide\"],\"T3juzf\":[\"URL du point final\"],\"lYGfRP\":[\"Anglais\"],\"/bfFKe\":[\"Profitez d'un essai gratuit de \",[\"withCreditCardTrialPeriodDuration\"],\"-jours\"],\"GpB8YV\":[\"Entreprise\"],\"c3qGJX\":[\"Erreur lors de la suppression de la clé api : \",[\"err\"]],\"bj7nh3\":[\"Erreur de régénération de la clé api : \",[\"err\"]],\"VSQxWH\":[\"Erreur lors de la commutation de l'abonnement \",[\"to\"],\".\"],\"JLxMta\":[\"Établir des points de terminaison Webhook pour les notifications d'événements asynchrones.\"],\"cIgBjB\":[\"Exclure les personnes et domaines suivants de ma synchronisation d'emails\"],\"fV7V51\":[\"Objets existants\"],\"IZ4o2e\":[\"Quitter les paramètres\"],\"tXGQvS\":[\"Le nœud sélectionné devrait être un nœud d'étape de création.\"],\"bKBhgb\":[\"Expérience\"],\"LxRNPw\":[\"Expiration\"],\"SkXfL0\":[\"Date d'expiration\"],\"i9qiyR\":[\"Expire en\"],\"GS+Mus\":[\"Exportation\"],\"ep2rbf\":[\"Exporter des enregistrements\"],\"q46CjD\":[\"Exporter au format PDF\"],\"DaGxE0\":[\"Vue d'exportation\"],\"X9kySA\":[\"Favoris\"],\"zXgopL\":[\"Type de champ\"],\"vF68cg\":[\"Domaines\"],\"3w/aqw\":[\"Nombre de champs\"],\"o7J4JM\":[\"Filtre\"],\"cSev+j\":[\"Filtres\"],\"nLC6tu\":[\"Français\"],\"aTieE0\":[\"de mensuel à annuel\"],\"K04lE5\":[\"d'annuel à mensuel\"],\"scmRyR\":[\"Accès complet\"],\"xANKBj\":[\"Fonctions\"],\"Weq9zb\":[\"Général\"],\"DDcvSo\":[\"Allemand\"],\"NXEW3h\":[\"Tirez le meilleur parti de votre espace de travail en y invitant votre équipe.\"],\"zSGbaR\":[\"S'abonner\"],\"2GT3Hf\":[\"Mondial\"],\"hWp1MY\":[\"Accordez à Twenty support un accès temporaire à votre espace de travail afin que nous puissions résoudre des problèmes ou récupérer du contenu en votre nom. Vous pouvez révoquer l'accès à tout moment.\"],\"vLyv1R\":[\"Cacher\"],\"XTWO+W\":[\"Icône et nom\"],\"sJGljQ\":[\"Identifiant\"],\"j843N3\":[\"Si vous avez perdu cette clé, vous pouvez la régénérer, mais sachez que tout script utilisant cette clé devra être mis à jour. Veuillez taper \\\"\",[\"confirmationValue\"],\"\\\" pour confirmer.\"],\"NoNwIX\":[\"Inactif\"],\"pZ/USH\":[\"Index\"],\"JE2tjr\":[\"Les données doivent être en majuscules et ne peuvent pas commencer par un chiffre\"],\"AwUsnG\":[\"Instances\"],\"nbfdhU\":[\"Intégrations\"],\"NtFk/Z\":[\"Fournisseur d'authentification invalide\"],\"B2Tpo0\":[\"Courriel non valide\"],\"/m52AE\":[\"Courriel ou domaine invalide\"],\"QdoUFL\":[\"Valeurs de formulaire non valides\"],\"0M8+El\":[\"Inviter par courriel\"],\"PWIq/W\":[\"Inviter par lien\"],\"3athPG\":[\"Inviter par lien\"],\"5IfmKA\":[\"Lien d'invitation envoyé aux adresses électroniques\"],\"d+Y+rP\":[\"Invitez votre équipe\"],\"Lj7sBL\":[\"Italien\"],\"h6S9Yz\":[\"Coréen\"],\"zrpwCd\":[\"Laboratoire\"],\"vXIe7J\":[\"Langue\"],\"wL3cK8\":[\"Dernières nouvelles\"],\"Kcjbmz\":[\"Dernière date\"],\"pQjjYo\":[\"Lien copié dans le presse-papiers\"],\"FgAxTj\":[\"Déconnexion\"],\"nOhz3x\":[\"Déconnexion\"],\"T6YjCk\":[\"Gérer les membres\"],\"4cjU2u\":[\"Gérez les membres de votre espace ici\"],\"FyFNsd\":[\"Gérer vos comptes internet.\"],\"36kYu0\":[\"Gérer votre abonnement\"],\"3Sdni6\":[\"Marquer comme fait\"],\"CK1KXz\":[\"Max\"],\"wlQNTg\":[\"Les membres\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"Plus d'options\"],\"iSLA/r\":[\"Déplacer vers la gauche\"],\"Ubl2by\":[\"Déplacer à droite\"],\"6YtxFj\":[\"Nom\"],\"z+6jaZ\":[\"Nom de votre clé API\"],\"J7w8lI\":[\"Nom de votre espace de travail\"],\"2T8KCk\":[\"Passer à l'enregistrement suivant\"],\"veSA19\":[\"Naviguer vers la version suivante\"],\"ZTEho+\":[\"Naviguer vers le flux de travail suivant\"],\"2tw9bo\":[\"Naviguer vers l'enregistrement précédent\"],\"I+Pm5V\":[\"Naviguer vers la version précédente\"],\"QVUN3K\":[\"Naviguer vers le flux de travail précédent\"],\"isRobC\":[\"Nouveau\"],\"Kcr9Fr\":[\"Nouveau compte\"],\"o8MyXb\":[\"Nouvelle clé\"],\"j313SZ\":[\"Nouvelle clé\"],\"hFxdey\":[\"Nouvel objet\"],\"7vhWI8\":[\"Nouveau mot de passe\"],\"BcCzLv\":[\"Nouveau record\"],\"2lmOC5\":[\"Nouveau rôle\"],\"U1DAok\":[\"Nouveau Webhook\"],\"pwenQu\":[\"Pas de compte connecté\"],\"0uWxPM\":[\"Aucun flux de travail n'a encore été exécuté\"],\"AQCvCC\":[\"Pas encore de versions de flux de travail\"],\"4wUkDk\":[\"Non vide\"],\"W0i24j\":[\"Objet\"],\"B3toQF\":[\"Objets\"],\"KNz3EF\":[\"Hors des sentiers battus\"],\"OV5wZZ\":[\"Ouvert\"],\"0zpgxV\":[\"Options\"],\"BzEFor\":[\"ou\"],\"/IX/7x\":[\"Autres\"],\"boJlGf\":[\"Page non trouvée\"],\"8ZsakT\":[\"Mot de passe\"],\"mi6Rel\":[\"Le lien de réinitialisation du mot de passe a été envoyé à l'email\"],\"SrVzRe\":[\"Pourcentage\"],\"yIK1GU\":[\"Pourcentage de vide\"],\"PWLd4c\":[\"Pourcentage non vide\"],\"Bv3y5w\":[\"Détruire définitivement l'enregistrement\"],\"N0+GsR\":[\"Photo\"],\"jEw0Mr\":[\"Veuillez saisir une URL valide\"],\"6nsIo3\":[\"Veuillez taper \\\"\",[\"confirmationValue\"],\"\\\" pour confirmer que vous souhaitez supprimer cette clé API. Sachez que tout script utilisant cette clé cessera de fonctionner.\"],\"mFZTXr\":[\"Veuillez taper \",[\"confirmationText\"],\" pour confirmer que vous souhaitez supprimer ce webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Portugais - Brésil\"],\"xtXHeo\":[\"Portugais - Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Avant-première\"],\"vERlcd\":[\"Profil\"],\"YJgRqq\":[\"Pseudo-anglais\"],\"ibPuCP\":[\"Lire la documentation\"],\"v3xM25\":[\"Recevoir un courriel contenant un lien de mise à jour du mot de passe\"],\"dSCufP\":[\"Sélection des enregistrements\"],\"vpZcGd\":[\"Régénérer une clé API\"],\"Mwqo5m\":[\"Régénérer la clé\"],\"D+Mv78\":[\"Régénérer la clé\"],\"5icoS1\":[\"Communiqués\"],\"t/YqKh\":[\"Retirer\"],\"T/pF0Z\":[\"Supprimer des favoris\"],\"KbS2K9\":[\"Réinitialiser le mot de passe\"],\"1IWc1n\":[\"Remettre à zéro\"],\"kx0s+n\":[\"Résultats\"],\"5dJK4M\":[\"Rôles\"],\"UX0N2y\":[\"Exécutez un flux de travail et revenez ici pour voir ses exécutions\"],\"A1taO8\":[\"Recherche\"],\"l1/uy2\":[\"Rechercher un champ...\"],\"k7kp5/\":[\"Rechercher un index...\"],\"7taA9j\":[\"Champs de recherche\"],\"ofuw3g\":[\"Recherche d'un objet...\"],\"IMeaSJ\":[\"Recherche de documents\"],\"a3LDKx\":[\"Sécurité\"],\"QREcJS\":[\"Voir la version active\"],\"OpPn5Z\":[\"Voir les pistes\"],\"EtyY4+\":[\"Voir les versions\"],\"lYhPN0\":[\"Voir l'historique des versions\"],\"xraglu\":[\"Sélectionnez les événements que vous souhaitez envoyer à ce point de contact\"],\"AXTJAW\":[\"Sélectionnez votre langue préférée\"],\"mjK8F3\":[\"Envoyez un courriel d'invitation à votre équipe\"],\"yy5k7a\":[\"Panneau d'administration du serveur\"],\"V7fgiB\":[\"Définissez la visibilité des e-mails, gérez votre liste de blocage et bien plus encore.\"],\"cx14rp\":[\"Définissez le nom de votre domaine\"],\"tn41zE\":[\"Définissez le nom de votre sous-domaine\"],\"Tz0i8g\":[\"Paramètres\"],\"Vy9kmk\":[\"Partagez ce lien pour inviter les utilisateurs à rejoindre votre espace de travail\"],\"gWk8gY\":[\"La modification de l'intitulé d'un champ doit-elle également entraîner la modification du nom de l'API ?\"],\"6Uau97\":[\"Sauter\"],\"f6Hub0\":[\"Trier\"],\"65A04M\":[\"Espagnol\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Sous-domaine\"],\"omhc+7\":[\"Sous-domaine déjà pris\"],\"OlC/tU\":[\"Le sous-domaine ne doit pas comporter plus de 30 caractères\"],\"ZETwlU\":[\"Le sous-domaine ne peut être inférieur à 3 caractères\"],\"B5jRKH\":[\"L'abonnement a été modifié \",[\"to\"]],\"AxQiPW\":[\"Somme\"],\"XYLcNv\":[\"Soutien\"],\"9yk9d1\":[\"Changer en \",[\"from\"]],\"qi74XZ\":[\"Changer en \",[\"to\"]],\"L6Fg36\":[\"Changer la facturation en \",[\"to\"]],\"AtzMpB\":[\"Synchroniser l'étiquette du champ et le nom de l'API\"],\"E3AMmw\":[\"Paramètres du système - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Paramètres du système - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Test\"],\"bU9B27\":[\"Processus de test\"],\"2OUtmv\":[\"La description de ce champ\"],\"VGZYbZ\":[\"L'email associé à votre compte\"],\"h8mvCd\":[\"Le nom et l'icône de ce champ\"],\"L97sPr\":[\"La page que vous recherchez a disparu ou n'a jamais existé. Remettons les choses en ordre\"],\"uWikAA\":[\"Les valeurs de ce champ\"],\"+69KDk\":[\"Les valeurs de ce champ doivent être uniques\"],\"PmtLRf\":[\"Il y a eu un problème\"],\"hqCwGc\":[\"Cette action ne peut être annulée. Cette action supprimera définitivement l'utilisateur et l'exclura de toutes ses affectations.\"],\"gWGuHC\":[\"Cette action ne peut être annulée. Elle supprimera définitivement l'ensemble de votre espace de travail. <0/> Veuillez saisir votre adresse électronique pour confirmer.\"],\"n9nSNJ\":[\"Format de l'heure\"],\"aqMzDX\":[\"au mois\"],\"WXXiXO\":[\"à l'année\"],\"PiUt3N\":[\"Type de déclencheur\"],\"IQ5pAL\":[\"Le type de déclencheur doit être Manuel - lorsqu'aucun enregistrement n'est sélectionné\"],\"+zy2Nq\":[\"Type\"],\"U83IeL\":[\"Type n'importe quoi\"],\"wSXm5S\":[\"Unique\"],\"GQCXQS\":[\"Nombre illimité de contacts\"],\"ONWvwQ\":[\"Télécharger\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Utiliser comme brouillon\"],\"oTTQsc\":[\"Utilisez uniquement des lettres, des chiffres et des tirets. Commencer et terminer par une lettre ou un chiffre\"],\"c6uZUV\":[\"Utilisez notre API ou ajoutez manuellement votre premier \",[\"objectLabel\"]],\"7PzzBU\":[\"Utilisateur\"],\"IjyOjp\":[\"L'utilisateur n'est pas connecté\"],\"fXVIZq\":[\"Valeurs\"],\"KANz0G\":[\"Voir les détails de la facturation\"],\"6n7jtr\":[\"Visualiser\"],\"id6ein\":[\"Nous prenons en charge vos PNG, JPEG et GIF carrés de moins de 10 Mo\"],\"ZS7vYp\":[\"Nous enverrons des requêtes POST à ce point de terminaison pour chaque nouvel événement\"],\"TRDppN\":[\"Crochet Web\"],\"v1kQyJ\":[\"Crochets Web\"],\"C51ilI\":[\"Date d'expiration de la clé API.\"],\"leUubq\":[\"Quand la clé sera désactivée\"],\"wvyffT\":[\"Le flux de travail ne peut pas être testé\"],\"pmUArF\":[\"Espace de travail\"],\"VicISP\":[\"Suppression de l'espace de travail\"],\"Q9pNST\":[\"Rédiger une description\"],\"3d1wCB\":[\"oui\"],\"zSkMV0\":[\"Vous serez immédiatement facturé pour l'année entière.\"],\"XVnj6K\":[\"Votre solde créditeur sera utilisé pour payer les factures mensuelles.\"],\"9ivpwk\":[\"Votre nom tel qu'il sera affiché\"],\"RhNbPE\":[\"Votre espace de travail sera désactivé\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" de \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" Clé API\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 exécutions de nœuds de flux de travail\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configurer le champ\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abandonner\"],\"uyJsf6\":[\"A propos de\"],\"AeXO77\":[\"Compte\"],\"nD0Y+a\":[\"Suppression de compte\"],\"bPwFdf\":[\"Comptes\"],\"FQBaXG\":[\"Activer\"],\"tu8A/k\":[\"Activer le flux de travail\"],\"F6pfE9\":[\"Actif\"],\"Mue4oc\":[\"Clés API actives créées par vous ou votre équipe.\"],\"m16xKo\":[\"Ajouter\"],\"DpV70M\":[\"Ajouter un champ\"],\"dEO3Zx\":[\"Ajouter un objet\"],\"sgXUv+\":[\"Ajouter un fournisseur d'identité SSO\"],\"5+ttxv\":[\"Ajouter à la liste de blocage\"],\"pBsoKL\":[\"Ajouter aux favoris\"],\"m2qDV8\":[\"Ajoutez votre premier \",[\"objectLabel\"]],\"vLO+NG\":[\"Ajouté \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Tous\"],\"3saA7W\":[\"Tous (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Tous les rôles\"],\"GMx1K0\":[\"Autoriser les connexions via la fonctionnalité d'authentification unique de Google.\"],\"dea+zy\":[\"Autoriser les connexions via la fonctionnalité d'authentification unique de Microsoft.\"],\"wMg43c\":[\"Permettre l'invitation de nouveaux utilisateurs en partageant un lien d'invitation.\"],\"vHeVg5\":[\"Permettre aux utilisateurs de se connecter à l'aide d'un courriel et d'un mot de passe.\"],\"mJ6m4C\":[\"Une description facultative\"],\"0RqpZr\":[\"API & Webhooks\"],\"yRnk5W\":[\"Clé API\"],\"5h8ooz\":[\"Clés API\"],\"kAtj+q\":[\"Nom de l'API\"],\"aAIQg2\":[\"Apparence\"],\"3iX0kh\":[\"Êtes-vous sûr de vouloir modifier votre intervalle de facturation ?\"],\"nYD/Cq\":[\"Ascendante\"],\"rfYmIr\":[\"Attribuer des rôles pour spécifier les autorisations d'accès de chaque membre\"],\"lxQ+5m\":[\"Affecté à\"],\"Y7Dx6e\":[\"Au moins une méthode d'authentification doit être activée\"],\"P8fBlG\":[\"Authentification\"],\"yIVrHZ\":[\"Autoriser\"],\"3uQmjD\":[\"Moyenne\"],\"Dht9W3\":[\"Retour au contenu\"],\"R+w/Va\":[\"Facturation\"],\"K1172m\":[\"Liste de blocage\"],\"2yl5lQ\":[\"Réserver un appel\"],\"PmmvzS\":[\"Calculer\"],\"AjVXBS\":[\"Calendrier\"],\"EUpfsd\":[\"Calendriers\"],\"dEgA5A\":[\"Annuler\"],\"0TllC8\":[\"Annuler à tout moment\"],\"rRK/Lf\":[\"Annuler le plan\"],\"N6gPiD\":[\"Annuler votre abonnement\"],\"OfzMnb\":[\"Modifier \",[\"to\"]],\"VhMDMg\":[\"Modifier le mot de passe\"],\"SviKkE\":[\"Chinois - simplifié\"],\"dzb4Ep\":[\"Chinois - Traditionnel\"],\"JEFFOR\":[\"Choisir un objet\"],\"KT6rEB\":[\"Choisissez votre fournisseur\"],\"9qP96p\":[\"Choisissez votre essai\"],\"yz7wBu\":[\"Fermer\"],\"+zUMwJ\":[\"Configurer une connexion SSO\"],\"QTNsSm\":[\"Configurez et personnalisez vos préférences en matière de calendrier.\"],\"aGwm+D\":[\"Configurer l'affichage des dates dans l'application\"],\"Bh4GBD\":[\"Configurez vos courriels et votre calendrier.\"],\"D8ATlr\":[\"Connecter un nouveau compte à votre espace de travail\"],\"Zgi9Fd\":[\"Se connecter à Google\"],\"IOfqM8\":[\"Se connecter avec Microsoft\"],\"9TzudL\":[\"Comptes connectés\"],\"M73whl\":[\"Contexte\"],\"xGVfLh\":[\"Continuer\"],\"CcGOj+\":[\"Copilote\"],\"7eVkEH\":[\"Copier le lien de l'invitation\"],\"Ej5euX\":[\"Copiez cette clé car elle ne sera pas visible à nouveau\"],\"wBMjJ2\":[\"Compter\"],\"EkZfen\":[\"Comptez tout\"],\"vQJINq\":[\"Compter les vides\"],\"DzRsDJ\":[\"Le compte n'est pas vide\"],\"9FZBbf\":[\"Compter les valeurs uniques\"],\"zNoOC2\":[\"Créez un flux de travail et revenez ici pour voir ses versions\"],\"uXGLuq\":[\"Créer une clé API\"],\"d0DCww\":[\"Créer un nouvel enregistrement\"],\"dkAPxi\":[\"Créer un Webhook\"],\"8skTDV\":[\"Objets personnalisés\"],\"qt+EaC\":[\"Personnaliser les champs disponibles dans les vues \",[\"objectLabelSingular\"],\".\"],\"CMhr4u\":[\"Personnaliser le domaine\"],\"bCJa9l\":[\"Personnalisez la sécurité de votre espace de travail\"],\"Zz6Cxn\":[\"Zone de danger\"],\"5cNMFz\":[\"Modèle de données\"],\"r+cVRP\":[\"Type de données\"],\"mYGY3B\":[\"Date\"],\"Ud9zHv\":[\"Date et heure\"],\"5y3O+A\":[\"Désactiver\"],\"qk4i22\":[\"Désactiver la fonction \\\"Synchroniser les étiquettes des objets et les noms des API\\\" pour définir un nom d'API personnalisé\"],\"gexAq8\":[\"Désactiver ce champ\"],\"4tpC8V\":[\"Désactiver le flux de travail\"],\"Y2ImVJ\":[\"Définir le nom et la description de votre objet\"],\"cnGeoo\":[\"Supprimer\"],\"ZDGm40\":[\"Supprimer le compte\"],\"gAz0S5\":[\"Supprimer le compte et toutes les données associées\"],\"hGfWDm\":[\"Supprimer la clé API\"],\"4dpwsE\":[\"Supprimer l'enregistrement\"],\"kf0A63\":[\"Supprimer des enregistrements\"],\"T6S2Ns\":[\"Supprimer cette intégration\"],\"snMaH4\":[\"Supprimer le webhook\"],\"kYu0eF\":[\"Supprimer l'espace de travail\"],\"mk2Ygs\":[\"Supprimer l'ensemble de l'espace de travail\"],\"Cko536\":[\"Descente\"],\"Nu4oKW\":[\"Description\"],\"2xxBws\":[\"Détruire\"],\"n+SX4g\":[\"Développeurs\"],\"zAg2B9\":[\"Rejeter le projet\"],\"i66xz9\":[\"Affichage en tant que date relative\"],\"EoKe5U\":[\"Domaine\"],\"QVVmxi\":[\"Par exemple, l'intégration du backoffice\"],\"tOkc8o\":[\"Le plus tôt\"],\"JTbQuO\":[\"Date la plus ancienne\"],\"v+uKyy\":[\"Modifier l'intervalle de facturation\"],\"h2KoTu\":[\"Modifier le mode de paiement, consulter vos factures et plus encore\"],\"6o1M/Q\":[\"Modifiez le nom de votre sous-domaine ou définissez un domaine personnalisé.\"],\"O3oNi5\":[\"Courriel\"],\"lfQsvW\":[\"Intégration du courrier électronique\"],\"QT/Wo7\":[\"L'email ou le domaine est déjà dans la liste de blocage\"],\"BXEcos\":[\"Emails\"],\"eXoH4Q\":[\"employés\"],\"gqv5ZL\":[\"Salariés\"],\"N2S1rs\":[\"Vide\"],\"T3juzf\":[\"URL du point final\"],\"lYGfRP\":[\"Anglais\"],\"/bfFKe\":[\"Profitez d'un essai gratuit de \",[\"withCreditCardTrialPeriodDuration\"],\"-jours\"],\"GpB8YV\":[\"Entreprise\"],\"c3qGJX\":[\"Erreur lors de la suppression de la clé api : \",[\"err\"]],\"bj7nh3\":[\"Erreur de régénération de la clé api : \",[\"err\"]],\"VSQxWH\":[\"Erreur lors de la commutation de l'abonnement \",[\"to\"],\".\"],\"JLxMta\":[\"Établir des points de terminaison Webhook pour les notifications d'événements asynchrones.\"],\"cIgBjB\":[\"Exclure les personnes et domaines suivants de ma synchronisation d'emails\"],\"fV7V51\":[\"Objets existants\"],\"IZ4o2e\":[\"Quitter les paramètres\"],\"tXGQvS\":[\"Le nœud sélectionné devrait être un nœud d'étape de création.\"],\"bKBhgb\":[\"Expérience\"],\"LxRNPw\":[\"Expiration\"],\"SkXfL0\":[\"Date d'expiration\"],\"i9qiyR\":[\"Expire en\"],\"GS+Mus\":[\"Exportation\"],\"ep2rbf\":[\"Exporter des enregistrements\"],\"q46CjD\":[\"Exporter au format PDF\"],\"DaGxE0\":[\"Vue d'exportation\"],\"X9kySA\":[\"Favoris\"],\"zXgopL\":[\"Type de champ\"],\"vF68cg\":[\"Domaines\"],\"3w/aqw\":[\"Nombre de champs\"],\"o7J4JM\":[\"Filtre\"],\"cSev+j\":[\"Filtres\"],\"nLC6tu\":[\"Français\"],\"aTieE0\":[\"de mensuel à annuel\"],\"K04lE5\":[\"d'annuel à mensuel\"],\"scmRyR\":[\"Accès complet\"],\"xANKBj\":[\"Fonctions\"],\"Weq9zb\":[\"Général\"],\"DDcvSo\":[\"Allemand\"],\"NXEW3h\":[\"Tirez le meilleur parti de votre espace de travail en y invitant votre équipe.\"],\"zSGbaR\":[\"S'abonner\"],\"2GT3Hf\":[\"Mondial\"],\"hWp1MY\":[\"Accordez à Twenty support un accès temporaire à votre espace de travail afin que nous puissions résoudre des problèmes ou récupérer du contenu en votre nom. Vous pouvez révoquer l'accès à tout moment.\"],\"vLyv1R\":[\"Cacher\"],\"XTWO+W\":[\"Icône et nom\"],\"sJGljQ\":[\"Identifiant\"],\"j843N3\":[\"Si vous avez perdu cette clé, vous pouvez la régénérer, mais sachez que tout script utilisant cette clé devra être mis à jour. Veuillez taper \\\"\",[\"confirmationValue\"],\"\\\" pour confirmer.\"],\"NoNwIX\":[\"Inactif\"],\"pZ/USH\":[\"Index\"],\"JE2tjr\":[\"Les données doivent être en majuscules et ne peuvent pas commencer par un chiffre\"],\"AwUsnG\":[\"Instances\"],\"nbfdhU\":[\"Intégrations\"],\"NtFk/Z\":[\"Fournisseur d'authentification invalide\"],\"B2Tpo0\":[\"Courriel non valide\"],\"/m52AE\":[\"Courriel ou domaine invalide\"],\"QdoUFL\":[\"Valeurs de formulaire non valides\"],\"0M8+El\":[\"Inviter par courriel\"],\"PWIq/W\":[\"Inviter par lien\"],\"3athPG\":[\"Inviter par lien\"],\"5IfmKA\":[\"Lien d'invitation envoyé aux adresses électroniques\"],\"d+Y+rP\":[\"Invitez votre équipe\"],\"Lj7sBL\":[\"Italien\"],\"dFtidv\":[\"Japonais\"],\"h6S9Yz\":[\"Coréen\"],\"zrpwCd\":[\"Laboratoire\"],\"vXIe7J\":[\"Langue\"],\"wL3cK8\":[\"Dernières nouvelles\"],\"Kcjbmz\":[\"Dernière date\"],\"pQjjYo\":[\"Lien copié dans le presse-papiers\"],\"FgAxTj\":[\"Déconnexion\"],\"nOhz3x\":[\"Déconnexion\"],\"T6YjCk\":[\"Gérer les membres\"],\"4cjU2u\":[\"Gérez les membres de votre espace ici\"],\"FyFNsd\":[\"Gérer vos comptes internet.\"],\"36kYu0\":[\"Gérer votre abonnement\"],\"3Sdni6\":[\"Marquer comme fait\"],\"CK1KXz\":[\"Max\"],\"wlQNTg\":[\"Les membres\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"Plus d'options\"],\"iSLA/r\":[\"Déplacer vers la gauche\"],\"Ubl2by\":[\"Déplacer à droite\"],\"6YtxFj\":[\"Nom\"],\"z+6jaZ\":[\"Nom de votre clé API\"],\"J7w8lI\":[\"Nom de votre espace de travail\"],\"2T8KCk\":[\"Passer à l'enregistrement suivant\"],\"veSA19\":[\"Naviguer vers la version suivante\"],\"ZTEho+\":[\"Naviguer vers le flux de travail suivant\"],\"2tw9bo\":[\"Naviguer vers l'enregistrement précédent\"],\"I+Pm5V\":[\"Naviguer vers la version précédente\"],\"QVUN3K\":[\"Naviguer vers le flux de travail précédent\"],\"isRobC\":[\"Nouveau\"],\"Kcr9Fr\":[\"Nouveau compte\"],\"o8MyXb\":[\"Nouvelle clé\"],\"j313SZ\":[\"Nouvelle clé\"],\"hFxdey\":[\"Nouvel objet\"],\"7vhWI8\":[\"Nouveau mot de passe\"],\"BcCzLv\":[\"Nouveau record\"],\"2lmOC5\":[\"Nouveau rôle\"],\"U1DAok\":[\"Nouveau Webhook\"],\"pwenQu\":[\"Pas de compte connecté\"],\"0uWxPM\":[\"Aucun flux de travail n'a encore été exécuté\"],\"AQCvCC\":[\"Pas encore de versions de flux de travail\"],\"4wUkDk\":[\"Non vide\"],\"W0i24j\":[\"Objet\"],\"B3toQF\":[\"Objets\"],\"KNz3EF\":[\"Hors des sentiers battus\"],\"OV5wZZ\":[\"Ouvert\"],\"0zpgxV\":[\"Options\"],\"BzEFor\":[\"ou\"],\"/IX/7x\":[\"Autres\"],\"boJlGf\":[\"Page non trouvée\"],\"8ZsakT\":[\"Mot de passe\"],\"mi6Rel\":[\"Le lien de réinitialisation du mot de passe a été envoyé à l'email\"],\"SrVzRe\":[\"Pourcentage\"],\"yIK1GU\":[\"Pourcentage de vide\"],\"PWLd4c\":[\"Pourcentage non vide\"],\"Bv3y5w\":[\"Détruire définitivement l'enregistrement\"],\"N0+GsR\":[\"Photo\"],\"jEw0Mr\":[\"Veuillez saisir une URL valide\"],\"6nsIo3\":[\"Veuillez taper \\\"\",[\"confirmationValue\"],\"\\\" pour confirmer que vous souhaitez supprimer cette clé API. Sachez que tout script utilisant cette clé cessera de fonctionner.\"],\"mFZTXr\":[\"Veuillez taper \",[\"confirmationText\"],\" pour confirmer que vous souhaitez supprimer ce webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Portugais - Brésil\"],\"xtXHeo\":[\"Portugais - Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Avant-première\"],\"vERlcd\":[\"Profil\"],\"YJgRqq\":[\"Pseudo-anglais\"],\"ibPuCP\":[\"Lire la documentation\"],\"v3xM25\":[\"Recevoir un courriel contenant un lien de mise à jour du mot de passe\"],\"dSCufP\":[\"Sélection des enregistrements\"],\"vpZcGd\":[\"Régénérer une clé API\"],\"Mwqo5m\":[\"Régénérer la clé\"],\"D+Mv78\":[\"Régénérer la clé\"],\"5icoS1\":[\"Communiqués\"],\"t/YqKh\":[\"Retirer\"],\"T/pF0Z\":[\"Supprimer des favoris\"],\"KbS2K9\":[\"Réinitialiser le mot de passe\"],\"1IWc1n\":[\"Remettre à zéro\"],\"kx0s+n\":[\"Résultats\"],\"5dJK4M\":[\"Rôles\"],\"UX0N2y\":[\"Exécutez un flux de travail et revenez ici pour voir ses exécutions\"],\"A1taO8\":[\"Recherche\"],\"l1/uy2\":[\"Rechercher un champ...\"],\"k7kp5/\":[\"Rechercher un index...\"],\"7taA9j\":[\"Champs de recherche\"],\"ofuw3g\":[\"Recherche d'un objet...\"],\"IMeaSJ\":[\"Recherche de documents\"],\"a3LDKx\":[\"Sécurité\"],\"QREcJS\":[\"Voir la version active\"],\"OpPn5Z\":[\"Voir les pistes\"],\"EtyY4+\":[\"Voir les versions\"],\"lYhPN0\":[\"Voir l'historique des versions\"],\"xraglu\":[\"Sélectionnez les événements que vous souhaitez envoyer à ce point de contact\"],\"AXTJAW\":[\"Sélectionnez votre langue préférée\"],\"mjK8F3\":[\"Envoyez un courriel d'invitation à votre équipe\"],\"yy5k7a\":[\"Panneau d'administration du serveur\"],\"V7fgiB\":[\"Définissez la visibilité des e-mails, gérez votre liste de blocage et bien plus encore.\"],\"cx14rp\":[\"Définissez le nom de votre domaine\"],\"tn41zE\":[\"Définissez le nom de votre sous-domaine\"],\"Tz0i8g\":[\"Paramètres\"],\"Vy9kmk\":[\"Partagez ce lien pour inviter les utilisateurs à rejoindre votre espace de travail\"],\"gWk8gY\":[\"La modification de l'intitulé d'un champ doit-elle également entraîner la modification du nom de l'API ?\"],\"6Uau97\":[\"Sauter\"],\"f6Hub0\":[\"Trier\"],\"65A04M\":[\"Espagnol\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Sous-domaine\"],\"omhc+7\":[\"Sous-domaine déjà pris\"],\"OlC/tU\":[\"Le sous-domaine ne doit pas comporter plus de 30 caractères\"],\"ZETwlU\":[\"Le sous-domaine ne peut être inférieur à 3 caractères\"],\"B5jRKH\":[\"L'abonnement a été modifié \",[\"to\"]],\"AxQiPW\":[\"Somme\"],\"XYLcNv\":[\"Soutien\"],\"9yk9d1\":[\"Changer en \",[\"from\"]],\"qi74XZ\":[\"Changer en \",[\"to\"]],\"L6Fg36\":[\"Changer la facturation en \",[\"to\"]],\"AtzMpB\":[\"Synchroniser l'étiquette du champ et le nom de l'API\"],\"E3AMmw\":[\"Paramètres du système - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Paramètres du système - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Test\"],\"bU9B27\":[\"Processus de test\"],\"2OUtmv\":[\"La description de ce champ\"],\"VGZYbZ\":[\"L'email associé à votre compte\"],\"h8mvCd\":[\"Le nom et l'icône de ce champ\"],\"L97sPr\":[\"La page que vous recherchez a disparu ou n'a jamais existé. Remettons les choses en ordre\"],\"uWikAA\":[\"Les valeurs de ce champ\"],\"+69KDk\":[\"Les valeurs de ce champ doivent être uniques\"],\"PmtLRf\":[\"Il y a eu un problème\"],\"hqCwGc\":[\"Cette action ne peut être annulée. Cette action supprimera définitivement l'utilisateur et l'exclura de toutes ses affectations.\"],\"gWGuHC\":[\"Cette action ne peut être annulée. Elle supprimera définitivement l'ensemble de votre espace de travail. <0/> Veuillez saisir votre adresse électronique pour confirmer.\"],\"n9nSNJ\":[\"Format de l'heure\"],\"aqMzDX\":[\"au mois\"],\"WXXiXO\":[\"à l'année\"],\"PiUt3N\":[\"Type de déclencheur\"],\"IQ5pAL\":[\"Le type de déclencheur doit être Manuel - lorsqu'aucun enregistrement n'est sélectionné\"],\"+zy2Nq\":[\"Type\"],\"U83IeL\":[\"Type n'importe quoi\"],\"wSXm5S\":[\"Unique\"],\"GQCXQS\":[\"Nombre illimité de contacts\"],\"ONWvwQ\":[\"Télécharger\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Utiliser comme brouillon\"],\"oTTQsc\":[\"Utilisez uniquement des lettres, des chiffres et des tirets. Commencer et terminer par une lettre ou un chiffre\"],\"c6uZUV\":[\"Utilisez notre API ou ajoutez manuellement votre premier \",[\"objectLabel\"]],\"7PzzBU\":[\"Utilisateur\"],\"IjyOjp\":[\"L'utilisateur n'est pas connecté\"],\"fXVIZq\":[\"Valeurs\"],\"KANz0G\":[\"Voir les détails de la facturation\"],\"6n7jtr\":[\"Visualiser\"],\"id6ein\":[\"Nous prenons en charge vos PNG, JPEG et GIF carrés de moins de 10 Mo\"],\"ZS7vYp\":[\"Nous enverrons des requêtes POST à ce point de terminaison pour chaque nouvel événement\"],\"TRDppN\":[\"Crochet Web\"],\"v1kQyJ\":[\"Crochets Web\"],\"C51ilI\":[\"Date d'expiration de la clé API.\"],\"leUubq\":[\"Quand la clé sera désactivée\"],\"wvyffT\":[\"Le flux de travail ne peut pas être testé\"],\"pmUArF\":[\"Espace de travail\"],\"VicISP\":[\"Suppression de l'espace de travail\"],\"Q9pNST\":[\"Rédiger une description\"],\"3d1wCB\":[\"oui\"],\"zSkMV0\":[\"Vous serez immédiatement facturé pour l'année entière.\"],\"XVnj6K\":[\"Votre solde créditeur sera utilisé pour payer les factures mensuelles.\"],\"9ivpwk\":[\"Votre nom tel qu'il sera affiché\"],\"RhNbPE\":[\"Votre espace de travail sera désactivé\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/generated/it.ts b/packages/twenty-front/src/locales/generated/it.ts index b0a355ce2ad1..41dfe14e7061 100644 --- a/packages/twenty-front/src/locales/generated/it.ts +++ b/packages/twenty-front/src/locales/generated/it.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" di \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" Chiave API\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 esecuzioni di nodi del flusso di lavoro\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configurare il campo\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Interruzione\"],\"uyJsf6\":[\"Circa\"],\"AeXO77\":[\"Conto\"],\"nD0Y+a\":[\"Cancellazione del conto\"],\"bPwFdf\":[\"Conti\"],\"FQBaXG\":[\"Attivare\"],\"tu8A/k\":[\"Attivare il flusso di lavoro\"],\"F6pfE9\":[\"Attivo\"],\"Mue4oc\":[\"Chiavi API attive create da voi o dal vostro team.\"],\"m16xKo\":[\"Aggiungi\"],\"DpV70M\":[\"Aggiungi campo\"],\"dEO3Zx\":[\"Aggiungi oggetto\"],\"sgXUv+\":[\"Aggiungere il provider di identità SSO\"],\"5+ttxv\":[\"Aggiungi alla lista di blocco\"],\"pBsoKL\":[\"Aggiungi ai preferiti\"],\"m2qDV8\":[\"Aggiungi il tuo primo \",[\"objectLabel\"]],\"vLO+NG\":[\"Aggiunto \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Tutti\"],\"3saA7W\":[\"Tutti (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Tutti i ruoli\"],\"GMx1K0\":[\"Consentire l'accesso tramite la funzionalità single sign-on di Google.\"],\"dea+zy\":[\"Consentire l'accesso tramite la funzionalità single sign-on di Microsoft.\"],\"wMg43c\":[\"Consentire l'invito di nuovi utenti condividendo un link di invito.\"],\"vHeVg5\":[\"Consentire agli utenti di accedere con un'e-mail e una password.\"],\"mJ6m4C\":[\"Una descrizione opzionale\"],\"0RqpZr\":[\"API e Webhook\"],\"yRnk5W\":[\"Chiave API\"],\"5h8ooz\":[\"Chiavi API\"],\"kAtj+q\":[\"Nome API\"],\"aAIQg2\":[\"Aspetto\"],\"3iX0kh\":[\"Siete sicuri di voler cambiare l'intervallo di fatturazione?\"],\"nYD/Cq\":[\"In salita\"],\"rfYmIr\":[\"Assegnare ruoli per specificare le autorizzazioni di accesso di ogni membro\"],\"lxQ+5m\":[\"Assegnato a\"],\"Y7Dx6e\":[\"Deve essere abilitato almeno un metodo di autenticazione\"],\"P8fBlG\":[\"Autenticazione\"],\"yIVrHZ\":[\"Autorizzare\"],\"3uQmjD\":[\"Media\"],\"Dht9W3\":[\"Torna al contenuto\"],\"R+w/Va\":[\"Fatturazione\"],\"K1172m\":[\"Elenco di blocco\"],\"2yl5lQ\":[\"Prenota una chiamata\"],\"PmmvzS\":[\"Calcolare\"],\"AjVXBS\":[\"Calendario\"],\"EUpfsd\":[\"Calendari\"],\"dEgA5A\":[\"Annullamento\"],\"0TllC8\":[\"Annullamento in qualsiasi momento\"],\"rRK/Lf\":[\"Annullamento del piano\"],\"N6gPiD\":[\"Annullamento dell'abbonamento\"],\"OfzMnb\":[\"Cambiare \",[\"to\"]],\"VhMDMg\":[\"Modifica della password\"],\"SviKkE\":[\"Cinese semplificato\"],\"dzb4Ep\":[\"Cinese tradizionale\"],\"JEFFOR\":[\"Scegliere un oggetto\"],\"KT6rEB\":[\"Scegliete il vostro fornitore\"],\"9qP96p\":[\"Scegliete la vostra prova\"],\"yz7wBu\":[\"Chiudere\"],\"+zUMwJ\":[\"Configurare una connessione SSO\"],\"QTNsSm\":[\"Configurare e personalizzare le preferenze del calendario.\"],\"aGwm+D\":[\"Configurare la visualizzazione delle date nell'app\"],\"Bh4GBD\":[\"Configurare le impostazioni di e-mail e calendario.\"],\"D8ATlr\":[\"Collegare un nuovo account al proprio spazio di lavoro\"],\"Zgi9Fd\":[\"Connettersi con Google\"],\"IOfqM8\":[\"Connettetevi con Microsoft\"],\"9TzudL\":[\"Conti collegati\"],\"M73whl\":[\"Contesto\"],\"xGVfLh\":[\"Continua\"],\"CcGOj+\":[\"Copilota\"],\"7eVkEH\":[\"Copiare il link dell'invito\"],\"Ej5euX\":[\"Copiate questa chiave perché non sarà più visibile\"],\"wBMjJ2\":[\"Conteggio\"],\"EkZfen\":[\"Contate tutti\"],\"vQJINq\":[\"Conteggio vuoto\"],\"DzRsDJ\":[\"Conteggio non vuoto\"],\"9FZBbf\":[\"Conteggio dei valori unici\"],\"zNoOC2\":[\"Creare un flusso di lavoro e tornare qui per visualizzarne le versioni\"],\"uXGLuq\":[\"Creare la chiave API\"],\"d0DCww\":[\"Creare un nuovo record\"],\"dkAPxi\":[\"Creare un webhook\"],\"8skTDV\":[\"Oggetti personalizzati\"],\"qt+EaC\":[\"Personalizzare i campi disponibili nelle viste \",[\"objectLabelSingular\"],\".\"],\"CMhr4u\":[\"Personalizzare il dominio\"],\"bCJa9l\":[\"Personalizzate la sicurezza del vostro spazio di lavoro\"],\"Zz6Cxn\":[\"Zona di pericolo\"],\"5cNMFz\":[\"Modello di dati\"],\"r+cVRP\":[\"Tipo di dati\"],\"mYGY3B\":[\"Data\"],\"Ud9zHv\":[\"Data e ora\"],\"5y3O+A\":[\"Disattivare\"],\"qk4i22\":[\"Disattivare \\\"Sincronizza etichette degli oggetti e nomi API\\\" per impostare un nome API personalizzato\"],\"gexAq8\":[\"Disattivare questo campo\"],\"4tpC8V\":[\"Disattivare il flusso di lavoro\"],\"Y2ImVJ\":[\"Definire il nome e la descrizione dell'oggetto\"],\"cnGeoo\":[\"Cancellare\"],\"ZDGm40\":[\"Cancellare l'account\"],\"gAz0S5\":[\"Eliminare l'account e tutti i dati associati\"],\"hGfWDm\":[\"Cancellare la chiave API\"],\"4dpwsE\":[\"Cancellare il record\"],\"kf0A63\":[\"Cancellare i record\"],\"T6S2Ns\":[\"Eliminare questa integrazione\"],\"snMaH4\":[\"Cancellare il webhook\"],\"kYu0eF\":[\"Cancellare l'area di lavoro\"],\"mk2Ygs\":[\"Cancellare l'intero spazio di lavoro\"],\"Cko536\":[\"In discesa\"],\"Nu4oKW\":[\"Descrizione\"],\"2xxBws\":[\"Distruggere\"],\"n+SX4g\":[\"Sviluppatori\"],\"zAg2B9\":[\"Bozza di scarto\"],\"i66xz9\":[\"Visualizzazione come data relativa\"],\"EoKe5U\":[\"Dominio\"],\"QVVmxi\":[\"Ad esempio, l'integrazione del backoffice\"],\"tOkc8o\":[\"Il più precoce\"],\"JTbQuO\":[\"Data di inizio\"],\"v+uKyy\":[\"Modifica dell'intervallo di fatturazione\"],\"h2KoTu\":[\"Modifica del metodo di pagamento, visualizzazione delle fatture e altro ancora\"],\"6o1M/Q\":[\"Modificare il nome del sottodominio o impostare un dominio personalizzato.\"],\"O3oNi5\":[\"Email\"],\"lfQsvW\":[\"Integrazione delle e-mail\"],\"QT/Wo7\":[\"L'e-mail o il dominio è già presente nella blocklist\"],\"BXEcos\":[\"Email\"],\"eXoH4Q\":[\"dipendenti\"],\"gqv5ZL\":[\"I dipendenti\"],\"N2S1rs\":[\"Vuoto\"],\"T3juzf\":[\"URL del punto finale\"],\"lYGfRP\":[\"Inglese\"],\"/bfFKe\":[\"Approfittate di un \",[\"withCreditCardTrialPeriodDuration\"],\"-giorni di prova gratuita\"],\"GpB8YV\":[\"Impresa\"],\"c3qGJX\":[\"Errore nell'eliminazione della chiave api: \",[\"err\"]],\"bj7nh3\":[\"Errore nella rigenerazione della chiave api: \",[\"err\"]],\"VSQxWH\":[\"Errore durante la commutazione dell'abbonamento \",[\"to\"],\".\"],\"JLxMta\":[\"Stabilire endpoint Webhook per le notifiche di eventi asincroni.\"],\"cIgBjB\":[\"Escludere le seguenti persone e domini dalla mia sincronizzazione e-mail\"],\"fV7V51\":[\"Oggetti esistenti\"],\"IZ4o2e\":[\"Impostazioni di uscita\"],\"tXGQvS\":[\"Si prevede che il nodo selezionato sia un nodo di creazione di passi.\"],\"bKBhgb\":[\"Esperienza\"],\"LxRNPw\":[\"Scadenza\"],\"SkXfL0\":[\"Data di scadenza\"],\"i9qiyR\":[\"Scade in\"],\"GS+Mus\":[\"Esportazione\"],\"ep2rbf\":[\"Esportazione di record\"],\"q46CjD\":[\"Esportazione in PDF\"],\"DaGxE0\":[\"Vista di esportazione\"],\"X9kySA\":[\"Preferiti\"],\"zXgopL\":[\"Tipo di campo\"],\"vF68cg\":[\"Campi\"],\"3w/aqw\":[\"Conteggio dei campi\"],\"o7J4JM\":[\"Filtro\"],\"cSev+j\":[\"Filtri\"],\"nLC6tu\":[\"Francese\"],\"aTieE0\":[\"da mensile a annuale\"],\"K04lE5\":[\"da annuale a mensile\"],\"scmRyR\":[\"Accesso completo\"],\"xANKBj\":[\"Funzioni\"],\"Weq9zb\":[\"Generale\"],\"DDcvSo\":[\"Tedesco\"],\"NXEW3h\":[\"Sfruttate al massimo il vostro spazio di lavoro invitando il vostro team.\"],\"zSGbaR\":[\"Abbonamento\"],\"2GT3Hf\":[\"Globale\"],\"hWp1MY\":[\"Concedete al supporto Twenty l'accesso temporaneo al vostro spazio di lavoro, in modo che possiamo risolvere i problemi o recuperare i contenuti per vostro conto. È possibile revocare l'accesso in qualsiasi momento.\"],\"vLyv1R\":[\"Nascondere\"],\"XTWO+W\":[\"Icona e nome\"],\"sJGljQ\":[\"Identificatore\"],\"j843N3\":[\"Se avete perso questa chiave, potete rigenerarla, ma sappiate che qualsiasi script che utilizza questa chiave dovrà essere aggiornato. Digitare\\\"\",[\"confirmationValue\"],\"\\\" per confermare.\"],\"NoNwIX\":[\"Inattivo\"],\"pZ/USH\":[\"Indici\"],\"JE2tjr\":[\"L'input deve essere in lettere maiuscole e non può iniziare con un numero\"],\"AwUsnG\":[\"Istanze\"],\"nbfdhU\":[\"Integrazioni\"],\"NtFk/Z\":[\"Provider di autenticazione non valido\"],\"B2Tpo0\":[\"Email non valida\"],\"/m52AE\":[\"Email o dominio non validi\"],\"QdoUFL\":[\"Valori del modulo non validi\"],\"0M8+El\":[\"Invito via e-mail\"],\"PWIq/W\":[\"Invito tramite link\"],\"3athPG\":[\"Invito tramite link\"],\"5IfmKA\":[\"Link di invito inviato agli indirizzi e-mail\"],\"d+Y+rP\":[\"Invita il tuo team\"],\"Lj7sBL\":[\"Italiano\"],\"h6S9Yz\":[\"Coreano\"],\"zrpwCd\":[\"Laboratorio\"],\"vXIe7J\":[\"Lingua\"],\"wL3cK8\":[\"Ultime novità\"],\"Kcjbmz\":[\"Ultima data\"],\"pQjjYo\":[\"Link copiato negli appunti\"],\"FgAxTj\":[\"Disconnettersi\"],\"nOhz3x\":[\"Disconnessione\"],\"T6YjCk\":[\"Gestione dei membri\"],\"4cjU2u\":[\"Gestite qui i membri del vostro spazio\"],\"FyFNsd\":[\"Gestire gli account Internet.\"],\"36kYu0\":[\"Gestire l'abbonamento\"],\"3Sdni6\":[\"Contrassegnare come fatto\"],\"CK1KXz\":[\"Massimo\"],\"wlQNTg\":[\"Membri\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"Altre opzioni\"],\"iSLA/r\":[\"Spostarsi a sinistra\"],\"Ubl2by\":[\"Muoversi a destra\"],\"6YtxFj\":[\"Nome\"],\"z+6jaZ\":[\"Nome della chiave API\"],\"J7w8lI\":[\"Nome dell'area di lavoro\"],\"2T8KCk\":[\"Passare al record successivo\"],\"veSA19\":[\"Passare alla versione successiva\"],\"ZTEho+\":[\"Passare al flusso di lavoro successivo\"],\"2tw9bo\":[\"Passare al record precedente\"],\"I+Pm5V\":[\"Passare alla versione precedente\"],\"QVUN3K\":[\"Passare al flusso di lavoro precedente\"],\"isRobC\":[\"Nuovo\"],\"Kcr9Fr\":[\"Nuovo account\"],\"o8MyXb\":[\"Nuova chiave\"],\"j313SZ\":[\"Nuova chiave\"],\"hFxdey\":[\"Nuovo oggetto\"],\"7vhWI8\":[\"Nuova password\"],\"BcCzLv\":[\"Nuovo record\"],\"2lmOC5\":[\"Nuovo ruolo\"],\"U1DAok\":[\"Nuovo webhook\"],\"pwenQu\":[\"Nessun account collegato\"],\"0uWxPM\":[\"Non è ancora stato eseguito alcun flusso di lavoro\"],\"AQCvCC\":[\"Non ci sono ancora versioni del flusso di lavoro\"],\"4wUkDk\":[\"Non vuoto\"],\"W0i24j\":[\"Oggetto\"],\"B3toQF\":[\"Oggetti\"],\"KNz3EF\":[\"Fuori dai sentieri battuti\"],\"OV5wZZ\":[\"Aperto\"],\"0zpgxV\":[\"Opzioni\"],\"BzEFor\":[\"o\"],\"/IX/7x\":[\"Altro\"],\"boJlGf\":[\"Pagina non trovata\"],\"8ZsakT\":[\"Password\"],\"mi6Rel\":[\"Il link per la reimpostazione della password è stato inviato all'e-mail\"],\"SrVzRe\":[\"Percentuale\"],\"yIK1GU\":[\"Percentuale di vuoto\"],\"PWLd4c\":[\"Percentuale non vuota\"],\"Bv3y5w\":[\"Distruggere definitivamente il record\"],\"N0+GsR\":[\"Immagine\"],\"jEw0Mr\":[\"Inserire un URL valido\"],\"6nsIo3\":[\"Digitare \\\"\",[\"confirmationValue\"],\"\\\" per confermare che si desidera eliminare questa chiave API. Si noti che qualsiasi script che utilizza questa chiave smetterà di funzionare.\"],\"mFZTXr\":[\"Digitare \",[\"confirmationText\"],\" per confermare l'eliminazione di questo webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Portoghese - Brasile\"],\"xtXHeo\":[\"Portoghese - Portogallo\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Anteprima\"],\"vERlcd\":[\"Profilo\"],\"YJgRqq\":[\"Pseudoinglese\"],\"ibPuCP\":[\"Leggi la documentazione\"],\"v3xM25\":[\"Ricevere un'e-mail contenente il link per l'aggiornamento della password\"],\"dSCufP\":[\"Selezione dei record\"],\"vpZcGd\":[\"Rigenerare una chiave API\"],\"Mwqo5m\":[\"Rigenerazione della chiave\"],\"D+Mv78\":[\"Chiave di rigenerazione\"],\"5icoS1\":[\"Comunicati\"],\"t/YqKh\":[\"Rimuovere\"],\"T/pF0Z\":[\"Rimuovi dai preferiti\"],\"KbS2K9\":[\"Reimpostare la password\"],\"1IWc1n\":[\"Azzeramento a\"],\"kx0s+n\":[\"Risultati\"],\"5dJK4M\":[\"Ruoli\"],\"UX0N2y\":[\"Eseguite un flusso di lavoro e tornate qui per visualizzare le esecuzioni\"],\"A1taO8\":[\"Ricerca\"],\"l1/uy2\":[\"Ricerca in un campo...\"],\"k7kp5/\":[\"Ricerca in un indice...\"],\"7taA9j\":[\"Campi di ricerca\"],\"ofuw3g\":[\"Ricerca di un oggetto...\"],\"IMeaSJ\":[\"Ricerca di record\"],\"a3LDKx\":[\"Sicurezza\"],\"QREcJS\":[\"Vedere la versione attiva\"],\"OpPn5Z\":[\"Vedere le corse\"],\"EtyY4+\":[\"Vedi versioni\"],\"lYhPN0\":[\"Vedi la cronologia delle versioni\"],\"xraglu\":[\"Selezionare gli eventi che si desidera inviare a questo endpoint\"],\"AXTJAW\":[\"Selezionare la lingua preferita\"],\"mjK8F3\":[\"Inviate un'e-mail di invito al vostro team\"],\"yy5k7a\":[\"Pannello di amministrazione del server\"],\"V7fgiB\":[\"Impostate la visibilità delle e-mail, gestite la vostra blocklist e altro ancora.\"],\"cx14rp\":[\"Impostare il nome del dominio\"],\"tn41zE\":[\"Impostare il nome del sottodominio\"],\"Tz0i8g\":[\"Impostazioni\"],\"Vy9kmk\":[\"Condividete questo link per invitare gli utenti a unirsi al vostro spazio di lavoro\"],\"gWk8gY\":[\"La modifica dell'etichetta di un campo deve cambiare anche il nome dell'API?\"],\"6Uau97\":[\"Salto\"],\"f6Hub0\":[\"Ordinamento\"],\"65A04M\":[\"Spagnolo\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Sottodominio\"],\"omhc+7\":[\"Sottodominio già occupato\"],\"OlC/tU\":[\"Il sottodominio non può essere più lungo di 30 caratteri\"],\"ZETwlU\":[\"Il sottodominio non può essere più breve di 3 caratteri\"],\"B5jRKH\":[\"L'abbonamento è stato commutato \",[\"to\"]],\"AxQiPW\":[\"Somma\"],\"XYLcNv\":[\"Supporto\"],\"9yk9d1\":[\"Interruttore \",[\"from\"]],\"qi74XZ\":[\"Interruttore \",[\"to\"]],\"L6Fg36\":[\"Fatturazione interruttore \",[\"to\"]],\"AtzMpB\":[\"Sincronizzare l'etichetta del campo e il nome dell'API\"],\"E3AMmw\":[\"Impostazioni di sistema - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Impostazioni di sistema - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Test\"],\"bU9B27\":[\"Flusso di lavoro del test\"],\"2OUtmv\":[\"La descrizione di questo campo\"],\"VGZYbZ\":[\"L'e-mail associata al vostro account\"],\"h8mvCd\":[\"Il nome e l'icona di questo campo\"],\"L97sPr\":[\"La pagina che state cercando è sparita o non è mai esistita. Riportiamo la pagina in carreggiata\"],\"uWikAA\":[\"I valori di questo campo\"],\"+69KDk\":[\"I valori di questo campo devono essere unici\"],\"PmtLRf\":[\"C'è stato un problema\"],\"hqCwGc\":[\"Questa azione non può essere annullata. L'utente verrà eliminato definitivamente e rimosso da tutti i suoi incarichi.\"],\"gWGuHC\":[\"Questa azione non può essere annullata. L'intera area di lavoro verrà eliminata in modo permanente. <0/> Digitare il proprio indirizzo e-mail per confermare.\"],\"n9nSNJ\":[\"Formato dell'ora\"],\"aqMzDX\":[\"al mese\"],\"WXXiXO\":[\"all'anno\"],\"PiUt3N\":[\"Tipo di innesco\"],\"IQ5pAL\":[\"Il tipo di attivazione deve essere Manuale, quando non sono selezionati record\"],\"+zy2Nq\":[\"Tipo\"],\"U83IeL\":[\"Tipo qualsiasi cosa\"],\"wSXm5S\":[\"Unico\"],\"GQCXQS\":[\"Contatti illimitati\"],\"ONWvwQ\":[\"Caricare\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Utilizzare come bozza\"],\"oTTQsc\":[\"Utilizzare solo lettere, numeri e trattini. Iniziare e terminare con una lettera o un numero\"],\"c6uZUV\":[\"Utilizzate la nostra API o aggiungete il vostro primo \",[\"objectLabel\"],\" manualmente\"],\"7PzzBU\":[\"Utente\"],\"IjyOjp\":[\"L'utente non è connesso\"],\"fXVIZq\":[\"Valori\"],\"KANz0G\":[\"Visualizza i dettagli della fatturazione\"],\"6n7jtr\":[\"Visualizzare\"],\"id6ein\":[\"Supportiamo PNG, JPEG e GIF quadrati di dimensioni inferiori a 10 MB\"],\"ZS7vYp\":[\"Verranno inviate richieste POST a questo endpoint per ogni nuovo evento\"],\"TRDppN\":[\"Webhook\"],\"v1kQyJ\":[\"Ganci web\"],\"C51ilI\":[\"Quando scadrà la chiave API.\"],\"leUubq\":[\"Quando il tasto sarà disabilitato\"],\"wvyffT\":[\"Il flusso di lavoro non può essere testato\"],\"pmUArF\":[\"Spazio di lavoro\"],\"VicISP\":[\"Eliminazione dello spazio di lavoro\"],\"Q9pNST\":[\"Scrivere una descrizione\"],\"3d1wCB\":[\"sì\"],\"zSkMV0\":[\"L'addebito sarà immediato per l'intero anno.\"],\"XVnj6K\":[\"Il saldo del credito verrà utilizzato per pagare le fatture mensili.\"],\"9ivpwk\":[\"Il vostro nome come verrà visualizzato\"],\"RhNbPE\":[\"L'area di lavoro verrà disabilitata\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" di \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" Chiave API\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 esecuzioni di nodi del flusso di lavoro\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configurare il campo\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Interruzione\"],\"uyJsf6\":[\"Circa\"],\"AeXO77\":[\"Conto\"],\"nD0Y+a\":[\"Cancellazione del conto\"],\"bPwFdf\":[\"Conti\"],\"FQBaXG\":[\"Attivare\"],\"tu8A/k\":[\"Attivare il flusso di lavoro\"],\"F6pfE9\":[\"Attivo\"],\"Mue4oc\":[\"Chiavi API attive create da voi o dal vostro team.\"],\"m16xKo\":[\"Aggiungi\"],\"DpV70M\":[\"Aggiungi campo\"],\"dEO3Zx\":[\"Aggiungi oggetto\"],\"sgXUv+\":[\"Aggiungere il provider di identità SSO\"],\"5+ttxv\":[\"Aggiungi alla lista di blocco\"],\"pBsoKL\":[\"Aggiungi ai preferiti\"],\"m2qDV8\":[\"Aggiungi il tuo primo \",[\"objectLabel\"]],\"vLO+NG\":[\"Aggiunto \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Tutti\"],\"3saA7W\":[\"Tutti (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Tutti i ruoli\"],\"GMx1K0\":[\"Consentire l'accesso tramite la funzionalità single sign-on di Google.\"],\"dea+zy\":[\"Consentire l'accesso tramite la funzionalità single sign-on di Microsoft.\"],\"wMg43c\":[\"Consentire l'invito di nuovi utenti condividendo un link di invito.\"],\"vHeVg5\":[\"Consentire agli utenti di accedere con un'e-mail e una password.\"],\"mJ6m4C\":[\"Una descrizione opzionale\"],\"0RqpZr\":[\"API e Webhook\"],\"yRnk5W\":[\"Chiave API\"],\"5h8ooz\":[\"Chiavi API\"],\"kAtj+q\":[\"Nome API\"],\"aAIQg2\":[\"Aspetto\"],\"3iX0kh\":[\"Siete sicuri di voler cambiare l'intervallo di fatturazione?\"],\"nYD/Cq\":[\"In salita\"],\"rfYmIr\":[\"Assegnare ruoli per specificare le autorizzazioni di accesso di ogni membro\"],\"lxQ+5m\":[\"Assegnato a\"],\"Y7Dx6e\":[\"Deve essere abilitato almeno un metodo di autenticazione\"],\"P8fBlG\":[\"Autenticazione\"],\"yIVrHZ\":[\"Autorizzare\"],\"3uQmjD\":[\"Media\"],\"Dht9W3\":[\"Torna al contenuto\"],\"R+w/Va\":[\"Fatturazione\"],\"K1172m\":[\"Elenco di blocco\"],\"2yl5lQ\":[\"Prenota una chiamata\"],\"PmmvzS\":[\"Calcolare\"],\"AjVXBS\":[\"Calendario\"],\"EUpfsd\":[\"Calendari\"],\"dEgA5A\":[\"Annullamento\"],\"0TllC8\":[\"Annullamento in qualsiasi momento\"],\"rRK/Lf\":[\"Annullamento del piano\"],\"N6gPiD\":[\"Annullamento dell'abbonamento\"],\"OfzMnb\":[\"Cambiare \",[\"to\"]],\"VhMDMg\":[\"Modifica della password\"],\"SviKkE\":[\"Cinese semplificato\"],\"dzb4Ep\":[\"Cinese tradizionale\"],\"JEFFOR\":[\"Scegliere un oggetto\"],\"KT6rEB\":[\"Scegliete il vostro fornitore\"],\"9qP96p\":[\"Scegliete la vostra prova\"],\"yz7wBu\":[\"Chiudere\"],\"+zUMwJ\":[\"Configurare una connessione SSO\"],\"QTNsSm\":[\"Configurare e personalizzare le preferenze del calendario.\"],\"aGwm+D\":[\"Configurare la visualizzazione delle date nell'app\"],\"Bh4GBD\":[\"Configurare le impostazioni di e-mail e calendario.\"],\"D8ATlr\":[\"Collegare un nuovo account al proprio spazio di lavoro\"],\"Zgi9Fd\":[\"Connettersi con Google\"],\"IOfqM8\":[\"Connettetevi con Microsoft\"],\"9TzudL\":[\"Conti collegati\"],\"M73whl\":[\"Contesto\"],\"xGVfLh\":[\"Continua\"],\"CcGOj+\":[\"Copilota\"],\"7eVkEH\":[\"Copiare il link dell'invito\"],\"Ej5euX\":[\"Copiate questa chiave perché non sarà più visibile\"],\"wBMjJ2\":[\"Conteggio\"],\"EkZfen\":[\"Contate tutti\"],\"vQJINq\":[\"Conteggio vuoto\"],\"DzRsDJ\":[\"Conteggio non vuoto\"],\"9FZBbf\":[\"Conteggio dei valori unici\"],\"zNoOC2\":[\"Creare un flusso di lavoro e tornare qui per visualizzarne le versioni\"],\"uXGLuq\":[\"Creare la chiave API\"],\"d0DCww\":[\"Creare un nuovo record\"],\"dkAPxi\":[\"Creare un webhook\"],\"8skTDV\":[\"Oggetti personalizzati\"],\"qt+EaC\":[\"Personalizzare i campi disponibili nelle viste \",[\"objectLabelSingular\"],\".\"],\"CMhr4u\":[\"Personalizzare il dominio\"],\"bCJa9l\":[\"Personalizzate la sicurezza del vostro spazio di lavoro\"],\"Zz6Cxn\":[\"Zona di pericolo\"],\"5cNMFz\":[\"Modello di dati\"],\"r+cVRP\":[\"Tipo di dati\"],\"mYGY3B\":[\"Data\"],\"Ud9zHv\":[\"Data e ora\"],\"5y3O+A\":[\"Disattivare\"],\"qk4i22\":[\"Disattivare \\\"Sincronizza etichette degli oggetti e nomi API\\\" per impostare un nome API personalizzato\"],\"gexAq8\":[\"Disattivare questo campo\"],\"4tpC8V\":[\"Disattivare il flusso di lavoro\"],\"Y2ImVJ\":[\"Definire il nome e la descrizione dell'oggetto\"],\"cnGeoo\":[\"Cancellare\"],\"ZDGm40\":[\"Cancellare l'account\"],\"gAz0S5\":[\"Eliminare l'account e tutti i dati associati\"],\"hGfWDm\":[\"Cancellare la chiave API\"],\"4dpwsE\":[\"Cancellare il record\"],\"kf0A63\":[\"Cancellare i record\"],\"T6S2Ns\":[\"Eliminare questa integrazione\"],\"snMaH4\":[\"Cancellare il webhook\"],\"kYu0eF\":[\"Cancellare l'area di lavoro\"],\"mk2Ygs\":[\"Cancellare l'intero spazio di lavoro\"],\"Cko536\":[\"In discesa\"],\"Nu4oKW\":[\"Descrizione\"],\"2xxBws\":[\"Distruggere\"],\"n+SX4g\":[\"Sviluppatori\"],\"zAg2B9\":[\"Bozza di scarto\"],\"i66xz9\":[\"Visualizzazione come data relativa\"],\"EoKe5U\":[\"Dominio\"],\"QVVmxi\":[\"Ad esempio, l'integrazione del backoffice\"],\"tOkc8o\":[\"Il più precoce\"],\"JTbQuO\":[\"Data di inizio\"],\"v+uKyy\":[\"Modifica dell'intervallo di fatturazione\"],\"h2KoTu\":[\"Modifica del metodo di pagamento, visualizzazione delle fatture e altro ancora\"],\"6o1M/Q\":[\"Modificare il nome del sottodominio o impostare un dominio personalizzato.\"],\"O3oNi5\":[\"Email\"],\"lfQsvW\":[\"Integrazione delle e-mail\"],\"QT/Wo7\":[\"L'e-mail o il dominio è già presente nella blocklist\"],\"BXEcos\":[\"Email\"],\"eXoH4Q\":[\"dipendenti\"],\"gqv5ZL\":[\"I dipendenti\"],\"N2S1rs\":[\"Vuoto\"],\"T3juzf\":[\"URL del punto finale\"],\"lYGfRP\":[\"Inglese\"],\"/bfFKe\":[\"Approfittate di un \",[\"withCreditCardTrialPeriodDuration\"],\"-giorni di prova gratuita\"],\"GpB8YV\":[\"Impresa\"],\"c3qGJX\":[\"Errore nell'eliminazione della chiave api: \",[\"err\"]],\"bj7nh3\":[\"Errore nella rigenerazione della chiave api: \",[\"err\"]],\"VSQxWH\":[\"Errore durante la commutazione dell'abbonamento \",[\"to\"],\".\"],\"JLxMta\":[\"Stabilire endpoint Webhook per le notifiche di eventi asincroni.\"],\"cIgBjB\":[\"Escludere le seguenti persone e domini dalla mia sincronizzazione e-mail\"],\"fV7V51\":[\"Oggetti esistenti\"],\"IZ4o2e\":[\"Impostazioni di uscita\"],\"tXGQvS\":[\"Si prevede che il nodo selezionato sia un nodo di creazione di passi.\"],\"bKBhgb\":[\"Esperienza\"],\"LxRNPw\":[\"Scadenza\"],\"SkXfL0\":[\"Data di scadenza\"],\"i9qiyR\":[\"Scade in\"],\"GS+Mus\":[\"Esportazione\"],\"ep2rbf\":[\"Esportazione di record\"],\"q46CjD\":[\"Esportazione in PDF\"],\"DaGxE0\":[\"Vista di esportazione\"],\"X9kySA\":[\"Preferiti\"],\"zXgopL\":[\"Tipo di campo\"],\"vF68cg\":[\"Campi\"],\"3w/aqw\":[\"Conteggio dei campi\"],\"o7J4JM\":[\"Filtro\"],\"cSev+j\":[\"Filtri\"],\"nLC6tu\":[\"Francese\"],\"aTieE0\":[\"da mensile a annuale\"],\"K04lE5\":[\"da annuale a mensile\"],\"scmRyR\":[\"Accesso completo\"],\"xANKBj\":[\"Funzioni\"],\"Weq9zb\":[\"Generale\"],\"DDcvSo\":[\"Tedesco\"],\"NXEW3h\":[\"Sfruttate al massimo il vostro spazio di lavoro invitando il vostro team.\"],\"zSGbaR\":[\"Abbonamento\"],\"2GT3Hf\":[\"Globale\"],\"hWp1MY\":[\"Concedete al supporto Twenty l'accesso temporaneo al vostro spazio di lavoro, in modo che possiamo risolvere i problemi o recuperare i contenuti per vostro conto. È possibile revocare l'accesso in qualsiasi momento.\"],\"vLyv1R\":[\"Nascondere\"],\"XTWO+W\":[\"Icona e nome\"],\"sJGljQ\":[\"Identificatore\"],\"j843N3\":[\"Se avete perso questa chiave, potete rigenerarla, ma sappiate che qualsiasi script che utilizza questa chiave dovrà essere aggiornato. Digitare\\\"\",[\"confirmationValue\"],\"\\\" per confermare.\"],\"NoNwIX\":[\"Inattivo\"],\"pZ/USH\":[\"Indici\"],\"JE2tjr\":[\"L'input deve essere in lettere maiuscole e non può iniziare con un numero\"],\"AwUsnG\":[\"Istanze\"],\"nbfdhU\":[\"Integrazioni\"],\"NtFk/Z\":[\"Provider di autenticazione non valido\"],\"B2Tpo0\":[\"Email non valida\"],\"/m52AE\":[\"Email o dominio non validi\"],\"QdoUFL\":[\"Valori del modulo non validi\"],\"0M8+El\":[\"Invito via e-mail\"],\"PWIq/W\":[\"Invito tramite link\"],\"3athPG\":[\"Invito tramite link\"],\"5IfmKA\":[\"Link di invito inviato agli indirizzi e-mail\"],\"d+Y+rP\":[\"Invita il tuo team\"],\"Lj7sBL\":[\"Italiano\"],\"dFtidv\":[\"Giapponese\"],\"h6S9Yz\":[\"Coreano\"],\"zrpwCd\":[\"Laboratorio\"],\"vXIe7J\":[\"Lingua\"],\"wL3cK8\":[\"Ultime novità\"],\"Kcjbmz\":[\"Ultima data\"],\"pQjjYo\":[\"Link copiato negli appunti\"],\"FgAxTj\":[\"Disconnettersi\"],\"nOhz3x\":[\"Disconnessione\"],\"T6YjCk\":[\"Gestione dei membri\"],\"4cjU2u\":[\"Gestite qui i membri del vostro spazio\"],\"FyFNsd\":[\"Gestire gli account Internet.\"],\"36kYu0\":[\"Gestire l'abbonamento\"],\"3Sdni6\":[\"Contrassegnare come fatto\"],\"CK1KXz\":[\"Massimo\"],\"wlQNTg\":[\"Membri\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"Altre opzioni\"],\"iSLA/r\":[\"Spostarsi a sinistra\"],\"Ubl2by\":[\"Muoversi a destra\"],\"6YtxFj\":[\"Nome\"],\"z+6jaZ\":[\"Nome della chiave API\"],\"J7w8lI\":[\"Nome dell'area di lavoro\"],\"2T8KCk\":[\"Passare al record successivo\"],\"veSA19\":[\"Passare alla versione successiva\"],\"ZTEho+\":[\"Passare al flusso di lavoro successivo\"],\"2tw9bo\":[\"Passare al record precedente\"],\"I+Pm5V\":[\"Passare alla versione precedente\"],\"QVUN3K\":[\"Passare al flusso di lavoro precedente\"],\"isRobC\":[\"Nuovo\"],\"Kcr9Fr\":[\"Nuovo account\"],\"o8MyXb\":[\"Nuova chiave\"],\"j313SZ\":[\"Nuova chiave\"],\"hFxdey\":[\"Nuovo oggetto\"],\"7vhWI8\":[\"Nuova password\"],\"BcCzLv\":[\"Nuovo record\"],\"2lmOC5\":[\"Nuovo ruolo\"],\"U1DAok\":[\"Nuovo webhook\"],\"pwenQu\":[\"Nessun account collegato\"],\"0uWxPM\":[\"Non è ancora stato eseguito alcun flusso di lavoro\"],\"AQCvCC\":[\"Non ci sono ancora versioni del flusso di lavoro\"],\"4wUkDk\":[\"Non vuoto\"],\"W0i24j\":[\"Oggetto\"],\"B3toQF\":[\"Oggetti\"],\"KNz3EF\":[\"Fuori dai sentieri battuti\"],\"OV5wZZ\":[\"Aperto\"],\"0zpgxV\":[\"Opzioni\"],\"BzEFor\":[\"o\"],\"/IX/7x\":[\"Altro\"],\"boJlGf\":[\"Pagina non trovata\"],\"8ZsakT\":[\"Password\"],\"mi6Rel\":[\"Il link per la reimpostazione della password è stato inviato all'e-mail\"],\"SrVzRe\":[\"Percentuale\"],\"yIK1GU\":[\"Percentuale di vuoto\"],\"PWLd4c\":[\"Percentuale non vuota\"],\"Bv3y5w\":[\"Distruggere definitivamente il record\"],\"N0+GsR\":[\"Immagine\"],\"jEw0Mr\":[\"Inserire un URL valido\"],\"6nsIo3\":[\"Digitare \\\"\",[\"confirmationValue\"],\"\\\" per confermare che si desidera eliminare questa chiave API. Si noti che qualsiasi script che utilizza questa chiave smetterà di funzionare.\"],\"mFZTXr\":[\"Digitare \",[\"confirmationText\"],\" per confermare l'eliminazione di questo webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Portoghese - Brasile\"],\"xtXHeo\":[\"Portoghese - Portogallo\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Anteprima\"],\"vERlcd\":[\"Profilo\"],\"YJgRqq\":[\"Pseudoinglese\"],\"ibPuCP\":[\"Leggi la documentazione\"],\"v3xM25\":[\"Ricevere un'e-mail contenente il link per l'aggiornamento della password\"],\"dSCufP\":[\"Selezione dei record\"],\"vpZcGd\":[\"Rigenerare una chiave API\"],\"Mwqo5m\":[\"Rigenerazione della chiave\"],\"D+Mv78\":[\"Chiave di rigenerazione\"],\"5icoS1\":[\"Comunicati\"],\"t/YqKh\":[\"Rimuovere\"],\"T/pF0Z\":[\"Rimuovi dai preferiti\"],\"KbS2K9\":[\"Reimpostare la password\"],\"1IWc1n\":[\"Azzeramento a\"],\"kx0s+n\":[\"Risultati\"],\"5dJK4M\":[\"Ruoli\"],\"UX0N2y\":[\"Eseguite un flusso di lavoro e tornate qui per visualizzare le esecuzioni\"],\"A1taO8\":[\"Ricerca\"],\"l1/uy2\":[\"Ricerca in un campo...\"],\"k7kp5/\":[\"Ricerca in un indice...\"],\"7taA9j\":[\"Campi di ricerca\"],\"ofuw3g\":[\"Ricerca di un oggetto...\"],\"IMeaSJ\":[\"Ricerca di record\"],\"a3LDKx\":[\"Sicurezza\"],\"QREcJS\":[\"Vedere la versione attiva\"],\"OpPn5Z\":[\"Vedere le corse\"],\"EtyY4+\":[\"Vedi versioni\"],\"lYhPN0\":[\"Vedi la cronologia delle versioni\"],\"xraglu\":[\"Selezionare gli eventi che si desidera inviare a questo endpoint\"],\"AXTJAW\":[\"Selezionare la lingua preferita\"],\"mjK8F3\":[\"Inviate un'e-mail di invito al vostro team\"],\"yy5k7a\":[\"Pannello di amministrazione del server\"],\"V7fgiB\":[\"Impostate la visibilità delle e-mail, gestite la vostra blocklist e altro ancora.\"],\"cx14rp\":[\"Impostare il nome del dominio\"],\"tn41zE\":[\"Impostare il nome del sottodominio\"],\"Tz0i8g\":[\"Impostazioni\"],\"Vy9kmk\":[\"Condividete questo link per invitare gli utenti a unirsi al vostro spazio di lavoro\"],\"gWk8gY\":[\"La modifica dell'etichetta di un campo deve cambiare anche il nome dell'API?\"],\"6Uau97\":[\"Salto\"],\"f6Hub0\":[\"Ordinamento\"],\"65A04M\":[\"Spagnolo\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Sottodominio\"],\"omhc+7\":[\"Sottodominio già occupato\"],\"OlC/tU\":[\"Il sottodominio non può essere più lungo di 30 caratteri\"],\"ZETwlU\":[\"Il sottodominio non può essere più breve di 3 caratteri\"],\"B5jRKH\":[\"L'abbonamento è stato commutato \",[\"to\"]],\"AxQiPW\":[\"Somma\"],\"XYLcNv\":[\"Supporto\"],\"9yk9d1\":[\"Interruttore \",[\"from\"]],\"qi74XZ\":[\"Interruttore \",[\"to\"]],\"L6Fg36\":[\"Fatturazione interruttore \",[\"to\"]],\"AtzMpB\":[\"Sincronizzare l'etichetta del campo e il nome dell'API\"],\"E3AMmw\":[\"Impostazioni di sistema - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Impostazioni di sistema - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Test\"],\"bU9B27\":[\"Flusso di lavoro del test\"],\"2OUtmv\":[\"La descrizione di questo campo\"],\"VGZYbZ\":[\"L'e-mail associata al vostro account\"],\"h8mvCd\":[\"Il nome e l'icona di questo campo\"],\"L97sPr\":[\"La pagina che state cercando è sparita o non è mai esistita. Riportiamo la pagina in carreggiata\"],\"uWikAA\":[\"I valori di questo campo\"],\"+69KDk\":[\"I valori di questo campo devono essere unici\"],\"PmtLRf\":[\"C'è stato un problema\"],\"hqCwGc\":[\"Questa azione non può essere annullata. L'utente verrà eliminato definitivamente e rimosso da tutti i suoi incarichi.\"],\"gWGuHC\":[\"Questa azione non può essere annullata. L'intera area di lavoro verrà eliminata in modo permanente. <0/> Digitare il proprio indirizzo e-mail per confermare.\"],\"n9nSNJ\":[\"Formato dell'ora\"],\"aqMzDX\":[\"al mese\"],\"WXXiXO\":[\"all'anno\"],\"PiUt3N\":[\"Tipo di innesco\"],\"IQ5pAL\":[\"Il tipo di attivazione deve essere Manuale, quando non sono selezionati record\"],\"+zy2Nq\":[\"Tipo\"],\"U83IeL\":[\"Tipo qualsiasi cosa\"],\"wSXm5S\":[\"Unico\"],\"GQCXQS\":[\"Contatti illimitati\"],\"ONWvwQ\":[\"Caricare\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Utilizzare come bozza\"],\"oTTQsc\":[\"Utilizzare solo lettere, numeri e trattini. Iniziare e terminare con una lettera o un numero\"],\"c6uZUV\":[\"Utilizzate la nostra API o aggiungete il vostro primo \",[\"objectLabel\"],\" manualmente\"],\"7PzzBU\":[\"Utente\"],\"IjyOjp\":[\"L'utente non è connesso\"],\"fXVIZq\":[\"Valori\"],\"KANz0G\":[\"Visualizza i dettagli della fatturazione\"],\"6n7jtr\":[\"Visualizzare\"],\"id6ein\":[\"Supportiamo PNG, JPEG e GIF quadrati di dimensioni inferiori a 10 MB\"],\"ZS7vYp\":[\"Verranno inviate richieste POST a questo endpoint per ogni nuovo evento\"],\"TRDppN\":[\"Webhook\"],\"v1kQyJ\":[\"Ganci web\"],\"C51ilI\":[\"Quando scadrà la chiave API.\"],\"leUubq\":[\"Quando il tasto sarà disabilitato\"],\"wvyffT\":[\"Il flusso di lavoro non può essere testato\"],\"pmUArF\":[\"Spazio di lavoro\"],\"VicISP\":[\"Eliminazione dello spazio di lavoro\"],\"Q9pNST\":[\"Scrivere una descrizione\"],\"3d1wCB\":[\"sì\"],\"zSkMV0\":[\"L'addebito sarà immediato per l'intero anno.\"],\"XVnj6K\":[\"Il saldo del credito verrà utilizzato per pagare le fatture mensili.\"],\"9ivpwk\":[\"Il vostro nome come verrà visualizzato\"],\"RhNbPE\":[\"L'area di lavoro verrà disabilitata\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/generated/ja.ts b/packages/twenty-front/src/locales/generated/ja.ts new file mode 100644 index 000000000000..a78e4837aabd --- /dev/null +++ b/packages/twenty-front/src/locales/generated/ja.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"fieldLabel\"],\"の\",[\"aggregateLabel\"],\"。\"],\"uogEAL\":[[\"apiKeyName\"],\" APIキー\"],\"6j5rE1\":[\"[\",[\"name\"],\"]\"],\"YT0WJ4\":[\"1 000 ワークフローノード実行\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2.フィールドの設定\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"中止\"],\"uyJsf6\":[\"について\"],\"AeXO77\":[\"アカウント\"],\"nD0Y+a\":[\"アカウント削除\"],\"bPwFdf\":[\"アカウント\"],\"FQBaXG\":[\"アクティベート\"],\"tu8A/k\":[\"ワークフローの有効化\"],\"F6pfE9\":[\"アクティブ\"],\"Mue4oc\":[\"あなたまたはあなたのチームによって作成されたアクティブなAPIキー。\"],\"m16xKo\":[\"追加\"],\"DpV70M\":[\"フィールドの追加\"],\"dEO3Zx\":[\"オブジェクトの追加\"],\"sgXUv+\":[\"SSOアイデンティティ・プロバイダーの追加\"],\"5+ttxv\":[\"ブロックリストに追加\"],\"pBsoKL\":[\"お気に入りに追加\"],\"m2qDV8\":[\"最初の\",[\"objectLabel\"],\"を追加\"],\"vLO+NG\":[[\"beautifiedCreatedAt\"],\"】を追加\"],\"N40H+G\":[\"すべて\"],\"3saA7W\":[\"すべて (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"すべての役割\"],\"GMx1K0\":[\"Googleのシングルサインオン機能によるログインを許可する。\"],\"dea+zy\":[\"マイクロソフトのシングルサインオン機能によるログインを許可する。\"],\"wMg43c\":[\"招待リンクを共有することで、新規ユーザーの招待を許可する。\"],\"vHeVg5\":[\"ユーザーが電子メールとパスワードでサインインできるようにする。\"],\"mJ6m4C\":[\"任意の説明\"],\"0RqpZr\":[\"APIとWebhooks\"],\"yRnk5W\":[\"APIキー\"],\"5h8ooz\":[\"APIキー\"],\"kAtj+q\":[\"API名\"],\"aAIQg2\":[\"外観\"],\"3iX0kh\":[\"課金間隔を変更してもよろしいですか?\"],\"nYD/Cq\":[\"上昇\"],\"rfYmIr\":[\"各メンバーのアクセス権限を指定するロールの割り当て\"],\"lxQ+5m\":[\"担当\"],\"Y7Dx6e\":[\"少なくとも1つの認証方法が有効になっていること\"],\"P8fBlG\":[\"認証\"],\"yIVrHZ\":[\"認可する\"],\"3uQmjD\":[\"平均\"],\"Dht9W3\":[\"コンテンツに戻る\"],\"R+w/Va\":[\"請求\"],\"K1172m\":[\"ブロックリスト\"],\"2yl5lQ\":[\"電話予約\"],\"PmmvzS\":[\"計算する\"],\"AjVXBS\":[\"カレンダー\"],\"EUpfsd\":[\"カレンダー\"],\"dEgA5A\":[\"キャンセル\"],\"0TllC8\":[\"いつでもキャンセル\"],\"rRK/Lf\":[\"キャンセルプラン\"],\"N6gPiD\":[\"購読をキャンセルする\"],\"OfzMnb\":[[\"to\"],\"]を変更する\"],\"VhMDMg\":[\"パスワードの変更\"],\"SviKkE\":[\"中国語 - 簡体字\"],\"dzb4Ep\":[\"中国語 - 繁体字\"],\"JEFFOR\":[\"オブジェクトを選択する\"],\"KT6rEB\":[\"プロバイダーの選択\"],\"9qP96p\":[\"トライアルの選択\"],\"yz7wBu\":[\"閉じる\"],\"+zUMwJ\":[\"SSO接続を設定する\"],\"QTNsSm\":[\"カレンダーの設定を行い、カスタマイズします。\"],\"aGwm+D\":[\"アプリ全体の日付の表示方法を設定する\"],\"Bh4GBD\":[\"メールとカレンダーの設定\"],\"D8ATlr\":[\"新しいアカウントをワークスペースに接続する\"],\"Zgi9Fd\":[\"グーグルとつながる\"],\"IOfqM8\":[\"マイクロソフトとつながる\"],\"9TzudL\":[\"接続アカウント\"],\"M73whl\":[\"コンテクスト\"],\"xGVfLh\":[\"続ける\"],\"CcGOj+\":[\"コパイロット\"],\"7eVkEH\":[\"招待状リンクをコピーする\"],\"Ej5euX\":[\"このキーをコピーしてください。\"],\"wBMjJ2\":[\"カウント\"],\"EkZfen\":[\"すべて数える\"],\"vQJINq\":[\"空カウント\"],\"DzRsDJ\":[\"カウントが空ではない\"],\"9FZBbf\":[\"一意な値を数える\"],\"zNoOC2\":[\"ワークフローを作成し、ここに戻ってそのバージョンを表示する\"],\"uXGLuq\":[\"APIキーの作成\"],\"d0DCww\":[\"新しいレコードを作成する\"],\"dkAPxi\":[\"ウェブフックの作成\"],\"8skTDV\":[\"カスタムオブジェクト\"],\"qt+EaC\":[[\"objectLabelSingular\"],\"]ビューで利用可能なフィールドをカスタマイズします。\"],\"CMhr4u\":[\"ドメインのカスタマイズ\"],\"bCJa9l\":[\"ワークスペースのセキュリティをカスタマイズ\"],\"Zz6Cxn\":[\"危険地帯\"],\"5cNMFz\":[\"データモデル\"],\"r+cVRP\":[\"データ型\"],\"mYGY3B\":[\"日付\"],\"Ud9zHv\":[\"日時\"],\"5y3O+A\":[\"非アクティブ化\"],\"qk4i22\":[\"カスタムAPI名を設定するには、「オブジェクト・ラベルとAPI名の同期」を無効にする。\"],\"gexAq8\":[\"このフィールドを無効にする\"],\"4tpC8V\":[\"ワークフローの停止\"],\"Y2ImVJ\":[\"オブジェクトの名前と説明を定義する\"],\"cnGeoo\":[\"削除\"],\"ZDGm40\":[\"アカウント削除\"],\"gAz0S5\":[\"アカウントと関連データをすべて削除する\"],\"hGfWDm\":[\"APIキーの削除\"],\"4dpwsE\":[\"レコードの削除\"],\"kf0A63\":[\"レコードの削除\"],\"T6S2Ns\":[\"この統合を削除する\"],\"snMaH4\":[\"ウェブフックの削除\"],\"kYu0eF\":[\"ワークスペースの削除\"],\"mk2Ygs\":[\"ワークスペース全体を削除する\"],\"Cko536\":[\"下降\"],\"Nu4oKW\":[\"説明\"],\"2xxBws\":[\"破壊する\"],\"n+SX4g\":[\"開発者\"],\"zAg2B9\":[\"ドラフト破棄\"],\"i66xz9\":[\"相対日付で表示\"],\"EoKe5U\":[\"ドメイン\"],\"QVVmxi\":[\"例:バックオフィスとの統合\"],\"tOkc8o\":[\"最初期\"],\"JTbQuO\":[\"最も古い日付\"],\"v+uKyy\":[\"請求間隔の編集\"],\"h2KoTu\":[\"支払い方法の編集、請求書の確認など\"],\"6o1M/Q\":[\"サブドメイン名を編集するか、カスタムドメインを設定します。\"],\"O3oNi5\":[\"電子メール\"],\"lfQsvW\":[\"電子メールの統合\"],\"QT/Wo7\":[\"電子メールまたはドメインがすでにブロックリストに登録されている\"],\"BXEcos\":[\"電子メール\"],\"eXoH4Q\":[\"従業員\"],\"gqv5ZL\":[\"従業員\"],\"N2S1rs\":[\"空\"],\"T3juzf\":[\"エンドポイントURL\"],\"lYGfRP\":[\"英語\"],\"/bfFKe\":[[\"withCreditCardTrialPeriodDuration\"],\"]-日間の無料トライアルをお楽しみください。\"],\"GpB8YV\":[\"エンタープライズ\"],\"c3qGJX\":[\"apiキーの削除エラー:\",[\"err\"],\"。\"],\"bj7nh3\":[\"APIキーの再生成エラー:\",[\"err\"],\"。\"],\"VSQxWH\":[\"サブスクリプション\",[\"to\"],\"の切り替え中にエラーが発生しました。\"],\"JLxMta\":[\"非同期イベントの通知用にWebhookエンドポイントを確立する。\"],\"cIgBjB\":[\"私の電子メール同期から次の人とドメインを除外する\"],\"fV7V51\":[\"既存のオブジェクト\"],\"IZ4o2e\":[\"終了設定\"],\"tXGQvS\":[\"選択されたノードがステップ作成ノードであることを期待。\"],\"bKBhgb\":[\"経験\"],\"LxRNPw\":[\"有効期限\"],\"SkXfL0\":[\"有効期限\"],\"i9qiyR\":[\"期限切れ\"],\"GS+Mus\":[\"輸出\"],\"ep2rbf\":[\"輸出記録\"],\"q46CjD\":[\"PDFへのエクスポート\"],\"DaGxE0\":[\"エクスポートビュー\"],\"X9kySA\":[\"お気に入り\"],\"zXgopL\":[\"フィールドタイプ\"],\"vF68cg\":[\"フィールド\"],\"3w/aqw\":[\"フィールド数\"],\"o7J4JM\":[\"フィルター\"],\"cSev+j\":[\"フィルター\"],\"nLC6tu\":[\"フランス語\"],\"aTieE0\":[\"毎月から毎年へ\"],\"K04lE5\":[\"年から月へ\"],\"scmRyR\":[\"フルアクセス\"],\"xANKBj\":[\"機能\"],\"Weq9zb\":[\"一般\"],\"DDcvSo\":[\"ドイツ語\"],\"NXEW3h\":[\"チームを招待して、ワークスペースを最大限に活用しましょう。\"],\"zSGbaR\":[\"購読を申し込む\"],\"2GT3Hf\":[\"グローバル\"],\"hWp1MY\":[\"お客様のワークスペースへの一時的なアクセスを Twenty サポートに許可することで、お客様に代わって問題のトラブルシューティングやコンテンツの復旧を行うことができます。お客様はいつでもアクセス権を取り消すことができます。\"],\"vLyv1R\":[\"隠す\"],\"XTWO+W\":[\"アイコンと名前\"],\"sJGljQ\":[\"識別子\"],\"j843N3\":[\"このキーを紛失した場合は、再生成することができますが、このキーを使用しているスクリプトは更新する必要がありますのでご注意ください。確認のため、\\\"\",[\"confirmationValue\"],\"\\\"と入力してください。\"],\"NoNwIX\":[\"活動休止中\"],\"pZ/USH\":[\"インデックス\"],\"JE2tjr\":[\"入力はキャメルケースでなければならず、数字で始めることはできない。\"],\"AwUsnG\":[\"インスタンス\"],\"nbfdhU\":[\"統合\"],\"NtFk/Z\":[\"無効な認証プロバイダ\"],\"B2Tpo0\":[\"無効な電子メール\"],\"/m52AE\":[\"無効な電子メールまたはドメイン\"],\"QdoUFL\":[\"無効なフォーム値\"],\"0M8+El\":[\"Eメールで招待する\"],\"PWIq/W\":[\"リンクで招待\"],\"3athPG\":[\"リンクで招待\"],\"5IfmKA\":[\"Eメールアドレスに招待リンクを送信\"],\"d+Y+rP\":[\"チームを招待する\"],\"Lj7sBL\":[\"イタリア語\"],\"dFtidv\":[\"日本語\"],\"h6S9Yz\":[\"韓国語\"],\"zrpwCd\":[\"ラボ\"],\"vXIe7J\":[\"言語\"],\"wL3cK8\":[\"最新\"],\"Kcjbmz\":[\"最新の日付\"],\"pQjjYo\":[\"クリップボードにコピーされたリンク\"],\"FgAxTj\":[\"ログアウト\"],\"nOhz3x\":[\"ログアウト\"],\"T6YjCk\":[\"メンバー管理\"],\"4cjU2u\":[\"あなたのスペースのメンバーを管理する\"],\"FyFNsd\":[\"インターネットアカウントの管理\"],\"36kYu0\":[\"サブスクリプションの管理\"],\"3Sdni6\":[\"完了マークを付ける\"],\"CK1KXz\":[\"マックス\"],\"wlQNTg\":[\"メンバー\"],\"eTUF28\":[\"最小\"],\"3Siwmw\":[\"その他のオプション\"],\"iSLA/r\":[\"左に移動\"],\"Ubl2by\":[\"右に移動\"],\"6YtxFj\":[\"名称\"],\"z+6jaZ\":[\"APIキーの名前\"],\"J7w8lI\":[\"ワークスペース名\"],\"2T8KCk\":[\"次のレコードに移動する\"],\"veSA19\":[\"次のバージョンに移動する\"],\"ZTEho+\":[\"次のワークフローに移動する\"],\"2tw9bo\":[\"前のレコードに移動する\"],\"I+Pm5V\":[\"以前のバージョンに移動する\"],\"QVUN3K\":[\"前のワークフローに移動する\"],\"isRobC\":[\"新しい\"],\"Kcr9Fr\":[\"新規アカウント\"],\"o8MyXb\":[\"新しいキー\"],\"j313SZ\":[\"新しいキー\"],\"hFxdey\":[\"新しいオブジェクト\"],\"7vhWI8\":[\"新しいパスワード\"],\"BcCzLv\":[\"新記録\"],\"2lmOC5\":[\"新しい役割\"],\"U1DAok\":[\"新しいウェブフック\"],\"pwenQu\":[\"接続アカウントなし\"],\"0uWxPM\":[\"ワークフローはまだ実行されていない\"],\"AQCvCC\":[\"ワークフローのバージョンはまだない\"],\"4wUkDk\":[\"空ではない\"],\"W0i24j\":[\"対象\"],\"B3toQF\":[\"対象物\"],\"KNz3EF\":[\"オフ・ザ・ビート・パス\"],\"OV5wZZ\":[\"オープン\"],\"0zpgxV\":[\"オプション\"],\"BzEFor\":[\"または\"],\"/IX/7x\":[\"その他\"],\"boJlGf\":[\"ページが見つかりません\"],\"8ZsakT\":[\"パスワード\"],\"mi6Rel\":[\"パスワードリセットリンクが電子メールに送信されました。\"],\"SrVzRe\":[\"パーセント\"],\"yIK1GU\":[\"空席率\"],\"PWLd4c\":[\"空でない割合\"],\"Bv3y5w\":[\"記録の永久破棄\"],\"N0+GsR\":[\"写真\"],\"jEw0Mr\":[\"有効なURLを入力してください\"],\"6nsIo3\":[[\"confirmationValue\"],\"]」と入力して、このAPIキーを削除することを確認してください。このキーを使用しているスクリプトは動作しなくなりますのでご注意ください。\"],\"mFZTXr\":[[\"confirmationText\"],\"]と入力して、このウェブフックを削除することを確認してください。\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"ポルトガル語 - ブラジル\"],\"xtXHeo\":[\"ポルトガル語 - ポルトガル\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"プレビュー\"],\"vERlcd\":[\"プロフィール\"],\"YJgRqq\":[\"擬似英語\"],\"ibPuCP\":[\"ドキュメントを読む\"],\"v3xM25\":[\"パスワード更新リンクを含むメールを受け取る\"],\"dSCufP\":[\"レコード選択\"],\"vpZcGd\":[\"APIキーを再生成する\"],\"Mwqo5m\":[\"再生キー\"],\"D+Mv78\":[\"再生キー\"],\"5icoS1\":[\"リリース\"],\"t/YqKh\":[\"削除\"],\"T/pF0Z\":[\"お気に入りから削除\"],\"KbS2K9\":[\"パスワードのリセット\"],\"1IWc1n\":[\"にリセットする。\"],\"kx0s+n\":[\"結果\"],\"5dJK4M\":[\"役割\"],\"UX0N2y\":[\"ワークフローを実行し、その実行内容を見るためにここに戻る\"],\"A1taO8\":[\"検索\"],\"l1/uy2\":[\"フィールドを検索...\"],\"k7kp5/\":[\"インデックスを検索...\"],\"7taA9j\":[\"検索フィールド\"],\"ofuw3g\":[\"オブジェクトを検索...\"],\"IMeaSJ\":[\"レコード検索\"],\"a3LDKx\":[\"セキュリティ\"],\"QREcJS\":[\"アクティブ版を見る\"],\"OpPn5Z\":[\"ランを見る\"],\"EtyY4+\":[\"バージョンを見る\"],\"lYhPN0\":[\"バージョン履歴を見る\"],\"xraglu\":[\"このエンドポイントに送信したいイベントを選択する。\"],\"AXTJAW\":[\"ご希望の言語をお選びください。\"],\"mjK8F3\":[\"チームに招待メールを送る\"],\"yy5k7a\":[\"サーバー管理パネル\"],\"V7fgiB\":[\"メールの可視性の設定、ブロックリストの管理など。\"],\"cx14rp\":[\"ドメイン名を設定する\"],\"tn41zE\":[\"サブドメイン名を設定する\"],\"Tz0i8g\":[\"設定\"],\"Vy9kmk\":[\"このリンクを共有し、ユーザーをワークスペースに招待する。\"],\"gWk8gY\":[\"フィールドのラベルを変更すると、API名も変更されますか?\"],\"6Uau97\":[\"スキップ\"],\"f6Hub0\":[\"ソート\"],\"65A04M\":[\"スペイン語\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"サブドメイン\"],\"omhc+7\":[\"サブドメインはすでに取得済み\"],\"OlC/tU\":[\"サブドメインは30文字以内\"],\"ZETwlU\":[\"サブドメインは3文字より短くできません。\"],\"B5jRKH\":[\"サブスクリプションが切り替わりました\",[\"to\"],\"。\"],\"AxQiPW\":[\"サム\"],\"XYLcNv\":[\"サポート\"],\"9yk9d1\":[\"スイッチ[\",[\"from\"],\"]\"],\"qi74XZ\":[\"スイッチ[\",[\"to\"],\"]\"],\"L6Fg36\":[\"スイッチ課金【\",[\"to\"]],\"AtzMpB\":[\"フィールドラベルとAPI名の同期\"],\"E3AMmw\":[\"システム設定 - [\",[\"systemDateFormatLabel\"],\"]\"],\"0ZgB1e\":[\"システム設定 - [\",[\"systemTimeFormatLabel\"],\"]\"],\"NnH3pK\":[\"テスト\"],\"bU9B27\":[\"テスト・ワークフロー\"],\"2OUtmv\":[\"このフィールドの説明\"],\"VGZYbZ\":[\"アカウントに関連付けられたEメール\"],\"h8mvCd\":[\"このフィールドの名前とアイコン\"],\"L97sPr\":[\"お探しのページはもうないか、存在しないかのどちらかです。元のページに戻す\"],\"uWikAA\":[\"このフィールドの値\"],\"+69KDk\":[\"このフィールドの値は一意でなければならない。\"],\"PmtLRf\":[\"問題があった\"],\"hqCwGc\":[\"この操作は取り消すことができません。これにより、このユーザーは永久に削除され、すべての割り当てから削除されます。\"],\"gWGuHC\":[\"この操作は元に戻せません。ワークスペース全体が永久に削除されます。 <0/> 確認のため、Eメールを入力してください。\"],\"n9nSNJ\":[\"時間形式\"],\"aqMzDX\":[\"毎月\"],\"WXXiXO\":[\"毎年\"],\"PiUt3N\":[\"トリガータイプ\"],\"IQ5pAL\":[\"トリガータイプは、レコードが選択されていない場合は「手動」とする。\"],\"+zy2Nq\":[\"タイプ\"],\"U83IeL\":[\"タイプ\"],\"wSXm5S\":[\"ユニーク\"],\"GQCXQS\":[\"連絡先は無制限\"],\"ONWvwQ\":[\"アップロード\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"ドラフトとして使用\"],\"oTTQsc\":[\"アルファベット、数字、ダッシュのみを使用。文字または数字で始め、文字または数字で終わる\"],\"c6uZUV\":[\"APIを使用するか、最初の\",[\"objectLabel\"],\"を手動で追加します。\"],\"7PzzBU\":[\"ユーザー\"],\"IjyOjp\":[\"ユーザーがログインしていない\"],\"fXVIZq\":[\"価値観\"],\"KANz0G\":[\"請求の詳細を見る\"],\"6n7jtr\":[\"ビジュアライズ\"],\"id6ein\":[\"10MB以下の正方形のPNG、JPEG、GIFをサポートします。\"],\"ZS7vYp\":[\"新しいイベントが発生するたびに、このエンドポイントに POST リクエストを送信します。\"],\"TRDppN\":[\"ウェブフック\"],\"v1kQyJ\":[\"ウェブフック\"],\"C51ilI\":[\"APIキーの有効期限。\"],\"leUubq\":[\"キーが無効になる場合\"],\"wvyffT\":[\"ワークフローをテストできない\"],\"pmUArF\":[\"ワークスペース\"],\"VicISP\":[\"ワークスペースの削除\"],\"Q9pNST\":[\"説明を書く\"],\"3d1wCB\":[\"はい\"],\"zSkMV0\":[\"その場合、すぐに1年分の料金が請求されます。\"],\"XVnj6K\":[\"クレジット残高は毎月の請求書の支払いに充当される。\"],\"9ivpwk\":[\"表示されるあなたの名前\"],\"RhNbPE\":[\"ワークスペースが無効になる\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/generated/ko.ts b/packages/twenty-front/src/locales/generated/ko.ts index 396a83575f2f..72d2f53d8e80 100644 --- a/packages/twenty-front/src/locales/generated/ko.ts +++ b/packages/twenty-front/src/locales/generated/ko.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" 중 \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" API 키\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"워크플로 노드 실행 1,000회\"],\"4EdXYs\":[\"12시간 (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. 필드 구성\"],\"QsMprd\":[\"24시간 (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"중단\"],\"uyJsf6\":[\"정보\"],\"AeXO77\":[\"계정\"],\"nD0Y+a\":[\"계정 삭제\"],\"bPwFdf\":[\"계정\"],\"FQBaXG\":[\"활성화\"],\"tu8A/k\":[\"워크플로 활성화\"],\"F6pfE9\":[\"활성\"],\"Mue4oc\":[\"본인 또는 팀이 생성한 활성 API 키입니다.\"],\"m16xKo\":[\"추가\"],\"DpV70M\":[\"필드 추가\"],\"dEO3Zx\":[\"개체 추가\"],\"sgXUv+\":[\"SSO ID 공급자 추가\"],\"5+ttxv\":[\"차단 목록에 추가\"],\"pBsoKL\":[\"즐겨찾기에 추가\"],\"m2qDV8\":[\"첫 번째 \",[\"objectLabel\"],\" 추가\"],\"vLO+NG\":[[\"beautifiedCreatedAt\"],\"] 추가\"],\"N40H+G\":[\"모두\"],\"3saA7W\":[\"모두 (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"모든 역할\"],\"GMx1K0\":[\"Google의 싱글 사인온 기능을 통해 로그인을 허용합니다.\"],\"dea+zy\":[\"Microsoft의 싱글 사인온 기능을 통해 로그인을 허용합니다.\"],\"wMg43c\":[\"초대 링크를 공유하여 새 사용자를 초대할 수 있습니다.\"],\"vHeVg5\":[\"사용자가 이메일과 비밀번호로 로그인할 수 있도록 허용합니다.\"],\"mJ6m4C\":[\"선택적 설명\"],\"0RqpZr\":[\"API 및 웹훅\"],\"yRnk5W\":[\"API 키\"],\"5h8ooz\":[\"API 키\"],\"kAtj+q\":[\"API 이름\"],\"aAIQg2\":[\"모양\"],\"3iX0kh\":[\"청구 간격을 변경하시겠습니까?\"],\"nYD/Cq\":[\"오름차순\"],\"rfYmIr\":[\"역할을 할당하여 각 구성원의 액세스 권한을 지정하세요\"],\"lxQ+5m\":[\"할당 대상\"],\"Y7Dx6e\":[\"하나 이상의 인증 방법을 사용하도록 설정해야 합니다\"],\"P8fBlG\":[\"인증\"],\"yIVrHZ\":[\"권한 부여\"],\"3uQmjD\":[\"평균\"],\"Dht9W3\":[\"콘텐츠로 돌아가기\"],\"R+w/Va\":[\"청구\"],\"K1172m\":[\"차단 목록\"],\"2yl5lQ\":[\"통화 예약하기\"],\"PmmvzS\":[\"계산\"],\"AjVXBS\":[\"캘린더\"],\"EUpfsd\":[\"캘린더\"],\"dEgA5A\":[\"취소\"],\"0TllC8\":[\"언제든지 취소\"],\"rRK/Lf\":[\"요금제 취소\"],\"N6gPiD\":[\"구독 취소\"],\"OfzMnb\":[\"변경 \",[\"to\"]],\"VhMDMg\":[\"비밀번호 변경\"],\"SviKkE\":[\"중국어 - 간체\"],\"dzb4Ep\":[\"중국어 - 번체\"],\"JEFFOR\":[\"개체 선택\"],\"KT6rEB\":[\"제공업체 선택\"],\"9qP96p\":[\"평가판 선택\"],\"yz7wBu\":[\"닫기\"],\"+zUMwJ\":[\"SSO 연결 구성\"],\"QTNsSm\":[\"캘린더 환경설정을 구성하고 사용자 지정하세요.\"],\"aGwm+D\":[\"앱 전체에 날짜가 표시되는 방식 구성\"],\"Bh4GBD\":[\"이메일 및 캘린더 설정을 구성합니다.\"],\"D8ATlr\":[\"새 계정을 워크스페이스에 연결\"],\"Zgi9Fd\":[\"Google과 연결\"],\"IOfqM8\":[\"Microsoft와 연결\"],\"9TzudL\":[\"연결된 계정\"],\"M73whl\":[\"컨텍스트\"],\"xGVfLh\":[\"계속하기\"],\"CcGOj+\":[\"부조종사\"],\"7eVkEH\":[\"초대 링크 복사\"],\"Ej5euX\":[\"이 키는 다시 표시되지 않으므로 복사하세요\"],\"wBMjJ2\":[\"Count\"],\"EkZfen\":[\"모두 계산\"],\"vQJINq\":[\"비어있는 카운트\"],\"DzRsDJ\":[\"비어 있지 않은 카운트\"],\"9FZBbf\":[\"고유 값 계산\"],\"zNoOC2\":[\"워크플로를 만들고 여기로 돌아와서 버전을 확인합니다\"],\"uXGLuq\":[\"API 키 만들기\"],\"d0DCww\":[\"새 레코드 만들기\"],\"dkAPxi\":[\"웹훅 만들기\"],\"8skTDV\":[\"사용자 지정 개체\"],\"qt+EaC\":[[\"objectLabelSingular\"],\"] 보기에서 사용 가능한 필드를 사용자 지정합니다.\"],\"CMhr4u\":[\"도메인 사용자 지정\"],\"bCJa9l\":[\"업무 공간 보안 사용자 지정\"],\"Zz6Cxn\":[\"위험 구역\"],\"5cNMFz\":[\"데이터 모델\"],\"r+cVRP\":[\"데이터 유형\"],\"mYGY3B\":[\"날짜\"],\"Ud9zHv\":[\"날짜 및 시간\"],\"5y3O+A\":[\"비활성화\"],\"qk4i22\":[\"\\\"개체 레이블 및 API 이름 동기화\\\"를 비활성화하여 사용자 지정 API 이름을 설정합니다\"],\"gexAq8\":[\"이 필드 비활성화\"],\"4tpC8V\":[\"워크플로 비활성화\"],\"Y2ImVJ\":[\"개체의 이름과 설명을 정의합니다\"],\"cnGeoo\":[\"삭제\"],\"ZDGm40\":[\"계정 삭제\"],\"gAz0S5\":[\"계정 및 모든 관련 데이터 삭제\"],\"hGfWDm\":[\"API 키 삭제\"],\"4dpwsE\":[\"레코드 삭제\"],\"kf0A63\":[\"레코드 삭제\"],\"T6S2Ns\":[\"이 통합 삭제\"],\"snMaH4\":[\"웹훅 삭제\"],\"kYu0eF\":[\"작업 공간 삭제\"],\"mk2Ygs\":[\"전체 작업 공간 삭제\"],\"Cko536\":[\"내림차순\"],\"Nu4oKW\":[\"설명\"],\"2xxBws\":[\"파괴\"],\"n+SX4g\":[\"개발자\"],\"zAg2B9\":[\"초안 삭제\"],\"i66xz9\":[\"상대 날짜로 표시\"],\"EoKe5U\":[\"도메인\"],\"QVVmxi\":[\"예: 백오피스 통합\"],\"tOkc8o\":[\"가장 빠른\"],\"JTbQuO\":[\"가장 빠른 날짜\"],\"v+uKyy\":[\"청구 간격 편집\"],\"h2KoTu\":[\"결제 방법 편집, 송장 확인 등 다양한 기능 제공\"],\"6o1M/Q\":[\"하위 도메인 이름을 편집하거나 사용자 정의 도메인을 설정합니다.\"],\"O3oNi5\":[\"이메일\"],\"lfQsvW\":[\"이메일 통합\"],\"QT/Wo7\":[\"이메일 또는 도메인이 이미 차단 목록에 있습니다\"],\"BXEcos\":[\"이메일\"],\"eXoH4Q\":[\"직원\"],\"gqv5ZL\":[\"직원\"],\"N2S1rs\":[\"비어 있음\"],\"T3juzf\":[\"엔드포인트 URL\"],\"lYGfRP\":[\"영어\"],\"/bfFKe\":[[\"withCreditCardTrialPeriodDuration\"],\"]일 무료 체험을 즐겨보세요\"],\"GpB8YV\":[\"엔터프라이즈\"],\"c3qGJX\":[\"API 키 삭제 오류: \",[\"err\"]],\"bj7nh3\":[\"API 키 재생성 오류: \",[\"err\"]],\"VSQxWH\":[\"구독을 전환하는 동안 오류가 발생했습니다 \",[\"to\"],\".\"],\"JLxMta\":[\"비동기 이벤트에 대한 알림을 위한 웹훅 엔드포인트를 설정합니다.\"],\"cIgBjB\":[\"내 이메일 동기화에서 다음 사람 및 도메인 제외하기\"],\"fV7V51\":[\"기존 개체\"],\"IZ4o2e\":[\"설정 종료\"],\"tXGQvS\":[\"선택한 노드가 생성 단계 노드가 될 것으로 예상됩니다.\"],\"bKBhgb\":[\"경험\"],\"LxRNPw\":[\"만료\"],\"SkXfL0\":[\"만료 날짜\"],\"i9qiyR\":[\"만료일\"],\"GS+Mus\":[\"내보내기\"],\"ep2rbf\":[\"기록 내보내기\"],\"q46CjD\":[\"PDF로 내보내기\"],\"DaGxE0\":[\"내보내기 보기\"],\"X9kySA\":[\"즐겨 찾기\"],\"zXgopL\":[\"필드 유형\"],\"vF68cg\":[\"필드\"],\"3w/aqw\":[\"필드 수\"],\"o7J4JM\":[\"필터\"],\"cSev+j\":[\"필터\"],\"nLC6tu\":[\"프랑스어\"],\"aTieE0\":[\"월별에서 연간으로\"],\"K04lE5\":[\"연간에서 월간으로\"],\"scmRyR\":[\"전체 액세스 권한\"],\"xANKBj\":[\"기능\"],\"Weq9zb\":[\"일반\"],\"DDcvSo\":[\"독일어\"],\"NXEW3h\":[\"팀을 초대하여 업무 공간을 최대한 활용하세요.\"],\"zSGbaR\":[\"구독 신청하기\"],\"2GT3Hf\":[\"글로벌\"],\"hWp1MY\":[\"Twenty 지원팀에 회원님의 워크스페이스에 대한 임시 액세스 권한을 부여하여 문제를 해결하거나 회원님을 대신하여 콘텐츠를 복구할 수 있도록 하세요. 언제든지 액세스 권한을 취소할 수 있습니다.\"],\"vLyv1R\":[\"숨기기\"],\"XTWO+W\":[\"아이콘 및 이름\"],\"sJGljQ\":[\"식별자\"],\"j843N3\":[\"이 키를 분실한 경우 다시 생성할 수 있지만 이 키를 사용하는 모든 스크립트를 업데이트해야 한다는 점에 유의하세요. 확인하려면 \\\"\",[\"confirmationValue\"],\"\\\"을 입력하세요.\"],\"NoNwIX\":[\"비활성\"],\"pZ/USH\":[\"색인\"],\"JE2tjr\":[\"입력은 대소문자를 구분해야 하며 숫자로 시작할 수 없습니다\"],\"AwUsnG\":[\"인스턴스\"],\"nbfdhU\":[\"통합\"],\"NtFk/Z\":[\"잘못된 인증 공급자\"],\"B2Tpo0\":[\"잘못된 이메일\"],\"/m52AE\":[\"잘못된 이메일 또는 도메인\"],\"QdoUFL\":[\"잘못된 양식 값\"],\"0M8+El\":[\"이메일로 초대\"],\"PWIq/W\":[\"링크로 초대하기\"],\"3athPG\":[\"링크로 초대하기\"],\"5IfmKA\":[\"이메일 주소로 전송된 초대 링크\"],\"d+Y+rP\":[\"팀 초대하기\"],\"Lj7sBL\":[\"이탈리아어\"],\"h6S9Yz\":[\"한국어\"],\"zrpwCd\":[\"Lab\"],\"vXIe7J\":[\"언어\"],\"wL3cK8\":[\"최신\"],\"Kcjbmz\":[\"최근 날짜\"],\"pQjjYo\":[\"링크가 클립보드에 복사됨\"],\"FgAxTj\":[\"로그아웃\"],\"nOhz3x\":[\"로그아웃\"],\"T6YjCk\":[\"회원 관리\"],\"4cjU2u\":[\"여기에서 스페이스의 구성원 관리하기\"],\"FyFNsd\":[\"인터넷 계정을 관리합니다.\"],\"36kYu0\":[\"구독 관리\"],\"3Sdni6\":[\"완료로 표시\"],\"CK1KXz\":[\"최대\"],\"wlQNTg\":[\"회원\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"추가 옵션\"],\"iSLA/r\":[\"왼쪽으로 이동\"],\"Ubl2by\":[\"오른쪽으로 이동\"],\"6YtxFj\":[\"이름\"],\"z+6jaZ\":[\"API 키 이름\"],\"J7w8lI\":[\"작업 공간의 이름\"],\"2T8KCk\":[\"다음 레코드로 이동\"],\"veSA19\":[\"다음 버전으로 이동\"],\"ZTEho+\":[\"다음 워크플로로 이동\"],\"2tw9bo\":[\"이전 레코드로 이동\"],\"I+Pm5V\":[\"이전 버전으로 이동\"],\"QVUN3K\":[\"이전 워크플로로 이동\"],\"isRobC\":[\"신규\"],\"Kcr9Fr\":[\"새 계정\"],\"o8MyXb\":[\"새 키\"],\"j313SZ\":[\"새 키\"],\"hFxdey\":[\"새 개체\"],\"7vhWI8\":[\"새 비밀번호\"],\"BcCzLv\":[\"새로운 기록\"],\"2lmOC5\":[\"새로운 역할\"],\"U1DAok\":[\"새로운 웹훅\"],\"pwenQu\":[\"연결된 계정 없음\"],\"0uWxPM\":[\"아직 워크플로가 실행되지 않습니다\"],\"AQCvCC\":[\"아직 워크플로 버전이 없습니다\"],\"4wUkDk\":[\"비어 있지 않음\"],\"W0i24j\":[\"개체\"],\"B3toQF\":[\"개체\"],\"KNz3EF\":[\"잘 알려지지 않은 길에서 벗어나기\"],\"OV5wZZ\":[\"열림\"],\"0zpgxV\":[\"옵션\"],\"BzEFor\":[\"또는\"],\"/IX/7x\":[\"기타\"],\"boJlGf\":[\"페이지를 찾을 수 없음\"],\"8ZsakT\":[\"비밀번호\"],\"mi6Rel\":[\"비밀번호 재설정 링크가 이메일로 전송되었습니다\"],\"SrVzRe\":[\"퍼센트\"],\"yIK1GU\":[\"비어 있는 비율\"],\"PWLd4c\":[\"비어 있지 않은 비율\"],\"Bv3y5w\":[\"기록 영구 파기\"],\"N0+GsR\":[\"사진\"],\"jEw0Mr\":[\"유효한 URL을 입력하세요\"],\"6nsIo3\":[\"\\\"\",[\"confirmationValue\"],\"\\\"을 입력하여 이 API 키를 삭제할 것인지 확인합니다. 이 키를 사용하는 모든 스크립트는 작동이 중지된다는 점에 유의하세요.\"],\"mFZTXr\":[[\"confirmationText\"],\"]을 입력하여 이 웹훅을 삭제할 것인지 확인하세요.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"포르투갈어 - 브라질\"],\"xtXHeo\":[\"포르투갈어 - 포르투갈\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"미리 보기\"],\"vERlcd\":[\"프로필\"],\"YJgRqq\":[\"의사 영어\"],\"ibPuCP\":[\"문서 읽기\"],\"v3xM25\":[\"비밀번호 업데이트 링크가 포함된 이메일 수신\"],\"dSCufP\":[\"레코드 선택\"],\"vpZcGd\":[\"API 키 다시 생성하기\"],\"Mwqo5m\":[\"키 다시 생성\"],\"D+Mv78\":[\"키 다시 생성\"],\"5icoS1\":[\"릴리스\"],\"t/YqKh\":[\"제거\"],\"T/pF0Z\":[\"즐겨찾기에서 제거\"],\"KbS2K9\":[\"비밀번호 재설정\"],\"1IWc1n\":[\"다음으로 재설정\"],\"kx0s+n\":[\"결과\"],\"5dJK4M\":[\"역할\"],\"UX0N2y\":[\"워크플로를 실행하고 여기로 돌아와 실행을 확인합니다\"],\"A1taO8\":[\"검색\"],\"l1/uy2\":[\"필드 검색...\"],\"k7kp5/\":[\"색인 검색...\"],\"7taA9j\":[\"검색 필드\"],\"ofuw3g\":[\"개체 검색...\"],\"IMeaSJ\":[\"기록 검색\"],\"a3LDKx\":[\"보안\"],\"QREcJS\":[\"활성 버전 보기\"],\"OpPn5Z\":[\"실행 보기\"],\"EtyY4+\":[\"버전 보기\"],\"lYhPN0\":[\"버전 기록 보기\"],\"xraglu\":[\"이 엔드포인트로 보내려는 이벤트를 선택합니다\"],\"AXTJAW\":[\"선호하는 언어 선택\"],\"mjK8F3\":[\"팀에 초대 이메일 보내기\"],\"yy5k7a\":[\"서버 관리자 패널\"],\"V7fgiB\":[\"이메일 공개 여부 설정, 차단 목록 관리 등을 할 수 있습니다.\"],\"cx14rp\":[\"도메인 이름 설정\"],\"tn41zE\":[\"하위 도메인의 이름 설정\"],\"Tz0i8g\":[\"설정\"],\"Vy9kmk\":[\"이 링크를 공유하여 사용자를 워크스페이스에 초대하세요\"],\"gWk8gY\":[\"필드의 레이블을 변경하면 API 이름도 변경되어야 하나요?\"],\"6Uau97\":[\"건너뛰기\"],\"f6Hub0\":[\"정렬\"],\"65A04M\":[\"스페인어\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"하위 도메인\"],\"omhc+7\":[\"이미 사용 중인 하위 도메인\"],\"OlC/tU\":[\"하위 도메인은 30자를 초과할 수 없습니다\"],\"ZETwlU\":[\"하위 도메인은 3자보다 짧을 수 없습니다\"],\"B5jRKH\":[\"구독이 전환되었습니다 \",[\"to\"]],\"AxQiPW\":[\"합계\"],\"XYLcNv\":[\"지원\"],\"9yk9d1\":[\"스위치 \",[\"from\"]],\"qi74XZ\":[\"스위치 \",[\"to\"]],\"L6Fg36\":[\"스위치 청구 \",[\"to\"]],\"AtzMpB\":[\"필드 레이블 및 API 이름 동기화\"],\"E3AMmw\":[\"시스템 설정 - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"시스템 설정 - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"테스트\"],\"bU9B27\":[\"테스트 워크플로\"],\"2OUtmv\":[\"이 필드에 대한 설명\"],\"VGZYbZ\":[\"계정에 연결된 이메일\"],\"h8mvCd\":[\"이 필드의 이름과 아이콘\"],\"L97sPr\":[\"찾고 계신 페이지는 이미 사라졌거나 존재하지 않습니다. 다시 정상화해 드리겠습니다\"],\"uWikAA\":[\"이 필드의 값은 다음과 같습니다\"],\"+69KDk\":[\"이 필드의 값은 고유해야 합니다\"],\"PmtLRf\":[\"문제가 발생했습니다\"],\"hqCwGc\":[\"이 작업은 취소할 수 없습니다. 이렇게 하면 해당 사용자가 영구적으로 삭제되고 모든 과제에서 제거됩니다.\"],\"gWGuHC\":[\"이 작업은 취소할 수 없습니다. 이렇게 하면 전체 워크스페이스가 영구적으로 삭제됩니다. <0/> 확인하려면 이메일을 입력하세요.\"],\"n9nSNJ\":[\"시간 형식\"],\"aqMzDX\":[\"월 단위로\"],\"WXXiXO\":[\"연간\"],\"PiUt3N\":[\"트리거 유형\"],\"IQ5pAL\":[\"트리거 유형은 수동 - 선택된 레코드가 없는 경우여야 합니다\"],\"+zy2Nq\":[\"유형\"],\"U83IeL\":[\"아무거나 입력\"],\"wSXm5S\":[\"고유\"],\"GQCXQS\":[\"무제한 연락처\"],\"ONWvwQ\":[\"업로드\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"초안으로 사용\"],\"oTTQsc\":[\"문자, 숫자, 대시만 사용합니다. 문자 또는 숫자로 시작하고 끝내기\"],\"c6uZUV\":[\"API를 사용하거나 첫 번째 \",[\"objectLabel\"],\"을 수동으로 추가하세요\"],\"7PzzBU\":[\"사용자\"],\"IjyOjp\":[\"사용자가 로그인하지 않았습니다\"],\"fXVIZq\":[\"값\"],\"KANz0G\":[\"청구 세부 정보 보기\"],\"6n7jtr\":[\"시각화\"],\"id6ein\":[\"10MB 미만의 정사각형 PNG, JPEG 및 GIF를 지원합니다\"],\"ZS7vYp\":[\"모든 새로운 이벤트에 대해 이 엔드포인트로 POST 요청을 보냅니다\"],\"TRDppN\":[\"웹훅\"],\"v1kQyJ\":[\"웹훅\"],\"C51ilI\":[\"API 키가 만료되는 시기.\"],\"leUubq\":[\"키가 비활성화되는 경우\"],\"wvyffT\":[\"워크플로를 테스트할 수 없습니다\"],\"pmUArF\":[\"작업 공간\"],\"VicISP\":[\"작업 공간 삭제\"],\"Q9pNST\":[\"설명 작성\"],\"3d1wCB\":[\"yes\"],\"zSkMV0\":[\"1년치 요금이 즉시 청구됩니다.\"],\"XVnj6K\":[\"크레딧 잔액은 월 청구서 결제에 사용됩니다.\"],\"9ivpwk\":[\"표시되는 사용자 이름\"],\"RhNbPE\":[\"워크스페이스가 비활성화됩니다\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" 중 \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" API 키\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"워크플로 노드 실행 1,000회\"],\"4EdXYs\":[\"12시간 (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. 필드 구성\"],\"QsMprd\":[\"24시간 (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"중단\"],\"uyJsf6\":[\"정보\"],\"AeXO77\":[\"계정\"],\"nD0Y+a\":[\"계정 삭제\"],\"bPwFdf\":[\"계정\"],\"FQBaXG\":[\"활성화\"],\"tu8A/k\":[\"워크플로 활성화\"],\"F6pfE9\":[\"활성\"],\"Mue4oc\":[\"본인 또는 팀이 생성한 활성 API 키입니다.\"],\"m16xKo\":[\"추가\"],\"DpV70M\":[\"필드 추가\"],\"dEO3Zx\":[\"개체 추가\"],\"sgXUv+\":[\"SSO ID 공급자 추가\"],\"5+ttxv\":[\"차단 목록에 추가\"],\"pBsoKL\":[\"즐겨찾기에 추가\"],\"m2qDV8\":[\"첫 번째 \",[\"objectLabel\"],\" 추가\"],\"vLO+NG\":[[\"beautifiedCreatedAt\"],\"] 추가\"],\"N40H+G\":[\"모두\"],\"3saA7W\":[\"모두 (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"모든 역할\"],\"GMx1K0\":[\"Google의 싱글 사인온 기능을 통해 로그인을 허용합니다.\"],\"dea+zy\":[\"Microsoft의 싱글 사인온 기능을 통해 로그인을 허용합니다.\"],\"wMg43c\":[\"초대 링크를 공유하여 새 사용자를 초대할 수 있습니다.\"],\"vHeVg5\":[\"사용자가 이메일과 비밀번호로 로그인할 수 있도록 허용합니다.\"],\"mJ6m4C\":[\"선택적 설명\"],\"0RqpZr\":[\"API 및 웹훅\"],\"yRnk5W\":[\"API 키\"],\"5h8ooz\":[\"API 키\"],\"kAtj+q\":[\"API 이름\"],\"aAIQg2\":[\"모양\"],\"3iX0kh\":[\"청구 간격을 변경하시겠습니까?\"],\"nYD/Cq\":[\"오름차순\"],\"rfYmIr\":[\"역할을 할당하여 각 구성원의 액세스 권한을 지정하세요\"],\"lxQ+5m\":[\"할당 대상\"],\"Y7Dx6e\":[\"하나 이상의 인증 방법을 사용하도록 설정해야 합니다\"],\"P8fBlG\":[\"인증\"],\"yIVrHZ\":[\"권한 부여\"],\"3uQmjD\":[\"평균\"],\"Dht9W3\":[\"콘텐츠로 돌아가기\"],\"R+w/Va\":[\"청구\"],\"K1172m\":[\"차단 목록\"],\"2yl5lQ\":[\"통화 예약하기\"],\"PmmvzS\":[\"계산\"],\"AjVXBS\":[\"캘린더\"],\"EUpfsd\":[\"캘린더\"],\"dEgA5A\":[\"취소\"],\"0TllC8\":[\"언제든지 취소\"],\"rRK/Lf\":[\"요금제 취소\"],\"N6gPiD\":[\"구독 취소\"],\"OfzMnb\":[\"변경 \",[\"to\"]],\"VhMDMg\":[\"비밀번호 변경\"],\"SviKkE\":[\"중국어 - 간체\"],\"dzb4Ep\":[\"중국어 - 번체\"],\"JEFFOR\":[\"개체 선택\"],\"KT6rEB\":[\"제공업체 선택\"],\"9qP96p\":[\"평가판 선택\"],\"yz7wBu\":[\"닫기\"],\"+zUMwJ\":[\"SSO 연결 구성\"],\"QTNsSm\":[\"캘린더 환경설정을 구성하고 사용자 지정하세요.\"],\"aGwm+D\":[\"앱 전체에 날짜가 표시되는 방식 구성\"],\"Bh4GBD\":[\"이메일 및 캘린더 설정을 구성합니다.\"],\"D8ATlr\":[\"새 계정을 워크스페이스에 연결\"],\"Zgi9Fd\":[\"Google과 연결\"],\"IOfqM8\":[\"Microsoft와 연결\"],\"9TzudL\":[\"연결된 계정\"],\"M73whl\":[\"컨텍스트\"],\"xGVfLh\":[\"계속하기\"],\"CcGOj+\":[\"부조종사\"],\"7eVkEH\":[\"초대 링크 복사\"],\"Ej5euX\":[\"이 키는 다시 표시되지 않으므로 복사하세요\"],\"wBMjJ2\":[\"Count\"],\"EkZfen\":[\"모두 계산\"],\"vQJINq\":[\"비어있는 카운트\"],\"DzRsDJ\":[\"비어 있지 않은 카운트\"],\"9FZBbf\":[\"고유 값 계산\"],\"zNoOC2\":[\"워크플로를 만들고 여기로 돌아와서 버전을 확인합니다\"],\"uXGLuq\":[\"API 키 만들기\"],\"d0DCww\":[\"새 레코드 만들기\"],\"dkAPxi\":[\"웹훅 만들기\"],\"8skTDV\":[\"사용자 지정 개체\"],\"qt+EaC\":[[\"objectLabelSingular\"],\"] 보기에서 사용 가능한 필드를 사용자 지정합니다.\"],\"CMhr4u\":[\"도메인 사용자 지정\"],\"bCJa9l\":[\"업무 공간 보안 사용자 지정\"],\"Zz6Cxn\":[\"위험 구역\"],\"5cNMFz\":[\"데이터 모델\"],\"r+cVRP\":[\"데이터 유형\"],\"mYGY3B\":[\"날짜\"],\"Ud9zHv\":[\"날짜 및 시간\"],\"5y3O+A\":[\"비활성화\"],\"qk4i22\":[\"\\\"개체 레이블 및 API 이름 동기화\\\"를 비활성화하여 사용자 지정 API 이름을 설정합니다\"],\"gexAq8\":[\"이 필드 비활성화\"],\"4tpC8V\":[\"워크플로 비활성화\"],\"Y2ImVJ\":[\"개체의 이름과 설명을 정의합니다\"],\"cnGeoo\":[\"삭제\"],\"ZDGm40\":[\"계정 삭제\"],\"gAz0S5\":[\"계정 및 모든 관련 데이터 삭제\"],\"hGfWDm\":[\"API 키 삭제\"],\"4dpwsE\":[\"레코드 삭제\"],\"kf0A63\":[\"레코드 삭제\"],\"T6S2Ns\":[\"이 통합 삭제\"],\"snMaH4\":[\"웹훅 삭제\"],\"kYu0eF\":[\"작업 공간 삭제\"],\"mk2Ygs\":[\"전체 작업 공간 삭제\"],\"Cko536\":[\"내림차순\"],\"Nu4oKW\":[\"설명\"],\"2xxBws\":[\"파괴\"],\"n+SX4g\":[\"개발자\"],\"zAg2B9\":[\"초안 삭제\"],\"i66xz9\":[\"상대 날짜로 표시\"],\"EoKe5U\":[\"도메인\"],\"QVVmxi\":[\"예: 백오피스 통합\"],\"tOkc8o\":[\"가장 빠른\"],\"JTbQuO\":[\"가장 빠른 날짜\"],\"v+uKyy\":[\"청구 간격 편집\"],\"h2KoTu\":[\"결제 방법 편집, 송장 확인 등 다양한 기능 제공\"],\"6o1M/Q\":[\"하위 도메인 이름을 편집하거나 사용자 정의 도메인을 설정합니다.\"],\"O3oNi5\":[\"이메일\"],\"lfQsvW\":[\"이메일 통합\"],\"QT/Wo7\":[\"이메일 또는 도메인이 이미 차단 목록에 있습니다\"],\"BXEcos\":[\"이메일\"],\"eXoH4Q\":[\"직원\"],\"gqv5ZL\":[\"직원\"],\"N2S1rs\":[\"비어 있음\"],\"T3juzf\":[\"엔드포인트 URL\"],\"lYGfRP\":[\"영어\"],\"/bfFKe\":[[\"withCreditCardTrialPeriodDuration\"],\"]일 무료 체험을 즐겨보세요\"],\"GpB8YV\":[\"엔터프라이즈\"],\"c3qGJX\":[\"API 키 삭제 오류: \",[\"err\"]],\"bj7nh3\":[\"API 키 재생성 오류: \",[\"err\"]],\"VSQxWH\":[\"구독을 전환하는 동안 오류가 발생했습니다 \",[\"to\"],\".\"],\"JLxMta\":[\"비동기 이벤트에 대한 알림을 위한 웹훅 엔드포인트를 설정합니다.\"],\"cIgBjB\":[\"내 이메일 동기화에서 다음 사람 및 도메인 제외하기\"],\"fV7V51\":[\"기존 개체\"],\"IZ4o2e\":[\"설정 종료\"],\"tXGQvS\":[\"선택한 노드가 생성 단계 노드가 될 것으로 예상됩니다.\"],\"bKBhgb\":[\"경험\"],\"LxRNPw\":[\"만료\"],\"SkXfL0\":[\"만료 날짜\"],\"i9qiyR\":[\"만료일\"],\"GS+Mus\":[\"내보내기\"],\"ep2rbf\":[\"기록 내보내기\"],\"q46CjD\":[\"PDF로 내보내기\"],\"DaGxE0\":[\"내보내기 보기\"],\"X9kySA\":[\"즐겨 찾기\"],\"zXgopL\":[\"필드 유형\"],\"vF68cg\":[\"필드\"],\"3w/aqw\":[\"필드 수\"],\"o7J4JM\":[\"필터\"],\"cSev+j\":[\"필터\"],\"nLC6tu\":[\"프랑스어\"],\"aTieE0\":[\"월별에서 연간으로\"],\"K04lE5\":[\"연간에서 월간으로\"],\"scmRyR\":[\"전체 액세스 권한\"],\"xANKBj\":[\"기능\"],\"Weq9zb\":[\"일반\"],\"DDcvSo\":[\"독일어\"],\"NXEW3h\":[\"팀을 초대하여 업무 공간을 최대한 활용하세요.\"],\"zSGbaR\":[\"구독 신청하기\"],\"2GT3Hf\":[\"글로벌\"],\"hWp1MY\":[\"Twenty 지원팀에 회원님의 워크스페이스에 대한 임시 액세스 권한을 부여하여 문제를 해결하거나 회원님을 대신하여 콘텐츠를 복구할 수 있도록 하세요. 언제든지 액세스 권한을 취소할 수 있습니다.\"],\"vLyv1R\":[\"숨기기\"],\"XTWO+W\":[\"아이콘 및 이름\"],\"sJGljQ\":[\"식별자\"],\"j843N3\":[\"이 키를 분실한 경우 다시 생성할 수 있지만 이 키를 사용하는 모든 스크립트를 업데이트해야 한다는 점에 유의하세요. 확인하려면 \\\"\",[\"confirmationValue\"],\"\\\"을 입력하세요.\"],\"NoNwIX\":[\"비활성\"],\"pZ/USH\":[\"색인\"],\"JE2tjr\":[\"입력은 대소문자를 구분해야 하며 숫자로 시작할 수 없습니다\"],\"AwUsnG\":[\"인스턴스\"],\"nbfdhU\":[\"통합\"],\"NtFk/Z\":[\"잘못된 인증 공급자\"],\"B2Tpo0\":[\"잘못된 이메일\"],\"/m52AE\":[\"잘못된 이메일 또는 도메인\"],\"QdoUFL\":[\"잘못된 양식 값\"],\"0M8+El\":[\"이메일로 초대\"],\"PWIq/W\":[\"링크로 초대하기\"],\"3athPG\":[\"링크로 초대하기\"],\"5IfmKA\":[\"이메일 주소로 전송된 초대 링크\"],\"d+Y+rP\":[\"팀 초대하기\"],\"Lj7sBL\":[\"이탈리아어\"],\"dFtidv\":[\"일본어\"],\"h6S9Yz\":[\"한국어\"],\"zrpwCd\":[\"Lab\"],\"vXIe7J\":[\"언어\"],\"wL3cK8\":[\"최신\"],\"Kcjbmz\":[\"최근 날짜\"],\"pQjjYo\":[\"링크가 클립보드에 복사됨\"],\"FgAxTj\":[\"로그아웃\"],\"nOhz3x\":[\"로그아웃\"],\"T6YjCk\":[\"회원 관리\"],\"4cjU2u\":[\"여기에서 스페이스의 구성원 관리하기\"],\"FyFNsd\":[\"인터넷 계정을 관리합니다.\"],\"36kYu0\":[\"구독 관리\"],\"3Sdni6\":[\"완료로 표시\"],\"CK1KXz\":[\"최대\"],\"wlQNTg\":[\"회원\"],\"eTUF28\":[\"Min\"],\"3Siwmw\":[\"추가 옵션\"],\"iSLA/r\":[\"왼쪽으로 이동\"],\"Ubl2by\":[\"오른쪽으로 이동\"],\"6YtxFj\":[\"이름\"],\"z+6jaZ\":[\"API 키 이름\"],\"J7w8lI\":[\"작업 공간의 이름\"],\"2T8KCk\":[\"다음 레코드로 이동\"],\"veSA19\":[\"다음 버전으로 이동\"],\"ZTEho+\":[\"다음 워크플로로 이동\"],\"2tw9bo\":[\"이전 레코드로 이동\"],\"I+Pm5V\":[\"이전 버전으로 이동\"],\"QVUN3K\":[\"이전 워크플로로 이동\"],\"isRobC\":[\"신규\"],\"Kcr9Fr\":[\"새 계정\"],\"o8MyXb\":[\"새 키\"],\"j313SZ\":[\"새 키\"],\"hFxdey\":[\"새 개체\"],\"7vhWI8\":[\"새 비밀번호\"],\"BcCzLv\":[\"새로운 기록\"],\"2lmOC5\":[\"새로운 역할\"],\"U1DAok\":[\"새로운 웹훅\"],\"pwenQu\":[\"연결된 계정 없음\"],\"0uWxPM\":[\"아직 워크플로가 실행되지 않습니다\"],\"AQCvCC\":[\"아직 워크플로 버전이 없습니다\"],\"4wUkDk\":[\"비어 있지 않음\"],\"W0i24j\":[\"개체\"],\"B3toQF\":[\"개체\"],\"KNz3EF\":[\"잘 알려지지 않은 길에서 벗어나기\"],\"OV5wZZ\":[\"열림\"],\"0zpgxV\":[\"옵션\"],\"BzEFor\":[\"또는\"],\"/IX/7x\":[\"기타\"],\"boJlGf\":[\"페이지를 찾을 수 없음\"],\"8ZsakT\":[\"비밀번호\"],\"mi6Rel\":[\"비밀번호 재설정 링크가 이메일로 전송되었습니다\"],\"SrVzRe\":[\"퍼센트\"],\"yIK1GU\":[\"비어 있는 비율\"],\"PWLd4c\":[\"비어 있지 않은 비율\"],\"Bv3y5w\":[\"기록 영구 파기\"],\"N0+GsR\":[\"사진\"],\"jEw0Mr\":[\"유효한 URL을 입력하세요\"],\"6nsIo3\":[\"\\\"\",[\"confirmationValue\"],\"\\\"을 입력하여 이 API 키를 삭제할 것인지 확인합니다. 이 키를 사용하는 모든 스크립트는 작동이 중지된다는 점에 유의하세요.\"],\"mFZTXr\":[[\"confirmationText\"],\"]을 입력하여 이 웹훅을 삭제할 것인지 확인하세요.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"포르투갈어 - 브라질\"],\"xtXHeo\":[\"포르투갈어 - 포르투갈\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"미리 보기\"],\"vERlcd\":[\"프로필\"],\"YJgRqq\":[\"의사 영어\"],\"ibPuCP\":[\"문서 읽기\"],\"v3xM25\":[\"비밀번호 업데이트 링크가 포함된 이메일 수신\"],\"dSCufP\":[\"레코드 선택\"],\"vpZcGd\":[\"API 키 다시 생성하기\"],\"Mwqo5m\":[\"키 다시 생성\"],\"D+Mv78\":[\"키 다시 생성\"],\"5icoS1\":[\"릴리스\"],\"t/YqKh\":[\"제거\"],\"T/pF0Z\":[\"즐겨찾기에서 제거\"],\"KbS2K9\":[\"비밀번호 재설정\"],\"1IWc1n\":[\"다음으로 재설정\"],\"kx0s+n\":[\"결과\"],\"5dJK4M\":[\"역할\"],\"UX0N2y\":[\"워크플로를 실행하고 여기로 돌아와 실행을 확인합니다\"],\"A1taO8\":[\"검색\"],\"l1/uy2\":[\"필드 검색...\"],\"k7kp5/\":[\"색인 검색...\"],\"7taA9j\":[\"검색 필드\"],\"ofuw3g\":[\"개체 검색...\"],\"IMeaSJ\":[\"기록 검색\"],\"a3LDKx\":[\"보안\"],\"QREcJS\":[\"활성 버전 보기\"],\"OpPn5Z\":[\"실행 보기\"],\"EtyY4+\":[\"버전 보기\"],\"lYhPN0\":[\"버전 기록 보기\"],\"xraglu\":[\"이 엔드포인트로 보내려는 이벤트를 선택합니다\"],\"AXTJAW\":[\"선호하는 언어 선택\"],\"mjK8F3\":[\"팀에 초대 이메일 보내기\"],\"yy5k7a\":[\"서버 관리자 패널\"],\"V7fgiB\":[\"이메일 공개 여부 설정, 차단 목록 관리 등을 할 수 있습니다.\"],\"cx14rp\":[\"도메인 이름 설정\"],\"tn41zE\":[\"하위 도메인의 이름 설정\"],\"Tz0i8g\":[\"설정\"],\"Vy9kmk\":[\"이 링크를 공유하여 사용자를 워크스페이스에 초대하세요\"],\"gWk8gY\":[\"필드의 레이블을 변경하면 API 이름도 변경되어야 하나요?\"],\"6Uau97\":[\"건너뛰기\"],\"f6Hub0\":[\"정렬\"],\"65A04M\":[\"스페인어\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"하위 도메인\"],\"omhc+7\":[\"이미 사용 중인 하위 도메인\"],\"OlC/tU\":[\"하위 도메인은 30자를 초과할 수 없습니다\"],\"ZETwlU\":[\"하위 도메인은 3자보다 짧을 수 없습니다\"],\"B5jRKH\":[\"구독이 전환되었습니다 \",[\"to\"]],\"AxQiPW\":[\"합계\"],\"XYLcNv\":[\"지원\"],\"9yk9d1\":[\"스위치 \",[\"from\"]],\"qi74XZ\":[\"스위치 \",[\"to\"]],\"L6Fg36\":[\"스위치 청구 \",[\"to\"]],\"AtzMpB\":[\"필드 레이블 및 API 이름 동기화\"],\"E3AMmw\":[\"시스템 설정 - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"시스템 설정 - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"테스트\"],\"bU9B27\":[\"테스트 워크플로\"],\"2OUtmv\":[\"이 필드에 대한 설명\"],\"VGZYbZ\":[\"계정에 연결된 이메일\"],\"h8mvCd\":[\"이 필드의 이름과 아이콘\"],\"L97sPr\":[\"찾고 계신 페이지는 이미 사라졌거나 존재하지 않습니다. 다시 정상화해 드리겠습니다\"],\"uWikAA\":[\"이 필드의 값은 다음과 같습니다\"],\"+69KDk\":[\"이 필드의 값은 고유해야 합니다\"],\"PmtLRf\":[\"문제가 발생했습니다\"],\"hqCwGc\":[\"이 작업은 취소할 수 없습니다. 이렇게 하면 해당 사용자가 영구적으로 삭제되고 모든 과제에서 제거됩니다.\"],\"gWGuHC\":[\"이 작업은 취소할 수 없습니다. 이렇게 하면 전체 워크스페이스가 영구적으로 삭제됩니다. <0/> 확인하려면 이메일을 입력하세요.\"],\"n9nSNJ\":[\"시간 형식\"],\"aqMzDX\":[\"월 단위로\"],\"WXXiXO\":[\"연간\"],\"PiUt3N\":[\"트리거 유형\"],\"IQ5pAL\":[\"트리거 유형은 수동 - 선택된 레코드가 없는 경우여야 합니다\"],\"+zy2Nq\":[\"유형\"],\"U83IeL\":[\"아무거나 입력\"],\"wSXm5S\":[\"고유\"],\"GQCXQS\":[\"무제한 연락처\"],\"ONWvwQ\":[\"업로드\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"초안으로 사용\"],\"oTTQsc\":[\"문자, 숫자, 대시만 사용합니다. 문자 또는 숫자로 시작하고 끝내기\"],\"c6uZUV\":[\"API를 사용하거나 첫 번째 \",[\"objectLabel\"],\"을 수동으로 추가하세요\"],\"7PzzBU\":[\"사용자\"],\"IjyOjp\":[\"사용자가 로그인하지 않았습니다\"],\"fXVIZq\":[\"값\"],\"KANz0G\":[\"청구 세부 정보 보기\"],\"6n7jtr\":[\"시각화\"],\"id6ein\":[\"10MB 미만의 정사각형 PNG, JPEG 및 GIF를 지원합니다\"],\"ZS7vYp\":[\"모든 새로운 이벤트에 대해 이 엔드포인트로 POST 요청을 보냅니다\"],\"TRDppN\":[\"웹훅\"],\"v1kQyJ\":[\"웹훅\"],\"C51ilI\":[\"API 키가 만료되는 시기.\"],\"leUubq\":[\"키가 비활성화되는 경우\"],\"wvyffT\":[\"워크플로를 테스트할 수 없습니다\"],\"pmUArF\":[\"작업 공간\"],\"VicISP\":[\"작업 공간 삭제\"],\"Q9pNST\":[\"설명 작성\"],\"3d1wCB\":[\"yes\"],\"zSkMV0\":[\"1년치 요금이 즉시 청구됩니다.\"],\"XVnj6K\":[\"크레딧 잔액은 월 청구서 결제에 사용됩니다.\"],\"9ivpwk\":[\"표시되는 사용자 이름\"],\"RhNbPE\":[\"워크스페이스가 비활성화됩니다\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/generated/pseudo-en.ts b/packages/twenty-front/src/locales/generated/pseudo-en.ts index e877089ca3d6..861bcbfdcb93 100644 --- a/packages/twenty-front/src/locales/generated/pseudo-en.ts +++ b/packages/twenty-front/src/locales/generated/pseudo-en.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" ōƒ \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" ÀƤĨ Ķēŷ\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 ŵōŕķƒĺōŵ ńōďē ēxēćũţĩōńś\"],\"4EdXYs\":[\"12ĥ (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Ćōńƒĩĝũŕē ƒĩēĺď\"],\"QsMprd\":[\"24ĥ (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Àƀōŕţ\"],\"uyJsf6\":[\"Àƀōũţ\"],\"AeXO77\":[\"Àććōũńţ\"],\"nD0Y+a\":[\"Àććōũńţ Ďēĺēţĩōń\"],\"bPwFdf\":[\"Àććōũńţś\"],\"FQBaXG\":[\"Àćţĩvàţē\"],\"tu8A/k\":[\"Àćţĩvàţē Ŵōŕķƒĺōŵ\"],\"F6pfE9\":[\"Àćţĩvē\"],\"Mue4oc\":[\"Àćţĩvē ÀƤĨ ķēŷś ćŕēàţēď ƀŷ ŷōũ ōŕ ŷōũŕ ţēàḿ.\"],\"m16xKo\":[\"Àďď\"],\"DpV70M\":[\"Àďď Ƒĩēĺď\"],\"dEO3Zx\":[\"Àďď ōƀĴēćţ\"],\"sgXUv+\":[\"Àďď ŚŚŌ Ĩďēńţĩţŷ Ƥŕōvĩďēŕ\"],\"5+ttxv\":[\"Àďď ţō ƀĺōćķĺĩśţ\"],\"pBsoKL\":[\"Àďď ţō ƒàvōŕĩţēś\"],\"m2qDV8\":[\"Àďď ŷōũŕ ƒĩŕśţ \",[\"objectLabel\"]],\"vLO+NG\":[\"Àďďēď \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Àĺĺ\"],\"3saA7W\":[\"Àĺĺ (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Àĺĺ ŕōĺēś\"],\"GMx1K0\":[\"Àĺĺōŵ ĺōĝĩńś ţĥŕōũĝĥ Ĝōōĝĺē'ś śĩńĝĺē śĩĝń-ōń ƒũńćţĩōńàĺĩţŷ.\"],\"dea+zy\":[\"Àĺĺōŵ ĺōĝĩńś ţĥŕōũĝĥ Ḿĩćŕōśōƒţ'ś śĩńĝĺē śĩĝń-ōń ƒũńćţĩōńàĺĩţŷ.\"],\"wMg43c\":[\"Àĺĺōŵ ţĥē ĩńvĩţàţĩōń ōƒ ńēŵ ũśēŕś ƀŷ śĥàŕĩńĝ àń ĩńvĩţē ĺĩńķ.\"],\"vHeVg5\":[\"Àĺĺōŵ ũśēŕś ţō śĩĝń ĩń ŵĩţĥ àń ēḿàĩĺ àńď ƥàśśŵōŕď.\"],\"mJ6m4C\":[\"Àń ōƥţĩōńàĺ ďēśćŕĩƥţĩōń\"],\"0RqpZr\":[\"ÀƤĨ & Ŵēƀĥōōķś\"],\"yRnk5W\":[\"ÀƤĨ Ķēŷ\"],\"5h8ooz\":[\"ÀƤĨ ķēŷś\"],\"kAtj+q\":[\"ÀƤĨ Ńàḿē\"],\"aAIQg2\":[\"Àƥƥēàŕàńćē\"],\"3iX0kh\":[\"Àŕē ŷōũ śũŕē ţĥàţ ŷōũ ŵàńţ ţō ćĥàńĝē ŷōũŕ ƀĩĺĺĩńĝ ĩńţēŕvàĺ?\"],\"nYD/Cq\":[\"Àśćēńďĩńĝ\"],\"rfYmIr\":[\"Àśśĩĝń ŕōĺēś ţō śƥēćĩƒŷ ēàćĥ ḿēḿƀēŕ'ś àććēśś ƥēŕḿĩśśĩōńś\"],\"lxQ+5m\":[\"Àśśĩĝńēď ţō\"],\"Y7Dx6e\":[\"Àţ ĺēàśţ ōńē àũţĥēńţĩćàţĩōń ḿēţĥōď ḿũśţ ƀē ēńàƀĺēď\"],\"P8fBlG\":[\"Àũţĥēńţĩćàţĩōń\"],\"yIVrHZ\":[\"Àũţĥōŕĩźē\"],\"3uQmjD\":[\"Àvēŕàĝē\"],\"Dht9W3\":[\"ßàćķ ţō ćōńţēńţ\"],\"R+w/Va\":[\"ßĩĺĺĩńĝ\"],\"K1172m\":[\"ßĺōćķĺĩśţ\"],\"2yl5lQ\":[\"ßōōķ à Ćàĺĺ\"],\"PmmvzS\":[\"Ćàĺćũĺàţē\"],\"AjVXBS\":[\"Ćàĺēńďàŕ\"],\"EUpfsd\":[\"Ćàĺēńďàŕś\"],\"dEgA5A\":[\"Ćàńćēĺ\"],\"0TllC8\":[\"Ćàńćēĺ àńŷţĩḿē\"],\"rRK/Lf\":[\"Ćàńćēĺ Ƥĺàń\"],\"N6gPiD\":[\"Ćàńćēĺ ŷōũŕ śũƀśćŕĩƥţĩōń\"],\"OfzMnb\":[\"Ćĥàńĝē \",[\"to\"]],\"VhMDMg\":[\"Ćĥàńĝē Ƥàśśŵōŕď\"],\"SviKkE\":[\"Ćĥĩńēśē — Śĩḿƥĺĩƒĩēď\"],\"dzb4Ep\":[\"Ćĥĩńēśē — Ţŕàďĩţĩōńàĺ\"],\"JEFFOR\":[\"Ćĥōōśē àń ōƀĴēćţ\"],\"KT6rEB\":[\"Ćĥōōśē ŷōũŕ ƥŕōvĩďēŕ\"],\"9qP96p\":[\"Ćĥōōśē ŷōũŕ Ţŕĩàĺ\"],\"yz7wBu\":[\"Ćĺōśē\"],\"+zUMwJ\":[\"Ćōńƒĩĝũŕē àń ŚŚŌ ćōńńēćţĩōń\"],\"QTNsSm\":[\"Ćōńƒĩĝũŕē àńď ćũśţōḿĩźē ŷōũŕ ćàĺēńďàŕ ƥŕēƒēŕēńćēś.\"],\"aGwm+D\":[\"Ćōńƒĩĝũŕē ĥōŵ ďàţēś àŕē ďĩśƥĺàŷēď àćŕōśś ţĥē àƥƥ\"],\"Bh4GBD\":[\"Ćōńƒĩĝũŕē ŷōũŕ ēḿàĩĺś àńď ćàĺēńďàŕ śēţţĩńĝś.\"],\"D8ATlr\":[\"Ćōńńēćţ à ńēŵ àććōũńţ ţō ŷōũŕ ŵōŕķśƥàćē\"],\"Zgi9Fd\":[\"Ćōńńēćţ ŵĩţĥ Ĝōōĝĺē\"],\"IOfqM8\":[\"Ćōńńēćţ ŵĩţĥ Ḿĩćŕōśōƒţ\"],\"9TzudL\":[\"Ćōńńēćţēď àććōũńţś\"],\"M73whl\":[\"Ćōńţēxţ\"],\"xGVfLh\":[\"Ćōńţĩńũē\"],\"CcGOj+\":[\"Ćōƥĩĺōţ\"],\"7eVkEH\":[\"Ćōƥŷ ĩńvĩţàţĩōń ĺĩńķ\"],\"Ej5euX\":[\"Ćōƥŷ ţĥĩś ķēŷ àś ĩţ ŵĩĺĺ ńōţ ƀē vĩśĩƀĺē àĝàĩń\"],\"wBMjJ2\":[\"Ćōũńţ\"],\"EkZfen\":[\"Ćōũńţ àĺĺ\"],\"vQJINq\":[\"Ćōũńţ ēḿƥţŷ\"],\"DzRsDJ\":[\"Ćōũńţ ńōţ ēḿƥţŷ\"],\"9FZBbf\":[\"Ćōũńţ ũńĩǫũē vàĺũēś\"],\"zNoOC2\":[\"Ćŕēàţē à ŵōŕķƒĺōŵ àńď ŕēţũŕń ĥēŕē ţō vĩēŵ ĩţś vēŕśĩōńś\"],\"uXGLuq\":[\"Ćŕēàţē ÀƤĨ ķēŷ\"],\"d0DCww\":[\"Ćŕēàţē ńēŵ ŕēćōŕď\"],\"dkAPxi\":[\"Ćŕēàţē Ŵēƀĥōōķ\"],\"8skTDV\":[\"Ćũśţōḿ ōƀĴēćţś\"],\"qt+EaC\":[\"Ćũśţōḿĩśē ţĥē ƒĩēĺďś àvàĩĺàƀĺē ĩń ţĥē \",[\"objectLabelSingular\"],\" vĩēŵś.\"],\"CMhr4u\":[\"Ćũśţōḿĩźē Ďōḿàĩń\"],\"bCJa9l\":[\"Ćũśţōḿĩźē ŷōũŕ ŵōŕķśƥàćē śēćũŕĩţŷ\"],\"Zz6Cxn\":[\"Ďàńĝēŕ źōńē\"],\"5cNMFz\":[\"Ďàţà ḿōďēĺ\"],\"r+cVRP\":[\"Ďàţà ţŷƥē\"],\"mYGY3B\":[\"Ďàţē\"],\"Ud9zHv\":[\"Ďàţē àńď ţĩḿē\"],\"5y3O+A\":[\"Ďēàćţĩvàţē\"],\"qk4i22\":[\"Ďēàćţĩvàţē \\\"Śŷńćĥŕōńĩźē ŌƀĴēćţś Ĺàƀēĺś àńď ÀƤĨ Ńàḿēś\\\" ţō śēţ à ćũśţōḿ ÀƤĨ ńàḿē\"],\"gexAq8\":[\"Ďēàćţĩvàţē ţĥĩś ƒĩēĺď\"],\"4tpC8V\":[\"Ďēàćţĩvàţē Ŵōŕķƒĺōŵ\"],\"Y2ImVJ\":[\"Ďēƒĩńē ţĥē ńàḿē àńď ďēśćŕĩƥţĩōń ōƒ ŷōũŕ ōƀĴēćţ\"],\"cnGeoo\":[\"Ďēĺēţē\"],\"ZDGm40\":[\"Ďēĺēţē àććōũńţ\"],\"gAz0S5\":[\"Ďēĺēţē àććōũńţ àńď àĺĺ ţĥē àśśōćĩàţēď ďàţà\"],\"hGfWDm\":[\"Ďēĺēţē ÀƤĨ ķēŷ\"],\"4dpwsE\":[\"Ďēĺēţē ŕēćōŕď\"],\"kf0A63\":[\"Ďēĺēţē ŕēćōŕďś\"],\"T6S2Ns\":[\"Ďēĺēţē ţĥĩś ĩńţēĝŕàţĩōń\"],\"snMaH4\":[\"Ďēĺēţē ŵēƀĥōōķ\"],\"kYu0eF\":[\"Ďēĺēţē ŵōŕķśƥàćē\"],\"mk2Ygs\":[\"Ďēĺēţē ŷōũŕ ŵĥōĺē ŵōŕķśƥàćē\"],\"Cko536\":[\"Ďēśćēńďĩńĝ\"],\"Nu4oKW\":[\"Ďēśćŕĩƥţĩōń\"],\"2xxBws\":[\"Ďēśţŕōŷ\"],\"n+SX4g\":[\"Ďēvēĺōƥēŕś\"],\"zAg2B9\":[\"Ďĩśćàŕď Ďŕàƒţ\"],\"i66xz9\":[\"Ďĩśƥĺàŷ àś ŕēĺàţĩvē ďàţē\"],\"EoKe5U\":[\"Ďōḿàĩń\"],\"QVVmxi\":[\"Ē.ĝ. ƀàćķōƒƒĩćē ĩńţēĝŕàţĩōń\"],\"tOkc8o\":[\"Ēàŕĺĩēśţ\"],\"JTbQuO\":[\"Ēàŕĺĩēśţ ďàţē\"],\"v+uKyy\":[\"Ēďĩţ ƀĩĺĺĩńĝ ĩńţēŕvàĺ\"],\"h2KoTu\":[\"Ēďĩţ ƥàŷḿēńţ ḿēţĥōď, śēē ŷōũŕ ĩńvōĩćēś àńď ḿōŕē\"],\"6o1M/Q\":[\"Ēďĩţ ŷōũŕ śũƀďōḿàĩń ńàḿē ōŕ śēţ à ćũśţōḿ ďōḿàĩń.\"],\"O3oNi5\":[\"Ēḿàĩĺ\"],\"lfQsvW\":[\"Ēḿàĩĺ ĩńţēĝŕàţĩōń\"],\"QT/Wo7\":[\"Ēḿàĩĺ ōŕ ďōḿàĩń ĩś àĺŕēàďŷ ĩń ƀĺōćķĺĩśţ\"],\"BXEcos\":[\"Ēḿàĩĺś\"],\"eXoH4Q\":[\"ēḿƥĺōŷēēś\"],\"gqv5ZL\":[\"Ēḿƥĺōŷēēś\"],\"N2S1rs\":[\"Ēḿƥţŷ\"],\"T3juzf\":[\"Ēńďƥōĩńţ ŨŔĹ\"],\"lYGfRP\":[\"Ēńĝĺĩśĥ\"],\"/bfFKe\":[\"ĒńĴōŷ à \",[\"withCreditCardTrialPeriodDuration\"],\"-ďàŷś ƒŕēē ţŕĩàĺ\"],\"GpB8YV\":[\"Ēńţēŕƥŕĩśē\"],\"c3qGJX\":[\"Ēŕŕōŕ ďēĺēţĩńĝ àƥĩ ķēŷ: \",[\"err\"]],\"bj7nh3\":[\"Ēŕŕōŕ ŕēĝēńēŕàţĩńĝ àƥĩ ķēŷ: \",[\"err\"]],\"VSQxWH\":[\"Ēŕŕōŕ ŵĥĩĺē śŵĩţćĥĩńĝ śũƀśćŕĩƥţĩōń \",[\"to\"],\".\"],\"JLxMta\":[\"Ēśţàƀĺĩśĥ Ŵēƀĥōōķ ēńďƥōĩńţś ƒōŕ ńōţĩƒĩćàţĩōńś ōń àśŷńćĥŕōńōũś ēvēńţś.\"],\"cIgBjB\":[\"Ēxćĺũďē ţĥē ƒōĺĺōŵĩńĝ ƥēōƥĺē àńď ďōḿàĩńś ƒŕōḿ ḿŷ ēḿàĩĺ śŷńć\"],\"fV7V51\":[\"Ēxĩśţĩńĝ ōƀĴēćţś\"],\"IZ4o2e\":[\"Ēxĩţ Śēţţĩńĝś\"],\"tXGQvS\":[\"Ēxƥēćţēď śēĺēćţēď ńōďē ţō ƀē à ćŕēàţē śţēƥ ńōďē.\"],\"bKBhgb\":[\"Ēxƥēŕĩēńćē\"],\"LxRNPw\":[\"Ēxƥĩŕàţĩōń\"],\"SkXfL0\":[\"Ēxƥĩŕàţĩōń Ďàţē\"],\"i9qiyR\":[\"Ēxƥĩŕēś ĩń\"],\"GS+Mus\":[\"Ēxƥōŕţ\"],\"ep2rbf\":[\"Ēxƥōŕţ ŕēćōŕďś\"],\"q46CjD\":[\"Ēxƥōŕţ ţō ƤĎƑ\"],\"DaGxE0\":[\"Ēxƥōŕţ vĩēŵ\"],\"X9kySA\":[\"Ƒàvōŕĩţēś\"],\"zXgopL\":[\"Ƒĩēĺď ţŷƥē\"],\"vF68cg\":[\"Ƒĩēĺďś\"],\"3w/aqw\":[\"Ƒĩēĺďś Ćōũńţ\"],\"o7J4JM\":[\"Ƒĩĺţēŕ\"],\"cSev+j\":[\"Ƒĩĺţēŕś\"],\"nLC6tu\":[\"Ƒŕēńćĥ\"],\"aTieE0\":[\"ƒŕōḿ ḿōńţĥĺŷ ţō ŷēàŕĺŷ\"],\"K04lE5\":[\"ƒŕōḿ ŷēàŕĺŷ ţō ḿōńţĥĺŷ\"],\"scmRyR\":[\"Ƒũĺĺ àććēśś\"],\"xANKBj\":[\"Ƒũńćţĩōńś\"],\"Weq9zb\":[\"Ĝēńēŕàĺ\"],\"DDcvSo\":[\"Ĝēŕḿàń\"],\"NXEW3h\":[\"Ĝēţ ţĥē ḿōśţ ōũţ ōƒ ŷōũŕ ŵōŕķśƥàćē ƀŷ ĩńvĩţĩńĝ ŷōũŕ ţēàḿ.\"],\"zSGbaR\":[\"Ĝēţ ŷōũŕ śũƀśćŕĩƥţĩōń\"],\"2GT3Hf\":[\"Ĝĺōƀàĺ\"],\"hWp1MY\":[\"Ĝŕàńţ Ţŵēńţŷ śũƥƥōŕţ ţēḿƥōŕàŕŷ àććēśś ţō ŷōũŕ ŵōŕķśƥàćē śō ŵē ćàń ţŕōũƀĺēśĥōōţ ƥŕōƀĺēḿś ōŕ ŕēćōvēŕ ćōńţēńţ ōń ŷōũŕ ƀēĥàĺƒ. Ŷōũ ćàń ŕēvōķē àććēśś àţ àńŷ ţĩḿē.\"],\"vLyv1R\":[\"Ĥĩďē\"],\"XTWO+W\":[\"Ĩćōń àńď Ńàḿē\"],\"sJGljQ\":[\"Ĩďēńţĩƒĩēŕ\"],\"j843N3\":[\"Ĩƒ ŷōũ’vē ĺōśţ ţĥĩś ķēŷ, ŷōũ ćàń ŕēĝēńēŕàţē ĩţ, ƀũţ ƀē àŵàŕē ţĥàţ àńŷ śćŕĩƥţ ũśĩńĝ ţĥĩś ķēŷ ŵĩĺĺ ńēēď ţō ƀē ũƥďàţēď. Ƥĺēàśē ţŷƥē\\\"\",[\"confirmationValue\"],\"\\\" ţō ćōńƒĩŕḿ.\"],\"NoNwIX\":[\"Ĩńàćţĩvē\"],\"pZ/USH\":[\"Ĩńďēxēś\"],\"JE2tjr\":[\"Ĩńƥũţ ḿũśţ ƀē ĩń ćàḿēĺ ćàśē àńď ćàńńōţ śţàŕţ ŵĩţĥ à ńũḿƀēŕ\"],\"AwUsnG\":[\"Ĩńśţàńćēś\"],\"nbfdhU\":[\"Ĩńţēĝŕàţĩōńś\"],\"NtFk/Z\":[\"Ĩńvàĺĩď àũţĥ ƥŕōvĩďēŕ\"],\"B2Tpo0\":[\"Ĩńvàĺĩď ēḿàĩĺ\"],\"/m52AE\":[\"Ĩńvàĺĩď ēḿàĩĺ ōŕ ďōḿàĩń\"],\"QdoUFL\":[\"Ĩńvàĺĩď ƒōŕḿ vàĺũēś\"],\"0M8+El\":[\"Ĩńvĩţē ƀŷ ēḿàĩĺ\"],\"PWIq/W\":[\"Ĩńvĩţē ƀŷ ĺĩńķ\"],\"3athPG\":[\"Ĩńvĩţē ƀŷ Ĺĩńķ\"],\"5IfmKA\":[\"Ĩńvĩţē ĺĩńķ śēńţ ţō ēḿàĩĺ àďďŕēśśēś\"],\"d+Y+rP\":[\"Ĩńvĩţē ŷōũŕ ţēàḿ\"],\"Lj7sBL\":[\"Ĩţàĺĩàń\"],\"h6S9Yz\":[\"Ķōŕēàń\"],\"zrpwCd\":[\"Ĺàƀ\"],\"vXIe7J\":[\"Ĺàńĝũàĝē\"],\"wL3cK8\":[\"Ĺàţēśţ\"],\"Kcjbmz\":[\"Ĺàţēśţ ďàţē\"],\"pQjjYo\":[\"Ĺĩńķ ćōƥĩēď ţō ćĺĩƥƀōàŕď\"],\"FgAxTj\":[\"Ĺōĝ ōũţ\"],\"nOhz3x\":[\"Ĺōĝōũţ\"],\"T6YjCk\":[\"Ḿàńàĝē Ḿēḿƀēŕś\"],\"4cjU2u\":[\"Ḿàńàĝē ţĥē ḿēḿƀēŕś ōƒ ŷōũŕ śƥàćē ĥēŕē\"],\"FyFNsd\":[\"Ḿàńàĝē ŷōũŕ ĩńţēŕńēţ àććōũńţś.\"],\"36kYu0\":[\"Ḿàńàĝē ŷōũŕ śũƀśćŕĩƥţĩōń\"],\"3Sdni6\":[\"Ḿàŕķ àś ďōńē\"],\"CK1KXz\":[\"Ḿàx\"],\"wlQNTg\":[\"Ḿēḿƀēŕś\"],\"eTUF28\":[\"Ḿĩń\"],\"3Siwmw\":[\"Ḿōŕē ōƥţĩōńś\"],\"iSLA/r\":[\"Ḿōvē ĺēƒţ\"],\"Ubl2by\":[\"Ḿōvē ŕĩĝĥţ\"],\"6YtxFj\":[\"Ńàḿē\"],\"z+6jaZ\":[\"Ńàḿē ōƒ ŷōũŕ ÀƤĨ ķēŷ\"],\"J7w8lI\":[\"Ńàḿē ōƒ ŷōũŕ ŵōŕķśƥàćē\"],\"2T8KCk\":[\"Ńàvĩĝàţē ţō ńēxţ ŕēćōŕď\"],\"veSA19\":[\"Ńàvĩĝàţē ţō ńēxţ vēŕśĩōń\"],\"ZTEho+\":[\"Ńàvĩĝàţē ţō ńēxţ ŵōŕķƒĺōŵ\"],\"2tw9bo\":[\"Ńàvĩĝàţē ţō ƥŕēvĩōũś ŕēćōŕď\"],\"I+Pm5V\":[\"Ńàvĩĝàţē ţō ƥŕēvĩōũś vēŕśĩōń\"],\"QVUN3K\":[\"Ńàvĩĝàţē ţō ƥŕēvĩōũś ŵōŕķƒĺōŵ\"],\"isRobC\":[\"Ńēŵ\"],\"Kcr9Fr\":[\"Ńēŵ àććōũńţ\"],\"o8MyXb\":[\"Ńēŵ ķēŷ\"],\"j313SZ\":[\"Ńēŵ Ķēŷ\"],\"hFxdey\":[\"Ńēŵ ŌƀĴēćţ\"],\"7vhWI8\":[\"Ńēŵ Ƥàśśŵōŕď\"],\"BcCzLv\":[\"Ńēŵ ŕēćōŕď\"],\"2lmOC5\":[\"Ńēŵ Ŕōĺē\"],\"U1DAok\":[\"Ńēŵ Ŵēƀĥōōķ\"],\"pwenQu\":[\"Ńō ćōńńēćţēď àććōũńţ\"],\"0uWxPM\":[\"Ńō ŵōŕķƒĺōŵ ŕũńś ŷēţ\"],\"AQCvCC\":[\"Ńō ŵōŕķƒĺōŵ vēŕśĩōńś ŷēţ\"],\"4wUkDk\":[\"Ńōţ ēḿƥţŷ\"],\"W0i24j\":[\"ŌƀĴēćţ\"],\"B3toQF\":[\"ŌƀĴēćţś\"],\"KNz3EF\":[\"Ōƒƒ ţĥē ƀēàţēń ƥàţĥ\"],\"OV5wZZ\":[\"Ōƥēńēď\"],\"0zpgxV\":[\"Ōƥţĩōńś\"],\"BzEFor\":[\"ōŕ\"],\"/IX/7x\":[\"Ōţĥēŕ\"],\"boJlGf\":[\"Ƥàĝē Ńōţ Ƒōũńď\"],\"8ZsakT\":[\"Ƥàśśŵōŕď\"],\"mi6Rel\":[\"Ƥàśśŵōŕď ŕēśēţ ĺĩńķ ĥàś ƀēēń śēńţ ţō ţĥē ēḿàĩĺ\"],\"SrVzRe\":[\"Ƥēŕćēńţ\"],\"yIK1GU\":[\"Ƥēŕćēńţ ēḿƥţŷ\"],\"PWLd4c\":[\"Ƥēŕćēńţ ńōţ ēḿƥţŷ\"],\"Bv3y5w\":[\"Ƥēŕḿàńēńţĺŷ ďēśţŕōŷ ŕēćōŕď\"],\"N0+GsR\":[\"Ƥĩćţũŕē\"],\"jEw0Mr\":[\"Ƥĺēàśē ēńţēŕ à vàĺĩď ŨŔĹ\"],\"6nsIo3\":[\"Ƥĺēàśē ţŷƥē \\\"\",[\"confirmationValue\"],\"\\\" ţō ćōńƒĩŕḿ ŷōũ ŵàńţ ţō ďēĺēţē ţĥĩś ÀƤĨ Ķēŷ. ßē àŵàŕē ţĥàţ àńŷ śćŕĩƥţ ũśĩńĝ ţĥĩś ķēŷ ŵĩĺĺ śţōƥ ŵōŕķĩńĝ.\"],\"mFZTXr\":[\"Ƥĺēàśē ţŷƥē \",[\"confirmationText\"],\" ţō ćōńƒĩŕḿ ŷōũ ŵàńţ ţō ďēĺēţē ţĥĩś ŵēƀĥōōķ.\"],\"MOERNx\":[\"Ƥōŕţũĝũēśē\"],\"0nsqwk\":[\"Ƥōŕţũĝũēśē — ßŕàźĩĺ\"],\"xtXHeo\":[\"Ƥōŕţũĝũēśē — Ƥōŕţũĝàĺ\"],\"R7+D0/\":[\"Ƥōŕţũĝũēśē (ßŕàźĩĺ)\"],\"512Uma\":[\"Ƥōŕţũĝũēśē (Ƥōŕţũĝàĺ)\"],\"rdUucN\":[\"Ƥŕēvĩēŵ\"],\"vERlcd\":[\"Ƥŕōƒĩĺē\"],\"YJgRqq\":[\"Ƥśēũďō-Ēńĝĺĩśĥ\"],\"ibPuCP\":[\"Ŕēàď ďōćũḿēńţàţĩōń\"],\"v3xM25\":[\"Ŕēćēĩvē àń ēḿàĩĺ ćōńţàĩńĩńĝ ƥàśśŵōŕď ũƥďàţē ĺĩńķ\"],\"dSCufP\":[\"Ŕēćōŕď Śēĺēćţĩōń\"],\"vpZcGd\":[\"Ŕēĝēńēŕàţē àń ÀƤĨ ķēŷ\"],\"Mwqo5m\":[\"Ŕēĝēńēŕàţē ķēŷ\"],\"D+Mv78\":[\"Ŕēĝēńēŕàţē Ķēŷ\"],\"5icoS1\":[\"Ŕēĺēàśēś\"],\"t/YqKh\":[\"Ŕēḿōvē\"],\"T/pF0Z\":[\"Ŕēḿōvē ƒŕōḿ ƒàvōŕĩţēś\"],\"KbS2K9\":[\"Ŕēśēţ Ƥàśśŵōŕď\"],\"1IWc1n\":[\"Ŕēśēţ ţō\"],\"kx0s+n\":[\"Ŕēśũĺţś\"],\"5dJK4M\":[\"Ŕōĺēś\"],\"UX0N2y\":[\"Ŕũń à ŵōŕķƒĺōŵ àńď ŕēţũŕń ĥēŕē ţō vĩēŵ ĩţś ēxēćũţĩōńś\"],\"A1taO8\":[\"Śēàŕćĥ\"],\"l1/uy2\":[\"Śēàŕćĥ à ƒĩēĺď...\"],\"k7kp5/\":[\"Śēàŕćĥ àń ĩńďēx...\"],\"7taA9j\":[\"Śēàŕćĥ ƒĩēĺďś\"],\"ofuw3g\":[\"Śēàŕćĥ ƒōŕ àń ōƀĴēćţ...\"],\"IMeaSJ\":[\"Śēàŕćĥ ŕēćōŕďś\"],\"a3LDKx\":[\"Śēćũŕĩţŷ\"],\"QREcJS\":[\"Śēē àćţĩvē vēŕśĩōń\"],\"OpPn5Z\":[\"Śēē ŕũńś\"],\"EtyY4+\":[\"Śēē vēŕśĩōńś\"],\"lYhPN0\":[\"Śēē vēŕśĩōńś ĥĩśţōŕŷ\"],\"xraglu\":[\"Śēĺēćţ ţĥē ēvēńţś ŷōũ ŵĩśĥ ţō śēńď ţō ţĥĩś ēńďƥōĩńţ\"],\"AXTJAW\":[\"Śēĺēćţ ŷōũŕ ƥŕēƒēŕŕēď ĺàńĝũàĝē\"],\"mjK8F3\":[\"Śēńď àń ĩńvĩţē ēḿàĩĺ ţō ŷōũŕ ţēàḿ\"],\"yy5k7a\":[\"Śēŕvēŕ Àďḿĩń Ƥàńēĺ\"],\"V7fgiB\":[\"Śēţ ēḿàĩĺ vĩśĩƀĩĺĩţŷ, ḿàńàĝē ŷōũŕ ƀĺōćķĺĩśţ àńď ḿōŕē.\"],\"cx14rp\":[\"Śēţ ţĥē ńàḿē ōƒ ŷōũŕ ďōḿàĩń\"],\"tn41zE\":[\"Śēţ ţĥē ńàḿē ōƒ ŷōũŕ śũƀďōḿàĩń\"],\"Tz0i8g\":[\"Śēţţĩńĝś\"],\"Vy9kmk\":[\"Śĥàŕē ţĥĩś ĺĩńķ ţō ĩńvĩţē ũśēŕś ţō Ĵōĩń ŷōũŕ ŵōŕķśƥàćē\"],\"gWk8gY\":[\"Śĥōũĺď ćĥàńĝĩńĝ à ƒĩēĺď'ś ĺàƀēĺ àĺśō ćĥàńĝē ţĥē ÀƤĨ ńàḿē?\"],\"6Uau97\":[\"Śķĩƥ\"],\"f6Hub0\":[\"Śōŕţ\"],\"65A04M\":[\"Śƥàńĩśĥ\"],\"vnS6Rf\":[\"ŚŚŌ\"],\"ku9TbG\":[\"Śũƀďōḿàĩń\"],\"omhc+7\":[\"Śũƀďōḿàĩń àĺŕēàďŷ ţàķēń\"],\"OlC/tU\":[\"Śũƀďōḿàĩń ćàń ńōţ ƀē ĺōńĝēŕ ţĥàń 30 ćĥàŕàćţēŕś\"],\"ZETwlU\":[\"Śũƀďōḿàĩń ćàń ńōţ ƀē śĥōŕţēŕ ţĥàń 3 ćĥàŕàćţēŕś\"],\"B5jRKH\":[\"Śũƀśćŕĩƥţĩōń ĥàś ƀēēń śŵĩţćĥēď \",[\"to\"]],\"AxQiPW\":[\"Śũḿ\"],\"XYLcNv\":[\"Śũƥƥōŕţ\"],\"9yk9d1\":[\"Śŵĩţćĥ \",[\"from\"]],\"qi74XZ\":[\"Śŵĩţćĥ \",[\"to\"]],\"L6Fg36\":[\"Śŵĩţćĥ ƀĩĺĺĩńĝ \",[\"to\"]],\"AtzMpB\":[\"Śŷńćĥŕōńĩźē Ƒĩēĺď Ĺàƀēĺ àńď ÀƤĨ Ńàḿē\"],\"E3AMmw\":[\"Śŷśţēḿ śēţţĩńĝś - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Śŷśţēḿ Śēţţĩńĝś - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Ţēśţ\"],\"bU9B27\":[\"Ţēśţ Ŵōŕķƒĺōŵ\"],\"2OUtmv\":[\"Ţĥē ďēśćŕĩƥţĩōń ōƒ ţĥĩś ƒĩēĺď\"],\"VGZYbZ\":[\"Ţĥē ēḿàĩĺ àśśōćĩàţēď ţō ŷōũŕ àććōũńţ\"],\"h8mvCd\":[\"Ţĥē ńàḿē àńď ĩćōń ōƒ ţĥĩś ƒĩēĺď\"],\"L97sPr\":[\"Ţĥē ƥàĝē ŷōũ'ŕē śēēķĩńĝ ĩś ēĩţĥēŕ ĝōńē ōŕ ńēvēŕ ŵàś. Ĺēţ'ś ĝēţ ŷōũ ƀàćķ ōń ţŕàćķ\"],\"uWikAA\":[\"Ţĥē vàĺũēś ōƒ ţĥĩś ƒĩēĺď\"],\"+69KDk\":[\"Ţĥē vàĺũēś ōƒ ţĥĩś ƒĩēĺď ḿũśţ ƀē ũńĩǫũē\"],\"PmtLRf\":[\"Ţĥēŕē ŵàś àń ĩśśũē\"],\"hqCwGc\":[\"Ţĥĩś àćţĩōń ćàńńōţ ƀē ũńďōńē. Ţĥĩś ŵĩĺĺ ƥēŕḿàńēńţĺŷ ďēĺēţē ţĥĩś ũśēŕ àńď ŕēḿōvē ţĥēḿ ƒŕōḿ àĺĺ ţĥēĩŕ àśśĩĝńḿēńţś.\"],\"gWGuHC\":[\"Ţĥĩś àćţĩōń ćàńńōţ ƀē ũńďōńē. Ţĥĩś ŵĩĺĺ ƥēŕḿàńēńţĺŷ ďēĺēţē ŷōũŕ ēńţĩŕē ŵōŕķśƥàćē. <0/> Ƥĺēàśē ţŷƥē ĩń ŷōũŕ ēḿàĩĺ ţō ćōńƒĩŕḿ.\"],\"n9nSNJ\":[\"Ţĩḿē ƒōŕḿàţ\"],\"aqMzDX\":[\"ţō ḿōńţĥĺŷ\"],\"WXXiXO\":[\"ţō ŷēàŕĺŷ\"],\"PiUt3N\":[\"Ţŕĩĝĝēŕ Ţŷƥē\"],\"IQ5pAL\":[\"Ţŕĩĝĝēŕ ţŷƥē śĥōũĺď ƀē Ḿàńũàĺ - ŵĥēń ńō ŕēćōŕď(ś) àŕē śēĺēćţēď\"],\"+zy2Nq\":[\"Ţŷƥē\"],\"U83IeL\":[\"Ţŷƥē àńŷţĥĩńĝ\"],\"wSXm5S\":[\"Ũńĩǫũē\"],\"GQCXQS\":[\"Ũńĺĩḿĩţēď ćōńţàćţś\"],\"ONWvwQ\":[\"Ũƥĺōàď\"],\"IagCbF\":[\"ŨŔĹ\"],\"6dMpmz\":[\"Ũśē àś ďŕàƒţ\"],\"oTTQsc\":[\"Ũśē ĺēţţēŕ, ńũḿƀēŕ àńď ďàśĥ ōńĺŷ. Śţàŕţ àńď ƒĩńĩśĥ ŵĩţĥ à ĺēţţēŕ ōŕ à ńũḿƀēŕ\"],\"c6uZUV\":[\"Ũśē ōũŕ ÀƤĨ ōŕ àďď ŷōũŕ ƒĩŕśţ \",[\"objectLabel\"],\" ḿàńũàĺĺŷ\"],\"7PzzBU\":[\"Ũśēŕ\"],\"IjyOjp\":[\"Ũśēŕ ĩś ńōţ ĺōĝĝēď ĩń\"],\"fXVIZq\":[\"Vàĺũēś\"],\"KANz0G\":[\"Vĩēŵ ƀĩĺĺĩńĝ ďēţàĩĺś\"],\"6n7jtr\":[\"Vĩśũàĺĩźē\"],\"id6ein\":[\"Ŵē śũƥƥōŕţ ŷōũŕ śǫũàŕē ƤŃĜś, ĵƤĒĜś àńď ĜĨƑś ũńďēŕ 10Ḿß\"],\"ZS7vYp\":[\"Ŵē ŵĩĺĺ śēńď ƤŌŚŢ ŕēǫũēśţś ţō ţĥĩś ēńďƥōĩńţ ƒōŕ ēvēŕŷ ńēŵ ēvēńţ\"],\"TRDppN\":[\"Ŵēƀĥōōķ\"],\"v1kQyJ\":[\"Ŵēƀĥōōķś\"],\"C51ilI\":[\"Ŵĥēń ţĥē ÀƤĨ ķēŷ ŵĩĺĺ ēxƥĩŕē.\"],\"leUubq\":[\"Ŵĥēń ţĥē ķēŷ ŵĩĺĺ ƀē ďĩśàƀĺēď\"],\"wvyffT\":[\"Ŵōŕķƒĺōŵ ćàńńōţ ƀē ţēśţēď\"],\"pmUArF\":[\"Ŵōŕķśƥàćē\"],\"VicISP\":[\"Ŵōŕķśƥàćē Ďēĺēţĩōń\"],\"Q9pNST\":[\"Ŵŕĩţē à ďēśćŕĩƥţĩōń\"],\"3d1wCB\":[\"ŷēś\"],\"zSkMV0\":[\"Ŷōũ ŵĩĺĺ ƀē ćĥàŕĝēď ĩḿḿēďĩàţēĺŷ ƒōŕ ţĥē ƒũĺĺ ŷēàŕ.\"],\"XVnj6K\":[\"Ŷōũŕ ćŕēďĩţ ƀàĺàńćē ŵĩĺĺ ƀē ũśēď ţō ƥàŷ ţĥē ḿōńţĥĺŷ ƀĩĺĺś.\"],\"9ivpwk\":[\"Ŷōũŕ ńàḿē àś ĩţ ŵĩĺĺ ƀē ďĩśƥĺàŷēď\"],\"RhNbPE\":[\"Ŷōũŕ ŵōŕķśƥàćē ŵĩĺĺ ƀē ďĩśàƀĺēď\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" ōƒ \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" ÀƤĨ Ķēŷ\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 ŵōŕķƒĺōŵ ńōďē ēxēćũţĩōńś\"],\"4EdXYs\":[\"12ĥ (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Ćōńƒĩĝũŕē ƒĩēĺď\"],\"QsMprd\":[\"24ĥ (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Àƀōŕţ\"],\"uyJsf6\":[\"Àƀōũţ\"],\"AeXO77\":[\"Àććōũńţ\"],\"nD0Y+a\":[\"Àććōũńţ Ďēĺēţĩōń\"],\"bPwFdf\":[\"Àććōũńţś\"],\"FQBaXG\":[\"Àćţĩvàţē\"],\"tu8A/k\":[\"Àćţĩvàţē Ŵōŕķƒĺōŵ\"],\"F6pfE9\":[\"Àćţĩvē\"],\"Mue4oc\":[\"Àćţĩvē ÀƤĨ ķēŷś ćŕēàţēď ƀŷ ŷōũ ōŕ ŷōũŕ ţēàḿ.\"],\"m16xKo\":[\"Àďď\"],\"DpV70M\":[\"Àďď Ƒĩēĺď\"],\"dEO3Zx\":[\"Àďď ōƀĴēćţ\"],\"sgXUv+\":[\"Àďď ŚŚŌ Ĩďēńţĩţŷ Ƥŕōvĩďēŕ\"],\"5+ttxv\":[\"Àďď ţō ƀĺōćķĺĩśţ\"],\"pBsoKL\":[\"Àďď ţō ƒàvōŕĩţēś\"],\"m2qDV8\":[\"Àďď ŷōũŕ ƒĩŕśţ \",[\"objectLabel\"]],\"vLO+NG\":[\"Àďďēď \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Àĺĺ\"],\"3saA7W\":[\"Àĺĺ (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Àĺĺ ŕōĺēś\"],\"GMx1K0\":[\"Àĺĺōŵ ĺōĝĩńś ţĥŕōũĝĥ Ĝōōĝĺē'ś śĩńĝĺē śĩĝń-ōń ƒũńćţĩōńàĺĩţŷ.\"],\"dea+zy\":[\"Àĺĺōŵ ĺōĝĩńś ţĥŕōũĝĥ Ḿĩćŕōśōƒţ'ś śĩńĝĺē śĩĝń-ōń ƒũńćţĩōńàĺĩţŷ.\"],\"wMg43c\":[\"Àĺĺōŵ ţĥē ĩńvĩţàţĩōń ōƒ ńēŵ ũśēŕś ƀŷ śĥàŕĩńĝ àń ĩńvĩţē ĺĩńķ.\"],\"vHeVg5\":[\"Àĺĺōŵ ũśēŕś ţō śĩĝń ĩń ŵĩţĥ àń ēḿàĩĺ àńď ƥàśśŵōŕď.\"],\"mJ6m4C\":[\"Àń ōƥţĩōńàĺ ďēśćŕĩƥţĩōń\"],\"0RqpZr\":[\"ÀƤĨ & Ŵēƀĥōōķś\"],\"yRnk5W\":[\"ÀƤĨ Ķēŷ\"],\"5h8ooz\":[\"ÀƤĨ ķēŷś\"],\"kAtj+q\":[\"ÀƤĨ Ńàḿē\"],\"aAIQg2\":[\"Àƥƥēàŕàńćē\"],\"3iX0kh\":[\"Àŕē ŷōũ śũŕē ţĥàţ ŷōũ ŵàńţ ţō ćĥàńĝē ŷōũŕ ƀĩĺĺĩńĝ ĩńţēŕvàĺ?\"],\"nYD/Cq\":[\"Àśćēńďĩńĝ\"],\"rfYmIr\":[\"Àśśĩĝń ŕōĺēś ţō śƥēćĩƒŷ ēàćĥ ḿēḿƀēŕ'ś àććēśś ƥēŕḿĩśśĩōńś\"],\"lxQ+5m\":[\"Àśśĩĝńēď ţō\"],\"Y7Dx6e\":[\"Àţ ĺēàśţ ōńē àũţĥēńţĩćàţĩōń ḿēţĥōď ḿũśţ ƀē ēńàƀĺēď\"],\"P8fBlG\":[\"Àũţĥēńţĩćàţĩōń\"],\"yIVrHZ\":[\"Àũţĥōŕĩźē\"],\"3uQmjD\":[\"Àvēŕàĝē\"],\"Dht9W3\":[\"ßàćķ ţō ćōńţēńţ\"],\"R+w/Va\":[\"ßĩĺĺĩńĝ\"],\"K1172m\":[\"ßĺōćķĺĩśţ\"],\"2yl5lQ\":[\"ßōōķ à Ćàĺĺ\"],\"PmmvzS\":[\"Ćàĺćũĺàţē\"],\"AjVXBS\":[\"Ćàĺēńďàŕ\"],\"EUpfsd\":[\"Ćàĺēńďàŕś\"],\"dEgA5A\":[\"Ćàńćēĺ\"],\"0TllC8\":[\"Ćàńćēĺ àńŷţĩḿē\"],\"rRK/Lf\":[\"Ćàńćēĺ Ƥĺàń\"],\"N6gPiD\":[\"Ćàńćēĺ ŷōũŕ śũƀśćŕĩƥţĩōń\"],\"OfzMnb\":[\"Ćĥàńĝē \",[\"to\"]],\"VhMDMg\":[\"Ćĥàńĝē Ƥàśśŵōŕď\"],\"SviKkE\":[\"Ćĥĩńēśē — Śĩḿƥĺĩƒĩēď\"],\"dzb4Ep\":[\"Ćĥĩńēśē — Ţŕàďĩţĩōńàĺ\"],\"JEFFOR\":[\"Ćĥōōśē àń ōƀĴēćţ\"],\"KT6rEB\":[\"Ćĥōōśē ŷōũŕ ƥŕōvĩďēŕ\"],\"9qP96p\":[\"Ćĥōōśē ŷōũŕ Ţŕĩàĺ\"],\"yz7wBu\":[\"Ćĺōśē\"],\"+zUMwJ\":[\"Ćōńƒĩĝũŕē àń ŚŚŌ ćōńńēćţĩōń\"],\"QTNsSm\":[\"Ćōńƒĩĝũŕē àńď ćũśţōḿĩźē ŷōũŕ ćàĺēńďàŕ ƥŕēƒēŕēńćēś.\"],\"aGwm+D\":[\"Ćōńƒĩĝũŕē ĥōŵ ďàţēś àŕē ďĩśƥĺàŷēď àćŕōśś ţĥē àƥƥ\"],\"Bh4GBD\":[\"Ćōńƒĩĝũŕē ŷōũŕ ēḿàĩĺś àńď ćàĺēńďàŕ śēţţĩńĝś.\"],\"D8ATlr\":[\"Ćōńńēćţ à ńēŵ àććōũńţ ţō ŷōũŕ ŵōŕķśƥàćē\"],\"Zgi9Fd\":[\"Ćōńńēćţ ŵĩţĥ Ĝōōĝĺē\"],\"IOfqM8\":[\"Ćōńńēćţ ŵĩţĥ Ḿĩćŕōśōƒţ\"],\"9TzudL\":[\"Ćōńńēćţēď àććōũńţś\"],\"M73whl\":[\"Ćōńţēxţ\"],\"xGVfLh\":[\"Ćōńţĩńũē\"],\"CcGOj+\":[\"Ćōƥĩĺōţ\"],\"7eVkEH\":[\"Ćōƥŷ ĩńvĩţàţĩōń ĺĩńķ\"],\"Ej5euX\":[\"Ćōƥŷ ţĥĩś ķēŷ àś ĩţ ŵĩĺĺ ńōţ ƀē vĩśĩƀĺē àĝàĩń\"],\"wBMjJ2\":[\"Ćōũńţ\"],\"EkZfen\":[\"Ćōũńţ àĺĺ\"],\"vQJINq\":[\"Ćōũńţ ēḿƥţŷ\"],\"DzRsDJ\":[\"Ćōũńţ ńōţ ēḿƥţŷ\"],\"9FZBbf\":[\"Ćōũńţ ũńĩǫũē vàĺũēś\"],\"zNoOC2\":[\"Ćŕēàţē à ŵōŕķƒĺōŵ àńď ŕēţũŕń ĥēŕē ţō vĩēŵ ĩţś vēŕśĩōńś\"],\"uXGLuq\":[\"Ćŕēàţē ÀƤĨ ķēŷ\"],\"d0DCww\":[\"Ćŕēàţē ńēŵ ŕēćōŕď\"],\"dkAPxi\":[\"Ćŕēàţē Ŵēƀĥōōķ\"],\"8skTDV\":[\"Ćũśţōḿ ōƀĴēćţś\"],\"qt+EaC\":[\"Ćũśţōḿĩśē ţĥē ƒĩēĺďś àvàĩĺàƀĺē ĩń ţĥē \",[\"objectLabelSingular\"],\" vĩēŵś.\"],\"CMhr4u\":[\"Ćũśţōḿĩźē Ďōḿàĩń\"],\"bCJa9l\":[\"Ćũśţōḿĩźē ŷōũŕ ŵōŕķśƥàćē śēćũŕĩţŷ\"],\"Zz6Cxn\":[\"Ďàńĝēŕ źōńē\"],\"5cNMFz\":[\"Ďàţà ḿōďēĺ\"],\"r+cVRP\":[\"Ďàţà ţŷƥē\"],\"mYGY3B\":[\"Ďàţē\"],\"Ud9zHv\":[\"Ďàţē àńď ţĩḿē\"],\"5y3O+A\":[\"Ďēàćţĩvàţē\"],\"qk4i22\":[\"Ďēàćţĩvàţē \\\"Śŷńćĥŕōńĩźē ŌƀĴēćţś Ĺàƀēĺś àńď ÀƤĨ Ńàḿēś\\\" ţō śēţ à ćũśţōḿ ÀƤĨ ńàḿē\"],\"gexAq8\":[\"Ďēàćţĩvàţē ţĥĩś ƒĩēĺď\"],\"4tpC8V\":[\"Ďēàćţĩvàţē Ŵōŕķƒĺōŵ\"],\"Y2ImVJ\":[\"Ďēƒĩńē ţĥē ńàḿē àńď ďēśćŕĩƥţĩōń ōƒ ŷōũŕ ōƀĴēćţ\"],\"cnGeoo\":[\"Ďēĺēţē\"],\"ZDGm40\":[\"Ďēĺēţē àććōũńţ\"],\"gAz0S5\":[\"Ďēĺēţē àććōũńţ àńď àĺĺ ţĥē àśśōćĩàţēď ďàţà\"],\"hGfWDm\":[\"Ďēĺēţē ÀƤĨ ķēŷ\"],\"4dpwsE\":[\"Ďēĺēţē ŕēćōŕď\"],\"kf0A63\":[\"Ďēĺēţē ŕēćōŕďś\"],\"T6S2Ns\":[\"Ďēĺēţē ţĥĩś ĩńţēĝŕàţĩōń\"],\"snMaH4\":[\"Ďēĺēţē ŵēƀĥōōķ\"],\"kYu0eF\":[\"Ďēĺēţē ŵōŕķśƥàćē\"],\"mk2Ygs\":[\"Ďēĺēţē ŷōũŕ ŵĥōĺē ŵōŕķśƥàćē\"],\"Cko536\":[\"Ďēśćēńďĩńĝ\"],\"Nu4oKW\":[\"Ďēśćŕĩƥţĩōń\"],\"2xxBws\":[\"Ďēśţŕōŷ\"],\"n+SX4g\":[\"Ďēvēĺōƥēŕś\"],\"zAg2B9\":[\"Ďĩśćàŕď Ďŕàƒţ\"],\"i66xz9\":[\"Ďĩśƥĺàŷ àś ŕēĺàţĩvē ďàţē\"],\"EoKe5U\":[\"Ďōḿàĩń\"],\"QVVmxi\":[\"Ē.ĝ. ƀàćķōƒƒĩćē ĩńţēĝŕàţĩōń\"],\"tOkc8o\":[\"Ēàŕĺĩēśţ\"],\"JTbQuO\":[\"Ēàŕĺĩēśţ ďàţē\"],\"v+uKyy\":[\"Ēďĩţ ƀĩĺĺĩńĝ ĩńţēŕvàĺ\"],\"h2KoTu\":[\"Ēďĩţ ƥàŷḿēńţ ḿēţĥōď, śēē ŷōũŕ ĩńvōĩćēś àńď ḿōŕē\"],\"6o1M/Q\":[\"Ēďĩţ ŷōũŕ śũƀďōḿàĩń ńàḿē ōŕ śēţ à ćũśţōḿ ďōḿàĩń.\"],\"O3oNi5\":[\"Ēḿàĩĺ\"],\"lfQsvW\":[\"Ēḿàĩĺ ĩńţēĝŕàţĩōń\"],\"QT/Wo7\":[\"Ēḿàĩĺ ōŕ ďōḿàĩń ĩś àĺŕēàďŷ ĩń ƀĺōćķĺĩśţ\"],\"BXEcos\":[\"Ēḿàĩĺś\"],\"eXoH4Q\":[\"ēḿƥĺōŷēēś\"],\"gqv5ZL\":[\"Ēḿƥĺōŷēēś\"],\"N2S1rs\":[\"Ēḿƥţŷ\"],\"T3juzf\":[\"Ēńďƥōĩńţ ŨŔĹ\"],\"lYGfRP\":[\"Ēńĝĺĩśĥ\"],\"/bfFKe\":[\"ĒńĴōŷ à \",[\"withCreditCardTrialPeriodDuration\"],\"-ďàŷś ƒŕēē ţŕĩàĺ\"],\"GpB8YV\":[\"Ēńţēŕƥŕĩśē\"],\"c3qGJX\":[\"Ēŕŕōŕ ďēĺēţĩńĝ àƥĩ ķēŷ: \",[\"err\"]],\"bj7nh3\":[\"Ēŕŕōŕ ŕēĝēńēŕàţĩńĝ àƥĩ ķēŷ: \",[\"err\"]],\"VSQxWH\":[\"Ēŕŕōŕ ŵĥĩĺē śŵĩţćĥĩńĝ śũƀśćŕĩƥţĩōń \",[\"to\"],\".\"],\"JLxMta\":[\"Ēśţàƀĺĩśĥ Ŵēƀĥōōķ ēńďƥōĩńţś ƒōŕ ńōţĩƒĩćàţĩōńś ōń àśŷńćĥŕōńōũś ēvēńţś.\"],\"cIgBjB\":[\"Ēxćĺũďē ţĥē ƒōĺĺōŵĩńĝ ƥēōƥĺē àńď ďōḿàĩńś ƒŕōḿ ḿŷ ēḿàĩĺ śŷńć\"],\"fV7V51\":[\"Ēxĩśţĩńĝ ōƀĴēćţś\"],\"IZ4o2e\":[\"Ēxĩţ Śēţţĩńĝś\"],\"tXGQvS\":[\"Ēxƥēćţēď śēĺēćţēď ńōďē ţō ƀē à ćŕēàţē śţēƥ ńōďē.\"],\"bKBhgb\":[\"Ēxƥēŕĩēńćē\"],\"LxRNPw\":[\"Ēxƥĩŕàţĩōń\"],\"SkXfL0\":[\"Ēxƥĩŕàţĩōń Ďàţē\"],\"i9qiyR\":[\"Ēxƥĩŕēś ĩń\"],\"GS+Mus\":[\"Ēxƥōŕţ\"],\"ep2rbf\":[\"Ēxƥōŕţ ŕēćōŕďś\"],\"q46CjD\":[\"Ēxƥōŕţ ţō ƤĎƑ\"],\"DaGxE0\":[\"Ēxƥōŕţ vĩēŵ\"],\"X9kySA\":[\"Ƒàvōŕĩţēś\"],\"zXgopL\":[\"Ƒĩēĺď ţŷƥē\"],\"vF68cg\":[\"Ƒĩēĺďś\"],\"3w/aqw\":[\"Ƒĩēĺďś Ćōũńţ\"],\"o7J4JM\":[\"Ƒĩĺţēŕ\"],\"cSev+j\":[\"Ƒĩĺţēŕś\"],\"nLC6tu\":[\"Ƒŕēńćĥ\"],\"aTieE0\":[\"ƒŕōḿ ḿōńţĥĺŷ ţō ŷēàŕĺŷ\"],\"K04lE5\":[\"ƒŕōḿ ŷēàŕĺŷ ţō ḿōńţĥĺŷ\"],\"scmRyR\":[\"Ƒũĺĺ àććēśś\"],\"xANKBj\":[\"Ƒũńćţĩōńś\"],\"Weq9zb\":[\"Ĝēńēŕàĺ\"],\"DDcvSo\":[\"Ĝēŕḿàń\"],\"NXEW3h\":[\"Ĝēţ ţĥē ḿōśţ ōũţ ōƒ ŷōũŕ ŵōŕķśƥàćē ƀŷ ĩńvĩţĩńĝ ŷōũŕ ţēàḿ.\"],\"zSGbaR\":[\"Ĝēţ ŷōũŕ śũƀśćŕĩƥţĩōń\"],\"2GT3Hf\":[\"Ĝĺōƀàĺ\"],\"hWp1MY\":[\"Ĝŕàńţ Ţŵēńţŷ śũƥƥōŕţ ţēḿƥōŕàŕŷ àććēśś ţō ŷōũŕ ŵōŕķśƥàćē śō ŵē ćàń ţŕōũƀĺēśĥōōţ ƥŕōƀĺēḿś ōŕ ŕēćōvēŕ ćōńţēńţ ōń ŷōũŕ ƀēĥàĺƒ. Ŷōũ ćàń ŕēvōķē àććēśś àţ àńŷ ţĩḿē.\"],\"vLyv1R\":[\"Ĥĩďē\"],\"XTWO+W\":[\"Ĩćōń àńď Ńàḿē\"],\"sJGljQ\":[\"Ĩďēńţĩƒĩēŕ\"],\"j843N3\":[\"Ĩƒ ŷōũ’vē ĺōśţ ţĥĩś ķēŷ, ŷōũ ćàń ŕēĝēńēŕàţē ĩţ, ƀũţ ƀē àŵàŕē ţĥàţ àńŷ śćŕĩƥţ ũśĩńĝ ţĥĩś ķēŷ ŵĩĺĺ ńēēď ţō ƀē ũƥďàţēď. Ƥĺēàśē ţŷƥē\\\"\",[\"confirmationValue\"],\"\\\" ţō ćōńƒĩŕḿ.\"],\"NoNwIX\":[\"Ĩńàćţĩvē\"],\"pZ/USH\":[\"Ĩńďēxēś\"],\"JE2tjr\":[\"Ĩńƥũţ ḿũśţ ƀē ĩń ćàḿēĺ ćàśē àńď ćàńńōţ śţàŕţ ŵĩţĥ à ńũḿƀēŕ\"],\"AwUsnG\":[\"Ĩńśţàńćēś\"],\"nbfdhU\":[\"Ĩńţēĝŕàţĩōńś\"],\"NtFk/Z\":[\"Ĩńvàĺĩď àũţĥ ƥŕōvĩďēŕ\"],\"B2Tpo0\":[\"Ĩńvàĺĩď ēḿàĩĺ\"],\"/m52AE\":[\"Ĩńvàĺĩď ēḿàĩĺ ōŕ ďōḿàĩń\"],\"QdoUFL\":[\"Ĩńvàĺĩď ƒōŕḿ vàĺũēś\"],\"0M8+El\":[\"Ĩńvĩţē ƀŷ ēḿàĩĺ\"],\"PWIq/W\":[\"Ĩńvĩţē ƀŷ ĺĩńķ\"],\"3athPG\":[\"Ĩńvĩţē ƀŷ Ĺĩńķ\"],\"5IfmKA\":[\"Ĩńvĩţē ĺĩńķ śēńţ ţō ēḿàĩĺ àďďŕēśśēś\"],\"d+Y+rP\":[\"Ĩńvĩţē ŷōũŕ ţēàḿ\"],\"Lj7sBL\":[\"Ĩţàĺĩàń\"],\"dFtidv\":[\"ĵàƥàńēśē\"],\"h6S9Yz\":[\"Ķōŕēàń\"],\"zrpwCd\":[\"Ĺàƀ\"],\"vXIe7J\":[\"Ĺàńĝũàĝē\"],\"wL3cK8\":[\"Ĺàţēśţ\"],\"Kcjbmz\":[\"Ĺàţēśţ ďàţē\"],\"pQjjYo\":[\"Ĺĩńķ ćōƥĩēď ţō ćĺĩƥƀōàŕď\"],\"FgAxTj\":[\"Ĺōĝ ōũţ\"],\"nOhz3x\":[\"Ĺōĝōũţ\"],\"T6YjCk\":[\"Ḿàńàĝē Ḿēḿƀēŕś\"],\"4cjU2u\":[\"Ḿàńàĝē ţĥē ḿēḿƀēŕś ōƒ ŷōũŕ śƥàćē ĥēŕē\"],\"FyFNsd\":[\"Ḿàńàĝē ŷōũŕ ĩńţēŕńēţ àććōũńţś.\"],\"36kYu0\":[\"Ḿàńàĝē ŷōũŕ śũƀśćŕĩƥţĩōń\"],\"3Sdni6\":[\"Ḿàŕķ àś ďōńē\"],\"CK1KXz\":[\"Ḿàx\"],\"wlQNTg\":[\"Ḿēḿƀēŕś\"],\"eTUF28\":[\"Ḿĩń\"],\"3Siwmw\":[\"Ḿōŕē ōƥţĩōńś\"],\"iSLA/r\":[\"Ḿōvē ĺēƒţ\"],\"Ubl2by\":[\"Ḿōvē ŕĩĝĥţ\"],\"6YtxFj\":[\"Ńàḿē\"],\"z+6jaZ\":[\"Ńàḿē ōƒ ŷōũŕ ÀƤĨ ķēŷ\"],\"J7w8lI\":[\"Ńàḿē ōƒ ŷōũŕ ŵōŕķśƥàćē\"],\"2T8KCk\":[\"Ńàvĩĝàţē ţō ńēxţ ŕēćōŕď\"],\"veSA19\":[\"Ńàvĩĝàţē ţō ńēxţ vēŕśĩōń\"],\"ZTEho+\":[\"Ńàvĩĝàţē ţō ńēxţ ŵōŕķƒĺōŵ\"],\"2tw9bo\":[\"Ńàvĩĝàţē ţō ƥŕēvĩōũś ŕēćōŕď\"],\"I+Pm5V\":[\"Ńàvĩĝàţē ţō ƥŕēvĩōũś vēŕśĩōń\"],\"QVUN3K\":[\"Ńàvĩĝàţē ţō ƥŕēvĩōũś ŵōŕķƒĺōŵ\"],\"isRobC\":[\"Ńēŵ\"],\"Kcr9Fr\":[\"Ńēŵ àććōũńţ\"],\"o8MyXb\":[\"Ńēŵ ķēŷ\"],\"j313SZ\":[\"Ńēŵ Ķēŷ\"],\"hFxdey\":[\"Ńēŵ ŌƀĴēćţ\"],\"7vhWI8\":[\"Ńēŵ Ƥàśśŵōŕď\"],\"BcCzLv\":[\"Ńēŵ ŕēćōŕď\"],\"2lmOC5\":[\"Ńēŵ Ŕōĺē\"],\"U1DAok\":[\"Ńēŵ Ŵēƀĥōōķ\"],\"pwenQu\":[\"Ńō ćōńńēćţēď àććōũńţ\"],\"0uWxPM\":[\"Ńō ŵōŕķƒĺōŵ ŕũńś ŷēţ\"],\"AQCvCC\":[\"Ńō ŵōŕķƒĺōŵ vēŕśĩōńś ŷēţ\"],\"4wUkDk\":[\"Ńōţ ēḿƥţŷ\"],\"W0i24j\":[\"ŌƀĴēćţ\"],\"B3toQF\":[\"ŌƀĴēćţś\"],\"KNz3EF\":[\"Ōƒƒ ţĥē ƀēàţēń ƥàţĥ\"],\"OV5wZZ\":[\"Ōƥēńēď\"],\"0zpgxV\":[\"Ōƥţĩōńś\"],\"BzEFor\":[\"ōŕ\"],\"/IX/7x\":[\"Ōţĥēŕ\"],\"boJlGf\":[\"Ƥàĝē Ńōţ Ƒōũńď\"],\"8ZsakT\":[\"Ƥàśśŵōŕď\"],\"mi6Rel\":[\"Ƥàśśŵōŕď ŕēśēţ ĺĩńķ ĥàś ƀēēń śēńţ ţō ţĥē ēḿàĩĺ\"],\"SrVzRe\":[\"Ƥēŕćēńţ\"],\"yIK1GU\":[\"Ƥēŕćēńţ ēḿƥţŷ\"],\"PWLd4c\":[\"Ƥēŕćēńţ ńōţ ēḿƥţŷ\"],\"Bv3y5w\":[\"Ƥēŕḿàńēńţĺŷ ďēśţŕōŷ ŕēćōŕď\"],\"N0+GsR\":[\"Ƥĩćţũŕē\"],\"jEw0Mr\":[\"Ƥĺēàśē ēńţēŕ à vàĺĩď ŨŔĹ\"],\"6nsIo3\":[\"Ƥĺēàśē ţŷƥē \\\"\",[\"confirmationValue\"],\"\\\" ţō ćōńƒĩŕḿ ŷōũ ŵàńţ ţō ďēĺēţē ţĥĩś ÀƤĨ Ķēŷ. ßē àŵàŕē ţĥàţ àńŷ śćŕĩƥţ ũśĩńĝ ţĥĩś ķēŷ ŵĩĺĺ śţōƥ ŵōŕķĩńĝ.\"],\"mFZTXr\":[\"Ƥĺēàśē ţŷƥē \",[\"confirmationText\"],\" ţō ćōńƒĩŕḿ ŷōũ ŵàńţ ţō ďēĺēţē ţĥĩś ŵēƀĥōōķ.\"],\"MOERNx\":[\"Ƥōŕţũĝũēśē\"],\"0nsqwk\":[\"Ƥōŕţũĝũēśē — ßŕàźĩĺ\"],\"xtXHeo\":[\"Ƥōŕţũĝũēśē — Ƥōŕţũĝàĺ\"],\"R7+D0/\":[\"Ƥōŕţũĝũēśē (ßŕàźĩĺ)\"],\"512Uma\":[\"Ƥōŕţũĝũēśē (Ƥōŕţũĝàĺ)\"],\"rdUucN\":[\"Ƥŕēvĩēŵ\"],\"vERlcd\":[\"Ƥŕōƒĩĺē\"],\"YJgRqq\":[\"Ƥśēũďō-Ēńĝĺĩśĥ\"],\"ibPuCP\":[\"Ŕēàď ďōćũḿēńţàţĩōń\"],\"v3xM25\":[\"Ŕēćēĩvē àń ēḿàĩĺ ćōńţàĩńĩńĝ ƥàśśŵōŕď ũƥďàţē ĺĩńķ\"],\"dSCufP\":[\"Ŕēćōŕď Śēĺēćţĩōń\"],\"vpZcGd\":[\"Ŕēĝēńēŕàţē àń ÀƤĨ ķēŷ\"],\"Mwqo5m\":[\"Ŕēĝēńēŕàţē ķēŷ\"],\"D+Mv78\":[\"Ŕēĝēńēŕàţē Ķēŷ\"],\"5icoS1\":[\"Ŕēĺēàśēś\"],\"t/YqKh\":[\"Ŕēḿōvē\"],\"T/pF0Z\":[\"Ŕēḿōvē ƒŕōḿ ƒàvōŕĩţēś\"],\"KbS2K9\":[\"Ŕēśēţ Ƥàśśŵōŕď\"],\"1IWc1n\":[\"Ŕēśēţ ţō\"],\"kx0s+n\":[\"Ŕēśũĺţś\"],\"5dJK4M\":[\"Ŕōĺēś\"],\"UX0N2y\":[\"Ŕũń à ŵōŕķƒĺōŵ àńď ŕēţũŕń ĥēŕē ţō vĩēŵ ĩţś ēxēćũţĩōńś\"],\"A1taO8\":[\"Śēàŕćĥ\"],\"l1/uy2\":[\"Śēàŕćĥ à ƒĩēĺď...\"],\"k7kp5/\":[\"Śēàŕćĥ àń ĩńďēx...\"],\"7taA9j\":[\"Śēàŕćĥ ƒĩēĺďś\"],\"ofuw3g\":[\"Śēàŕćĥ ƒōŕ àń ōƀĴēćţ...\"],\"IMeaSJ\":[\"Śēàŕćĥ ŕēćōŕďś\"],\"a3LDKx\":[\"Śēćũŕĩţŷ\"],\"QREcJS\":[\"Śēē àćţĩvē vēŕśĩōń\"],\"OpPn5Z\":[\"Śēē ŕũńś\"],\"EtyY4+\":[\"Śēē vēŕśĩōńś\"],\"lYhPN0\":[\"Śēē vēŕśĩōńś ĥĩśţōŕŷ\"],\"xraglu\":[\"Śēĺēćţ ţĥē ēvēńţś ŷōũ ŵĩśĥ ţō śēńď ţō ţĥĩś ēńďƥōĩńţ\"],\"AXTJAW\":[\"Śēĺēćţ ŷōũŕ ƥŕēƒēŕŕēď ĺàńĝũàĝē\"],\"mjK8F3\":[\"Śēńď àń ĩńvĩţē ēḿàĩĺ ţō ŷōũŕ ţēàḿ\"],\"yy5k7a\":[\"Śēŕvēŕ Àďḿĩń Ƥàńēĺ\"],\"V7fgiB\":[\"Śēţ ēḿàĩĺ vĩśĩƀĩĺĩţŷ, ḿàńàĝē ŷōũŕ ƀĺōćķĺĩśţ àńď ḿōŕē.\"],\"cx14rp\":[\"Śēţ ţĥē ńàḿē ōƒ ŷōũŕ ďōḿàĩń\"],\"tn41zE\":[\"Śēţ ţĥē ńàḿē ōƒ ŷōũŕ śũƀďōḿàĩń\"],\"Tz0i8g\":[\"Śēţţĩńĝś\"],\"Vy9kmk\":[\"Śĥàŕē ţĥĩś ĺĩńķ ţō ĩńvĩţē ũśēŕś ţō Ĵōĩń ŷōũŕ ŵōŕķśƥàćē\"],\"gWk8gY\":[\"Śĥōũĺď ćĥàńĝĩńĝ à ƒĩēĺď'ś ĺàƀēĺ àĺśō ćĥàńĝē ţĥē ÀƤĨ ńàḿē?\"],\"6Uau97\":[\"Śķĩƥ\"],\"f6Hub0\":[\"Śōŕţ\"],\"65A04M\":[\"Śƥàńĩśĥ\"],\"vnS6Rf\":[\"ŚŚŌ\"],\"ku9TbG\":[\"Śũƀďōḿàĩń\"],\"omhc+7\":[\"Śũƀďōḿàĩń àĺŕēàďŷ ţàķēń\"],\"OlC/tU\":[\"Śũƀďōḿàĩń ćàń ńōţ ƀē ĺōńĝēŕ ţĥàń 30 ćĥàŕàćţēŕś\"],\"ZETwlU\":[\"Śũƀďōḿàĩń ćàń ńōţ ƀē śĥōŕţēŕ ţĥàń 3 ćĥàŕàćţēŕś\"],\"B5jRKH\":[\"Śũƀśćŕĩƥţĩōń ĥàś ƀēēń śŵĩţćĥēď \",[\"to\"]],\"AxQiPW\":[\"Śũḿ\"],\"XYLcNv\":[\"Śũƥƥōŕţ\"],\"9yk9d1\":[\"Śŵĩţćĥ \",[\"from\"]],\"qi74XZ\":[\"Śŵĩţćĥ \",[\"to\"]],\"L6Fg36\":[\"Śŵĩţćĥ ƀĩĺĺĩńĝ \",[\"to\"]],\"AtzMpB\":[\"Śŷńćĥŕōńĩźē Ƒĩēĺď Ĺàƀēĺ àńď ÀƤĨ Ńàḿē\"],\"E3AMmw\":[\"Śŷśţēḿ śēţţĩńĝś - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Śŷśţēḿ Śēţţĩńĝś - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Ţēśţ\"],\"bU9B27\":[\"Ţēśţ Ŵōŕķƒĺōŵ\"],\"2OUtmv\":[\"Ţĥē ďēśćŕĩƥţĩōń ōƒ ţĥĩś ƒĩēĺď\"],\"VGZYbZ\":[\"Ţĥē ēḿàĩĺ àśśōćĩàţēď ţō ŷōũŕ àććōũńţ\"],\"h8mvCd\":[\"Ţĥē ńàḿē àńď ĩćōń ōƒ ţĥĩś ƒĩēĺď\"],\"L97sPr\":[\"Ţĥē ƥàĝē ŷōũ'ŕē śēēķĩńĝ ĩś ēĩţĥēŕ ĝōńē ōŕ ńēvēŕ ŵàś. Ĺēţ'ś ĝēţ ŷōũ ƀàćķ ōń ţŕàćķ\"],\"uWikAA\":[\"Ţĥē vàĺũēś ōƒ ţĥĩś ƒĩēĺď\"],\"+69KDk\":[\"Ţĥē vàĺũēś ōƒ ţĥĩś ƒĩēĺď ḿũśţ ƀē ũńĩǫũē\"],\"PmtLRf\":[\"Ţĥēŕē ŵàś àń ĩśśũē\"],\"hqCwGc\":[\"Ţĥĩś àćţĩōń ćàńńōţ ƀē ũńďōńē. Ţĥĩś ŵĩĺĺ ƥēŕḿàńēńţĺŷ ďēĺēţē ţĥĩś ũśēŕ àńď ŕēḿōvē ţĥēḿ ƒŕōḿ àĺĺ ţĥēĩŕ àśśĩĝńḿēńţś.\"],\"gWGuHC\":[\"Ţĥĩś àćţĩōń ćàńńōţ ƀē ũńďōńē. Ţĥĩś ŵĩĺĺ ƥēŕḿàńēńţĺŷ ďēĺēţē ŷōũŕ ēńţĩŕē ŵōŕķśƥàćē. <0/> Ƥĺēàśē ţŷƥē ĩń ŷōũŕ ēḿàĩĺ ţō ćōńƒĩŕḿ.\"],\"n9nSNJ\":[\"Ţĩḿē ƒōŕḿàţ\"],\"aqMzDX\":[\"ţō ḿōńţĥĺŷ\"],\"WXXiXO\":[\"ţō ŷēàŕĺŷ\"],\"PiUt3N\":[\"Ţŕĩĝĝēŕ Ţŷƥē\"],\"IQ5pAL\":[\"Ţŕĩĝĝēŕ ţŷƥē śĥōũĺď ƀē Ḿàńũàĺ - ŵĥēń ńō ŕēćōŕď(ś) àŕē śēĺēćţēď\"],\"+zy2Nq\":[\"Ţŷƥē\"],\"U83IeL\":[\"Ţŷƥē àńŷţĥĩńĝ\"],\"wSXm5S\":[\"Ũńĩǫũē\"],\"GQCXQS\":[\"Ũńĺĩḿĩţēď ćōńţàćţś\"],\"ONWvwQ\":[\"Ũƥĺōàď\"],\"IagCbF\":[\"ŨŔĹ\"],\"6dMpmz\":[\"Ũśē àś ďŕàƒţ\"],\"oTTQsc\":[\"Ũśē ĺēţţēŕ, ńũḿƀēŕ àńď ďàśĥ ōńĺŷ. Śţàŕţ àńď ƒĩńĩśĥ ŵĩţĥ à ĺēţţēŕ ōŕ à ńũḿƀēŕ\"],\"c6uZUV\":[\"Ũśē ōũŕ ÀƤĨ ōŕ àďď ŷōũŕ ƒĩŕśţ \",[\"objectLabel\"],\" ḿàńũàĺĺŷ\"],\"7PzzBU\":[\"Ũśēŕ\"],\"IjyOjp\":[\"Ũśēŕ ĩś ńōţ ĺōĝĝēď ĩń\"],\"fXVIZq\":[\"Vàĺũēś\"],\"KANz0G\":[\"Vĩēŵ ƀĩĺĺĩńĝ ďēţàĩĺś\"],\"6n7jtr\":[\"Vĩśũàĺĩźē\"],\"id6ein\":[\"Ŵē śũƥƥōŕţ ŷōũŕ śǫũàŕē ƤŃĜś, ĵƤĒĜś àńď ĜĨƑś ũńďēŕ 10Ḿß\"],\"ZS7vYp\":[\"Ŵē ŵĩĺĺ śēńď ƤŌŚŢ ŕēǫũēśţś ţō ţĥĩś ēńďƥōĩńţ ƒōŕ ēvēŕŷ ńēŵ ēvēńţ\"],\"TRDppN\":[\"Ŵēƀĥōōķ\"],\"v1kQyJ\":[\"Ŵēƀĥōōķś\"],\"C51ilI\":[\"Ŵĥēń ţĥē ÀƤĨ ķēŷ ŵĩĺĺ ēxƥĩŕē.\"],\"leUubq\":[\"Ŵĥēń ţĥē ķēŷ ŵĩĺĺ ƀē ďĩśàƀĺēď\"],\"wvyffT\":[\"Ŵōŕķƒĺōŵ ćàńńōţ ƀē ţēśţēď\"],\"pmUArF\":[\"Ŵōŕķśƥàćē\"],\"VicISP\":[\"Ŵōŕķśƥàćē Ďēĺēţĩōń\"],\"Q9pNST\":[\"Ŵŕĩţē à ďēśćŕĩƥţĩōń\"],\"3d1wCB\":[\"ŷēś\"],\"zSkMV0\":[\"Ŷōũ ŵĩĺĺ ƀē ćĥàŕĝēď ĩḿḿēďĩàţēĺŷ ƒōŕ ţĥē ƒũĺĺ ŷēàŕ.\"],\"XVnj6K\":[\"Ŷōũŕ ćŕēďĩţ ƀàĺàńćē ŵĩĺĺ ƀē ũśēď ţō ƥàŷ ţĥē ḿōńţĥĺŷ ƀĩĺĺś.\"],\"9ivpwk\":[\"Ŷōũŕ ńàḿē àś ĩţ ŵĩĺĺ ƀē ďĩśƥĺàŷēď\"],\"RhNbPE\":[\"Ŷōũŕ ŵōŕķśƥàćē ŵĩĺĺ ƀē ďĩśàƀĺēď\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/generated/pt-BR.ts b/packages/twenty-front/src/locales/generated/pt-BR.ts index 8a913ba7e889..31a2d12b65d8 100644 --- a/packages/twenty-front/src/locales/generated/pt-BR.ts +++ b/packages/twenty-front/src/locales/generated/pt-BR.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" de \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" Chave da API\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1.000 execuções de nós de fluxo de trabalho\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configurar campo\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abortar\"],\"uyJsf6\":[\"Sobre\"],\"AeXO77\":[\"Conta\"],\"nD0Y+a\":[\"Exclusão de conta\"],\"bPwFdf\":[\"Contas\"],\"FQBaXG\":[\"Ativar\"],\"tu8A/k\":[\"Ativar fluxo de trabalho\"],\"F6pfE9\":[\"Ativo\"],\"Mue4oc\":[\"Chaves de API ativas criadas por você ou por sua equipe.\"],\"m16xKo\":[\"Adicionar\"],\"DpV70M\":[\"Adicionar campo\"],\"dEO3Zx\":[\"Adicionar objeto\"],\"sgXUv+\":[\"Adicionar provedor de identidade SSO\"],\"5+ttxv\":[\"Adicionar à lista de bloqueio\"],\"pBsoKL\":[\"Adicionar aos favoritos\"],\"m2qDV8\":[\"Adicione seu primeiro \",[\"objectLabel\"]],\"vLO+NG\":[\"Adicionado \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Todos\"],\"3saA7W\":[\"Todos (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Todas as funções\"],\"GMx1K0\":[\"Permitir logins por meio da funcionalidade de logon único do Google.\"],\"dea+zy\":[\"Permitir logins por meio da funcionalidade de logon único da Microsoft.\"],\"wMg43c\":[\"Permita o convite de novos usuários compartilhando um link de convite.\"],\"vHeVg5\":[\"Permita que os usuários façam login com um e-mail e uma senha.\"],\"mJ6m4C\":[\"Uma descrição opcional\"],\"0RqpZr\":[\"API e webhooks\"],\"yRnk5W\":[\"Chave da API\"],\"5h8ooz\":[\"Chaves de API\"],\"kAtj+q\":[\"Nome da API\"],\"aAIQg2\":[\"Aparência\"],\"3iX0kh\":[\"Tem certeza de que deseja alterar o intervalo de cobrança?\"],\"nYD/Cq\":[\"Ascendente\"],\"rfYmIr\":[\"Atribuir funções para especificar as permissões de acesso de cada membro\"],\"lxQ+5m\":[\"Atribuído a\"],\"Y7Dx6e\":[\"Pelo menos um método de autenticação deve estar ativado\"],\"P8fBlG\":[\"Autenticação\"],\"yIVrHZ\":[\"Autorizar\"],\"3uQmjD\":[\"Média\"],\"Dht9W3\":[\"Voltar ao conteúdo\"],\"R+w/Va\":[\"Faturamento\"],\"K1172m\":[\"Lista de bloqueio\"],\"2yl5lQ\":[\"Agendar uma chamada\"],\"PmmvzS\":[\"Calcular\"],\"AjVXBS\":[\"Calendário\"],\"EUpfsd\":[\"Calendários\"],\"dEgA5A\":[\"Cancelar\"],\"0TllC8\":[\"Cancelar a qualquer momento\"],\"rRK/Lf\":[\"Cancelar plano\"],\"N6gPiD\":[\"Cancelar sua assinatura\"],\"OfzMnb\":[\"Alterar \",[\"to\"]],\"VhMDMg\":[\"Alterar senha\"],\"SviKkE\":[\"Chinês - Simplificado\"],\"dzb4Ep\":[\"Chinês - Tradicional\"],\"JEFFOR\":[\"Escolha um objeto\"],\"KT6rEB\":[\"Escolha seu provedor\"],\"9qP96p\":[\"Escolha seu teste\"],\"yz7wBu\":[\"Fechar\"],\"+zUMwJ\":[\"Configurar uma conexão SSO\"],\"QTNsSm\":[\"Configure e personalize suas preferências de calendário.\"],\"aGwm+D\":[\"Configurar como as datas são exibidas no aplicativo\"],\"Bh4GBD\":[\"Configure suas definições de e-mail e calendário.\"],\"D8ATlr\":[\"Conecte uma nova conta ao seu espaço de trabalho\"],\"Zgi9Fd\":[\"Conecte-se com o Google\"],\"IOfqM8\":[\"Conecte-se com a Microsoft\"],\"9TzudL\":[\"Contas conectadas\"],\"M73whl\":[\"Contexto\"],\"xGVfLh\":[\"Continuar\"],\"CcGOj+\":[\"Copiloto\"],\"7eVkEH\":[\"Copiar link do convite\"],\"Ej5euX\":[\"Copie essa chave, pois ela não ficará visível novamente\"],\"wBMjJ2\":[\"Contagem\"],\"EkZfen\":[\"Contar tudo\"],\"vQJINq\":[\"Contagem vazia\"],\"DzRsDJ\":[\"Contagem não vazia\"],\"9FZBbf\":[\"Contagem de valores exclusivos\"],\"zNoOC2\":[\"Crie um fluxo de trabalho e retorne aqui para visualizar suas versões\"],\"uXGLuq\":[\"Criar chave de API\"],\"d0DCww\":[\"Criar novo registro\"],\"dkAPxi\":[\"Criar webhook\"],\"8skTDV\":[\"Objetos personalizados\"],\"qt+EaC\":[\"Personalize os campos disponíveis nas exibições \",[\"objectLabelSingular\"],\".\"],\"CMhr4u\":[\"Personalizar domínio\"],\"bCJa9l\":[\"Personalize a segurança de seu espaço de trabalho\"],\"Zz6Cxn\":[\"Zona de perigo\"],\"5cNMFz\":[\"Modelo de dados\"],\"r+cVRP\":[\"Tipo de dados\"],\"mYGY3B\":[\"Data\"],\"Ud9zHv\":[\"Data e hora\"],\"5y3O+A\":[\"Desativar\"],\"qk4i22\":[\"Desative a opção \\\"Synchronize Objects Labels and API Names\\\" (Sincronizar rótulos de objetos e nomes de API) para definir um nome de API personalizado\"],\"gexAq8\":[\"Desativar esse campo\"],\"4tpC8V\":[\"Desativar fluxo de trabalho\"],\"Y2ImVJ\":[\"Defina o nome e a descrição de seu objeto\"],\"cnGeoo\":[\"Excluir\"],\"ZDGm40\":[\"Excluir conta\"],\"gAz0S5\":[\"Excluir a conta e todos os dados associados\"],\"hGfWDm\":[\"Excluir chave de API\"],\"4dpwsE\":[\"Excluir registro\"],\"kf0A63\":[\"Excluir registros\"],\"T6S2Ns\":[\"Excluir essa integração\"],\"snMaH4\":[\"Excluir webhook\"],\"kYu0eF\":[\"Excluir espaço de trabalho\"],\"mk2Ygs\":[\"Excluir todo o seu espaço de trabalho\"],\"Cko536\":[\"Descendente\"],\"Nu4oKW\":[\"Descrição\"],\"2xxBws\":[\"Destruir\"],\"n+SX4g\":[\"Desenvolvedores\"],\"zAg2B9\":[\"Rascunho de descarte\"],\"i66xz9\":[\"Exibir como data relativa\"],\"EoKe5U\":[\"Domínio\"],\"QVVmxi\":[\"Por exemplo, integração de backoffice\"],\"tOkc8o\":[\"Mais antigo\"],\"JTbQuO\":[\"Data mais antiga\"],\"v+uKyy\":[\"Editar intervalo de faturamento\"],\"h2KoTu\":[\"Edite o método de pagamento, veja suas faturas e muito mais\"],\"6o1M/Q\":[\"Edite o nome do subdomínio ou defina um domínio personalizado.\"],\"O3oNi5\":[\"E-mail\"],\"lfQsvW\":[\"Integração de e-mail\"],\"QT/Wo7\":[\"O e-mail ou domínio já está na lista de bloqueio\"],\"BXEcos\":[\"E-mails\"],\"eXoH4Q\":[\"funcionários\"],\"gqv5ZL\":[\"Funcionários\"],\"N2S1rs\":[\"Vazio\"],\"T3juzf\":[\"URL do ponto de extremidade\"],\"lYGfRP\":[\"Inglês\"],\"/bfFKe\":[\"Aproveite um teste gratuito de \",[\"withCreditCardTrialPeriodDuration\"],\"dias\"],\"GpB8YV\":[\"Empresa\"],\"c3qGJX\":[\"Erro ao excluir a chave da API: \",[\"err\"]],\"bj7nh3\":[\"Erro ao regenerar a chave da API: \",[\"err\"]],\"VSQxWH\":[\"Erro ao alternar a assinatura \",[\"to\"],\".\"],\"JLxMta\":[\"Estabeleça pontos de extremidade do Webhook para notificações sobre eventos assíncronos.\"],\"cIgBjB\":[\"Excluir as seguintes pessoas e domínios de minha sincronização de e-mail\"],\"fV7V51\":[\"Objetos existentes\"],\"IZ4o2e\":[\"Configurações de saída\"],\"tXGQvS\":[\"Espera-se que o nó selecionado seja um nó de etapa de criação.\"],\"bKBhgb\":[\"Experiência\"],\"LxRNPw\":[\"Vencimento\"],\"SkXfL0\":[\"Data de expiração\"],\"i9qiyR\":[\"Expira em\"],\"GS+Mus\":[\"Exportação\"],\"ep2rbf\":[\"Registros de exportação\"],\"q46CjD\":[\"Exportar para PDF\"],\"DaGxE0\":[\"Visualização de exportação\"],\"X9kySA\":[\"Favoritos\"],\"zXgopL\":[\"Tipo de campo\"],\"vF68cg\":[\"Campos\"],\"3w/aqw\":[\"Contagem de campos\"],\"o7J4JM\":[\"Filtro\"],\"cSev+j\":[\"Filtros\"],\"nLC6tu\":[\"Francês\"],\"aTieE0\":[\"de mensal para anual\"],\"K04lE5\":[\"de anual para mensal\"],\"scmRyR\":[\"Acesso total\"],\"xANKBj\":[\"Funções\"],\"Weq9zb\":[\"Geral\"],\"DDcvSo\":[\"Alemão\"],\"NXEW3h\":[\"Tire o máximo proveito do seu espaço de trabalho convidando sua equipe.\"],\"zSGbaR\":[\"Faça sua assinatura\"],\"2GT3Hf\":[\"Global\"],\"hWp1MY\":[\"Conceda ao suporte da Twenty acesso temporário ao seu espaço de trabalho para que possamos solucionar problemas ou recuperar conteúdo em seu nome. Você pode revogar o acesso a qualquer momento.\"],\"vLyv1R\":[\"Esconder\"],\"XTWO+W\":[\"Ícone e nome\"],\"sJGljQ\":[\"Identificador\"],\"j843N3\":[\"Se você perdeu essa chave, pode gerá-la novamente, mas saiba que qualquer script que use essa chave precisará ser atualizado. Digite\\\"\",[\"confirmationValue\"],\"\\\" para confirmar.\"],\"NoNwIX\":[\"Inativo\"],\"pZ/USH\":[\"Índices\"],\"JE2tjr\":[\"A entrada deve estar em letras maiúsculas e minúsculas e não pode começar com um número\"],\"AwUsnG\":[\"Instâncias\"],\"nbfdhU\":[\"Integrações\"],\"NtFk/Z\":[\"Provedor de autenticação inválido\"],\"B2Tpo0\":[\"E-mail inválido\"],\"/m52AE\":[\"E-mail ou domínio inválido\"],\"QdoUFL\":[\"Valores de formulário inválidos\"],\"0M8+El\":[\"Convite por e-mail\"],\"PWIq/W\":[\"Convidar por link\"],\"3athPG\":[\"Convidar por link\"],\"5IfmKA\":[\"Link de convite enviado para endereços de e-mail\"],\"d+Y+rP\":[\"Convide sua equipe\"],\"Lj7sBL\":[\"Italiano\"],\"h6S9Yz\":[\"Coreano\"],\"zrpwCd\":[\"Laboratório\"],\"vXIe7J\":[\"Idioma\"],\"wL3cK8\":[\"Mais recentes\"],\"Kcjbmz\":[\"Data mais recente\"],\"pQjjYo\":[\"Link copiado para a área de transferência\"],\"FgAxTj\":[\"Fazer logout\"],\"nOhz3x\":[\"Sair\"],\"T6YjCk\":[\"Gerenciar membros\"],\"4cjU2u\":[\"Gerencie os membros de seu espaço aqui\"],\"FyFNsd\":[\"Gerencie suas contas de Internet.\"],\"36kYu0\":[\"Gerenciar sua assinatura\"],\"3Sdni6\":[\"Marcar como concluído\"],\"CK1KXz\":[\"Máximo\"],\"wlQNTg\":[\"Membros\"],\"eTUF28\":[\"Mínimo\"],\"3Siwmw\":[\"Mais opções\"],\"iSLA/r\":[\"Mover para a esquerda\"],\"Ubl2by\":[\"Mover para a direita\"],\"6YtxFj\":[\"Nome\"],\"z+6jaZ\":[\"Nome de sua chave de API\"],\"J7w8lI\":[\"Nome de seu espaço de trabalho\"],\"2T8KCk\":[\"Navegar para o próximo registro\"],\"veSA19\":[\"Navegar para a próxima versão\"],\"ZTEho+\":[\"Navegar para o próximo fluxo de trabalho\"],\"2tw9bo\":[\"Navegar para o registro anterior\"],\"I+Pm5V\":[\"Navegar para a versão anterior\"],\"QVUN3K\":[\"Navegar para o fluxo de trabalho anterior\"],\"isRobC\":[\"Novo\"],\"Kcr9Fr\":[\"Nova conta\"],\"o8MyXb\":[\"Nova chave\"],\"j313SZ\":[\"Nova chave\"],\"hFxdey\":[\"Novo objeto\"],\"7vhWI8\":[\"Nova senha\"],\"BcCzLv\":[\"Novo recorde\"],\"2lmOC5\":[\"Nova função\"],\"U1DAok\":[\"Novo webhook\"],\"pwenQu\":[\"Nenhuma conta conectada\"],\"0uWxPM\":[\"Nenhum fluxo de trabalho foi executado ainda\"],\"AQCvCC\":[\"Ainda não há versões de fluxo de trabalho\"],\"4wUkDk\":[\"Não vazio\"],\"W0i24j\":[\"Objeto\"],\"B3toQF\":[\"Objetos\"],\"KNz3EF\":[\"Fora do caminho comum\"],\"OV5wZZ\":[\"Aberto\"],\"0zpgxV\":[\"Opções\"],\"BzEFor\":[\"ou\"],\"/IX/7x\":[\"Outros\"],\"boJlGf\":[\"Página não encontrada\"],\"8ZsakT\":[\"Senha\"],\"mi6Rel\":[\"O link de redefinição de senha foi enviado para o e-mail\"],\"SrVzRe\":[\"Porcentagem\"],\"yIK1GU\":[\"Porcentagem de vazio\"],\"PWLd4c\":[\"Porcentagem não vazia\"],\"Bv3y5w\":[\"Destruir permanentemente o registro\"],\"N0+GsR\":[\"Imagem\"],\"jEw0Mr\":[\"Digite um URL válido\"],\"6nsIo3\":[\"Digite \\\"\",[\"confirmationValue\"],\"\\\" para confirmar que deseja excluir essa chave de API. Esteja ciente de que qualquer script que use essa chave deixará de funcionar.\"],\"mFZTXr\":[\"Digite \",[\"confirmationText\"],\" para confirmar que deseja excluir esse webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Português - Brasil\"],\"xtXHeo\":[\"Português - Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Prévia\"],\"vERlcd\":[\"Perfil\"],\"YJgRqq\":[\"Pseudo-inglês\"],\"ibPuCP\":[\"Ler documentação\"],\"v3xM25\":[\"Receber um e-mail com o link de atualização da senha\"],\"dSCufP\":[\"Seleção de registros\"],\"vpZcGd\":[\"Gerar novamente uma chave de API\"],\"Mwqo5m\":[\"Regenerar chave\"],\"D+Mv78\":[\"Chave de regeneração\"],\"5icoS1\":[\"Lançamentos\"],\"t/YqKh\":[\"Remover\"],\"T/pF0Z\":[\"Remover dos favoritos\"],\"KbS2K9\":[\"Redefinir senha\"],\"1IWc1n\":[\"Redefinir para\"],\"kx0s+n\":[\"Resultados\"],\"5dJK4M\":[\"Funções\"],\"UX0N2y\":[\"Execute um fluxo de trabalho e retorne aqui para visualizar suas execuções\"],\"A1taO8\":[\"Pesquisa\"],\"l1/uy2\":[\"Pesquisar um campo...\"],\"k7kp5/\":[\"Pesquisar um índice...\"],\"7taA9j\":[\"Campos de pesquisa\"],\"ofuw3g\":[\"Procure um objeto...\"],\"IMeaSJ\":[\"Pesquisar registros\"],\"a3LDKx\":[\"Segurança\"],\"QREcJS\":[\"Ver versão ativa\"],\"OpPn5Z\":[\"Ver execuções\"],\"EtyY4+\":[\"Ver versões\"],\"lYhPN0\":[\"Ver histórico de versões\"],\"xraglu\":[\"Selecione os eventos que você deseja enviar para esse endpoint\"],\"AXTJAW\":[\"Selecione seu idioma preferido\"],\"mjK8F3\":[\"Envie um e-mail de convite para sua equipe\"],\"yy5k7a\":[\"Painel de administração do servidor\"],\"V7fgiB\":[\"Defina a visibilidade do e-mail, gerencie sua lista de bloqueio e muito mais.\"],\"cx14rp\":[\"Defina o nome de seu domínio\"],\"tn41zE\":[\"Defina o nome de seu subdomínio\"],\"Tz0i8g\":[\"Configurações\"],\"Vy9kmk\":[\"Compartilhe este link para convidar usuários a participar do seu espaço de trabalho\"],\"gWk8gY\":[\"A alteração do rótulo de um campo também deve alterar o nome da API?\"],\"6Uau97\":[\"Pular\"],\"f6Hub0\":[\"Classificar\"],\"65A04M\":[\"Espanhol\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Subdomínio\"],\"omhc+7\":[\"Subdomínio já ocupado\"],\"OlC/tU\":[\"O subdomínio não pode ter mais de 30 caracteres\"],\"ZETwlU\":[\"O subdomínio não pode ter menos de 3 caracteres\"],\"B5jRKH\":[\"A assinatura foi trocada \",[\"to\"]],\"AxQiPW\":[\"Soma\"],\"XYLcNv\":[\"Suporte\"],\"9yk9d1\":[\"Interruptor \",[\"from\"]],\"qi74XZ\":[\"Interruptor \",[\"to\"]],\"L6Fg36\":[\"Faturamento do switch \",[\"to\"]],\"AtzMpB\":[\"Sincronizar o rótulo do campo e o nome da API\"],\"E3AMmw\":[\"Configurações do sistema - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Configurações do sistema - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Teste\"],\"bU9B27\":[\"Fluxo de trabalho de teste\"],\"2OUtmv\":[\"A descrição desse campo\"],\"VGZYbZ\":[\"O e-mail associado à sua conta\"],\"h8mvCd\":[\"O nome e o ícone desse campo\"],\"L97sPr\":[\"A página que você está procurando não existe mais ou nunca existiu. Vamos colocá-lo de volta no caminho certo\"],\"uWikAA\":[\"Os valores desse campo\"],\"+69KDk\":[\"Os valores desse campo devem ser exclusivos\"],\"PmtLRf\":[\"Houve um problema\"],\"hqCwGc\":[\"Essa ação não pode ser desfeita. Isso excluirá permanentemente esse usuário e o removerá de todas as suas atribuições.\"],\"gWGuHC\":[\"Essa ação não pode ser desfeita. Isso excluirá permanentemente todo o seu espaço de trabalho. <0/> Digite seu e-mail para confirmar.\"],\"n9nSNJ\":[\"Formato de hora\"],\"aqMzDX\":[\"para mensal\"],\"WXXiXO\":[\"a cada ano\"],\"PiUt3N\":[\"Tipo de gatilho\"],\"IQ5pAL\":[\"O tipo de acionador deve ser Manual - quando nenhum registro é selecionado\"],\"+zy2Nq\":[\"Tipo\"],\"U83IeL\":[\"Digite qualquer coisa\"],\"wSXm5S\":[\"Único\"],\"GQCXQS\":[\"Contatos ilimitados\"],\"ONWvwQ\":[\"Carregar\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Usar como rascunho\"],\"oTTQsc\":[\"Use somente letras, números e traços. Comece e termine com uma letra ou um número\"],\"c6uZUV\":[\"Use nossa API ou adicione seu primeiro \",[\"objectLabel\"],\" manualmente\"],\"7PzzBU\":[\"Usuário\"],\"IjyOjp\":[\"O usuário não está conectado\"],\"fXVIZq\":[\"Valores\"],\"KANz0G\":[\"Exibir detalhes de faturamento\"],\"6n7jtr\":[\"Visualize\"],\"id6ein\":[\"Oferecemos suporte a seus PNGs, JPEGs e GIFs quadrados com menos de 10 MB\"],\"ZS7vYp\":[\"Enviaremos solicitações POST a esse endpoint para cada novo evento\"],\"TRDppN\":[\"Webhook\"],\"v1kQyJ\":[\"Webhooks\"],\"C51ilI\":[\"Quando a chave da API expirará.\"],\"leUubq\":[\"Quando a chave será desativada\"],\"wvyffT\":[\"O fluxo de trabalho não pode ser testado\"],\"pmUArF\":[\"Espaço de trabalho\"],\"VicISP\":[\"Exclusão do espaço de trabalho\"],\"Q9pNST\":[\"Escreva uma descrição\"],\"3d1wCB\":[\"sim\"],\"zSkMV0\":[\"Você será cobrado imediatamente pelo ano inteiro.\"],\"XVnj6K\":[\"Seu saldo de crédito será usado para pagar as contas mensais.\"],\"9ivpwk\":[\"Seu nome como será exibido\"],\"RhNbPE\":[\"Seu espaço de trabalho será desativado\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" de \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" Chave da API\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1.000 execuções de nós de fluxo de trabalho\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configurar campo\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abortar\"],\"uyJsf6\":[\"Sobre\"],\"AeXO77\":[\"Conta\"],\"nD0Y+a\":[\"Exclusão de conta\"],\"bPwFdf\":[\"Contas\"],\"FQBaXG\":[\"Ativar\"],\"tu8A/k\":[\"Ativar fluxo de trabalho\"],\"F6pfE9\":[\"Ativo\"],\"Mue4oc\":[\"Chaves de API ativas criadas por você ou por sua equipe.\"],\"m16xKo\":[\"Adicionar\"],\"DpV70M\":[\"Adicionar campo\"],\"dEO3Zx\":[\"Adicionar objeto\"],\"sgXUv+\":[\"Adicionar provedor de identidade SSO\"],\"5+ttxv\":[\"Adicionar à lista de bloqueio\"],\"pBsoKL\":[\"Adicionar aos favoritos\"],\"m2qDV8\":[\"Adicione seu primeiro \",[\"objectLabel\"]],\"vLO+NG\":[\"Adicionado \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Todos\"],\"3saA7W\":[\"Todos (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Todas as funções\"],\"GMx1K0\":[\"Permitir logins por meio da funcionalidade de logon único do Google.\"],\"dea+zy\":[\"Permitir logins por meio da funcionalidade de logon único da Microsoft.\"],\"wMg43c\":[\"Permita o convite de novos usuários compartilhando um link de convite.\"],\"vHeVg5\":[\"Permita que os usuários façam login com um e-mail e uma senha.\"],\"mJ6m4C\":[\"Uma descrição opcional\"],\"0RqpZr\":[\"API e webhooks\"],\"yRnk5W\":[\"Chave da API\"],\"5h8ooz\":[\"Chaves de API\"],\"kAtj+q\":[\"Nome da API\"],\"aAIQg2\":[\"Aparência\"],\"3iX0kh\":[\"Tem certeza de que deseja alterar o intervalo de cobrança?\"],\"nYD/Cq\":[\"Ascendente\"],\"rfYmIr\":[\"Atribuir funções para especificar as permissões de acesso de cada membro\"],\"lxQ+5m\":[\"Atribuído a\"],\"Y7Dx6e\":[\"Pelo menos um método de autenticação deve estar ativado\"],\"P8fBlG\":[\"Autenticação\"],\"yIVrHZ\":[\"Autorizar\"],\"3uQmjD\":[\"Média\"],\"Dht9W3\":[\"Voltar ao conteúdo\"],\"R+w/Va\":[\"Faturamento\"],\"K1172m\":[\"Lista de bloqueio\"],\"2yl5lQ\":[\"Agendar uma chamada\"],\"PmmvzS\":[\"Calcular\"],\"AjVXBS\":[\"Calendário\"],\"EUpfsd\":[\"Calendários\"],\"dEgA5A\":[\"Cancelar\"],\"0TllC8\":[\"Cancelar a qualquer momento\"],\"rRK/Lf\":[\"Cancelar plano\"],\"N6gPiD\":[\"Cancelar sua assinatura\"],\"OfzMnb\":[\"Alterar \",[\"to\"]],\"VhMDMg\":[\"Alterar senha\"],\"SviKkE\":[\"Chinês - Simplificado\"],\"dzb4Ep\":[\"Chinês - Tradicional\"],\"JEFFOR\":[\"Escolha um objeto\"],\"KT6rEB\":[\"Escolha seu provedor\"],\"9qP96p\":[\"Escolha seu teste\"],\"yz7wBu\":[\"Fechar\"],\"+zUMwJ\":[\"Configurar uma conexão SSO\"],\"QTNsSm\":[\"Configure e personalize suas preferências de calendário.\"],\"aGwm+D\":[\"Configurar como as datas são exibidas no aplicativo\"],\"Bh4GBD\":[\"Configure suas definições de e-mail e calendário.\"],\"D8ATlr\":[\"Conecte uma nova conta ao seu espaço de trabalho\"],\"Zgi9Fd\":[\"Conecte-se com o Google\"],\"IOfqM8\":[\"Conecte-se com a Microsoft\"],\"9TzudL\":[\"Contas conectadas\"],\"M73whl\":[\"Contexto\"],\"xGVfLh\":[\"Continuar\"],\"CcGOj+\":[\"Copiloto\"],\"7eVkEH\":[\"Copiar link do convite\"],\"Ej5euX\":[\"Copie essa chave, pois ela não ficará visível novamente\"],\"wBMjJ2\":[\"Contagem\"],\"EkZfen\":[\"Contar tudo\"],\"vQJINq\":[\"Contagem vazia\"],\"DzRsDJ\":[\"Contagem não vazia\"],\"9FZBbf\":[\"Contagem de valores exclusivos\"],\"zNoOC2\":[\"Crie um fluxo de trabalho e retorne aqui para visualizar suas versões\"],\"uXGLuq\":[\"Criar chave de API\"],\"d0DCww\":[\"Criar novo registro\"],\"dkAPxi\":[\"Criar webhook\"],\"8skTDV\":[\"Objetos personalizados\"],\"qt+EaC\":[\"Personalize os campos disponíveis nas exibições \",[\"objectLabelSingular\"],\".\"],\"CMhr4u\":[\"Personalizar domínio\"],\"bCJa9l\":[\"Personalize a segurança de seu espaço de trabalho\"],\"Zz6Cxn\":[\"Zona de perigo\"],\"5cNMFz\":[\"Modelo de dados\"],\"r+cVRP\":[\"Tipo de dados\"],\"mYGY3B\":[\"Data\"],\"Ud9zHv\":[\"Data e hora\"],\"5y3O+A\":[\"Desativar\"],\"qk4i22\":[\"Desative a opção \\\"Synchronize Objects Labels and API Names\\\" (Sincronizar rótulos de objetos e nomes de API) para definir um nome de API personalizado\"],\"gexAq8\":[\"Desativar esse campo\"],\"4tpC8V\":[\"Desativar fluxo de trabalho\"],\"Y2ImVJ\":[\"Defina o nome e a descrição de seu objeto\"],\"cnGeoo\":[\"Excluir\"],\"ZDGm40\":[\"Excluir conta\"],\"gAz0S5\":[\"Excluir a conta e todos os dados associados\"],\"hGfWDm\":[\"Excluir chave de API\"],\"4dpwsE\":[\"Excluir registro\"],\"kf0A63\":[\"Excluir registros\"],\"T6S2Ns\":[\"Excluir essa integração\"],\"snMaH4\":[\"Excluir webhook\"],\"kYu0eF\":[\"Excluir espaço de trabalho\"],\"mk2Ygs\":[\"Excluir todo o seu espaço de trabalho\"],\"Cko536\":[\"Descendente\"],\"Nu4oKW\":[\"Descrição\"],\"2xxBws\":[\"Destruir\"],\"n+SX4g\":[\"Desenvolvedores\"],\"zAg2B9\":[\"Rascunho de descarte\"],\"i66xz9\":[\"Exibir como data relativa\"],\"EoKe5U\":[\"Domínio\"],\"QVVmxi\":[\"Por exemplo, integração de backoffice\"],\"tOkc8o\":[\"Mais antigo\"],\"JTbQuO\":[\"Data mais antiga\"],\"v+uKyy\":[\"Editar intervalo de faturamento\"],\"h2KoTu\":[\"Edite o método de pagamento, veja suas faturas e muito mais\"],\"6o1M/Q\":[\"Edite o nome do subdomínio ou defina um domínio personalizado.\"],\"O3oNi5\":[\"E-mail\"],\"lfQsvW\":[\"Integração de e-mail\"],\"QT/Wo7\":[\"O e-mail ou domínio já está na lista de bloqueio\"],\"BXEcos\":[\"E-mails\"],\"eXoH4Q\":[\"funcionários\"],\"gqv5ZL\":[\"Funcionários\"],\"N2S1rs\":[\"Vazio\"],\"T3juzf\":[\"URL do ponto de extremidade\"],\"lYGfRP\":[\"Inglês\"],\"/bfFKe\":[\"Aproveite um teste gratuito de \",[\"withCreditCardTrialPeriodDuration\"],\"dias\"],\"GpB8YV\":[\"Empresa\"],\"c3qGJX\":[\"Erro ao excluir a chave da API: \",[\"err\"]],\"bj7nh3\":[\"Erro ao regenerar a chave da API: \",[\"err\"]],\"VSQxWH\":[\"Erro ao alternar a assinatura \",[\"to\"],\".\"],\"JLxMta\":[\"Estabeleça pontos de extremidade do Webhook para notificações sobre eventos assíncronos.\"],\"cIgBjB\":[\"Excluir as seguintes pessoas e domínios de minha sincronização de e-mail\"],\"fV7V51\":[\"Objetos existentes\"],\"IZ4o2e\":[\"Configurações de saída\"],\"tXGQvS\":[\"Espera-se que o nó selecionado seja um nó de etapa de criação.\"],\"bKBhgb\":[\"Experiência\"],\"LxRNPw\":[\"Vencimento\"],\"SkXfL0\":[\"Data de expiração\"],\"i9qiyR\":[\"Expira em\"],\"GS+Mus\":[\"Exportação\"],\"ep2rbf\":[\"Registros de exportação\"],\"q46CjD\":[\"Exportar para PDF\"],\"DaGxE0\":[\"Visualização de exportação\"],\"X9kySA\":[\"Favoritos\"],\"zXgopL\":[\"Tipo de campo\"],\"vF68cg\":[\"Campos\"],\"3w/aqw\":[\"Contagem de campos\"],\"o7J4JM\":[\"Filtro\"],\"cSev+j\":[\"Filtros\"],\"nLC6tu\":[\"Francês\"],\"aTieE0\":[\"de mensal para anual\"],\"K04lE5\":[\"de anual para mensal\"],\"scmRyR\":[\"Acesso total\"],\"xANKBj\":[\"Funções\"],\"Weq9zb\":[\"Geral\"],\"DDcvSo\":[\"Alemão\"],\"NXEW3h\":[\"Tire o máximo proveito do seu espaço de trabalho convidando sua equipe.\"],\"zSGbaR\":[\"Faça sua assinatura\"],\"2GT3Hf\":[\"Global\"],\"hWp1MY\":[\"Conceda ao suporte da Twenty acesso temporário ao seu espaço de trabalho para que possamos solucionar problemas ou recuperar conteúdo em seu nome. Você pode revogar o acesso a qualquer momento.\"],\"vLyv1R\":[\"Esconder\"],\"XTWO+W\":[\"Ícone e nome\"],\"sJGljQ\":[\"Identificador\"],\"j843N3\":[\"Se você perdeu essa chave, pode gerá-la novamente, mas saiba que qualquer script que use essa chave precisará ser atualizado. Digite\\\"\",[\"confirmationValue\"],\"\\\" para confirmar.\"],\"NoNwIX\":[\"Inativo\"],\"pZ/USH\":[\"Índices\"],\"JE2tjr\":[\"A entrada deve estar em letras maiúsculas e minúsculas e não pode começar com um número\"],\"AwUsnG\":[\"Instâncias\"],\"nbfdhU\":[\"Integrações\"],\"NtFk/Z\":[\"Provedor de autenticação inválido\"],\"B2Tpo0\":[\"E-mail inválido\"],\"/m52AE\":[\"E-mail ou domínio inválido\"],\"QdoUFL\":[\"Valores de formulário inválidos\"],\"0M8+El\":[\"Convite por e-mail\"],\"PWIq/W\":[\"Convidar por link\"],\"3athPG\":[\"Convidar por link\"],\"5IfmKA\":[\"Link de convite enviado para endereços de e-mail\"],\"d+Y+rP\":[\"Convide sua equipe\"],\"Lj7sBL\":[\"Italiano\"],\"dFtidv\":[\"Japonês\"],\"h6S9Yz\":[\"Coreano\"],\"zrpwCd\":[\"Laboratório\"],\"vXIe7J\":[\"Idioma\"],\"wL3cK8\":[\"Mais recentes\"],\"Kcjbmz\":[\"Data mais recente\"],\"pQjjYo\":[\"Link copiado para a área de transferência\"],\"FgAxTj\":[\"Fazer logout\"],\"nOhz3x\":[\"Sair\"],\"T6YjCk\":[\"Gerenciar membros\"],\"4cjU2u\":[\"Gerencie os membros de seu espaço aqui\"],\"FyFNsd\":[\"Gerencie suas contas de Internet.\"],\"36kYu0\":[\"Gerenciar sua assinatura\"],\"3Sdni6\":[\"Marcar como concluído\"],\"CK1KXz\":[\"Máximo\"],\"wlQNTg\":[\"Membros\"],\"eTUF28\":[\"Mínimo\"],\"3Siwmw\":[\"Mais opções\"],\"iSLA/r\":[\"Mover para a esquerda\"],\"Ubl2by\":[\"Mover para a direita\"],\"6YtxFj\":[\"Nome\"],\"z+6jaZ\":[\"Nome de sua chave de API\"],\"J7w8lI\":[\"Nome de seu espaço de trabalho\"],\"2T8KCk\":[\"Navegar para o próximo registro\"],\"veSA19\":[\"Navegar para a próxima versão\"],\"ZTEho+\":[\"Navegar para o próximo fluxo de trabalho\"],\"2tw9bo\":[\"Navegar para o registro anterior\"],\"I+Pm5V\":[\"Navegar para a versão anterior\"],\"QVUN3K\":[\"Navegar para o fluxo de trabalho anterior\"],\"isRobC\":[\"Novo\"],\"Kcr9Fr\":[\"Nova conta\"],\"o8MyXb\":[\"Nova chave\"],\"j313SZ\":[\"Nova chave\"],\"hFxdey\":[\"Novo objeto\"],\"7vhWI8\":[\"Nova senha\"],\"BcCzLv\":[\"Novo recorde\"],\"2lmOC5\":[\"Nova função\"],\"U1DAok\":[\"Novo webhook\"],\"pwenQu\":[\"Nenhuma conta conectada\"],\"0uWxPM\":[\"Nenhum fluxo de trabalho foi executado ainda\"],\"AQCvCC\":[\"Ainda não há versões de fluxo de trabalho\"],\"4wUkDk\":[\"Não vazio\"],\"W0i24j\":[\"Objeto\"],\"B3toQF\":[\"Objetos\"],\"KNz3EF\":[\"Fora do caminho comum\"],\"OV5wZZ\":[\"Aberto\"],\"0zpgxV\":[\"Opções\"],\"BzEFor\":[\"ou\"],\"/IX/7x\":[\"Outros\"],\"boJlGf\":[\"Página não encontrada\"],\"8ZsakT\":[\"Senha\"],\"mi6Rel\":[\"O link de redefinição de senha foi enviado para o e-mail\"],\"SrVzRe\":[\"Porcentagem\"],\"yIK1GU\":[\"Porcentagem de vazio\"],\"PWLd4c\":[\"Porcentagem não vazia\"],\"Bv3y5w\":[\"Destruir permanentemente o registro\"],\"N0+GsR\":[\"Imagem\"],\"jEw0Mr\":[\"Digite um URL válido\"],\"6nsIo3\":[\"Digite \\\"\",[\"confirmationValue\"],\"\\\" para confirmar que deseja excluir essa chave de API. Esteja ciente de que qualquer script que use essa chave deixará de funcionar.\"],\"mFZTXr\":[\"Digite \",[\"confirmationText\"],\" para confirmar que deseja excluir esse webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Português - Brasil\"],\"xtXHeo\":[\"Português - Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Prévia\"],\"vERlcd\":[\"Perfil\"],\"YJgRqq\":[\"Pseudo-inglês\"],\"ibPuCP\":[\"Ler documentação\"],\"v3xM25\":[\"Receber um e-mail com o link de atualização da senha\"],\"dSCufP\":[\"Seleção de registros\"],\"vpZcGd\":[\"Gerar novamente uma chave de API\"],\"Mwqo5m\":[\"Regenerar chave\"],\"D+Mv78\":[\"Chave de regeneração\"],\"5icoS1\":[\"Lançamentos\"],\"t/YqKh\":[\"Remover\"],\"T/pF0Z\":[\"Remover dos favoritos\"],\"KbS2K9\":[\"Redefinir senha\"],\"1IWc1n\":[\"Redefinir para\"],\"kx0s+n\":[\"Resultados\"],\"5dJK4M\":[\"Funções\"],\"UX0N2y\":[\"Execute um fluxo de trabalho e retorne aqui para visualizar suas execuções\"],\"A1taO8\":[\"Pesquisa\"],\"l1/uy2\":[\"Pesquisar um campo...\"],\"k7kp5/\":[\"Pesquisar um índice...\"],\"7taA9j\":[\"Campos de pesquisa\"],\"ofuw3g\":[\"Procure um objeto...\"],\"IMeaSJ\":[\"Pesquisar registros\"],\"a3LDKx\":[\"Segurança\"],\"QREcJS\":[\"Ver versão ativa\"],\"OpPn5Z\":[\"Ver execuções\"],\"EtyY4+\":[\"Ver versões\"],\"lYhPN0\":[\"Ver histórico de versões\"],\"xraglu\":[\"Selecione os eventos que você deseja enviar para esse endpoint\"],\"AXTJAW\":[\"Selecione seu idioma preferido\"],\"mjK8F3\":[\"Envie um e-mail de convite para sua equipe\"],\"yy5k7a\":[\"Painel de administração do servidor\"],\"V7fgiB\":[\"Defina a visibilidade do e-mail, gerencie sua lista de bloqueio e muito mais.\"],\"cx14rp\":[\"Defina o nome de seu domínio\"],\"tn41zE\":[\"Defina o nome de seu subdomínio\"],\"Tz0i8g\":[\"Configurações\"],\"Vy9kmk\":[\"Compartilhe este link para convidar usuários a participar do seu espaço de trabalho\"],\"gWk8gY\":[\"A alteração do rótulo de um campo também deve alterar o nome da API?\"],\"6Uau97\":[\"Pular\"],\"f6Hub0\":[\"Classificar\"],\"65A04M\":[\"Espanhol\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Subdomínio\"],\"omhc+7\":[\"Subdomínio já ocupado\"],\"OlC/tU\":[\"O subdomínio não pode ter mais de 30 caracteres\"],\"ZETwlU\":[\"O subdomínio não pode ter menos de 3 caracteres\"],\"B5jRKH\":[\"A assinatura foi trocada \",[\"to\"]],\"AxQiPW\":[\"Soma\"],\"XYLcNv\":[\"Suporte\"],\"9yk9d1\":[\"Interruptor \",[\"from\"]],\"qi74XZ\":[\"Interruptor \",[\"to\"]],\"L6Fg36\":[\"Faturamento do switch \",[\"to\"]],\"AtzMpB\":[\"Sincronizar o rótulo do campo e o nome da API\"],\"E3AMmw\":[\"Configurações do sistema - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Configurações do sistema - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Teste\"],\"bU9B27\":[\"Fluxo de trabalho de teste\"],\"2OUtmv\":[\"A descrição desse campo\"],\"VGZYbZ\":[\"O e-mail associado à sua conta\"],\"h8mvCd\":[\"O nome e o ícone desse campo\"],\"L97sPr\":[\"A página que você está procurando não existe mais ou nunca existiu. Vamos colocá-lo de volta no caminho certo\"],\"uWikAA\":[\"Os valores desse campo\"],\"+69KDk\":[\"Os valores desse campo devem ser exclusivos\"],\"PmtLRf\":[\"Houve um problema\"],\"hqCwGc\":[\"Essa ação não pode ser desfeita. Isso excluirá permanentemente esse usuário e o removerá de todas as suas atribuições.\"],\"gWGuHC\":[\"Essa ação não pode ser desfeita. Isso excluirá permanentemente todo o seu espaço de trabalho. <0/> Digite seu e-mail para confirmar.\"],\"n9nSNJ\":[\"Formato de hora\"],\"aqMzDX\":[\"para mensal\"],\"WXXiXO\":[\"a cada ano\"],\"PiUt3N\":[\"Tipo de gatilho\"],\"IQ5pAL\":[\"O tipo de acionador deve ser Manual - quando nenhum registro é selecionado\"],\"+zy2Nq\":[\"Tipo\"],\"U83IeL\":[\"Digite qualquer coisa\"],\"wSXm5S\":[\"Único\"],\"GQCXQS\":[\"Contatos ilimitados\"],\"ONWvwQ\":[\"Carregar\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Usar como rascunho\"],\"oTTQsc\":[\"Use somente letras, números e traços. Comece e termine com uma letra ou um número\"],\"c6uZUV\":[\"Use nossa API ou adicione seu primeiro \",[\"objectLabel\"],\" manualmente\"],\"7PzzBU\":[\"Usuário\"],\"IjyOjp\":[\"O usuário não está conectado\"],\"fXVIZq\":[\"Valores\"],\"KANz0G\":[\"Exibir detalhes de faturamento\"],\"6n7jtr\":[\"Visualize\"],\"id6ein\":[\"Oferecemos suporte a seus PNGs, JPEGs e GIFs quadrados com menos de 10 MB\"],\"ZS7vYp\":[\"Enviaremos solicitações POST a esse endpoint para cada novo evento\"],\"TRDppN\":[\"Webhook\"],\"v1kQyJ\":[\"Webhooks\"],\"C51ilI\":[\"Quando a chave da API expirará.\"],\"leUubq\":[\"Quando a chave será desativada\"],\"wvyffT\":[\"O fluxo de trabalho não pode ser testado\"],\"pmUArF\":[\"Espaço de trabalho\"],\"VicISP\":[\"Exclusão do espaço de trabalho\"],\"Q9pNST\":[\"Escreva uma descrição\"],\"3d1wCB\":[\"sim\"],\"zSkMV0\":[\"Você será cobrado imediatamente pelo ano inteiro.\"],\"XVnj6K\":[\"Seu saldo de crédito será usado para pagar as contas mensais.\"],\"9ivpwk\":[\"Seu nome como será exibido\"],\"RhNbPE\":[\"Seu espaço de trabalho será desativado\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/generated/pt-PT.ts b/packages/twenty-front/src/locales/generated/pt-PT.ts index 905b3a7353cc..15abb3af1b11 100644 --- a/packages/twenty-front/src/locales/generated/pt-PT.ts +++ b/packages/twenty-front/src/locales/generated/pt-PT.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" de \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" Chave da API\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 execuções de nós de fluxo de trabalho\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configurar campo\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abortar\"],\"uyJsf6\":[\"Sobre\"],\"AeXO77\":[\"Conta\"],\"nD0Y+a\":[\"Eliminação da conta\"],\"bPwFdf\":[\"Contas\"],\"FQBaXG\":[\"Ativar\"],\"tu8A/k\":[\"Ativar o fluxo de trabalho\"],\"F6pfE9\":[\"Ativo\"],\"Mue4oc\":[\"Chaves de API activas criadas por si ou pela sua equipa.\"],\"m16xKo\":[\"Adicionar\"],\"DpV70M\":[\"Adicionar campo\"],\"dEO3Zx\":[\"Adicionar objeto\"],\"sgXUv+\":[\"Adicionar fornecedor de identidade SSO\"],\"5+ttxv\":[\"Adicionar à lista de bloqueio\"],\"pBsoKL\":[\"Adicionar aos favoritos\"],\"m2qDV8\":[\"Adicione o seu primeiro \",[\"objectLabel\"]],\"vLO+NG\":[\"Adicionado \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Todos\"],\"3saA7W\":[\"Todos (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Todos os papéis\"],\"GMx1K0\":[\"Permitir logins através da funcionalidade de início de sessão único do Google.\"],\"dea+zy\":[\"Permitir inícios de sessão através da funcionalidade de início de sessão único da Microsoft.\"],\"wMg43c\":[\"Permitir o convite de novos utilizadores através da partilha de uma ligação de convite.\"],\"vHeVg5\":[\"Permitir que os utilizadores iniciem sessão com um e-mail e uma palavra-passe.\"],\"mJ6m4C\":[\"Uma descrição opcional\"],\"0RqpZr\":[\"API e Webhooks\"],\"yRnk5W\":[\"Chave API\"],\"5h8ooz\":[\"Chaves API\"],\"kAtj+q\":[\"Nome da API\"],\"aAIQg2\":[\"Aparência\"],\"3iX0kh\":[\"Tem a certeza de que pretende alterar o seu intervalo de faturação?\"],\"nYD/Cq\":[\"Ascendente\"],\"rfYmIr\":[\"Atribuir funções para especificar as permissões de acesso de cada membro\"],\"lxQ+5m\":[\"Atribuído a\"],\"Y7Dx6e\":[\"Pelo menos um método de autenticação deve estar ativado\"],\"P8fBlG\":[\"Autenticação\"],\"yIVrHZ\":[\"Autorizar\"],\"3uQmjD\":[\"Média\"],\"Dht9W3\":[\"Voltar ao conteúdo\"],\"R+w/Va\":[\"Faturação\"],\"K1172m\":[\"Lista de bloqueios\"],\"2yl5lQ\":[\"Marcar uma chamada\"],\"PmmvzS\":[\"Calcular\"],\"AjVXBS\":[\"Calendário\"],\"EUpfsd\":[\"Calendários\"],\"dEgA5A\":[\"Cancelar\"],\"0TllC8\":[\"Cancelar a qualquer momento\"],\"rRK/Lf\":[\"Cancelar plano\"],\"N6gPiD\":[\"Cancelar a sua subscrição\"],\"OfzMnb\":[\"Alterar \",[\"to\"]],\"VhMDMg\":[\"Alterar a palavra-passe\"],\"SviKkE\":[\"Chinês - Simplificado\"],\"dzb4Ep\":[\"Chinês - Tradicional\"],\"JEFFOR\":[\"Escolher um objeto\"],\"KT6rEB\":[\"Escolha o seu fornecedor\"],\"9qP96p\":[\"Escolha o seu teste\"],\"yz7wBu\":[\"Fechar\"],\"+zUMwJ\":[\"Configurar uma ligação SSO\"],\"QTNsSm\":[\"Configure e personalize as suas preferências de calendário.\"],\"aGwm+D\":[\"Configurar a forma como as datas são apresentadas na aplicação\"],\"Bh4GBD\":[\"Configure as definições de correio eletrónico e calendário.\"],\"D8ATlr\":[\"Ligar uma nova conta ao seu espaço de trabalho\"],\"Zgi9Fd\":[\"Ligar ao Google\"],\"IOfqM8\":[\"Ligar à Microsoft\"],\"9TzudL\":[\"Contas ligadas\"],\"M73whl\":[\"Contexto\"],\"xGVfLh\":[\"Continuar\"],\"CcGOj+\":[\"Copiloto\"],\"7eVkEH\":[\"Copiar a hiperligação do convite\"],\"Ej5euX\":[\"Copiar esta chave, uma vez que não voltará a ser visível\"],\"wBMjJ2\":[\"Contagem\"],\"EkZfen\":[\"Contar tudo\"],\"vQJINq\":[\"Contagem vazia\"],\"DzRsDJ\":[\"Contagem não vazia\"],\"9FZBbf\":[\"Contar valores únicos\"],\"zNoOC2\":[\"Criar um fluxo de trabalho e regressar aqui para ver as suas versões\"],\"uXGLuq\":[\"Criar chave API\"],\"d0DCww\":[\"Criar novo registo\"],\"dkAPxi\":[\"Criar Webhook\"],\"8skTDV\":[\"Objectos personalizados\"],\"qt+EaC\":[\"Personalizar os campos disponíveis nas vistas \",[\"objectLabelSingular\"],\".\"],\"CMhr4u\":[\"Personalizar domínio\"],\"bCJa9l\":[\"Personalize a segurança do seu espaço de trabalho\"],\"Zz6Cxn\":[\"Zona de perigo\"],\"5cNMFz\":[\"Modelo de dados\"],\"r+cVRP\":[\"Tipo de dados\"],\"mYGY3B\":[\"Data\"],\"Ud9zHv\":[\"Data e hora\"],\"5y3O+A\":[\"Desativar\"],\"qk4i22\":[\"Desativar \\\"Sincronizar etiquetas de objectos e nomes de API\\\" para definir um nome de API personalizado\"],\"gexAq8\":[\"Desativar este campo\"],\"4tpC8V\":[\"Desativar o fluxo de trabalho\"],\"Y2ImVJ\":[\"Definir o nome e a descrição do seu objeto\"],\"cnGeoo\":[\"Eliminar\"],\"ZDGm40\":[\"Eliminar a conta\"],\"gAz0S5\":[\"Eliminar a conta e todos os dados associados\"],\"hGfWDm\":[\"Eliminar a chave API\"],\"4dpwsE\":[\"Eliminar registo\"],\"kf0A63\":[\"Eliminar registos\"],\"T6S2Ns\":[\"Eliminar esta integração\"],\"snMaH4\":[\"Eliminar webhook\"],\"kYu0eF\":[\"Eliminar espaço de trabalho\"],\"mk2Ygs\":[\"Eliminar todo o seu espaço de trabalho\"],\"Cko536\":[\"Descendente\"],\"Nu4oKW\":[\"Descrição\"],\"2xxBws\":[\"Destruir\"],\"n+SX4g\":[\"Programadores\"],\"zAg2B9\":[\"Rascunho de descarte\"],\"i66xz9\":[\"Exibir como data relativa\"],\"EoKe5U\":[\"Domínio\"],\"QVVmxi\":[\"Por exemplo, integração de backoffice\"],\"tOkc8o\":[\"Mais antigo\"],\"JTbQuO\":[\"Data mais antiga\"],\"v+uKyy\":[\"Editar intervalo de faturação\"],\"h2KoTu\":[\"Editar o método de pagamento, ver as suas facturas e muito mais\"],\"6o1M/Q\":[\"Edite o nome do seu subdomínio ou defina um domínio personalizado.\"],\"O3oNi5\":[\"Correio eletrónico\"],\"lfQsvW\":[\"Integração de correio eletrónico\"],\"QT/Wo7\":[\"O e-mail ou domínio já está na lista de bloqueio\"],\"BXEcos\":[\"Emails\"],\"eXoH4Q\":[\"empregados\"],\"gqv5ZL\":[\"Empregados\"],\"N2S1rs\":[\"Vazio\"],\"T3juzf\":[\"URL do ponto final\"],\"lYGfRP\":[\"Inglês\"],\"/bfFKe\":[\"Desfrute de um período experimental gratuito de \",[\"withCreditCardTrialPeriodDuration\"],\"-dias\"],\"GpB8YV\":[\"Empresa\"],\"c3qGJX\":[\"Erro ao eliminar a chave api: \",[\"err\"]],\"bj7nh3\":[\"Erro ao regenerar a chave api: \",[\"err\"]],\"VSQxWH\":[\"Erro ao mudar de subscrição \",[\"to\"],\".\"],\"JLxMta\":[\"Estabelecer pontos de extremidade Webhook para notificações sobre eventos assíncronos.\"],\"cIgBjB\":[\"Excluir as seguintes pessoas e domínios da minha sincronização de correio eletrónico\"],\"fV7V51\":[\"Objectos existentes\"],\"IZ4o2e\":[\"Sair das definições\"],\"tXGQvS\":[\"Espera-se que o nó selecionado seja um nó de etapa de criação.\"],\"bKBhgb\":[\"Experiência\"],\"LxRNPw\":[\"Expiração\"],\"SkXfL0\":[\"Data de expiração\"],\"i9qiyR\":[\"Expira em\"],\"GS+Mus\":[\"Exportação\"],\"ep2rbf\":[\"Registos de exportação\"],\"q46CjD\":[\"Exportar para PDF\"],\"DaGxE0\":[\"Vista de exportação\"],\"X9kySA\":[\"Favoritos\"],\"zXgopL\":[\"Tipo de campo\"],\"vF68cg\":[\"Campos\"],\"3w/aqw\":[\"Contagem de campos\"],\"o7J4JM\":[\"Filtro\"],\"cSev+j\":[\"Filtros\"],\"nLC6tu\":[\"Francês\"],\"aTieE0\":[\"de mensal para anual\"],\"K04lE5\":[\"de anual para mensal\"],\"scmRyR\":[\"Acesso total\"],\"xANKBj\":[\"Funções\"],\"Weq9zb\":[\"Geral\"],\"DDcvSo\":[\"Alemão\"],\"NXEW3h\":[\"Tire o máximo partido do seu espaço de trabalho convidando a sua equipa.\"],\"zSGbaR\":[\"Obter a sua subscrição\"],\"2GT3Hf\":[\"Mundial\"],\"hWp1MY\":[\"Conceda ao suporte do Twenty acesso temporário ao seu espaço de trabalho para que possamos solucionar problemas ou recuperar conteúdo em seu nome. Pode revogar o acesso em qualquer altura.\"],\"vLyv1R\":[\"Esconder\"],\"XTWO+W\":[\"Ícone e nome\"],\"sJGljQ\":[\"Identificador\"],\"j843N3\":[\"Se perdeu esta chave, pode regenerá-la, mas tenha em atenção que qualquer script que utilize esta chave terá de ser atualizado. Digite\\\"\",[\"confirmationValue\"],\"\\\" para confirmar.\"],\"NoNwIX\":[\"Inativo\"],\"pZ/USH\":[\"Índices\"],\"JE2tjr\":[\"A entrada deve estar em maiúsculas e minúsculas e não pode começar com um número\"],\"AwUsnG\":[\"Instâncias\"],\"nbfdhU\":[\"Integrações\"],\"NtFk/Z\":[\"Fornecedor de autenticação inválido\"],\"B2Tpo0\":[\"Correio eletrónico inválido\"],\"/m52AE\":[\"Correio eletrónico ou domínio inválido\"],\"QdoUFL\":[\"Valores de formulário inválidos\"],\"0M8+El\":[\"Convite por correio eletrónico\"],\"PWIq/W\":[\"Convidar por ligação\"],\"3athPG\":[\"Convidar por ligação\"],\"5IfmKA\":[\"Ligação de convite enviada para endereços de correio eletrónico\"],\"d+Y+rP\":[\"Convide a sua equipa\"],\"Lj7sBL\":[\"Italiano\"],\"h6S9Yz\":[\"Coreano\"],\"zrpwCd\":[\"Laboratório\"],\"vXIe7J\":[\"Língua\"],\"wL3cK8\":[\"Mais recentes\"],\"Kcjbmz\":[\"Última data\"],\"pQjjYo\":[\"Ligação copiada para a área de transferência\"],\"FgAxTj\":[\"Terminar sessão\"],\"nOhz3x\":[\"Terminar sessão\"],\"T6YjCk\":[\"Gerir membros\"],\"4cjU2u\":[\"Gerir os membros do seu espaço aqui\"],\"FyFNsd\":[\"Gerir as suas contas de Internet.\"],\"36kYu0\":[\"Gerir a sua subscrição\"],\"3Sdni6\":[\"Marcar como concluído\"],\"CK1KXz\":[\"Máximo\"],\"wlQNTg\":[\"Membros\"],\"eTUF28\":[\"Mínimo\"],\"3Siwmw\":[\"Mais opções\"],\"iSLA/r\":[\"Mover para a esquerda\"],\"Ubl2by\":[\"Mover para a direita\"],\"6YtxFj\":[\"Nome\"],\"z+6jaZ\":[\"Nome da sua chave API\"],\"J7w8lI\":[\"Nome do seu espaço de trabalho\"],\"2T8KCk\":[\"Navegar para o registo seguinte\"],\"veSA19\":[\"Navegar para a versão seguinte\"],\"ZTEho+\":[\"Navegar para o fluxo de trabalho seguinte\"],\"2tw9bo\":[\"Navegar para o registo anterior\"],\"I+Pm5V\":[\"Navegar para a versão anterior\"],\"QVUN3K\":[\"Navegar para o fluxo de trabalho anterior\"],\"isRobC\":[\"Novo\"],\"Kcr9Fr\":[\"Nova conta\"],\"o8MyXb\":[\"Nova chave\"],\"j313SZ\":[\"Nova chave\"],\"hFxdey\":[\"Novo objeto\"],\"7vhWI8\":[\"Nova palavra-passe\"],\"BcCzLv\":[\"Novo recorde\"],\"2lmOC5\":[\"Novo papel\"],\"U1DAok\":[\"Novo Webhook\"],\"pwenQu\":[\"Nenhuma conta ligada\"],\"0uWxPM\":[\"Ainda não foi executado nenhum fluxo de trabalho\"],\"AQCvCC\":[\"Ainda não há versões de fluxo de trabalho\"],\"4wUkDk\":[\"Não vazio\"],\"W0i24j\":[\"Objeto\"],\"B3toQF\":[\"Objectos\"],\"KNz3EF\":[\"Fora do caminho tradicional\"],\"OV5wZZ\":[\"Aberto\"],\"0zpgxV\":[\"Opções\"],\"BzEFor\":[\"ou\"],\"/IX/7x\":[\"Outros\"],\"boJlGf\":[\"Página não encontrada\"],\"8ZsakT\":[\"Palavra-passe\"],\"mi6Rel\":[\"A ligação de reposição da palavra-passe foi enviada para o e-mail\"],\"SrVzRe\":[\"Percentagem\"],\"yIK1GU\":[\"Percentagem de vazio\"],\"PWLd4c\":[\"Percentagem não vazia\"],\"Bv3y5w\":[\"Destruir permanentemente o registo\"],\"N0+GsR\":[\"Imagem\"],\"jEw0Mr\":[\"Introduzir um URL válido\"],\"6nsIo3\":[\"Digite \\\"\",[\"confirmationValue\"],\"\\\" para confirmar que deseja excluir essa chave de API. Tenha em atenção que qualquer script que utilize esta chave deixará de funcionar.\"],\"mFZTXr\":[\"Introduza \",[\"confirmationText\"],\" para confirmar que pretende eliminar este webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Português - Brasil\"],\"xtXHeo\":[\"Português - Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Pré-visualização\"],\"vERlcd\":[\"Perfil\"],\"YJgRqq\":[\"Pseudo-inglês\"],\"ibPuCP\":[\"Ler a documentação\"],\"v3xM25\":[\"Receber uma mensagem de correio eletrónico com uma ligação para atualização da palavra-passe\"],\"dSCufP\":[\"Seleção de registos\"],\"vpZcGd\":[\"Regenerar uma chave API\"],\"Mwqo5m\":[\"Regenerar chave\"],\"D+Mv78\":[\"Regenerar chave\"],\"5icoS1\":[\"Lançamentos\"],\"t/YqKh\":[\"Remover\"],\"T/pF0Z\":[\"Remover dos favoritos\"],\"KbS2K9\":[\"Repor a palavra-passe\"],\"1IWc1n\":[\"Redefinir para\"],\"kx0s+n\":[\"Resultados\"],\"5dJK4M\":[\"Funções\"],\"UX0N2y\":[\"Executar um fluxo de trabalho e regressar aqui para ver as suas execuções\"],\"A1taO8\":[\"Pesquisar\"],\"l1/uy2\":[\"Pesquisar um campo...\"],\"k7kp5/\":[\"Pesquisar um índice...\"],\"7taA9j\":[\"Campos de pesquisa\"],\"ofuw3g\":[\"Procurar um objeto...\"],\"IMeaSJ\":[\"Procurar registos\"],\"a3LDKx\":[\"Segurança\"],\"QREcJS\":[\"Ver versão ativa\"],\"OpPn5Z\":[\"Ver corridas\"],\"EtyY4+\":[\"Ver versões\"],\"lYhPN0\":[\"Ver histórico de versões\"],\"xraglu\":[\"Selecione os eventos que pretende enviar para este ponto final\"],\"AXTJAW\":[\"Selecione a sua língua preferida\"],\"mjK8F3\":[\"Enviar um convite por correio eletrónico à sua equipa\"],\"yy5k7a\":[\"Painel de administração do servidor\"],\"V7fgiB\":[\"Defina a visibilidade do correio eletrónico, gira a sua lista de bloqueio e muito mais.\"],\"cx14rp\":[\"Definir o nome do seu domínio\"],\"tn41zE\":[\"Defina o nome do seu subdomínio\"],\"Tz0i8g\":[\"Definições\"],\"Vy9kmk\":[\"Partilhe esta ligação para convidar utilizadores a juntarem-se ao seu espaço de trabalho\"],\"gWk8gY\":[\"A alteração do rótulo de um campo deve também alterar o nome da API?\"],\"6Uau97\":[\"Saltar\"],\"f6Hub0\":[\"Ordenar\"],\"65A04M\":[\"Espanhol\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Subdomínio\"],\"omhc+7\":[\"Subdomínio já ocupado\"],\"OlC/tU\":[\"O subdomínio não pode ter mais de 30 caracteres\"],\"ZETwlU\":[\"O subdomínio não pode ter menos de 3 caracteres\"],\"B5jRKH\":[\"A subscrição foi mudada \",[\"to\"]],\"AxQiPW\":[\"Soma\"],\"XYLcNv\":[\"Apoio\"],\"9yk9d1\":[\"Comutador \",[\"from\"]],\"qi74XZ\":[\"Comutador \",[\"to\"]],\"L6Fg36\":[\"Mudar a faturação \",[\"to\"]],\"AtzMpB\":[\"Sincronizar a etiqueta do campo e o nome da API\"],\"E3AMmw\":[\"Definições do sistema - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Definições do sistema - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Teste\"],\"bU9B27\":[\"Fluxo de trabalho de teste\"],\"2OUtmv\":[\"A descrição deste campo\"],\"VGZYbZ\":[\"O correio eletrónico associado à sua conta\"],\"h8mvCd\":[\"O nome e o ícone deste campo\"],\"L97sPr\":[\"A página que procura não existe ou nunca existiu. Vamos voltar a pô-lo no caminho certo\"],\"uWikAA\":[\"Os valores deste campo\"],\"+69KDk\":[\"Os valores deste campo devem ser únicos\"],\"PmtLRf\":[\"Houve um problema\"],\"hqCwGc\":[\"Esta ação não pode ser anulada. Esta ação elimina permanentemente este utilizador e retira-o de todas as suas tarefas.\"],\"gWGuHC\":[\"Esta ação não pode ser anulada. Esta ação eliminará permanentemente todo o seu espaço de trabalho. <0/> Introduza o seu e-mail para confirmar.\"],\"n9nSNJ\":[\"Formato da hora\"],\"aqMzDX\":[\"ao mês\"],\"WXXiXO\":[\"a anual\"],\"PiUt3N\":[\"Tipo de disparo\"],\"IQ5pAL\":[\"O tipo de acionamento deve ser Manual - quando nenhum registo é selecionado\"],\"+zy2Nq\":[\"Tipo\"],\"U83IeL\":[\"Tipo qualquer coisa\"],\"wSXm5S\":[\"Único\"],\"GQCXQS\":[\"Contactos ilimitados\"],\"ONWvwQ\":[\"Carregar\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Utilizar como projeto\"],\"oTTQsc\":[\"Utilizar apenas letras, números e traços. Comece e termine com uma letra ou um número\"],\"c6uZUV\":[\"Utilize a nossa API ou adicione o seu primeiro \",[\"objectLabel\"],\" manualmente\"],\"7PzzBU\":[\"Utilizador\"],\"IjyOjp\":[\"O utilizador não tem sessão iniciada\"],\"fXVIZq\":[\"Valores\"],\"KANz0G\":[\"Ver detalhes da faturação\"],\"6n7jtr\":[\"Visualizar\"],\"id6ein\":[\"Suportamos os seus PNGs, JPEGs e GIFs quadrados com menos de 10 MB\"],\"ZS7vYp\":[\"Enviaremos pedidos POST a este ponto final para cada novo evento\"],\"TRDppN\":[\"Webhook\"],\"v1kQyJ\":[\"Webhooks\"],\"C51ilI\":[\"Quando é que a chave da API expira.\"],\"leUubq\":[\"Quando a tecla será desactivada\"],\"wvyffT\":[\"O fluxo de trabalho não pode ser testado\"],\"pmUArF\":[\"Espaço de trabalho\"],\"VicISP\":[\"Eliminação do espaço de trabalho\"],\"Q9pNST\":[\"Escrever uma descrição\"],\"3d1wCB\":[\"sim\"],\"zSkMV0\":[\"Ser-lhe-á cobrado imediatamente o valor total do ano.\"],\"XVnj6K\":[\"O seu saldo de crédito será utilizado para pagar as facturas mensais.\"],\"9ivpwk\":[\"O seu nome como será apresentado\"],\"RhNbPE\":[\"O seu espaço de trabalho será desativado\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\" de \",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" Chave da API\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 execuções de nós de fluxo de trabalho\"],\"4EdXYs\":[\"12h (\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2. Configurar campo\"],\"QsMprd\":[\"24h (\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"Abortar\"],\"uyJsf6\":[\"Sobre\"],\"AeXO77\":[\"Conta\"],\"nD0Y+a\":[\"Eliminação da conta\"],\"bPwFdf\":[\"Contas\"],\"FQBaXG\":[\"Ativar\"],\"tu8A/k\":[\"Ativar o fluxo de trabalho\"],\"F6pfE9\":[\"Ativo\"],\"Mue4oc\":[\"Chaves de API activas criadas por si ou pela sua equipa.\"],\"m16xKo\":[\"Adicionar\"],\"DpV70M\":[\"Adicionar campo\"],\"dEO3Zx\":[\"Adicionar objeto\"],\"sgXUv+\":[\"Adicionar fornecedor de identidade SSO\"],\"5+ttxv\":[\"Adicionar à lista de bloqueio\"],\"pBsoKL\":[\"Adicionar aos favoritos\"],\"m2qDV8\":[\"Adicione o seu primeiro \",[\"objectLabel\"]],\"vLO+NG\":[\"Adicionado \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"Todos\"],\"3saA7W\":[\"Todos (\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"Todos os papéis\"],\"GMx1K0\":[\"Permitir logins através da funcionalidade de início de sessão único do Google.\"],\"dea+zy\":[\"Permitir inícios de sessão através da funcionalidade de início de sessão único da Microsoft.\"],\"wMg43c\":[\"Permitir o convite de novos utilizadores através da partilha de uma ligação de convite.\"],\"vHeVg5\":[\"Permitir que os utilizadores iniciem sessão com um e-mail e uma palavra-passe.\"],\"mJ6m4C\":[\"Uma descrição opcional\"],\"0RqpZr\":[\"API e Webhooks\"],\"yRnk5W\":[\"Chave API\"],\"5h8ooz\":[\"Chaves API\"],\"kAtj+q\":[\"Nome da API\"],\"aAIQg2\":[\"Aparência\"],\"3iX0kh\":[\"Tem a certeza de que pretende alterar o seu intervalo de faturação?\"],\"nYD/Cq\":[\"Ascendente\"],\"rfYmIr\":[\"Atribuir funções para especificar as permissões de acesso de cada membro\"],\"lxQ+5m\":[\"Atribuído a\"],\"Y7Dx6e\":[\"Pelo menos um método de autenticação deve estar ativado\"],\"P8fBlG\":[\"Autenticação\"],\"yIVrHZ\":[\"Autorizar\"],\"3uQmjD\":[\"Média\"],\"Dht9W3\":[\"Voltar ao conteúdo\"],\"R+w/Va\":[\"Faturação\"],\"K1172m\":[\"Lista de bloqueios\"],\"2yl5lQ\":[\"Marcar uma chamada\"],\"PmmvzS\":[\"Calcular\"],\"AjVXBS\":[\"Calendário\"],\"EUpfsd\":[\"Calendários\"],\"dEgA5A\":[\"Cancelar\"],\"0TllC8\":[\"Cancelar a qualquer momento\"],\"rRK/Lf\":[\"Cancelar plano\"],\"N6gPiD\":[\"Cancelar a sua subscrição\"],\"OfzMnb\":[\"Alterar \",[\"to\"]],\"VhMDMg\":[\"Alterar a palavra-passe\"],\"SviKkE\":[\"Chinês - Simplificado\"],\"dzb4Ep\":[\"Chinês - Tradicional\"],\"JEFFOR\":[\"Escolher um objeto\"],\"KT6rEB\":[\"Escolha o seu fornecedor\"],\"9qP96p\":[\"Escolha o seu teste\"],\"yz7wBu\":[\"Fechar\"],\"+zUMwJ\":[\"Configurar uma ligação SSO\"],\"QTNsSm\":[\"Configure e personalize as suas preferências de calendário.\"],\"aGwm+D\":[\"Configurar a forma como as datas são apresentadas na aplicação\"],\"Bh4GBD\":[\"Configure as definições de correio eletrónico e calendário.\"],\"D8ATlr\":[\"Ligar uma nova conta ao seu espaço de trabalho\"],\"Zgi9Fd\":[\"Ligar ao Google\"],\"IOfqM8\":[\"Ligar à Microsoft\"],\"9TzudL\":[\"Contas ligadas\"],\"M73whl\":[\"Contexto\"],\"xGVfLh\":[\"Continuar\"],\"CcGOj+\":[\"Copiloto\"],\"7eVkEH\":[\"Copiar a hiperligação do convite\"],\"Ej5euX\":[\"Copiar esta chave, uma vez que não voltará a ser visível\"],\"wBMjJ2\":[\"Contagem\"],\"EkZfen\":[\"Contar tudo\"],\"vQJINq\":[\"Contagem vazia\"],\"DzRsDJ\":[\"Contagem não vazia\"],\"9FZBbf\":[\"Contar valores únicos\"],\"zNoOC2\":[\"Criar um fluxo de trabalho e regressar aqui para ver as suas versões\"],\"uXGLuq\":[\"Criar chave API\"],\"d0DCww\":[\"Criar novo registo\"],\"dkAPxi\":[\"Criar Webhook\"],\"8skTDV\":[\"Objectos personalizados\"],\"qt+EaC\":[\"Personalizar os campos disponíveis nas vistas \",[\"objectLabelSingular\"],\".\"],\"CMhr4u\":[\"Personalizar domínio\"],\"bCJa9l\":[\"Personalize a segurança do seu espaço de trabalho\"],\"Zz6Cxn\":[\"Zona de perigo\"],\"5cNMFz\":[\"Modelo de dados\"],\"r+cVRP\":[\"Tipo de dados\"],\"mYGY3B\":[\"Data\"],\"Ud9zHv\":[\"Data e hora\"],\"5y3O+A\":[\"Desativar\"],\"qk4i22\":[\"Desativar \\\"Sincronizar etiquetas de objectos e nomes de API\\\" para definir um nome de API personalizado\"],\"gexAq8\":[\"Desativar este campo\"],\"4tpC8V\":[\"Desativar o fluxo de trabalho\"],\"Y2ImVJ\":[\"Definir o nome e a descrição do seu objeto\"],\"cnGeoo\":[\"Eliminar\"],\"ZDGm40\":[\"Eliminar a conta\"],\"gAz0S5\":[\"Eliminar a conta e todos os dados associados\"],\"hGfWDm\":[\"Eliminar a chave API\"],\"4dpwsE\":[\"Eliminar registo\"],\"kf0A63\":[\"Eliminar registos\"],\"T6S2Ns\":[\"Eliminar esta integração\"],\"snMaH4\":[\"Eliminar webhook\"],\"kYu0eF\":[\"Eliminar espaço de trabalho\"],\"mk2Ygs\":[\"Eliminar todo o seu espaço de trabalho\"],\"Cko536\":[\"Descendente\"],\"Nu4oKW\":[\"Descrição\"],\"2xxBws\":[\"Destruir\"],\"n+SX4g\":[\"Programadores\"],\"zAg2B9\":[\"Rascunho de descarte\"],\"i66xz9\":[\"Exibir como data relativa\"],\"EoKe5U\":[\"Domínio\"],\"QVVmxi\":[\"Por exemplo, integração de backoffice\"],\"tOkc8o\":[\"Mais antigo\"],\"JTbQuO\":[\"Data mais antiga\"],\"v+uKyy\":[\"Editar intervalo de faturação\"],\"h2KoTu\":[\"Editar o método de pagamento, ver as suas facturas e muito mais\"],\"6o1M/Q\":[\"Edite o nome do seu subdomínio ou defina um domínio personalizado.\"],\"O3oNi5\":[\"Correio eletrónico\"],\"lfQsvW\":[\"Integração de correio eletrónico\"],\"QT/Wo7\":[\"O e-mail ou domínio já está na lista de bloqueio\"],\"BXEcos\":[\"Emails\"],\"eXoH4Q\":[\"empregados\"],\"gqv5ZL\":[\"Empregados\"],\"N2S1rs\":[\"Vazio\"],\"T3juzf\":[\"URL do ponto final\"],\"lYGfRP\":[\"Inglês\"],\"/bfFKe\":[\"Desfrute de um período experimental gratuito de \",[\"withCreditCardTrialPeriodDuration\"],\"-dias\"],\"GpB8YV\":[\"Empresa\"],\"c3qGJX\":[\"Erro ao eliminar a chave api: \",[\"err\"]],\"bj7nh3\":[\"Erro ao regenerar a chave api: \",[\"err\"]],\"VSQxWH\":[\"Erro ao mudar de subscrição \",[\"to\"],\".\"],\"JLxMta\":[\"Estabelecer pontos de extremidade Webhook para notificações sobre eventos assíncronos.\"],\"cIgBjB\":[\"Excluir as seguintes pessoas e domínios da minha sincronização de correio eletrónico\"],\"fV7V51\":[\"Objectos existentes\"],\"IZ4o2e\":[\"Sair das definições\"],\"tXGQvS\":[\"Espera-se que o nó selecionado seja um nó de etapa de criação.\"],\"bKBhgb\":[\"Experiência\"],\"LxRNPw\":[\"Expiração\"],\"SkXfL0\":[\"Data de expiração\"],\"i9qiyR\":[\"Expira em\"],\"GS+Mus\":[\"Exportação\"],\"ep2rbf\":[\"Registos de exportação\"],\"q46CjD\":[\"Exportar para PDF\"],\"DaGxE0\":[\"Vista de exportação\"],\"X9kySA\":[\"Favoritos\"],\"zXgopL\":[\"Tipo de campo\"],\"vF68cg\":[\"Campos\"],\"3w/aqw\":[\"Contagem de campos\"],\"o7J4JM\":[\"Filtro\"],\"cSev+j\":[\"Filtros\"],\"nLC6tu\":[\"Francês\"],\"aTieE0\":[\"de mensal para anual\"],\"K04lE5\":[\"de anual para mensal\"],\"scmRyR\":[\"Acesso total\"],\"xANKBj\":[\"Funções\"],\"Weq9zb\":[\"Geral\"],\"DDcvSo\":[\"Alemão\"],\"NXEW3h\":[\"Tire o máximo partido do seu espaço de trabalho convidando a sua equipa.\"],\"zSGbaR\":[\"Obter a sua subscrição\"],\"2GT3Hf\":[\"Mundial\"],\"hWp1MY\":[\"Conceda ao suporte do Twenty acesso temporário ao seu espaço de trabalho para que possamos solucionar problemas ou recuperar conteúdo em seu nome. Pode revogar o acesso em qualquer altura.\"],\"vLyv1R\":[\"Esconder\"],\"XTWO+W\":[\"Ícone e nome\"],\"sJGljQ\":[\"Identificador\"],\"j843N3\":[\"Se perdeu esta chave, pode regenerá-la, mas tenha em atenção que qualquer script que utilize esta chave terá de ser atualizado. Digite\\\"\",[\"confirmationValue\"],\"\\\" para confirmar.\"],\"NoNwIX\":[\"Inativo\"],\"pZ/USH\":[\"Índices\"],\"JE2tjr\":[\"A entrada deve estar em maiúsculas e minúsculas e não pode começar com um número\"],\"AwUsnG\":[\"Instâncias\"],\"nbfdhU\":[\"Integrações\"],\"NtFk/Z\":[\"Fornecedor de autenticação inválido\"],\"B2Tpo0\":[\"Correio eletrónico inválido\"],\"/m52AE\":[\"Correio eletrónico ou domínio inválido\"],\"QdoUFL\":[\"Valores de formulário inválidos\"],\"0M8+El\":[\"Convite por correio eletrónico\"],\"PWIq/W\":[\"Convidar por ligação\"],\"3athPG\":[\"Convidar por ligação\"],\"5IfmKA\":[\"Ligação de convite enviada para endereços de correio eletrónico\"],\"d+Y+rP\":[\"Convide a sua equipa\"],\"Lj7sBL\":[\"Italiano\"],\"dFtidv\":[\"Japonês\"],\"h6S9Yz\":[\"Coreano\"],\"zrpwCd\":[\"Laboratório\"],\"vXIe7J\":[\"Língua\"],\"wL3cK8\":[\"Mais recentes\"],\"Kcjbmz\":[\"Última data\"],\"pQjjYo\":[\"Ligação copiada para a área de transferência\"],\"FgAxTj\":[\"Terminar sessão\"],\"nOhz3x\":[\"Terminar sessão\"],\"T6YjCk\":[\"Gerir membros\"],\"4cjU2u\":[\"Gerir os membros do seu espaço aqui\"],\"FyFNsd\":[\"Gerir as suas contas de Internet.\"],\"36kYu0\":[\"Gerir a sua subscrição\"],\"3Sdni6\":[\"Marcar como concluído\"],\"CK1KXz\":[\"Máximo\"],\"wlQNTg\":[\"Membros\"],\"eTUF28\":[\"Mínimo\"],\"3Siwmw\":[\"Mais opções\"],\"iSLA/r\":[\"Mover para a esquerda\"],\"Ubl2by\":[\"Mover para a direita\"],\"6YtxFj\":[\"Nome\"],\"z+6jaZ\":[\"Nome da sua chave API\"],\"J7w8lI\":[\"Nome do seu espaço de trabalho\"],\"2T8KCk\":[\"Navegar para o registo seguinte\"],\"veSA19\":[\"Navegar para a versão seguinte\"],\"ZTEho+\":[\"Navegar para o fluxo de trabalho seguinte\"],\"2tw9bo\":[\"Navegar para o registo anterior\"],\"I+Pm5V\":[\"Navegar para a versão anterior\"],\"QVUN3K\":[\"Navegar para o fluxo de trabalho anterior\"],\"isRobC\":[\"Novo\"],\"Kcr9Fr\":[\"Nova conta\"],\"o8MyXb\":[\"Nova chave\"],\"j313SZ\":[\"Nova chave\"],\"hFxdey\":[\"Novo objeto\"],\"7vhWI8\":[\"Nova palavra-passe\"],\"BcCzLv\":[\"Novo recorde\"],\"2lmOC5\":[\"Novo papel\"],\"U1DAok\":[\"Novo Webhook\"],\"pwenQu\":[\"Nenhuma conta ligada\"],\"0uWxPM\":[\"Ainda não foi executado nenhum fluxo de trabalho\"],\"AQCvCC\":[\"Ainda não há versões de fluxo de trabalho\"],\"4wUkDk\":[\"Não vazio\"],\"W0i24j\":[\"Objeto\"],\"B3toQF\":[\"Objectos\"],\"KNz3EF\":[\"Fora do caminho tradicional\"],\"OV5wZZ\":[\"Aberto\"],\"0zpgxV\":[\"Opções\"],\"BzEFor\":[\"ou\"],\"/IX/7x\":[\"Outros\"],\"boJlGf\":[\"Página não encontrada\"],\"8ZsakT\":[\"Palavra-passe\"],\"mi6Rel\":[\"A ligação de reposição da palavra-passe foi enviada para o e-mail\"],\"SrVzRe\":[\"Percentagem\"],\"yIK1GU\":[\"Percentagem de vazio\"],\"PWLd4c\":[\"Percentagem não vazia\"],\"Bv3y5w\":[\"Destruir permanentemente o registo\"],\"N0+GsR\":[\"Imagem\"],\"jEw0Mr\":[\"Introduzir um URL válido\"],\"6nsIo3\":[\"Digite \\\"\",[\"confirmationValue\"],\"\\\" para confirmar que deseja excluir essa chave de API. Tenha em atenção que qualquer script que utilize esta chave deixará de funcionar.\"],\"mFZTXr\":[\"Introduza \",[\"confirmationText\"],\" para confirmar que pretende eliminar este webhook.\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"Português - Brasil\"],\"xtXHeo\":[\"Português - Portugal\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"Pré-visualização\"],\"vERlcd\":[\"Perfil\"],\"YJgRqq\":[\"Pseudo-inglês\"],\"ibPuCP\":[\"Ler a documentação\"],\"v3xM25\":[\"Receber uma mensagem de correio eletrónico com uma ligação para atualização da palavra-passe\"],\"dSCufP\":[\"Seleção de registos\"],\"vpZcGd\":[\"Regenerar uma chave API\"],\"Mwqo5m\":[\"Regenerar chave\"],\"D+Mv78\":[\"Regenerar chave\"],\"5icoS1\":[\"Lançamentos\"],\"t/YqKh\":[\"Remover\"],\"T/pF0Z\":[\"Remover dos favoritos\"],\"KbS2K9\":[\"Repor a palavra-passe\"],\"1IWc1n\":[\"Redefinir para\"],\"kx0s+n\":[\"Resultados\"],\"5dJK4M\":[\"Funções\"],\"UX0N2y\":[\"Executar um fluxo de trabalho e regressar aqui para ver as suas execuções\"],\"A1taO8\":[\"Pesquisar\"],\"l1/uy2\":[\"Pesquisar um campo...\"],\"k7kp5/\":[\"Pesquisar um índice...\"],\"7taA9j\":[\"Campos de pesquisa\"],\"ofuw3g\":[\"Procurar um objeto...\"],\"IMeaSJ\":[\"Procurar registos\"],\"a3LDKx\":[\"Segurança\"],\"QREcJS\":[\"Ver versão ativa\"],\"OpPn5Z\":[\"Ver corridas\"],\"EtyY4+\":[\"Ver versões\"],\"lYhPN0\":[\"Ver histórico de versões\"],\"xraglu\":[\"Selecione os eventos que pretende enviar para este ponto final\"],\"AXTJAW\":[\"Selecione a sua língua preferida\"],\"mjK8F3\":[\"Enviar um convite por correio eletrónico à sua equipa\"],\"yy5k7a\":[\"Painel de administração do servidor\"],\"V7fgiB\":[\"Defina a visibilidade do correio eletrónico, gira a sua lista de bloqueio e muito mais.\"],\"cx14rp\":[\"Definir o nome do seu domínio\"],\"tn41zE\":[\"Defina o nome do seu subdomínio\"],\"Tz0i8g\":[\"Definições\"],\"Vy9kmk\":[\"Partilhe esta ligação para convidar utilizadores a juntarem-se ao seu espaço de trabalho\"],\"gWk8gY\":[\"A alteração do rótulo de um campo deve também alterar o nome da API?\"],\"6Uau97\":[\"Saltar\"],\"f6Hub0\":[\"Ordenar\"],\"65A04M\":[\"Espanhol\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"Subdomínio\"],\"omhc+7\":[\"Subdomínio já ocupado\"],\"OlC/tU\":[\"O subdomínio não pode ter mais de 30 caracteres\"],\"ZETwlU\":[\"O subdomínio não pode ter menos de 3 caracteres\"],\"B5jRKH\":[\"A subscrição foi mudada \",[\"to\"]],\"AxQiPW\":[\"Soma\"],\"XYLcNv\":[\"Apoio\"],\"9yk9d1\":[\"Comutador \",[\"from\"]],\"qi74XZ\":[\"Comutador \",[\"to\"]],\"L6Fg36\":[\"Mudar a faturação \",[\"to\"]],\"AtzMpB\":[\"Sincronizar a etiqueta do campo e o nome da API\"],\"E3AMmw\":[\"Definições do sistema - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"Definições do sistema - \",[\"systemTimeFormatLabel\"]],\"NnH3pK\":[\"Teste\"],\"bU9B27\":[\"Fluxo de trabalho de teste\"],\"2OUtmv\":[\"A descrição deste campo\"],\"VGZYbZ\":[\"O correio eletrónico associado à sua conta\"],\"h8mvCd\":[\"O nome e o ícone deste campo\"],\"L97sPr\":[\"A página que procura não existe ou nunca existiu. Vamos voltar a pô-lo no caminho certo\"],\"uWikAA\":[\"Os valores deste campo\"],\"+69KDk\":[\"Os valores deste campo devem ser únicos\"],\"PmtLRf\":[\"Houve um problema\"],\"hqCwGc\":[\"Esta ação não pode ser anulada. Esta ação elimina permanentemente este utilizador e retira-o de todas as suas tarefas.\"],\"gWGuHC\":[\"Esta ação não pode ser anulada. Esta ação eliminará permanentemente todo o seu espaço de trabalho. <0/> Introduza o seu e-mail para confirmar.\"],\"n9nSNJ\":[\"Formato da hora\"],\"aqMzDX\":[\"ao mês\"],\"WXXiXO\":[\"a anual\"],\"PiUt3N\":[\"Tipo de disparo\"],\"IQ5pAL\":[\"O tipo de acionamento deve ser Manual - quando nenhum registo é selecionado\"],\"+zy2Nq\":[\"Tipo\"],\"U83IeL\":[\"Tipo qualquer coisa\"],\"wSXm5S\":[\"Único\"],\"GQCXQS\":[\"Contactos ilimitados\"],\"ONWvwQ\":[\"Carregar\"],\"IagCbF\":[\"URL\"],\"6dMpmz\":[\"Utilizar como projeto\"],\"oTTQsc\":[\"Utilizar apenas letras, números e traços. Comece e termine com uma letra ou um número\"],\"c6uZUV\":[\"Utilize a nossa API ou adicione o seu primeiro \",[\"objectLabel\"],\" manualmente\"],\"7PzzBU\":[\"Utilizador\"],\"IjyOjp\":[\"O utilizador não tem sessão iniciada\"],\"fXVIZq\":[\"Valores\"],\"KANz0G\":[\"Ver detalhes da faturação\"],\"6n7jtr\":[\"Visualizar\"],\"id6ein\":[\"Suportamos os seus PNGs, JPEGs e GIFs quadrados com menos de 10 MB\"],\"ZS7vYp\":[\"Enviaremos pedidos POST a este ponto final para cada novo evento\"],\"TRDppN\":[\"Webhook\"],\"v1kQyJ\":[\"Webhooks\"],\"C51ilI\":[\"Quando é que a chave da API expira.\"],\"leUubq\":[\"Quando a tecla será desactivada\"],\"wvyffT\":[\"O fluxo de trabalho não pode ser testado\"],\"pmUArF\":[\"Espaço de trabalho\"],\"VicISP\":[\"Eliminação do espaço de trabalho\"],\"Q9pNST\":[\"Escrever uma descrição\"],\"3d1wCB\":[\"sim\"],\"zSkMV0\":[\"Ser-lhe-á cobrado imediatamente o valor total do ano.\"],\"XVnj6K\":[\"O seu saldo de crédito será utilizado para pagar as facturas mensais.\"],\"9ivpwk\":[\"O seu nome como será apresentado\"],\"RhNbPE\":[\"O seu espaço de trabalho será desativado\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/generated/zh-Hans.ts b/packages/twenty-front/src/locales/generated/zh-Hans.ts index a9a7549331d5..23765891e468 100644 --- a/packages/twenty-front/src/locales/generated/zh-Hans.ts +++ b/packages/twenty-front/src/locales/generated/zh-Hans.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\"的\",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" 应用程序接口密钥\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 次工作流节点执行\"],\"4EdXYs\":[\"12h ([\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2.配置字段\"],\"QsMprd\":[\"24小时([\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"中止\"],\"uyJsf6\":[\"关于\"],\"AeXO77\":[\"账户\"],\"nD0Y+a\":[\"账户删除\"],\"bPwFdf\":[\"账户\"],\"FQBaXG\":[\"激活\"],\"tu8A/k\":[\"激活工作流程\"],\"F6pfE9\":[\"活跃\"],\"Mue4oc\":[\"由您或您的团队创建的活动 API 密钥。\"],\"m16xKo\":[\"添加\"],\"DpV70M\":[\"添加字段\"],\"dEO3Zx\":[\"添加对象\"],\"sgXUv+\":[\"添加 SSO 身份供应商\"],\"5+ttxv\":[\"添加到拦截列表\"],\"pBsoKL\":[\"添加到收藏夹\"],\"m2qDV8\":[\"添加您的第一个 \",[\"objectLabel\"]],\"vLO+NG\":[\"已添加 \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"全部\"],\"3saA7W\":[\"全部([\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"所有角色\"],\"GMx1K0\":[\"允许通过 Google 的单点登录功能登录。\"],\"dea+zy\":[\"允许通过微软的单点登录功能登录。\"],\"wMg43c\":[\"允许通过共享邀请链接来邀请新用户。\"],\"vHeVg5\":[\"允许用户使用电子邮件和密码登录。\"],\"mJ6m4C\":[\"可选描述\"],\"0RqpZr\":[\"应用程序接口和网络钩子\"],\"yRnk5W\":[\"API 密钥\"],\"5h8ooz\":[\"API 密钥\"],\"kAtj+q\":[\"应用程序接口名称\"],\"aAIQg2\":[\"外观\"],\"3iX0kh\":[\"您确定要更改计费间隔吗?\"],\"nYD/Cq\":[\"上升\"],\"rfYmIr\":[\"分配角色以指定每个成员的访问权限\"],\"lxQ+5m\":[\"分配给\"],\"Y7Dx6e\":[\"必须启用至少一种身份验证方法\"],\"P8fBlG\":[\"认证\"],\"yIVrHZ\":[\"授权\"],\"3uQmjD\":[\"平均\"],\"Dht9W3\":[\"返回内容\"],\"R+w/Va\":[\"账单\"],\"K1172m\":[\"拦截列表\"],\"2yl5lQ\":[\"预约电话\"],\"PmmvzS\":[\"计算\"],\"AjVXBS\":[\"日历\"],\"EUpfsd\":[\"日历\"],\"dEgA5A\":[\"取消\"],\"0TllC8\":[\"随时取消\"],\"rRK/Lf\":[\"取消计划\"],\"N6gPiD\":[\"取消订阅\"],\"OfzMnb\":[\"更改 \",[\"to\"]],\"VhMDMg\":[\"更改密码\"],\"SviKkE\":[\"简体中文\"],\"dzb4Ep\":[\"繁体中文\"],\"JEFFOR\":[\"选择对象\"],\"KT6rEB\":[\"选择服务提供商\"],\"9qP96p\":[\"选择试用\"],\"yz7wBu\":[\"关闭\"],\"+zUMwJ\":[\"配置 SSO 连接\"],\"QTNsSm\":[\"配置和自定义日历偏好。\"],\"aGwm+D\":[\"配置整个应用程序的日期显示方式\"],\"Bh4GBD\":[\"配置电子邮件和日历设置。\"],\"D8ATlr\":[\"将新账户连接到工作区\"],\"Zgi9Fd\":[\"与谷歌连接\"],\"IOfqM8\":[\"与微软联系\"],\"9TzudL\":[\"连接账户\"],\"M73whl\":[\"背景\"],\"xGVfLh\":[\"继续\"],\"CcGOj+\":[\"副驾驶\"],\"7eVkEH\":[\"复制邀请链接\"],\"Ej5euX\":[\"复制此密钥,因为它将不再可见\"],\"wBMjJ2\":[\"计数\"],\"EkZfen\":[\"计算所有\"],\"vQJINq\":[\"数空\"],\"DzRsDJ\":[\"计数不为空\"],\"9FZBbf\":[\"计算唯一值\"],\"zNoOC2\":[\"创建工作流程并返回此处查看其版本\"],\"uXGLuq\":[\"创建应用程序接口密钥\"],\"d0DCww\":[\"创建新记录\"],\"dkAPxi\":[\"创建 Webhook\"],\"8skTDV\":[\"自定义对象\"],\"qt+EaC\":[\"自定义 \",[\"objectLabelSingular\"],\" 视图中可用的字段。\"],\"CMhr4u\":[\"自定义域名\"],\"bCJa9l\":[\"自定义工作空间安全\"],\"Zz6Cxn\":[\"危险区\"],\"5cNMFz\":[\"数据模型\"],\"r+cVRP\":[\"数据类型\"],\"mYGY3B\":[\"日期\"],\"Ud9zHv\":[\"日期和时间\"],\"5y3O+A\":[\"停用\"],\"qk4i22\":[\"停用 \\\"同步对象标签和 API 名称 \\\"以设置自定义 API 名称\"],\"gexAq8\":[\"停用该字段\"],\"4tpC8V\":[\"停用工作流程\"],\"Y2ImVJ\":[\"定义对象的名称和描述\"],\"cnGeoo\":[\"删除\"],\"ZDGm40\":[\"删除帐户\"],\"gAz0S5\":[\"删除账户和所有相关数据\"],\"hGfWDm\":[\"删除 API 密钥\"],\"4dpwsE\":[\"删除记录\"],\"kf0A63\":[\"删除记录\"],\"T6S2Ns\":[\"删除此集成\"],\"snMaH4\":[\"删除网络钩子\"],\"kYu0eF\":[\"删除工作区\"],\"mk2Ygs\":[\"删除整个工作区\"],\"Cko536\":[\"下降\"],\"Nu4oKW\":[\"说明\"],\"2xxBws\":[\"销毁\"],\"n+SX4g\":[\"开发人员\"],\"zAg2B9\":[\"弃权草案\"],\"i66xz9\":[\"显示为相对日期\"],\"EoKe5U\":[\"域名\"],\"QVVmxi\":[\"例如后台整合\"],\"tOkc8o\":[\"最早\"],\"JTbQuO\":[\"最早日期\"],\"v+uKyy\":[\"编辑计费间隔\"],\"h2KoTu\":[\"编辑付款方式、查看发票等\"],\"6o1M/Q\":[\"编辑子域名或设置自定义域名。\"],\"O3oNi5\":[\"电子邮件\"],\"lfQsvW\":[\"电子邮件集成\"],\"QT/Wo7\":[\"电子邮件或域名已在拦截列表中\"],\"BXEcos\":[\"电子邮件\"],\"eXoH4Q\":[\"员工\"],\"gqv5ZL\":[\"员工\"],\"N2S1rs\":[\"空\"],\"T3juzf\":[\"端点 URL\"],\"lYGfRP\":[\"英语\"],\"/bfFKe\":[\"享受 \",[\"withCreditCardTrialPeriodDuration\"],\" 天的免费试用期\"],\"GpB8YV\":[\"企业\"],\"c3qGJX\":[\"删除 api 密钥时出错: \",[\"err\"]],\"bj7nh3\":[\"重新生成 api 密钥时出错: \",[\"err\"]],\"VSQxWH\":[\"切换订阅 \",[\"to\"],\" 时出错。\"],\"JLxMta\":[\"建立 Webhook 端点,用于通知异步事件。\"],\"cIgBjB\":[\"从我的电子邮件同步中排除以下人员和域\"],\"fV7V51\":[\"现有对象\"],\"IZ4o2e\":[\"退出设置\"],\"tXGQvS\":[\"预期所选节点为创建步骤节点。\"],\"bKBhgb\":[\"经验\"],\"LxRNPw\":[\"到期\"],\"SkXfL0\":[\"有效期\"],\"i9qiyR\":[\"到期时间\"],\"GS+Mus\":[\"出口\"],\"ep2rbf\":[\"导出记录\"],\"q46CjD\":[\"导出为 PDF\"],\"DaGxE0\":[\"导出视图\"],\"X9kySA\":[\"收藏夹\"],\"zXgopL\":[\"字段类型\"],\"vF68cg\":[\"字段\"],\"3w/aqw\":[\"字段计数\"],\"o7J4JM\":[\"过滤器\"],\"cSev+j\":[\"过滤器\"],\"nLC6tu\":[\"法语\"],\"aTieE0\":[\"从每月到每年\"],\"K04lE5\":[\"从每年到每月\"],\"scmRyR\":[\"完全访问\"],\"xANKBj\":[\"功能\"],\"Weq9zb\":[\"一般情况\"],\"DDcvSo\":[\"德国\"],\"NXEW3h\":[\"邀请您的团队,充分利用您的工作空间。\"],\"zSGbaR\":[\"获取订阅\"],\"2GT3Hf\":[\"全球\"],\"hWp1MY\":[\"授予 Twenty 支持临时访问您工作区的权限,以便我们代表您排除故障或恢复内容。您可以随时撤销访问权限。\"],\"vLyv1R\":[\"隐藏\"],\"XTWO+W\":[\"图标和名称\"],\"sJGljQ\":[\"标识符\"],\"j843N3\":[\"如果您丢失了此密钥,可以重新生成,但请注意,任何使用此密钥的脚本都需要更新。请键入\\\"\",[\"confirmationValue\"],\"\\\"确认。\"],\"NoNwIX\":[\"不活动\"],\"pZ/USH\":[\"索引\"],\"JE2tjr\":[\"输入内容必须使用驼峰字体,且不能以数字开头\"],\"AwUsnG\":[\"实例\"],\"nbfdhU\":[\"集成\"],\"NtFk/Z\":[\"无效验证提供程序\"],\"B2Tpo0\":[\"无效电子邮件\"],\"/m52AE\":[\"无效电子邮件或域名\"],\"QdoUFL\":[\"无效表格值\"],\"0M8+El\":[\"电子邮件邀请\"],\"PWIq/W\":[\"通过链接邀请\"],\"3athPG\":[\"通过链接邀请\"],\"5IfmKA\":[\"向电子邮件地址发送邀请链接\"],\"d+Y+rP\":[\"邀请您的团队\"],\"Lj7sBL\":[\"意大利语\"],\"h6S9Yz\":[\"韩语\"],\"zrpwCd\":[\"实验室\"],\"vXIe7J\":[\"语言\"],\"wL3cK8\":[\"最新\"],\"Kcjbmz\":[\"最新日期\"],\"pQjjYo\":[\"链接复制到剪贴板\"],\"FgAxTj\":[\"退出登录\"],\"nOhz3x\":[\"注销\"],\"T6YjCk\":[\"管理成员\"],\"4cjU2u\":[\"在此管理空间成员\"],\"FyFNsd\":[\"管理互联网账户\"],\"36kYu0\":[\"管理您的订阅\"],\"3Sdni6\":[\"标记为已完成\"],\"CK1KXz\":[\"最大\"],\"wlQNTg\":[\"成员\"],\"eTUF28\":[\"最小\"],\"3Siwmw\":[\"更多选择\"],\"iSLA/r\":[\"向左移动\"],\"Ubl2by\":[\"向右移动\"],\"6YtxFj\":[\"名称\"],\"z+6jaZ\":[\"API 密钥名称\"],\"J7w8lI\":[\"工作区名称\"],\"2T8KCk\":[\"导航至下一条记录\"],\"veSA19\":[\"导航至下一版本\"],\"ZTEho+\":[\"导航至下一个工作流程\"],\"2tw9bo\":[\"导航到上一条记录\"],\"I+Pm5V\":[\"导航到以前的版本\"],\"QVUN3K\":[\"导航到上一个工作流程\"],\"isRobC\":[\"新\"],\"Kcr9Fr\":[\"新账户\"],\"o8MyXb\":[\"新钥匙\"],\"j313SZ\":[\"新钥匙\"],\"hFxdey\":[\"新对象\"],\"7vhWI8\":[\"新密码\"],\"BcCzLv\":[\"新纪录\"],\"2lmOC5\":[\"新角色\"],\"U1DAok\":[\"新 Webhook\"],\"pwenQu\":[\"无连接账户\"],\"0uWxPM\":[\"尚未运行工作流程\"],\"AQCvCC\":[\"暂无工作流程版本\"],\"4wUkDk\":[\"非空\"],\"W0i24j\":[\"对象\"],\"B3toQF\":[\"对象\"],\"KNz3EF\":[\"偏离常规路线\"],\"OV5wZZ\":[\"已开启\"],\"0zpgxV\":[\"选项\"],\"BzEFor\":[\"或\"],\"/IX/7x\":[\"其他\"],\"boJlGf\":[\"页面未找到\"],\"8ZsakT\":[\"密码\"],\"mi6Rel\":[\"密码重置链接已发送至邮箱\"],\"SrVzRe\":[\"百分比\"],\"yIK1GU\":[\"空车百分比\"],\"PWLd4c\":[\"非空百分比\"],\"Bv3y5w\":[\"永久销毁记录\"],\"N0+GsR\":[\"图片\"],\"jEw0Mr\":[\"请输入有效的 URL\"],\"6nsIo3\":[\"请键入\\\"\",[\"confirmationValue\"],\"\\\"确认要删除此 API 密钥。请注意,任何使用此密钥的脚本都将停止工作。\"],\"mFZTXr\":[\"请键入 \",[\"confirmationText\"],\" 确认要删除此网络钩子。\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"葡萄牙语 - 巴西\"],\"xtXHeo\":[\"葡萄牙语 - 葡萄牙\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"预览\"],\"vERlcd\":[\"简介\"],\"YJgRqq\":[\"伪英语\"],\"ibPuCP\":[\"阅读文件\"],\"v3xM25\":[\"接收包含密码更新链接的电子邮件\"],\"dSCufP\":[\"记录选择\"],\"vpZcGd\":[\"重新生成 API 密钥\"],\"Mwqo5m\":[\"再生钥匙\"],\"D+Mv78\":[\"再生密钥\"],\"5icoS1\":[\"发布\"],\"t/YqKh\":[\"移除\"],\"T/pF0Z\":[\"从收藏中删除\"],\"KbS2K9\":[\"重置密码\"],\"1IWc1n\":[\"重置为\"],\"kx0s+n\":[\"成果\"],\"5dJK4M\":[\"角色\"],\"UX0N2y\":[\"运行工作流程并返回此处查看其执行情况\"],\"A1taO8\":[\"搜索\"],\"l1/uy2\":[\"搜索字段...\"],\"k7kp5/\":[\"搜索索引...\"],\"7taA9j\":[\"搜索字段\"],\"ofuw3g\":[\"搜索对象...\"],\"IMeaSJ\":[\"搜索记录\"],\"a3LDKx\":[\"安全\"],\"QREcJS\":[\"参见活动版本\"],\"OpPn5Z\":[\"查看运行情况\"],\"EtyY4+\":[\"查看版本\"],\"lYhPN0\":[\"查看版本历史\"],\"xraglu\":[\"选择要发送到该端点的事件\"],\"AXTJAW\":[\"选择您喜欢的语言\"],\"mjK8F3\":[\"向团队发送邀请电子邮件\"],\"yy5k7a\":[\"服务器管理面板\"],\"V7fgiB\":[\"设置电子邮件可见性、管理屏蔽列表等。\"],\"cx14rp\":[\"设置域名\"],\"tn41zE\":[\"设置子域名称\"],\"Tz0i8g\":[\"设置\"],\"Vy9kmk\":[\"分享此链接以邀请用户加入您的工作区\"],\"gWk8gY\":[\"更改字段标签是否也要更改 API 名称?\"],\"6Uau97\":[\"跳过\"],\"f6Hub0\":[\"分类\"],\"65A04M\":[\"西班牙语\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"子域\"],\"omhc+7\":[\"子域已被占用\"],\"OlC/tU\":[\"子域名长度不得超过 30 个字符\"],\"ZETwlU\":[\"子域名不能少于 3 个字符\"],\"B5jRKH\":[\"订阅已切换 \",[\"to\"]],\"AxQiPW\":[\"总和\"],\"XYLcNv\":[\"支持\"],\"9yk9d1\":[\"开关 \",[\"from\"]],\"qi74XZ\":[\"开关 \",[\"to\"]],\"L6Fg36\":[\"开关计费 \",[\"to\"]],\"AtzMpB\":[\"同步字段标签和 API 名称\"],\"E3AMmw\":[\"系统设置 - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"系统设置 - [\",[\"systemTimeFormatLabel\"],\"]\"],\"NnH3pK\":[\"测试\"],\"bU9B27\":[\"测试工作流程\"],\"2OUtmv\":[\"该字段的说明\"],\"VGZYbZ\":[\"与您的账户关联的电子邮件\"],\"h8mvCd\":[\"该字段的名称和图标\"],\"L97sPr\":[\"您正在寻找的页面要么已经消失,要么从未出现过。让我们帮您恢复正常\"],\"uWikAA\":[\"该字段的值\"],\"+69KDk\":[\"该字段的值必须是唯一的\"],\"PmtLRf\":[\"有一个问题\"],\"hqCwGc\":[\"此操作不可撤销。这将永久删除该用户,并将其从所有任务中删除。\"],\"gWGuHC\":[\"此操作无法撤销。这将永久删除您的整个工作区。 <0/> 请输入您的电子邮件以确认。\"],\"n9nSNJ\":[\"时间格式\"],\"aqMzDX\":[\"至每月\"],\"WXXiXO\":[\"每年\"],\"PiUt3N\":[\"触发器类型\"],\"IQ5pAL\":[\"触发类型应为手动 - 当没有选择记录时\"],\"+zy2Nq\":[\"类型\"],\"U83IeL\":[\"任何类型\"],\"wSXm5S\":[\"独特性\"],\"GQCXQS\":[\"无限联系人\"],\"ONWvwQ\":[\"上传\"],\"IagCbF\":[\"网址\"],\"6dMpmz\":[\"用作草稿\"],\"oTTQsc\":[\"只能使用字母、数字和破折号。以字母或数字开头和结尾\"],\"c6uZUV\":[\"使用我们的 API 或手动添加您的第一个 [\",[\"objectLabel\"],\"]\"],\"7PzzBU\":[\"用户\"],\"IjyOjp\":[\"用户未登录\"],\"fXVIZq\":[\"价值观\"],\"KANz0G\":[\"查看账单详情\"],\"6n7jtr\":[\"可视化\"],\"id6ein\":[\"我们支持 10MB 以下的正方形 PNG、JPEG 和 GIF 文件\"],\"ZS7vYp\":[\"我们将为每个新事件向该端点发送 POST 请求\"],\"TRDppN\":[\"网络钩子\"],\"v1kQyJ\":[\"网络钩子\"],\"C51ilI\":[\"API 密钥的过期时间。\"],\"leUubq\":[\"何时禁用按键\"],\"wvyffT\":[\"无法测试工作流程\"],\"pmUArF\":[\"工作空间\"],\"VicISP\":[\"删除工作区\"],\"Q9pNST\":[\"撰写说明\"],\"3d1wCB\":[\"是\"],\"zSkMV0\":[\"您将立即被收取全年的费用。\"],\"XVnj6K\":[\"您的信贷余额将用于支付每月账单。\"],\"9ivpwk\":[\"显示您的姓名\"],\"RhNbPE\":[\"您的工作区将被禁用\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\"的\",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" 应用程序接口密钥\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 次工作流节点执行\"],\"4EdXYs\":[\"12h ([\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2.配置字段\"],\"QsMprd\":[\"24小时([\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"中止\"],\"uyJsf6\":[\"关于\"],\"AeXO77\":[\"账户\"],\"nD0Y+a\":[\"账户删除\"],\"bPwFdf\":[\"账户\"],\"FQBaXG\":[\"激活\"],\"tu8A/k\":[\"激活工作流程\"],\"F6pfE9\":[\"活跃\"],\"Mue4oc\":[\"由您或您的团队创建的活动 API 密钥。\"],\"m16xKo\":[\"添加\"],\"DpV70M\":[\"添加字段\"],\"dEO3Zx\":[\"添加对象\"],\"sgXUv+\":[\"添加 SSO 身份供应商\"],\"5+ttxv\":[\"添加到拦截列表\"],\"pBsoKL\":[\"添加到收藏夹\"],\"m2qDV8\":[\"添加您的第一个 \",[\"objectLabel\"]],\"vLO+NG\":[\"已添加 \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"全部\"],\"3saA7W\":[\"全部([\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"所有角色\"],\"GMx1K0\":[\"允许通过 Google 的单点登录功能登录。\"],\"dea+zy\":[\"允许通过微软的单点登录功能登录。\"],\"wMg43c\":[\"允许通过共享邀请链接来邀请新用户。\"],\"vHeVg5\":[\"允许用户使用电子邮件和密码登录。\"],\"mJ6m4C\":[\"可选描述\"],\"0RqpZr\":[\"应用程序接口和网络钩子\"],\"yRnk5W\":[\"API 密钥\"],\"5h8ooz\":[\"API 密钥\"],\"kAtj+q\":[\"应用程序接口名称\"],\"aAIQg2\":[\"外观\"],\"3iX0kh\":[\"您确定要更改计费间隔吗?\"],\"nYD/Cq\":[\"上升\"],\"rfYmIr\":[\"分配角色以指定每个成员的访问权限\"],\"lxQ+5m\":[\"分配给\"],\"Y7Dx6e\":[\"必须启用至少一种身份验证方法\"],\"P8fBlG\":[\"认证\"],\"yIVrHZ\":[\"授权\"],\"3uQmjD\":[\"平均\"],\"Dht9W3\":[\"返回内容\"],\"R+w/Va\":[\"账单\"],\"K1172m\":[\"拦截列表\"],\"2yl5lQ\":[\"预约电话\"],\"PmmvzS\":[\"计算\"],\"AjVXBS\":[\"日历\"],\"EUpfsd\":[\"日历\"],\"dEgA5A\":[\"取消\"],\"0TllC8\":[\"随时取消\"],\"rRK/Lf\":[\"取消计划\"],\"N6gPiD\":[\"取消订阅\"],\"OfzMnb\":[\"更改 \",[\"to\"]],\"VhMDMg\":[\"更改密码\"],\"SviKkE\":[\"简体中文\"],\"dzb4Ep\":[\"繁体中文\"],\"JEFFOR\":[\"选择对象\"],\"KT6rEB\":[\"选择服务提供商\"],\"9qP96p\":[\"选择试用\"],\"yz7wBu\":[\"关闭\"],\"+zUMwJ\":[\"配置 SSO 连接\"],\"QTNsSm\":[\"配置和自定义日历偏好。\"],\"aGwm+D\":[\"配置整个应用程序的日期显示方式\"],\"Bh4GBD\":[\"配置电子邮件和日历设置。\"],\"D8ATlr\":[\"将新账户连接到工作区\"],\"Zgi9Fd\":[\"与谷歌连接\"],\"IOfqM8\":[\"与微软联系\"],\"9TzudL\":[\"连接账户\"],\"M73whl\":[\"背景\"],\"xGVfLh\":[\"继续\"],\"CcGOj+\":[\"副驾驶\"],\"7eVkEH\":[\"复制邀请链接\"],\"Ej5euX\":[\"复制此密钥,因为它将不再可见\"],\"wBMjJ2\":[\"计数\"],\"EkZfen\":[\"计算所有\"],\"vQJINq\":[\"数空\"],\"DzRsDJ\":[\"计数不为空\"],\"9FZBbf\":[\"计算唯一值\"],\"zNoOC2\":[\"创建工作流程并返回此处查看其版本\"],\"uXGLuq\":[\"创建应用程序接口密钥\"],\"d0DCww\":[\"创建新记录\"],\"dkAPxi\":[\"创建 Webhook\"],\"8skTDV\":[\"自定义对象\"],\"qt+EaC\":[\"自定义 \",[\"objectLabelSingular\"],\" 视图中可用的字段。\"],\"CMhr4u\":[\"自定义域名\"],\"bCJa9l\":[\"自定义工作空间安全\"],\"Zz6Cxn\":[\"危险区\"],\"5cNMFz\":[\"数据模型\"],\"r+cVRP\":[\"数据类型\"],\"mYGY3B\":[\"日期\"],\"Ud9zHv\":[\"日期和时间\"],\"5y3O+A\":[\"停用\"],\"qk4i22\":[\"停用 \\\"同步对象标签和 API 名称 \\\"以设置自定义 API 名称\"],\"gexAq8\":[\"停用该字段\"],\"4tpC8V\":[\"停用工作流程\"],\"Y2ImVJ\":[\"定义对象的名称和描述\"],\"cnGeoo\":[\"删除\"],\"ZDGm40\":[\"删除帐户\"],\"gAz0S5\":[\"删除账户和所有相关数据\"],\"hGfWDm\":[\"删除 API 密钥\"],\"4dpwsE\":[\"删除记录\"],\"kf0A63\":[\"删除记录\"],\"T6S2Ns\":[\"删除此集成\"],\"snMaH4\":[\"删除网络钩子\"],\"kYu0eF\":[\"删除工作区\"],\"mk2Ygs\":[\"删除整个工作区\"],\"Cko536\":[\"下降\"],\"Nu4oKW\":[\"说明\"],\"2xxBws\":[\"销毁\"],\"n+SX4g\":[\"开发人员\"],\"zAg2B9\":[\"弃权草案\"],\"i66xz9\":[\"显示为相对日期\"],\"EoKe5U\":[\"域名\"],\"QVVmxi\":[\"例如后台整合\"],\"tOkc8o\":[\"最早\"],\"JTbQuO\":[\"最早日期\"],\"v+uKyy\":[\"编辑计费间隔\"],\"h2KoTu\":[\"编辑付款方式、查看发票等\"],\"6o1M/Q\":[\"编辑子域名或设置自定义域名。\"],\"O3oNi5\":[\"电子邮件\"],\"lfQsvW\":[\"电子邮件集成\"],\"QT/Wo7\":[\"电子邮件或域名已在拦截列表中\"],\"BXEcos\":[\"电子邮件\"],\"eXoH4Q\":[\"员工\"],\"gqv5ZL\":[\"员工\"],\"N2S1rs\":[\"空\"],\"T3juzf\":[\"端点 URL\"],\"lYGfRP\":[\"英语\"],\"/bfFKe\":[\"享受 \",[\"withCreditCardTrialPeriodDuration\"],\" 天的免费试用期\"],\"GpB8YV\":[\"企业\"],\"c3qGJX\":[\"删除 api 密钥时出错: \",[\"err\"]],\"bj7nh3\":[\"重新生成 api 密钥时出错: \",[\"err\"]],\"VSQxWH\":[\"切换订阅 \",[\"to\"],\" 时出错。\"],\"JLxMta\":[\"建立 Webhook 端点,用于通知异步事件。\"],\"cIgBjB\":[\"从我的电子邮件同步中排除以下人员和域\"],\"fV7V51\":[\"现有对象\"],\"IZ4o2e\":[\"退出设置\"],\"tXGQvS\":[\"预期所选节点为创建步骤节点。\"],\"bKBhgb\":[\"经验\"],\"LxRNPw\":[\"到期\"],\"SkXfL0\":[\"有效期\"],\"i9qiyR\":[\"到期时间\"],\"GS+Mus\":[\"出口\"],\"ep2rbf\":[\"导出记录\"],\"q46CjD\":[\"导出为 PDF\"],\"DaGxE0\":[\"导出视图\"],\"X9kySA\":[\"收藏夹\"],\"zXgopL\":[\"字段类型\"],\"vF68cg\":[\"字段\"],\"3w/aqw\":[\"字段计数\"],\"o7J4JM\":[\"过滤器\"],\"cSev+j\":[\"过滤器\"],\"nLC6tu\":[\"法语\"],\"aTieE0\":[\"从每月到每年\"],\"K04lE5\":[\"从每年到每月\"],\"scmRyR\":[\"完全访问\"],\"xANKBj\":[\"功能\"],\"Weq9zb\":[\"一般情况\"],\"DDcvSo\":[\"德国\"],\"NXEW3h\":[\"邀请您的团队,充分利用您的工作空间。\"],\"zSGbaR\":[\"获取订阅\"],\"2GT3Hf\":[\"全球\"],\"hWp1MY\":[\"授予 Twenty 支持临时访问您工作区的权限,以便我们代表您排除故障或恢复内容。您可以随时撤销访问权限。\"],\"vLyv1R\":[\"隐藏\"],\"XTWO+W\":[\"图标和名称\"],\"sJGljQ\":[\"标识符\"],\"j843N3\":[\"如果您丢失了此密钥,可以重新生成,但请注意,任何使用此密钥的脚本都需要更新。请键入\\\"\",[\"confirmationValue\"],\"\\\"确认。\"],\"NoNwIX\":[\"不活动\"],\"pZ/USH\":[\"索引\"],\"JE2tjr\":[\"输入内容必须使用驼峰字体,且不能以数字开头\"],\"AwUsnG\":[\"实例\"],\"nbfdhU\":[\"集成\"],\"NtFk/Z\":[\"无效验证提供程序\"],\"B2Tpo0\":[\"无效电子邮件\"],\"/m52AE\":[\"无效电子邮件或域名\"],\"QdoUFL\":[\"无效表格值\"],\"0M8+El\":[\"电子邮件邀请\"],\"PWIq/W\":[\"通过链接邀请\"],\"3athPG\":[\"通过链接邀请\"],\"5IfmKA\":[\"向电子邮件地址发送邀请链接\"],\"d+Y+rP\":[\"邀请您的团队\"],\"Lj7sBL\":[\"意大利语\"],\"dFtidv\":[\"日语\"],\"h6S9Yz\":[\"韩语\"],\"zrpwCd\":[\"实验室\"],\"vXIe7J\":[\"语言\"],\"wL3cK8\":[\"最新\"],\"Kcjbmz\":[\"最新日期\"],\"pQjjYo\":[\"链接复制到剪贴板\"],\"FgAxTj\":[\"退出登录\"],\"nOhz3x\":[\"注销\"],\"T6YjCk\":[\"管理成员\"],\"4cjU2u\":[\"在此管理空间成员\"],\"FyFNsd\":[\"管理互联网账户\"],\"36kYu0\":[\"管理您的订阅\"],\"3Sdni6\":[\"标记为已完成\"],\"CK1KXz\":[\"最大\"],\"wlQNTg\":[\"成员\"],\"eTUF28\":[\"最小\"],\"3Siwmw\":[\"更多选择\"],\"iSLA/r\":[\"向左移动\"],\"Ubl2by\":[\"向右移动\"],\"6YtxFj\":[\"名称\"],\"z+6jaZ\":[\"API 密钥名称\"],\"J7w8lI\":[\"工作区名称\"],\"2T8KCk\":[\"导航至下一条记录\"],\"veSA19\":[\"导航至下一版本\"],\"ZTEho+\":[\"导航至下一个工作流程\"],\"2tw9bo\":[\"导航到上一条记录\"],\"I+Pm5V\":[\"导航到以前的版本\"],\"QVUN3K\":[\"导航到上一个工作流程\"],\"isRobC\":[\"新\"],\"Kcr9Fr\":[\"新账户\"],\"o8MyXb\":[\"新钥匙\"],\"j313SZ\":[\"新钥匙\"],\"hFxdey\":[\"新对象\"],\"7vhWI8\":[\"新密码\"],\"BcCzLv\":[\"新纪录\"],\"2lmOC5\":[\"新角色\"],\"U1DAok\":[\"新 Webhook\"],\"pwenQu\":[\"无连接账户\"],\"0uWxPM\":[\"尚未运行工作流程\"],\"AQCvCC\":[\"暂无工作流程版本\"],\"4wUkDk\":[\"非空\"],\"W0i24j\":[\"对象\"],\"B3toQF\":[\"对象\"],\"KNz3EF\":[\"偏离常规路线\"],\"OV5wZZ\":[\"已开启\"],\"0zpgxV\":[\"选项\"],\"BzEFor\":[\"或\"],\"/IX/7x\":[\"其他\"],\"boJlGf\":[\"页面未找到\"],\"8ZsakT\":[\"密码\"],\"mi6Rel\":[\"密码重置链接已发送至邮箱\"],\"SrVzRe\":[\"百分比\"],\"yIK1GU\":[\"空车百分比\"],\"PWLd4c\":[\"非空百分比\"],\"Bv3y5w\":[\"永久销毁记录\"],\"N0+GsR\":[\"图片\"],\"jEw0Mr\":[\"请输入有效的 URL\"],\"6nsIo3\":[\"请键入\\\"\",[\"confirmationValue\"],\"\\\"确认要删除此 API 密钥。请注意,任何使用此密钥的脚本都将停止工作。\"],\"mFZTXr\":[\"请键入 \",[\"confirmationText\"],\" 确认要删除此网络钩子。\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"葡萄牙语 - 巴西\"],\"xtXHeo\":[\"葡萄牙语 - 葡萄牙\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"预览\"],\"vERlcd\":[\"简介\"],\"YJgRqq\":[\"伪英语\"],\"ibPuCP\":[\"阅读文件\"],\"v3xM25\":[\"接收包含密码更新链接的电子邮件\"],\"dSCufP\":[\"记录选择\"],\"vpZcGd\":[\"重新生成 API 密钥\"],\"Mwqo5m\":[\"再生钥匙\"],\"D+Mv78\":[\"再生密钥\"],\"5icoS1\":[\"发布\"],\"t/YqKh\":[\"移除\"],\"T/pF0Z\":[\"从收藏中删除\"],\"KbS2K9\":[\"重置密码\"],\"1IWc1n\":[\"重置为\"],\"kx0s+n\":[\"成果\"],\"5dJK4M\":[\"角色\"],\"UX0N2y\":[\"运行工作流程并返回此处查看其执行情况\"],\"A1taO8\":[\"搜索\"],\"l1/uy2\":[\"搜索字段...\"],\"k7kp5/\":[\"搜索索引...\"],\"7taA9j\":[\"搜索字段\"],\"ofuw3g\":[\"搜索对象...\"],\"IMeaSJ\":[\"搜索记录\"],\"a3LDKx\":[\"安全\"],\"QREcJS\":[\"参见活动版本\"],\"OpPn5Z\":[\"查看运行情况\"],\"EtyY4+\":[\"查看版本\"],\"lYhPN0\":[\"查看版本历史\"],\"xraglu\":[\"选择要发送到该端点的事件\"],\"AXTJAW\":[\"选择您喜欢的语言\"],\"mjK8F3\":[\"向团队发送邀请电子邮件\"],\"yy5k7a\":[\"服务器管理面板\"],\"V7fgiB\":[\"设置电子邮件可见性、管理屏蔽列表等。\"],\"cx14rp\":[\"设置域名\"],\"tn41zE\":[\"设置子域名称\"],\"Tz0i8g\":[\"设置\"],\"Vy9kmk\":[\"分享此链接以邀请用户加入您的工作区\"],\"gWk8gY\":[\"更改字段标签是否也要更改 API 名称?\"],\"6Uau97\":[\"跳过\"],\"f6Hub0\":[\"分类\"],\"65A04M\":[\"西班牙语\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"子域\"],\"omhc+7\":[\"子域已被占用\"],\"OlC/tU\":[\"子域名长度不得超过 30 个字符\"],\"ZETwlU\":[\"子域名不能少于 3 个字符\"],\"B5jRKH\":[\"订阅已切换 \",[\"to\"]],\"AxQiPW\":[\"总和\"],\"XYLcNv\":[\"支持\"],\"9yk9d1\":[\"开关 \",[\"from\"]],\"qi74XZ\":[\"开关 \",[\"to\"]],\"L6Fg36\":[\"开关计费 \",[\"to\"]],\"AtzMpB\":[\"同步字段标签和 API 名称\"],\"E3AMmw\":[\"系统设置 - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"系统设置 - [\",[\"systemTimeFormatLabel\"],\"]\"],\"NnH3pK\":[\"测试\"],\"bU9B27\":[\"测试工作流程\"],\"2OUtmv\":[\"该字段的说明\"],\"VGZYbZ\":[\"与您的账户关联的电子邮件\"],\"h8mvCd\":[\"该字段的名称和图标\"],\"L97sPr\":[\"您正在寻找的页面要么已经消失,要么从未出现过。让我们帮您恢复正常\"],\"uWikAA\":[\"该字段的值\"],\"+69KDk\":[\"该字段的值必须是唯一的\"],\"PmtLRf\":[\"有一个问题\"],\"hqCwGc\":[\"此操作不可撤销。这将永久删除该用户,并将其从所有任务中删除。\"],\"gWGuHC\":[\"此操作无法撤销。这将永久删除您的整个工作区。 <0/> 请输入您的电子邮件以确认。\"],\"n9nSNJ\":[\"时间格式\"],\"aqMzDX\":[\"至每月\"],\"WXXiXO\":[\"每年\"],\"PiUt3N\":[\"触发器类型\"],\"IQ5pAL\":[\"触发类型应为手动 - 当没有选择记录时\"],\"+zy2Nq\":[\"类型\"],\"U83IeL\":[\"任何类型\"],\"wSXm5S\":[\"独特性\"],\"GQCXQS\":[\"无限联系人\"],\"ONWvwQ\":[\"上传\"],\"IagCbF\":[\"网址\"],\"6dMpmz\":[\"用作草稿\"],\"oTTQsc\":[\"只能使用字母、数字和破折号。以字母或数字开头和结尾\"],\"c6uZUV\":[\"使用我们的 API 或手动添加您的第一个 [\",[\"objectLabel\"],\"]\"],\"7PzzBU\":[\"用户\"],\"IjyOjp\":[\"用户未登录\"],\"fXVIZq\":[\"价值观\"],\"KANz0G\":[\"查看账单详情\"],\"6n7jtr\":[\"可视化\"],\"id6ein\":[\"我们支持 10MB 以下的正方形 PNG、JPEG 和 GIF 文件\"],\"ZS7vYp\":[\"我们将为每个新事件向该端点发送 POST 请求\"],\"TRDppN\":[\"网络钩子\"],\"v1kQyJ\":[\"网络钩子\"],\"C51ilI\":[\"API 密钥的过期时间。\"],\"leUubq\":[\"何时禁用按键\"],\"wvyffT\":[\"无法测试工作流程\"],\"pmUArF\":[\"工作空间\"],\"VicISP\":[\"删除工作区\"],\"Q9pNST\":[\"撰写说明\"],\"3d1wCB\":[\"是\"],\"zSkMV0\":[\"您将立即被收取全年的费用。\"],\"XVnj6K\":[\"您的信贷余额将用于支付每月账单。\"],\"9ivpwk\":[\"显示您的姓名\"],\"RhNbPE\":[\"您的工作区将被禁用\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/generated/zh-Hant.ts b/packages/twenty-front/src/locales/generated/zh-Hant.ts index dc1256ac46d1..9c7e7960de20 100644 --- a/packages/twenty-front/src/locales/generated/zh-Hant.ts +++ b/packages/twenty-front/src/locales/generated/zh-Hant.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\"的\",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" 应用程序接口密钥\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 次工作流节点执行\"],\"4EdXYs\":[\"12h ([\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2.配置字段\"],\"QsMprd\":[\"24小时([\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"中止\"],\"uyJsf6\":[\"关于\"],\"AeXO77\":[\"账户\"],\"nD0Y+a\":[\"账户删除\"],\"bPwFdf\":[\"账户\"],\"FQBaXG\":[\"激活\"],\"tu8A/k\":[\"激活工作流程\"],\"F6pfE9\":[\"活跃\"],\"Mue4oc\":[\"由您或您的团队创建的活动 API 密钥。\"],\"m16xKo\":[\"添加\"],\"DpV70M\":[\"添加字段\"],\"dEO3Zx\":[\"添加对象\"],\"sgXUv+\":[\"添加 SSO 身份供应商\"],\"5+ttxv\":[\"添加到拦截列表\"],\"pBsoKL\":[\"添加到收藏夹\"],\"m2qDV8\":[\"添加您的第一个 \",[\"objectLabel\"]],\"vLO+NG\":[\"已添加 \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"全部\"],\"3saA7W\":[\"全部([\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"所有角色\"],\"GMx1K0\":[\"允许通过 Google 的单点登录功能登录。\"],\"dea+zy\":[\"允许通过微软的单点登录功能登录。\"],\"wMg43c\":[\"允许通过共享邀请链接来邀请新用户。\"],\"vHeVg5\":[\"允许用户使用电子邮件和密码登录。\"],\"mJ6m4C\":[\"可选描述\"],\"0RqpZr\":[\"应用程序接口和网络钩子\"],\"yRnk5W\":[\"API 密钥\"],\"5h8ooz\":[\"API 密钥\"],\"kAtj+q\":[\"应用程序接口名称\"],\"aAIQg2\":[\"外观\"],\"3iX0kh\":[\"您确定要更改计费间隔吗?\"],\"nYD/Cq\":[\"上升\"],\"rfYmIr\":[\"分配角色以指定每个成员的访问权限\"],\"lxQ+5m\":[\"分配给\"],\"Y7Dx6e\":[\"必须启用至少一种身份验证方法\"],\"P8fBlG\":[\"认证\"],\"yIVrHZ\":[\"授权\"],\"3uQmjD\":[\"平均\"],\"Dht9W3\":[\"返回内容\"],\"R+w/Va\":[\"账单\"],\"K1172m\":[\"拦截列表\"],\"2yl5lQ\":[\"预约电话\"],\"PmmvzS\":[\"计算\"],\"AjVXBS\":[\"日历\"],\"EUpfsd\":[\"日历\"],\"dEgA5A\":[\"取消\"],\"0TllC8\":[\"随时取消\"],\"rRK/Lf\":[\"取消计划\"],\"N6gPiD\":[\"取消订阅\"],\"OfzMnb\":[\"更改 \",[\"to\"]],\"VhMDMg\":[\"更改密码\"],\"SviKkE\":[\"简体中文\"],\"dzb4Ep\":[\"繁体中文\"],\"JEFFOR\":[\"选择对象\"],\"KT6rEB\":[\"选择服务提供商\"],\"9qP96p\":[\"选择试用\"],\"yz7wBu\":[\"关闭\"],\"+zUMwJ\":[\"配置 SSO 连接\"],\"QTNsSm\":[\"配置和自定义日历偏好。\"],\"aGwm+D\":[\"配置整个应用程序的日期显示方式\"],\"Bh4GBD\":[\"配置电子邮件和日历设置。\"],\"D8ATlr\":[\"将新账户连接到工作区\"],\"Zgi9Fd\":[\"与谷歌连接\"],\"IOfqM8\":[\"与微软联系\"],\"9TzudL\":[\"连接账户\"],\"M73whl\":[\"背景\"],\"xGVfLh\":[\"继续\"],\"CcGOj+\":[\"副驾驶\"],\"7eVkEH\":[\"复制邀请链接\"],\"Ej5euX\":[\"复制此密钥,因为它将不再可见\"],\"wBMjJ2\":[\"计数\"],\"EkZfen\":[\"计算所有\"],\"vQJINq\":[\"数空\"],\"DzRsDJ\":[\"计数不为空\"],\"9FZBbf\":[\"计算唯一值\"],\"zNoOC2\":[\"创建工作流程并返回此处查看其版本\"],\"uXGLuq\":[\"创建应用程序接口密钥\"],\"d0DCww\":[\"创建新记录\"],\"dkAPxi\":[\"创建 Webhook\"],\"8skTDV\":[\"自定义对象\"],\"qt+EaC\":[\"自定义 \",[\"objectLabelSingular\"],\" 视图中可用的字段。\"],\"CMhr4u\":[\"自定义域名\"],\"bCJa9l\":[\"自定义工作区安全\"],\"Zz6Cxn\":[\"危险区\"],\"5cNMFz\":[\"数据模型\"],\"r+cVRP\":[\"数据类型\"],\"mYGY3B\":[\"日期\"],\"Ud9zHv\":[\"日期和时间\"],\"5y3O+A\":[\"停用\"],\"qk4i22\":[\"停用 \\\"同步对象标签和 API 名称 \\\"以设置自定义 API 名称\"],\"gexAq8\":[\"停用该字段\"],\"4tpC8V\":[\"停用工作流程\"],\"Y2ImVJ\":[\"定义对象的名称和描述\"],\"cnGeoo\":[\"删除\"],\"ZDGm40\":[\"删除帐户\"],\"gAz0S5\":[\"删除账户和所有相关数据\"],\"hGfWDm\":[\"删除 API 密钥\"],\"4dpwsE\":[\"删除记录\"],\"kf0A63\":[\"删除记录\"],\"T6S2Ns\":[\"删除此集成\"],\"snMaH4\":[\"删除网络钩子\"],\"kYu0eF\":[\"删除工作区\"],\"mk2Ygs\":[\"删除整个工作区\"],\"Cko536\":[\"下降\"],\"Nu4oKW\":[\"说明\"],\"2xxBws\":[\"销毁\"],\"n+SX4g\":[\"开发人员\"],\"zAg2B9\":[\"弃权草案\"],\"i66xz9\":[\"显示为相对日期\"],\"EoKe5U\":[\"域名\"],\"QVVmxi\":[\"例如后台整合\"],\"tOkc8o\":[\"最早\"],\"JTbQuO\":[\"最早日期\"],\"v+uKyy\":[\"编辑计费间隔\"],\"h2KoTu\":[\"编辑付款方式、查看发票等\"],\"6o1M/Q\":[\"编辑子域名或设置自定义域名。\"],\"O3oNi5\":[\"电子邮件\"],\"lfQsvW\":[\"电子邮件集成\"],\"QT/Wo7\":[\"电子邮件或域名已在拦截列表中\"],\"BXEcos\":[\"电子邮件\"],\"eXoH4Q\":[\"员工\"],\"gqv5ZL\":[\"员工\"],\"N2S1rs\":[\"空\"],\"T3juzf\":[\"端点 URL\"],\"lYGfRP\":[\"英语\"],\"/bfFKe\":[\"享受 \",[\"withCreditCardTrialPeriodDuration\"],\" 天的免费试用期\"],\"GpB8YV\":[\"企业\"],\"c3qGJX\":[\"删除 api 密钥时出错: \",[\"err\"]],\"bj7nh3\":[\"重新生成 api 密钥时出错: \",[\"err\"]],\"VSQxWH\":[\"切换订阅 \",[\"to\"],\" 时出错。\"],\"JLxMta\":[\"建立 Webhook 端点,用于通知异步事件。\"],\"cIgBjB\":[\"从我的电子邮件同步中排除以下人员和域\"],\"fV7V51\":[\"现有对象\"],\"IZ4o2e\":[\"退出设置\"],\"tXGQvS\":[\"预期所选节点为创建步骤节点。\"],\"bKBhgb\":[\"经验\"],\"LxRNPw\":[\"到期\"],\"SkXfL0\":[\"有效期\"],\"i9qiyR\":[\"到期时间\"],\"GS+Mus\":[\"出口\"],\"ep2rbf\":[\"导出记录\"],\"q46CjD\":[\"导出为 PDF\"],\"DaGxE0\":[\"导出视图\"],\"X9kySA\":[\"收藏夹\"],\"zXgopL\":[\"字段类型\"],\"vF68cg\":[\"字段\"],\"3w/aqw\":[\"字段计数\"],\"o7J4JM\":[\"过滤器\"],\"cSev+j\":[\"过滤器\"],\"nLC6tu\":[\"法语\"],\"aTieE0\":[\"从每月到每年\"],\"K04lE5\":[\"从每年到每月\"],\"scmRyR\":[\"完全访问\"],\"xANKBj\":[\"功能\"],\"Weq9zb\":[\"一般情况\"],\"DDcvSo\":[\"德国\"],\"NXEW3h\":[\"邀请您的团队,充分利用您的工作空间。\"],\"zSGbaR\":[\"获取订阅\"],\"2GT3Hf\":[\"全球\"],\"hWp1MY\":[\"授予 Twenty 支持临时访问您工作区的权限,以便我们为您排除故障或恢复内容。您可以随时撤销访问权限。\"],\"vLyv1R\":[\"隐藏\"],\"XTWO+W\":[\"图标和名称\"],\"sJGljQ\":[\"标识符\"],\"j843N3\":[\"如果您丢失了此密钥,可以重新生成,但请注意,任何使用此密钥的脚本都需要更新。请键入\\\"\",[\"confirmationValue\"],\"\\\"确认。\"],\"NoNwIX\":[\"不活动\"],\"pZ/USH\":[\"索引\"],\"JE2tjr\":[\"输入内容必须使用驼峰字体,且不能以数字开头\"],\"AwUsnG\":[\"实例\"],\"nbfdhU\":[\"集成\"],\"NtFk/Z\":[\"无效验证提供程序\"],\"B2Tpo0\":[\"无效电子邮件\"],\"/m52AE\":[\"无效电子邮件或域名\"],\"QdoUFL\":[\"无效表格值\"],\"0M8+El\":[\"电子邮件邀请\"],\"PWIq/W\":[\"通过链接邀请\"],\"3athPG\":[\"通过链接邀请\"],\"5IfmKA\":[\"向电子邮件地址发送邀请链接\"],\"d+Y+rP\":[\"邀请您的团队\"],\"Lj7sBL\":[\"意大利语\"],\"h6S9Yz\":[\"韩语\"],\"zrpwCd\":[\"实验室\"],\"vXIe7J\":[\"语言\"],\"wL3cK8\":[\"最新\"],\"Kcjbmz\":[\"最新日期\"],\"pQjjYo\":[\"链接复制到剪贴板\"],\"FgAxTj\":[\"退出登录\"],\"nOhz3x\":[\"注销\"],\"T6YjCk\":[\"管理成员\"],\"4cjU2u\":[\"在此管理空间成员\"],\"FyFNsd\":[\"管理互联网账户\"],\"36kYu0\":[\"管理您的订阅\"],\"3Sdni6\":[\"标记为已完成\"],\"CK1KXz\":[\"最大\"],\"wlQNTg\":[\"成员\"],\"eTUF28\":[\"最小\"],\"3Siwmw\":[\"更多选择\"],\"iSLA/r\":[\"向左移动\"],\"Ubl2by\":[\"向右移动\"],\"6YtxFj\":[\"名称\"],\"z+6jaZ\":[\"API 密钥名称\"],\"J7w8lI\":[\"工作区名称\"],\"2T8KCk\":[\"导航至下一条记录\"],\"veSA19\":[\"导航至下一版本\"],\"ZTEho+\":[\"导航至下一个工作流程\"],\"2tw9bo\":[\"导航到上一条记录\"],\"I+Pm5V\":[\"导航到以前的版本\"],\"QVUN3K\":[\"导航到上一个工作流程\"],\"isRobC\":[\"新\"],\"Kcr9Fr\":[\"新账户\"],\"o8MyXb\":[\"新钥匙\"],\"j313SZ\":[\"新钥匙\"],\"hFxdey\":[\"新对象\"],\"7vhWI8\":[\"新密码\"],\"BcCzLv\":[\"新纪录\"],\"2lmOC5\":[\"新角色\"],\"U1DAok\":[\"新 Webhook\"],\"pwenQu\":[\"无连接账户\"],\"0uWxPM\":[\"尚未运行工作流程\"],\"AQCvCC\":[\"暂无工作流程版本\"],\"4wUkDk\":[\"非空\"],\"W0i24j\":[\"对象\"],\"B3toQF\":[\"对象\"],\"KNz3EF\":[\"偏离常规路线\"],\"OV5wZZ\":[\"已开启\"],\"0zpgxV\":[\"选项\"],\"BzEFor\":[\"或\"],\"/IX/7x\":[\"其他\"],\"boJlGf\":[\"页面未找到\"],\"8ZsakT\":[\"密码\"],\"mi6Rel\":[\"密码重置链接已发送至邮箱\"],\"SrVzRe\":[\"百分比\"],\"yIK1GU\":[\"空车百分比\"],\"PWLd4c\":[\"非空百分比\"],\"Bv3y5w\":[\"永久销毁记录\"],\"N0+GsR\":[\"图片\"],\"jEw0Mr\":[\"请输入有效的 URL\"],\"6nsIo3\":[\"请键入\\\"\",[\"confirmationValue\"],\"\\\"确认要删除此 API 密钥。请注意,任何使用此密钥的脚本都将停止工作。\"],\"mFZTXr\":[\"请键入 \",[\"confirmationText\"],\" 确认要删除此网络钩子。\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"葡萄牙语 - 巴西\"],\"xtXHeo\":[\"葡萄牙语 - 葡萄牙\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"预览\"],\"vERlcd\":[\"简介\"],\"YJgRqq\":[\"伪英语\"],\"ibPuCP\":[\"阅读文件\"],\"v3xM25\":[\"接收包含密码更新链接的电子邮件\"],\"dSCufP\":[\"记录选择\"],\"vpZcGd\":[\"重新生成 API 密钥\"],\"Mwqo5m\":[\"再生钥匙\"],\"D+Mv78\":[\"再生密钥\"],\"5icoS1\":[\"发布\"],\"t/YqKh\":[\"移除\"],\"T/pF0Z\":[\"从收藏中删除\"],\"KbS2K9\":[\"重置密码\"],\"1IWc1n\":[\"重置为\"],\"kx0s+n\":[\"成果\"],\"5dJK4M\":[\"角色\"],\"UX0N2y\":[\"运行工作流程并返回此处查看其执行情况\"],\"A1taO8\":[\"搜索\"],\"l1/uy2\":[\"搜索字段...\"],\"k7kp5/\":[\"搜索索引...\"],\"7taA9j\":[\"搜索字段\"],\"ofuw3g\":[\"搜索对象...\"],\"IMeaSJ\":[\"搜索记录\"],\"a3LDKx\":[\"安全\"],\"QREcJS\":[\"参见活动版本\"],\"OpPn5Z\":[\"查看运行情况\"],\"EtyY4+\":[\"查看版本\"],\"lYhPN0\":[\"查看版本历史\"],\"xraglu\":[\"选择要发送到该端点的事件\"],\"AXTJAW\":[\"选择您喜欢的语言\"],\"mjK8F3\":[\"向团队发送邀请电子邮件\"],\"yy5k7a\":[\"服务器管理面板\"],\"V7fgiB\":[\"设置电子邮件可见性、管理屏蔽列表等。\"],\"cx14rp\":[\"设置域名\"],\"tn41zE\":[\"设置子域名称\"],\"Tz0i8g\":[\"设置\"],\"Vy9kmk\":[\"分享此链接以邀请用户加入您的工作区\"],\"gWk8gY\":[\"更改字段标签是否也要更改 API 名称?\"],\"6Uau97\":[\"跳过\"],\"f6Hub0\":[\"分类\"],\"65A04M\":[\"西班牙语\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"子域\"],\"omhc+7\":[\"子域已被占用\"],\"OlC/tU\":[\"子域名长度不得超过 30 个字符\"],\"ZETwlU\":[\"子域名不能少于 3 个字符\"],\"B5jRKH\":[\"订阅已切换 \",[\"to\"]],\"AxQiPW\":[\"总和\"],\"XYLcNv\":[\"支持\"],\"9yk9d1\":[\"开关 \",[\"from\"]],\"qi74XZ\":[\"开关 \",[\"to\"]],\"L6Fg36\":[\"开关计费 \",[\"to\"]],\"AtzMpB\":[\"同步字段标签和 API 名称\"],\"E3AMmw\":[\"系统设置 - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"系统设置 - [\",[\"systemTimeFormatLabel\"],\"]\"],\"NnH3pK\":[\"测试\"],\"bU9B27\":[\"测试工作流程\"],\"2OUtmv\":[\"该字段的说明\"],\"VGZYbZ\":[\"与您的账户关联的电子邮件\"],\"h8mvCd\":[\"该字段的名称和图标\"],\"L97sPr\":[\"您正在寻找的页面要么已经消失,要么从未出现过。让我们帮您恢复正常\"],\"uWikAA\":[\"该字段的值\"],\"+69KDk\":[\"该字段的值必须是唯一的\"],\"PmtLRf\":[\"有一个问题\"],\"hqCwGc\":[\"此操作不可撤销。这将永久删除该用户,并将其从所有任务中删除。\"],\"gWGuHC\":[\"此操作无法撤销。这将永久删除您的整个工作区。 <0/> 请输入您的电子邮件以确认。\"],\"n9nSNJ\":[\"时间格式\"],\"aqMzDX\":[\"至每月\"],\"WXXiXO\":[\"每年\"],\"PiUt3N\":[\"触发器类型\"],\"IQ5pAL\":[\"触发类型应为手动 - 当没有选择记录时\"],\"+zy2Nq\":[\"类型\"],\"U83IeL\":[\"任何类型\"],\"wSXm5S\":[\"独特性\"],\"GQCXQS\":[\"无限联系人\"],\"ONWvwQ\":[\"上传\"],\"IagCbF\":[\"网址\"],\"6dMpmz\":[\"用作草稿\"],\"oTTQsc\":[\"只能使用字母、数字和破折号。以字母或数字开头和结尾\"],\"c6uZUV\":[\"使用我们的 API 或手动添加您的第一个 [\",[\"objectLabel\"],\"]\"],\"7PzzBU\":[\"用户\"],\"IjyOjp\":[\"用户未登录\"],\"fXVIZq\":[\"价值观\"],\"KANz0G\":[\"查看账单详情\"],\"6n7jtr\":[\"可视化\"],\"id6ein\":[\"我们支持 10MB 以下的正方形 PNG、JPEG 和 GIF 文件\"],\"ZS7vYp\":[\"我们将为每个新事件向该端点发送 POST 请求\"],\"TRDppN\":[\"网络钩子\"],\"v1kQyJ\":[\"网络钩子\"],\"C51ilI\":[\"API 密钥的过期时间。\"],\"leUubq\":[\"何时禁用按键\"],\"wvyffT\":[\"无法测试工作流程\"],\"pmUArF\":[\"工作空间\"],\"VicISP\":[\"删除工作区\"],\"Q9pNST\":[\"编写说明\"],\"3d1wCB\":[\"是\"],\"zSkMV0\":[\"您将立即被收取全年的费用。\"],\"XVnj6K\":[\"您的信用余额将用于支付每月账单。\"],\"9ivpwk\":[\"显示您的姓名\"],\"RhNbPE\":[\"您的工作区将被禁用\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"ROdDR9\":[[\"aggregateLabel\"],\"的\",[\"fieldLabel\"]],\"uogEAL\":[[\"apiKeyName\"],\" 应用程序接口密钥\"],\"6j5rE1\":[[\"name\"]],\"YT0WJ4\":[\"1 000 次工作流节点执行\"],\"4EdXYs\":[\"12h ([\",[\"hour12Label\"],\")\"],\"0HAF12\":[\"2.配置字段\"],\"QsMprd\":[\"24小时([\",[\"hour24Label\"],\")\"],\"ssjjFt\":[\"中止\"],\"uyJsf6\":[\"关于\"],\"AeXO77\":[\"账户\"],\"nD0Y+a\":[\"账户删除\"],\"bPwFdf\":[\"账户\"],\"FQBaXG\":[\"激活\"],\"tu8A/k\":[\"激活工作流程\"],\"F6pfE9\":[\"活跃\"],\"Mue4oc\":[\"由您或您的团队创建的活动 API 密钥。\"],\"m16xKo\":[\"添加\"],\"DpV70M\":[\"添加字段\"],\"dEO3Zx\":[\"添加对象\"],\"sgXUv+\":[\"添加 SSO 身份供应商\"],\"5+ttxv\":[\"添加到拦截列表\"],\"pBsoKL\":[\"添加到收藏夹\"],\"m2qDV8\":[\"添加您的第一个 \",[\"objectLabel\"]],\"vLO+NG\":[\"已添加 \",[\"beautifiedCreatedAt\"]],\"N40H+G\":[\"全部\"],\"3saA7W\":[\"全部([\",[\"relationRecordsCount\"],\")\"],\"Hm90t3\":[\"所有角色\"],\"GMx1K0\":[\"允许通过 Google 的单点登录功能登录。\"],\"dea+zy\":[\"允许通过微软的单点登录功能登录。\"],\"wMg43c\":[\"允许通过共享邀请链接来邀请新用户。\"],\"vHeVg5\":[\"允许用户使用电子邮件和密码登录。\"],\"mJ6m4C\":[\"可选描述\"],\"0RqpZr\":[\"应用程序接口和网络钩子\"],\"yRnk5W\":[\"API 密钥\"],\"5h8ooz\":[\"API 密钥\"],\"kAtj+q\":[\"应用程序接口名称\"],\"aAIQg2\":[\"外观\"],\"3iX0kh\":[\"您确定要更改计费间隔吗?\"],\"nYD/Cq\":[\"上升\"],\"rfYmIr\":[\"分配角色以指定每个成员的访问权限\"],\"lxQ+5m\":[\"分配给\"],\"Y7Dx6e\":[\"必须启用至少一种身份验证方法\"],\"P8fBlG\":[\"认证\"],\"yIVrHZ\":[\"授权\"],\"3uQmjD\":[\"平均\"],\"Dht9W3\":[\"返回内容\"],\"R+w/Va\":[\"账单\"],\"K1172m\":[\"拦截列表\"],\"2yl5lQ\":[\"预约电话\"],\"PmmvzS\":[\"计算\"],\"AjVXBS\":[\"日历\"],\"EUpfsd\":[\"日历\"],\"dEgA5A\":[\"取消\"],\"0TllC8\":[\"随时取消\"],\"rRK/Lf\":[\"取消计划\"],\"N6gPiD\":[\"取消订阅\"],\"OfzMnb\":[\"更改 \",[\"to\"]],\"VhMDMg\":[\"更改密码\"],\"SviKkE\":[\"简体中文\"],\"dzb4Ep\":[\"繁体中文\"],\"JEFFOR\":[\"选择对象\"],\"KT6rEB\":[\"选择服务提供商\"],\"9qP96p\":[\"选择试用\"],\"yz7wBu\":[\"关闭\"],\"+zUMwJ\":[\"配置 SSO 连接\"],\"QTNsSm\":[\"配置和自定义日历偏好。\"],\"aGwm+D\":[\"配置整个应用程序的日期显示方式\"],\"Bh4GBD\":[\"配置电子邮件和日历设置。\"],\"D8ATlr\":[\"将新账户连接到工作区\"],\"Zgi9Fd\":[\"与谷歌连接\"],\"IOfqM8\":[\"与微软联系\"],\"9TzudL\":[\"连接账户\"],\"M73whl\":[\"背景\"],\"xGVfLh\":[\"继续\"],\"CcGOj+\":[\"副驾驶\"],\"7eVkEH\":[\"复制邀请链接\"],\"Ej5euX\":[\"复制此密钥,因为它将不再可见\"],\"wBMjJ2\":[\"计数\"],\"EkZfen\":[\"计算所有\"],\"vQJINq\":[\"数空\"],\"DzRsDJ\":[\"计数不为空\"],\"9FZBbf\":[\"计算唯一值\"],\"zNoOC2\":[\"创建工作流程并返回此处查看其版本\"],\"uXGLuq\":[\"创建应用程序接口密钥\"],\"d0DCww\":[\"创建新记录\"],\"dkAPxi\":[\"创建 Webhook\"],\"8skTDV\":[\"自定义对象\"],\"qt+EaC\":[\"自定义 \",[\"objectLabelSingular\"],\" 视图中可用的字段。\"],\"CMhr4u\":[\"自定义域名\"],\"bCJa9l\":[\"自定义工作区安全\"],\"Zz6Cxn\":[\"危险区\"],\"5cNMFz\":[\"数据模型\"],\"r+cVRP\":[\"数据类型\"],\"mYGY3B\":[\"日期\"],\"Ud9zHv\":[\"日期和时间\"],\"5y3O+A\":[\"停用\"],\"qk4i22\":[\"停用 \\\"同步对象标签和 API 名称 \\\"以设置自定义 API 名称\"],\"gexAq8\":[\"停用该字段\"],\"4tpC8V\":[\"停用工作流程\"],\"Y2ImVJ\":[\"定义对象的名称和描述\"],\"cnGeoo\":[\"删除\"],\"ZDGm40\":[\"删除帐户\"],\"gAz0S5\":[\"删除账户和所有相关数据\"],\"hGfWDm\":[\"删除 API 密钥\"],\"4dpwsE\":[\"删除记录\"],\"kf0A63\":[\"删除记录\"],\"T6S2Ns\":[\"删除此集成\"],\"snMaH4\":[\"删除网络钩子\"],\"kYu0eF\":[\"删除工作区\"],\"mk2Ygs\":[\"删除整个工作区\"],\"Cko536\":[\"下降\"],\"Nu4oKW\":[\"说明\"],\"2xxBws\":[\"销毁\"],\"n+SX4g\":[\"开发人员\"],\"zAg2B9\":[\"弃权草案\"],\"i66xz9\":[\"显示为相对日期\"],\"EoKe5U\":[\"域名\"],\"QVVmxi\":[\"例如后台整合\"],\"tOkc8o\":[\"最早\"],\"JTbQuO\":[\"最早日期\"],\"v+uKyy\":[\"编辑计费间隔\"],\"h2KoTu\":[\"编辑付款方式、查看发票等\"],\"6o1M/Q\":[\"编辑子域名或设置自定义域名。\"],\"O3oNi5\":[\"电子邮件\"],\"lfQsvW\":[\"电子邮件集成\"],\"QT/Wo7\":[\"电子邮件或域名已在拦截列表中\"],\"BXEcos\":[\"电子邮件\"],\"eXoH4Q\":[\"员工\"],\"gqv5ZL\":[\"员工\"],\"N2S1rs\":[\"空\"],\"T3juzf\":[\"端点 URL\"],\"lYGfRP\":[\"英语\"],\"/bfFKe\":[\"享受 \",[\"withCreditCardTrialPeriodDuration\"],\" 天的免费试用期\"],\"GpB8YV\":[\"企业\"],\"c3qGJX\":[\"删除 api 密钥时出错: \",[\"err\"]],\"bj7nh3\":[\"重新生成 api 密钥时出错: \",[\"err\"]],\"VSQxWH\":[\"切换订阅 \",[\"to\"],\" 时出错。\"],\"JLxMta\":[\"建立 Webhook 端点,用于通知异步事件。\"],\"cIgBjB\":[\"从我的电子邮件同步中排除以下人员和域\"],\"fV7V51\":[\"现有对象\"],\"IZ4o2e\":[\"退出设置\"],\"tXGQvS\":[\"预期所选节点为创建步骤节点。\"],\"bKBhgb\":[\"经验\"],\"LxRNPw\":[\"到期\"],\"SkXfL0\":[\"有效期\"],\"i9qiyR\":[\"到期时间\"],\"GS+Mus\":[\"出口\"],\"ep2rbf\":[\"导出记录\"],\"q46CjD\":[\"导出为 PDF\"],\"DaGxE0\":[\"导出视图\"],\"X9kySA\":[\"收藏夹\"],\"zXgopL\":[\"字段类型\"],\"vF68cg\":[\"字段\"],\"3w/aqw\":[\"字段计数\"],\"o7J4JM\":[\"过滤器\"],\"cSev+j\":[\"过滤器\"],\"nLC6tu\":[\"法语\"],\"aTieE0\":[\"从每月到每年\"],\"K04lE5\":[\"从每年到每月\"],\"scmRyR\":[\"完全访问\"],\"xANKBj\":[\"功能\"],\"Weq9zb\":[\"一般情况\"],\"DDcvSo\":[\"德国\"],\"NXEW3h\":[\"邀请您的团队,充分利用您的工作空间。\"],\"zSGbaR\":[\"获取订阅\"],\"2GT3Hf\":[\"全球\"],\"hWp1MY\":[\"授予 Twenty 支持临时访问您工作区的权限,以便我们为您排除故障或恢复内容。您可以随时撤销访问权限。\"],\"vLyv1R\":[\"隐藏\"],\"XTWO+W\":[\"图标和名称\"],\"sJGljQ\":[\"标识符\"],\"j843N3\":[\"如果您丢失了此密钥,可以重新生成,但请注意,任何使用此密钥的脚本都需要更新。请键入\\\"\",[\"confirmationValue\"],\"\\\"确认。\"],\"NoNwIX\":[\"不活动\"],\"pZ/USH\":[\"索引\"],\"JE2tjr\":[\"输入内容必须使用驼峰字体,且不能以数字开头\"],\"AwUsnG\":[\"实例\"],\"nbfdhU\":[\"集成\"],\"NtFk/Z\":[\"无效验证提供程序\"],\"B2Tpo0\":[\"无效电子邮件\"],\"/m52AE\":[\"无效电子邮件或域名\"],\"QdoUFL\":[\"无效表格值\"],\"0M8+El\":[\"电子邮件邀请\"],\"PWIq/W\":[\"通过链接邀请\"],\"3athPG\":[\"通过链接邀请\"],\"5IfmKA\":[\"向电子邮件地址发送邀请链接\"],\"d+Y+rP\":[\"邀请您的团队\"],\"Lj7sBL\":[\"意大利语\"],\"dFtidv\":[\"日语\"],\"h6S9Yz\":[\"韩语\"],\"zrpwCd\":[\"实验室\"],\"vXIe7J\":[\"语言\"],\"wL3cK8\":[\"最新\"],\"Kcjbmz\":[\"最新日期\"],\"pQjjYo\":[\"链接复制到剪贴板\"],\"FgAxTj\":[\"退出登录\"],\"nOhz3x\":[\"注销\"],\"T6YjCk\":[\"管理成员\"],\"4cjU2u\":[\"在此管理空间成员\"],\"FyFNsd\":[\"管理互联网账户\"],\"36kYu0\":[\"管理您的订阅\"],\"3Sdni6\":[\"标记为已完成\"],\"CK1KXz\":[\"最大\"],\"wlQNTg\":[\"成员\"],\"eTUF28\":[\"最小\"],\"3Siwmw\":[\"更多选择\"],\"iSLA/r\":[\"向左移动\"],\"Ubl2by\":[\"向右移动\"],\"6YtxFj\":[\"名称\"],\"z+6jaZ\":[\"API 密钥名称\"],\"J7w8lI\":[\"工作区名称\"],\"2T8KCk\":[\"导航至下一条记录\"],\"veSA19\":[\"导航至下一版本\"],\"ZTEho+\":[\"导航至下一个工作流程\"],\"2tw9bo\":[\"导航到上一条记录\"],\"I+Pm5V\":[\"导航到以前的版本\"],\"QVUN3K\":[\"导航到上一个工作流程\"],\"isRobC\":[\"新\"],\"Kcr9Fr\":[\"新账户\"],\"o8MyXb\":[\"新钥匙\"],\"j313SZ\":[\"新钥匙\"],\"hFxdey\":[\"新对象\"],\"7vhWI8\":[\"新密码\"],\"BcCzLv\":[\"新纪录\"],\"2lmOC5\":[\"新角色\"],\"U1DAok\":[\"新 Webhook\"],\"pwenQu\":[\"无连接账户\"],\"0uWxPM\":[\"尚未运行工作流程\"],\"AQCvCC\":[\"暂无工作流程版本\"],\"4wUkDk\":[\"非空\"],\"W0i24j\":[\"对象\"],\"B3toQF\":[\"对象\"],\"KNz3EF\":[\"偏离常规路线\"],\"OV5wZZ\":[\"已开启\"],\"0zpgxV\":[\"选项\"],\"BzEFor\":[\"或\"],\"/IX/7x\":[\"其他\"],\"boJlGf\":[\"页面未找到\"],\"8ZsakT\":[\"密码\"],\"mi6Rel\":[\"密码重置链接已发送至邮箱\"],\"SrVzRe\":[\"百分比\"],\"yIK1GU\":[\"空车百分比\"],\"PWLd4c\":[\"非空百分比\"],\"Bv3y5w\":[\"永久销毁记录\"],\"N0+GsR\":[\"图片\"],\"jEw0Mr\":[\"请输入有效的 URL\"],\"6nsIo3\":[\"请键入\\\"\",[\"confirmationValue\"],\"\\\"确认要删除此 API 密钥。请注意,任何使用此密钥的脚本都将停止工作。\"],\"mFZTXr\":[\"请键入 \",[\"confirmationText\"],\" 确认要删除此网络钩子。\"],\"MOERNx\":[\"Portuguese\"],\"0nsqwk\":[\"葡萄牙语 - 巴西\"],\"xtXHeo\":[\"葡萄牙语 - 葡萄牙\"],\"R7+D0/\":[\"Portuguese (Brazil)\"],\"512Uma\":[\"Portuguese (Portugal)\"],\"rdUucN\":[\"预览\"],\"vERlcd\":[\"简介\"],\"YJgRqq\":[\"伪英语\"],\"ibPuCP\":[\"阅读文件\"],\"v3xM25\":[\"接收包含密码更新链接的电子邮件\"],\"dSCufP\":[\"记录选择\"],\"vpZcGd\":[\"重新生成 API 密钥\"],\"Mwqo5m\":[\"再生钥匙\"],\"D+Mv78\":[\"再生密钥\"],\"5icoS1\":[\"发布\"],\"t/YqKh\":[\"移除\"],\"T/pF0Z\":[\"从收藏中删除\"],\"KbS2K9\":[\"重置密码\"],\"1IWc1n\":[\"重置为\"],\"kx0s+n\":[\"成果\"],\"5dJK4M\":[\"角色\"],\"UX0N2y\":[\"运行工作流程并返回此处查看其执行情况\"],\"A1taO8\":[\"搜索\"],\"l1/uy2\":[\"搜索字段...\"],\"k7kp5/\":[\"搜索索引...\"],\"7taA9j\":[\"搜索字段\"],\"ofuw3g\":[\"搜索对象...\"],\"IMeaSJ\":[\"搜索记录\"],\"a3LDKx\":[\"安全\"],\"QREcJS\":[\"参见活动版本\"],\"OpPn5Z\":[\"查看运行情况\"],\"EtyY4+\":[\"查看版本\"],\"lYhPN0\":[\"查看版本历史\"],\"xraglu\":[\"选择要发送到该端点的事件\"],\"AXTJAW\":[\"选择您喜欢的语言\"],\"mjK8F3\":[\"向团队发送邀请电子邮件\"],\"yy5k7a\":[\"服务器管理面板\"],\"V7fgiB\":[\"设置电子邮件可见性、管理屏蔽列表等。\"],\"cx14rp\":[\"设置域名\"],\"tn41zE\":[\"设置子域名称\"],\"Tz0i8g\":[\"设置\"],\"Vy9kmk\":[\"分享此链接以邀请用户加入您的工作区\"],\"gWk8gY\":[\"更改字段标签是否也要更改 API 名称?\"],\"6Uau97\":[\"跳过\"],\"f6Hub0\":[\"分类\"],\"65A04M\":[\"西班牙语\"],\"vnS6Rf\":[\"SSO\"],\"ku9TbG\":[\"子域\"],\"omhc+7\":[\"子域已被占用\"],\"OlC/tU\":[\"子域名长度不得超过 30 个字符\"],\"ZETwlU\":[\"子域名不能少于 3 个字符\"],\"B5jRKH\":[\"订阅已切换 \",[\"to\"]],\"AxQiPW\":[\"总和\"],\"XYLcNv\":[\"支持\"],\"9yk9d1\":[\"开关 \",[\"from\"]],\"qi74XZ\":[\"开关 \",[\"to\"]],\"L6Fg36\":[\"开关计费 \",[\"to\"]],\"AtzMpB\":[\"同步字段标签和 API 名称\"],\"E3AMmw\":[\"系统设置 - \",[\"systemDateFormatLabel\"]],\"0ZgB1e\":[\"系统设置 - [\",[\"systemTimeFormatLabel\"],\"]\"],\"NnH3pK\":[\"测试\"],\"bU9B27\":[\"测试工作流程\"],\"2OUtmv\":[\"该字段的说明\"],\"VGZYbZ\":[\"与您的账户关联的电子邮件\"],\"h8mvCd\":[\"该字段的名称和图标\"],\"L97sPr\":[\"您正在寻找的页面要么已经消失,要么从未出现过。让我们帮您恢复正常\"],\"uWikAA\":[\"该字段的值\"],\"+69KDk\":[\"该字段的值必须是唯一的\"],\"PmtLRf\":[\"有一个问题\"],\"hqCwGc\":[\"此操作不可撤销。这将永久删除该用户,并将其从所有任务中删除。\"],\"gWGuHC\":[\"此操作无法撤销。这将永久删除您的整个工作区。 <0/> 请输入您的电子邮件以确认。\"],\"n9nSNJ\":[\"时间格式\"],\"aqMzDX\":[\"至每月\"],\"WXXiXO\":[\"每年\"],\"PiUt3N\":[\"触发器类型\"],\"IQ5pAL\":[\"触发类型应为手动 - 当没有选择记录时\"],\"+zy2Nq\":[\"类型\"],\"U83IeL\":[\"任何类型\"],\"wSXm5S\":[\"独特性\"],\"GQCXQS\":[\"无限联系人\"],\"ONWvwQ\":[\"上传\"],\"IagCbF\":[\"网址\"],\"6dMpmz\":[\"用作草稿\"],\"oTTQsc\":[\"只能使用字母、数字和破折号。以字母或数字开头和结尾\"],\"c6uZUV\":[\"使用我们的 API 或手动添加您的第一个 [\",[\"objectLabel\"],\"]\"],\"7PzzBU\":[\"用户\"],\"IjyOjp\":[\"用户未登录\"],\"fXVIZq\":[\"价值观\"],\"KANz0G\":[\"查看账单详情\"],\"6n7jtr\":[\"可视化\"],\"id6ein\":[\"我们支持 10MB 以下的正方形 PNG、JPEG 和 GIF 文件\"],\"ZS7vYp\":[\"我们将为每个新事件向该端点发送 POST 请求\"],\"TRDppN\":[\"网络钩子\"],\"v1kQyJ\":[\"网络钩子\"],\"C51ilI\":[\"API 密钥的过期时间。\"],\"leUubq\":[\"何时禁用按键\"],\"wvyffT\":[\"无法测试工作流程\"],\"pmUArF\":[\"工作空间\"],\"VicISP\":[\"删除工作区\"],\"Q9pNST\":[\"编写说明\"],\"3d1wCB\":[\"是\"],\"zSkMV0\":[\"您将立即被收取全年的费用。\"],\"XVnj6K\":[\"您的信用余额将用于支付每月账单。\"],\"9ivpwk\":[\"显示您的姓名\"],\"RhNbPE\":[\"您的工作区将被禁用\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-front/src/locales/it.po b/packages/twenty-front/src/locales/it.po index 089c9ba62417..828662687494 100644 --- a/packages/twenty-front/src/locales/it.po +++ b/packages/twenty-front/src/locales/it.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 15:08+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -256,11 +256,11 @@ msgstr "Modifica della password" msgid "Change {to}" msgstr "Cambiare {to}" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 msgid "Chinese — Simplified" msgstr "Cinese semplificato" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 msgid "Chinese — Traditional" msgstr "Cinese tradizionale" @@ -846,6 +846,10 @@ msgstr "Invita il tuo team" msgid "Italian" msgstr "Italiano" +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "Giapponese" + #: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 msgid "Korean" msgstr "Coreano" @@ -1106,11 +1110,11 @@ msgstr "Digitare \"{confirmationValue}\" per confermare che si desidera eliminar msgid "Please type {confirmationText} to confirm you want to delete this webhook." msgstr "Digitare {confirmationText} per confermare l'eliminazione di questo webhook." -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 msgid "Portuguese — Brazil" msgstr "Portoghese - Brasile" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 msgid "Portuguese — Portugal" msgstr "Portoghese - Portogallo" @@ -1125,7 +1129,7 @@ msgstr "Anteprima" msgid "Profile" msgstr "Profilo" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:113 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 msgid "Pseudo-English" msgstr "Pseudoinglese" diff --git a/packages/twenty-front/src/locales/ja.po b/packages/twenty-front/src/locales/ja.po new file mode 100644 index 000000000000..a0809c70e3c2 --- /dev/null +++ b/packages/twenty-front/src/locales/ja.po @@ -0,0 +1,1616 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-01 10:10+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: ja\n" + +#: src/pages/onboarding/ChooseYourPlan.tsx:92 +msgid "1 000 workflow node executions" +msgstr "1 000 ワークフローノード実行" + +#: src/pages/settings/profile/appearance/components/DateTimeSettingsTimeFormatSelect.tsx:63 +msgid "12h ({hour12Label})" +msgstr "12h ({hour12Label})" + +#: src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx:198 +msgid "2. Configure field" +msgstr "2.フィールドの設定" + +#: src/pages/settings/profile/appearance/components/DateTimeSettingsTimeFormatSelect.tsx:59 +msgid "24h ({hour24Label})" +msgstr "24h ({hour24Label})" + +#: src/pages/onboarding/ChooseYourPlan.tsx:91 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:191 +msgid "API & Webhooks" +msgstr "APIとWebhooks" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:180 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:188 +msgid "API Key" +msgstr "APIキー" + +#: src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldIconLabelForm.tsx:166 +msgid "API Name" +msgstr "API名" + +#: src/pages/settings/developers/SettingsDevelopers.tsx:49 +msgid "API keys" +msgstr "APIキー" + +#: src/modules/ui/input/components/ImageInput.tsx:157 +msgid "Abort" +msgstr "中止" + +#: src/pages/settings/data-model/SettingsNewObject.tsx:90 +msgid "About" +msgstr "について" + +#: src/pages/settings/accounts/SettingsAccounts.tsx:40 +#: src/pages/settings/accounts/SettingsAccounts.tsx:46 +msgid "Account" +msgstr "アカウント" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:321 +#: src/modules/settings/profile/components/DeleteAccount.tsx:45 +msgid "Account Deletion" +msgstr "アカウント削除" + +#: src/pages/settings/accounts/SettingsAccountsCalendars.tsx:21 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:119 +msgid "Accounts" +msgstr "アカウント" + +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:259 +#: src/modules/workflow/components/RecordShowPageWorkflowHeader.tsx:99 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:66 +msgid "Activate" +msgstr "アクティベート" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:65 +msgid "Activate Workflow" +msgstr "ワークフローの有効化" + +#: src/pages/settings/data-model/SettingsObjects.tsx:190 +#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx:200 +msgid "Active" +msgstr "アクティブ" + +#: src/pages/settings/developers/SettingsDevelopers.tsx:50 +msgid "Active API keys created by you or your team." +msgstr "あなたまたはあなたのチームによって作成されたアクティブなAPIキー。" + +#: src/modules/ui/layout/page/components/PageAddButton.tsx:38 +msgid "Add" +msgstr "追加" + +#: src/modules/settings/data-model/object-details/components/tabs/ObjectFields.tsx:39 +msgid "Add Field" +msgstr "フィールドの追加" + +#: src/modules/settings/security/components/SettingsSSOIdentitiesProvidersListCard.tsx:60 +msgid "Add SSO Identity Provider" +msgstr "SSOアイデンティティ・プロバイダーの追加" + +#: src/pages/settings/data-model/SettingsObjects.tsx:144 +msgid "Add object" +msgstr "オブジェクトの追加" + +#: src/modules/settings/accounts/components/SettingsAccountsBlocklistInput.tsx:105 +msgid "Add to blocklist" +msgstr "ブロックリストに追加" + +#: src/modules/action-menu/components/__stories__/RightDrawerActionMenuDropdown.stories.tsx:68 +#: src/modules/action-menu/components/__stories__/RecordIndexActionMenuDropdown.stories.tsx:79 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:105 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:106 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts:35 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts:36 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:192 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:193 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:68 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:69 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts:34 +msgid "Add to favorites" +msgstr "お気に入りに追加" + +#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts:16 +msgid "Add your first {objectLabel}" +msgstr "最初の{objectLabel}を追加" + +#: src/modules/ui/layout/show-page/components/ShowPageSummaryCard.tsx:157 +msgid "Added {beautifiedCreatedAt}" +msgstr "{beautifiedCreatedAt}】を追加" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationShortLabel.ts:19 +msgid "All" +msgstr "すべて" + +#: src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationSection.tsx:185 +msgid "All ({relationRecordsCount})" +msgstr "すべて ({relationRecordsCount})" + +#: src/pages/settings/roles/SettingsRoles.tsx:68 +msgid "All roles" +msgstr "すべての役割" + +#: src/modules/settings/security/components/SettingsSecurityOptionsList.tsx:135 +msgid "Allow logins through Google's single sign-on functionality." +msgstr "Googleのシングルサインオン機能によるログインを許可する。" + +#: src/modules/settings/security/components/SettingsSecurityOptionsList.tsx:146 +msgid "Allow logins through Microsoft's single sign-on functionality." +msgstr "マイクロソフトのシングルサインオン機能によるログインを許可する。" + +#: src/modules/settings/security/components/SettingsSecurityOptionsList.tsx:168 +msgid "Allow the invitation of new users by sharing an invite link." +msgstr "招待リンクを共有することで、新規ユーザーの招待を許可する。" + +#: src/modules/settings/security/components/SettingsSecurityOptionsList.tsx:157 +msgid "Allow users to sign in with an email and password." +msgstr "ユーザーが電子メールとパスワードでサインインできるようにする。" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:251 +msgid "An optional description" +msgstr "任意の説明" + +#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:37 +msgid "Appearance" +msgstr "外観" + +#: src/pages/settings/SettingsBilling.tsx:189 +msgid "Are you sure that you want to change your billing interval?" +msgstr "課金間隔を変更してもよろしいですか?" + +#: src/modules/object-record/object-sort-dropdown/components/ObjectSortDropdownButton.tsx:201 +#: src/modules/object-record/object-sort-dropdown/components/ObjectSortDropdownButton.tsx:214 +msgid "Ascending" +msgstr "上昇" + +#: src/pages/settings/roles/SettingsRoles.tsx:69 +msgid "Assign roles to specify each member's access permissions" +msgstr "各メンバーのアクセス権限を指定するロールの割り当て" + +#: src/pages/settings/roles/SettingsRoles.tsx:36 +msgid "Assigned to" +msgstr "担当" + +#: src/modules/settings/security/components/SettingsSecurityOptionsList.tsx:73 +msgid "At least one authentication method must be enabled" +msgstr "少なくとも1つの認証方法が有効になっていること" + +#: src/pages/settings/security/SettingsSecurity.tsx:63 +msgid "Authentication" +msgstr "認証" + +#: src/pages/auth/Authorize.tsx:127 +msgid "Authorize" +msgstr "認可する" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationShortLabel.ts:15 +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:15 +msgid "Average" +msgstr "平均" + +#: src/pages/not-found/NotFound.tsx:58 +msgid "Back to content" +msgstr "コンテンツに戻る" + +#: src/pages/settings/SettingsBilling.tsx:132 +#: src/pages/settings/SettingsBilling.tsx:138 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:154 +msgid "Billing" +msgstr "請求" + +#: src/modules/settings/accounts/components/SettingsAccountsBlocklistSection.tsx:46 +msgid "Blocklist" +msgstr "ブロックリスト" + +#: src/pages/onboarding/ChooseYourPlan.tsx:210 +msgid "Book a Call" +msgstr "電話予約" + +#: src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterValue.tsx:72 +msgid "Calculate" +msgstr "計算する" + +#: src/modules/settings/accounts/components/SettingsAccountsSettingsSection.tsx:57 +msgid "Calendar" +msgstr "カレンダー" + +#: src/pages/settings/accounts/SettingsAccountsCalendars.tsx:14 +#: src/pages/settings/accounts/SettingsAccountsCalendars.tsx:24 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:83 +msgid "Calendars" +msgstr "カレンダー" + +#: src/pages/auth/Authorize.tsx:124 +#: src/modules/ui/layout/modal/components/ConfirmationModal.tsx:151 +#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx:218 +#: src/modules/settings/components/SaveAndCancelButtons/CancelButton.tsx:16 +msgid "Cancel" +msgstr "キャンセル" + +#: src/pages/settings/SettingsBilling.tsx:176 +msgid "Cancel Plan" +msgstr "キャンセルプラン" + +#: src/pages/onboarding/ChooseYourPlan.tsx:152 +msgid "Cancel anytime" +msgstr "いつでもキャンセル" + +#: src/pages/settings/SettingsBilling.tsx:171 +msgid "Cancel your subscription" +msgstr "購読をキャンセルする" + +#: src/pages/auth/PasswordReset.tsx:246 +#: src/modules/settings/profile/components/ChangePassword.tsx:52 +#: src/modules/settings/profile/components/ChangePassword.tsx:58 +msgid "Change Password" +msgstr "パスワードの変更" + +#: src/pages/settings/SettingsBilling.tsx:193 +msgid "Change {to}" +msgstr "{to}]を変更する" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +msgid "Chinese — Simplified" +msgstr "中国語 - 簡体字" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 +msgid "Chinese — Traditional" +msgstr "中国語 - 繁体字" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:281 +msgid "Choose an object" +msgstr "オブジェクトを選択する" + +#: src/pages/onboarding/ChooseYourPlan.tsx:147 +msgid "Choose your Trial" +msgstr "トライアルの選択" + +#: src/modules/settings/accounts/components/SettingsNewAccountSection.tsx:13 +msgid "Choose your provider" +msgstr "プロバイダーの選択" + +#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx:221 +msgid "Close" +msgstr "閉じる" + +#: src/pages/settings/security/SettingsSecurity.tsx:48 +msgid "Configure an SSO connection" +msgstr "SSO接続を設定する" + +#: src/modules/settings/accounts/components/SettingsAccountsSettingsSection.tsx:58 +msgid "Configure and customize your calendar preferences." +msgstr "カレンダーの設定を行い、カスタマイズします。" + +#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:43 +msgid "Configure how dates are displayed across the app" +msgstr "アプリ全体の日付の表示方法を設定する" + +#: src/modules/settings/accounts/components/SettingsAccountsSettingsSection.tsx:34 +msgid "Configure your emails and calendar settings." +msgstr "メールとカレンダーの設定" + +#: src/modules/settings/accounts/components/SettingsNewAccountSection.tsx:11 +msgid "Connect a new account to your workspace" +msgstr "新しいアカウントをワークスペースに接続する" + +#: src/modules/settings/accounts/components/SettingsAccountsListEmptyStateCard.tsx:46 +msgid "Connect with Google" +msgstr "グーグルとつながる" + +#: src/modules/settings/accounts/components/SettingsAccountsListEmptyStateCard.tsx:54 +msgid "Connect with Microsoft" +msgstr "マイクロソフトとつながる" + +#: src/pages/settings/accounts/SettingsAccounts.tsx:56 +msgid "Connected accounts" +msgstr "接続アカウント" + +#: src/modules/command-menu/components/CommandMenu.tsx:91 +msgid "Context" +msgstr "コンテクスト" + +#: src/pages/onboarding/InviteTeam.tsx:228 +#: src/pages/onboarding/ChooseYourPlan.tsx:198 +msgid "Continue" +msgstr "続ける" + +#: src/modules/command-menu/components/CommandMenu.tsx:63 +msgid "Copilot" +msgstr "コパイロット" + +#: src/pages/onboarding/InviteTeam.tsx:217 +msgid "Copy invitation link" +msgstr "招待状リンクをコピーする" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:181 +msgid "Copy this key as it will not be visible again" +msgstr "このキーをコピーしてください。" + +#: src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterDropdownContent.tsx:52 +#: src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderAggregateDropdownMenuContent.tsx:38 +msgid "Count" +msgstr "カウント" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:19 +msgid "Count all" +msgstr "すべて数える" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:21 +msgid "Count empty" +msgstr "空カウント" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:23 +msgid "Count not empty" +msgstr "カウントが空ではない" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:25 +msgid "Count unique values" +msgstr "一意な値を数える" + +#: src/pages/settings/developers/SettingsDevelopers.tsx:56 +msgid "Create API key" +msgstr "APIキーの作成" + +#: src/pages/settings/developers/SettingsDevelopers.tsx:72 +msgid "Create Webhook" +msgstr "ウェブフックの作成" + +#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateSubTitle.ts:9 +msgid "Create a workflow and return here to view its versions" +msgstr "ワークフローを作成し、ここに戻ってそのバージョンを表示する" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:55 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:44 +msgid "Create new record" +msgstr "新しいレコードを作成する" + +#: src/pages/onboarding/ChooseYourPlan.tsx:90 +msgid "Custom objects" +msgstr "カスタムオブジェクト" + +#: src/modules/settings/data-model/object-details/components/tabs/ObjectFields.tsx:28 +msgid "Customise the fields available in the {objectLabelSingular} views." +msgstr "{objectLabelSingular}]ビューで利用可能なフィールドをカスタマイズします。" + +#: src/pages/settings/SettingsWorkspace.tsx:56 +msgid "Customize Domain" +msgstr "ドメインのカスタマイズ" + +#: src/pages/settings/security/SettingsSecurity.tsx:64 +msgid "Customize your workspace security" +msgstr "ワークスペースのセキュリティをカスタマイズ" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:341 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:235 +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:250 +#: src/modules/settings/profile/components/DeleteWorkspace.tsx:30 +#: src/modules/settings/profile/components/DeleteAccount.tsx:29 +msgid "Danger zone" +msgstr "危険地帯" + +#: src/pages/settings/data-model/SettingsObjects.tsx:139 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:167 +msgid "Data model" +msgstr "データモデル" + +#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx:41 +#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx:70 +msgid "Data type" +msgstr "データ型" + +#: src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterMenuContent.tsx:89 +#: src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterDropdownContent.tsx:80 +#: src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderAggregateDropdownMenuContent.tsx:52 +#: src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderAggregateDropdownContent.tsx:58 +msgid "Date" +msgstr "日付" + +#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:42 +msgid "Date and time" +msgstr "日時" + +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:259 +#: src/modules/workflow/components/RecordShowPageWorkflowHeader.tsx:116 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:81 +msgid "Deactivate" +msgstr "非アクティブ化" + +#: src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldIconLabelForm.tsx:105 +msgid "Deactivate \"Synchronize Objects Labels and API Names\" to set a custom API name" +msgstr "カスタムAPI名を設定するには、「オブジェクト・ラベルとAPI名の同期」を無効にする。" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:80 +msgid "Deactivate Workflow" +msgstr "ワークフローの停止" + +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:251 +msgid "Deactivate this field" +msgstr "このフィールドを無効にする" + +#: src/pages/settings/data-model/SettingsNewObject.tsx:91 +msgid "Define the name and description of your object" +msgstr "オブジェクトの名前と説明を定義する" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:347 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:241 +#: src/modules/action-menu/components/__stories__/RightDrawerActionMenuDropdown.stories.tsx:88 +#: src/modules/action-menu/components/__stories__/RecordIndexActionMenuDropdown.stories.tsx:59 +#: src/modules/action-menu/components/__stories__/RecordIndexActionMenuBarEntry.stories.tsx:31 +#: src/modules/action-menu/components/__stories__/RecordIndexActionMenuBarEntry.stories.tsx:45 +#: src/modules/action-menu/components/__stories__/RecordIndexActionMenuBar.stories.tsx:61 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:223 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:239 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:99 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:115 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts:60 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts:76 +msgid "Delete" +msgstr "削除" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:254 +msgid "Delete API key" +msgstr "APIキーの削除" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:332 +#: src/modules/settings/profile/components/DeleteAccount.tsx:37 +#: src/modules/settings/profile/components/DeleteAccount.tsx:53 +msgid "Delete account" +msgstr "アカウント削除" + +#: src/modules/settings/profile/components/DeleteAccount.tsx:30 +msgid "Delete account and all the associated data" +msgstr "アカウントと関連データをすべて削除する" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:222 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:98 +msgid "Delete record" +msgstr "レコードの削除" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:238 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:114 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts:75 +msgid "Delete records" +msgstr "レコードの削除" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:342 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:236 +msgid "Delete this integration" +msgstr "この統合を削除する" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:356 +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:364 +msgid "Delete webhook" +msgstr "ウェブフックの削除" + +#: src/modules/settings/profile/components/DeleteWorkspace.tsx:36 +#: src/modules/settings/profile/components/DeleteWorkspace.tsx:54 +msgid "Delete workspace" +msgstr "ワークスペースの削除" + +#: src/modules/settings/profile/components/DeleteWorkspace.tsx:31 +msgid "Delete your whole workspace" +msgstr "ワークスペース全体を削除する" + +#: src/modules/object-record/object-sort-dropdown/components/ObjectSortDropdownButton.tsx:201 +#: src/modules/object-record/object-sort-dropdown/components/ObjectSortDropdownButton.tsx:214 +msgid "Descending" +msgstr "下降" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:250 +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:239 +#: src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx:266 +msgid "Description" +msgstr "説明" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:252 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:154 +msgid "Destroy" +msgstr "破壊する" + +#: src/pages/settings/developers/SettingsDevelopers.tsx:35 +#: src/pages/settings/developers/SettingsDevelopers.tsx:42 +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew.tsx:78 +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:220 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx:89 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:169 +msgid "Developers" +msgstr "開発者" + +#: src/modules/workflow/components/RecordShowPageWorkflowHeader.tsx:80 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:95 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:96 +msgid "Discard Draft" +msgstr "ドラフト破棄" + +#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx:48 +msgid "Display as relative date" +msgstr "相対日付で表示" + +#: src/pages/settings/SettingsWorkspace.tsx:51 +#: src/pages/settings/workspace/SettingsHostname.tsx:121 +#: src/pages/settings/workspace/SettingsDomain.tsx:109 +#: src/pages/settings/workspace/SettingsDomain.tsx:119 +msgid "Domain" +msgstr "ドメイン" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx:108 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:223 +msgid "E.g. backoffice integration" +msgstr "例:バックオフィスとの統合" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationShortLabel.ts:29 +msgid "Earliest" +msgstr "最初期" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:31 +msgid "Earliest date" +msgstr "最も古い日付" + +#: src/pages/settings/SettingsBilling.tsx:158 +msgid "Edit billing interval" +msgstr "請求間隔の編集" + +#: src/pages/settings/SettingsBilling.tsx:146 +msgid "Edit payment method, see your invoices and more" +msgstr "支払い方法の編集、請求書の確認など" + +#: src/pages/settings/SettingsWorkspace.tsx:52 +msgid "Edit your subdomain name or set a custom domain." +msgstr "サブドメイン名を編集するか、カスタムドメインを設定します。" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:180 +#: src/pages/settings/SettingsWorkspaceMembers.tsx:256 +#: src/pages/settings/SettingsProfile.tsx:42 +#: src/pages/auth/PasswordReset.tsx:206 +msgid "Email" +msgstr "電子メール" + +#: src/pages/onboarding/ChooseYourPlan.tsx:89 +msgid "Email integration" +msgstr "電子メールの統合" + +#: src/modules/settings/accounts/components/SettingsAccountsBlocklistInput.tsx:55 +msgid "Email or domain is already in blocklist" +msgstr "電子メールまたはドメインがすでにブロックリストに登録されている" + +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:77 +#: src/modules/settings/accounts/components/SettingsAccountsSettingsSection.tsx:45 +msgid "Emails" +msgstr "電子メール" + +#: src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldIconLabelForm.tsx:137 +msgid "Employees" +msgstr "従業員" + +#: src/modules/object-record/record-inline-cell/components/RecordInlineCellDisplayMode.tsx:86 +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationShortLabel.ts:22 +#: src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiff.tsx:62 +msgid "Empty" +msgstr "空" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew.tsx:96 +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:238 +msgid "Endpoint URL" +msgstr "エンドポイントURL" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:71 +msgid "English" +msgstr "英語" + +#: src/pages/onboarding/ChooseYourPlan.tsx:157 +msgid "Enjoy a {withCreditCardTrialPeriodDuration}-days free trial" +msgstr "{withCreditCardTrialPeriodDuration}]-日間の無料トライアルをお楽しみください。" + +#: src/pages/settings/security/SettingsSecurity.tsx:51 +msgid "Enterprise" +msgstr "エンタープライズ" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:96 +msgid "Error deleting api key: {err}" +msgstr "apiキーの削除エラー:{err}。" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:148 +msgid "Error regenerating api key: {err}" +msgstr "APIキーの再生成エラー:{err}。" + +#: src/pages/settings/SettingsBilling.tsx:124 +msgid "Error while switching subscription {to}." +msgstr "サブスクリプション{to}の切り替え中にエラーが発生しました。" + +#: src/pages/settings/developers/SettingsDevelopers.tsx:66 +msgid "Establish Webhook endpoints for notifications on asynchronous events." +msgstr "非同期イベントの通知用にWebhookエンドポイントを確立する。" + +#: src/modules/settings/accounts/components/SettingsAccountsBlocklistSection.tsx:47 +msgid "Exclude the following people and domains from my email sync" +msgstr "私の電子メール同期から次の人とドメインを除外する" + +#: src/pages/settings/data-model/SettingsObjects.tsx:162 +msgid "Existing objects" +msgstr "既存のオブジェクト" + +#: src/modules/navigation/components/AppNavigationDrawer.tsx:36 +msgid "Exit Settings" +msgstr "終了設定" + +#: src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditableEffect.tsx:58 +msgid "Expected selected node to be a create step node." +msgstr "選択されたノードがステップ作成ノードであることを期待。" + +#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:26 +#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:32 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:113 +msgid "Experience" +msgstr "経験" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:219 +msgid "Expiration" +msgstr "有効期限" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx:126 +msgid "Expiration Date" +msgstr "有効期限" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:259 +msgid "Expires in" +msgstr "期限切れ" + +#: src/modules/action-menu/components/__stories__/RightDrawerActionMenuDropdown.stories.tsx:78 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:136 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:149 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts:88 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts:101 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:268 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:281 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:57 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:128 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:141 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts:89 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts:102 +msgid "Export" +msgstr "輸出" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:135 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts:87 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:267 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:127 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts:88 +msgid "Export records" +msgstr "輸出記録" + +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:56 +msgid "Export to PDF" +msgstr "PDFへのエクスポート" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:148 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts:100 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:280 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:140 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts:101 +msgid "Export view" +msgstr "エクスポートビュー" + +#: src/modules/favorites/components/CurrentWorkspaceMemberFavoritesFolders.tsx:58 +msgid "Favorites" +msgstr "お気に入り" + +#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx:35 +msgid "Field type" +msgstr "フィールドタイプ" + +#: src/pages/settings/data-model/SettingsObjectIndexTable.tsx:43 +#: src/pages/settings/data-model/SettingsObjectDetailPage.tsx:95 +#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts:22 +#: src/modules/settings/data-model/object-details/components/tabs/ObjectFields.tsx:27 +msgid "Fields" +msgstr "フィールド" + +#: src/testing/mock-data/tableData.ts:22 +msgid "Fields Count" +msgstr "フィールド数" + +#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx:102 +#: src/modules/object-record/object-filter-dropdown/components/SingleEntityObjectFilterDropdownButton.tsx:82 +#: src/modules/object-record/object-filter-dropdown/components/MultipleFiltersButton.tsx:24 +msgid "Filter" +msgstr "フィルター" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:265 +msgid "Filters" +msgstr "フィルター" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:75 +msgid "French" +msgstr "フランス語" + +#: src/pages/onboarding/ChooseYourPlan.tsx:87 +msgid "Full access" +msgstr "フルアクセス" + +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:199 +msgid "Functions" +msgstr "機能" + +#: src/pages/settings/SettingsWorkspace.tsx:29 +#: src/pages/settings/SettingsWorkspace.tsx:35 +#: src/pages/settings/workspace/SettingsDomain.tsx:116 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:143 +msgid "General" +msgstr "一般" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:83 +msgid "German" +msgstr "ドイツ語" + +#: src/pages/onboarding/InviteTeam.tsx:184 +msgid "Get the most out of your workspace by inviting your team." +msgstr "チームを招待して、ワークスペースを最大限に活用しましょう。" + +#: src/pages/onboarding/ChooseYourPlan.tsx:148 +msgid "Get your subscription" +msgstr "購読を申し込む" + +#: src/modules/command-menu/components/CommandMenu.tsx:77 +msgid "Global" +msgstr "グローバル" + +#: src/pages/settings/SettingsWorkspace.tsx:65 +msgid "Grant Twenty support temporary access to your workspace so we can troubleshoot problems or recover content on your behalf. You can revoke access at any time." +msgstr "お客様のワークスペースへの一時的なアクセスを Twenty サポートに許可することで、お客様に代わって問題のトラブルシューティングやコンテンツの復旧を行うことができます。お客様はいつでもアクセス権を取り消すことができます。" + +#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx:131 +msgid "Hide" +msgstr "隠す" + +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:208 +#: src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx:239 +msgid "Icon and Name" +msgstr "アイコンと名前" + +#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx:64 +msgid "Identifier" +msgstr "識別子" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:273 +msgid "If you’ve lost this key, you can regenerate it, but be aware that any script using this key will need to be updated. Please type\"{confirmationValue}\" to confirm." +msgstr "このキーを紛失した場合は、再生成することができますが、このキーを使用しているスクリプトは更新する必要がありますのでご注意ください。確認のため、\"{confirmationValue}\"と入力してください。" + +#: src/pages/settings/data-model/SettingsObjects.tsx:215 +#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx:214 +msgid "Inactive" +msgstr "活動休止中" + +#: src/pages/settings/data-model/SettingsObjectDetailPage.tsx:107 +msgid "Indexes" +msgstr "インデックス" + +#: src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldIconLabelForm.tsx:106 +msgid "Input must be in camel case and cannot start with a number" +msgstr "入力はキャメルケースでなければならず、数字で始めることはできない。" + +#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts:28 +msgid "Instances" +msgstr "インスタンス" + +#: src/pages/settings/integrations/SettingsIntegrations.tsx:15 +#: src/pages/settings/integrations/SettingsIntegrations.tsx:21 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:172 +msgid "Integrations" +msgstr "統合" + +#: src/modules/settings/security/components/SettingsSecurityOptionsList.tsx:57 +msgid "Invalid auth provider" +msgstr "無効な認証プロバイダ" + +#: src/modules/settings/profile/components/ChangePassword.tsx:21 +msgid "Invalid email" +msgstr "無効な電子メール" + +#: src/modules/settings/accounts/components/SettingsAccountsBlocklistInput.tsx:44 +#: src/modules/settings/accounts/components/SettingsAccountsBlocklistInput.tsx:50 +msgid "Invalid email or domain" +msgstr "無効な電子メールまたはドメイン" + +#: src/pages/settings/workspace/SettingsDomain.tsx:71 +msgid "Invalid form values" +msgstr "無効なフォーム値" + +#: src/modules/settings/security/components/SettingsSecurityOptionsList.tsx:167 +msgid "Invite by Link" +msgstr "リンクで招待" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:244 +msgid "Invite by email" +msgstr "Eメールで招待する" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:157 +msgid "Invite by link" +msgstr "リンクで招待" + +#: src/pages/onboarding/InviteTeam.tsx:152 +msgid "Invite link sent to email addresses" +msgstr "Eメールアドレスに招待リンクを送信" + +#: src/pages/onboarding/InviteTeam.tsx:181 +msgid "Invite your team" +msgstr "チームを招待する" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:87 +msgid "Italian" +msgstr "イタリア語" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "日本語" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 +msgid "Korean" +msgstr "韓国語" + +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:217 +msgid "Lab" +msgstr "ラボ" + +#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:51 +msgid "Language" +msgstr "言語" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationShortLabel.ts:31 +msgid "Latest" +msgstr "最新" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:33 +msgid "Latest date" +msgstr "最新の日付" + +#: src/pages/onboarding/InviteTeam.tsx:127 +msgid "Link copied to clipboard" +msgstr "クリップボードにコピーされたリンク" + +#: src/pages/onboarding/ChooseYourPlan.tsx:206 +msgid "Log out" +msgstr "ログアウト" + +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:228 +msgid "Logout" +msgstr "ログアウト" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:167 +msgid "Manage Members" +msgstr "メンバー管理" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:168 +msgid "Manage the members of your space here" +msgstr "あなたのスペースのメンバーを管理する" + +#: src/pages/settings/accounts/SettingsAccounts.tsx:57 +msgid "Manage your internet accounts." +msgstr "インターネットアカウントの管理" + +#: src/pages/settings/SettingsBilling.tsx:145 +msgid "Manage your subscription" +msgstr "サブスクリプションの管理" + +#: src/modules/action-menu/components/__stories__/RecordIndexActionMenuDropdown.stories.tsx:69 +#: src/modules/action-menu/components/__stories__/RecordIndexActionMenuBarEntry.stories.tsx:60 +msgid "Mark as done" +msgstr "完了マークを付ける" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationShortLabel.ts:13 +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:13 +msgid "Max" +msgstr "マックス" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:143 +#: src/pages/settings/SettingsWorkspaceMembers.tsx:149 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:148 +msgid "Members" +msgstr "メンバー" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationShortLabel.ts:11 +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:11 +msgid "Min" +msgstr "最小" + +#: src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterDropdownContent.tsx:38 +#: src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderAggregateDropdownMenuContent.tsx:59 +msgid "More options" +msgstr "その他のオプション" + +#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx:117 +msgid "Move left" +msgstr "左に移動" + +#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx:124 +msgid "Move right" +msgstr "右に移動" + +#: src/testing/mock-data/tableData.ts:16 +#: src/pages/settings/SettingsWorkspaceMembers.tsx:177 +#: src/pages/settings/SettingsWorkspace.tsx:44 +#: src/pages/settings/SettingsProfile.tsx:35 +#: src/pages/settings/roles/SettingsRoles.tsx:31 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx:106 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:209 +#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx:29 +#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx:58 +#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts:10 +#: src/modules/settings/workspace/components/NameField.tsx:91 +msgid "Name" +msgstr "名称" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx:106 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:209 +msgid "Name of your API key" +msgstr "APIキーの名前" + +#: src/pages/settings/SettingsWorkspace.tsx:44 +msgid "Name of your workspace" +msgstr "ワークスペース名" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts:76 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:180 +msgid "Navigate to next record" +msgstr "次のレコードに移動する" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:95 +msgid "Navigate to next version" +msgstr "次のバージョンに移動する" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:182 +msgid "Navigate to next workflow" +msgstr "次のワークフローに移動する" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts:65 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:169 +msgid "Navigate to previous record" +msgstr "前のレコードに移動する" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:85 +msgid "Navigate to previous version" +msgstr "以前のバージョンに移動する" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:172 +msgid "Navigate to previous workflow" +msgstr "前のワークフローに移動する" + +#: src/pages/settings/data-model/SettingsNewObject.tsx:76 +msgid "New" +msgstr "新しい" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx:92 +msgid "New Key" +msgstr "新しいキー" + +#: src/pages/settings/data-model/SettingsNewObject.tsx:66 +msgid "New Object" +msgstr "新しいオブジェクト" + +#: src/pages/auth/PasswordReset.tsx:233 +msgid "New Password" +msgstr "新しいパスワード" + +#: src/pages/settings/roles/SettingsRoles.tsx:52 +msgid "New Role" +msgstr "新しい役割" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew.tsx:81 +msgid "New Webhook" +msgstr "新しいウェブフック" + +#: src/modules/settings/accounts/components/SettingsNewAccountSection.tsx:10 +msgid "New account" +msgstr "新規アカウント" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx:82 +msgid "New key" +msgstr "新しいキー" + +#: src/modules/ui/layout/page/components/PageAddButton.tsx:27 +#: src/modules/ui/layout/page/components/PageAddButton.tsx:29 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:56 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:45 +msgid "New record" +msgstr "新記録" + +#: src/modules/settings/accounts/components/SettingsAccountsListEmptyStateCard.tsx:41 +msgid "No connected account" +msgstr "接続アカウントなし" + +#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts:13 +msgid "No workflow runs yet" +msgstr "ワークフローはまだ実行されていない" + +#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts:9 +msgid "No workflow versions yet" +msgstr "ワークフローのバージョンはまだない" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationShortLabel.ts:25 +msgid "Not empty" +msgstr "空ではない" + +#: src/modules/command-menu/components/CommandMenu.tsx:73 +msgid "Object" +msgstr "対象" + +#: src/pages/settings/data-model/SettingsObjects.tsx:155 +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:179 +#: src/pages/settings/data-model/SettingsNewObject.tsx:73 +#: src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx:205 +msgid "Objects" +msgstr "対象物" + +#: src/pages/not-found/NotFound.tsx:47 +msgid "Off the beaten path" +msgstr "オフ・ザ・ビート・パス" + +#: src/modules/object-metadata/components/NavigationDrawerOpenedSection.tsx:53 +msgid "Opened" +msgstr "オープン" + +#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdown.tsx:40 +msgid "Options" +msgstr "オプション" + +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:207 +msgid "Other" +msgstr "その他" + +#: src/pages/not-found/NotFound.tsx:41 +msgid "Page Not Found" +msgstr "ページが見つかりません" + +#: src/modules/settings/security/components/SettingsSecurityOptionsList.tsx:156 +msgid "Password" +msgstr "パスワード" + +#: src/modules/settings/profile/components/ChangePassword.tsx:34 +msgid "Password reset link has been sent to the email" +msgstr "パスワードリセットリンクが電子メールに送信されました。" + +#: src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterDropdownContent.tsx:66 +#: src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderAggregateDropdownMenuContent.tsx:45 +msgid "Percent" +msgstr "パーセント" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:27 +msgid "Percent empty" +msgstr "空席率" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:29 +msgid "Percent not empty" +msgstr "空でない割合" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:251 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:153 +msgid "Permanently destroy record" +msgstr "記録の永久破棄" + +#: src/pages/settings/SettingsWorkspace.tsx:40 +#: src/pages/settings/SettingsProfile.tsx:30 +msgid "Picture" +msgstr "写真" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew.tsx:102 +msgid "Please enter a valid URL" +msgstr "有効なURLを入力してください" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:256 +msgid "Please type \"{confirmationValue}\" to confirm you want to delete this API Key. Be aware that any script using this key will stop working." +msgstr "{confirmationValue}]」と入力して、このAPIキーを削除することを確認してください。このキーを使用しているスクリプトは動作しなくなりますのでご注意ください。" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:358 +msgid "Please type {confirmationText} to confirm you want to delete this webhook." +msgstr "{confirmationText}]と入力して、このウェブフックを削除することを確認してください。" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +msgid "Portuguese — Brazil" +msgstr "ポルトガル語 - ブラジル" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +msgid "Portuguese — Portugal" +msgstr "ポルトガル語 - ポルトガル" + +#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectSettingsFormCard.tsx:52 +#: src/modules/settings/data-model/components/SettingsDataModelPreviewFormCard.tsx:30 +msgid "Preview" +msgstr "プレビュー" + +#: src/pages/settings/SettingsProfile.tsx:19 +#: src/pages/settings/SettingsProfile.tsx:25 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:108 +msgid "Profile" +msgstr "プロフィール" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 +msgid "Pseudo-English" +msgstr "擬似英語" + +#: src/modules/settings/developers/components/SettingsReadDocumentationButton.tsx:9 +msgid "Read documentation" +msgstr "ドキュメントを読む" + +#: src/modules/settings/profile/components/ChangePassword.tsx:53 +msgid "Receive an email containing password update link" +msgstr "パスワード更新リンクを含むメールを受け取る" + +#: src/modules/command-menu/components/CommandMenu.tsx:67 +msgid "Record Selection" +msgstr "レコード選択" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:193 +msgid "Regenerate Key" +msgstr "再生キー" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:189 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:271 +msgid "Regenerate an API key" +msgstr "APIキーを再生成する" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:280 +msgid "Regenerate key" +msgstr "再生キー" + +#: src/pages/settings/Releases.tsx:111 +#: src/pages/settings/Releases.tsx:117 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:223 +msgid "Releases" +msgstr "リリース" + +#: src/modules/ui/input/components/ImageInput.tsx:173 +msgid "Remove" +msgstr "削除" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:120 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:121 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts:50 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowRunsActionsConfig.ts:51 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:207 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:208 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:83 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV2.ts:84 +#: src/modules/action-menu/actions/record-actions/constants/DefaultActionsConfigV1.ts:47 +msgid "Remove from favorites" +msgstr "お気に入りから削除" + +#: src/pages/auth/PasswordReset.tsx:177 +msgid "Reset Password" +msgstr "パスワードのリセット" + +#: src/modules/command-menu/components/ResetContextToSelectionCommandButton.tsx:46 +msgid "Reset to" +msgstr "にリセットする。" + +#: src/modules/command-menu/hooks/useSearchRecords.tsx:221 +msgid "Results" +msgstr "結果" + +#: src/pages/settings/roles/SettingsRoles.tsx:48 +#: src/pages/settings/roles/SettingsRoles.tsx:62 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:161 +msgid "Roles" +msgstr "役割" + +#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateSubTitle.ts:13 +msgid "Run a workflow and return here to view its executions" +msgstr "ワークフローを実行し、その実行内容を見るためにここに戻る" + +#: src/pages/settings/security/SettingsSecurity.tsx:47 +msgid "SSO" +msgstr "SSO" + +#: src/modules/sign-in-background-mock/components/SignInAppNavigationDrawerMock.tsx:44 +#: src/modules/navigation/components/MainNavigationDrawerItems.tsx:51 +#: src/modules/action-menu/actions/record-agnostic-actions/constants/RecordAgnosticActionsConfig.ts:24 +msgid "Search" +msgstr "検索" + +#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx:182 +msgid "Search a field..." +msgstr "フィールドを検索..." + +#: src/pages/settings/data-model/SettingsObjectIndexTable.tsx:117 +msgid "Search an index..." +msgstr "インデックスを検索..." + +#: src/modules/object-record/object-sort-dropdown/components/ObjectSortDropdownButton.tsx:219 +#: src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterSelect.tsx:182 +msgid "Search fields" +msgstr "検索フィールド" + +#: src/pages/settings/data-model/SettingsObjects.tsx:166 +msgid "Search for an object..." +msgstr "オブジェクトを検索..." + +#: src/modules/action-menu/actions/record-agnostic-actions/constants/RecordAgnosticActionsConfig.ts:23 +msgid "Search records" +msgstr "レコード検索" + +#: src/pages/settings/security/SettingsSecurity.tsx:33 +#: src/pages/settings/security/SettingsSecurity.tsx:40 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:178 +msgid "Security" +msgstr "セキュリティ" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:110 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:111 +msgid "See active version" +msgstr "アクティブ版を見る" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:55 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:56 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:125 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:126 +msgid "See runs" +msgstr "ランを見る" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:70 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:141 +msgid "See versions" +msgstr "バージョンを見る" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:69 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:140 +msgid "See versions history" +msgstr "バージョン履歴を見る" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:266 +msgid "Select the events you wish to send to this endpoint" +msgstr "このエンドポイントに送信したいイベントを選択する。" + +#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:52 +msgid "Select your preferred language" +msgstr "ご希望の言語をお選びください。" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:245 +msgid "Send an invite email to your team" +msgstr "チームに招待メールを送る" + +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:210 +msgid "Server Admin Panel" +msgstr "サーバー管理パネル" + +#: src/modules/settings/accounts/components/SettingsAccountsSettingsSection.tsx:46 +msgid "Set email visibility, manage your blocklist and more." +msgstr "メールの可視性の設定、ブロックリストの管理など。" + +#: src/pages/settings/workspace/SettingsHostname.tsx:121 +msgid "Set the name of your domain" +msgstr "ドメイン名を設定する" + +#: src/pages/settings/workspace/SettingsSubdomain.tsx:37 +msgid "Set the name of your subdomain" +msgstr "サブドメイン名を設定する" + +#: src/pages/settings/data-model/SettingsObjectDetailPage.tsx:101 +#: src/modules/sign-in-background-mock/components/SignInAppNavigationDrawerMock.tsx:50 +#: src/modules/settings/accounts/components/SettingsAccountsSettingsSection.tsx:33 +#: src/modules/navigation/components/MainNavigationDrawerItems.tsx:57 +msgid "Settings" +msgstr "設定" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:158 +msgid "Share this link to invite users to join your workspace" +msgstr "このリンクを共有し、ユーザーをワークスペースに招待する。" + +#: src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldIconLabelForm.tsx:212 +msgid "Should changing a field's label also change the API name?" +msgstr "フィールドのラベルを変更すると、API名も変更されますか?" + +#: src/pages/onboarding/InviteTeam.tsx:236 +msgid "Skip" +msgstr "スキップ" + +#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx:109 +#: src/modules/object-record/object-sort-dropdown/components/ObjectSortDropdownButton.tsx:188 +msgid "Sort" +msgstr "ソート" + +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:79 +msgid "Spanish" +msgstr "スペイン語" + +#: src/pages/settings/workspace/SettingsSubdomain.tsx:36 +msgid "Subdomain" +msgstr "サブドメイン" + +#: src/pages/settings/workspace/SettingsDomain.tsx:89 +msgid "Subdomain already taken" +msgstr "サブドメインはすでに取得済み" + +#: src/pages/settings/workspace/SettingsDomain.tsx:35 +msgid "Subdomain can not be longer than 30 characters" +msgstr "サブドメインは30文字以内" + +#: src/pages/settings/workspace/SettingsDomain.tsx:34 +msgid "Subdomain can not be shorter than 3 characters" +msgstr "サブドメインは3文字より短くできません。" + +#: src/pages/settings/SettingsBilling.tsx:120 +msgid "Subscription has been switched {to}" +msgstr "サブスクリプションが切り替わりました{to}。" + +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationShortLabel.ts:17 +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationLabel.ts:17 +msgid "Sum" +msgstr "サム" + +#: src/pages/settings/SettingsWorkspace.tsx:63 +msgid "Support" +msgstr "サポート" + +#: src/pages/settings/SettingsBilling.tsx:187 +msgid "Switch billing {to}" +msgstr "スイッチ課金【{to}" + +#: src/pages/settings/SettingsBilling.tsx:159 +msgid "Switch {from}" +msgstr "スイッチ[{from}]" + +#: src/pages/settings/SettingsBilling.tsx:163 +msgid "Switch {to}" +msgstr "スイッチ[{to}]" + +#: src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldIconLabelForm.tsx:211 +msgid "Synchronize Field Label and API Name" +msgstr "フィールドラベルとAPI名の同期" + +#: src/pages/settings/profile/appearance/components/DateTimeSettingsTimeFormatSelect.tsx:55 +msgid "System Settings - {systemTimeFormatLabel}" +msgstr "システム設定 - [{systemTimeFormatLabel}]" + +#: src/pages/settings/profile/appearance/components/DateTimeSettingsDateFormatSelect.tsx:42 +msgid "System settings - {systemDateFormatLabel}" +msgstr "システム設定 - [{systemDateFormatLabel}]" + +#: src/modules/workflow/components/RecordShowPageWorkflowHeader.tsx:50 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:156 +msgid "Test" +msgstr "テスト" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowActionsConfig.ts:155 +msgid "Test Workflow" +msgstr "テスト・ワークフロー" + +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:240 +#: src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx:267 +msgid "The description of this field" +msgstr "このフィールドの説明" + +#: src/pages/settings/SettingsProfile.tsx:43 +msgid "The email associated to your account" +msgstr "アカウントに関連付けられたEメール" + +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:209 +#: src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx:240 +msgid "The name and icon of this field" +msgstr "このフィールドの名前とアイコン" + +#: src/pages/not-found/NotFound.tsx:50 +msgid "The page you're seeking is either gone or never was. Let's get you back on track" +msgstr "お探しのページはもうないか、存在しないかのどちらかです。元のページに戻す" + +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:229 +#: src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx:252 +msgid "The values of this field" +msgstr "このフィールドの値" + +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:224 +msgid "The values of this field must be unique" +msgstr "このフィールドの値は一意でなければならない。" + +#: src/modules/settings/profile/components/ChangePassword.tsx:38 +msgid "There was an issue" +msgstr "問題があった" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:323 +msgid "This action cannot be undone. This will permanently delete this user and remove them from all their assignments." +msgstr "この操作は取り消すことができません。これにより、このユーザーは永久に削除され、すべての割り当てから削除されます。" + +#: src/modules/settings/profile/components/DeleteWorkspace.tsx:48 +msgid "This action cannot be undone. This will permanently delete your entire workspace. <0/> Please type in your email to confirm." +msgstr "この操作は元に戻せません。ワークスペース全体が永久に削除されます。 <0/> 確認のため、Eメールを入力してください。" + +#: src/pages/settings/profile/appearance/components/DateTimeSettingsTimeFormatSelect.tsx:49 +msgid "Time format" +msgstr "時間形式" + +#: src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditableEffect.tsx:48 +msgid "Trigger Type" +msgstr "トリガータイプ" + +#: src/modules/workflow/components/RecordShowPageWorkflowHeader.tsx:60 +msgid "Trigger type should be Manual - when no record(s) are selected" +msgstr "トリガータイプは、レコードが選択されていない場合は「手動」とする。" + +#: src/pages/settings/data-model/SettingsObjectIndexTable.tsx:56 +#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts:16 +msgid "Type" +msgstr "タイプ" + +#: src/modules/command-menu/components/CommandMenuTopBar.tsx:116 +msgid "Type anything" +msgstr "タイプ" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew.tsx:100 +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:242 +msgid "URL" +msgstr "URL" + +#: src/pages/settings/data-model/SettingsObjectIndexTable.tsx:49 +#: src/modules/object-record/record-board/record-board-column/utils/getAggregateOperationShortLabel.ts:27 +msgid "Unique" +msgstr "ユニーク" + +#: src/pages/onboarding/ChooseYourPlan.tsx:88 +msgid "Unlimited contacts" +msgstr "連絡先は無制限" + +#: src/modules/ui/input/components/ImageInput.tsx:165 +msgid "Upload" +msgstr "アップロード" + +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:40 +#: src/modules/action-menu/actions/record-actions/constants/WorkflowVersionsActionsConfig.ts:41 +msgid "Use as draft" +msgstr "ドラフトとして使用" + +#: src/pages/settings/workspace/SettingsDomain.tsx:37 +msgid "Use letter, number and dash only. Start and finish with a letter or a number" +msgstr "アルファベット、数字、ダッシュのみを使用。文字または数字で始め、文字または数字で終わる" + +#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateSubTitle.ts:16 +msgid "Use our API or add your first {objectLabel} manually" +msgstr "APIを使用するか、最初の{objectLabel}を手動で追加します。" + +#: src/pages/settings/SettingsProfile.tsx:22 +#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx:29 +#: src/pages/settings/accounts/SettingsAccountsCalendars.tsx:17 +#: src/pages/settings/accounts/SettingsAccounts.tsx:43 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:106 +msgid "User" +msgstr "ユーザー" + +#: src/modules/settings/security/components/SettingsSecurityOptionsList.tsx:51 +#: src/modules/settings/security/components/SettingsSecurityOptionsList.tsx:106 +msgid "User is not logged in" +msgstr "ユーザーがログインしていない" + +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:223 +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:228 +#: src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx:251 +msgid "Values" +msgstr "価値観" + +#: src/pages/settings/SettingsBilling.tsx:150 +msgid "View billing details" +msgstr "請求の詳細を見る" + +#: src/modules/settings/data-model/objects/components/SettingsObjectCoverImage.tsx:35 +msgid "Visualize" +msgstr "ビジュアライズ" + +#: src/modules/ui/input/components/ImageInput.tsx:178 +msgid "We support your square PNGs, JPEGs and GIFs under 10MB" +msgstr "10MB以下の正方形のPNG、JPEG、GIFをサポートします。" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew.tsx:97 +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:239 +msgid "We will send POST requests to this endpoint for every new event" +msgstr "新しいイベントが発生するたびに、このエンドポイントに POST リクエストを送信します。" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:223 +msgid "Webhook" +msgstr "ウェブフック" + +#: src/pages/settings/developers/SettingsDevelopers.tsx:65 +msgid "Webhooks" +msgstr "ウェブフック" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx:127 +msgid "When the API key will expire." +msgstr "APIキーの有効期限。" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:220 +msgid "When the key will be disabled" +msgstr "キーが無効になる場合" + +#: src/modules/workflow/components/RecordShowPageWorkflowHeader.tsx:58 +msgid "Workflow cannot be tested" +msgstr "ワークフローをテストできない" + +#: src/pages/settings/SettingsWorkspaceMembers.tsx:146 +#: src/pages/settings/SettingsWorkspace.tsx:32 +#: src/pages/settings/SettingsBilling.tsx:135 +#: src/pages/settings/Releases.tsx:114 +#: src/pages/settings/workspace/SettingsDomain.tsx:112 +#: src/pages/settings/security/SettingsSecurity.tsx:37 +#: src/pages/settings/roles/SettingsRoles.tsx:59 +#: src/pages/settings/integrations/SettingsIntegrations.tsx:18 +#: src/pages/settings/developers/SettingsDevelopers.tsx:39 +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew.tsx:74 +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:216 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx:85 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:165 +#: src/pages/settings/data-model/SettingsObjects.tsx:152 +#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx:175 +#: src/pages/settings/data-model/SettingsNewObject.tsx:69 +#: src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure.tsx:201 +#: src/modules/sign-in-background-mock/components/SignInAppNavigationDrawerMock.tsx:58 +#: src/modules/settings/components/SettingsNavigationDrawerItems.tsx:141 +#: src/modules/favorites/components/WorkspaceFavorites.tsx:19 +msgid "Workspace" +msgstr "ワークスペース" + +#: src/modules/settings/profile/components/DeleteWorkspace.tsx:46 +msgid "Workspace Deletion" +msgstr "ワークスペースの削除" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:254 +msgid "Write a description" +msgstr "説明を書く" + +#: src/pages/settings/SettingsBilling.tsx:48 +msgid "You will be charged immediately for the full year." +msgstr "その場合、すぐに1年分の料金が請求されます。" + +#: src/pages/settings/SettingsBilling.tsx:55 +msgid "Your credit balance will be used to pay the monthly bills." +msgstr "クレジット残高は毎月の請求書の支払いに充当される。" + +#: src/pages/settings/SettingsProfile.tsx:36 +msgid "Your name as it will be displayed" +msgstr "表示されるあなたの名前" + +#: src/pages/settings/SettingsBilling.tsx:172 +msgid "Your workspace will be disabled" +msgstr "ワークスペースが無効になる" + +#: src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldIconLabelForm.tsx:167 +msgid "employees" +msgstr "従業員" + +#: src/pages/settings/SettingsBilling.tsx:47 +msgid "from monthly to yearly" +msgstr "毎月から毎年へ" + +#: src/pages/settings/SettingsBilling.tsx:54 +msgid "from yearly to monthly" +msgstr "年から月へ" + +#: src/pages/onboarding/InviteTeam.tsx:213 +msgid "or" +msgstr "または" + +#: src/pages/settings/SettingsBilling.tsx:53 +msgid "to monthly" +msgstr "毎月" + +#: src/pages/settings/SettingsBilling.tsx:46 +msgid "to yearly" +msgstr "毎年" + +#: src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx:209 +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:156 +msgid "yes" +msgstr "はい" + +#: src/modules/object-record/record-board/record-board-column/utils/computeAggregateValueAndLabel.ts:129 +msgid "{aggregateLabel} of {fieldLabel}" +msgstr "{fieldLabel}の{aggregateLabel}。" + +#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx:172 +msgid "{apiKeyName} API Key" +msgstr "{apiKeyName} APIキー" + +#: src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowActions.tsx:41 +#: src/modules/action-menu/actions/record-actions/workflow-run-record-actions/hooks/useWorkflowRunRecordActions.tsx:65 +msgid "{name}" +msgstr "[{name}]" diff --git a/packages/twenty-front/src/locales/ko.po b/packages/twenty-front/src/locales/ko.po index 44ed1657e41b..d4f51698c548 100644 --- a/packages/twenty-front/src/locales/ko.po +++ b/packages/twenty-front/src/locales/ko.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 15:08+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -256,11 +256,11 @@ msgstr "비밀번호 변경" msgid "Change {to}" msgstr "변경 {to}" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 msgid "Chinese — Simplified" msgstr "중국어 - 간체" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 msgid "Chinese — Traditional" msgstr "중국어 - 번체" @@ -846,6 +846,10 @@ msgstr "팀 초대하기" msgid "Italian" msgstr "이탈리아어" +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "일본어" + #: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 msgid "Korean" msgstr "한국어" @@ -1106,11 +1110,11 @@ msgstr "\"{confirmationValue}\"을 입력하여 이 API 키를 삭제할 것인 msgid "Please type {confirmationText} to confirm you want to delete this webhook." msgstr "{confirmationText}]을 입력하여 이 웹훅을 삭제할 것인지 확인하세요." -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 msgid "Portuguese — Brazil" msgstr "포르투갈어 - 브라질" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 msgid "Portuguese — Portugal" msgstr "포르투갈어 - 포르투갈" @@ -1125,7 +1129,7 @@ msgstr "미리 보기" msgid "Profile" msgstr "프로필" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:113 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 msgid "Pseudo-English" msgstr "의사 영어" diff --git a/packages/twenty-front/src/locales/pseudo-en.po b/packages/twenty-front/src/locales/pseudo-en.po index 35f0a0834d66..7e94f639808c 100644 --- a/packages/twenty-front/src/locales/pseudo-en.po +++ b/packages/twenty-front/src/locales/pseudo-en.po @@ -275,11 +275,11 @@ msgstr "" msgid "Change Password" msgstr "" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 msgid "Chinese — Simplified" msgstr "" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 msgid "Chinese — Traditional" msgstr "" @@ -877,6 +877,10 @@ msgstr "" msgid "Italian" msgstr "" +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "" + #: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 msgid "Korean" msgstr "" @@ -1145,11 +1149,11 @@ msgstr "" #~ msgid "Portuguese" #~ msgstr "" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 msgid "Portuguese — Brazil" msgstr "" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 msgid "Portuguese — Portugal" msgstr "" @@ -1172,7 +1176,7 @@ msgstr "" msgid "Profile" msgstr "" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:113 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 msgid "Pseudo-English" msgstr "" diff --git a/packages/twenty-front/src/locales/pt-BR.po b/packages/twenty-front/src/locales/pt-BR.po index 20bc24116312..fc3e5bdd7c05 100644 --- a/packages/twenty-front/src/locales/pt-BR.po +++ b/packages/twenty-front/src/locales/pt-BR.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 15:08+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -256,11 +256,11 @@ msgstr "Alterar senha" msgid "Change {to}" msgstr "Alterar {to}" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 msgid "Chinese — Simplified" msgstr "Chinês - Simplificado" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 msgid "Chinese — Traditional" msgstr "Chinês - Tradicional" @@ -846,6 +846,10 @@ msgstr "Convide sua equipe" msgid "Italian" msgstr "Italiano" +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "Japonês" + #: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 msgid "Korean" msgstr "Coreano" @@ -1106,11 +1110,11 @@ msgstr "Digite \"{confirmationValue}\" para confirmar que deseja excluir essa ch msgid "Please type {confirmationText} to confirm you want to delete this webhook." msgstr "Digite {confirmationText} para confirmar que deseja excluir esse webhook." -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 msgid "Portuguese — Brazil" msgstr "Português - Brasil" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 msgid "Portuguese — Portugal" msgstr "Português - Portugal" @@ -1125,7 +1129,7 @@ msgstr "Prévia" msgid "Profile" msgstr "Perfil" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:113 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 msgid "Pseudo-English" msgstr "Pseudo-inglês" diff --git a/packages/twenty-front/src/locales/pt-PT.po b/packages/twenty-front/src/locales/pt-PT.po index 39f2fd89698e..57ccaaa02377 100644 --- a/packages/twenty-front/src/locales/pt-PT.po +++ b/packages/twenty-front/src/locales/pt-PT.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 15:08+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -256,11 +256,11 @@ msgstr "Alterar a palavra-passe" msgid "Change {to}" msgstr "Alterar {to}" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 msgid "Chinese — Simplified" msgstr "Chinês - Simplificado" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 msgid "Chinese — Traditional" msgstr "Chinês - Tradicional" @@ -846,6 +846,10 @@ msgstr "Convide a sua equipa" msgid "Italian" msgstr "Italiano" +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "Japonês" + #: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 msgid "Korean" msgstr "Coreano" @@ -1106,11 +1110,11 @@ msgstr "Digite \"{confirmationValue}\" para confirmar que deseja excluir essa ch msgid "Please type {confirmationText} to confirm you want to delete this webhook." msgstr "Introduza {confirmationText} para confirmar que pretende eliminar este webhook." -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 msgid "Portuguese — Brazil" msgstr "Português - Brasil" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 msgid "Portuguese — Portugal" msgstr "Português - Portugal" @@ -1125,7 +1129,7 @@ msgstr "Pré-visualização" msgid "Profile" msgstr "Perfil" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:113 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 msgid "Pseudo-English" msgstr "Pseudo-inglês" diff --git a/packages/twenty-front/src/locales/zh-Hans.po b/packages/twenty-front/src/locales/zh-Hans.po index becfaddc4d93..4bcd70f0f40b 100644 --- a/packages/twenty-front/src/locales/zh-Hans.po +++ b/packages/twenty-front/src/locales/zh-Hans.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 15:08+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -256,11 +256,11 @@ msgstr "更改密码" msgid "Change {to}" msgstr "更改 {to}" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 msgid "Chinese — Simplified" msgstr "简体中文" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 msgid "Chinese — Traditional" msgstr "繁体中文" @@ -846,6 +846,10 @@ msgstr "邀请您的团队" msgid "Italian" msgstr "意大利语" +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "日语" + #: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 msgid "Korean" msgstr "韩语" @@ -1106,11 +1110,11 @@ msgstr "请键入\"{confirmationValue}\"确认要删除此 API 密钥。请注 msgid "Please type {confirmationText} to confirm you want to delete this webhook." msgstr "请键入 {confirmationText} 确认要删除此网络钩子。" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 msgid "Portuguese — Brazil" msgstr "葡萄牙语 - 巴西" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 msgid "Portuguese — Portugal" msgstr "葡萄牙语 - 葡萄牙" @@ -1125,7 +1129,7 @@ msgstr "预览" msgid "Profile" msgstr "简介" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:113 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 msgid "Pseudo-English" msgstr "伪英语" diff --git a/packages/twenty-front/src/locales/zh-Hant.po b/packages/twenty-front/src/locales/zh-Hant.po index a724cbe7c1fb..2177e21a6a2d 100644 --- a/packages/twenty-front/src/locales/zh-Hant.po +++ b/packages/twenty-front/src/locales/zh-Hant.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 15:08+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -256,11 +256,11 @@ msgstr "更改密码" msgid "Change {to}" msgstr "更改 {to}" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 msgid "Chinese — Simplified" msgstr "简体中文" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:107 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:111 msgid "Chinese — Traditional" msgstr "繁体中文" @@ -846,6 +846,10 @@ msgstr "邀请您的团队" msgid "Italian" msgstr "意大利语" +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +msgid "Japanese" +msgstr "日语" + #: src/pages/settings/profile/appearance/components/LocalePicker.tsx:91 msgid "Korean" msgstr "韩语" @@ -1106,11 +1110,11 @@ msgstr "请键入\"{confirmationValue}\"确认要删除此 API 密钥。请注 msgid "Please type {confirmationText} to confirm you want to delete this webhook." msgstr "请键入 {confirmationText} 确认要删除此网络钩子。" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:103 msgid "Portuguese — Brazil" msgstr "葡萄牙语 - 巴西" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:95 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:99 msgid "Portuguese — Portugal" msgstr "葡萄牙语 - 葡萄牙" @@ -1125,7 +1129,7 @@ msgstr "预览" msgid "Profile" msgstr "简介" -#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:113 +#: src/pages/settings/profile/appearance/components/LocalePicker.tsx:117 msgid "Pseudo-English" msgstr "伪英语" diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/components/RecordActionMenuEntriesSetter.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/components/RecordActionMenuEntriesSetter.tsx index 15f8d08502ba..4bbd1aa15103 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/components/RecordActionMenuEntriesSetter.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/components/RecordActionMenuEntriesSetter.tsx @@ -9,7 +9,7 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { FeatureFlagKey } from '~/generated/graphql'; export const RecordActionMenuEntriesSetter = () => { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/multiple-records/hooks/useDeleteMultipleRecordsAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/multiple-records/hooks/useDeleteMultipleRecordsAction.tsx index 6b052d60c387..df752634b61a 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/multiple-records/hooks/useDeleteMultipleRecordsAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/multiple-records/hooks/useDeleteMultipleRecordsAction.tsx @@ -14,7 +14,7 @@ import { useRecordTable } from '@/object-record/record-table/hooks/useRecordTabl import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useCallback, useState } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useDeleteMultipleRecordsAction: ActionHookWithObjectMetadataItem = ({ objectMetadataItem }) => { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useAddToFavoritesSingleRecordAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useAddToFavoritesSingleRecordAction.ts index eace0a761de8..0043969002fc 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useAddToFavoritesSingleRecordAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useAddToFavoritesSingleRecordAction.ts @@ -5,7 +5,7 @@ import { useFavorites } from '@/favorites/hooks/useFavorites'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { isNull } from '@sniptt/guards'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useAddToFavoritesSingleRecordAction: ActionHookWithObjectMetadataItem = ({ objectMetadataItem }) => { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useDeleteSingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useDeleteSingleRecordAction.tsx index 0fbc2ad3679e..0d96a2759748 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useDeleteSingleRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useDeleteSingleRecordAction.tsx @@ -11,7 +11,7 @@ import { useRightDrawer } from '@/ui/layout/right-drawer/hooks/useRightDrawer'; import { isNull } from '@sniptt/guards'; import { useCallback, useContext, useState } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useDeleteSingleRecordAction: ActionHookWithObjectMetadataItem = ({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useDestroySingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useDestroySingleRecordAction.tsx index cea62d143164..5278bffea64b 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useDestroySingleRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useDestroySingleRecordAction.tsx @@ -9,7 +9,7 @@ import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModa import { useRightDrawer } from '@/ui/layout/right-drawer/hooks/useRightDrawer'; import { useCallback, useContext, useState } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useNavigateApp } from '~/hooks/useNavigateApp'; export const useDestroySingleRecordAction: ActionHookWithObjectMetadataItem = ({ diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useExportNoteAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useExportNoteAction.ts index 80f3b196066a..649350ee4dea 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useExportNoteAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useExportNoteAction.ts @@ -4,7 +4,7 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { BlockNoteEditor } from '@blocknote/core'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useExportNoteAction: ActionHookWithObjectMetadataItem = ({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useRemoveFromFavoritesSingleRecordAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useRemoveFromFavoritesSingleRecordAction.ts index 00d924365a44..202a5620ecb9 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useRemoveFromFavoritesSingleRecordAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/hooks/useRemoveFromFavoritesSingleRecordAction.ts @@ -2,7 +2,7 @@ import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions import { ActionHookWithObjectMetadataItem } from '@/action-menu/actions/types/ActionHook'; import { useDeleteFavorite } from '@/favorites/hooks/useDeleteFavorite'; import { useFavorites } from '@/favorites/hooks/useFavorites'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useRemoveFromFavoritesSingleRecordAction: ActionHookWithObjectMetadataItem = ({ objectMetadataItem }) => { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useActivateWorkflowSingleRecordAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useActivateWorkflowSingleRecordAction.ts index f5a4bc3163b0..e6d6cd561ff2 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useActivateWorkflowSingleRecordAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useActivateWorkflowSingleRecordAction.ts @@ -2,7 +2,7 @@ import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions import { ActionHookWithoutObjectMetadataItem } from '@/action-menu/actions/types/ActionHook'; import { useActivateWorkflowVersion } from '@/workflow/hooks/useActivateWorkflowVersion'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useActivateWorkflowSingleRecordAction: ActionHookWithoutObjectMetadataItem = () => { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useDeactivateWorkflowSingleRecordAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useDeactivateWorkflowSingleRecordAction.ts index 873993ee4766..b6709245d352 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useDeactivateWorkflowSingleRecordAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useDeactivateWorkflowSingleRecordAction.ts @@ -2,7 +2,7 @@ import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions import { ActionHookWithoutObjectMetadataItem } from '@/action-menu/actions/types/ActionHook'; import { useDeactivateWorkflowVersion } from '@/workflow/hooks/useDeactivateWorkflowVersion'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useDeactivateWorkflowSingleRecordAction: ActionHookWithoutObjectMetadataItem = () => { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useDiscardDraftWorkflowSingleRecordAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useDiscardDraftWorkflowSingleRecordAction.ts index d5db87b19cdf..2f7c9e3bb710 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useDiscardDraftWorkflowSingleRecordAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useDiscardDraftWorkflowSingleRecordAction.ts @@ -2,7 +2,7 @@ import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions import { ActionHookWithoutObjectMetadataItem } from '@/action-menu/actions/types/ActionHook'; import { useDeleteOneWorkflowVersion } from '@/workflow/hooks/useDeleteOneWorkflowVersion'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useDiscardDraftWorkflowSingleRecordAction: ActionHookWithoutObjectMetadataItem = () => { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeActiveVersionWorkflowSingleRecordAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeActiveVersionWorkflowSingleRecordAction.ts index e5d653c8887e..6198b13a233f 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeActiveVersionWorkflowSingleRecordAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeActiveVersionWorkflowSingleRecordAction.ts @@ -4,7 +4,7 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi import { AppPath } from '@/types/AppPath'; import { useActiveWorkflowVersion } from '@/workflow/hooks/useActiveWorkflowVersion'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useNavigateApp } from '~/hooks/useNavigateApp'; export const useSeeActiveVersionWorkflowSingleRecordAction: ActionHookWithoutObjectMetadataItem = diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeRunsWorkflowSingleRecordAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeRunsWorkflowSingleRecordAction.ts index b5933d9a9f1a..68669ffd2d1b 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeRunsWorkflowSingleRecordAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeRunsWorkflowSingleRecordAction.ts @@ -4,7 +4,7 @@ import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlur import { AppPath } from '@/types/AppPath'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useNavigateApp } from '~/hooks/useNavigateApp'; export const useSeeRunsWorkflowSingleRecordAction: ActionHookWithoutObjectMetadataItem = diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeVersionsWorkflowSingleRecordAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeVersionsWorkflowSingleRecordAction.ts index bb2f70f8b0de..6dd43d603a97 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeVersionsWorkflowSingleRecordAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useSeeVersionsWorkflowSingleRecordAction.ts @@ -4,7 +4,7 @@ import { CoreObjectNamePlural } from '@/object-metadata/types/CoreObjectNamePlur import { AppPath } from '@/types/AppPath'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useNavigateApp } from '~/hooks/useNavigateApp'; export const useSeeVersionsWorkflowSingleRecordAction: ActionHookWithoutObjectMetadataItem = diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useTestWorkflowSingleRecordAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useTestWorkflowSingleRecordAction.ts index 2736ab0f162c..662edbf06345 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useTestWorkflowSingleRecordAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-actions/hooks/useTestWorkflowSingleRecordAction.ts @@ -2,7 +2,7 @@ import { useSelectedRecordIdOrThrow } from '@/action-menu/actions/record-actions import { ActionHookWithoutObjectMetadataItem } from '@/action-menu/actions/types/ActionHook'; import { useRunWorkflowVersion } from '@/workflow/hooks/useRunWorkflowVersion'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useTestWorkflowSingleRecordAction: ActionHookWithoutObjectMetadataItem = () => { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useSeeRunsWorkflowVersionSingleRecordAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useSeeRunsWorkflowVersionSingleRecordAction.ts index dc3c0a33bbd1..e014985f62c5 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useSeeRunsWorkflowVersionSingleRecordAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useSeeRunsWorkflowVersionSingleRecordAction.ts @@ -6,7 +6,7 @@ import { AppPath } from '@/types/AppPath'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useNavigateApp } from '~/hooks/useNavigateApp'; export const useSeeRunsWorkflowVersionSingleRecordAction: ActionHookWithoutObjectMetadataItem = diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useSeeVersionsWorkflowVersionSingleRecordAction.ts b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useSeeVersionsWorkflowVersionSingleRecordAction.ts index 01c6340bda56..4546a46aec67 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useSeeVersionsWorkflowVersionSingleRecordAction.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useSeeVersionsWorkflowVersionSingleRecordAction.ts @@ -6,7 +6,7 @@ import { AppPath } from '@/types/AppPath'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useNavigateApp } from '~/hooks/useNavigateApp'; export const useSeeVersionsWorkflowVersionSingleRecordAction: ActionHookWithoutObjectMetadataItem = diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useUseAsDraftWorkflowVersionSingleRecordAction.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useUseAsDraftWorkflowVersionSingleRecordAction.tsx index 3f94091f26a4..156f659877e0 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useUseAsDraftWorkflowVersionSingleRecordAction.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/single-record/workflow-version-actions/hooks/useUseAsDraftWorkflowVersionSingleRecordAction.tsx @@ -8,7 +8,7 @@ import { useWorkflowVersion } from '@/workflow/hooks/useWorkflowVersion'; import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithCurrentVersion'; import { openOverrideWorkflowDraftConfirmationModalState } from '@/workflow/states/openOverrideWorkflowDraftConfirmationModalState'; import { useSetRecoilState } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useNavigateApp } from '~/hooks/useNavigateApp'; export const useUseAsDraftWorkflowVersionSingleRecordAction: ActionHookWithoutObjectMetadataItem = diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-actions/workflow-run-record-actions/hooks/useWorkflowRunRecordActions.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-actions/workflow-run-record-actions/hooks/useWorkflowRunRecordActions.tsx index 8d81754837be..7740a7665e98 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-actions/workflow-run-record-actions/hooks/useWorkflowRunRecordActions.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-actions/workflow-run-record-actions/hooks/useWorkflowRunRecordActions.tsx @@ -12,8 +12,8 @@ import { useRunWorkflowVersion } from '@/workflow/hooks/useRunWorkflowVersion'; import { msg } from '@lingui/core/macro'; import { useRecoilValue } from 'recoil'; -import { capitalize } from 'twenty-shared'; -import { IconSettingsAutomation, isDefined } from 'twenty-ui'; +import { capitalize, isDefined } from 'twenty-shared'; +import { IconSettingsAutomation } from 'twenty-ui'; export const useWorkflowRunRecordActions = ({ objectMetadataItem, }: { diff --git a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowActions.tsx b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowActions.tsx index a143f9acaa6c..4e0696a0917b 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowActions.tsx +++ b/packages/twenty-front/src/modules/action-menu/actions/record-agnostic-actions/run-workflow-actions/hooks/useRunWorkflowActions.tsx @@ -7,8 +7,8 @@ import { useRunWorkflowVersion } from '@/workflow/hooks/useRunWorkflowVersion'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { msg } from '@lingui/core/macro'; -import { capitalize } from 'twenty-shared'; -import { IconSettingsAutomation, isDefined } from 'twenty-ui'; +import { capitalize, isDefined } from 'twenty-shared'; +import { IconSettingsAutomation } from 'twenty-ui'; import { FeatureFlagKey } from '~/generated/graphql'; export const useRunWorkflowActions = () => { diff --git a/packages/twenty-front/src/modules/action-menu/actions/utils/wrapActionInCallbacks.ts b/packages/twenty-front/src/modules/action-menu/actions/utils/wrapActionInCallbacks.ts index be82a371c437..fd766d8c3c64 100644 --- a/packages/twenty-front/src/modules/action-menu/actions/utils/wrapActionInCallbacks.ts +++ b/packages/twenty-front/src/modules/action-menu/actions/utils/wrapActionInCallbacks.ts @@ -1,5 +1,5 @@ import { ActionMenuEntry } from '@/action-menu/types/ActionMenuEntry'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const wrapActionInCallbacks = ({ action, diff --git a/packages/twenty-front/src/modules/action-menu/components/CmdEnterActionButton.tsx b/packages/twenty-front/src/modules/action-menu/components/CmdEnterActionButton.tsx index 48fa4680e974..bbc492cb8db0 100644 --- a/packages/twenty-front/src/modules/action-menu/components/CmdEnterActionButton.tsx +++ b/packages/twenty-front/src/modules/action-menu/components/CmdEnterActionButton.tsx @@ -9,9 +9,11 @@ import { FeatureFlagKey } from '~/generated/graphql'; export const CmdEnterActionButton = ({ title, onClick, + disabled = false, }: { title: string; onClick: () => void; + disabled?: boolean; }) => { const isCommandMenuV2Enabled = useIsFeatureEnabled( FeatureFlagKey.IsCommandMenuV2Enabled, @@ -32,6 +34,7 @@ export const CmdEnterActionButton = ({ accent="blue" size="medium" onClick={onClick} + disabled={disabled} hotkeys={[getOsControlSymbol(), '⏎']} /> ); diff --git a/packages/twenty-front/src/modules/action-menu/states/actionMenuEntriesComponentSelector.ts b/packages/twenty-front/src/modules/action-menu/states/actionMenuEntriesComponentSelector.ts index 9a87deb49435..03527586a04d 100644 --- a/packages/twenty-front/src/modules/action-menu/states/actionMenuEntriesComponentSelector.ts +++ b/packages/twenty-front/src/modules/action-menu/states/actionMenuEntriesComponentSelector.ts @@ -2,7 +2,7 @@ import { actionMenuEntriesComponentState } from '@/action-menu/states/actionMenu import { ActionMenuComponentInstanceContext } from '@/action-menu/states/contexts/ActionMenuComponentInstanceContext'; import { ActionMenuEntry } from '@/action-menu/types/ActionMenuEntry'; import { createComponentSelectorV2 } from '@/ui/utilities/state/component-state/utils/createComponentSelectorV2'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const actionMenuEntriesComponentSelector = createComponentSelectorV2< ActionMenuEntry[] diff --git a/packages/twenty-front/src/modules/activities/blocks/components/FileBlock.tsx b/packages/twenty-front/src/modules/activities/blocks/components/FileBlock.tsx index 685fdc0c8bb6..b5ad1771ea22 100644 --- a/packages/twenty-front/src/modules/activities/blocks/components/FileBlock.tsx +++ b/packages/twenty-front/src/modules/activities/blocks/components/FileBlock.tsx @@ -3,8 +3,8 @@ import styled from '@emotion/styled'; import { isNonEmptyString } from '@sniptt/guards'; import { ChangeEvent, useRef } from 'react'; +import { isDefined } from 'twenty-shared'; import { Button } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; import { AttachmentIcon } from '../../files/components/AttachmentIcon'; diff --git a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventRow.tsx b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventRow.tsx index 8fabec9d5204..11cb67c02a66 100644 --- a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventRow.tsx +++ b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventRow.tsx @@ -3,15 +3,6 @@ import styled from '@emotion/styled'; import { format } from 'date-fns'; import { useContext } from 'react'; import { useRecoilValue } from 'recoil'; -import { - Avatar, - AvatarGroup, - Card, - CardContent, - IconArrowRight, - IconLock, - isDefined, -} from 'twenty-ui'; import { CalendarCurrentEventCursor } from '@/activities/calendar/components/CalendarCurrentEventCursor'; import { CalendarContext } from '@/activities/calendar/contexts/CalendarContext'; @@ -20,6 +11,15 @@ import { getCalendarEventEndDate } from '@/activities/calendar/utils/getCalendar import { getCalendarEventStartDate } from '@/activities/calendar/utils/getCalendarEventStartDate'; import { hasCalendarEventEnded } from '@/activities/calendar/utils/hasCalendarEventEnded'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; +import { isDefined } from 'twenty-shared'; +import { + Avatar, + AvatarGroup, + Card, + CardContent, + IconArrowRight, + IconLock, +} from 'twenty-ui'; import { CalendarChannelVisibility, TimelineCalendarEvent, diff --git a/packages/twenty-front/src/modules/activities/calendar/hooks/useCalendarEvents.ts b/packages/twenty-front/src/modules/activities/calendar/hooks/useCalendarEvents.ts index 751122499b62..7ecb7c456005 100644 --- a/packages/twenty-front/src/modules/activities/calendar/hooks/useCalendarEvents.ts +++ b/packages/twenty-front/src/modules/activities/calendar/hooks/useCalendarEvents.ts @@ -3,9 +3,9 @@ import { useMemo, useState } from 'react'; import { findUpcomingCalendarEvent } from '@/activities/calendar/utils/findUpcomingCalendarEvent'; import { getCalendarEventStartDate } from '@/activities/calendar/utils/getCalendarEventStartDate'; +import { isDefined } from 'twenty-shared'; import { TimelineCalendarEvent } from '~/generated/graphql'; import { groupArrayItemsBy } from '~/utils/array/groupArrayItemsBy'; -import { isDefined } from '~/utils/isDefined'; import { sortDesc } from '~/utils/sort'; export const useCalendarEvents = (calendarEvents: TimelineCalendarEvent[]) => { diff --git a/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx b/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx index 4dab9fa2fc60..dfabf9692abd 100644 --- a/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx +++ b/packages/twenty-front/src/modules/activities/components/ActivityRichTextEditor.tsx @@ -17,7 +17,7 @@ import { RightDrawerHotkeyScope } from '@/ui/layout/right-drawer/types/RightDraw import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { isNonTextWritingKey } from '@/ui/utilities/hotkey/utils/isNonTextWritingKey'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { BLOCK_SCHEMA } from '@/activities/blocks/constants/Schema'; import { ActivityRichTextEditorChangeOnActivityIdEffect } from '@/activities/components/ActivityRichTextEditorChangeOnActivityIdEffect'; diff --git a/packages/twenty-front/src/modules/activities/emails/right-drawer/hooks/useRightDrawerEmailThread.ts b/packages/twenty-front/src/modules/activities/emails/right-drawer/hooks/useRightDrawerEmailThread.ts index 8f58f06137ac..6bfa8f123a74 100644 --- a/packages/twenty-front/src/modules/activities/emails/right-drawer/hooks/useRightDrawerEmailThread.ts +++ b/packages/twenty-front/src/modules/activities/emails/right-drawer/hooks/useRightDrawerEmailThread.ts @@ -14,7 +14,7 @@ import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useRightDrawerEmailThread = () => { const viewableRecordId = useRecoilValue(viewableRecordIdState); diff --git a/packages/twenty-front/src/modules/activities/emails/utils/getDisplayNameFromParticipant.ts b/packages/twenty-front/src/modules/activities/emails/utils/getDisplayNameFromParticipant.ts index ca1e63ee2aa2..858f1077d762 100644 --- a/packages/twenty-front/src/modules/activities/emails/utils/getDisplayNameFromParticipant.ts +++ b/packages/twenty-front/src/modules/activities/emails/utils/getDisplayNameFromParticipant.ts @@ -1,7 +1,7 @@ import { isNonEmptyString } from '@sniptt/guards'; import { EmailThreadMessageParticipant } from '@/activities/emails/types/EmailThreadMessageParticipant'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const getDisplayNameFromParticipant = ({ participant, diff --git a/packages/twenty-front/src/modules/activities/files/components/Attachments.tsx b/packages/twenty-front/src/modules/activities/files/components/Attachments.tsx index 1cc6de187a09..047bc21ba6f3 100644 --- a/packages/twenty-front/src/modules/activities/files/components/Attachments.tsx +++ b/packages/twenty-front/src/modules/activities/files/components/Attachments.tsx @@ -17,7 +17,7 @@ import { DropZone } from '@/activities/files/components/DropZone'; import { useAttachments } from '@/activities/files/hooks/useAttachments'; import { useUploadAttachmentFile } from '@/activities/files/hooks/useUploadAttachmentFile'; import { ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const StyledAttachmentsContainer = styled.div` display: flex; diff --git a/packages/twenty-front/src/modules/activities/hooks/useActivityTargetObjectRecords.ts b/packages/twenty-front/src/modules/activities/hooks/useActivityTargetObjectRecords.ts index 4b8edec3a2a3..63e7c48bad71 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useActivityTargetObjectRecords.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useActivityTargetObjectRecords.ts @@ -8,7 +8,7 @@ import { Task } from '@/activities/types/Task'; import { TaskTarget } from '@/activities/types/TaskTarget'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useActivityTargetObjectRecords = ( activity?: Task | Note, diff --git a/packages/twenty-front/src/modules/activities/hooks/usePrepareFindManyActivitiesQuery.ts b/packages/twenty-front/src/modules/activities/hooks/usePrepareFindManyActivitiesQuery.ts index 21c5e539b6f2..e203711bbd71 100644 --- a/packages/twenty-front/src/modules/activities/hooks/usePrepareFindManyActivitiesQuery.ts +++ b/packages/twenty-front/src/modules/activities/hooks/usePrepareFindManyActivitiesQuery.ts @@ -13,8 +13,8 @@ import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordF import { useUpsertFindManyRecordsQueryInCache } from '@/object-record/cache/hooks/useUpsertFindManyRecordsQueryInCache'; import { getRecordFromCache } from '@/object-record/cache/utils/getRecordFromCache'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; +import { isDefined } from 'twenty-shared'; import { sortByAscString } from '~/utils/array/sortByAscString'; -import { isDefined } from '~/utils/isDefined'; export const usePrepareFindManyActivitiesQuery = ({ activityObjectNameSingular, diff --git a/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts b/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts index e3295d57e991..65e457ef0067 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useRefreshShowPageFindManyActivitiesQueries.ts @@ -3,7 +3,7 @@ import { useRecoilValue } from 'recoil'; import { usePrepareFindManyActivitiesQuery } from '@/activities/hooks/usePrepareFindManyActivitiesQuery'; import { objectShowPageTargetableObjectState } from '@/activities/timeline-activities/states/objectShowPageTargetableObjectIdState'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; // This hook should only be executed if the normalized cache is up-to-date // It will take a targetableObject and prepare the queries for the activities diff --git a/packages/twenty-front/src/modules/activities/hooks/useReplaceActivityBlockEditorContent.ts b/packages/twenty-front/src/modules/activities/hooks/useReplaceActivityBlockEditorContent.ts index 7fbda840c369..b29a2b291a5b 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useReplaceActivityBlockEditorContent.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useReplaceActivityBlockEditorContent.ts @@ -2,7 +2,7 @@ import { BLOCK_SCHEMA } from '@/activities/blocks/constants/Schema'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { isNonEmptyString } from '@sniptt/guards'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; export const useReplaceActivityBlockEditorContent = ( diff --git a/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts b/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts index 76e91ec8bf53..c87dba580acd 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useUpsertActivity.ts @@ -9,7 +9,7 @@ import { Note } from '@/activities/types/Note'; import { Task } from '@/activities/types/Task'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useUpsertActivity = ({ activityObjectNameSingular, diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/rows/calendar/components/EventCardCalendarEvent.tsx b/packages/twenty-front/src/modules/activities/timeline-activities/rows/calendar/components/EventCardCalendarEvent.tsx index c345d81f4d33..a58c05a4c5a4 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/rows/calendar/components/EventCardCalendarEvent.tsx +++ b/packages/twenty-front/src/modules/activities/timeline-activities/rows/calendar/components/EventCardCalendarEvent.tsx @@ -8,12 +8,12 @@ import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { UserContext } from '@/users/contexts/UserContext'; import { useContext } from 'react'; +import { isDefined } from 'twenty-shared'; import { formatToHumanReadableDay, formatToHumanReadableMonth, formatToHumanReadableTime, } from '~/utils/format/formatDate'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; const StyledEventCardCalendarEventContainer = styled.div` diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiffValueEffect.tsx b/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiffValueEffect.tsx index 6e20cfc4faa8..61c17503f346 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiffValueEffect.tsx +++ b/packages/twenty-front/src/modules/activities/timeline-activities/rows/main-object/components/EventFieldDiffValueEffect.tsx @@ -5,7 +5,7 @@ import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { useSetRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const EventFieldDiffValueEffect = ({ diffArtificialRecordStoreId, diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/rows/message/components/EventCardMessage.tsx b/packages/twenty-front/src/modules/activities/timeline-activities/rows/message/components/EventCardMessage.tsx index 7114bd427667..9f7e9061fae8 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/rows/message/components/EventCardMessage.tsx +++ b/packages/twenty-front/src/modules/activities/timeline-activities/rows/message/components/EventCardMessage.tsx @@ -8,7 +8,7 @@ import { EventCardMessageNotShared } from '@/activities/timeline-activities/rows import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const StyledEventCardMessageContainer = styled.div` display: flex; diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/utils/getTimelineActivityAuthorFullName.ts b/packages/twenty-front/src/modules/activities/timeline-activities/utils/getTimelineActivityAuthorFullName.ts index 4e141de6b3bd..a784fd2f4c32 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/utils/getTimelineActivityAuthorFullName.ts +++ b/packages/twenty-front/src/modules/activities/timeline-activities/utils/getTimelineActivityAuthorFullName.ts @@ -1,6 +1,6 @@ import { TimelineActivity } from '@/activities/timeline-activities/types/TimelineActivity'; import { CurrentWorkspaceMember } from '@/auth/states/currentWorkspaceMemberState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const getTimelineActivityAuthorFullName = ( event: TimelineActivity, diff --git a/packages/twenty-front/src/modules/activities/timeline-activities/utils/groupEventsByMonth.ts b/packages/twenty-front/src/modules/activities/timeline-activities/utils/groupEventsByMonth.ts index cd5ce8a73364..f26bc8c79de0 100644 --- a/packages/twenty-front/src/modules/activities/timeline-activities/utils/groupEventsByMonth.ts +++ b/packages/twenty-front/src/modules/activities/timeline-activities/utils/groupEventsByMonth.ts @@ -1,5 +1,5 @@ import { TimelineActivity } from '@/activities/timeline-activities/types/TimelineActivity'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export type EventGroup = { month: number; diff --git a/packages/twenty-front/src/modules/apollo/hooks/useApolloFactory.ts b/packages/twenty-front/src/modules/apollo/hooks/useApolloFactory.ts index 368a2ee2a2e8..21f47bccc4b6 100644 --- a/packages/twenty-front/src/modules/apollo/hooks/useApolloFactory.ts +++ b/packages/twenty-front/src/modules/apollo/hooks/useApolloFactory.ts @@ -10,10 +10,10 @@ import { previousUrlState } from '@/auth/states/previousUrlState'; import { tokenPairState } from '@/auth/states/tokenPairState'; import { workspacesState } from '@/auth/states/workspaces'; import { isDebugModeState } from '@/client-config/states/isDebugModeState'; +import { isDefined } from 'twenty-shared'; import { REACT_APP_SERVER_BASE_URL } from '~/config'; import { useIsMatchingLocation } from '~/hooks/useIsMatchingLocation'; import { useUpdateEffect } from '~/hooks/useUpdateEffect'; -import { isDefined } from '~/utils/isDefined'; import { AppPath } from '@/types/AppPath'; import { ApolloFactory, Options } from '../services/apollo.factory'; diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/sortCachedObjectEdges.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/sortCachedObjectEdges.ts index 6b762f22158a..9854f8af1611 100644 --- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/sortCachedObjectEdges.ts +++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/sortCachedObjectEdges.ts @@ -4,7 +4,7 @@ import { ReadFieldFunction } from '@apollo/client/cache/core/types/common'; import { RecordGqlRefEdge } from '@/object-record/cache/types/RecordGqlRefEdge'; import { RecordGqlOperationOrderBy } from '@/object-record/graphql/types/RecordGqlOperationOrderBy'; import { OrderBy } from '@/types/OrderBy'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { sortAsc, sortDesc, sortNullsFirst, sortNullsLast } from '~/utils/sort'; export const sortCachedObjectEdges = ({ diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerAttachRelationOptimisticEffect.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerAttachRelationOptimisticEffect.ts index 11b3c03c8c3d..86b2bbe861e6 100644 --- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerAttachRelationOptimisticEffect.ts +++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerAttachRelationOptimisticEffect.ts @@ -2,8 +2,7 @@ import { ApolloCache, StoreObject } from '@apollo/client'; import { RecordGqlRefEdge } from '@/object-record/cache/types/RecordGqlRefEdge'; import { isObjectRecordConnectionWithRefs } from '@/object-record/cache/utils/isObjectRecordConnectionWithRefs'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from '~/utils/isDefined'; +import { capitalize, isDefined } from 'twenty-shared'; export const triggerAttachRelationOptimisticEffect = ({ cache, diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerCreateRecordsOptimisticEffect.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerCreateRecordsOptimisticEffect.ts index 54af02ea6c82..9acca6114a5f 100644 --- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerCreateRecordsOptimisticEffect.ts +++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerCreateRecordsOptimisticEffect.ts @@ -13,7 +13,7 @@ import { CachedObjectRecordQueryVariables } from '@/apollo/types/CachedObjectRec import { encodeCursor } from '@/apollo/utils/encodeCursor'; import { getRecordFromCache } from '@/object-record/cache/utils/getRecordFromCache'; import { getRecordNodeFromRecord } from '@/object-record/cache/utils/getRecordNodeFromRecord'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { parseApolloStoreFieldName } from '~/utils/parseApolloStoreFieldName'; /* diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerDestroyRecordsOptimisticEffect.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerDestroyRecordsOptimisticEffect.ts index 8ed05ecd020a..ba03721ef541 100644 --- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerDestroyRecordsOptimisticEffect.ts +++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerDestroyRecordsOptimisticEffect.ts @@ -5,7 +5,7 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { RecordGqlRefEdge } from '@/object-record/cache/types/RecordGqlRefEdge'; import { isObjectRecordConnectionWithRefs } from '@/object-record/cache/utils/isObjectRecordConnectionWithRefs'; import { RecordGqlNode } from '@/object-record/graphql/types/RecordGqlNode'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const triggerDestroyRecordsOptimisticEffect = ({ cache, diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts index 15878796f5bd..0a762ee34ffc 100644 --- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts +++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts @@ -9,7 +9,7 @@ import { getEdgeTypename } from '@/object-record/cache/utils/getEdgeTypename'; import { isObjectRecordConnectionWithRefs } from '@/object-record/cache/utils/isObjectRecordConnectionWithRefs'; import { RecordGqlNode } from '@/object-record/graphql/types/RecordGqlNode'; import { isRecordMatchingFilter } from '@/object-record/record-filter/utils/isRecordMatchingFilter'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { parseApolloStoreFieldName } from '~/utils/parseApolloStoreFieldName'; // TODO: add extensive unit tests for this function diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffectByBatch.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffectByBatch.ts index 52e88985e23e..f49859647767 100644 --- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffectByBatch.ts +++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffectByBatch.ts @@ -9,7 +9,7 @@ import { getEdgeTypename } from '@/object-record/cache/utils/getEdgeTypename'; import { isObjectRecordConnectionWithRefs } from '@/object-record/cache/utils/isObjectRecordConnectionWithRefs'; import { RecordGqlNode } from '@/object-record/graphql/types/RecordGqlNode'; import { isRecordMatchingFilter } from '@/object-record/record-filter/utils/isRecordMatchingFilter'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { parseApolloStoreFieldName } from '~/utils/parseApolloStoreFieldName'; // TODO: add extensive unit tests for this function diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts index d74849eec868..be977922dc8e 100644 --- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts +++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts @@ -9,9 +9,9 @@ import { RecordGqlConnection } from '@/object-record/graphql/types/RecordGqlConn import { RecordGqlNode } from '@/object-record/graphql/types/RecordGqlNode'; import { ApolloCache } from '@apollo/client'; import { isArray } from '@sniptt/guards'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { isDefined } from '~/utils/isDefined'; type triggerUpdateRelationsOptimisticEffectArgs = { cache: ApolloCache<unknown>; diff --git a/packages/twenty-front/src/modules/apollo/services/apollo.factory.ts b/packages/twenty-front/src/modules/apollo/services/apollo.factory.ts index 5096989f031b..656fa509a7a7 100644 --- a/packages/twenty-front/src/modules/apollo/services/apollo.factory.ts +++ b/packages/twenty-front/src/modules/apollo/services/apollo.factory.ts @@ -13,8 +13,8 @@ import { createUploadLink } from 'apollo-upload-client'; import { renewToken } from '@/auth/services/AuthService'; import { CurrentWorkspaceMember } from '@/auth/states/currentWorkspaceMemberState'; +import { isDefined } from 'twenty-shared'; import { AuthTokenPair } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; import { logDebug } from '~/utils/logDebug'; import { GraphQLFormattedError } from 'graphql'; diff --git a/packages/twenty-front/src/modules/apollo/utils/encodeCursor.ts b/packages/twenty-front/src/modules/apollo/utils/encodeCursor.ts index 2786db896702..072c482a71da 100644 --- a/packages/twenty-front/src/modules/apollo/utils/encodeCursor.ts +++ b/packages/twenty-front/src/modules/apollo/utils/encodeCursor.ts @@ -1,5 +1,5 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { Buffer } from 'buffer'; diff --git a/packages/twenty-front/src/modules/apollo/utils/loggerLink.ts b/packages/twenty-front/src/modules/apollo/utils/loggerLink.ts index 174c5c3badda..233c9209a3d9 100644 --- a/packages/twenty-front/src/modules/apollo/utils/loggerLink.ts +++ b/packages/twenty-front/src/modules/apollo/utils/loggerLink.ts @@ -1,6 +1,6 @@ import { ApolloLink, gql, Operation } from '@apollo/client'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { logDebug } from '~/utils/logDebug'; import { logError } from '~/utils/logError'; diff --git a/packages/twenty-front/src/modules/app/effect-components/PageChangeEffect.tsx b/packages/twenty-front/src/modules/app/effect-components/PageChangeEffect.tsx index 3682760521d0..674ce12a6b49 100644 --- a/packages/twenty-front/src/modules/app/effect-components/PageChangeEffect.tsx +++ b/packages/twenty-front/src/modules/app/effect-components/PageChangeEffect.tsx @@ -21,9 +21,9 @@ import { AppPath } from '@/types/AppPath'; import { PageHotkeyScope } from '@/types/PageHotkeyScope'; import { SettingsPath } from '@/types/SettingsPath'; import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope'; +import { isDefined } from 'twenty-shared'; import { useIsMatchingLocation } from '~/hooks/useIsMatchingLocation'; import { usePageChangeEffectNavigateLocation } from '~/hooks/usePageChangeEffectNavigateLocation'; -import { isDefined } from '~/utils/isDefined'; // TODO: break down into smaller functions and / or hooks // - moved usePageChangeEffectNavigateLocation into dedicated hook diff --git a/packages/twenty-front/src/modules/auth/components/VerifyEffect.tsx b/packages/twenty-front/src/modules/auth/components/VerifyEffect.tsx index 8de16cddb707..c4d41e3ad1a5 100644 --- a/packages/twenty-front/src/modules/auth/components/VerifyEffect.tsx +++ b/packages/twenty-front/src/modules/auth/components/VerifyEffect.tsx @@ -8,7 +8,7 @@ import { AppPath } from '@/types/AppPath'; import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useSetRecoilState } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useNavigateApp } from '~/hooks/useNavigateApp'; export const VerifyEffect = () => { diff --git a/packages/twenty-front/src/modules/auth/hooks/useAuth.ts b/packages/twenty-front/src/modules/auth/hooks/useAuth.ts index 0101ccbbfe8f..ca6bb20a18b6 100644 --- a/packages/twenty-front/src/modules/auth/hooks/useAuth.ts +++ b/packages/twenty-front/src/modules/auth/hooks/useAuth.ts @@ -20,6 +20,7 @@ import { clientConfigApiStatusState } from '@/client-config/states/clientConfigA import { isDebugModeState } from '@/client-config/states/isDebugModeState'; import { supportChatState } from '@/client-config/states/supportChatState'; import { ColorScheme } from '@/workspace-member/types/WorkspaceMember'; +import { APP_LOCALES, isDefined } from 'twenty-shared'; import { REACT_APP_SERVER_BASE_URL } from '~/config'; import { useCheckUserExistsLazyQuery, @@ -29,7 +30,6 @@ import { useGetLoginTokenFromEmailVerificationTokenMutation, useSignUpMutation, } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; import { currentWorkspaceMembersState } from '@/auth/states/currentWorkspaceMembersStates'; import { isDeveloperDefaultSignInPrefilledState } from '@/client-config/states/isDeveloperDefaultSignInPrefilledState'; @@ -280,7 +280,9 @@ export const useAuth = () => { ) : TimeFormat[detectTimeFormat()], }); - dynamicActivate(workspaceMember.locale ?? 'en'); + dynamicActivate( + (workspaceMember.locale as keyof typeof APP_LOCALES) ?? 'en', + ); } const workspace = user.currentWorkspace ?? null; diff --git a/packages/twenty-front/src/modules/auth/services/AuthService.ts b/packages/twenty-front/src/modules/auth/services/AuthService.ts index 120a71eeae12..d82b6fd8c209 100644 --- a/packages/twenty-front/src/modules/auth/services/AuthService.ts +++ b/packages/twenty-front/src/modules/auth/services/AuthService.ts @@ -7,13 +7,13 @@ import { } from '@apollo/client'; import { loggerLink } from '@/apollo/utils/loggerLink'; +import { isDefined } from 'twenty-shared'; import { AuthTokenPair, RenewTokenDocument, RenewTokenMutation, RenewTokenMutationVariables, } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; const logger = loggerLink(() => 'Twenty-Refresh'); diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpGlobalScopeForm.tsx b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpGlobalScopeForm.tsx index 0d1fd5d173dd..7d7bd58b7f9e 100644 --- a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpGlobalScopeForm.tsx +++ b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpGlobalScopeForm.tsx @@ -26,7 +26,7 @@ import { authProvidersState } from '@/client-config/states/authProvidersState'; import { useRedirectToWorkspaceDomain } from '@/domain-manager/hooks/useRedirectToWorkspaceDomain'; import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const StyledContentContainer = styled(motion.div)` margin-bottom: ${({ theme }) => theme.spacing(8)}; diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpSSOIdentityProviderSelection.tsx b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpSSOIdentityProviderSelection.tsx index b3696dde143c..96ec29b6c93e 100644 --- a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpSSOIdentityProviderSelection.tsx +++ b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpSSOIdentityProviderSelection.tsx @@ -7,7 +7,7 @@ import { useRecoilValue } from 'recoil'; import { HorizontalSeparator, MainButton } from 'twenty-ui'; import { workspaceAuthProvidersState } from '@/workspace/states/workspaceAuthProvidersState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const StyledContentContainer = styled.div` margin-bottom: ${({ theme }) => theme.spacing(8)}; diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWithCredentials.tsx b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWithCredentials.tsx index 29691cfa7a8c..28453ef00156 100644 --- a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWithCredentials.tsx +++ b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWithCredentials.tsx @@ -14,8 +14,8 @@ import styled from '@emotion/styled'; import { useMemo, useState } from 'react'; import { useFormContext } from 'react-hook-form'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { Loader, MainButton } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; const StyledForm = styled.form` align-items: center; diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWithSSO.tsx b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWithSSO.tsx index 8b4a53ba49dd..327ca76f6480 100644 --- a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWithSSO.tsx +++ b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWithSSO.tsx @@ -6,8 +6,8 @@ import { import { workspaceAuthProvidersState } from '@/workspace/states/workspaceAuthProvidersState'; import { useTheme } from '@emotion/react'; import { useRecoilValue, useSetRecoilState } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { HorizontalSeparator, IconLock, MainButton } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; export const SignInUpWithSSO = () => { const theme = useTheme(); diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWorkspaceScopeFormEffect.tsx b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWorkspaceScopeFormEffect.tsx index 8a600b197fe1..6d3b0239c0ab 100644 --- a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWorkspaceScopeFormEffect.tsx +++ b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpWorkspaceScopeFormEffect.tsx @@ -10,7 +10,7 @@ import { captchaState } from '@/client-config/states/captchaState'; import { workspaceAuthProvidersState } from '@/workspace/states/workspaceAuthProvidersState'; import { useEffect, useState } from 'react'; import { useRecoilValue, useSetRecoilState } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const searchParams = new URLSearchParams(window.location.search); const email = searchParams.get('email'); diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts b/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts index ef1af97edaaf..630f19f45907 100644 --- a/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts +++ b/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts @@ -11,7 +11,7 @@ import { } from '@/auth/states/signInUpStepState'; import { PASSWORD_REGEX } from '@/auth/utils/passwordRegex'; import { isDeveloperDefaultSignInPrefilledState } from '@/client-config/states/isDeveloperDefaultSignInPrefilledState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const makeValidationSchema = (signInUpStep: SignInUpStep) => z diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useWorkspaceFromInviteHash.ts b/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useWorkspaceFromInviteHash.ts index e2c7e4b0bdcf..209618eff91a 100644 --- a/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useWorkspaceFromInviteHash.ts +++ b/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useWorkspaceFromInviteHash.ts @@ -9,9 +9,9 @@ import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { isDefaultLayoutAuthModalVisibleState } from '@/ui/layout/states/isDefaultLayoutAuthModalVisibleState'; import { AppPath } from '@/types/AppPath'; +import { isDefined } from 'twenty-shared'; import { useGetWorkspaceFromInviteHashQuery } from '~/generated/graphql'; import { useNavigateApp } from '~/hooks/useNavigateApp'; -import { isDefined } from '~/utils/isDefined'; export const useWorkspaceFromInviteHash = () => { const { enqueueSnackBar } = useSnackBar(); diff --git a/packages/twenty-front/src/modules/captcha/hooks/useReadCaptchaToken.ts b/packages/twenty-front/src/modules/captcha/hooks/useReadCaptchaToken.ts index adc5aceb0cab..22e2fbbeb2de 100644 --- a/packages/twenty-front/src/modules/captcha/hooks/useReadCaptchaToken.ts +++ b/packages/twenty-front/src/modules/captcha/hooks/useReadCaptchaToken.ts @@ -1,7 +1,7 @@ import { useRecoilCallback } from 'recoil'; import { captchaTokenState } from '@/captcha/states/captchaTokenState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useReadCaptchaToken = () => { const readCaptchaToken = useRecoilCallback( diff --git a/packages/twenty-front/src/modules/chrome-extension-sidecar/components/ChromeExtensionSidecarEffect.tsx b/packages/twenty-front/src/modules/chrome-extension-sidecar/components/ChromeExtensionSidecarEffect.tsx index f7f98e702f14..e33142a4b22b 100644 --- a/packages/twenty-front/src/modules/chrome-extension-sidecar/components/ChromeExtensionSidecarEffect.tsx +++ b/packages/twenty-front/src/modules/chrome-extension-sidecar/components/ChromeExtensionSidecarEffect.tsx @@ -5,7 +5,7 @@ import { useRecoilValue, useSetRecoilState } from 'recoil'; import { tokenPairState } from '@/auth/states/tokenPairState'; import { isLoadingTokensFromExtensionState } from '@/chrome-extension-sidecar/states/isLoadingTokensFromExtensionState'; import { chromeExtensionIdState } from '@/client-config/states/chromeExtensionIdState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { isInFrame } from '~/utils/isInIframe'; export const ChromeExtensionSidecarEffect = () => { diff --git a/packages/twenty-front/src/modules/client-config/components/ClientConfigProviderEffect.tsx b/packages/twenty-front/src/modules/client-config/components/ClientConfigProviderEffect.tsx index ac34e0a6f444..67f48d8c8121 100644 --- a/packages/twenty-front/src/modules/client-config/components/ClientConfigProviderEffect.tsx +++ b/packages/twenty-front/src/modules/client-config/components/ClientConfigProviderEffect.tsx @@ -16,8 +16,8 @@ import { supportChatState } from '@/client-config/states/supportChatState'; import { domainConfigurationState } from '@/domain-manager/states/domainConfigurationState'; import { useEffect } from 'react'; import { useRecoilState, useSetRecoilState } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { useGetClientConfigQuery } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; export const ClientConfigProviderEffect = () => { const setIsDebugMode = useSetRecoilState(isDebugModeState); diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx index 5981639e8d1b..19ed37ad0288 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx @@ -11,7 +11,7 @@ import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/ import { useLingui } from '@lingui/react/macro'; import { isNonEmptyString } from '@sniptt/guards'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export type CommandGroupConfig = { heading: string; diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuDefaultSelectionEffect.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuDefaultSelectionEffect.tsx index eb94ecc42ea5..136494f5f530 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuDefaultSelectionEffect.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuDefaultSelectionEffect.tsx @@ -1,7 +1,7 @@ import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList'; import { useEffect } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const CommandMenuDefaultSelectionEffect = ({ selectableItemIds, diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuItem.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuItem.tsx index b029282071e5..7d48f3d10ce1 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuItem.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuItem.tsx @@ -8,6 +8,7 @@ import { ReactNode } from 'react'; export type CommandMenuItemProps = { label: string; + description?: string; to?: string; id: string; onClick?: () => void; @@ -19,6 +20,7 @@ export type CommandMenuItemProps = { export const CommandMenuItem = ({ label, + description, to, id, onClick, @@ -40,6 +42,7 @@ export const CommandMenuItem = ({ <MenuItemCommand LeftIcon={Icon} text={label} + description={description} hotKeys={hotKeys} onClick={() => onItemClick({ diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuList.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuList.tsx index a84de6ec2e67..6667fbe67e1b 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuList.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuList.tsx @@ -12,7 +12,8 @@ import { SelectableList } from '@/ui/layout/selectable-list/components/Selectabl import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope'; import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper'; import styled from '@emotion/styled'; -import { MOBILE_VIEWPORT, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { MOBILE_VIEWPORT } from 'twenty-ui'; const MOBILE_NAVIGATION_BAR_HEIGHT = 64; @@ -124,6 +125,7 @@ export const CommandMenuList = ({ id={item.id} Icon={item.Icon} label={item.label} + description={item.description} to={item.to} onClick={item.onCommandClick} hotKeys={item.hotKeys} diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuRouter.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuRouter.tsx index d5aee4267f07..dcae344a602b 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuRouter.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuRouter.tsx @@ -4,7 +4,7 @@ import { COMMAND_MENU_PAGES_CONFIG } from '@/command-menu/constants/CommandMenuP import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState'; import styled from '@emotion/styled'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; const StyledCommandMenuContent = styled.div` flex: 1; diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenuTopBar.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenuTopBar.tsx index e71b4fe30dfc..220b9a15a949 100644 --- a/packages/twenty-front/src/modules/command-menu/components/CommandMenuTopBar.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenuTopBar.tsx @@ -13,7 +13,8 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { useLingui } from '@lingui/react/macro'; import { useRecoilState, useRecoilValue } from 'recoil'; -import { IconX, isDefined, LightIconButton, useIsMobile } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconX, LightIconButton, useIsMobile } from 'twenty-ui'; const StyledInputContainer = styled.div` align-items: center; diff --git a/packages/twenty-front/src/modules/command-menu/components/ResetContextToSelectionCommandButton.tsx b/packages/twenty-front/src/modules/command-menu/components/ResetContextToSelectionCommandButton.tsx index 4a8af1a477e9..a8c85c3b6bcf 100644 --- a/packages/twenty-front/src/modules/command-menu/components/ResetContextToSelectionCommandButton.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/ResetContextToSelectionCommandButton.tsx @@ -8,7 +8,8 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { t } from '@lingui/core/macro'; import { useRecoilValue } from 'recoil'; -import { IconArrowBackUp, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconArrowBackUp } from 'twenty-ui'; export const ResetContextToSelectionCommandButton = () => { const contextStoreTargetedRecordsRule = useRecoilComponentValueV2( diff --git a/packages/twenty-front/src/modules/command-menu/components/__stories__/CommandMenu.stories.tsx b/packages/twenty-front/src/modules/command-menu/components/__stories__/CommandMenu.stories.tsx index fb955eaa8187..96fbedc8f86d 100644 --- a/packages/twenty-front/src/modules/command-menu/components/__stories__/CommandMenu.stories.tsx +++ b/packages/twenty-front/src/modules/command-menu/components/__stories__/CommandMenu.stories.tsx @@ -123,6 +123,8 @@ export const SearchRecordsAction: Story = { await sleep(openTimeout); await userEvent.type(searchInput, 'n'); expect(await canvas.findByText('Linkedin')).toBeVisible(); + const companyTexts = await canvas.findAllByText('Company'); + expect(companyTexts[0]).toBeVisible(); expect(await canvas.findByText(companiesMock[0].name)).toBeVisible(); }, }; diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuOnItemClick.ts b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuOnItemClick.ts index c656e82eb113..20326eeb15ea 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuOnItemClick.ts +++ b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenuOnItemClick.ts @@ -2,7 +2,7 @@ import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { isNonEmptyString } from '@sniptt/guards'; import { useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useCommandMenuOnItemClick = () => { const { toggleCommandMenu } = useCommandMenu(); diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useSearchRecords.tsx b/packages/twenty-front/src/modules/command-menu/hooks/useSearchRecords.tsx index 599279cc5173..5f692f6daa81 100644 --- a/packages/twenty-front/src/modules/command-menu/hooks/useSearchRecords.tsx +++ b/packages/twenty-front/src/modules/command-menu/hooks/useSearchRecords.tsx @@ -77,6 +77,7 @@ export const useSearchRecords = () => { people?.map(({ id, name: { firstName, lastName }, avatarUrl }) => ({ id, label: `${firstName} ${lastName}`, + description: 'Person', to: `object/person/${id}`, shouldCloseCommandMenuOnClick: true, Icon: () => ( @@ -96,6 +97,7 @@ export const useSearchRecords = () => { companies?.map((company) => ({ id: company.id, label: company.name ?? '', + description: 'Company', to: `object/company/${company.id}`, shouldCloseCommandMenuOnClick: true, Icon: () => ( @@ -116,6 +118,7 @@ export const useSearchRecords = () => { opportunities?.map(({ id, name }) => ({ id, label: name ?? '', + description: 'Opportunity', to: `object/opportunity/${id}`, shouldCloseCommandMenuOnClick: true, Icon: () => ( @@ -143,6 +146,7 @@ export const useSearchRecords = () => { notes?.map((note) => ({ id: note.id, label: note.title ?? '', + description: 'Note', to: '', onCommandClick: () => openNoteRightDrawer(note.id), shouldCloseCommandMenuOnClick: true, @@ -156,6 +160,7 @@ export const useSearchRecords = () => { tasks?.map((task) => ({ id: task.id, label: task.title ?? '', + description: 'Task', to: '', onCommandClick: () => openTaskRightDrawer(task.id), shouldCloseCommandMenuOnClick: true, @@ -182,6 +187,7 @@ export const useSearchRecords = () => { objectRecords.map((objectRecord) => ({ id: objectRecord.record.id, label: objectRecord.recordIdentifier.name, + description: objectRecord.objectMetadataItem.labelSingular, to: `object/${objectRecord.objectMetadataItem.nameSingular}/${objectRecord.record.id}`, shouldCloseCommandMenuOnClick: true, Icon: () => ( diff --git a/packages/twenty-front/src/modules/command-menu/types/Command.ts b/packages/twenty-front/src/modules/command-menu/types/Command.ts index 0e004e963a51..39baf41be5b9 100644 --- a/packages/twenty-front/src/modules/command-menu/types/Command.ts +++ b/packages/twenty-front/src/modules/command-menu/types/Command.ts @@ -16,6 +16,7 @@ export type Command = { id: string; to?: string; label: string; + description?: string; type?: CommandType; scope?: CommandScope; Icon?: IconComponent; diff --git a/packages/twenty-front/src/modules/context-store/components/ContextStoreViewIdEffect.tsx b/packages/twenty-front/src/modules/context-store/components/ContextStoreViewIdEffect.tsx index d4f7efc662a4..f165d9357661 100644 --- a/packages/twenty-front/src/modules/context-store/components/ContextStoreViewIdEffect.tsx +++ b/packages/twenty-front/src/modules/context-store/components/ContextStoreViewIdEffect.tsx @@ -9,8 +9,8 @@ import { useViewFromQueryParams } from '@/views/hooks/internal/useViewFromQueryP import { View } from '@/views/types/View'; import { isUndefined } from '@sniptt/guards'; import { useEffect } from 'react'; +import { isDefined } from 'twenty-shared'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { isDefined } from '~/utils/isDefined'; export const ContextStoreViewIdEffect = ({ objectNamePlural, diff --git a/packages/twenty-front/src/modules/databases/hooks/useCreateOneDatabaseConnection.ts b/packages/twenty-front/src/modules/databases/hooks/useCreateOneDatabaseConnection.ts index e74c3f6edc18..c526fe2b891f 100644 --- a/packages/twenty-front/src/modules/databases/hooks/useCreateOneDatabaseConnection.ts +++ b/packages/twenty-front/src/modules/databases/hooks/useCreateOneDatabaseConnection.ts @@ -3,12 +3,12 @@ import { useMutation } from '@apollo/client'; import { CREATE_ONE_DATABASE_CONNECTION } from '@/databases/graphql/mutations/createOneDatabaseConnection'; import { GET_MANY_DATABASE_CONNECTIONS } from '@/databases/graphql/queries/findManyDatabaseConnections'; import { useApolloMetadataClient } from '@/object-metadata/hooks/useApolloMetadataClient'; +import { isDefined } from 'twenty-shared'; import { CreateRemoteServerInput, CreateServerMutation, CreateServerMutationVariables, } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; export const useCreateOneDatabaseConnection = () => { const apolloMetadataClient = useApolloMetadataClient(); diff --git a/packages/twenty-front/src/modules/databases/hooks/useSyncRemoteTable.ts b/packages/twenty-front/src/modules/databases/hooks/useSyncRemoteTable.ts index 884339b46e75..aaa4386d84c2 100644 --- a/packages/twenty-front/src/modules/databases/hooks/useSyncRemoteTable.ts +++ b/packages/twenty-front/src/modules/databases/hooks/useSyncRemoteTable.ts @@ -7,12 +7,12 @@ import { useApolloMetadataClient } from '@/object-metadata/hooks/useApolloMetada import { useFindManyObjectMetadataItems } from '@/object-metadata/hooks/useFindManyObjectMetadataItems'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery'; +import { isDefined } from 'twenty-shared'; import { RemoteTableInput, SyncRemoteTableMutation, SyncRemoteTableMutationVariables, } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; export const useSyncRemoteTable = () => { const apolloMetadataClient = useApolloMetadataClient(); diff --git a/packages/twenty-front/src/modules/databases/hooks/useSyncRemoteTableSchemaChanges.ts b/packages/twenty-front/src/modules/databases/hooks/useSyncRemoteTableSchemaChanges.ts index 0ce4bf68c991..74ce46a36c33 100644 --- a/packages/twenty-front/src/modules/databases/hooks/useSyncRemoteTableSchemaChanges.ts +++ b/packages/twenty-front/src/modules/databases/hooks/useSyncRemoteTableSchemaChanges.ts @@ -7,12 +7,12 @@ import { useApolloMetadataClient } from '@/object-metadata/hooks/useApolloMetada import { useFindManyObjectMetadataItems } from '@/object-metadata/hooks/useFindManyObjectMetadataItems'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery'; +import { isDefined } from 'twenty-shared'; import { RemoteTableInput, SyncRemoteTableSchemaChangesMutation, SyncRemoteTableSchemaChangesMutationVariables, } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; export const useSyncRemoteTableSchemaChanges = () => { const apolloMetadataClient = useApolloMetadataClient(); diff --git a/packages/twenty-front/src/modules/databases/hooks/useUnsyncRemoteTable.ts b/packages/twenty-front/src/modules/databases/hooks/useUnsyncRemoteTable.ts index 4a331e3892d1..1d2f18d55897 100644 --- a/packages/twenty-front/src/modules/databases/hooks/useUnsyncRemoteTable.ts +++ b/packages/twenty-front/src/modules/databases/hooks/useUnsyncRemoteTable.ts @@ -5,12 +5,12 @@ import { UNSYNC_REMOTE_TABLE } from '@/databases/graphql/mutations/unsyncRemoteT import { modifyRemoteTableFromCache } from '@/databases/utils/modifyRemoteTableFromCache'; import { useApolloMetadataClient } from '@/object-metadata/hooks/useApolloMetadataClient'; import { useFindManyObjectMetadataItems } from '@/object-metadata/hooks/useFindManyObjectMetadataItems'; +import { isDefined } from 'twenty-shared'; import { RemoteTableInput, UnsyncRemoteTableMutation, UnsyncRemoteTableMutationVariables, } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; export const useUnsyncRemoteTable = () => { const apolloMetadataClient = useApolloMetadataClient(); diff --git a/packages/twenty-front/src/modules/domain-manager/hooks/useBuildWorkspaceUrl.ts b/packages/twenty-front/src/modules/domain-manager/hooks/useBuildWorkspaceUrl.ts index 606ae42b4cbc..49d82b311726 100644 --- a/packages/twenty-front/src/modules/domain-manager/hooks/useBuildWorkspaceUrl.ts +++ b/packages/twenty-front/src/modules/domain-manager/hooks/useBuildWorkspaceUrl.ts @@ -1,6 +1,6 @@ import { domainConfigurationState } from '@/domain-manager/states/domainConfigurationState'; import { useRecoilValue } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useBuildWorkspaceUrl = () => { const domainConfiguration = useRecoilValue(domainConfigurationState); diff --git a/packages/twenty-front/src/modules/domain-manager/hooks/useGetPublicWorkspaceDataBySubdomain.ts b/packages/twenty-front/src/modules/domain-manager/hooks/useGetPublicWorkspaceDataBySubdomain.ts index 116ba20a0ec8..047cd6469258 100644 --- a/packages/twenty-front/src/modules/domain-manager/hooks/useGetPublicWorkspaceDataBySubdomain.ts +++ b/packages/twenty-front/src/modules/domain-manager/hooks/useGetPublicWorkspaceDataBySubdomain.ts @@ -4,8 +4,8 @@ import { useIsCurrentLocationOnDefaultDomain } from '@/domain-manager/hooks/useI import { useRedirectToDefaultDomain } from '@/domain-manager/hooks/useRedirectToDefaultDomain'; import { workspaceAuthProvidersState } from '@/workspace/states/workspaceAuthProvidersState'; import { useRecoilValue, useSetRecoilState } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { useGetPublicWorkspaceDataBySubdomainQuery } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; export const useGetPublicWorkspaceDataBySubdomain = () => { const { isDefaultDomain } = useIsCurrentLocationOnDefaultDomain(); diff --git a/packages/twenty-front/src/modules/domain-manager/hooks/useIsCurrentLocationOnAWorkspaceSubdomain.ts b/packages/twenty-front/src/modules/domain-manager/hooks/useIsCurrentLocationOnAWorkspaceSubdomain.ts index 27eb9a9ea701..4920f9f635fd 100644 --- a/packages/twenty-front/src/modules/domain-manager/hooks/useIsCurrentLocationOnAWorkspaceSubdomain.ts +++ b/packages/twenty-front/src/modules/domain-manager/hooks/useIsCurrentLocationOnAWorkspaceSubdomain.ts @@ -1,8 +1,8 @@ -import { isDefined } from '~/utils/isDefined'; import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState'; -import { useRecoilValue } from 'recoil'; -import { domainConfigurationState } from '@/domain-manager/states/domainConfigurationState'; import { useReadDefaultDomainFromConfiguration } from '@/domain-manager/hooks/useReadDefaultDomainFromConfiguration'; +import { domainConfigurationState } from '@/domain-manager/states/domainConfigurationState'; +import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; export const useIsCurrentLocationOnAWorkspaceSubdomain = () => { const { defaultDomain } = useReadDefaultDomainFromConfiguration(); diff --git a/packages/twenty-front/src/modules/domain-manager/hooks/useReadWorkspaceSubdomainFromCurrentLocation.ts b/packages/twenty-front/src/modules/domain-manager/hooks/useReadWorkspaceSubdomainFromCurrentLocation.ts index fc053da0931e..0fb57acf6fdf 100644 --- a/packages/twenty-front/src/modules/domain-manager/hooks/useReadWorkspaceSubdomainFromCurrentLocation.ts +++ b/packages/twenty-front/src/modules/domain-manager/hooks/useReadWorkspaceSubdomainFromCurrentLocation.ts @@ -1,7 +1,7 @@ -import { isDefined } from '~/utils/isDefined'; +import { useIsCurrentLocationOnAWorkspaceSubdomain } from '@/domain-manager/hooks/useIsCurrentLocationOnAWorkspaceSubdomain'; import { domainConfigurationState } from '@/domain-manager/states/domainConfigurationState'; import { useRecoilValue } from 'recoil'; -import { useIsCurrentLocationOnAWorkspaceSubdomain } from '@/domain-manager/hooks/useIsCurrentLocationOnAWorkspaceSubdomain'; +import { isDefined } from 'twenty-shared'; export const useReadWorkspaceSubdomainFromCurrentLocation = () => { const domainConfiguration = useRecoilValue(domainConfigurationState); diff --git a/packages/twenty-front/src/modules/error-handler/components/SentryInitEffect.tsx b/packages/twenty-front/src/modules/error-handler/components/SentryInitEffect.tsx index f97336d14146..5944d7766e5a 100644 --- a/packages/twenty-front/src/modules/error-handler/components/SentryInitEffect.tsx +++ b/packages/twenty-front/src/modules/error-handler/components/SentryInitEffect.tsx @@ -7,8 +7,8 @@ import { currentUserState } from '@/auth/states/currentUserState'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { sentryConfigState } from '@/client-config/states/sentryConfigState'; +import { isDefined } from 'twenty-shared'; import { REACT_APP_SERVER_BASE_URL } from '~/config'; -import { isDefined } from '~/utils/isDefined'; export const SentryInitEffect = () => { const sentryConfig = useRecoilValue(sentryConfigState); diff --git a/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavoritesFolders.tsx b/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavoritesFolders.tsx index ffa69d783625..bd56909d1765 100644 --- a/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavoritesFolders.tsx +++ b/packages/twenty-front/src/modules/favorites/components/CurrentWorkspaceMemberFavoritesFolders.tsx @@ -13,7 +13,8 @@ import { NavigationDrawerSectionTitle } from '@/ui/navigation/navigation-drawer/ import { useNavigationSection } from '@/ui/navigation/navigation-drawer/hooks/useNavigationSection'; import { useLingui } from '@lingui/react/macro'; import { useRecoilState, useRecoilValue } from 'recoil'; -import { IconFolderPlus, LightIconButton, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconFolderPlus, LightIconButton } from 'twenty-ui'; export const CurrentWorkspaceMemberFavoritesFolders = () => { const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState); diff --git a/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPickerEffect.tsx b/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPickerEffect.tsx index 28263ed5f57f..43edd1bb048c 100644 --- a/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPickerEffect.tsx +++ b/packages/twenty-front/src/modules/favorites/favorite-folder-picker/components/FavoriteFolderPickerEffect.tsx @@ -1,6 +1,6 @@ import { useEffect } from 'react'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; import { favoriteFolderIdsPickerComponentState } from '@/favorites/favorite-folder-picker/states/favoriteFolderIdPickerComponentState'; diff --git a/packages/twenty-front/src/modules/favorites/favorite-folder-picker/hooks/useFavoriteFolderPicker.ts b/packages/twenty-front/src/modules/favorites/favorite-folder-picker/hooks/useFavoriteFolderPicker.ts index 1078542218a7..8ae5b887a72c 100644 --- a/packages/twenty-front/src/modules/favorites/favorite-folder-picker/hooks/useFavoriteFolderPicker.ts +++ b/packages/twenty-front/src/modules/favorites/favorite-folder-picker/hooks/useFavoriteFolderPicker.ts @@ -9,7 +9,7 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; type useFavoriteFolderPickerProps = { record?: ObjectRecord; diff --git a/packages/twenty-front/src/modules/favorites/favorite-folder-picker/states/selectors/favoriteFoldersComponentSelector.ts b/packages/twenty-front/src/modules/favorites/favorite-folder-picker/states/selectors/favoriteFoldersComponentSelector.ts index 8158c742aa5b..55803f785f94 100644 --- a/packages/twenty-front/src/modules/favorites/favorite-folder-picker/states/selectors/favoriteFoldersComponentSelector.ts +++ b/packages/twenty-front/src/modules/favorites/favorite-folder-picker/states/selectors/favoriteFoldersComponentSelector.ts @@ -3,7 +3,7 @@ import { favoriteFolderIdsPickerComponentState } from '@/favorites/favorite-fold import { favoriteFolderPickerComponentFamilyState } from '@/favorites/favorite-folder-picker/states/favoriteFolderPickerComponentFamilyState'; import { FavoriteFolder } from '@/favorites/types/FavoriteFolder'; import { createComponentSelectorV2 } from '@/ui/utilities/state/component-state/utils/createComponentSelectorV2'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const favoriteFoldersComponentSelector = createComponentSelectorV2< FavoriteFolder[] diff --git a/packages/twenty-front/src/modules/favorites/utils/getObjectMetadataLabelPluralFromViewId.ts b/packages/twenty-front/src/modules/favorites/utils/getObjectMetadataLabelPluralFromViewId.ts index ca2511d8c6d3..91e3a0ec0ff2 100644 --- a/packages/twenty-front/src/modules/favorites/utils/getObjectMetadataLabelPluralFromViewId.ts +++ b/packages/twenty-front/src/modules/favorites/utils/getObjectMetadataLabelPluralFromViewId.ts @@ -1,6 +1,6 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { View } from '@/views/types/View'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; type ReturnType = { labelPlural: string; diff --git a/packages/twenty-front/src/modules/favorites/utils/sortFavorites.ts b/packages/twenty-front/src/modules/favorites/utils/sortFavorites.ts index 59e79004dea4..46d6d32fb21d 100644 --- a/packages/twenty-front/src/modules/favorites/utils/sortFavorites.ts +++ b/packages/twenty-front/src/modules/favorites/utils/sortFavorites.ts @@ -5,7 +5,7 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { ObjectRecordIdentifier } from '@/object-record/types/ObjectRecordIdentifier'; import { AppPath } from '@/types/AppPath'; import { View } from '@/views/types/View'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { getAppPath } from '~/utils/navigation/getAppPath'; import { getObjectMetadataLabelPluralFromViewId } from './getObjectMetadataLabelPluralFromViewId'; diff --git a/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx b/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx index 9ceb953e22e7..0082634001d1 100644 --- a/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx +++ b/packages/twenty-front/src/modules/information-banner/components/InformationBannerWrapper.tsx @@ -6,7 +6,7 @@ import { InformationBannerReconnectAccountInsufficientPermissions } from '@/info import { useIsWorkspaceActivationStatusSuspended } from '@/workspace/hooks/useIsWorkspaceActivationStatusSuspended'; import { useSubscriptionStatus } from '@/workspace/hooks/useSubscriptionStatus'; import styled from '@emotion/styled'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { SubscriptionStatus } from '~/generated-metadata/graphql'; const StyledInformationBannerWrapper = styled.div` diff --git a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerBillingSubscriptionPaused.tsx b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerBillingSubscriptionPaused.tsx index c180f31236d6..92da0912cf6e 100644 --- a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerBillingSubscriptionPaused.tsx +++ b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerBillingSubscriptionPaused.tsx @@ -1,7 +1,7 @@ import { useRedirect } from '@/domain-manager/hooks/useRedirect'; import { InformationBanner } from '@/information-banner/components/InformationBanner'; import { SettingsPath } from '@/types/SettingsPath'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useBillingPortalSessionQuery } from '~/generated/graphql'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; diff --git a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerFailPaymentInfo.tsx b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerFailPaymentInfo.tsx index b1cc81abd1c6..244f7fdd6764 100644 --- a/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerFailPaymentInfo.tsx +++ b/packages/twenty-front/src/modules/information-banner/components/billing/InformationBannerFailPaymentInfo.tsx @@ -1,9 +1,9 @@ +import { useRedirect } from '@/domain-manager/hooks/useRedirect'; import { InformationBanner } from '@/information-banner/components/InformationBanner'; import { SettingsPath } from '@/types/SettingsPath'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useBillingPortalSessionQuery } from '~/generated/graphql'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; -import { useRedirect } from '@/domain-manager/hooks/useRedirect'; export const InformationBannerFailPaymentInfo = () => { const { redirect } = useRedirect(); diff --git a/packages/twenty-front/src/modules/localization/utils/detectTimeFormat.ts b/packages/twenty-front/src/modules/localization/utils/detectTimeFormat.ts index d6d914d83637..532178c11263 100644 --- a/packages/twenty-front/src/modules/localization/utils/detectTimeFormat.ts +++ b/packages/twenty-front/src/modules/localization/utils/detectTimeFormat.ts @@ -1,5 +1,5 @@ import { TimeFormat } from '@/localization/constants/TimeFormat'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const detectTimeFormat = (): keyof typeof TimeFormat => { const isHour12 = Intl.DateTimeFormat(navigator.language, { diff --git a/packages/twenty-front/src/modules/navigation/hooks/useDefaultHomePagePath.ts b/packages/twenty-front/src/modules/navigation/hooks/useDefaultHomePagePath.ts index cb3168ab83b1..b3fa4412d0f5 100644 --- a/packages/twenty-front/src/modules/navigation/hooks/useDefaultHomePagePath.ts +++ b/packages/twenty-front/src/modules/navigation/hooks/useDefaultHomePagePath.ts @@ -8,7 +8,7 @@ import { AppPath } from '@/types/AppPath'; import { View } from '@/views/types/View'; import { useCallback, useMemo } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { getAppPath } from '~/utils/navigation/getAppPath'; export const useDefaultHomePagePath = () => { diff --git a/packages/twenty-front/src/modules/navigation/hooks/useLastVisitedObjectMetadataItem.ts b/packages/twenty-front/src/modules/navigation/hooks/useLastVisitedObjectMetadataItem.ts index fca96e2cb395..e95fa257937e 100644 --- a/packages/twenty-front/src/modules/navigation/hooks/useLastVisitedObjectMetadataItem.ts +++ b/packages/twenty-front/src/modules/navigation/hooks/useLastVisitedObjectMetadataItem.ts @@ -5,7 +5,7 @@ import { AppPath } from '@/types/AppPath'; import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState'; import { extractComponentState } from '@/ui/utilities/state/component-state/utils/extractComponentState'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; import { getAppPath } from '~/utils/navigation/getAppPath'; diff --git a/packages/twenty-front/src/modules/navigation/hooks/useLastVisitedView.ts b/packages/twenty-front/src/modules/navigation/hooks/useLastVisitedView.ts index 09f4190de306..d0abf01e1e92 100644 --- a/packages/twenty-front/src/modules/navigation/hooks/useLastVisitedView.ts +++ b/packages/twenty-front/src/modules/navigation/hooks/useLastVisitedView.ts @@ -4,7 +4,7 @@ import { lastVisitedViewPerObjectMetadataItemStateSelector } from '@/navigation/ import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; import { extractComponentState } from '@/ui/utilities/state/component-state/utils/extractComponentState'; import { useRecoilState, useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useLastVisitedView = () => { const currentWorkspace = useRecoilValue(currentWorkspaceState); diff --git a/packages/twenty-front/src/modules/navigation/states/selectors/lastVisitedViewPerObjectMetadataItemStateSelector.ts b/packages/twenty-front/src/modules/navigation/states/selectors/lastVisitedViewPerObjectMetadataItemStateSelector.ts index efb5c6594e4c..425837536688 100644 --- a/packages/twenty-front/src/modules/navigation/states/selectors/lastVisitedViewPerObjectMetadataItemStateSelector.ts +++ b/packages/twenty-front/src/modules/navigation/states/selectors/lastVisitedViewPerObjectMetadataItemStateSelector.ts @@ -1,6 +1,6 @@ import { lastVisitedViewPerObjectMetadataItemState } from '@/navigation/states/lastVisitedViewPerObjectMetadataItemState'; import { createComponentSelector } from '@/ui/utilities/state/component-state/utils/createComponentSelector'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const lastVisitedViewPerObjectMetadataItemStateSelector = createComponentSelector<Record<string, string> | null>({ diff --git a/packages/twenty-front/src/modules/object-metadata/components/RemoteNavigationDrawerSection.tsx b/packages/twenty-front/src/modules/object-metadata/components/RemoteNavigationDrawerSection.tsx index 1ad2595e821c..6881b6eaeb5a 100644 --- a/packages/twenty-front/src/modules/object-metadata/components/RemoteNavigationDrawerSection.tsx +++ b/packages/twenty-front/src/modules/object-metadata/components/RemoteNavigationDrawerSection.tsx @@ -1,5 +1,5 @@ import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { currentUserState } from '@/auth/states/currentUserState'; import { NavigationDrawerSectionForObjectMetadataItems } from '@/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems'; diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItemById.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItemById.ts index 1daffe5f9eba..0960deee4a27 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItemById.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItemById.ts @@ -1,6 +1,6 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useFieldMetadataItemById = (fieldMetadataId: string) => { const objectMetadataItems = useRecoilValue(objectMetadataItemsState); diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useGetFieldMetadataItemById.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useGetFieldMetadataItemById.ts index c1827d28474e..0d5e433cc21c 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/useGetFieldMetadataItemById.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useGetFieldMetadataItemById.ts @@ -1,6 +1,6 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useGetFieldMetadataItemById = () => { const objectMetadataItems = useRecoilValue(objectMetadataItemsState); diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItem.ts index 0a8d3e8600a0..5247be17c667 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItem.ts @@ -3,7 +3,7 @@ import { useRecoilValue } from 'recoil'; import { ObjectMetadataItemNotFoundError } from '@/object-metadata/errors/ObjectMetadataNotFoundError'; import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { ObjectMetadataItemIdentifier } from '../types/ObjectMetadataItemIdentifier'; diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItemById.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItemById.ts index 1783ea61fd1b..565aca721c9e 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItemById.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItemById.ts @@ -1,7 +1,7 @@ import { useRecoilValue } from 'recoil'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useObjectMetadataItemById = ({ objectId, diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNamePluralFromSingular.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNamePluralFromSingular.ts index c407749ab641..1a5f1c004772 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNamePluralFromSingular.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNamePluralFromSingular.ts @@ -2,9 +2,8 @@ import { useRecoilValue } from 'recoil'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector'; -import { isWorkspaceActiveOrSuspended } from 'twenty-shared'; +import { isDefined, isWorkspaceActiveOrSuspended } from 'twenty-shared'; import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems'; -import { isDefined } from '~/utils/isDefined'; export const useObjectNamePluralFromSingular = ({ objectNameSingular, diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNameSingularFromPlural.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNameSingularFromPlural.ts index ce387eb99bb3..441372a12477 100644 --- a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNameSingularFromPlural.ts +++ b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNameSingularFromPlural.ts @@ -2,9 +2,8 @@ import { useRecoilValue } from 'recoil'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector'; -import { isWorkspaceActiveOrSuspended } from 'twenty-shared'; +import { isDefined, isWorkspaceActiveOrSuspended } from 'twenty-shared'; import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems'; -import { isDefined } from '~/utils/isDefined'; export const useObjectNameSingularFromPlural = ({ objectNamePlural, diff --git a/packages/twenty-front/src/modules/object-metadata/utils/getAvatarUrl.ts b/packages/twenty-front/src/modules/object-metadata/utils/getAvatarUrl.ts index 00243cc5a94d..69950aea0a86 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/getAvatarUrl.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/getAvatarUrl.ts @@ -3,10 +3,9 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { getCompanyDomainName } from '@/object-metadata/utils/getCompanyDomainName'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { getImageAbsoluteURI } from 'twenty-shared'; +import { getImageAbsoluteURI, isDefined } from 'twenty-shared'; import { REACT_APP_SERVER_BASE_URL } from '~/config'; import { getLogoUrlFromDomainName } from '~/utils'; -import { isDefined } from '~/utils/isDefined'; import { getImageIdentifierFieldValue } from './getImageIdentifierFieldValue'; export const getAvatarUrl = ( diff --git a/packages/twenty-front/src/modules/object-metadata/utils/getCompanyDomainName.ts b/packages/twenty-front/src/modules/object-metadata/utils/getCompanyDomainName.ts index a408c8dbda61..1cdc658cf356 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/getCompanyDomainName.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/getCompanyDomainName.ts @@ -1,5 +1,5 @@ import { Company } from '@/companies/types/Company'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; // temporary, to remove once domainName has been fully migrated to Links type export const getCompanyDomainName = (company: Company) => { diff --git a/packages/twenty-front/src/modules/object-metadata/utils/getImageIdentifierFieldValue.ts b/packages/twenty-front/src/modules/object-metadata/utils/getImageIdentifierFieldValue.ts index 2c04bfe10cae..0cbccc42abd4 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/getImageIdentifierFieldValue.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/getImageIdentifierFieldValue.ts @@ -1,6 +1,6 @@ import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const getImageIdentifierFieldValue = ( record: ObjectRecord, diff --git a/packages/twenty-front/src/modules/object-metadata/utils/getLabelIdentifierFieldValue.ts b/packages/twenty-front/src/modules/object-metadata/utils/getLabelIdentifierFieldValue.ts index 368cd41f3736..9ae2d9fe0d49 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/getLabelIdentifierFieldValue.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/getLabelIdentifierFieldValue.ts @@ -1,8 +1,8 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; export const getLabelIdentifierFieldValue = ( record: ObjectRecord, diff --git a/packages/twenty-front/src/modules/object-metadata/utils/getObjectOrderByField.ts b/packages/twenty-front/src/modules/object-metadata/utils/getObjectOrderByField.ts index 35bee6877849..614f6ab50b47 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/getObjectOrderByField.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/getObjectOrderByField.ts @@ -4,7 +4,7 @@ import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/get import { getOrderByForFieldMetadataType } from '@/object-metadata/utils/getOrderByForFieldMetadataType'; import { RecordGqlOperationOrderBy } from '@/object-record/graphql/types/RecordGqlOperationOrderBy'; import { OrderBy } from '@/types/OrderBy'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const getOrderByFieldForObjectMetadataItem = ( objectMetadataItem: ObjectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-metadata/utils/isLabelIdentifierField.ts b/packages/twenty-front/src/modules/object-metadata/utils/isLabelIdentifierField.ts index 1a40a876727a..d5730a9ef5c4 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/isLabelIdentifierField.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/isLabelIdentifierField.ts @@ -1,6 +1,6 @@ import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const DEFAULT_LABEL_IDENTIFIER_FIELD_NAME = 'name'; diff --git a/packages/twenty-front/src/modules/object-metadata/utils/shouldFieldBeQueried.ts b/packages/twenty-front/src/modules/object-metadata/utils/shouldFieldBeQueried.ts index 6c2d25556b2a..2f4d694719e9 100644 --- a/packages/twenty-front/src/modules/object-metadata/utils/shouldFieldBeQueried.ts +++ b/packages/twenty-front/src/modules/object-metadata/utils/shouldFieldBeQueried.ts @@ -1,7 +1,7 @@ import { RecordGqlOperationGqlRecordFields } from '@/object-record/graphql/types/RecordGqlOperationGqlRecordFields'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; import { FieldMetadataItem } from '../types/FieldMetadataItem'; diff --git a/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterAddFilterRuleSelect.tsx b/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterAddFilterRuleSelect.tsx index abd71f5ac2fe..1c259f466747 100644 --- a/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterAddFilterRuleSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterAddFilterRuleSelect.tsx @@ -12,13 +12,8 @@ import { availableFilterDefinitionsComponentState } from '@/views/states/availab import { ViewFilterGroup } from '@/views/types/ViewFilterGroup'; import { ViewFilterGroupLogicalOperator } from '@/views/types/ViewFilterGroupLogicalOperator'; import { useCallback } from 'react'; -import { - IconLibraryPlus, - IconPlus, - isDefined, - LightButton, - MenuItem, -} from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconLibraryPlus, IconPlus, LightButton, MenuItem } from 'twenty-ui'; import { v4 } from 'uuid'; type AdvancedFilterAddFilterRuleSelectProps = { diff --git a/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRootLevelViewFilterGroup.tsx b/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRootLevelViewFilterGroup.tsx index 9518cef60a96..f4bbce2670fa 100644 --- a/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRootLevelViewFilterGroup.tsx +++ b/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRootLevelViewFilterGroup.tsx @@ -5,7 +5,7 @@ import { AdvancedFilterViewFilter } from '@/object-record/advanced-filter/compon import { AdvancedFilterViewFilterGroup } from '@/object-record/advanced-filter/components/AdvancedFilterViewFilterGroup'; import { useCurrentViewViewFilterGroup } from '@/object-record/advanced-filter/hooks/useCurrentViewViewFilterGroup'; import styled from '@emotion/styled'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; const StyledRow = styled.div` display: flex; diff --git a/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRuleOptionsDropdown.tsx b/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRuleOptionsDropdown.tsx index bda3b7a42c4d..85e0d3a789e4 100644 --- a/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRuleOptionsDropdown.tsx +++ b/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRuleOptionsDropdown.tsx @@ -6,7 +6,8 @@ import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { ADVANCED_FILTER_DROPDOWN_ID } from '@/views/constants/AdvancedFilterDropdownId'; import { useDeleteCombinedViewFilters } from '@/views/hooks/useDeleteCombinedViewFilters'; -import { isDefined, MenuItem } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { MenuItem } from 'twenty-ui'; type AdvancedFilterRuleOptionsDropdownProps = | { diff --git a/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterViewFilterOperandSelect.tsx b/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterViewFilterOperandSelect.tsx index eda1fe1c1a41..8daba133cca7 100644 --- a/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterViewFilterOperandSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterViewFilterOperandSelect.tsx @@ -10,7 +10,8 @@ import { ADVANCED_FILTER_DROPDOWN_ID } from '@/views/constants/AdvancedFilterDro import { useUpsertCombinedViewFilters } from '@/views/hooks/useUpsertCombinedViewFilters'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import styled from '@emotion/styled'; -import { isDefined, MenuItem } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { MenuItem } from 'twenty-ui'; const StyledContainer = styled.div` flex: 1; diff --git a/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useCurrentViewViewFilterGroup.ts b/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useCurrentViewViewFilterGroup.ts index 6b38e861a062..3e08f6ccc0f6 100644 --- a/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useCurrentViewViewFilterGroup.ts +++ b/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useCurrentViewViewFilterGroup.ts @@ -1,7 +1,7 @@ import { useGetCurrentView } from '@/views/hooks/useGetCurrentView'; import { ViewFilter } from '@/views/types/ViewFilter'; import { ViewFilterGroup } from '@/views/types/ViewFilterGroup'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useCurrentViewViewFilterGroup = ({ viewFilterGroupId, diff --git a/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useDeleteCombinedViewFilterGroup.ts b/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useDeleteCombinedViewFilterGroup.ts index b6149454c89e..c9a7ad93ca81 100644 --- a/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useDeleteCombinedViewFilterGroup.ts +++ b/packages/twenty-front/src/modules/object-record/advanced-filter/hooks/useDeleteCombinedViewFilterGroup.ts @@ -6,7 +6,7 @@ import { useGetViewFromCache } from '@/views/hooks/useGetViewFromCache'; import { currentViewIdComponentState } from '@/views/states/currentViewIdComponentState'; import { unsavedToDeleteViewFilterGroupIdsComponentFamilyState } from '@/views/states/unsavedToDeleteViewFilterGroupIdsComponentFamilyState'; import { unsavedToUpsertViewFilterGroupsComponentFamilyState } from '@/views/states/unsavedToUpsertViewFilterGroupsComponentFamilyState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useDeleteCombinedViewFilterGroup = ( viewBarComponentId?: string, diff --git a/packages/twenty-front/src/modules/object-record/cache/hooks/useCreateManyRecordsInCache.ts b/packages/twenty-front/src/modules/object-record/cache/hooks/useCreateManyRecordsInCache.ts index 31fb896556d8..6435f1e0fcfe 100644 --- a/packages/twenty-front/src/modules/object-record/cache/hooks/useCreateManyRecordsInCache.ts +++ b/packages/twenty-front/src/modules/object-record/cache/hooks/useCreateManyRecordsInCache.ts @@ -3,7 +3,7 @@ import { ObjectMetadataItemIdentifier } from '@/object-metadata/types/ObjectMeta import { useCreateOneRecordInCache } from '@/object-record/cache/hooks/useCreateOneRecordInCache'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { prefillRecord } from '@/object-record/utils/prefillRecord'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useCreateManyRecordsInCache = <T extends ObjectRecord>({ objectNameSingular, diff --git a/packages/twenty-front/src/modules/object-record/cache/hooks/useReadFindManyRecordsQueryInCache.ts b/packages/twenty-front/src/modules/object-record/cache/hooks/useReadFindManyRecordsQueryInCache.ts index cab73ebbd51a..3529b286eaf3 100644 --- a/packages/twenty-front/src/modules/object-record/cache/hooks/useReadFindManyRecordsQueryInCache.ts +++ b/packages/twenty-front/src/modules/object-record/cache/hooks/useReadFindManyRecordsQueryInCache.ts @@ -7,7 +7,7 @@ import { RecordGqlOperationFindManyResult } from '@/object-record/graphql/types/ import { RecordGqlOperationVariables } from '@/object-record/graphql/types/RecordGqlOperationVariables'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { generateFindManyRecordsQuery } from '@/object-record/utils/generateFindManyRecordsQuery'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useReadFindManyRecordsQueryInCache = ({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/cache/utils/getRecordFromRecordNode.ts b/packages/twenty-front/src/modules/object-record/cache/utils/getRecordFromRecordNode.ts index 23daf1ec6290..c2c9b1bcb703 100644 --- a/packages/twenty-front/src/modules/object-record/cache/utils/getRecordFromRecordNode.ts +++ b/packages/twenty-front/src/modules/object-record/cache/utils/getRecordFromRecordNode.ts @@ -3,7 +3,7 @@ import pick from 'lodash.pick'; import { getRecordsFromRecordConnection } from '@/object-record/cache/utils/getRecordsFromRecordConnection'; import { RecordGqlNode } from '@/object-record/graphql/types/RecordGqlNode'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; export const getRecordFromRecordNode = <T extends ObjectRecord>({ diff --git a/packages/twenty-front/src/modules/object-record/cache/utils/getRecordNodeFromRecord.ts b/packages/twenty-front/src/modules/object-record/cache/utils/getRecordNodeFromRecord.ts index 66c58312b14c..f66f4c8e15da 100644 --- a/packages/twenty-front/src/modules/object-record/cache/utils/getRecordNodeFromRecord.ts +++ b/packages/twenty-front/src/modules/object-record/cache/utils/getRecordNodeFromRecord.ts @@ -7,11 +7,11 @@ import { getRecordConnectionFromRecords } from '@/object-record/cache/utils/getR import { getRefName } from '@/object-record/cache/utils/getRefName'; import { RecordGqlNode } from '@/object-record/graphql/types/RecordGqlNode'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType, RelationDefinitionType, } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; import { pascalCase } from '~/utils/string/pascalCase'; export const getRecordNodeFromRecord = <T extends ObjectRecord>({ diff --git a/packages/twenty-front/src/modules/object-record/graphql/utils/generateDepthOneRecordGqlFields.ts b/packages/twenty-front/src/modules/object-record/graphql/utils/generateDepthOneRecordGqlFields.ts index 7870c00cc9fb..fcc768267df4 100644 --- a/packages/twenty-front/src/modules/object-record/graphql/utils/generateDepthOneRecordGqlFields.ts +++ b/packages/twenty-front/src/modules/object-record/graphql/utils/generateDepthOneRecordGqlFields.ts @@ -1,5 +1,5 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const generateDepthOneRecordGqlFields = ({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useAggregateRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useAggregateRecords.ts index 19262db753c2..0805c2f3fdef 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useAggregateRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useAggregateRecords.ts @@ -7,7 +7,7 @@ import { RecordGqlOperationFindManyResult } from '@/object-record/graphql/types/ import { useAggregateRecordsQuery } from '@/object-record/hooks/useAggregateRecordsQuery'; import { ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations'; import isEmpty from 'lodash.isempty'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export type AggregateRecordsData = { [fieldName: string]: { diff --git a/packages/twenty-front/src/modules/object-record/hooks/useAggregateRecordsQuery.ts b/packages/twenty-front/src/modules/object-record/hooks/useAggregateRecordsQuery.ts index 3333ae2817ba..8c6bb32126a6 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useAggregateRecordsQuery.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useAggregateRecordsQuery.ts @@ -5,7 +5,7 @@ import { ExtendedAggregateOperations } from '@/object-record/record-table/types/ import { generateAggregateQuery } from '@/object-record/utils/generateAggregateQuery'; import { getAvailableAggregationsFromObjectFields } from '@/object-record/utils/getAvailableAggregationsFromObjectFields'; import { useMemo } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export type GqlFieldToFieldMap = { [gqlField: string]: [ diff --git a/packages/twenty-front/src/modules/object-record/hooks/useAttachRelatedRecordFromRecord.ts b/packages/twenty-front/src/modules/object-record/hooks/useAttachRelatedRecordFromRecord.ts index 17c80b4c1887..ddbda55874a4 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useAttachRelatedRecordFromRecord.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useAttachRelatedRecordFromRecord.ts @@ -7,7 +7,7 @@ import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordF import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/generateDepthOneRecordGqlFields'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type useAttachRelatedRecordFromRecordProps = { recordObjectNameSingular: string; diff --git a/packages/twenty-front/src/modules/object-record/hooks/useCreateManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useCreateManyRecords.ts index 0988811a6083..46d3bfcfe3d9 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useCreateManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useCreateManyRecords.ts @@ -17,7 +17,7 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { computeOptimisticRecordFromInput } from '@/object-record/utils/computeOptimisticRecordFromInput'; import { getCreateManyRecordsMutationResponseField } from '@/object-record/utils/getCreateManyRecordsMutationResponseField'; import { sanitizeRecordInput } from '@/object-record/utils/sanitizeRecordInput'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type PartialObjectRecordWithId = Partial<ObjectRecord> & { id: string; diff --git a/packages/twenty-front/src/modules/object-record/hooks/useCreateOneRecord.ts b/packages/twenty-front/src/modules/object-record/hooks/useCreateOneRecord.ts index cb3acf6576c7..16a2205d684f 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useCreateOneRecord.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useCreateOneRecord.ts @@ -18,7 +18,7 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { computeOptimisticRecordFromInput } from '@/object-record/utils/computeOptimisticRecordFromInput'; import { getCreateOneRecordMutationResponseField } from '@/object-record/utils/getCreateOneRecordMutationResponseField'; import { sanitizeRecordInput } from '@/object-record/utils/sanitizeRecordInput'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type useCreateOneRecordProps = { objectNameSingular: string; diff --git a/packages/twenty-front/src/modules/object-record/hooks/useDeleteManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useDeleteManyRecords.ts index cbeaf1bce224..ca03bd89a566 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useDeleteManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useDeleteManyRecords.ts @@ -14,8 +14,7 @@ import { useRefetchAggregateQueries } from '@/object-record/hooks/useRefetchAggr import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { getDeleteManyRecordsMutationResponseField } from '@/object-record/utils/getDeleteManyRecordsMutationResponseField'; import { useRecoilValue } from 'recoil'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from '~/utils/isDefined'; +import { capitalize, isDefined } from 'twenty-shared'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; import { sleep } from '~/utils/sleep'; diff --git a/packages/twenty-front/src/modules/object-record/hooks/useDeleteOneRecord.ts b/packages/twenty-front/src/modules/object-record/hooks/useDeleteOneRecord.ts index 58dc741e1711..2d3846bd3c33 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useDeleteOneRecord.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useDeleteOneRecord.ts @@ -11,8 +11,7 @@ import { useDeleteOneRecordMutation } from '@/object-record/hooks/useDeleteOneRe import { useRefetchAggregateQueries } from '@/object-record/hooks/useRefetchAggregateQueries'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { getDeleteOneRecordMutationResponseField } from '@/object-record/utils/getDeleteOneRecordMutationResponseField'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from 'twenty-ui'; +import { capitalize, isDefined } from 'twenty-shared'; type useDeleteOneRecordProps = { objectNameSingular: string; diff --git a/packages/twenty-front/src/modules/object-record/hooks/useDestroyManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useDestroyManyRecords.ts index e26be2c46ca7..b434efa94000 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useDestroyManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useDestroyManyRecords.ts @@ -11,8 +11,7 @@ import { useDestroyManyRecordsMutation } from '@/object-record/hooks/useDestroyM import { useRefetchAggregateQueries } from '@/object-record/hooks/useRefetchAggregateQueries'; import { getDestroyManyRecordsMutationResponseField } from '@/object-record/utils/getDestroyManyRecordsMutationResponseField'; import { useRecoilValue } from 'recoil'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from '~/utils/isDefined'; +import { capitalize, isDefined } from 'twenty-shared'; import { sleep } from '~/utils/sleep'; type useDestroyManyRecordProps = { diff --git a/packages/twenty-front/src/modules/object-record/hooks/useFetchMoreRecordsWithPagination.ts b/packages/twenty-front/src/modules/object-record/hooks/useFetchMoreRecordsWithPagination.ts index 0edc1641241f..abdbf763949f 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useFetchMoreRecordsWithPagination.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useFetchMoreRecordsWithPagination.ts @@ -23,8 +23,7 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { OnFindManyRecordsCompleted } from '@/object-record/types/OnFindManyRecordsCompleted'; import { filterUniqueRecordEdgesByCursor } from '@/object-record/utils/filterUniqueRecordEdgesByCursor'; import { getQueryIdentifier } from '@/object-record/utils/getQueryIdentifier'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from '~/utils/isDefined'; +import { capitalize, isDefined } from 'twenty-shared'; import { cursorFamilyState } from '../states/cursorFamilyState'; import { hasNextPageFamilyState } from '../states/hasNextPageFamilyState'; diff --git a/packages/twenty-front/src/modules/object-record/hooks/useFindOneRecord.ts b/packages/twenty-front/src/modules/object-record/hooks/useFindOneRecord.ts index 0ddbde032ac3..34c714aea8e9 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useFindOneRecord.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useFindOneRecord.ts @@ -9,7 +9,7 @@ import { RecordGqlOperationGqlRecordFields } from '@/object-record/graphql/types import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/generateDepthOneRecordGqlFields'; import { useFindOneRecordQuery } from '@/object-record/hooks/useFindOneRecordQuery'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useFindOneRecord = <T extends ObjectRecord = ObjectRecord>({ objectNameSingular, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useHandleFindManyRecordsCompleted.ts b/packages/twenty-front/src/modules/object-record/hooks/useHandleFindManyRecordsCompleted.ts index f0f89bfb2e6f..587d77bc5a05 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useHandleFindManyRecordsCompleted.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useHandleFindManyRecordsCompleted.ts @@ -6,7 +6,7 @@ import { RecordGqlOperationFindManyResult } from '@/object-record/graphql/types/ import { cursorFamilyState } from '@/object-record/states/cursorFamilyState'; import { hasNextPageFamilyState } from '@/object-record/states/hasNextPageFamilyState'; import { OnFindManyRecordsCompleted } from '@/object-record/types/OnFindManyRecordsCompleted'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useHandleFindManyRecordsCompleted = <T>({ queryIdentifier, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useLazyFetchAllRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useLazyFetchAllRecords.ts index 1bc1c3f5d94b..b07b66fe5f13 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useLazyFetchAllRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useLazyFetchAllRecords.ts @@ -1,10 +1,10 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; +import { DEFAULT_QUERY_PAGE_SIZE } from '@/object-record/constants/DefaultQueryPageSize'; import { UseFindManyRecordsParams } from '@/object-record/hooks/useFetchMoreRecordsWithPagination'; import { useLazyFindManyRecords } from '@/object-record/hooks/useLazyFindManyRecords'; import { useCallback, useState } from 'react'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { sleep } from '~/utils/sleep'; -import { DEFAULT_QUERY_PAGE_SIZE } from '@/object-record/constants/DefaultQueryPageSize'; type UseLazyFetchAllRecordIdsParams<T> = Omit< UseFindManyRecordsParams<T>, diff --git a/packages/twenty-front/src/modules/object-record/hooks/useRestoreManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useRestoreManyRecords.ts index f5bef1f9f569..acee58733521 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useRestoreManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useRestoreManyRecords.ts @@ -12,8 +12,7 @@ import { useRestoreManyRecordsMutation } from '@/object-record/hooks/useRestoreM import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { getRestoreManyRecordsMutationResponseField } from '@/object-record/utils/getRestoreManyRecordsMutationResponseField'; import { useRecoilValue } from 'recoil'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from '~/utils/isDefined'; +import { capitalize, isDefined } from 'twenty-shared'; import { sleep } from '~/utils/sleep'; type useRestoreManyRecordProps = { diff --git a/packages/twenty-front/src/modules/object-record/hooks/useSearchRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useSearchRecords.ts index 7c1f90162597..1e8dae6bf889 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useSearchRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useSearchRecords.ts @@ -13,7 +13,7 @@ import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useQuery, WatchQueryFetchPolicy } from '@apollo/client'; import { useMemo } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { logError } from '~/utils/logError'; export type UseSearchRecordsParams = ObjectMetadataItemIdentifier & diff --git a/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecord.ts b/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecord.ts index 3cc80ffc0397..e1859244dc77 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecord.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useUpdateOneRecord.ts @@ -13,8 +13,7 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { computeOptimisticRecordFromInput } from '@/object-record/utils/computeOptimisticRecordFromInput'; import { getUpdateOneRecordMutationResponseField } from '@/object-record/utils/getUpdateOneRecordMutationResponseField'; import { sanitizeRecordInput } from '@/object-record/utils/sanitizeRecordInput'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from 'twenty-ui'; +import { capitalize, isDefined } from 'twenty-shared'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; type useUpdateOneRecordProps = { diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownBooleanSelect.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownBooleanSelect.tsx index 6c7ac92433ed..fe8295eecf4f 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownBooleanSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownBooleanSelect.tsx @@ -13,8 +13,8 @@ import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/Drop import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { SelectableList } from '@/ui/layout/selectable-list/components/SelectableList'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; +import { isDefined } from 'twenty-shared'; import { IconCheck } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; const StyledBooleanSelectContainer = styled.div<{ selected?: boolean }>` align-items: center; diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownDateInput.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownDateInput.tsx index 3fdec73c59aa..77b980e6fca4 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownDateInput.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownDateInput.tsx @@ -15,7 +15,7 @@ import { VariableDateViewFilterValueUnit, } from '@/views/view-filter-value/utils/resolveDateViewFilterValue'; import { useState } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; export const ObjectFilterDropdownDateInput = () => { diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterInput.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterInput.tsx index 6d792baa8ebc..891521ee654f 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterInput.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterInput.tsx @@ -9,7 +9,7 @@ import { ObjectFilterDropdownTextSearchInput } from '@/object-record/object-filt import { isActorSourceCompositeFilter } from '@/object-record/object-filter-dropdown/utils/isActorSourceCompositeFilter'; import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { ObjectFilterDropdownBooleanSelect } from '@/object-record/object-filter-dropdown/components/ObjectFilterDropdownBooleanSelect'; import { DATE_FILTER_TYPES } from '@/object-record/object-filter-dropdown/constants/DateFilterTypes'; diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterSelect.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterSelect.tsx index efcc83ba5f5c..fe0dbd64013e 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterSelect.tsx @@ -21,7 +21,7 @@ import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-sta import { useGetCurrentView } from '@/views/hooks/useGetCurrentView'; import { availableFilterDefinitionsComponentState } from '@/views/states/availableFilterDefinitionsComponentState'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { FeatureFlagKey } from '~/generated/graphql'; import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState'; diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterSelectCompositeFieldSubMenu.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterSelectCompositeFieldSubMenu.tsx index 71b3b356cbc4..b87f88caf370 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterSelectCompositeFieldSubMenu.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownFilterSelectCompositeFieldSubMenu.tsx @@ -22,13 +22,8 @@ import { useRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/ import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { useState } from 'react'; -import { - IconApps, - IconChevronLeft, - isDefined, - MenuItem, - useIcons, -} from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconApps, IconChevronLeft, MenuItem, useIcons } from 'twenty-ui'; export const ObjectFilterDropdownFilterSelectCompositeFieldSubMenu = () => { const [searchText] = useState(''); diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOperandSelect.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOperandSelect.tsx index 8a29a12a96f5..48bf47878346 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOperandSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOperandSelect.tsx @@ -11,8 +11,8 @@ import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/ import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import styled from '@emotion/styled'; +import { isDefined } from 'twenty-shared'; import { MenuItem } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; import { getRecordFilterOperandsForRecordFilterDefinition } from '../../record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition'; import { getOperandLabel } from '../utils/getOperandLabel'; diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOptionSelect.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOptionSelect.tsx index cc888c61d21c..8b41f8496433 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOptionSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownOptionSelect.tsx @@ -21,8 +21,8 @@ import { selectedOperandInDropdownComponentState } from '@/object-record/object- import { useApplyRecordFilter } from '@/object-record/record-filter/hooks/useApplyRecordFilter'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; +import { isDefined } from 'twenty-shared'; import { MenuItem, MenuItemMultiSelect } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; export const EMPTY_FILTER_VALUE = ''; export const MAX_OPTIONS_TO_DISPLAY = 3; diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordSelect.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordSelect.tsx index b63a8817e3e7..dd2299a03900 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownRecordSelect.tsx @@ -22,8 +22,8 @@ import { useGetCurrentView } from '@/views/hooks/useGetCurrentView'; import { RelationFilterValue } from '@/views/view-filter-value/types/RelationFilterValue'; import { jsonRelationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/jsonRelationFilterValueSchema'; import { simpleRelationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/simpleRelationFilterValueSchema'; +import { isDefined } from 'twenty-shared'; import { IconUserCircle } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; export const EMPTY_FILTER_VALUE: string = JSON.stringify({ isCurrentWorkspaceMemberSelected: false, diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownSourceSelect.tsx b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownSourceSelect.tsx index 5639d82ea1f9..cf61eda46107 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownSourceSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/components/ObjectFilterDropdownSourceSelect.tsx @@ -18,7 +18,7 @@ import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-sta import { useDeleteCombinedViewFilters } from '@/views/hooks/useDeleteCombinedViewFilters'; import { useGetCurrentView } from '@/views/hooks/useGetCurrentView'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const EMPTY_FILTER_VALUE = '[]'; export const MAX_ITEMS_TO_DISPLAY = 3; diff --git a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/hooks/useSelectFilterDefinitionUsedInDropdown.ts b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/hooks/useSelectFilterDefinitionUsedInDropdown.ts index 4895bfd76f9a..16eff5a93c5c 100644 --- a/packages/twenty-front/src/modules/object-record/object-filter-dropdown/hooks/useSelectFilterDefinitionUsedInDropdown.ts +++ b/packages/twenty-front/src/modules/object-record/object-filter-dropdown/hooks/useSelectFilterDefinitionUsedInDropdown.ts @@ -12,7 +12,7 @@ import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { v4 } from 'uuid'; type SelectFilterParams = { diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownMenuContent.tsx b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownMenuContent.tsx index 3bcd47afa325..9a67fe0693c4 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownMenuContent.tsx +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownMenuContent.tsx @@ -31,7 +31,7 @@ import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useGetCurrentView } from '@/views/hooks/useGetCurrentView'; import { ViewType } from '@/views/types/ViewType'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const ObjectOptionsDropdownMenuContent = () => { const { diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownRecordGroupFieldsContent.tsx b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownRecordGroupFieldsContent.tsx index 7b8d45ab50a1..314b49c95cef 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownRecordGroupFieldsContent.tsx +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownRecordGroupFieldsContent.tsx @@ -26,8 +26,8 @@ import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/ import { ViewType } from '@/views/types/ViewType'; import { useLocation } from 'react-router-dom'; import { useSetRecoilState } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; export const ObjectOptionsDropdownRecordGroupFieldsContent = () => { diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useExportProcessRecordsForCSV.ts b/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useExportProcessRecordsForCSV.ts index 4e930fc4fbaf..6f499d75b2c4 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useExportProcessRecordsForCSV.ts +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useExportProcessRecordsForCSV.ts @@ -1,7 +1,7 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { FieldCurrencyValue } from '@/object-record/record-field/types/FieldMetadata'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { convertCurrencyMicrosToCurrencyAmount } from '~/utils/convertCurrencyToCurrencyMicros'; diff --git a/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy.ts b/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy.ts index b38c0bba8ddf..c2946592d3cc 100644 --- a/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy.ts +++ b/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy.ts @@ -2,8 +2,8 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { hasPositionField } from '@/object-metadata/utils/hasPositionField'; import { RecordGqlOperationOrderBy } from '@/object-record/graphql/types/RecordGqlOperationOrderBy'; +import { isDefined } from 'twenty-shared'; import { mapArrayToObject } from '~/utils/array/mapArrayToObject'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; diff --git a/packages/twenty-front/src/modules/object-record/record-board/hooks/useSetRecordBoardRecordIds.ts b/packages/twenty-front/src/modules/object-record/record-board/hooks/useSetRecordBoardRecordIds.ts index 63b127408c0a..95994896d009 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/hooks/useSetRecordBoardRecordIds.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/hooks/useSetRecordBoardRecordIds.ts @@ -9,8 +9,8 @@ import { sortRecordsByPosition } from '@/object-record/utils/sortRecordsByPositi import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue'; import { ViewType } from '@/views/types/ViewType'; +import { isDefined } from 'twenty-shared'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { isDefined } from '~/utils/isDefined'; export const useSetRecordBoardRecordIds = (recordBoardId?: string) => { const visibleRecordGroupIdsFamilySelector = useRecoilComponentCallbackStateV2( diff --git a/packages/twenty-front/src/modules/object-record/record-board/hooks/useSetRecordIdsForColumn.ts b/packages/twenty-front/src/modules/object-record/record-board/hooks/useSetRecordIdsForColumn.ts index 35a0dda049df..2408a69f8de3 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/hooks/useSetRecordIdsForColumn.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/hooks/useSetRecordIdsForColumn.ts @@ -7,8 +7,8 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { sortRecordsByPosition } from '@/object-record/utils/sortRecordsByPosition'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue'; +import { isDefined } from 'twenty-shared'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { isDefined } from '~/utils/isDefined'; export const useSetRecordIdsForColumn = (recordBoardId?: string) => { const recordGroupFieldMetadataState = useRecoilComponentCallbackStateV2( diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderAggregateDropdownFieldsContent.tsx b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderAggregateDropdownFieldsContent.tsx index 2f4843e685d9..91e5799bf8dd 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderAggregateDropdownFieldsContent.tsx +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderAggregateDropdownFieldsContent.tsx @@ -9,6 +9,7 @@ import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/Drop import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useUpdateViewAggregate } from '@/views/hooks/useUpdateViewAggregate'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { Icon123, IconCheck, @@ -16,7 +17,6 @@ import { MenuItem, useIcons, } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; export const RecordBoardColumnHeaderAggregateDropdownFieldsContent = () => { const { diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderWrapper.tsx b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderWrapper.tsx index f156395f32d4..1561ecc4f37d 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderWrapper.tsx +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderWrapper.tsx @@ -1,4 +1,4 @@ -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { RecordBoardColumnHeader } from '@/object-record/record-board/record-board-column/components/RecordBoardColumnHeader'; import { RecordBoardColumnContext } from '@/object-record/record-board/record-board-column/contexts/RecordBoardColumnContext'; diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnNewOpportunity.tsx b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnNewOpportunity.tsx index 0095e1dedbb1..32d9fe4ffc7d 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnNewOpportunity.tsx +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/components/RecordBoardColumnNewOpportunity.tsx @@ -11,8 +11,8 @@ import { OverlayContainer } from '@/ui/layout/overlay/components/OverlayContaine import { useRightDrawer } from '@/ui/layout/right-drawer/hooks/useRightDrawer'; import { RightDrawerPages } from '@/ui/layout/right-drawer/types/RightDrawerPages'; import { useRecoilValue, useSetRecoilState } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { v4 } from 'uuid'; -import { isDefined } from '~/utils/isDefined'; export const RecordBoardColumnNewOpportunity = ({ columnId, diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAddNewCard.ts b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAddNewCard.ts index 29bef2b126f6..87e5d7569f6b 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAddNewCard.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAddNewCard.ts @@ -7,7 +7,7 @@ import { RelationPickerHotkeyScope } from '@/object-record/relation-picker/types import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; import { useCallback, useContext } from 'react'; import { RecoilState, useRecoilCallback } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { v4 as uuidv4 } from 'uuid'; import { FieldMetadataType } from '~/generated-metadata/graphql'; diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAggregateRecordsForRecordBoardColumn.ts b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAggregateRecordsForRecordBoardColumn.ts index 7c4d89988fd4..1501b2d64458 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAggregateRecordsForRecordBoardColumn.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/hooks/useAggregateRecordsForRecordBoardColumn.ts @@ -4,7 +4,7 @@ import { recordIndexKanbanFieldMetadataIdState } from '@/object-record/record-in import { useAggregateRecordsForHeader } from '@/object-record/record-table/hooks/useAggregateRecordsForHeader'; import { useContext } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useAggregateRecordsForRecordBoardColumn = () => { const { columnDefinition } = useContext(RecordBoardColumnContext); diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/buildRecordGqlFieldsAggregateForView.ts b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/buildRecordGqlFieldsAggregateForView.ts index ad27e0355cab..fdba7a5433ff 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/buildRecordGqlFieldsAggregateForView.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/buildRecordGqlFieldsAggregateForView.ts @@ -2,8 +2,10 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { RecordGqlFieldsAggregate } from '@/object-record/graphql/types/RecordGqlFieldsAggregate'; import { KanbanAggregateOperation } from '@/object-record/record-index/states/recordIndexKanbanAggregateOperationState'; import { AGGREGATE_OPERATIONS } from '@/object-record/record-table/constants/AggregateOperations'; -import { FIELD_FOR_TOTAL_COUNT_AGGREGATE_OPERATION } from 'twenty-shared'; -import { isDefined } from '~/utils/isDefined'; +import { + FIELD_FOR_TOTAL_COUNT_AGGREGATE_OPERATION, + isDefined, +} from 'twenty-shared'; export const buildRecordGqlFieldsAggregateForView = ({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/computeAggregateValueAndLabel.ts b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/computeAggregateValueAndLabel.ts index 95a3e2965133..b357c2885f6b 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/computeAggregateValueAndLabel.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/record-board-column/utils/computeAggregateValueAndLabel.ts @@ -10,11 +10,13 @@ import { PERCENT_AGGREGATE_OPERATION_OPTIONS } from '@/object-record/record-tabl import { ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations'; import { t } from '@lingui/core/macro'; import isEmpty from 'lodash.isempty'; -import { FIELD_FOR_TOTAL_COUNT_AGGREGATE_OPERATION } from 'twenty-shared'; +import { + FIELD_FOR_TOTAL_COUNT_AGGREGATE_OPERATION, + isDefined, +} from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { formatAmount } from '~/utils/format/formatAmount'; import { formatNumber } from '~/utils/format/number'; -import { isDefined } from '~/utils/isDefined'; import { formatDateString } from '~/utils/string/formatDateString'; import { formatDateTimeString } from '~/utils/string/formatDateTimeString'; diff --git a/packages/twenty-front/src/modules/object-record/record-board/utils/getDraggedRecordPosition.ts b/packages/twenty-front/src/modules/object-record/record-board/utils/getDraggedRecordPosition.ts index a1a9090af20f..8f0963902164 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/utils/getDraggedRecordPosition.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/utils/getDraggedRecordPosition.ts @@ -1,4 +1,4 @@ -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const getDraggedRecordPosition = ( recordBeforePosition?: number, diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormBooleanFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormBooleanFieldInput.tsx index 0176248f427b..f33ac3507de6 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormBooleanFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormBooleanFieldInput.tsx @@ -8,7 +8,7 @@ import { InputLabel } from '@/ui/input/components/InputLabel'; import { isStandaloneVariableString } from '@/workflow/utils/isStandaloneVariableString'; import styled from '@emotion/styled'; import { useId, useState } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; const StyledBooleanInputContainer = styled.div` padding-inline: ${({ theme }) => theme.spacing(2)}; diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormDateTimeFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormDateTimeFieldInput.tsx index a3ea73e77222..48df5df53c23 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormDateTimeFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormDateTimeFieldInput.tsx @@ -29,7 +29,8 @@ import { useRef, useState, } from 'react'; -import { isDefined, Nullable, TEXT_INPUT_STYLE } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { Nullable, TEXT_INPUT_STYLE } from 'twenty-ui'; const StyledInputContainer = styled(FormFieldInputInputContainer)` display: grid; diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormMultiSelectFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormMultiSelectFieldInput.tsx index 5ba322b34573..c97d3eee97c4 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormMultiSelectFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormMultiSelectFieldInput.tsx @@ -16,8 +16,8 @@ import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousH import { isStandaloneVariableString } from '@/workflow/utils/isStandaloneVariableString'; import { useTheme } from '@emotion/react'; import { useId, useState } from 'react'; +import { isDefined } from 'twenty-shared'; import { IconChevronDown, VisibilityHidden } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; type FormMultiSelectFieldInputProps = { label?: string; diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormNumberFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormNumberFieldInput.tsx index cdc01e619a69..142cc82e7bce 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormNumberFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormNumberFieldInput.tsx @@ -9,7 +9,7 @@ import { InputLabel } from '@/ui/input/components/InputLabel'; import { isStandaloneVariableString } from '@/workflow/utils/isStandaloneVariableString'; import styled from '@emotion/styled'; import { useId, useState } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { canBeCastAsNumberOrNull, castAsNumberOrNull, diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormRawJsonFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormRawJsonFieldInput.tsx index e5d944f7b814..68dc4de55791 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormRawJsonFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormRawJsonFieldInput.tsx @@ -6,7 +6,7 @@ import { useTextVariableEditor } from '@/object-record/record-field/form-types/h import { VariablePickerComponent } from '@/object-record/record-field/form-types/types/VariablePickerComponent'; import { InputLabel } from '@/ui/input/components/InputLabel'; import { useId } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { turnIntoEmptyStringIfWhitespacesOnly } from '~/utils/string/turnIntoEmptyStringIfWhitespacesOnly'; type FormRawJsonFieldInputProps = { diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormSelectFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormSelectFieldInput.tsx index 90c5aad7ed2d..c6ac040dcc4b 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormSelectFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormSelectFieldInput.tsx @@ -18,7 +18,8 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { useId, useState } from 'react'; import { Key } from 'ts-key-enum'; -import { IconChevronDown, isDefined, VisibilityHidden } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconChevronDown, VisibilityHidden } from 'twenty-ui'; type FormSelectFieldInputProps = { label?: string; diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormTextFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormTextFieldInput.tsx index 7194948b9ed7..3f4e998f737d 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormTextFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormTextFieldInput.tsx @@ -7,7 +7,7 @@ import { VariablePickerComponent } from '@/object-record/record-field/form-types import { InputLabel } from '@/ui/input/components/InputLabel'; import { parseEditorContent } from '@/workflow/workflow-variables/utils/parseEditorContent'; import { useId } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; type FormTextFieldInputProps = { label?: string; diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormUuidFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormUuidFieldInput.tsx index 7cca096a524a..6d0a96a1e877 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormUuidFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/FormUuidFieldInput.tsx @@ -8,7 +8,7 @@ import { InputLabel } from '@/ui/input/components/InputLabel'; import { isStandaloneVariableString } from '@/workflow/utils/isStandaloneVariableString'; import styled from '@emotion/styled'; import { useId, useState } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; const StyledInput = styled(TextInput)` padding: ${({ theme }) => `${theme.spacing(1)} ${theme.spacing(2)}`}; diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/VariableChip.tsx b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/VariableChip.tsx index 7ba6392a3e25..c4456ef83400 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/VariableChip.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/VariableChip.tsx @@ -1,7 +1,8 @@ import { extractVariableLabel } from '@/workflow/workflow-variables/utils/extractVariableLabel'; import { css, useTheme } from '@emotion/react'; import styled from '@emotion/styled'; -import { IconX, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconX } from 'twenty-ui'; const StyledChip = styled.div<{ deletable: boolean }>` background-color: ${({ theme }) => theme.accent.quaternary}; @@ -9,7 +10,6 @@ const StyledChip = styled.div<{ deletable: boolean }>` border-radius: 4px; height: 20px; box-sizing: border-box; - cursor: pointer; display: inline-flex; align-items: center; flex-direction: row; @@ -20,10 +20,13 @@ const StyledChip = styled.div<{ deletable: boolean }>` white-space: nowrap; ${({ theme, deletable }) => - !deletable && - css` - padding-right: ${theme.spacing(1)}; - `} + !deletable + ? css` + padding-right: ${theme.spacing(1)}; + ` + : css` + cursor: pointer; + `} `; const StyledLabel = styled.span` @@ -70,7 +73,7 @@ export const VariableChip = ({ <StyledLabel>{extractVariableLabel(rawVariableName)}</StyledLabel> {onRemove ? ( - <StyledDelete onClick={onRemove}> + <StyledDelete onClick={onRemove} aria-label="Remove variable"> <IconX size={theme.icon.size.sm} stroke={theme.icon.stroke.sm} /> </StyledDelete> ) : null} diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/__stories__/FormRawJsonFieldInput.stories.tsx b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/__stories__/FormRawJsonFieldInput.stories.tsx index e334790be4d7..21f1707ac74f 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/__stories__/FormRawJsonFieldInput.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/__stories__/FormRawJsonFieldInput.stories.tsx @@ -83,6 +83,45 @@ export const SaveValidJson: Story = { }, }; +export const SaveValidMultilineJson: Story = { + args: { + placeholder: 'Enter valid json', + onPersist: fn(), + }, + play: async ({ canvasElement, args }) => { + const editor = canvasElement.querySelector('.ProseMirror > p'); + expect(editor).toBeVisible(); + + await userEvent.type( + editor, + '{{{Enter} "a": {{{Enter} "b" : "d"{Enter} }{Enter}}', + ); + + await waitFor(() => { + expect(args.onPersist).toHaveBeenCalledWith( + '{\n "a": {\n "b" : "d"\n }\n}', + ); + }); + }, +}; + +export const MultilineWithDefaultValue: Story = { + args: { + placeholder: 'Enter valid json', + defaultValue: '{\n "a": {\n "b" : "d"\n }\n}', + }, + play: async ({ canvasElement }) => { + const editor = canvasElement.querySelector('.ProseMirror > p'); + expect(editor).toBeVisible(); + + await waitFor(() => { + expect((editor as HTMLElement).innerText).toBe( + '{\n "a": {\n "b" : "d"\n }\n}', + ); + }); + }, +}; + export const DoesNotIgnoreInvalidJson: Story = { args: { placeholder: 'Enter valid json', diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/__stories__/FormTextFieldInput.stories.tsx b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/__stories__/FormTextFieldInput.stories.tsx index f0cb749bc785..1b3352ed138e 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/components/__stories__/FormTextFieldInput.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/components/__stories__/FormTextFieldInput.stories.tsx @@ -1,5 +1,12 @@ import { Meta, StoryObj } from '@storybook/react'; -import { expect, fn, userEvent, within } from '@storybook/test'; +import { + expect, + fn, + userEvent, + waitFor, + waitForElementToBeRemoved, + within, +} from '@storybook/test'; import { getUserDevice } from 'twenty-ui'; import { FormTextFieldInput } from '../FormTextFieldInput'; @@ -45,18 +52,92 @@ export const Multiline: Story = { }, }; -export const WithVariablePicker: Story = { +export const MultilineWithDefaultValue: Story = { args: { label: 'Text', + defaultValue: 'Line 1\nLine 2\n\nLine 4', placeholder: 'Text field...', - VariablePicker: () => <div>VariablePicker</div>, + multiline: true, }, play: async ({ canvasElement }) => { const canvas = within(canvasElement); - const variablePicker = await canvas.findByText('VariablePicker'); + await canvas.findByText(/^Text$/); + + const editor = canvasElement.querySelector('.ProseMirror > p'); + + expect((editor as HTMLElement).innerText).toBe('Line 1\nLine 2\n\nLine 4'); + }, +}; + +export const WithVariable: Story = { + args: { + label: 'Text', + placeholder: 'Text field...', + VariablePicker: ({ onVariableSelect }) => { + return ( + <button + onClick={() => { + onVariableSelect('{{test}}'); + }} + > + Add variable + </button> + ); + }, + onPersist: fn(), + }, + play: async ({ canvasElement, args }) => { + const canvas = within(canvasElement); + + const addVariableButton = await canvas.findByRole('button', { + name: 'Add variable', + }); - expect(variablePicker).toBeVisible(); + await userEvent.click(addVariableButton); + + const variable = await canvas.findByText('test'); + expect(variable).toBeVisible(); + + await waitFor(() => { + expect(args.onPersist).toHaveBeenCalledWith('{{test}}'); + }); + expect(args.onPersist).toHaveBeenCalledTimes(1); + }, +}; + +export const WithDeletableVariable: Story = { + args: { + label: 'Text', + placeholder: 'Text field...', + defaultValue: 'test {{a.b.variable}} test', + onPersist: fn(), + }, + play: async ({ canvasElement, args }) => { + const canvas = within(canvasElement); + + const editor = canvasElement.querySelector('.ProseMirror > p'); + expect(editor).toBeVisible(); + + const variable = await canvas.findByText('variable'); + expect(variable).toBeVisible(); + + const deleteVariableButton = await canvas.findByRole('button', { + name: 'Remove variable', + }); + + await Promise.all([ + waitForElementToBeRemoved(variable), + + deleteVariableButton.click(), + ]); + + expect(editor).toHaveTextContent('test test'); + + await waitFor(() => { + expect(args.onPersist).toHaveBeenCalledWith('test test'); + }); + expect(args.onPersist).toHaveBeenCalledTimes(1); }, }; @@ -89,6 +170,28 @@ export const Disabled: Story = { }, }; +export const DisabledWithVariable: Story = { + args: { + label: 'Text', + defaultValue: 'test {{a.b.variable}} test', + readonly: true, + }, + play: async ({ canvasElement }) => { + const editor = canvasElement.querySelector('.ProseMirror > p'); + + expect(editor).toBeVisible(); + + await waitFor(() => { + expect(editor).toHaveTextContent('test variable test'); + }); + + const deleteVariableButton = within(editor as HTMLElement).queryByRole( + 'button', + ); + expect(deleteVariableButton).not.toBeInTheDocument(); + }, +}; + export const HasHistory: Story = { args: { label: 'Text', diff --git a/packages/twenty-front/src/modules/object-record/record-field/form-types/hooks/useTextVariableEditor.ts b/packages/twenty-front/src/modules/object-record/record-field/form-types/hooks/useTextVariableEditor.ts index 2324544377c2..5c9b80300003 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/form-types/hooks/useTextVariableEditor.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/form-types/hooks/useTextVariableEditor.ts @@ -1,4 +1,4 @@ -import { initializeEditorContent } from '@/workflow/workflow-variables/utils/initializeEditorContent'; +import { getInitialEditorContent } from '@/workflow/workflow-variables/utils/getInitialEditorContent'; import { VariableTag } from '@/workflow/workflow-variables/utils/variableTag'; import Document from '@tiptap/extension-document'; import HardBreak from '@tiptap/extension-hard-break'; @@ -7,8 +7,7 @@ import Paragraph from '@tiptap/extension-paragraph'; import { default as Placeholder } from '@tiptap/extension-placeholder'; import Text from '@tiptap/extension-text'; import { Editor, useEditor } from '@tiptap/react'; -import { useState } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; type UseTextVariableEditorProps = { placeholder: string | undefined; @@ -25,8 +24,6 @@ export const useTextVariableEditor = ({ defaultValue, onUpdate, }: UseTextVariableEditorProps) => { - const [isInitializing, setIsInitializing] = useState(true); - const editor = useEditor({ extensions: [ Document, @@ -45,17 +42,11 @@ export const useTextVariableEditor = ({ : []), History, ], + content: isDefined(defaultValue) + ? getInitialEditorContent(defaultValue) + : undefined, editable: !readonly, - onCreate: ({ editor }) => { - if (isDefined(defaultValue)) { - initializeEditorContent(editor, defaultValue); - } - setIsInitializing(false); - }, onUpdate: ({ editor }) => { - if (isInitializing) { - return; - } onUpdate(editor); }, editorProps: { diff --git a/packages/twenty-front/src/modules/object-record/record-field/hooks/useIsFieldEmpty.ts b/packages/twenty-front/src/modules/object-record/record-field/hooks/useIsFieldEmpty.ts index 446aeed8b73f..26d4ade28f9c 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/hooks/useIsFieldEmpty.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/hooks/useIsFieldEmpty.ts @@ -2,7 +2,7 @@ import { useContext } from 'react'; import { isFieldValueEmpty } from '@/object-record/record-field/utils/isFieldValueEmpty'; import { useRecordFieldValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { FieldContext } from '../contexts/FieldContext'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/JsonFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/JsonFieldDisplay.tsx index ab2dde8d7296..f419651dc50e 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/JsonFieldDisplay.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/JsonFieldDisplay.tsx @@ -1,6 +1,6 @@ import { useJsonFieldDisplay } from '@/object-record/record-field/meta-types/hooks/useJsonFieldDisplay'; import { JsonDisplay } from '@/ui/field/display/components/JsonDisplay'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const JsonFieldDisplay = () => { const { fieldValue, maxWidth } = useJsonFieldDisplay(); diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/NumberFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/NumberFieldDisplay.tsx index 568d8ce6525c..74cb7e6c0a8f 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/NumberFieldDisplay.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/NumberFieldDisplay.tsx @@ -1,6 +1,6 @@ import { useNumberFieldDisplay } from '@/object-record/record-field/meta-types/hooks/useNumberFieldDisplay'; import { NumberDisplay } from '@/ui/field/display/components/NumberDisplay'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { formatNumber } from '~/utils/format/number'; export const NumberFieldDisplay = () => { diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/SelectFieldDisplay.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/SelectFieldDisplay.tsx index 74ec57afc8ce..ef0b1cd8f0dc 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/SelectFieldDisplay.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/display/components/SelectFieldDisplay.tsx @@ -1,6 +1,6 @@ import { useSelectFieldDisplay } from '@/object-record/record-field/meta-types/hooks/useSelectFieldDisplay'; import { SelectDisplay } from '@/ui/field/display/components/SelectDisplay'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const SelectFieldDisplay = () => { const { fieldValue, fieldDefinition } = useSelectFieldDisplay(); diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useChipFieldDisplay.ts b/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useChipFieldDisplay.ts index e9b10179eb63..eceb8c155202 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useChipFieldDisplay.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useChipFieldDisplay.ts @@ -6,7 +6,7 @@ import { isFieldFullName } from '@/object-record/record-field/types/guards/isFie import { isFieldNumber } from '@/object-record/record-field/types/guards/isFieldNumber'; import { isFieldText } from '@/object-record/record-field/types/guards/isFieldText'; import { useRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { isFieldActor } from '@/object-record/record-field/types/guards/isFieldActor'; import { FieldContext } from '../../contexts/FieldContext'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useRelationFromManyFieldDisplay.ts b/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useRelationFromManyFieldDisplay.ts index 5a59705878e3..86c389d0b1ea 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useRelationFromManyFieldDisplay.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useRelationFromManyFieldDisplay.ts @@ -6,8 +6,8 @@ import { generateDefaultRecordChipData } from '@/object-metadata/utils/generateD import { useRecordFieldValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { FIELD_EDIT_BUTTON_WIDTH } from '@/ui/field/display/constants/FieldEditButtonWidth'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; import { FieldContext } from '../../contexts/FieldContext'; import { assertFieldMetadata } from '../../types/guards/assertFieldMetadata'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useRelationToOneFieldDisplay.ts b/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useRelationToOneFieldDisplay.ts index 7267b67016d4..3ad94bb3c139 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useRelationToOneFieldDisplay.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/hooks/useRelationToOneFieldDisplay.ts @@ -6,8 +6,8 @@ import { generateDefaultRecordChipData } from '@/object-metadata/utils/generateD import { useRecordFieldValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { FIELD_EDIT_BUTTON_WIDTH } from '@/ui/field/display/constants/FieldEditButtonWidth'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; import { FieldContext } from '../../contexts/FieldContext'; import { assertFieldMetadata } from '../../types/guards/assertFieldMetadata'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/DateFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/DateFieldInput.tsx index 888f59aed437..2fe5ef63b9a2 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/DateFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/DateFieldInput.tsx @@ -2,7 +2,7 @@ import { Nullable } from 'twenty-ui'; import { useDateField } from '@/object-record/record-field/meta-types/hooks/useDateField'; import { DateInput } from '@/ui/field/input/components/DateInput'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { FieldInputClickOutsideEvent } from '@/object-record/record-field/meta-types/input/components/DateTimeFieldInput'; import { usePersistField } from '../../../hooks/usePersistField'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/EmailsFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/EmailsFieldInput.tsx index 7c2754da1a01..3c8d1630cf42 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/EmailsFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/EmailsFieldInput.tsx @@ -2,7 +2,7 @@ import { useEmailsField } from '@/object-record/record-field/meta-types/hooks/us import { EmailsFieldMenuItem } from '@/object-record/record-field/meta-types/input/components/EmailsFieldMenuItem'; import { emailSchema } from '@/object-record/record-field/validation-schemas/emailSchema'; import { useCallback, useMemo } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { MultiItemFieldInput } from './MultiItemFieldInput'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/LinksFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/LinksFieldInput.tsx index 84810afb741a..7415a761c0b9 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/LinksFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/LinksFieldInput.tsx @@ -1,7 +1,7 @@ import { useLinksField } from '@/object-record/record-field/meta-types/hooks/useLinksField'; import { LinksFieldMenuItem } from '@/object-record/record-field/meta-types/input/components/LinksFieldMenuItem'; import { useMemo } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { absoluteUrlSchema } from '~/utils/validation-schemas/absoluteUrlSchema'; import { MultiItemFieldInput } from './MultiItemFieldInput'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/SelectFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/SelectFieldInput.tsx index cc192ddbca91..fd454d5fc233 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/SelectFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/SelectFieldInput.tsx @@ -8,7 +8,7 @@ import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectab import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useState } from 'react'; import { Key } from 'ts-key-enum'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; type SelectFieldInputProps = { onSubmit?: FieldInputEvent; diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/__stories__/RatingFieldInput.stories.tsx b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/__stories__/RatingFieldInput.stories.tsx index bb5a14c6032a..f2d1d78b97aa 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/__stories__/RatingFieldInput.stories.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/components/__stories__/RatingFieldInput.stories.tsx @@ -3,8 +3,8 @@ import { expect, fn, userEvent, waitFor, within } from '@storybook/test'; import { useEffect } from 'react'; import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; import { FieldContextProvider } from '@/object-record/record-field/meta-types/components/FieldContextProvider'; import { FieldRatingValue } from '../../../../types/FieldMetadata'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/hooks/useRegisterInputEvents.ts b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/hooks/useRegisterInputEvents.ts index ec4d6eb9947b..ebc47f132203 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/hooks/useRegisterInputEvents.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/hooks/useRegisterInputEvents.ts @@ -7,7 +7,7 @@ import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside'; import { useContext } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useRegisterInputEvents = <T>({ inputRef, diff --git a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/utils/phonesUtils.ts b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/utils/phonesUtils.ts index b9e5db952640..74a2e2a680ef 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/utils/phonesUtils.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/meta-types/input/utils/phonesUtils.ts @@ -1,5 +1,5 @@ import { FieldPhonesValue } from '@/object-record/record-field/types/FieldMetadata'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const createPhonesFromFieldValue = (fieldValue: FieldPhonesValue) => { return !isDefined(fieldValue) diff --git a/packages/twenty-front/src/modules/object-record/record-field/utils/computeDraftValueFromFieldValue.ts b/packages/twenty-front/src/modules/object-record/record-field/utils/computeDraftValueFromFieldValue.ts index 4e5b407f2cd6..ac37b470e08f 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/utils/computeDraftValueFromFieldValue.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/utils/computeDraftValueFromFieldValue.ts @@ -12,7 +12,7 @@ import { isFieldRawJsonValue } from '@/object-record/record-field/types/guards/i import { isFieldRelation } from '@/object-record/record-field/types/guards/isFieldRelation'; import { computeEmptyDraftValue } from '@/object-record/record-field/utils/computeEmptyDraftValue'; import { isFieldValueEmpty } from '@/object-record/record-field/utils/isFieldValueEmpty'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; import { stripSimpleQuotesFromString } from '~/utils/string/stripSimpleQuotesFromString'; diff --git a/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueEmpty.ts b/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueEmpty.ts index e8e3ebe3fb86..b70f208d41e2 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueEmpty.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueEmpty.ts @@ -34,7 +34,7 @@ import { isFieldSelectValue } from '@/object-record/record-field/types/guards/is import { isFieldText } from '@/object-record/record-field/types/guards/isFieldText'; import { isFieldTsVector } from '@/object-record/record-field/types/guards/isFieldTsVectorValue'; import { isFieldUuid } from '@/object-record/record-field/types/guards/isFieldUuid'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { stripSimpleQuotesFromString } from '~/utils/string/stripSimpleQuotesFromString'; const isValueEmpty = (value: unknown) => diff --git a/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueReadOnly.ts b/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueReadOnly.ts index 703be51be367..a0e04389034d 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueReadOnly.ts +++ b/packages/twenty-front/src/modules/object-record/record-field/utils/isFieldValueReadOnly.ts @@ -2,7 +2,7 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi import { isWorkflowSubObjectMetadata } from '@/object-metadata/utils/isWorkflowSubObjectMetadata'; import { isFieldActor } from '@/object-record/record-field/types/guards/isFieldActor'; import { isFieldRichText } from '@/object-record/record-field/types/guards/isFieldRichText'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; type isFieldValueReadOnlyParams = { diff --git a/packages/twenty-front/src/modules/object-record/record-filter/hooks/useApplyRecordFilter.ts b/packages/twenty-front/src/modules/object-record/record-filter/hooks/useApplyRecordFilter.ts index ba82b14c57be..24650021f6ee 100644 --- a/packages/twenty-front/src/modules/object-record/record-filter/hooks/useApplyRecordFilter.ts +++ b/packages/twenty-front/src/modules/object-record/record-filter/hooks/useApplyRecordFilter.ts @@ -4,7 +4,7 @@ import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { useUpsertCombinedViewFilters } from '@/views/hooks/useUpsertCombinedViewFilters'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useApplyRecordFilter = (componentInstanceId?: string) => { const { upsertCombinedViewFilter } = useUpsertCombinedViewFilters(); diff --git a/packages/twenty-front/src/modules/object-record/record-filter/utils/computeViewRecordGqlOperationFilter.ts b/packages/twenty-front/src/modules/object-record/record-filter/utils/computeViewRecordGqlOperationFilter.ts index 6a96749f8dca..c6b30384b7e7 100644 --- a/packages/twenty-front/src/modules/object-record/record-filter/utils/computeViewRecordGqlOperationFilter.ts +++ b/packages/twenty-front/src/modules/object-record/record-filter/utils/computeViewRecordGqlOperationFilter.ts @@ -18,9 +18,9 @@ import { SelectFilter, StringFilter, } from '@/object-record/graphql/types/RecordGqlOperationFilter'; +import { isDefined } from 'twenty-shared'; import { Field } from '~/generated/graphql'; import { generateILikeFiltersForCompositeFields } from '~/utils/array/generateILikeFiltersForCompositeFields'; -import { isDefined } from '~/utils/isDefined'; import { convertGreaterThanRatingToArrayOfRatingValues, diff --git a/packages/twenty-front/src/modules/object-record/record-filter/utils/isRecordMatchingFilter.ts b/packages/twenty-front/src/modules/object-record/record-filter/utils/isRecordMatchingFilter.ts index 1124458b66e6..9fe27d438a4a 100644 --- a/packages/twenty-front/src/modules/object-record/record-filter/utils/isRecordMatchingFilter.ts +++ b/packages/twenty-front/src/modules/object-record/record-filter/utils/isRecordMatchingFilter.ts @@ -36,8 +36,8 @@ import { isMatchingRawJsonFilter } from '@/object-record/record-filter/utils/isM import { isMatchingSelectFilter } from '@/object-record/record-filter/utils/isMatchingSelectFilter'; import { isMatchingStringFilter } from '@/object-record/record-filter/utils/isMatchingStringFilter'; import { isMatchingUUIDFilter } from '@/object-record/record-filter/utils/isMatchingUUIDFilter'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; import { isEmptyObject } from '~/utils/isEmptyObject'; const isLeafFilter = ( diff --git a/packages/twenty-front/src/modules/object-record/record-group/components/RecordGroupMenuItemDraggable.tsx b/packages/twenty-front/src/modules/object-record/record-group/components/RecordGroupMenuItemDraggable.tsx index 3a5d668ad005..1278d40ca7fe 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/components/RecordGroupMenuItemDraggable.tsx +++ b/packages/twenty-front/src/modules/object-record/record-group/components/RecordGroupMenuItemDraggable.tsx @@ -6,7 +6,7 @@ import { RecordGroupDefinitionType, } from '@/object-record/record-group/types/RecordGroupDefinition'; import { useRecoilValue } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type RecordGroupMenuItemDraggableProps = { recordGroupId: string; diff --git a/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupActions.ts b/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupActions.ts index 9110c1cc775d..f1b4ece96b3f 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupActions.ts +++ b/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupActions.ts @@ -11,7 +11,8 @@ import { ViewType } from '@/views/types/ViewType'; import { useCallback, useContext, useMemo } from 'react'; import { useLocation } from 'react-router-dom'; import { useSetRecoilState } from 'recoil'; -import { IconEyeOff, IconSettings, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconEyeOff, IconSettings } from 'twenty-ui'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; type UseRecordGroupActionsParams = { diff --git a/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupFilter.ts b/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupFilter.ts index 27b182ed819c..0a6d4a7b0a92 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupFilter.ts +++ b/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupFilter.ts @@ -1,7 +1,7 @@ import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { useCurrentRecordGroupDefinition } from '@/object-record/record-group/hooks/useCurrentRecordGroupDefinition'; import { useMemo } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useRecordGroupFilter = (fields: FieldMetadataItem[]) => { const currentRecordGroupDefinition = useCurrentRecordGroupDefinition(); diff --git a/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupReorder.ts b/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupReorder.ts index 93e1f05c73d7..e7d124118113 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupReorder.ts +++ b/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupReorder.ts @@ -10,9 +10,9 @@ import { useSaveCurrentViewGroups } from '@/views/hooks/useSaveCurrentViewGroups import { ViewType } from '@/views/types/ViewType'; import { mapRecordGroupDefinitionsToViewGroups } from '@/views/utils/mapRecordGroupDefinitionsToViewGroups'; import { useRecoilCallback } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { moveArrayItem } from '~/utils/array/moveArrayItem'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { isDefined } from '~/utils/isDefined'; type UseRecordGroupHandlersParams = { viewBarId: string; diff --git a/packages/twenty-front/src/modules/object-record/record-group/states/selectors/availableRecordGroupIdsComponentSelector.ts b/packages/twenty-front/src/modules/object-record/record-group/states/selectors/availableRecordGroupIdsComponentSelector.ts index e500f12345bb..437a40f87242 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/states/selectors/availableRecordGroupIdsComponentSelector.ts +++ b/packages/twenty-front/src/modules/object-record/record-group/states/selectors/availableRecordGroupIdsComponentSelector.ts @@ -8,7 +8,7 @@ import { recordGroupSortedInsert } from '@/object-record/record-group/utils/reco import { createComponentSelectorV2 } from '@/ui/utilities/state/component-state/utils/createComponentSelectorV2'; import { ViewComponentInstanceContext } from '@/views/states/contexts/ViewComponentInstanceContext'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const availableRecordGroupIdsComponentSelector = createComponentSelectorV2<RecordGroupDefinition['id'][]>({ diff --git a/packages/twenty-front/src/modules/object-record/record-group/states/selectors/hiddenRecordGroupIdsComponentSelector.ts b/packages/twenty-front/src/modules/object-record/record-group/states/selectors/hiddenRecordGroupIdsComponentSelector.ts index 8974472496bb..290c566ffa50 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/states/selectors/hiddenRecordGroupIdsComponentSelector.ts +++ b/packages/twenty-front/src/modules/object-record/record-group/states/selectors/hiddenRecordGroupIdsComponentSelector.ts @@ -4,7 +4,7 @@ import { RecordGroupDefinition } from '@/object-record/record-group/types/Record import { createComponentSelectorV2 } from '@/ui/utilities/state/component-state/utils/createComponentSelectorV2'; import { ViewComponentInstanceContext } from '@/views/states/contexts/ViewComponentInstanceContext'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const hiddenRecordGroupIdsComponentSelector = createComponentSelectorV2< RecordGroupDefinition['id'][] diff --git a/packages/twenty-front/src/modules/object-record/record-group/states/selectors/recordGroupDefinitionsComponentSelector.ts b/packages/twenty-front/src/modules/object-record/record-group/states/selectors/recordGroupDefinitionsComponentSelector.ts index ce0e0432eabe..b5dae8bc10cc 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/states/selectors/recordGroupDefinitionsComponentSelector.ts +++ b/packages/twenty-front/src/modules/object-record/record-group/states/selectors/recordGroupDefinitionsComponentSelector.ts @@ -4,7 +4,7 @@ import { RecordGroupDefinition } from '@/object-record/record-group/types/Record import { createComponentSelectorV2 } from '@/ui/utilities/state/component-state/utils/createComponentSelectorV2'; import { ViewComponentInstanceContext } from '@/views/states/contexts/ViewComponentInstanceContext'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const recordGroupDefinitionsComponentSelector = createComponentSelectorV2<RecordGroupDefinition[]>({ diff --git a/packages/twenty-front/src/modules/object-record/record-group/states/selectors/visibleRecordGroupIdsComponentFamilySelector.ts b/packages/twenty-front/src/modules/object-record/record-group/states/selectors/visibleRecordGroupIdsComponentFamilySelector.ts index 139e3806bacd..76baff77f1f4 100644 --- a/packages/twenty-front/src/modules/object-record/record-group/states/selectors/visibleRecordGroupIdsComponentFamilySelector.ts +++ b/packages/twenty-front/src/modules/object-record/record-group/states/selectors/visibleRecordGroupIdsComponentFamilySelector.ts @@ -10,7 +10,7 @@ import { createComponentFamilySelectorV2 } from '@/ui/utilities/state/component- import { ViewComponentInstanceContext } from '@/views/states/contexts/ViewComponentInstanceContext'; import { ViewType } from '@/views/types/ViewType'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const visibleRecordGroupIdsComponentFamilySelector = createComponentFamilySelectorV2<RecordGroupDefinition['id'][], ViewType>({ diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx index 0ebff1827a5a..b3cec7e8f6e8 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx @@ -1,6 +1,6 @@ import styled from '@emotion/styled'; import { useRecoilCallback, useRecoilState, useSetRecoilState } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata'; import { ObjectOptionsDropdown } from '@/object-record/object-options-dropdown/components/ObjectOptionsDropdown'; diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageHeader.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageHeader.tsx index 229f69b52b60..614b6e577df5 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageHeader.tsx +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageHeader.tsx @@ -12,8 +12,8 @@ import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/ import { ViewType } from '@/views/types/ViewType'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useRecoilValue } from 'recoil'; -import { capitalize } from 'twenty-shared'; -import { isDefined, useIcons } from 'twenty-ui'; +import { capitalize, isDefined } from 'twenty-shared'; +import { useIcons } from 'twenty-ui'; import { FeatureFlagKey } from '~/generated/graphql'; export const RecordIndexPageHeader = () => { diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddMenuItem.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddMenuItem.tsx index c209a6b0ee3a..ad4de00f246d 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddMenuItem.tsx +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexPageKanbanAddMenuItem.tsx @@ -2,8 +2,8 @@ import { recordGroupDefinitionFamilyState } from '@/object-record/record-group/s import { RecordGroupDefinitionType } from '@/object-record/record-group/types/RecordGroupDefinition'; import styled from '@emotion/styled'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { MenuItem, Tag } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; const StyledMenuItem = styled(MenuItem)` width: calc(100% - 2 * var(--horizontal-padding)); diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexTableContainerEffect.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexTableContainerEffect.tsx index 040d6ae35a65..851318d33ba6 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexTableContainerEffect.tsx +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexTableContainerEffect.tsx @@ -12,7 +12,7 @@ import { convertAggregateOperationToExtendedAggregateOperation } from '@/object- import { useGetCurrentView } from '@/views/hooks/useGetCurrentView'; import { ViewField } from '@/views/types/ViewField'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const RecordIndexTableContainerEffect = () => { const { recordIndexId, objectNameSingular } = useRecordIndexContextOrThrow(); diff --git a/packages/twenty-front/src/modules/object-record/record-index/export/hooks/useExportProcessRecordsForCSV.ts b/packages/twenty-front/src/modules/object-record/record-index/export/hooks/useExportProcessRecordsForCSV.ts index 2476ccc059cc..9dd14c5e52dc 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/export/hooks/useExportProcessRecordsForCSV.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/export/hooks/useExportProcessRecordsForCSV.ts @@ -1,7 +1,7 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { FieldCurrencyValue } from '@/object-record/record-field/types/FieldMetadata'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { convertCurrencyMicrosToCurrencyAmount } from '~/utils/convertCurrencyToCurrencyMicros'; diff --git a/packages/twenty-front/src/modules/object-record/record-index/export/hooks/useExportRecords.ts b/packages/twenty-front/src/modules/object-record/record-index/export/hooks/useExportRecords.ts index 247bdd14c24e..6a48cf59a5a3 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/export/hooks/useExportRecords.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/export/hooks/useExportRecords.ts @@ -11,9 +11,9 @@ import { import { ColumnDefinition } from '@/object-record/record-table/types/ColumnDefinition'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { saveAs } from 'file-saver'; +import { isDefined } from 'twenty-shared'; import { RelationDefinitionType } from '~/generated-metadata/graphql'; import { FieldMetadataType } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; type GenerateExportOptions = { diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleColumnFilter.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleColumnFilter.ts index bcc7d25be2a5..00c4b2cd3828 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleColumnFilter.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleColumnFilter.ts @@ -17,7 +17,7 @@ import { useGetCurrentView } from '@/views/hooks/useGetCurrentView'; import { useUpsertCombinedViewFilters } from '@/views/hooks/useUpsertCombinedViewFilters'; import { availableFilterDefinitionsComponentState } from '@/views/states/availableFilterDefinitionsComponentState'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type UseHandleToggleColumnFilterProps = { objectNameSingular: string; diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleColumnSort.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleColumnSort.ts index b285fe345047..5aefe00ef189 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleColumnSort.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleColumnSort.ts @@ -4,7 +4,7 @@ import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/u import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { Sort } from '@/object-record/object-sort-dropdown/types/Sort'; import { useUpsertCombinedViewSorts } from '@/views/hooks/useUpsertCombinedViewSorts'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type UseHandleToggleColumnSortProps = { objectNameSingular: string; diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleTrashColumnFilter.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleTrashColumnFilter.ts index f3471ea3ae1a..523fd072f1f8 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleTrashColumnFilter.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHandleToggleTrashColumnFilter.ts @@ -11,7 +11,7 @@ import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/componen import { useUpsertCombinedViewFilters } from '@/views/hooks/useUpsertCombinedViewFilters'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type UseHandleToggleTrashColumnFilterProps = { objectNameSingular: string; diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts index ff60d05d014c..e105cca850a4 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexBoardColumn.ts @@ -13,7 +13,7 @@ import { recordIndexFiltersState } from '@/object-record/record-index/states/rec import { recordIndexSortsState } from '@/object-record/record-index/states/recordIndexSortsState'; import { recordIndexViewFilterGroupsState } from '@/object-record/record-index/states/recordIndexViewFilterGroupsState'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type UseLoadRecordIndexBoardProps = { objectNameSingular: string; diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordBoardRecordGqlFields.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordBoardRecordGqlFields.ts index c192de2083e0..6d3a4809e938 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordBoardRecordGqlFields.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordBoardRecordGqlFields.ts @@ -7,7 +7,7 @@ import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/g import { recordBoardVisibleFieldDefinitionsComponentSelector } from '@/object-record/record-board/states/selectors/recordBoardVisibleFieldDefinitionsComponentSelector'; import { recordGroupFieldMetadataComponentState } from '@/object-record/record-group/states/recordGroupFieldMetadataComponentState'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useRecordBoardRecordGqlFields = ({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordTableRecordGqlFields.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordTableRecordGqlFields.ts index a4588c6d5f95..4604b54a20e0 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordTableRecordGqlFields.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useRecordTableRecordGqlFields.ts @@ -5,7 +5,7 @@ import { getObjectMetadataIdentifierFields } from '@/object-metadata/utils/getOb import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/generateDepthOneRecordGqlFields'; import { visibleTableColumnsComponentSelector } from '@/object-record/record-table/states/selectors/visibleTableColumnsComponentSelector'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useRecordTableRecordGqlFields = ({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useSetRecordIndexEntityCount.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useSetRecordIndexEntityCount.ts index 2e589db7a4e9..1abdeb8a96d1 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useSetRecordIndexEntityCount.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useSetRecordIndexEntityCount.ts @@ -2,7 +2,7 @@ import { recordIndexEntityCountByGroupComponentFamilyState } from '@/object-reco import { recordIndexEntityCountNoGroupComponentFamilyState } from '@/object-record/record-index/states/recordIndexEntityCountNoGroupComponentFamilyState'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useSetRecordIndexEntityCount = (viewBarComponentId?: string) => { const recordIndexEntityCountNoGroupFamilyState = diff --git a/packages/twenty-front/src/modules/object-record/record-inline-cell/hooks/useInlineCell.ts b/packages/twenty-front/src/modules/object-record/record-inline-cell/hooks/useInlineCell.ts index 4a4600d67413..f01084d45b19 100644 --- a/packages/twenty-front/src/modules/object-record/record-inline-cell/hooks/useInlineCell.ts +++ b/packages/twenty-front/src/modules/object-record/record-inline-cell/hooks/useInlineCell.ts @@ -4,7 +4,7 @@ import { useRecoilState } from 'recoil'; import { FieldContext } from '@/object-record/record-field/contexts/FieldContext'; import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { useInitDraftValueV2 } from '@/object-record/record-field/hooks/useInitDraftValueV2'; import { getDropdownFocusIdForRecordField } from '@/object-record/utils/getDropdownFocusIdForRecordField'; diff --git a/packages/twenty-front/src/modules/object-record/record-show/components/FieldsCard.tsx b/packages/twenty-front/src/modules/object-record/record-show/components/FieldsCard.tsx index 37f26cc00a15..66baa1fb6374 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/components/FieldsCard.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/components/FieldsCard.tsx @@ -15,8 +15,8 @@ import { useRecordShowContainerData } from '@/object-record/record-show/hooks/us import { RecordDetailDuplicatesSection } from '@/object-record/record-show/record-detail-section/components/RecordDetailDuplicatesSection'; import { RecordDetailRelationSection } from '@/object-record/record-show/record-detail-section/components/RecordDetailRelationSection'; import { isFieldCellSupported } from '@/object-record/utils/isFieldCellSupported'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; type FieldsCardProps = { objectNameSingular: string; diff --git a/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx b/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx index 189e5147019f..e9b4a5f8700b 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/components/SummaryCard.tsx @@ -10,8 +10,8 @@ import { useRecordShowContainerData } from '@/object-record/record-show/hooks/us import { ShowPageSummaryCard } from '@/ui/layout/show-page/components/ShowPageSummaryCard'; import { ShowPageSummaryCardSkeletonLoader } from '@/ui/layout/show-page/components/ShowPageSummaryCardSkeletonLoader'; import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; type SummaryCardProps = { objectNameSingular: string; diff --git a/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowPage.ts b/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowPage.ts index c6753a5728f5..a8759cea39ca 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowPage.ts +++ b/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowPage.ts @@ -12,9 +12,8 @@ import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadat import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { buildFindOneRecordForShowPageOperationSignature } from '@/object-record/record-show/graphql/operations/factories/findOneRecordForShowPageOperationSignatureFactory'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; -import { capitalize } from 'twenty-shared'; +import { capitalize, isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; export const useRecordShowPage = ( propsObjectNameSingular: string, diff --git a/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowPagePagination.ts b/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowPagePagination.ts index 46285e38b2a0..1f3f149ddbb5 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowPagePagination.ts +++ b/packages/twenty-front/src/modules/object-record/record-show/hooks/useRecordShowPagePagination.ts @@ -9,8 +9,7 @@ import { lastShowPageRecordIdState } from '@/object-record/record-field/states/l import { useRecordIdsFromFindManyCacheRootQuery } from '@/object-record/record-show/hooks/useRecordIdsFromFindManyCacheRootQuery'; import { AppPath } from '@/types/AppPath'; import { useQueryVariablesFromActiveFieldsOfViewOrDefaultView } from '@/views/hooks/useQueryVariablesFromActiveFieldsOfViewOrDefaultView'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from 'twenty-ui'; +import { capitalize, isDefined } from 'twenty-shared'; import { useNavigateApp } from '~/hooks/useNavigateApp'; export const useRecordShowPagePagination = ( diff --git a/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationRecordsListItemEffect.tsx b/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationRecordsListItemEffect.tsx index 0d7451bd5ce5..5aba61c524af 100644 --- a/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationRecordsListItemEffect.tsx +++ b/packages/twenty-front/src/modules/object-record/record-show/record-detail-section/components/RecordDetailRelationRecordsListItemEffect.tsx @@ -4,7 +4,7 @@ import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { FieldContext } from '@/object-record/record-field/contexts/FieldContext'; import { FieldRelationMetadata } from '@/object-record/record-field/types/FieldMetadata'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type RecordDetailRelationRecordsListItemEffectProps = { relationRecordId: string; diff --git a/packages/twenty-front/src/modules/object-record/record-table/components/RecordTableRecordGroupRows.tsx b/packages/twenty-front/src/modules/object-record/record-table/components/RecordTableRecordGroupRows.tsx index 77547999e72a..7f16fd05d6a3 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/components/RecordTableRecordGroupRows.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/components/RecordTableRecordGroupRows.tsx @@ -10,7 +10,7 @@ import { isRecordGroupTableSectionToggledComponentState } from '@/object-record/ import { useRecoilComponentFamilyValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useMemo } from 'react'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const RecordTableRecordGroupRows = () => { const currentRecordGroupId = useCurrentRecordGroupId(); diff --git a/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts b/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts index 3cac0bca295c..12573f3dc313 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useSetRecordTableData.ts @@ -8,8 +8,8 @@ import { isRowSelectedComponentFamilyState } from '@/object-record/record-table/ import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; +import { isDefined } from 'twenty-shared'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { isDefined } from '~/utils/isDefined'; type useSetRecordTableDataProps = { recordTableId?: string; diff --git a/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useUpsertTableRecordInGroup.ts b/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useUpsertTableRecordInGroup.ts index 47ae746da879..6175877e195f 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useUpsertTableRecordInGroup.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useUpsertTableRecordInGroup.ts @@ -12,7 +12,7 @@ import { getScopeIdFromComponentId } from '@/ui/utilities/recoil-scope/utils/get import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { extractComponentSelector } from '@/ui/utilities/state/component-state/utils/extractComponentSelector'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useUpsertTableRecordInGroup = (recordGroupId: string) => { const { objectMetadataItem, objectNameSingular } = diff --git a/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useUpsertTableRecordNoGroup.ts b/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useUpsertTableRecordNoGroup.ts index c78a47d1edec..68b682cc3ca8 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useUpsertTableRecordNoGroup.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/hooks/internal/useUpsertTableRecordNoGroup.ts @@ -9,7 +9,7 @@ import { getScopeIdFromComponentId } from '@/ui/utilities/recoil-scope/utils/get import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { extractComponentSelector } from '@/ui/utilities/state/component-state/utils/extractComponentSelector'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useUpsertTableRecordNoGroup = () => { const { objectMetadataItem, objectNameSingular, recordTableId } = diff --git a/packages/twenty-front/src/modules/object-record/record-table/hooks/useAggregateRecordsForHeader.ts b/packages/twenty-front/src/modules/object-record/record-table/hooks/useAggregateRecordsForHeader.ts index 60a92cc4c7f2..b85b14257dfe 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/hooks/useAggregateRecordsForHeader.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/hooks/useAggregateRecordsForHeader.ts @@ -10,7 +10,7 @@ import { recordIndexViewFilterGroupsState } from '@/object-record/record-index/s import { UserContext } from '@/users/contexts/UserContext'; import { useContext } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type UseAggregateRecordsProps = { objectMetadataItem: ObjectMetadataItem; diff --git a/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewTableRecordInGroup.ts b/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewTableRecordInGroup.ts index 8e2f0236474e..05b675616a72 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewTableRecordInGroup.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewTableRecordInGroup.ts @@ -7,8 +7,8 @@ import { useSetActiveDropdownFocusIdAndMemorizePrevious } from '@/ui/layout/drop import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { useRecoilCallback } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { v4 } from 'uuid'; -import { isDefined } from '~/utils/isDefined'; export const useCreateNewTableRecordInGroup = () => { const { recordIndexId, objectMetadataItem } = useRecordIndexContextOrThrow(); diff --git a/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewTableRecords.ts b/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewTableRecords.ts index 189385d736a9..5d9c5cb0c2f6 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewTableRecords.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewTableRecords.ts @@ -15,10 +15,10 @@ import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/componen import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useRecoilCallback } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { v4 } from 'uuid'; import { FeatureFlagKey } from '~/generated/graphql'; import { useNavigateApp } from '~/hooks/useNavigateApp'; -import { isDefined } from '~/utils/isDefined'; export const useCreateNewTableRecord = ({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-body/components/RecordTableBodyDragDropContextProvider.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-body/components/RecordTableBodyDragDropContextProvider.tsx index dc74cff107d7..f59a39023823 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-body/components/RecordTableBodyDragDropContextProvider.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-body/components/RecordTableBodyDragDropContextProvider.tsx @@ -11,7 +11,7 @@ import { isRemoveSortingModalOpenState } from '@/object-record/record-table/stat import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { useGetCurrentView } from '@/views/hooks/useGetCurrentView'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const RecordTableBodyDragDropContextProvider = ({ children, diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-body/components/RecordTableBodyRecordGroupDragDropContextProvider.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-body/components/RecordTableBodyRecordGroupDragDropContextProvider.tsx index 55af955e5046..4054c2825e4b 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-body/components/RecordTableBodyRecordGroupDragDropContextProvider.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-body/components/RecordTableBodyRecordGroupDragDropContextProvider.tsx @@ -12,7 +12,7 @@ import { useRecordTableContextOrThrow } from '@/object-record/record-table/conte import { isRemoveSortingModalOpenState } from '@/object-record/record-table/states/isRemoveSortingModalOpenState'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const RecordTableBodyRecordGroupDragDropContextProvider = ({ children, diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellSoftFocusMode.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellSoftFocusMode.tsx index 20c8630e67ac..ae38eabbcaae 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellSoftFocusMode.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/components/RecordTableCellSoftFocusMode.tsx @@ -15,7 +15,7 @@ import { useOpenRecordTableCellFromCell } from '@/object-record/record-table/rec import { isSoftFocusUsingMouseState } from '@/object-record/record-table/states/isSoftFocusUsingMouseState'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { isNonTextWritingKey } from '@/ui/utilities/hotkey/utils/isNonTextWritingKey'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { TableHotkeyScope } from '../../types/TableHotkeyScope'; diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCellV2.ts b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCellV2.ts index fae00fd95a88..bf1efc24c8c3 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCellV2.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCellV2.ts @@ -18,7 +18,7 @@ import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope'; import { useClickOutsideListener } from '@/ui/utilities/pointer-event/hooks/useClickOutsideListener'; import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; import { RECORD_TABLE_CLICK_OUTSIDE_LISTENER_ID } from '@/object-record/record-table/constants/RecordTableClickOutsideListenerId'; diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterAggregateOperationMenuItems.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterAggregateOperationMenuItems.tsx index 6e852d10c6ab..cb62db6b656a 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterAggregateOperationMenuItems.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterAggregateOperationMenuItems.tsx @@ -4,7 +4,8 @@ import { useViewFieldAggregateOperation } from '@/object-record/record-table/rec import { ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations'; import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { ReactNode, useContext } from 'react'; -import { IconCheck, isDefined, MenuItem } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconCheck, MenuItem } from 'twenty-ui'; export const RecordTableColumnAggregateFooterAggregateOperationMenuItems = ({ aggregateOperations, diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterMenuContent.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterMenuContent.tsx index 2dfd0aa8d56d..e1826d763ee2 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterMenuContent.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterMenuContent.tsx @@ -11,8 +11,8 @@ import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { t } from '@lingui/core/macro'; import { useContext, useMemo } from 'react'; import { Key } from 'ts-key-enum'; -import { isFieldMetadataDateKind } from 'twenty-shared'; -import { IconCheck, isDefined, MenuItem } from 'twenty-ui'; +import { isDefined, isFieldMetadataDateKind } from 'twenty-shared'; +import { IconCheck, MenuItem } from 'twenty-ui'; import { FieldMetadataType } from '~/generated-metadata/graphql'; export const RecordTableColumnAggregateFooterMenuContent = () => { diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterValue.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterValue.tsx index df862c132275..7a284b016930 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterValue.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/components/RecordTableColumnAggregateFooterValue.tsx @@ -1,7 +1,8 @@ import { useAggregateRecordsForRecordTableColumnFooter } from '@/object-record/record-table/record-table-footer/hooks/useAggregateRecordsForRecordTableColumnFooter'; import styled from '@emotion/styled'; import { Trans } from '@lingui/react/macro'; -import { isDefined, OverflowingTextWithTooltip } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { OverflowingTextWithTooltip } from 'twenty-ui'; const StyledText = styled.span` overflow: hidden; diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/hooks/useAggregateRecordsForRecordTableColumnFooter.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/hooks/useAggregateRecordsForRecordTableColumnFooter.tsx index 1949bfbda8ec..0e101cc95b37 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/hooks/useAggregateRecordsForRecordTableColumnFooter.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/hooks/useAggregateRecordsForRecordTableColumnFooter.tsx @@ -11,7 +11,7 @@ import { viewFieldAggregateOperationState } from '@/object-record/record-table/r import { UserContext } from '@/users/contexts/UserContext'; import { useContext } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useAggregateRecordsForRecordTableColumnFooter = ( fieldMetadataId: string, diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/states/hasAggregateOperationForViewFieldFamilySelector.ts b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/states/hasAggregateOperationForViewFieldFamilySelector.ts index 4b78840466b2..5143256f9c12 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/states/hasAggregateOperationForViewFieldFamilySelector.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/states/hasAggregateOperationForViewFieldFamilySelector.ts @@ -1,6 +1,6 @@ import { viewFieldAggregateOperationState } from '@/object-record/record-table/record-table-footer/states/viewFieldAggregateOperationState'; import { selectorFamily } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const hasAggregateOperationForViewFieldFamilySelector = selectorFamily< boolean, diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/utils/getAvailableAggregateOperationsForFieldMetadataType.ts b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/utils/getAvailableAggregateOperationsForFieldMetadataType.ts index cf44d0de559a..50c225bf6748 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/utils/getAvailableAggregateOperationsForFieldMetadataType.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-footer/utils/getAvailableAggregateOperationsForFieldMetadataType.ts @@ -3,8 +3,8 @@ import { FIELD_TYPES_AVAILABLE_FOR_NON_STANDARD_AGGREGATE_OPERATION } from '@/ob import { ExtendedAggregateOperations } from '@/object-record/record-table/types/ExtendedAggregateOperations'; import { AggregateOperationsOmittingStandardOperations } from '@/object-record/types/AggregateOperationsOmittingStandardOperations'; import { isFieldTypeValidForAggregateOperation } from '@/object-record/utils/isFieldTypeValidForAggregateOperation'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; export const getAvailableAggregateOperationsForFieldMetadataType = ({ fieldMetadataType, diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-section/components/RecordTableRecordGroupSection.tsx b/packages/twenty-front/src/modules/object-record/record-table/record-table-section/components/RecordTableRecordGroupSection.tsx index 1d192d69030a..bd5620f33bcf 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-section/components/RecordTableRecordGroupSection.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-section/components/RecordTableRecordGroupSection.tsx @@ -1,12 +1,6 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { useCallback } from 'react'; -import { - AnimatedLightIconButton, - IconChevronDown, - isDefined, - Tag, -} from 'twenty-ui'; import { RecordBoardColumnHeaderAggregateDropdown } from '@/object-record/record-board/record-board-column/components/RecordBoardColumnHeaderAggregateDropdown'; import { useCurrentRecordGroupId } from '@/object-record/record-group/hooks/useCurrentRecordGroupId'; @@ -21,6 +15,8 @@ import { visibleTableColumnsComponentSelector } from '@/object-record/record-tab import { useRecoilComponentFamilyStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyStateV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; +import { AnimatedLightIconButton, IconChevronDown, Tag } from 'twenty-ui'; const StyledTrContainer = styled.tr` cursor: pointer; diff --git a/packages/twenty-front/src/modules/object-record/record-table/states/selectors/hasPendingRecordComponentSelector.ts b/packages/twenty-front/src/modules/object-record/record-table/states/selectors/hasPendingRecordComponentSelector.ts index 377e75f322ca..11593254b0d4 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/states/selectors/hasPendingRecordComponentSelector.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/states/selectors/hasPendingRecordComponentSelector.ts @@ -4,7 +4,7 @@ import { RecordTableComponentInstanceContext } from '@/object-record/record-tabl import { recordTablePendingRecordIdByGroupComponentFamilyState } from '@/object-record/record-table/states/recordTablePendingRecordIdByGroupComponentFamilyState'; import { recordTablePendingRecordIdComponentState } from '@/object-record/record-table/states/recordTablePendingRecordIdComponentState'; import { createComponentSelectorV2 } from '@/ui/utilities/state/component-state/utils/createComponentSelectorV2'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const hasPendingRecordComponentSelector = createComponentSelectorV2({ key: 'hasPendingRecordComponentSelector', diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/components/MultiRecordSelect.tsx b/packages/twenty-front/src/modules/object-record/relation-picker/components/MultiRecordSelect.tsx index f5348821cd01..2a8727d3db46 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/components/MultiRecordSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/relation-picker/components/MultiRecordSelect.tsx @@ -24,7 +24,8 @@ import { Placement } from '@floating-ui/react'; import { useCallback, useEffect, useRef } from 'react'; import { useRecoilValue } from 'recoil'; import { Key } from 'ts-key-enum'; -import { IconPlus, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconPlus } from 'twenty-ui'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; export const StyledSelectableItem = styled(SelectableItem)` diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/components/MultipleObjectRecordSelectItem.tsx b/packages/twenty-front/src/modules/object-record/relation-picker/components/MultipleObjectRecordSelectItem.tsx index ce8d472bd28f..212b45651e98 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/components/MultipleObjectRecordSelectItem.tsx +++ b/packages/twenty-front/src/modules/object-record/relation-picker/components/MultipleObjectRecordSelectItem.tsx @@ -8,7 +8,7 @@ import { RecordPickerComponentInstanceContext } from '@/object-record/relation-p import { SelectableItem } from '@/ui/layout/selectable-list/components/SelectableItem'; import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const StyledSelectableItem = styled(SelectableItem)` height: 100%; diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelect.tsx b/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelect.tsx index f18bdc769e8d..e2f4ded6e2b4 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelect.tsx @@ -6,7 +6,7 @@ import { } from '@/object-record/relation-picker/components/SingleRecordSelectMenuItemsWithSearch'; import { DropdownMenu } from '@/ui/layout/dropdown/components/DropdownMenu'; import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export type SingleRecordSelectProps = { width?: number; diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelectMenuItems.tsx b/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelectMenuItems.tsx index 77782e5507f3..5217b7a3f41b 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelectMenuItems.tsx +++ b/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelectMenuItems.tsx @@ -11,7 +11,7 @@ import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/Drop import { SelectableList } from '@/ui/layout/selectable-list/components/SelectableList'; import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { RecordForSelect } from '../types/RecordForSelect'; import { RelationPickerHotkeyScope } from '../types/RelationPickerHotkeyScope'; diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelectMenuItemsWithSearch.tsx b/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelectMenuItemsWithSearch.tsx index 1b9e1c3787f3..803210bf524a 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelectMenuItemsWithSearch.tsx +++ b/packages/twenty-front/src/modules/object-record/relation-picker/components/SingleRecordSelectMenuItemsWithSearch.tsx @@ -11,8 +11,8 @@ import { DropdownMenuSearchInput } from '@/ui/layout/dropdown/components/Dropdow import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator'; import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow'; import { Placement } from '@floating-ui/react'; +import { isDefined } from 'twenty-shared'; import { IconPlus } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; export type SingleRecordSelectMenuItemsWithSearchProps = { diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useAddNewRecordAndOpenRightDrawer.ts b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useAddNewRecordAndOpenRightDrawer.ts index e1ee1ac3d2ed..ea3dd0aa28f6 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useAddNewRecordAndOpenRightDrawer.ts +++ b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useAddNewRecordAndOpenRightDrawer.ts @@ -10,11 +10,11 @@ import { viewableRecordIdState } from '@/object-record/record-right-drawer/state import { viewableRecordNameSingularState } from '@/object-record/record-right-drawer/states/viewableRecordNameSingularState'; import { useRightDrawer } from '@/ui/layout/right-drawer/hooks/useRightDrawer'; import { RightDrawerPages } from '@/ui/layout/right-drawer/types/RightDrawerPages'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType, RelationDefinitionType, } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; type RecordDetailRelationSectionProps = { relationObjectMetadataNameSingular: string; diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useLimitPerMetadataItem.ts b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useLimitPerMetadataItem.ts index 29482fb1fabe..cca9e525e2eb 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useLimitPerMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useLimitPerMetadataItem.ts @@ -1,7 +1,6 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { DEFAULT_SEARCH_REQUEST_LIMIT } from '@/object-record/constants/DefaultSearchRequestLimit'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from '~/utils/isDefined'; +import { capitalize, isDefined } from 'twenty-shared'; export const useLimitPerMetadataItem = ({ objectMetadataItems, diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.ts b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.ts index ebac778c44f9..a9087624fe05 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.ts +++ b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray.ts @@ -6,7 +6,7 @@ import { getObjectRecordIdentifier } from '@/object-metadata/utils/getObjectReco import { RecordGqlConnection } from '@/object-record/graphql/types/RecordGqlConnection'; import { formatMultiObjectRecordSearchResults } from '@/object-record/relation-picker/utils/formatMultiObjectRecordSearchResults'; import { ObjectRecordForSelect } from '@/object-record/types/ObjectRecordForSelect'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export type MultiObjectRecordQueryResult = { [namePlural: string]: RecordGqlConnection; diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearch.ts b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearch.ts index 07d5e0d9cda4..6b862a8e2d3d 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearch.ts +++ b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearch.ts @@ -8,7 +8,7 @@ import { useGenerateCombinedSearchRecordsQuery } from '@/object-record/multiple- import { useLimitPerMetadataItem } from '@/object-record/relation-picker/hooks/useLimitPerMetadataItem'; import { MultiObjectRecordQueryResult } from '@/object-record/relation-picker/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; import { isObjectMetadataItemSearchableInCombinedRequest } from '@/object-record/utils/isObjectMetadataItemSearchableInCombinedRequest'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useMultiObjectSearch = ({ searchFilterValue, diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.ts b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.ts index 5945af71d390..2ab5ae565687 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.ts +++ b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap.ts @@ -6,7 +6,7 @@ import { getObjectRecordIdentifier } from '@/object-metadata/utils/getObjectReco import { MultiObjectRecordQueryResult } from '@/object-record/relation-picker/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; import { formatMultiObjectRecordSearchResults } from '@/object-record/relation-picker/utils/formatMultiObjectRecordSearchResults'; import { ObjectRecordForSelect } from '@/object-record/types/ObjectRecordForSelect'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useMultiObjectSearchQueryResultFormattedAsObjectRecordsMap = ({ multiObjectRecordsQueryResult, diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearchSelectedItemsQuery.ts b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearchSelectedItemsQuery.ts index 372109ef6a16..34c2be76130a 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearchSelectedItemsQuery.ts +++ b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useMultiObjectSearchSelectedItemsQuery.ts @@ -11,8 +11,7 @@ import { } from '@/object-record/relation-picker/hooks/useMultiObjectRecordsQueryResultFormattedAsObjectRecordForSelectArray'; import { useOrderByFieldPerMetadataItem } from '@/object-record/relation-picker/hooks/useOrderByFieldPerMetadataItem'; import { SelectedObjectRecordId } from '@/object-record/types/SelectedObjectRecordId'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from '~/utils/isDefined'; +import { capitalize, isDefined } from 'twenty-shared'; export const EMPTY_QUERY = gql` query Empty { diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useOrderByFieldPerMetadataItem.ts b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useOrderByFieldPerMetadataItem.ts index 1fb2a394884e..dbec589c094d 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useOrderByFieldPerMetadataItem.ts +++ b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useOrderByFieldPerMetadataItem.ts @@ -1,7 +1,6 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { getOrderByFieldForObjectMetadataItem } from '@/object-metadata/utils/getObjectOrderByField'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from '~/utils/isDefined'; +import { capitalize, isDefined } from 'twenty-shared'; export const useOrderByFieldPerMetadataItem = ({ objectMetadataItems, diff --git a/packages/twenty-front/src/modules/object-record/spreadsheet-import/utils/buildRecordFromImportedStructuredRow.ts b/packages/twenty-front/src/modules/object-record/spreadsheet-import/utils/buildRecordFromImportedStructuredRow.ts index b4496199ca7f..fe2e1246c4fc 100644 --- a/packages/twenty-front/src/modules/object-record/spreadsheet-import/utils/buildRecordFromImportedStructuredRow.ts +++ b/packages/twenty-front/src/modules/object-record/spreadsheet-import/utils/buildRecordFromImportedStructuredRow.ts @@ -8,7 +8,7 @@ import { import { COMPOSITE_FIELD_IMPORT_LABELS } from '@/object-record/spreadsheet-import/constants/CompositeFieldImportLabels'; import { ImportedStructuredRow } from '@/spreadsheet-import/types'; import { isNonEmptyString } from '@sniptt/guards'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { z } from 'zod'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { castToString } from '~/utils/castToString'; diff --git a/packages/twenty-front/src/modules/object-record/spreadsheet-import/utils/getSpreadSheetFieldValidationDefinitions.ts b/packages/twenty-front/src/modules/object-record/spreadsheet-import/utils/getSpreadSheetFieldValidationDefinitions.ts index af0a9a0ca8c8..3907ed8f7c53 100644 --- a/packages/twenty-front/src/modules/object-record/spreadsheet-import/utils/getSpreadSheetFieldValidationDefinitions.ts +++ b/packages/twenty-front/src/modules/object-record/spreadsheet-import/utils/getSpreadSheetFieldValidationDefinitions.ts @@ -1,5 +1,5 @@ import { FieldValidationDefinition } from '@/spreadsheet-import/types'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { isValidUuid } from '~/utils/isValidUuid'; import { absoluteUrlSchema } from '~/utils/validation-schemas/absoluteUrlSchema'; diff --git a/packages/twenty-front/src/modules/object-record/utils/computeOptimisticRecordFromInput.ts b/packages/twenty-front/src/modules/object-record/utils/computeOptimisticRecordFromInput.ts index a553c3f2e186..9e6f0dea7653 100644 --- a/packages/twenty-front/src/modules/object-record/utils/computeOptimisticRecordFromInput.ts +++ b/packages/twenty-front/src/modules/object-record/utils/computeOptimisticRecordFromInput.ts @@ -9,9 +9,9 @@ import { isFieldRelation } from '@/object-record/record-field/types/guards/isFie import { isFieldUuid } from '@/object-record/record-field/types/guards/isFieldUuid'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { getForeignKeyNameFromRelationFieldName } from '@/object-record/utils/getForeignKeyNameFromRelationFieldName'; +import { isDefined } from 'twenty-shared'; import { RelationDefinitionType } from '~/generated-metadata/graphql'; import { FieldMetadataType } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; type ComputeOptimisticCacheRecordInputArgs = { objectMetadataItem: ObjectMetadataItem; diff --git a/packages/twenty-front/src/modules/object-record/utils/getAggregateQueryName.ts b/packages/twenty-front/src/modules/object-record/utils/getAggregateQueryName.ts index cdecc42adcc6..298239ff9aed 100644 --- a/packages/twenty-front/src/modules/object-record/utils/getAggregateQueryName.ts +++ b/packages/twenty-front/src/modules/object-record/utils/getAggregateQueryName.ts @@ -1,5 +1,4 @@ -import { capitalize } from 'twenty-shared'; -import { isDefined } from '~/utils/isDefined'; +import { capitalize, isDefined } from 'twenty-shared'; export const getAggregateQueryName = ( objectMetadataNamePlural: string, diff --git a/packages/twenty-front/src/modules/object-record/utils/getAvailableFieldsIdsForAggregationFromObjectFields.ts b/packages/twenty-front/src/modules/object-record/utils/getAvailableFieldsIdsForAggregationFromObjectFields.ts index 91b6891347bd..68b7ebb3fcd1 100644 --- a/packages/twenty-front/src/modules/object-record/utils/getAvailableFieldsIdsForAggregationFromObjectFields.ts +++ b/packages/twenty-front/src/modules/object-record/utils/getAvailableFieldsIdsForAggregationFromObjectFields.ts @@ -3,7 +3,7 @@ import { ExtendedAggregateOperations } from '@/object-record/record-table/types/ import { AvailableFieldsForAggregateOperation } from '@/object-record/types/AvailableFieldsForAggregateOperation'; import { getAvailableAggregationsFromObjectFields } from '@/object-record/utils/getAvailableAggregationsFromObjectFields'; import { initializeAvailableFieldsForAggregateOperationMap } from '@/object-record/utils/initializeAvailableFieldsForAggregateOperationMap'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const getAvailableFieldsIdsForAggregationFromObjectFields = ( fields: FieldMetadataItem[], diff --git a/packages/twenty-front/src/modules/object-record/utils/getRecordChipGenerators.ts b/packages/twenty-front/src/modules/object-record/utils/getRecordChipGenerators.ts index 650a4825dccd..9bcb8adf5657 100644 --- a/packages/twenty-front/src/modules/object-record/utils/getRecordChipGenerators.ts +++ b/packages/twenty-front/src/modules/object-record/utils/getRecordChipGenerators.ts @@ -11,8 +11,8 @@ import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifie import { isFieldIdentifierDisplay } from '@/object-record/record-field/meta-types/display/utils/isFieldIdentifierDisplay'; import { RecordChipData } from '@/object-record/record-field/types/RecordChipData'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; export const getRecordChipGenerators = ( objectMetadataItems: ObjectMetadataItem[], diff --git a/packages/twenty-front/src/modules/object-record/utils/makeAndFilterVariables.ts b/packages/twenty-front/src/modules/object-record/utils/makeAndFilterVariables.ts index 1f5ae29502f3..bf20cefc4869 100644 --- a/packages/twenty-front/src/modules/object-record/utils/makeAndFilterVariables.ts +++ b/packages/twenty-front/src/modules/object-record/utils/makeAndFilterVariables.ts @@ -1,5 +1,5 @@ import { RecordGqlOperationFilter } from '@/object-record/graphql/types/RecordGqlOperationFilter'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const makeAndFilterVariables = ( filters: (RecordGqlOperationFilter | undefined)[], diff --git a/packages/twenty-front/src/modules/object-record/utils/makeOrFilterVariables.ts b/packages/twenty-front/src/modules/object-record/utils/makeOrFilterVariables.ts index ed07e891c763..e466cccffe88 100644 --- a/packages/twenty-front/src/modules/object-record/utils/makeOrFilterVariables.ts +++ b/packages/twenty-front/src/modules/object-record/utils/makeOrFilterVariables.ts @@ -1,5 +1,5 @@ import { RecordGqlOperationFilter } from '@/object-record/graphql/types/RecordGqlOperationFilter'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const makeOrFilterVariables = ( filters: (RecordGqlOperationFilter | undefined)[], diff --git a/packages/twenty-front/src/modules/object-record/utils/prefillRecord.ts b/packages/twenty-front/src/modules/object-record/utils/prefillRecord.ts index c27f5042f616..a71b4ae11c95 100644 --- a/packages/twenty-front/src/modules/object-record/utils/prefillRecord.ts +++ b/packages/twenty-front/src/modules/object-record/utils/prefillRecord.ts @@ -4,8 +4,8 @@ import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { generateDefaultFieldValue } from '@/object-record/utils/generateDefaultFieldValue'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType, RelationDefinitionType } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; export const prefillRecord = <T extends ObjectRecord>({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/object-record/utils/sanitizeRecordInput.ts b/packages/twenty-front/src/modules/object-record/utils/sanitizeRecordInput.ts index effe3c870666..38d0e9e5439f 100644 --- a/packages/twenty-front/src/modules/object-record/utils/sanitizeRecordInput.ts +++ b/packages/twenty-front/src/modules/object-record/utils/sanitizeRecordInput.ts @@ -1,8 +1,8 @@ import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; +import { isDefined } from 'twenty-shared'; import { RelationDefinitionType } from '~/generated-metadata/graphql'; import { FieldMetadataType } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; export const sanitizeRecordInput = ({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/onboarding/hooks/useSetNextOnboardingStatus.ts b/packages/twenty-front/src/modules/onboarding/hooks/useSetNextOnboardingStatus.ts index b2a252a3c3dd..c15ca6c505bf 100644 --- a/packages/twenty-front/src/modules/onboarding/hooks/useSetNextOnboardingStatus.ts +++ b/packages/twenty-front/src/modules/onboarding/hooks/useSetNextOnboardingStatus.ts @@ -5,8 +5,8 @@ import { CurrentWorkspace, currentWorkspaceState, } from '@/auth/states/currentWorkspaceState'; +import { isDefined } from 'twenty-shared'; import { OnboardingStatus } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; const getNextOnboardingStatus = ( currentUser: CurrentUser | null, diff --git a/packages/twenty-front/src/modules/prefetch/components/PrefetchRunQueriesEffect.tsx b/packages/twenty-front/src/modules/prefetch/components/PrefetchRunQueriesEffect.tsx index 2a6481d292c6..2c4d1f916992 100644 --- a/packages/twenty-front/src/modules/prefetch/components/PrefetchRunQueriesEffect.tsx +++ b/packages/twenty-front/src/modules/prefetch/components/PrefetchRunQueriesEffect.tsx @@ -11,7 +11,7 @@ import { useUpsertRecordsInCacheForPrefetchKey } from '@/prefetch/hooks/internal import { PrefetchKey } from '@/prefetch/types/PrefetchKey'; import { View } from '@/views/types/View'; import { useIsWorkspaceActivationStatusSuspended } from '@/workspace/hooks/useIsWorkspaceActivationStatusSuspended'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const PrefetchRunQueriesEffect = () => { const currentUser = useRecoilValue(currentUserState); diff --git a/packages/twenty-front/src/modules/search/hooks/useFilteredSearchRecordQuery.ts b/packages/twenty-front/src/modules/search/hooks/useFilteredSearchRecordQuery.ts index e58c35bf9348..927ed81cb29b 100644 --- a/packages/twenty-front/src/modules/search/hooks/useFilteredSearchRecordQuery.ts +++ b/packages/twenty-front/src/modules/search/hooks/useFilteredSearchRecordQuery.ts @@ -4,7 +4,7 @@ import { useSearchRecords } from '@/object-record/hooks/useSearchRecords'; import { RecordForSelect } from '@/object-record/relation-picker/types/RecordForSelect'; import { RecordsForMultipleRecordSelect } from '@/object-record/relation-picker/types/RecordsForMultipleRecordSelect'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; // TODO: use this for all search queries, because we need selectedRecords and recordsToSelect each time we want to search // Filtered entities to select are diff --git a/packages/twenty-front/src/modules/serverless-functions/components/ServerlessFunctionExecutionResult.tsx b/packages/twenty-front/src/modules/serverless-functions/components/ServerlessFunctionExecutionResult.tsx index 40ab34052bd6..17d79914fb76 100644 --- a/packages/twenty-front/src/modules/serverless-functions/components/ServerlessFunctionExecutionResult.tsx +++ b/packages/twenty-front/src/modules/serverless-functions/components/ServerlessFunctionExecutionResult.tsx @@ -1,15 +1,16 @@ import styled from '@emotion/styled'; import { LightCopyIconButton } from '@/object-record/record-field/components/LightCopyIconButton'; -import { - DEFAULT_OUTPUT_VALUE, - ServerlessFunctionTestData, -} from '@/workflow/states/serverlessFunctionTestDataFamilyState'; +import { ServerlessFunctionTestData } from '@/workflow/states/serverlessFunctionTestDataFamilyState'; import { useTheme } from '@emotion/react'; import { CodeEditor, CoreEditorHeader, IconSquareRoundedCheck, + IconSquareRoundedX, + IconLoader, + IconSettings, + AnimatedCircleLoading, } from 'twenty-ui'; import { ServerlessFunctionExecutionStatus } from '~/generated-metadata/graphql'; @@ -18,20 +19,33 @@ const StyledContainer = styled.div` flex-direction: column; `; -const StyledOutput = styled.div<{ status?: ServerlessFunctionExecutionStatus }>` +type OutputAccent = 'default' | 'success' | 'error'; + +const StyledInfoContainer = styled.div` + display: flex; + font-size: ${({ theme }) => theme.font.size.md}; +`; + +const StyledOutput = styled.div<{ accent?: OutputAccent }>` align-items: center; gap: ${({ theme }) => theme.spacing(1)}; - color: ${({ theme, status }) => - status === ServerlessFunctionExecutionStatus.SUCCESS + color: ${({ theme, accent }) => + accent === 'success' ? theme.color.turquoise - : theme.color.red}; + : accent === 'error' + ? theme.color.red + : theme.font.color.secondary}; display: flex; `; export const ServerlessFunctionExecutionResult = ({ serverlessFunctionTestData, + isTesting = false, + isBuilding = false, }: { serverlessFunctionTestData: ServerlessFunctionTestData; + isTesting?: boolean; + isBuilding?: boolean; }) => { const theme = useTheme(); @@ -40,25 +54,60 @@ export const ServerlessFunctionExecutionResult = ({ serverlessFunctionTestData.output.error || ''; - const leftNode = - serverlessFunctionTestData.output.data === DEFAULT_OUTPUT_VALUE ? ( - 'Output' - ) : ( - <StyledOutput status={serverlessFunctionTestData.output.status}> - <IconSquareRoundedCheck size={theme.icon.size.md} /> - {serverlessFunctionTestData.output.status === - ServerlessFunctionExecutionStatus.SUCCESS - ? '200 OK' - : '500 Error'} - {' - '} - {serverlessFunctionTestData.output.duration}ms - </StyledOutput> - ); + const SuccessLeftNode = ( + <StyledOutput accent="success"> + <IconSquareRoundedCheck size={theme.icon.size.md} /> + 200 OK - {serverlessFunctionTestData.output.duration}ms + </StyledOutput> + ); + + const ErrorLeftNode = ( + <StyledOutput accent="error"> + <IconSquareRoundedX size={theme.icon.size.md} /> + 500 Error - {serverlessFunctionTestData.output.duration}ms + </StyledOutput> + ); + + const IdleLeftNode = 'Output'; + + const PendingLeftNode = (isTesting || isBuilding) && ( + <StyledOutput> + <AnimatedCircleLoading> + {isTesting ? ( + <IconLoader size={theme.icon.size.md} /> + ) : ( + <IconSettings size={theme.icon.size.md} /> + )} + </AnimatedCircleLoading> + <StyledInfoContainer> + {isTesting ? 'Running function' : 'Building function'} + </StyledInfoContainer> + </StyledOutput> + ); + + const computeLeftNode = () => { + if (isTesting || isBuilding) { + return PendingLeftNode; + } + if ( + serverlessFunctionTestData.output.status === + ServerlessFunctionExecutionStatus.ERROR + ) { + return ErrorLeftNode; + } + if ( + serverlessFunctionTestData.output.status === + ServerlessFunctionExecutionStatus.SUCCESS + ) { + return SuccessLeftNode; + } + return IdleLeftNode; + }; return ( <StyledContainer> <CoreEditorHeader - leftNodes={[leftNode]} + leftNodes={[computeLeftNode()]} rightNodes={[<LightCopyIconButton copyText={result} />]} /> <CodeEditor @@ -66,6 +115,7 @@ export const ServerlessFunctionExecutionResult = ({ language={serverlessFunctionTestData.language} height={serverlessFunctionTestData.height} options={{ readOnly: true, domReadOnly: true }} + isLoading={isTesting || isBuilding} withHeader /> </StyledContainer> diff --git a/packages/twenty-front/src/modules/serverless-functions/hooks/useTestServerlessFunction.ts b/packages/twenty-front/src/modules/serverless-functions/hooks/useTestServerlessFunction.ts index 5c40270c292f..fd7c662b1a72 100644 --- a/packages/twenty-front/src/modules/serverless-functions/hooks/useTestServerlessFunction.ts +++ b/packages/twenty-front/src/modules/serverless-functions/hooks/useTestServerlessFunction.ts @@ -1,56 +1,77 @@ +import { useBuildDraftServerlessFunction } from '@/settings/serverless-functions/hooks/useBuildDraftServerlessFunction'; import { useExecuteOneServerlessFunction } from '@/settings/serverless-functions/hooks/useExecuteOneServerlessFunction'; -import { useRecoilState } from 'recoil'; import { serverlessFunctionTestDataFamilyState } from '@/workflow/states/serverlessFunctionTestDataFamilyState'; -import { isDefined } from 'twenty-ui'; +import { useState } from 'react'; +import { useRecoilState } from 'recoil'; +import { isDefined } from 'twenty-shared'; +import { sleep } from '~/utils/sleep'; export const useTestServerlessFunction = ({ serverlessFunctionId, - serverlessFunctionVersion = 'draft', callback, }: { serverlessFunctionId: string; - serverlessFunctionVersion?: string; callback?: (testResult: object) => void; }) => { + const [isTesting, setIsTesting] = useState(false); + const [isBuilding, setIsBuilding] = useState(false); const { executeOneServerlessFunction } = useExecuteOneServerlessFunction(); + const { buildDraftServerlessFunction } = useBuildDraftServerlessFunction(); const [serverlessFunctionTestData, setServerlessFunctionTestData] = useRecoilState(serverlessFunctionTestDataFamilyState(serverlessFunctionId)); - const testServerlessFunction = async () => { - const result = await executeOneServerlessFunction({ - id: serverlessFunctionId, - payload: serverlessFunctionTestData.input, - version: serverlessFunctionVersion, - }); + const testServerlessFunction = async (shouldBuild = true) => { + try { + if (shouldBuild) { + setIsBuilding(true); + await buildDraftServerlessFunction({ + id: serverlessFunctionId, + }); + setIsBuilding(false); + } + setIsTesting(true); + await sleep(200); // Delay artificially to avoid flashing the UI + const result = await executeOneServerlessFunction({ + id: serverlessFunctionId, + payload: serverlessFunctionTestData.input, + version: 'draft', + }); - if (isDefined(result?.data?.executeOneServerlessFunction?.data)) { - callback?.(result?.data?.executeOneServerlessFunction?.data); - } + setIsTesting(false); - setServerlessFunctionTestData((prev) => ({ - ...prev, - language: 'json', - height: 300, - output: { - data: result?.data?.executeOneServerlessFunction?.data - ? JSON.stringify( - result?.data?.executeOneServerlessFunction?.data, - null, - 4, - ) - : undefined, - duration: result?.data?.executeOneServerlessFunction?.duration, - status: result?.data?.executeOneServerlessFunction?.status, - error: result?.data?.executeOneServerlessFunction?.error - ? JSON.stringify( - result?.data?.executeOneServerlessFunction?.error, - null, - 4, - ) - : undefined, - }, - })); + if (isDefined(result?.data?.executeOneServerlessFunction?.data)) { + callback?.(result?.data?.executeOneServerlessFunction?.data); + } + + setServerlessFunctionTestData((prev) => ({ + ...prev, + language: 'json', + height: 300, + output: { + data: result?.data?.executeOneServerlessFunction?.data + ? JSON.stringify( + result?.data?.executeOneServerlessFunction?.data, + null, + 4, + ) + : undefined, + duration: result?.data?.executeOneServerlessFunction?.duration, + status: result?.data?.executeOneServerlessFunction?.status, + error: result?.data?.executeOneServerlessFunction?.error + ? JSON.stringify( + result?.data?.executeOneServerlessFunction?.error, + null, + 4, + ) + : undefined, + }, + })); + } catch (error) { + setIsBuilding(false); + setIsTesting(false); + throw error; + } }; - return { testServerlessFunction }; + return { testServerlessFunction, isTesting, isBuilding }; }; diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/getDefaultFunctionInputFromInputSchema.ts b/packages/twenty-front/src/modules/serverless-functions/utils/getDefaultFunctionInputFromInputSchema.ts index 8aec5bce22f1..7375d3ee4ca1 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/getDefaultFunctionInputFromInputSchema.ts +++ b/packages/twenty-front/src/modules/serverless-functions/utils/getDefaultFunctionInputFromInputSchema.ts @@ -1,6 +1,6 @@ import { InputSchema } from '@/workflow/types/InputSchema'; import { FunctionInput } from '@/workflow/workflow-steps/workflow-actions/types/FunctionInput'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const getDefaultFunctionInputFromInputSchema = ( inputSchema: InputSchema, diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputFromSourceCode.ts b/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputFromSourceCode.ts index ac84b6682957..ea3287c2eb60 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputFromSourceCode.ts +++ b/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputFromSourceCode.ts @@ -2,7 +2,7 @@ import { getDefaultFunctionInputFromInputSchema } from '@/serverless-functions/u import { getFunctionInputSchema } from '@/serverless-functions/utils/getFunctionInputSchema'; import { FunctionInput } from '@/workflow/workflow-steps/workflow-actions/types/FunctionInput'; import { isObject } from '@sniptt/guards'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const getFunctionInputFromSourceCode = ( sourceCode?: string, diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputSchema.ts b/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputSchema.ts index 381d87f66988..34bc476a28f7 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputSchema.ts +++ b/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionInputSchema.ts @@ -1,3 +1,5 @@ +import { InputSchema, InputSchemaProperty } from '@/workflow/types/InputSchema'; +import { isDefined } from 'twenty-shared'; import { ArrayTypeNode, ArrowFunction, @@ -5,17 +7,15 @@ import { FunctionDeclaration, FunctionLikeDeclaration, LiteralTypeNode, + Node, PropertySignature, ScriptTarget, StringLiteral, SyntaxKind, TypeNode, - Node, UnionTypeNode, VariableStatement, } from 'typescript'; -import { InputSchema, InputSchemaProperty } from '@/workflow/types/InputSchema'; -import { isDefined } from 'twenty-ui'; const getTypeString = (typeNode: TypeNode): InputSchemaProperty => { switch (typeNode.kind) { diff --git a/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionOutputSchema.ts b/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionOutputSchema.ts index bf40934e0e75..2d5537bc8566 100644 --- a/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionOutputSchema.ts +++ b/packages/twenty-front/src/modules/serverless-functions/utils/getFunctionOutputSchema.ts @@ -1,7 +1,7 @@ import { InputSchemaPropertyType } from '@/workflow/types/InputSchema'; import { BaseOutputSchema } from '@/workflow/workflow-variables/types/StepOutputSchema'; import { isObject } from '@sniptt/guards'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; const getValueType = (value: any): InputSchemaPropertyType => { if (!isDefined(value) || value === null) { diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsConnectedAccountsListCard.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsConnectedAccountsListCard.tsx index 405cf68b9f13..30cab94ccc54 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsConnectedAccountsListCard.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsConnectedAccountsListCard.tsx @@ -7,8 +7,8 @@ import { SettingsPath } from '@/types/SettingsPath'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { SettingsAccountsConnectedAccountsRowRightContainer } from '@/settings/accounts/components/SettingsAccountsConnectedAccountsRowRightContainer'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; -import { isDefined } from '~/utils/isDefined'; import { SettingsListCard } from '../../components/SettingsListCard'; const ProviderIcons: { [k: string]: IconComponent } = { diff --git a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminContent.tsx b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminContent.tsx index 484932e73bd4..2620ec8a3b03 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminContent.tsx +++ b/packages/twenty-front/src/modules/settings/admin-panel/components/SettingsAdminContent.tsx @@ -14,7 +14,7 @@ import styled from '@emotion/styled'; import { isNonEmptyString } from '@sniptt/guards'; import { useState } from 'react'; import { useRecoilValue } from 'recoil'; -import { getImageAbsoluteURI } from 'twenty-shared'; +import { getImageAbsoluteURI, isDefined } from 'twenty-shared'; import { Button, H1Title, @@ -22,7 +22,6 @@ import { H2Title, IconSearch, IconUser, - isDefined, Section, Toggle, } from 'twenty-ui'; diff --git a/packages/twenty-front/src/modules/settings/admin-panel/hooks/useFeatureFlagsManagement.ts b/packages/twenty-front/src/modules/settings/admin-panel/hooks/useFeatureFlagsManagement.ts index 81378bf76914..8005bf21c8b8 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/hooks/useFeatureFlagsManagement.ts +++ b/packages/twenty-front/src/modules/settings/admin-panel/hooks/useFeatureFlagsManagement.ts @@ -1,10 +1,10 @@ import { UserLookup } from '@/settings/admin-panel/types/UserLookup'; import { useState } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { + FeatureFlagKey, useUpdateWorkspaceFeatureFlagMutation, useUserLookupAdminPanelMutation, - FeatureFlagKey, } from '~/generated/graphql'; export const useFeatureFlagsManagement = () => { diff --git a/packages/twenty-front/src/modules/settings/admin-panel/hooks/useImpersonate.ts b/packages/twenty-front/src/modules/settings/admin-panel/hooks/useImpersonate.ts index dd2353410011..e4ce97d95b7b 100644 --- a/packages/twenty-front/src/modules/settings/admin-panel/hooks/useImpersonate.ts +++ b/packages/twenty-front/src/modules/settings/admin-panel/hooks/useImpersonate.ts @@ -6,8 +6,8 @@ import { isAppWaitingForFreshObjectMetadataState } from '@/object-metadata/state import { AppPath } from '@/types/AppPath'; import { useState } from 'react'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { useImpersonateMutation } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; export const useImpersonate = () => { const [currentUser] = useRecoilState(currentUserState); diff --git a/packages/twenty-front/src/modules/settings/components/SettingsPageContainer.tsx b/packages/twenty-front/src/modules/settings/components/SettingsPageContainer.tsx index e2c47d2822b8..f2f1a7300a5a 100644 --- a/packages/twenty-front/src/modules/settings/components/SettingsPageContainer.tsx +++ b/packages/twenty-front/src/modules/settings/components/SettingsPageContainer.tsx @@ -3,7 +3,7 @@ import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile'; import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper'; import styled from '@emotion/styled'; import { ReactNode } from 'react'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const StyledSettingsPageContainer = styled.div<{ width?: number; diff --git a/packages/twenty-front/src/modules/settings/data-model/components/SettingsDataModelNewFieldBreadcrumbDropDown.tsx b/packages/twenty-front/src/modules/settings/data-model/components/SettingsDataModelNewFieldBreadcrumbDropDown.tsx index 7efaa57eb7cc..8d82a5584f86 100644 --- a/packages/twenty-front/src/modules/settings/data-model/components/SettingsDataModelNewFieldBreadcrumbDropDown.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/components/SettingsDataModelNewFieldBreadcrumbDropDown.tsx @@ -7,7 +7,8 @@ import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { useLocation, useParams, useSearchParams } from 'react-router-dom'; -import { Button, IconChevronDown, isDefined, MenuItem } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { Button, IconChevronDown, MenuItem } from 'twenty-ui'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; const StyledContainer = styled.div` diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldIconLabelForm.tsx b/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldIconLabelForm.tsx index 6385b0cda2f6..7f37e08486ef 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldIconLabelForm.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/fields/forms/components/SettingsDataModelFieldIconLabelForm.tsx @@ -12,12 +12,12 @@ import { IconPicker } from '@/ui/input/components/IconPicker'; import { TextInput } from '@/ui/input/components/TextInput'; import { useTheme } from '@emotion/react'; import { useLingui } from '@lingui/react/macro'; +import { isDefined } from 'twenty-shared'; import { AppTooltip, Card, IconInfoCircle, IconRefresh, - isDefined, TooltipDelay, } from 'twenty-ui'; import { computeMetadataNameFromLabel } from '~/pages/settings/data-model/utils/compute-metadata-name-from-label.utils'; diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetFieldValueEffect.tsx b/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetFieldValueEffect.tsx index 110591d3e119..a4068655ee40 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetFieldValueEffect.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/fields/preview/components/SettingsDataModelSetFieldValueEffect.tsx @@ -4,7 +4,7 @@ import { recordStoreFamilySelector } from '@/object-record/record-store/states/s import { settingsPreviewRecordIdState } from '@/settings/data-model/fields/preview/states/settingsPreviewRecordIdState'; import { useEffect } from 'react'; import { useRecoilValue, useSetRecoilState } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type SettingsDataModelSetFieldValueEffectProps = { recordId: string; diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/usePreviewRecord.ts b/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/usePreviewRecord.ts index d48e88dfcaea..903271e2bae9 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/usePreviewRecord.ts +++ b/packages/twenty-front/src/modules/settings/data-model/fields/preview/hooks/usePreviewRecord.ts @@ -4,8 +4,8 @@ import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { isFieldValueEmpty } from '@/object-record/record-field/utils/isFieldValueEmpty'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { getFieldPreviewValue } from '@/settings/data-model/fields/preview/utils/getFieldPreviewValue'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; import { pascalCase } from '~/utils/string/pascalCase'; type UsePreviewRecordParams = { diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getFieldPreviewValue.ts b/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getFieldPreviewValue.ts index a71d6ed07819..1255bcd95a9f 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getFieldPreviewValue.ts +++ b/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getFieldPreviewValue.ts @@ -3,7 +3,7 @@ import { isFieldValueEmpty } from '@/object-record/record-field/utils/isFieldVal import { generateDefaultFieldValue } from '@/object-record/utils/generateDefaultFieldValue'; import { getSettingsFieldTypeConfig } from '@/settings/data-model/utils/getSettingsFieldTypeConfig'; import { isFieldTypeSupportedInSettings } from '@/settings/data-model/utils/isFieldTypeSupportedInSettings'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const getFieldPreviewValue = ({ fieldMetadataItem, diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getMultiSelectFieldPreviewValue.ts b/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getMultiSelectFieldPreviewValue.ts index d6fb8cf5ae9d..77aaed765158 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getMultiSelectFieldPreviewValue.ts +++ b/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getMultiSelectFieldPreviewValue.ts @@ -4,8 +4,8 @@ import { isNonEmptyString } from '@sniptt/guards'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { FieldMultiSelectValue } from '@/object-record/record-field/types/FieldMetadata'; import { multiSelectFieldDefaultValueSchema } from '@/object-record/record-field/validation-schemas/multiSelectFieldDefaultValueSchema'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; import { stripSimpleQuotesFromString } from '~/utils/string/stripSimpleQuotesFromString'; export const getMultiSelectFieldPreviewValue = ({ diff --git a/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getSelectFieldPreviewValue.ts b/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getSelectFieldPreviewValue.ts index 79fa857a162d..ecb16ff37b87 100644 --- a/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getSelectFieldPreviewValue.ts +++ b/packages/twenty-front/src/modules/settings/data-model/fields/preview/utils/getSelectFieldPreviewValue.ts @@ -3,8 +3,8 @@ import { isNonEmptyString } from '@sniptt/guards'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { FieldSelectValue } from '@/object-record/record-field/types/FieldMetadata'; import { selectFieldDefaultValueSchema } from '@/object-record/record-field/validation-schemas/selectFieldDefaultValueSchema'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; import { stripSimpleQuotesFromString } from '~/utils/string/stripSimpleQuotesFromString'; export const getSelectFieldPreviewValue = ({ diff --git a/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverview.tsx b/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverview.tsx index 36f7134d4275..d43a8ddb5dfe 100644 --- a/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverview.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverview.tsx @@ -20,6 +20,7 @@ import { useReactFlow, } from '@xyflow/react'; import { useCallback, useState } from 'react'; +import { isDefined } from 'twenty-shared'; import { Button, IconButtonGroup, @@ -30,7 +31,6 @@ import { IconPlus, IconX, } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; const nodeTypes: NodeTypes = { object: SettingsDataModelOverviewObject, diff --git a/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverviewEffect.tsx b/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverviewEffect.tsx index a4feec43d59e..35417309cbcd 100644 --- a/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverviewEffect.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/graph-overview/components/SettingsDataModelOverviewEffect.tsx @@ -5,7 +5,7 @@ import { useEffect } from 'react'; import { useRecoilValue } from 'recoil'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; type SettingsDataModelOverviewEffectProps = { diff --git a/packages/twenty-front/src/modules/settings/data-model/object-details/components/SettingsObjectFieldItemTableRow.tsx b/packages/twenty-front/src/modules/settings/data-model/object-details/components/SettingsObjectFieldItemTableRow.tsx index 9401ec6c4daf..38a1830766ad 100644 --- a/packages/twenty-front/src/modules/settings/data-model/object-details/components/SettingsObjectFieldItemTableRow.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/object-details/components/SettingsObjectFieldItemTableRow.tsx @@ -21,12 +21,12 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { useMemo } from 'react'; import { useRecoilState } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { IconMinus, IconPlus, LightIconButton, UndecoratedLink, - isDefined, useIcons, } from 'twenty-ui'; import { RelationDefinitionType } from '~/generated-metadata/graphql'; diff --git a/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx b/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx index 54233dc35224..cbcb69291728 100644 --- a/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx +++ b/packages/twenty-front/src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx @@ -10,6 +10,7 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { plural } from 'pluralize'; import { Controller, useFormContext } from 'react-hook-form'; +import { isDefined } from 'twenty-shared'; import { AppTooltip, Card, @@ -19,7 +20,6 @@ import { } from 'twenty-ui'; import { z } from 'zod'; import { computeMetadataNameFromLabel } from '~/pages/settings/data-model/utils/compute-metadata-name-from-label.utils'; -import { isDefined } from '~/utils/isDefined'; export const settingsDataModelObjectAboutFormSchema = objectMetadataItemSchema .pick({ diff --git a/packages/twenty-front/src/modules/settings/developers/components/ApiKeyNameInput.tsx b/packages/twenty-front/src/modules/settings/developers/components/ApiKeyNameInput.tsx index 12c43dfb15ca..bce4790f224c 100644 --- a/packages/twenty-front/src/modules/settings/developers/components/ApiKeyNameInput.tsx +++ b/packages/twenty-front/src/modules/settings/developers/components/ApiKeyNameInput.tsx @@ -1,12 +1,12 @@ -import { useCallback, useEffect } from 'react'; import styled from '@emotion/styled'; +import { useCallback, useEffect } from 'react'; import { useDebouncedCallback } from 'use-debounce'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { ApiKey } from '@/settings/developers/types/api-key/ApiKey'; import { TextInput } from '@/ui/input/components/TextInput'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const StyledComboInputContainer = styled.div` display: flex; diff --git a/packages/twenty-front/src/modules/settings/integrations/components/SettingsIntegrationComponent.tsx b/packages/twenty-front/src/modules/settings/integrations/components/SettingsIntegrationComponent.tsx index ec2a4fcbf2f1..0aa096723828 100644 --- a/packages/twenty-front/src/modules/settings/integrations/components/SettingsIntegrationComponent.tsx +++ b/packages/twenty-front/src/modules/settings/integrations/components/SettingsIntegrationComponent.tsx @@ -12,7 +12,7 @@ import { import { SettingsIntegration } from '@/settings/integrations/types/SettingsIntegration'; import { Link } from 'react-router-dom'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; interface SettingsIntegrationComponentProps { integration: SettingsIntegration; diff --git a/packages/twenty-front/src/modules/settings/integrations/database-connection/components/SettingsIntegrationDatabaseConnectionSyncStatus.tsx b/packages/twenty-front/src/modules/settings/integrations/database-connection/components/SettingsIntegrationDatabaseConnectionSyncStatus.tsx index b4298fe511d1..62a492699fc6 100644 --- a/packages/twenty-front/src/modules/settings/integrations/database-connection/components/SettingsIntegrationDatabaseConnectionSyncStatus.tsx +++ b/packages/twenty-front/src/modules/settings/integrations/database-connection/components/SettingsIntegrationDatabaseConnectionSyncStatus.tsx @@ -1,7 +1,7 @@ import { useGetDatabaseConnectionTables } from '@/databases/hooks/useGetDatabaseConnectionTables'; +import { isDefined } from 'twenty-shared'; import { Status } from 'twenty-ui'; import { RemoteTableStatus } from '~/generated-metadata/graphql'; -import { isDefined } from '~/utils/isDefined'; type SettingsIntegrationDatabaseConnectionSyncStatusProps = { connectionId: string; diff --git a/packages/twenty-front/src/modules/settings/lab/hooks/useLabPublicFeatureFlags.ts b/packages/twenty-front/src/modules/settings/lab/hooks/useLabPublicFeatureFlags.ts index 635dd129e166..5e3cb52dc9c4 100644 --- a/packages/twenty-front/src/modules/settings/lab/hooks/useLabPublicFeatureFlags.ts +++ b/packages/twenty-front/src/modules/settings/lab/hooks/useLabPublicFeatureFlags.ts @@ -2,7 +2,7 @@ import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { labPublicFeatureFlagsState } from '@/client-config/states/labPublicFeatureFlagsState'; import { useState } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { FeatureFlagKey, useUpdateLabPublicFeatureFlagMutation, diff --git a/packages/twenty-front/src/modules/settings/profile/components/ProfilePictureUploader.tsx b/packages/twenty-front/src/modules/settings/profile/components/ProfilePictureUploader.tsx index cc29f7e58c5f..07b62aa5a5ad 100644 --- a/packages/twenty-front/src/modules/settings/profile/components/ProfilePictureUploader.tsx +++ b/packages/twenty-front/src/modules/settings/profile/components/ProfilePictureUploader.tsx @@ -5,8 +5,8 @@ import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMembe import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { ImageInput } from '@/ui/input/components/ImageInput'; +import { isDefined } from 'twenty-shared'; import { useUploadProfilePictureMutation } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; export const ProfilePictureUploader = () => { diff --git a/packages/twenty-front/src/modules/settings/security/components/SettingsSSOSAMLForm.tsx b/packages/twenty-front/src/modules/settings/security/components/SettingsSSOSAMLForm.tsx index af6b898cbc8d..1a39b4a2d71e 100644 --- a/packages/twenty-front/src/modules/settings/security/components/SettingsSSOSAMLForm.tsx +++ b/packages/twenty-front/src/modules/settings/security/components/SettingsSSOSAMLForm.tsx @@ -8,6 +8,7 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { ChangeEvent, useRef } from 'react'; import { useFormContext } from 'react-hook-form'; +import { isDefined } from 'twenty-shared'; import { Button, H2Title, @@ -19,7 +20,6 @@ import { Section, } from 'twenty-ui'; import { REACT_APP_SERVER_BASE_URL } from '~/config'; -import { isDefined } from '~/utils/isDefined'; const StyledUploadFileContainer = styled.div` align-items: center; diff --git a/packages/twenty-front/src/modules/settings/security/components/SettingsSecuritySSORowDropdownMenu.tsx b/packages/twenty-front/src/modules/settings/security/components/SettingsSecuritySSORowDropdownMenu.tsx index 01561fb2f405..d14bfc0babd4 100644 --- a/packages/twenty-front/src/modules/settings/security/components/SettingsSecuritySSORowDropdownMenu.tsx +++ b/packages/twenty-front/src/modules/settings/security/components/SettingsSecuritySSORowDropdownMenu.tsx @@ -17,8 +17,8 @@ import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { UnwrapRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { SsoIdentityProviderStatus } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; type SettingsSecuritySSORowDropdownMenuProps = { SSOIdp: UnwrapRecoilValue<typeof SSOIdentitiesProvidersState>[0]; diff --git a/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionCodeEditor.tsx b/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionCodeEditor.tsx index 48a69acc0719..5534537942af 100644 --- a/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionCodeEditor.tsx +++ b/packages/twenty-front/src/modules/settings/serverless-functions/components/SettingsServerlessFunctionCodeEditor.tsx @@ -3,9 +3,9 @@ import { EditorProps, Monaco } from '@monaco-editor/react'; import dotenv from 'dotenv'; import { editor, MarkerSeverity } from 'monaco-editor'; import { AutoTypings } from 'monaco-editor-auto-typings'; -import { CodeEditor } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; import { useParams } from 'react-router-dom'; +import { isDefined } from 'twenty-shared'; +import { CodeEditor } from 'twenty-ui'; export type File = { language: string; diff --git a/packages/twenty-front/src/modules/settings/serverless-functions/graphql/mutations/buildDraftServerlessFunction.ts b/packages/twenty-front/src/modules/settings/serverless-functions/graphql/mutations/buildDraftServerlessFunction.ts new file mode 100644 index 000000000000..0767d9fee3e2 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/serverless-functions/graphql/mutations/buildDraftServerlessFunction.ts @@ -0,0 +1,13 @@ +import { gql } from '@apollo/client'; +import { SERVERLESS_FUNCTION_FRAGMENT } from '@/settings/serverless-functions/graphql/fragments/serverlessFunctionFragment'; + +export const BUILD_DRAFT_SERVERLESS_FUNCTION = gql` + ${SERVERLESS_FUNCTION_FRAGMENT} + mutation BuildDraftServerlessFunction( + $input: BuildDraftServerlessFunctionInput! + ) { + buildDraftServerlessFunction(input: $input) { + ...ServerlessFunctionFields + } + } +`; diff --git a/packages/twenty-front/src/modules/settings/serverless-functions/hooks/useBuildDraftServerlessFunction.ts b/packages/twenty-front/src/modules/settings/serverless-functions/hooks/useBuildDraftServerlessFunction.ts new file mode 100644 index 000000000000..6c18b67604f5 --- /dev/null +++ b/packages/twenty-front/src/modules/settings/serverless-functions/hooks/useBuildDraftServerlessFunction.ts @@ -0,0 +1,29 @@ +import { useApolloMetadataClient } from '@/object-metadata/hooks/useApolloMetadataClient'; +import { useMutation } from '@apollo/client'; +import { BUILD_DRAFT_SERVERLESS_FUNCTION } from '@/settings/serverless-functions/graphql/mutations/buildDraftServerlessFunction'; +import { + BuildDraftServerlessFunctionMutation, + BuildDraftServerlessFunctionMutationVariables, + BuildDraftServerlessFunctionInput, +} from '~/generated-metadata/graphql'; + +export const useBuildDraftServerlessFunction = () => { + const apolloMetadataClient = useApolloMetadataClient(); + const [mutate] = useMutation< + BuildDraftServerlessFunctionMutation, + BuildDraftServerlessFunctionMutationVariables + >(BUILD_DRAFT_SERVERLESS_FUNCTION, { + client: apolloMetadataClient, + }); + + const buildDraftServerlessFunction = async ( + input: BuildDraftServerlessFunctionInput, + ) => { + return await mutate({ + variables: { + input, + }, + }); + }; + return { buildDraftServerlessFunction }; +}; diff --git a/packages/twenty-front/src/modules/settings/serverless-functions/hooks/useGetOneServerlessFunctionSourceCode.ts b/packages/twenty-front/src/modules/settings/serverless-functions/hooks/useGetOneServerlessFunctionSourceCode.ts index b39f919039bd..82d2b78b037c 100644 --- a/packages/twenty-front/src/modules/settings/serverless-functions/hooks/useGetOneServerlessFunctionSourceCode.ts +++ b/packages/twenty-front/src/modules/settings/serverless-functions/hooks/useGetOneServerlessFunctionSourceCode.ts @@ -25,6 +25,7 @@ export const useGetOneServerlessFunctionSourceCode = ({ input: { id, version }, }, onCompleted, + fetchPolicy: 'network-only', }); return { code: data?.getServerlessFunctionSourceCode, loading }; }; diff --git a/packages/twenty-front/src/modules/settings/serverless-functions/hooks/useUpdateOneServerlessFunction.ts b/packages/twenty-front/src/modules/settings/serverless-functions/hooks/useUpdateOneServerlessFunction.ts index 95218a9dc100..6680c047434e 100644 --- a/packages/twenty-front/src/modules/settings/serverless-functions/hooks/useUpdateOneServerlessFunction.ts +++ b/packages/twenty-front/src/modules/settings/serverless-functions/hooks/useUpdateOneServerlessFunction.ts @@ -6,9 +6,6 @@ import { UpdateOneServerlessFunctionMutationVariables, UpdateServerlessFunctionInput, } from '~/generated-metadata/graphql'; -import { useEffect, useState } from 'react'; -import { FIND_ONE_SERVERLESS_FUNCTION } from '@/settings/serverless-functions/graphql/queries/findOneServerlessFunction'; -import { sleep } from '~/utils/sleep'; import { getOperationName } from '@apollo/client/utilities'; import { FIND_ONE_SERVERLESS_FUNCTION_SOURCE_CODE } from '@/settings/serverless-functions/graphql/queries/findOneServerlessFunctionSourceCode'; @@ -16,7 +13,6 @@ export const useUpdateOneServerlessFunction = ( serverlessFunctionId: string, ) => { const apolloMetadataClient = useApolloMetadataClient(); - const [isReady, setIsReady] = useState(false); const [mutate] = useMutation< UpdateOneServerlessFunctionMutation, UpdateOneServerlessFunctionMutationVariables @@ -27,7 +23,7 @@ export const useUpdateOneServerlessFunction = ( const updateOneServerlessFunction = async ( input: Omit<UpdateServerlessFunctionInput, 'id'>, ) => { - const result = await mutate({ + return await mutate({ variables: { input: { ...input, id: serverlessFunctionId }, }, @@ -35,37 +31,7 @@ export const useUpdateOneServerlessFunction = ( getOperationName(FIND_ONE_SERVERLESS_FUNCTION_SOURCE_CODE) ?? '', ], }); - setIsReady(false); - return result; }; - useEffect(() => { - let isMounted = true; - - const pollFunctionStatus = async () => { - while (isMounted && !isReady) { - const { data } = await apolloMetadataClient.query({ - query: FIND_ONE_SERVERLESS_FUNCTION, - variables: { input: { id: serverlessFunctionId } }, - fetchPolicy: 'network-only', // Always fetch fresh data - }); - - const serverlessFunction = data?.findOneServerlessFunction; - - if (serverlessFunction?.syncStatus === 'READY') { - setIsReady(true); - break; - } - await sleep(500); - } - }; - - pollFunctionStatus(); - - return () => { - isMounted = false; // Cleanup when the component unmounts - }; - }, [serverlessFunctionId, apolloMetadataClient, isReady]); - - return { updateOneServerlessFunction, isReady }; + return { updateOneServerlessFunction }; }; diff --git a/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx b/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx index 9e4eae34233b..d52f926810c2 100644 --- a/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx +++ b/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx @@ -7,8 +7,8 @@ import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { TextInput } from '@/ui/input/components/TextInput'; import { useLingui } from '@lingui/react/macro'; import isEmpty from 'lodash.isempty'; +import { isDefined } from 'twenty-shared'; import { useUpdateWorkspaceMutation } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; import { logError } from '~/utils/logError'; diff --git a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/MatchColumnsStep/components/UnmatchColumn.tsx b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/MatchColumnsStep/components/UnmatchColumn.tsx index 1edfc63ce17b..70b282a17dde 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/MatchColumnsStep/components/UnmatchColumn.tsx +++ b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/MatchColumnsStep/components/UnmatchColumn.tsx @@ -5,7 +5,8 @@ import { Column } from '@/spreadsheet-import/steps/components/MatchColumnsStep/M import { Fields } from '@/spreadsheet-import/types'; import styled from '@emotion/styled'; import { useState } from 'react'; -import { AnimatedExpandableContainer, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { AnimatedExpandableContainer } from 'twenty-ui'; const getExpandableContainerTitle = <T extends string>( fields: Fields<T>, diff --git a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/MatchColumnsStep/components/UserTableColumn.tsx b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/MatchColumnsStep/components/UserTableColumn.tsx index 8c575097af63..a3b84f4c7bb7 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/MatchColumnsStep/components/UserTableColumn.tsx +++ b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/MatchColumnsStep/components/UserTableColumn.tsx @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; import { ImportedRow } from '@/spreadsheet-import/types'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { Column } from '../MatchColumnsStep'; diff --git a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/ValidationStep/ValidationStep.tsx b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/ValidationStep/ValidationStep.tsx index 12e89fd55021..7a28439acb07 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/ValidationStep/ValidationStep.tsx +++ b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/ValidationStep/ValidationStep.tsx @@ -25,8 +25,8 @@ import { } from 'react'; // @ts-expect-error Todo: remove usage of react-data-grid` import { RowsChangeData } from 'react-data-grid'; +import { isDefined } from 'twenty-shared'; import { Button, IconTrash, Toggle } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; import { generateColumns } from './components/columns'; import { ImportedStructuredRowMetadata } from './types'; diff --git a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/ValidationStep/components/columns.tsx b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/ValidationStep/components/columns.tsx index cc2f45072523..c5f1516c6faa 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/steps/components/ValidationStep/components/columns.tsx +++ b/packages/twenty-front/src/modules/spreadsheet-import/steps/components/ValidationStep/components/columns.tsx @@ -7,7 +7,7 @@ import { AppTooltip, Checkbox, CheckboxVariant, Toggle } from 'twenty-ui'; import { MatchColumnSelect } from '@/spreadsheet-import/components/MatchColumnSelect'; import { Fields, ImportedStructuredRow } from '@/spreadsheet-import/types'; import { TextInput } from '@/ui/input/components/TextInput'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { ImportedStructuredRowMetadata } from '../types'; diff --git a/packages/twenty-front/src/modules/spreadsheet-import/utils/dataMutations.ts b/packages/twenty-front/src/modules/spreadsheet-import/utils/dataMutations.ts index 14ad0ed11f11..9226bef30c31 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/utils/dataMutations.ts +++ b/packages/twenty-front/src/modules/spreadsheet-import/utils/dataMutations.ts @@ -12,7 +12,7 @@ import { RowHook, TableHook, } from '@/spreadsheet-import/types'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; export const addErrorsAndRunHooks = <T extends string>( diff --git a/packages/twenty-front/src/modules/spreadsheet-import/utils/getMatchedColumns.ts b/packages/twenty-front/src/modules/spreadsheet-import/utils/getMatchedColumns.ts index 4397231640a8..18db7061046c 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/utils/getMatchedColumns.ts +++ b/packages/twenty-front/src/modules/spreadsheet-import/utils/getMatchedColumns.ts @@ -6,7 +6,7 @@ import { MatchColumnsStepProps, } from '@/spreadsheet-import/steps/components/MatchColumnsStep/MatchColumnsStep'; import { Field, Fields } from '@/spreadsheet-import/types'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { findMatch } from './findMatch'; import { setColumn } from './setColumn'; diff --git a/packages/twenty-front/src/modules/spreadsheet-import/utils/normalizeTableData.ts b/packages/twenty-front/src/modules/spreadsheet-import/utils/normalizeTableData.ts index 50bf976b5c1d..729f476f48d8 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/utils/normalizeTableData.ts +++ b/packages/twenty-front/src/modules/spreadsheet-import/utils/normalizeTableData.ts @@ -8,7 +8,7 @@ import { ImportedStructuredRow, } from '@/spreadsheet-import/types'; -import { isDefined } from '@ui/utilities/isDefined'; +import { isDefined } from 'twenty-shared'; import { z } from 'zod'; import { normalizeCheckboxValue } from './normalizeCheckboxValue'; diff --git a/packages/twenty-front/src/modules/support/hooks/useSupportChat.ts b/packages/twenty-front/src/modules/support/hooks/useSupportChat.ts index 2fe623a699ac..6b2b76be79b4 100644 --- a/packages/twenty-front/src/modules/support/hooks/useSupportChat.ts +++ b/packages/twenty-front/src/modules/support/hooks/useSupportChat.ts @@ -5,7 +5,7 @@ import { useIsPrefetchLoading } from '@/prefetch/hooks/useIsPrefetchLoading'; import { isNonEmptyString } from '@sniptt/guards'; import { useCallback, useEffect, useState } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { User, WorkspaceMember } from '~/generated-metadata/graphql'; const insertScript = ({ diff --git a/packages/twenty-front/src/modules/ui/feedback/dialog-manager/components/Dialog.tsx b/packages/twenty-front/src/modules/ui/feedback/dialog-manager/components/Dialog.tsx index febaa3f08033..4dbdc629567b 100644 --- a/packages/twenty-front/src/modules/ui/feedback/dialog-manager/components/Dialog.tsx +++ b/packages/twenty-front/src/modules/ui/feedback/dialog-manager/components/Dialog.tsx @@ -4,8 +4,8 @@ import { useCallback } from 'react'; import { Key } from 'ts-key-enum'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; +import { isDefined } from 'twenty-shared'; import { Button } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; import { DialogHotkeyScope } from '../types/DialogHotkeyScope'; diff --git a/packages/twenty-front/src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx b/packages/twenty-front/src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx index 52e01318e34c..2ca2660b1f3a 100644 --- a/packages/twenty-front/src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx +++ b/packages/twenty-front/src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx @@ -16,7 +16,7 @@ import { useProgressAnimation, } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export enum SnackBarVariant { Default = 'default', diff --git a/packages/twenty-front/src/modules/ui/feedback/snack-bar-manager/hooks/useSnackBar.ts b/packages/twenty-front/src/modules/ui/feedback/snack-bar-manager/hooks/useSnackBar.ts index 04684c2acd05..1e143eaeeff9 100644 --- a/packages/twenty-front/src/modules/ui/feedback/snack-bar-manager/hooks/useSnackBar.ts +++ b/packages/twenty-front/src/modules/ui/feedback/snack-bar-manager/hooks/useSnackBar.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { useRecoilCallback } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { v4 as uuidv4 } from 'uuid'; -import { isDefined } from '~/utils/isDefined'; import { SnackBarManagerScopeInternalContext } from '@/ui/feedback/snack-bar-manager/scopes/scope-internal-context/SnackBarManagerScopeInternalContext'; import { diff --git a/packages/twenty-front/src/modules/ui/field/display/components/BooleanDisplay.tsx b/packages/twenty-front/src/modules/ui/field/display/components/BooleanDisplay.tsx index 992667a83534..b9568ffbe91f 100644 --- a/packages/twenty-front/src/modules/ui/field/display/components/BooleanDisplay.tsx +++ b/packages/twenty-front/src/modules/ui/field/display/components/BooleanDisplay.tsx @@ -1,7 +1,7 @@ import { styled } from '@linaria/react'; import { IconCheck, IconX, THEME_COMMON } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const spacing = THEME_COMMON.spacingMultiplicator * 1; const iconSizeSm = THEME_COMMON.icon.size.sm; diff --git a/packages/twenty-front/src/modules/ui/field/display/components/CurrencyDisplay.tsx b/packages/twenty-front/src/modules/ui/field/display/components/CurrencyDisplay.tsx index a246395b6979..eebff913e8c2 100644 --- a/packages/twenty-front/src/modules/ui/field/display/components/CurrencyDisplay.tsx +++ b/packages/twenty-front/src/modules/ui/field/display/components/CurrencyDisplay.tsx @@ -3,8 +3,8 @@ import { styled } from '@linaria/react'; import { FieldCurrencyValue } from '@/object-record/record-field/types/FieldMetadata'; import { SETTINGS_FIELD_CURRENCY_CODES } from '@/settings/data-model/constants/SettingsFieldCurrencyCodes'; +import { isDefined } from 'twenty-shared'; import { formatAmount } from '~/utils/format/formatAmount'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; type CurrencyDisplayProps = { diff --git a/packages/twenty-front/src/modules/ui/field/display/components/EmailDisplay.tsx b/packages/twenty-front/src/modules/ui/field/display/components/EmailDisplay.tsx index 75089eaf6f16..f5ae25ed179e 100644 --- a/packages/twenty-front/src/modules/ui/field/display/components/EmailDisplay.tsx +++ b/packages/twenty-front/src/modules/ui/field/display/components/EmailDisplay.tsx @@ -1,6 +1,6 @@ import { MouseEvent } from 'react'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { ContactLink } from 'twenty-ui'; import { EllipsisDisplay } from './EllipsisDisplay'; diff --git a/packages/twenty-front/src/modules/ui/field/display/components/EmailsDisplay.tsx b/packages/twenty-front/src/modules/ui/field/display/components/EmailsDisplay.tsx index e2737dadce15..7d71c0e782d9 100644 --- a/packages/twenty-front/src/modules/ui/field/display/components/EmailsDisplay.tsx +++ b/packages/twenty-front/src/modules/ui/field/display/components/EmailsDisplay.tsx @@ -4,7 +4,7 @@ import { RoundedLink, THEME_COMMON } from 'twenty-ui'; import { FieldEmailsValue } from '@/object-record/record-field/types/FieldMetadata'; import { ExpandableList } from '@/ui/layout/expandable-list/components/ExpandableList'; import styled from '@emotion/styled'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type EmailsDisplayProps = { value?: FieldEmailsValue; diff --git a/packages/twenty-front/src/modules/ui/field/display/components/LinksDisplay.tsx b/packages/twenty-front/src/modules/ui/field/display/components/LinksDisplay.tsx index fd03c8c005b5..16bfd7398daf 100644 --- a/packages/twenty-front/src/modules/ui/field/display/components/LinksDisplay.tsx +++ b/packages/twenty-front/src/modules/ui/field/display/components/LinksDisplay.tsx @@ -3,8 +3,8 @@ import { LinkType, RoundedLink, SocialLink } from 'twenty-ui'; import { FieldLinksValue } from '@/object-record/record-field/types/FieldMetadata'; import { ExpandableList } from '@/ui/layout/expandable-list/components/ExpandableList'; +import { isDefined } from 'twenty-shared'; import { checkUrlType } from '~/utils/checkUrlType'; -import { isDefined } from '~/utils/isDefined'; import { getAbsoluteUrl } from '~/utils/url/getAbsoluteUrl'; import { getUrlHostName } from '~/utils/url/getUrlHostName'; diff --git a/packages/twenty-front/src/modules/ui/field/display/components/PhoneDisplay.tsx b/packages/twenty-front/src/modules/ui/field/display/components/PhoneDisplay.tsx index 78accbd33742..7c823d8ecb11 100644 --- a/packages/twenty-front/src/modules/ui/field/display/components/PhoneDisplay.tsx +++ b/packages/twenty-front/src/modules/ui/field/display/components/PhoneDisplay.tsx @@ -2,7 +2,7 @@ import { parsePhoneNumber, PhoneNumber } from 'libphonenumber-js'; import { MouseEvent } from 'react'; import { ContactLink } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; interface PhoneDisplayProps { value: PhoneDisplayValueProps; diff --git a/packages/twenty-front/src/modules/ui/field/display/components/PhonesDisplay.tsx b/packages/twenty-front/src/modules/ui/field/display/components/PhonesDisplay.tsx index d3bef134297e..585ad3949a4e 100644 --- a/packages/twenty-front/src/modules/ui/field/display/components/PhonesDisplay.tsx +++ b/packages/twenty-front/src/modules/ui/field/display/components/PhonesDisplay.tsx @@ -7,7 +7,7 @@ import { ExpandableList } from '@/ui/layout/expandable-list/components/Expandabl import { DEFAULT_PHONE_CALLING_CODE } from '@/object-record/record-field/meta-types/input/components/PhonesFieldInput'; import { parsePhoneNumber } from 'libphonenumber-js'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { logError } from '~/utils/logError'; type PhonesDisplayProps = { diff --git a/packages/twenty-front/src/modules/ui/field/input/components/AddressInput.tsx b/packages/twenty-front/src/modules/ui/field/input/components/AddressInput.tsx index 8be2bd420562..aa63b01be6fc 100644 --- a/packages/twenty-front/src/modules/ui/field/input/components/AddressInput.tsx +++ b/packages/twenty-front/src/modules/ui/field/input/components/AddressInput.tsx @@ -12,7 +12,8 @@ import { activeDropdownFocusIdState } from '@/ui/layout/dropdown/states/activeDr import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside'; import { useRecoilValue } from 'recoil'; -import { isDefined, MOBILE_VIEWPORT } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { MOBILE_VIEWPORT } from 'twenty-ui'; const StyledAddressContainer = styled.div` padding: 4px 8px; diff --git a/packages/twenty-front/src/modules/ui/field/input/components/DoubleTextInput.tsx b/packages/twenty-front/src/modules/ui/field/input/components/DoubleTextInput.tsx index e4a1b7b7498c..d5e092950287 100644 --- a/packages/twenty-front/src/modules/ui/field/input/components/DoubleTextInput.tsx +++ b/packages/twenty-front/src/modules/ui/field/input/components/DoubleTextInput.tsx @@ -10,7 +10,7 @@ import { Key } from 'ts-key-enum'; import { FieldDoubleText } from '@/object-record/record-field/types/FieldDoubleText'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { FieldInputContainer } from '@/ui/field/input/components/FieldInputContainer'; import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside'; diff --git a/packages/twenty-front/src/modules/ui/field/input/components/MultiSelectInput.tsx b/packages/twenty-front/src/modules/ui/field/input/components/MultiSelectInput.tsx index 3b3086bb3e85..a8e83b81b57a 100644 --- a/packages/twenty-front/src/modules/ui/field/input/components/MultiSelectInput.tsx +++ b/packages/twenty-front/src/modules/ui/field/input/components/MultiSelectInput.tsx @@ -14,8 +14,8 @@ import { useSelectableListStates } from '@/ui/layout/selectable-list/hooks/inter import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside'; +import { isDefined } from 'twenty-shared'; import { MenuItemMultiSelectTag } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; import { turnIntoEmptyStringIfWhitespacesOnly } from '~/utils/string/turnIntoEmptyStringIfWhitespacesOnly'; type MultiSelectInputProps = { diff --git a/packages/twenty-front/src/modules/ui/field/input/components/TextAreaInput.tsx b/packages/twenty-front/src/modules/ui/field/input/components/TextAreaInput.tsx index 08d75a9761a6..53dc1a871731 100644 --- a/packages/twenty-front/src/modules/ui/field/input/components/TextAreaInput.tsx +++ b/packages/twenty-front/src/modules/ui/field/input/components/TextAreaInput.tsx @@ -5,7 +5,7 @@ import { TEXT_INPUT_STYLE } from 'twenty-ui'; import { LightCopyIconButton } from '@/object-record/record-field/components/LightCopyIconButton'; import { useRegisterInputEvents } from '@/object-record/record-field/meta-types/input/hooks/useRegisterInputEvents'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { turnIntoEmptyStringIfWhitespacesOnly } from '~/utils/string/turnIntoEmptyStringIfWhitespacesOnly'; export type TextAreaInputProps = { diff --git a/packages/twenty-front/src/modules/ui/input/components/ImageInput.tsx b/packages/twenty-front/src/modules/ui/input/components/ImageInput.tsx index 034dca35ef74..1aaeed14ddbd 100644 --- a/packages/twenty-front/src/modules/ui/input/components/ImageInput.tsx +++ b/packages/twenty-front/src/modules/ui/input/components/ImageInput.tsx @@ -4,10 +4,9 @@ import { Trans, useLingui } from '@lingui/react/macro'; import { isNonEmptyString } from '@sniptt/guards'; import React from 'react'; -import { getImageAbsoluteURI } from 'twenty-shared'; +import { getImageAbsoluteURI, isDefined } from 'twenty-shared'; import { Button, IconPhotoUp, IconTrash, IconUpload, IconX } from 'twenty-ui'; import { REACT_APP_SERVER_BASE_URL } from '~/config'; -import { isDefined } from '~/utils/isDefined'; const StyledContainer = styled.div` display: flex; diff --git a/packages/twenty-front/src/modules/ui/input/components/Select.tsx b/packages/twenty-front/src/modules/ui/input/components/Select.tsx index d94cc00d6cab..06d101ba9acf 100644 --- a/packages/twenty-front/src/modules/ui/input/components/Select.tsx +++ b/packages/twenty-front/src/modules/ui/input/components/Select.tsx @@ -9,7 +9,7 @@ import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownM import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { SelectControl } from '@/ui/input/components/SelectControl'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { SelectHotkeyScope } from '../types/SelectHotkeyScope'; export type SelectOption<Value extends string | number | boolean | null> = { diff --git a/packages/twenty-front/src/modules/ui/input/components/SelectControl.tsx b/packages/twenty-front/src/modules/ui/input/components/SelectControl.tsx index 28fc9962512e..7946af065516 100644 --- a/packages/twenty-front/src/modules/ui/input/components/SelectControl.tsx +++ b/packages/twenty-front/src/modules/ui/input/components/SelectControl.tsx @@ -1,11 +1,8 @@ import { SelectOption, SelectSizeVariant } from '@/ui/input/components/Select'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; -import { - IconChevronDown, - isDefined, - OverflowingTextWithTooltip, -} from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconChevronDown, OverflowingTextWithTooltip } from 'twenty-ui'; const StyledControlContainer = styled.div<{ disabled?: boolean; diff --git a/packages/twenty-front/src/modules/ui/input/components/SelectInput.tsx b/packages/twenty-front/src/modules/ui/input/components/SelectInput.tsx index 249692646b11..94ded0928ad8 100644 --- a/packages/twenty-front/src/modules/ui/input/components/SelectInput.tsx +++ b/packages/twenty-front/src/modules/ui/input/components/SelectInput.tsx @@ -8,7 +8,8 @@ import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside'; import { useEffect, useMemo, useRef, useState } from 'react'; import { Key } from 'ts-key-enum'; -import { MenuItemSelectTag, TagColor, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { MenuItemSelectTag, TagColor } from 'twenty-ui'; interface SelectInputProps { onOptionSelected: (selectedOption: SelectOption) => void; diff --git a/packages/twenty-front/src/modules/ui/input/components/TextInput.tsx b/packages/twenty-front/src/modules/ui/input/components/TextInput.tsx index 8e31f598822d..666b181ef648 100644 --- a/packages/twenty-front/src/modules/ui/input/components/TextInput.tsx +++ b/packages/twenty-front/src/modules/ui/input/components/TextInput.tsx @@ -8,7 +8,7 @@ import { import { InputHotkeyScope } from '@/ui/input/types/InputHotkeyScope'; import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export type TextInputProps = TextInputV2ComponentProps & { disableHotkeys?: boolean; diff --git a/packages/twenty-front/src/modules/ui/input/components/internal/date/components/DateTimeInput.tsx b/packages/twenty-front/src/modules/ui/input/components/internal/date/components/DateTimeInput.tsx index 531608fefa71..c60bc19ab188 100644 --- a/packages/twenty-front/src/modules/ui/input/components/internal/date/components/DateTimeInput.tsx +++ b/packages/twenty-front/src/modules/ui/input/components/internal/date/components/DateTimeInput.tsx @@ -12,7 +12,7 @@ import { MIN_DATE } from '@/ui/input/components/internal/date/constants/MinDate' import { parseDateToString } from '@/ui/input/components/internal/date/utils/parseDateToString'; import { parseStringToDate } from '@/ui/input/components/internal/date/utils/parseStringToDate'; import { isNull } from '@sniptt/guards'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; const StyledInputContainer = styled.div` align-items: center; diff --git a/packages/twenty-front/src/modules/ui/input/components/internal/date/components/InternalDatePicker.tsx b/packages/twenty-front/src/modules/ui/input/components/internal/date/components/InternalDatePicker.tsx index d54d8a976a2c..bb48bcbeb492 100644 --- a/packages/twenty-front/src/modules/ui/input/components/internal/date/components/InternalDatePicker.tsx +++ b/packages/twenty-front/src/modules/ui/input/components/internal/date/components/InternalDatePicker.tsx @@ -8,7 +8,7 @@ import { } from 'twenty-ui'; import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { AbsoluteDatePickerHeader } from '@/ui/input/components/internal/date/components/AbsoluteDatePickerHeader'; import { DateTimeInput } from '@/ui/input/components/internal/date/components/DateTimeInput'; diff --git a/packages/twenty-front/src/modules/ui/input/components/internal/date/components/__stories__/InternalDatePicker.stories.tsx b/packages/twenty-front/src/modules/ui/input/components/internal/date/components/__stories__/InternalDatePicker.stories.tsx index 3bed3754339c..36fb9ad1bc78 100644 --- a/packages/twenty-front/src/modules/ui/input/components/internal/date/components/__stories__/InternalDatePicker.stories.tsx +++ b/packages/twenty-front/src/modules/ui/input/components/internal/date/components/__stories__/InternalDatePicker.stories.tsx @@ -3,7 +3,7 @@ import { Meta, StoryObj } from '@storybook/react'; import { expect, userEvent, within } from '@storybook/test'; import { ComponentDecorator } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { DateTimePicker } from '../InternalDatePicker'; const meta: Meta<typeof DateTimePicker> = { diff --git a/packages/twenty-front/src/modules/ui/input/components/internal/phone/components/PhoneCountryPickerDropdownButton.tsx b/packages/twenty-front/src/modules/ui/input/components/internal/phone/components/PhoneCountryPickerDropdownButton.tsx index 8d8aba0b45a6..00c05feed84d 100644 --- a/packages/twenty-front/src/modules/ui/input/components/internal/phone/components/PhoneCountryPickerDropdownButton.tsx +++ b/packages/twenty-front/src/modules/ui/input/components/internal/phone/components/PhoneCountryPickerDropdownButton.tsx @@ -5,8 +5,8 @@ import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { useEffect, useState } from 'react'; +import { isDefined } from 'twenty-shared'; import { IconChevronDown, IconWorld } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; import { CountryPickerHotkeyScope } from '../types/CountryPickerHotkeyScope'; diff --git a/packages/twenty-front/src/modules/ui/input/hooks/useInputFocusWithoutScrollOnMount.ts b/packages/twenty-front/src/modules/ui/input/hooks/useInputFocusWithoutScrollOnMount.ts index a771bcd6e238..c0e373b15e3f 100644 --- a/packages/twenty-front/src/modules/ui/input/hooks/useInputFocusWithoutScrollOnMount.ts +++ b/packages/twenty-front/src/modules/ui/input/hooks/useInputFocusWithoutScrollOnMount.ts @@ -1,5 +1,5 @@ import { useEffect, useRef } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useInputFocusWithoutScrollOnMount = () => { const inputRef = useRef<HTMLInputElement>(null); diff --git a/packages/twenty-front/src/modules/ui/layout/bottom-bar/hooks/useBottomBar.ts b/packages/twenty-front/src/modules/ui/layout/bottom-bar/hooks/useBottomBar.ts index bfae8a470fac..7cbb867f26bc 100644 --- a/packages/twenty-front/src/modules/ui/layout/bottom-bar/hooks/useBottomBar.ts +++ b/packages/twenty-front/src/modules/ui/layout/bottom-bar/hooks/useBottomBar.ts @@ -4,7 +4,7 @@ import { bottomBarHotkeyComponentState } from '@/ui/layout/bottom-bar/states/bot import { isBottomBarOpenedComponentState } from '@/ui/layout/bottom-bar/states/isBottomBarOpenedComponentState'; import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useBottomBar = () => { const { diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/components/Dropdown.tsx b/packages/twenty-front/src/modules/ui/layout/dropdown/components/Dropdown.tsx index 355ba9de77da..014d96c1d12f 100644 --- a/packages/twenty-front/src/modules/ui/layout/dropdown/components/Dropdown.tsx +++ b/packages/twenty-front/src/modules/ui/layout/dropdown/components/Dropdown.tsx @@ -20,7 +20,7 @@ import { MouseEvent, ReactNode } from 'react'; import { flushSync } from 'react-dom'; import { Keys } from 'react-hotkeys-hook'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { sleep } from '~/utils/sleep'; import { useDropdown } from '../hooks/useDropdown'; diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader.tsx b/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader.tsx index 901b47aad800..39127f9f6324 100644 --- a/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader.tsx +++ b/packages/twenty-front/src/modules/ui/layout/dropdown/components/DropdownMenuHeader.tsx @@ -1,7 +1,8 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { ComponentProps, MouseEvent } from 'react'; -import { IconComponent, isDefined, LightIconButton } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconComponent, LightIconButton } from 'twenty-ui'; const StyledHeader = styled.li` align-items: center; diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/useDropdown.ts b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/useDropdown.ts index 48b13dc5535f..b2bd155c8664 100644 --- a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/useDropdown.ts +++ b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/useDropdown.ts @@ -8,7 +8,7 @@ import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousH import { getScopeIdOrUndefinedFromComponentId } from '@/ui/utilities/recoil-scope/utils/getScopeIdOrUndefinedFromComponentId'; import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue'; import { useCallback } from 'react'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useDropdown = (dropdownId?: string) => { const { diff --git a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/useDropdownV2.ts b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/useDropdownV2.ts index 59ae9358bd2a..edd496c51316 100644 --- a/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/useDropdownV2.ts +++ b/packages/twenty-front/src/modules/ui/layout/dropdown/hooks/useDropdownV2.ts @@ -5,7 +5,7 @@ import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDrop import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope'; import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope'; import { getScopeIdFromComponentId } from '@/ui/utilities/recoil-scope/utils/getScopeIdFromComponentId'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useDropdownV2 = () => { const { diff --git a/packages/twenty-front/src/modules/ui/layout/expandable-list/components/ExpandableList.tsx b/packages/twenty-front/src/modules/ui/layout/expandable-list/components/ExpandableList.tsx index b1d19104e367..83e3714f3afd 100644 --- a/packages/twenty-front/src/modules/ui/layout/expandable-list/components/ExpandableList.tsx +++ b/packages/twenty-front/src/modules/ui/layout/expandable-list/components/ExpandableList.tsx @@ -4,7 +4,7 @@ import { AnimatedContainer, Chip, ChipVariant } from 'twenty-ui'; import { ExpandedListDropdown } from '@/ui/layout/expandable-list/components/ExpandedListDropdown'; import { isFirstOverflowingChildElement } from '@/ui/layout/expandable-list/utils/isFirstOverflowingChildElement'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const StyledContainer = styled.div` align-items: center; diff --git a/packages/twenty-front/src/modules/ui/layout/expandable-list/components/__stories__/ExpandableList.stories.tsx b/packages/twenty-front/src/modules/ui/layout/expandable-list/components/__stories__/ExpandableList.stories.tsx index e6a84470f358..374cce31167a 100644 --- a/packages/twenty-front/src/modules/ui/layout/expandable-list/components/__stories__/ExpandableList.stories.tsx +++ b/packages/twenty-front/src/modules/ui/layout/expandable-list/components/__stories__/ExpandableList.stories.tsx @@ -2,14 +2,10 @@ import styled from '@emotion/styled'; import { expect } from '@storybook/jest'; import { Meta, StoryObj } from '@storybook/react'; import { userEvent, within } from '@storybook/test'; -import { - ComponentDecorator, - isDefined, - MAIN_COLOR_NAMES, - Tag, -} from 'twenty-ui'; import { ExpandableList } from '@/ui/layout/expandable-list/components/ExpandableList'; +import { isDefined } from 'twenty-shared'; +import { ComponentDecorator, MAIN_COLOR_NAMES, Tag } from 'twenty-ui'; const StyledContainer = styled.div` padding: ${({ theme }) => theme.spacing(1)}; diff --git a/packages/twenty-front/src/modules/ui/layout/expandable-list/utils/isFirstOverflowingChildElement.ts b/packages/twenty-front/src/modules/ui/layout/expandable-list/utils/isFirstOverflowingChildElement.ts index 6be49b7a8965..89a5de0b5b31 100644 --- a/packages/twenty-front/src/modules/ui/layout/expandable-list/utils/isFirstOverflowingChildElement.ts +++ b/packages/twenty-front/src/modules/ui/layout/expandable-list/utils/isFirstOverflowingChildElement.ts @@ -1,4 +1,4 @@ -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const isFirstOverflowingChildElement = ({ containerElement, diff --git a/packages/twenty-front/src/modules/ui/layout/hooks/useShowAuthModal.ts b/packages/twenty-front/src/modules/ui/layout/hooks/useShowAuthModal.ts index cdfa22e76b80..ee9af1da5468 100644 --- a/packages/twenty-front/src/modules/ui/layout/hooks/useShowAuthModal.ts +++ b/packages/twenty-front/src/modules/ui/layout/hooks/useShowAuthModal.ts @@ -6,9 +6,9 @@ import { useOnboardingStatus } from '@/onboarding/hooks/useOnboardingStatus'; import { AppPath } from '@/types/AppPath'; import { isDefaultLayoutAuthModalVisibleState } from '@/ui/layout/states/isDefaultLayoutAuthModalVisibleState'; import { useSubscriptionStatus } from '@/workspace/hooks/useSubscriptionStatus'; +import { isDefined } from 'twenty-shared'; import { OnboardingStatus, SubscriptionStatus } from '~/generated/graphql'; import { useIsMatchingLocation } from '~/hooks/useIsMatchingLocation'; -import { isDefined } from '~/utils/isDefined'; export const useShowAuthModal = () => { const isMatchingLocation = useIsMatchingLocation(); diff --git a/packages/twenty-front/src/modules/ui/layout/right-drawer/components/RightDrawer.tsx b/packages/twenty-front/src/modules/ui/layout/right-drawer/components/RightDrawer.tsx index 2012d5ba9904..a2498d774a19 100644 --- a/packages/twenty-front/src/modules/ui/layout/right-drawer/components/RightDrawer.tsx +++ b/packages/twenty-front/src/modules/ui/layout/right-drawer/components/RightDrawer.tsx @@ -6,7 +6,7 @@ import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { motion } from 'framer-motion'; import { useRecoilValue, useSetRecoilState } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { isRightDrawerOpenState } from '../states/isRightDrawerOpenState'; import { rightDrawerPageState } from '../states/rightDrawerPageState'; diff --git a/packages/twenty-front/src/modules/ui/layout/right-drawer/components/RightDrawerRouter.tsx b/packages/twenty-front/src/modules/ui/layout/right-drawer/components/RightDrawerRouter.tsx index de47fbf31619..a2d5dbcc1b24 100644 --- a/packages/twenty-front/src/modules/ui/layout/right-drawer/components/RightDrawerRouter.tsx +++ b/packages/twenty-front/src/modules/ui/layout/right-drawer/components/RightDrawerRouter.tsx @@ -14,7 +14,7 @@ import { RightDrawerWorkflowEditStep } from '@/workflow/workflow-steps/component import { RightDrawerWorkflowViewStep } from '@/workflow/workflow-steps/components/RightDrawerWorkflowViewStep'; import { RightDrawerWorkflowSelectAction } from '@/workflow/workflow-steps/workflow-actions/components/RightDrawerWorkflowSelectAction'; import { RightDrawerWorkflowSelectTriggerType } from '@/workflow/workflow-trigger/components/RightDrawerWorkflowSelectTriggerType'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { rightDrawerPageState } from '../states/rightDrawerPageState'; import { RightDrawerPages } from '../types/RightDrawerPages'; diff --git a/packages/twenty-front/src/modules/ui/layout/selectable-list/components/SelectableList.tsx b/packages/twenty-front/src/modules/ui/layout/selectable-list/components/SelectableList.tsx index 12efb1b612f2..1816b60dcd91 100644 --- a/packages/twenty-front/src/modules/ui/layout/selectable-list/components/SelectableList.tsx +++ b/packages/twenty-front/src/modules/ui/layout/selectable-list/components/SelectableList.tsx @@ -3,8 +3,8 @@ import { ReactNode, useEffect } from 'react'; import { useSelectableListHotKeys } from '@/ui/layout/selectable-list/hooks/internal/useSelectableListHotKeys'; import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList'; import { SelectableListScope } from '@/ui/layout/selectable-list/scopes/SelectableListScope'; +import { isDefined } from 'twenty-shared'; import { arrayToChunks } from '~/utils/array/arrayToChunks'; -import { isDefined } from '~/utils/isDefined'; type SelectableListProps = { children: ReactNode; diff --git a/packages/twenty-front/src/modules/ui/layout/selectable-list/hooks/useSelectableList.ts b/packages/twenty-front/src/modules/ui/layout/selectable-list/hooks/useSelectableList.ts index 41a85a10a13d..6609820d614c 100644 --- a/packages/twenty-front/src/modules/ui/layout/selectable-list/hooks/useSelectableList.ts +++ b/packages/twenty-front/src/modules/ui/layout/selectable-list/hooks/useSelectableList.ts @@ -2,7 +2,7 @@ import { useRecoilCallback, useSetRecoilState } from 'recoil'; import { useSelectableListStates } from '@/ui/layout/selectable-list/hooks/internal/useSelectableListStates'; import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useSelectableList = (selectableListId?: string) => { const { diff --git a/packages/twenty-front/src/modules/ui/layout/show-page/components/ShowPageSummaryCard.tsx b/packages/twenty-front/src/modules/ui/layout/show-page/components/ShowPageSummaryCard.tsx index 114d196dd9c1..502956effaaf 100644 --- a/packages/twenty-front/src/modules/ui/layout/show-page/components/ShowPageSummaryCard.tsx +++ b/packages/twenty-front/src/modules/ui/layout/show-page/components/ShowPageSummaryCard.tsx @@ -7,11 +7,11 @@ import Skeleton, { SkeletonTheme } from 'react-loading-skeleton'; import { AppTooltip, Avatar, AvatarType, IconComponent } from 'twenty-ui'; import { v4 as uuidV4 } from 'uuid'; +import { isDefined } from 'twenty-shared'; import { beautifyExactDateTime, beautifyPastDateRelativeToNow, } from '~/utils/date-utils'; -import { isDefined } from '~/utils/isDefined'; type ShowPageSummaryCardProps = { avatarPlaceholder: string; diff --git a/packages/twenty-front/src/modules/ui/layout/table/hooks/useSortedArray.ts b/packages/twenty-front/src/modules/ui/layout/table/hooks/useSortedArray.ts index bc582345ff3c..101270e972f3 100644 --- a/packages/twenty-front/src/modules/ui/layout/table/hooks/useSortedArray.ts +++ b/packages/twenty-front/src/modules/ui/layout/table/hooks/useSortedArray.ts @@ -2,7 +2,7 @@ import { sortedFieldByTableFamilyState } from '@/ui/layout/table/states/sortedFi import { TableMetadata } from '@/ui/layout/table/types/TableMetadata'; import { useMemo } from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useSortedArray = <T>( arrayToSort: T[], diff --git a/packages/twenty-front/src/modules/ui/navigation/bread-crumb/components/EditableBreadcrumbItem.tsx b/packages/twenty-front/src/modules/ui/navigation/bread-crumb/components/EditableBreadcrumbItem.tsx index d7d3e87022b7..61d3bb423ab1 100644 --- a/packages/twenty-front/src/modules/ui/navigation/bread-crumb/components/EditableBreadcrumbItem.tsx +++ b/packages/twenty-front/src/modules/ui/navigation/bread-crumb/components/EditableBreadcrumbItem.tsx @@ -8,7 +8,7 @@ import styled from '@emotion/styled'; import { useRef, useState } from 'react'; import { useRecoilState } from 'recoil'; import { Key } from 'ts-key-enum'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useHotkeyScopeOnMount } from '~/hooks/useHotkeyScopeOnMount'; type EditableBreadcrumbItemProps = { diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerInput.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerInput.tsx index 5a7231242bdb..5f55f2707e11 100644 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerInput.tsx +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerInput.tsx @@ -4,7 +4,8 @@ import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useLis import styled from '@emotion/styled'; import { FocusEvent, useRef } from 'react'; import { Key } from 'ts-key-enum'; -import { IconComponent, TablerIconsProps, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconComponent, TablerIconsProps } from 'twenty-ui'; import { useHotkeyScopeOnMount } from '~/hooks/useHotkeyScopeOnMount'; type NavigationDrawerInputProps = { diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItem.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItem.tsx index 4f61530b72ba..4c91048073d4 100644 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItem.tsx +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerItem.tsx @@ -11,7 +11,7 @@ import styled from '@emotion/styled'; import { ReactNode } from 'react'; import { Link } from 'react-router-dom'; import { useRecoilState } from 'recoil'; -import { capitalize } from 'twenty-shared'; +import { capitalize, isDefined } from 'twenty-shared'; import { IconComponent, Label, @@ -19,7 +19,6 @@ import { Pill, TablerIconsProps, } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; const DEFAULT_INDENTATION_LEVEL = 1; diff --git a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerSectionTitle.tsx b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerSectionTitle.tsx index 0711b54b876d..72c7215fcf93 100644 --- a/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerSectionTitle.tsx +++ b/packages/twenty-front/src/modules/ui/navigation/navigation-drawer/components/NavigationDrawerSectionTitle.tsx @@ -7,7 +7,7 @@ import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile'; import styled from '@emotion/styled'; import React from 'react'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; const StyledTitle = styled.div` align-items: center; diff --git a/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useScopedHotkeys.ts b/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useScopedHotkeys.ts index 45e0fd414eec..3947d83deb61 100644 --- a/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useScopedHotkeys.ts +++ b/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useScopedHotkeys.ts @@ -4,7 +4,7 @@ import { useRecoilState } from 'recoil'; import { pendingHotkeyState } from '../states/internal/pendingHotkeysState'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { useScopedHotkeyCallback } from './useScopedHotkeyCallback'; type UseHotkeysOptionsWithoutBuggyOptions = Omit<Options, 'enabled'>; diff --git a/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useSequenceScopedHotkeys.ts b/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useSequenceScopedHotkeys.ts index 1ab3fe8e04fa..6b1432616f7b 100644 --- a/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useSequenceScopedHotkeys.ts +++ b/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useSequenceScopedHotkeys.ts @@ -2,7 +2,7 @@ import { Options, useHotkeys } from 'react-hotkeys-hook'; import { Keys } from 'react-hotkeys-hook/dist/types'; import { useRecoilState } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { pendingHotkeyState } from '../states/internal/pendingHotkeysState'; diff --git a/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useSetHotkeyScope.ts b/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useSetHotkeyScope.ts index f4b82434a3f8..247c10c7948a 100644 --- a/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useSetHotkeyScope.ts +++ b/packages/twenty-front/src/modules/ui/utilities/hotkey/hooks/useSetHotkeyScope.ts @@ -1,7 +1,7 @@ import { useRecoilCallback } from 'recoil'; import { DEBUG_HOTKEY_SCOPE } from '@/ui/utilities/hotkey/hooks/useScopedHotkeyCallback'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { logDebug } from '~/utils/logDebug'; import { DEFAULT_HOTKEYS_SCOPE_CUSTOM_SCOPES } from '../constants/DefaultHotkeysScopeCustomScopes'; diff --git a/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/__tests__/useListenClickOutside.test.tsx b/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/__tests__/useListenClickOutside.test.tsx index 9d0a26347be4..e06ef21a077a 100644 --- a/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/__tests__/useListenClickOutside.test.tsx +++ b/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/__tests__/useListenClickOutside.test.tsx @@ -7,7 +7,7 @@ import { ClickOutsideMode, useListenClickOutside, } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const containerRef = React.createRef<HTMLDivElement>(); const nullRef = React.createRef<HTMLDivElement>(); diff --git a/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/useClickOutsideListener.ts b/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/useClickOutsideListener.ts index 819c9a294010..ca07c9d6add4 100644 --- a/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/useClickOutsideListener.ts +++ b/packages/twenty-front/src/modules/ui/utilities/pointer-event/hooks/useClickOutsideListener.ts @@ -4,8 +4,8 @@ import { useRecoilCallback } from 'recoil'; import { useClickOustideListenerStates } from '@/ui/utilities/pointer-event/hooks/useClickOustideListenerStates'; import { ClickOutsideListenerCallback } from '@/ui/utilities/pointer-event/types/ClickOutsideListenerCallback'; +import { isDefined } from 'twenty-shared'; import { toSpliced } from '~/utils/array/toSpliced'; -import { isDefined } from '~/utils/isDefined'; export const useClickOutsideListener = (componentId: string) => { const { diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilySelectorV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilySelectorV2.ts index 33010ba9f386..508921062789 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilySelectorV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilySelectorV2.ts @@ -9,7 +9,7 @@ import { ComponentInstanceStateContext } from '@/ui/utilities/state/component-st import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; import { SelectorGetter } from '@/ui/utilities/state/types/SelectorGetter'; import { SelectorSetter } from '@/ui/utilities/state/types/SelectorSetter'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export function createComponentFamilySelectorV2< ValueType, diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilyStateV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilyStateV2.ts index a19fbd6ee8bc..c150e0050615 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilyStateV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentFamilyStateV2.ts @@ -11,7 +11,7 @@ import { WrappedValue, } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; type CreateComponentFamilyStateArgs< ValueType, diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentSelectorV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentSelectorV2.ts index d3a45dbfbe08..2eac21632816 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentSelectorV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentSelectorV2.ts @@ -9,7 +9,7 @@ import { ComponentStateKeyV2 } from '@/ui/utilities/state/component-state/types/ import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; import { SelectorGetter } from '@/ui/utilities/state/types/SelectorGetter'; import { SelectorSetter } from '@/ui/utilities/state/types/SelectorSetter'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export function createComponentSelectorV2<ValueType>(options: { key: string; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentStateV2.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentStateV2.ts index dc87cbf0cfab..3c4a9ceb9146 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentStateV2.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentStateV2.ts @@ -4,7 +4,7 @@ import { ComponentStateV2 } from '@/ui/utilities/state/component-state/types/Com import { globalComponentInstanceContextMap } from '@/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap'; import { AtomEffect, atomFamily } from 'recoil'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type CreateComponentInstanceStateArgs<ValueType> = { key: string; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentStateV2Alpha.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentStateV2Alpha.ts index 2533b0542785..cbb412b4b411 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentStateV2Alpha.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/createComponentStateV2Alpha.ts @@ -4,7 +4,7 @@ import { ScopeInternalContext } from '@/ui/utilities/recoil-scope/scopes-interna import { RecoilComponentState } from '@/ui/utilities/state/component-state/types/RecoilComponentState'; import { RecoilComponentStateKey } from '@/ui/utilities/state/component-state/types/RecoilComponentStateKey'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type CreateComponentStateV2Type<ValueType> = { key: string; diff --git a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap.ts b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap.ts index 3dd5ce612f0d..3b4a31a9f04c 100644 --- a/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap.ts +++ b/packages/twenty-front/src/modules/ui/utilities/state/component-state/utils/globalComponentInstanceContextMap.ts @@ -1,5 +1,5 @@ import { ComponentInstanceStateContext } from '@/ui/utilities/state/component-state/types/ComponentInstanceStateContext'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; class ComponentInstanceContextMap { constructor() { diff --git a/packages/twenty-front/src/modules/users/components/UserProviderEffect.tsx b/packages/twenty-front/src/modules/users/components/UserProviderEffect.tsx index 9fe65415bd7d..35df5c1ab2b0 100644 --- a/packages/twenty-front/src/modules/users/components/UserProviderEffect.tsx +++ b/packages/twenty-front/src/modules/users/components/UserProviderEffect.tsx @@ -16,10 +16,10 @@ 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 { APP_LOCALES, isDefined } from 'twenty-shared'; import { WorkspaceMember } from '~/generated-metadata/graphql'; import { useGetCurrentUserQuery } from '~/generated/graphql'; import { dynamicActivate } from '~/utils/i18n/dynamicActivate'; -import { isDefined } from '~/utils/isDefined'; export const UserProviderEffect = () => { const [isLoading, setIsLoading] = useState(true); @@ -70,7 +70,7 @@ export const UserProviderEffect = () => { return { ...workspaceMember, colorScheme: (workspaceMember.colorScheme as ColorScheme) ?? 'Light', - locale: workspaceMember.locale ?? 'en', + locale: (workspaceMember.locale as keyof typeof APP_LOCALES) ?? 'en', }; }; @@ -93,7 +93,9 @@ export const UserProviderEffect = () => { : TimeFormat[detectTimeFormat()], }); - dynamicActivate(workspaceMember.locale ?? 'en'); + dynamicActivate( + (workspaceMember.locale as keyof typeof APP_LOCALES) ?? 'en', + ); } if (isDefined(workspaceMembers)) { diff --git a/packages/twenty-front/src/modules/views/components/AdvancedFilterDropdownButton.tsx b/packages/twenty-front/src/modules/views/components/AdvancedFilterDropdownButton.tsx index 351f3c3d1c0e..560dc866ac3e 100644 --- a/packages/twenty-front/src/modules/views/components/AdvancedFilterDropdownButton.tsx +++ b/packages/twenty-front/src/modules/views/components/AdvancedFilterDropdownButton.tsx @@ -8,7 +8,7 @@ import { AdvancedFilterChip } from '@/views/components/AdvancedFilterChip'; import { ADVANCED_FILTER_DROPDOWN_ID } from '@/views/constants/AdvancedFilterDropdownId'; import { useDeleteCombinedViewFilters } from '@/views/hooks/useDeleteCombinedViewFilters'; import { useGetCurrentView } from '@/views/hooks/useGetCurrentView'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const AdvancedFilterDropdownButton = () => { const { deleteCombinedViewFilter } = useDeleteCombinedViewFilters(); diff --git a/packages/twenty-front/src/modules/views/components/EditableFilterDropdownButton.tsx b/packages/twenty-front/src/modules/views/components/EditableFilterDropdownButton.tsx index e663f7e2f60c..146bcc41a350 100644 --- a/packages/twenty-front/src/modules/views/components/EditableFilterDropdownButton.tsx +++ b/packages/twenty-front/src/modules/views/components/EditableFilterDropdownButton.tsx @@ -17,7 +17,7 @@ import { RecordFilterOperand } from '@/object-record/record-filter/types/RecordF import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { useDeleteCombinedViewFilters } from '@/views/hooks/useDeleteCombinedViewFilters'; import { availableFilterDefinitionsComponentState } from '@/views/states/availableFilterDefinitionsComponentState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type EditableFilterDropdownButtonProps = { viewFilterDropdownId: string; diff --git a/packages/twenty-front/src/modules/views/components/QueryParamsViewIdEffect.tsx b/packages/twenty-front/src/modules/views/components/QueryParamsViewIdEffect.tsx index ced095e33adb..d0ea6e34403a 100644 --- a/packages/twenty-front/src/modules/views/components/QueryParamsViewIdEffect.tsx +++ b/packages/twenty-front/src/modules/views/components/QueryParamsViewIdEffect.tsx @@ -9,8 +9,8 @@ import { useGetCurrentView } from '@/views/hooks/useGetCurrentView'; import { currentViewIdComponentState } from '@/views/states/currentViewIdComponentState'; import { isUndefined } from '@sniptt/guards'; import { useEffect } from 'react'; +import { isDefined } from 'twenty-shared'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { isDefined } from '~/utils/isDefined'; export const QueryParamsViewIdEffect = () => { const { getFiltersFromQueryParams, viewIdQueryParam } = diff --git a/packages/twenty-front/src/modules/views/components/ViewBarDetails.tsx b/packages/twenty-front/src/modules/views/components/ViewBarDetails.tsx index 1a915825e087..21e9ac7822dd 100644 --- a/packages/twenty-front/src/modules/views/components/ViewBarDetails.tsx +++ b/packages/twenty-front/src/modules/views/components/ViewBarDetails.tsx @@ -22,7 +22,7 @@ import { useResetUnsavedViewStates } from '@/views/hooks/useResetUnsavedViewStat import { availableSortDefinitionsComponentState } from '@/views/states/availableSortDefinitionsComponentState'; import { isViewBarExpandedComponentState } from '@/views/states/isViewBarExpandedComponentState'; import { mapViewSortsToSorts } from '@/views/utils/mapViewSortsToSorts'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { VariantFilterChip } from './VariantFilterChip'; export type ViewBarDetailsProps = { diff --git a/packages/twenty-front/src/modules/views/components/ViewBarFilterEffect.tsx b/packages/twenty-front/src/modules/views/components/ViewBarFilterEffect.tsx index 61f69af4961c..4fc803b86a97 100644 --- a/packages/twenty-front/src/modules/views/components/ViewBarFilterEffect.tsx +++ b/packages/twenty-front/src/modules/views/components/ViewBarFilterEffect.tsx @@ -11,7 +11,7 @@ import { useGetCurrentView } from '@/views/hooks/useGetCurrentView'; import { availableFilterDefinitionsComponentState } from '@/views/states/availableFilterDefinitionsComponentState'; import { jsonRelationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/jsonRelationFilterValueSchema'; import { simpleRelationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/simpleRelationFilterValueSchema'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type ViewBarFilterEffectProps = { filterDropdownId: string; diff --git a/packages/twenty-front/src/modules/views/components/ViewBarRecordFilterEffect.tsx b/packages/twenty-front/src/modules/views/components/ViewBarRecordFilterEffect.tsx index e5b781432075..344fd0753564 100644 --- a/packages/twenty-front/src/modules/views/components/ViewBarRecordFilterEffect.tsx +++ b/packages/twenty-front/src/modules/views/components/ViewBarRecordFilterEffect.tsx @@ -8,7 +8,7 @@ import { currentViewIdComponentState } from '@/views/states/currentViewIdCompone import { View } from '@/views/types/View'; import { mapViewFiltersToFilters } from '@/views/utils/mapViewFiltersToFilters'; import { useEffect } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const ViewBarRecordFilterEffect = () => { const { records: views, isDataPrefetched } = usePrefetchedData<View>( diff --git a/packages/twenty-front/src/modules/views/components/ViewBarSortEffect.tsx b/packages/twenty-front/src/modules/views/components/ViewBarSortEffect.tsx index c45dc2ddded7..5e13f2d17525 100644 --- a/packages/twenty-front/src/modules/views/components/ViewBarSortEffect.tsx +++ b/packages/twenty-front/src/modules/views/components/ViewBarSortEffect.tsx @@ -6,7 +6,7 @@ import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/ import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { useUpsertCombinedViewSorts } from '@/views/hooks/useUpsertCombinedViewSorts'; import { availableSortDefinitionsComponentState } from '@/views/states/availableSortDefinitionsComponentState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const ViewBarSortEffect = () => { const { upsertCombinedViewSort } = useUpsertCombinedViewSorts(); diff --git a/packages/twenty-front/src/modules/views/components/ViewFieldsVisibilityDropdownSection.tsx b/packages/twenty-front/src/modules/views/components/ViewFieldsVisibilityDropdownSection.tsx index 90d1375dff69..6ace2939c389 100644 --- a/packages/twenty-front/src/modules/views/components/ViewFieldsVisibilityDropdownSection.tsx +++ b/packages/twenty-front/src/modules/views/components/ViewFieldsVisibilityDropdownSection.tsx @@ -20,8 +20,8 @@ import { DraggableItem } from '@/ui/layout/draggable-list/components/DraggableIt import { DraggableList } from '@/ui/layout/draggable-list/components/DraggableList'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { StyledDropdownMenuSubheader } from '@/ui/layout/dropdown/components/StyledDropdownMenuSubheader'; +import { isDefined } from 'twenty-shared'; import { groupArrayItemsBy } from '~/utils/array/groupArrayItemsBy'; -import { isDefined } from '~/utils/isDefined'; type ViewFieldsVisibilityDropdownSectionProps = { fields: Omit<ColumnDefinition<FieldMetadata>, 'size'>[]; diff --git a/packages/twenty-front/src/modules/views/hooks/internal/usePersistViewFilterGroupRecords.ts b/packages/twenty-front/src/modules/views/hooks/internal/usePersistViewFilterGroupRecords.ts index 0987942da0c2..edad40cfffbc 100644 --- a/packages/twenty-front/src/modules/views/hooks/internal/usePersistViewFilterGroupRecords.ts +++ b/packages/twenty-front/src/modules/views/hooks/internal/usePersistViewFilterGroupRecords.ts @@ -13,7 +13,7 @@ import { useDestroyOneRecordMutation } from '@/object-record/hooks/useDestroyOne import { useUpdateOneRecordMutation } from '@/object-record/hooks/useUpdateOneRecordMutation'; import { GraphQLView } from '@/views/types/GraphQLView'; import { ViewFilterGroup } from '@/views/types/ViewFilterGroup'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const usePersistViewFilterGroupRecords = () => { const { objectMetadataItem } = useObjectMetadataItem({ diff --git a/packages/twenty-front/src/modules/views/hooks/internal/useViewFromQueryParams.ts b/packages/twenty-front/src/modules/views/hooks/internal/useViewFromQueryParams.ts index 983e3c602c36..faac1135801a 100644 --- a/packages/twenty-front/src/modules/views/hooks/internal/useViewFromQueryParams.ts +++ b/packages/twenty-front/src/modules/views/hooks/internal/useViewFromQueryParams.ts @@ -17,7 +17,7 @@ import { generateFindManyRecordsQuery } from '@/object-record/utils/generateFind import { ViewFilter } from '@/views/types/ViewFilter'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { relationFilterValueSchemaObject } from '@/views/view-filter-value/validation-schemas/jsonRelationFilterValueSchema'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; const filterQueryParamsSchema = z.object({ diff --git a/packages/twenty-front/src/modules/views/hooks/useApplyCurrentViewFiltersToCurrentRecordFilters.ts b/packages/twenty-front/src/modules/views/hooks/useApplyCurrentViewFiltersToCurrentRecordFilters.ts index 1bbb5e3660e9..c1ad5920f341 100644 --- a/packages/twenty-front/src/modules/views/hooks/useApplyCurrentViewFiltersToCurrentRecordFilters.ts +++ b/packages/twenty-front/src/modules/views/hooks/useApplyCurrentViewFiltersToCurrentRecordFilters.ts @@ -8,7 +8,7 @@ import { currentViewIdComponentState } from '@/views/states/currentViewIdCompone import { View } from '@/views/types/View'; import { mapViewFiltersToFilters } from '@/views/utils/mapViewFiltersToFilters'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useApplyCurrentViewFiltersToCurrentRecordFilters = () => { const { records: views } = usePrefetchedData<View>(PrefetchKey.AllViews); diff --git a/packages/twenty-front/src/modules/views/hooks/useCreateViewFromCurrentView.ts b/packages/twenty-front/src/modules/views/hooks/useCreateViewFromCurrentView.ts index 5d8e87d1f6a2..440fb8e6c1f9 100644 --- a/packages/twenty-front/src/modules/views/hooks/useCreateViewFromCurrentView.ts +++ b/packages/twenty-front/src/modules/views/hooks/useCreateViewFromCurrentView.ts @@ -19,7 +19,7 @@ import { View } from '@/views/types/View'; import { ViewGroup } from '@/views/types/ViewGroup'; import { ViewType } from '@/views/types/ViewType'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { v4 } from 'uuid'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; diff --git a/packages/twenty-front/src/modules/views/hooks/useDeleteCombinedViewFilters.ts b/packages/twenty-front/src/modules/views/hooks/useDeleteCombinedViewFilters.ts index af6ef7cba2e6..1bdf6aec3227 100644 --- a/packages/twenty-front/src/modules/views/hooks/useDeleteCombinedViewFilters.ts +++ b/packages/twenty-front/src/modules/views/hooks/useDeleteCombinedViewFilters.ts @@ -6,7 +6,7 @@ import { useGetViewFromCache } from '@/views/hooks/useGetViewFromCache'; import { currentViewIdComponentState } from '@/views/states/currentViewIdComponentState'; import { unsavedToDeleteViewFilterIdsComponentFamilyState } from '@/views/states/unsavedToDeleteViewFilterIdsComponentFamilyState'; import { unsavedToUpsertViewFiltersComponentFamilyState } from '@/views/states/unsavedToUpsertViewFiltersComponentFamilyState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useDeleteCombinedViewFilters = (viewBarComponentId?: string) => { const unsavedToUpsertViewFiltersCallbackState = diff --git a/packages/twenty-front/src/modules/views/hooks/useDeleteCombinedViewSorts.ts b/packages/twenty-front/src/modules/views/hooks/useDeleteCombinedViewSorts.ts index 4ff252cab654..048b06dce0c1 100644 --- a/packages/twenty-front/src/modules/views/hooks/useDeleteCombinedViewSorts.ts +++ b/packages/twenty-front/src/modules/views/hooks/useDeleteCombinedViewSorts.ts @@ -6,7 +6,7 @@ import { useGetViewFromCache } from '@/views/hooks/useGetViewFromCache'; import { currentViewIdComponentState } from '@/views/states/currentViewIdComponentState'; import { unsavedToDeleteViewSortIdsComponentFamilyState } from '@/views/states/unsavedToDeleteViewSortIdsComponentFamilyState'; import { unsavedToUpsertViewSortsComponentFamilyState } from '@/views/states/unsavedToUpsertViewSortsComponentFamilyState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useDeleteCombinedViewSorts = (viewBarComponentId?: string) => { const currentViewIdCallbackState = useRecoilComponentCallbackStateV2( diff --git a/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewFilterGroups.ts b/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewFilterGroups.ts index e235fd79d04a..c1300f2b8295 100644 --- a/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewFilterGroups.ts +++ b/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewFilterGroups.ts @@ -8,7 +8,7 @@ import { unsavedToDeleteViewFilterGroupIdsComponentFamilyState } from '@/views/s import { unsavedToUpsertViewFilterGroupsComponentFamilyState } from '@/views/states/unsavedToUpsertViewFilterGroupsComponentFamilyState'; import { View } from '@/views/types/View'; import { getCombinedViewFilterGroups } from '@/views/utils/getCombinedViewFilterGroups'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useGetViewFilterGroupsCombined = (viewBarComponentId?: string) => { const { records: views } = usePrefetchedData<View>(PrefetchKey.AllViews); diff --git a/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewFilters.ts b/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewFilters.ts index 20673087ed09..1a72e3353900 100644 --- a/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewFilters.ts +++ b/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewFilters.ts @@ -8,7 +8,7 @@ import { unsavedToDeleteViewFilterIdsComponentFamilyState } from '@/views/states import { unsavedToUpsertViewFiltersComponentFamilyState } from '@/views/states/unsavedToUpsertViewFiltersComponentFamilyState'; import { View } from '@/views/types/View'; import { getCombinedViewFilters } from '@/views/utils/getCombinedViewFilters'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useGetViewFiltersCombined = (viewBarComponentId?: string) => { const { records: views } = usePrefetchedData<View>(PrefetchKey.AllViews); diff --git a/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewSorts.ts b/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewSorts.ts index f275b6dc0e07..7b3131da6685 100644 --- a/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewSorts.ts +++ b/packages/twenty-front/src/modules/views/hooks/useGetCombinedViewSorts.ts @@ -8,7 +8,7 @@ import { unsavedToDeleteViewSortIdsComponentFamilyState } from '@/views/states/u import { unsavedToUpsertViewSortsComponentFamilyState } from '@/views/states/unsavedToUpsertViewSortsComponentFamilyState'; import { View } from '@/views/types/View'; import { getCombinedViewSorts } from '@/views/utils/getCombinedViewSorts'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; // TODO: fix naming export const useGetViewSortsCombined = (viewBarComponentId?: string) => { diff --git a/packages/twenty-front/src/modules/views/hooks/useGetCurrentView.ts b/packages/twenty-front/src/modules/views/hooks/useGetCurrentView.ts index 80d1d4c7b84f..9c25b8722ec7 100644 --- a/packages/twenty-front/src/modules/views/hooks/useGetCurrentView.ts +++ b/packages/twenty-front/src/modules/views/hooks/useGetCurrentView.ts @@ -21,7 +21,7 @@ import { getCombinedViewFilterGroups } from '@/views/utils/getCombinedViewFilter import { getCombinedViewFilters } from '@/views/utils/getCombinedViewFilters'; import { getCombinedViewSorts } from '@/views/utils/getCombinedViewSorts'; import { getObjectMetadataItemViews } from '@/views/utils/getObjectMetadataItemViews'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useGetCurrentView = (viewBarInstanceId?: string) => { const instanceId = useAvailableComponentInstanceIdOrThrow( diff --git a/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewFields.ts b/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewFields.ts index 7d614988140c..832999fb885e 100644 --- a/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewFields.ts +++ b/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewFields.ts @@ -6,8 +6,8 @@ import { useGetViewFromCache } from '@/views/hooks/useGetViewFromCache'; import { currentViewIdComponentState } from '@/views/states/currentViewIdComponentState'; import { isPersistingViewFieldsComponentState } from '@/views/states/isPersistingViewFieldsComponentState'; import { ViewField } from '@/views/types/ViewField'; +import { isDefined } from 'twenty-shared'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; export const useSaveCurrentViewFields = (viewBarComponentId?: string) => { diff --git a/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewFiltersAndSorts.ts b/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewFiltersAndSorts.ts index aa04c55338d4..d74d8528be9c 100644 --- a/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewFiltersAndSorts.ts +++ b/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewFiltersAndSorts.ts @@ -12,7 +12,7 @@ import { unsavedToDeleteViewFilterGroupIdsComponentFamilyState } from '@/views/s import { unsavedToDeleteViewSortIdsComponentFamilyState } from '@/views/states/unsavedToDeleteViewSortIdsComponentFamilyState'; import { unsavedToUpsertViewFilterGroupsComponentFamilyState } from '@/views/states/unsavedToUpsertViewFilterGroupsComponentFamilyState'; import { unsavedToUpsertViewSortsComponentFamilyState } from '@/views/states/unsavedToUpsertViewSortsComponentFamilyState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; export const useSaveCurrentViewFiltersAndSorts = ( diff --git a/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewGroups.ts b/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewGroups.ts index 246c03f03f0c..317527d48f2a 100644 --- a/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewGroups.ts +++ b/packages/twenty-front/src/modules/views/hooks/useSaveCurrentViewGroups.ts @@ -5,8 +5,8 @@ import { usePersistViewGroupRecords } from '@/views/hooks/internal/usePersistVie import { useGetViewFromCache } from '@/views/hooks/useGetViewFromCache'; import { currentViewIdComponentState } from '@/views/states/currentViewIdComponentState'; import { ViewGroup } from '@/views/types/ViewGroup'; +import { isDefined } from 'twenty-shared'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; export const useSaveCurrentViewGroups = (viewBarComponentId?: string) => { diff --git a/packages/twenty-front/src/modules/views/hooks/useSaveRecordFiltersToViewFilters.ts b/packages/twenty-front/src/modules/views/hooks/useSaveRecordFiltersToViewFilters.ts index 3a3e8b903885..ae00c8ee9fcf 100644 --- a/packages/twenty-front/src/modules/views/hooks/useSaveRecordFiltersToViewFilters.ts +++ b/packages/twenty-front/src/modules/views/hooks/useSaveRecordFiltersToViewFilters.ts @@ -8,7 +8,7 @@ import { getViewFiltersToDelete } from '@/views/utils/getViewFiltersToDelete'; import { getViewFiltersToUpdate } from '@/views/utils/getViewFiltersToUpdate'; import { mapRecordFilterToViewFilter } from '@/views/utils/mapRecordFilterToViewFilter'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useSaveRecordFiltersToViewFilters = () => { const { diff --git a/packages/twenty-front/src/modules/views/hooks/useUpdateCurrentView.ts b/packages/twenty-front/src/modules/views/hooks/useUpdateCurrentView.ts index 910548d73804..8f3e151302cb 100644 --- a/packages/twenty-front/src/modules/views/hooks/useUpdateCurrentView.ts +++ b/packages/twenty-front/src/modules/views/hooks/useUpdateCurrentView.ts @@ -5,7 +5,7 @@ import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2'; import { currentViewIdComponentState } from '@/views/states/currentViewIdComponentState'; import { GraphQLView } from '@/views/types/GraphQLView'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useUpdateCurrentView = (viewBarComponentId?: string) => { const currentViewIdCallbackState = useRecoilComponentCallbackStateV2( diff --git a/packages/twenty-front/src/modules/views/hooks/useUpdateView.ts b/packages/twenty-front/src/modules/views/hooks/useUpdateView.ts index d00201e5fd06..fe85b71690dc 100644 --- a/packages/twenty-front/src/modules/views/hooks/useUpdateView.ts +++ b/packages/twenty-front/src/modules/views/hooks/useUpdateView.ts @@ -2,7 +2,7 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { GraphQLView } from '@/views/types/GraphQLView'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useUpdateView = () => { const { updateOneRecord } = useUpdateOneRecord({ diff --git a/packages/twenty-front/src/modules/views/hooks/useUpdateViewField.ts b/packages/twenty-front/src/modules/views/hooks/useUpdateViewField.ts index 2f73b062ca14..6756c0cc9c47 100644 --- a/packages/twenty-front/src/modules/views/hooks/useUpdateViewField.ts +++ b/packages/twenty-front/src/modules/views/hooks/useUpdateViewField.ts @@ -2,7 +2,7 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { ViewField } from '@/views/types/ViewField'; import { useRecoilCallback } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useUpdateViewField = () => { const { updateOneRecord } = useUpdateOneRecord({ diff --git a/packages/twenty-front/src/modules/views/hooks/useUpsertCombinedViewFilters.ts b/packages/twenty-front/src/modules/views/hooks/useUpsertCombinedViewFilters.ts index 2417f29c6ef8..0457919fd415 100644 --- a/packages/twenty-front/src/modules/views/hooks/useUpsertCombinedViewFilters.ts +++ b/packages/twenty-front/src/modules/views/hooks/useUpsertCombinedViewFilters.ts @@ -9,7 +9,7 @@ import { unsavedToDeleteViewFilterIdsComponentFamilyState } from '@/views/states import { unsavedToUpsertViewFiltersComponentFamilyState } from '@/views/states/unsavedToUpsertViewFiltersComponentFamilyState'; import { ViewFilter } from '@/views/types/ViewFilter'; import { shouldReplaceFilter } from '@/views/utils/shouldReplaceFilter'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useUpsertCombinedViewFilters = (viewBarComponentId?: string) => { const unsavedToUpsertViewFiltersCallbackState = diff --git a/packages/twenty-front/src/modules/views/hooks/useUpsertCombinedViewSorts.ts b/packages/twenty-front/src/modules/views/hooks/useUpsertCombinedViewSorts.ts index d455c6f6307e..1983a1ea6bde 100644 --- a/packages/twenty-front/src/modules/views/hooks/useUpsertCombinedViewSorts.ts +++ b/packages/twenty-front/src/modules/views/hooks/useUpsertCombinedViewSorts.ts @@ -9,7 +9,7 @@ import { currentViewIdComponentState } from '@/views/states/currentViewIdCompone import { unsavedToDeleteViewSortIdsComponentFamilyState } from '@/views/states/unsavedToDeleteViewSortIdsComponentFamilyState'; import { unsavedToUpsertViewSortsComponentFamilyState } from '@/views/states/unsavedToUpsertViewSortsComponentFamilyState'; import { ViewSort } from '@/views/types/ViewSort'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const useUpsertCombinedViewSorts = (viewBarComponentId?: string) => { const currentViewIdCallbackState = useRecoilComponentCallbackStateV2( diff --git a/packages/twenty-front/src/modules/views/utils/getQueryVariablesFromView.ts b/packages/twenty-front/src/modules/views/utils/getQueryVariablesFromView.ts index 2f3773df95d2..b7c9ec052123 100644 --- a/packages/twenty-front/src/modules/views/utils/getQueryVariablesFromView.ts +++ b/packages/twenty-front/src/modules/views/utils/getQueryVariablesFromView.ts @@ -9,7 +9,7 @@ import { computeViewRecordGqlOperationFilter } from '@/object-record/record-filt import { View } from '@/views/types/View'; import { mapViewFiltersToFilters } from '@/views/utils/mapViewFiltersToFilters'; import { mapViewSortsToSorts } from '@/views/utils/mapViewSortsToSorts'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const getQueryVariablesFromView = ({ view, diff --git a/packages/twenty-front/src/modules/views/utils/getViewFiltersToCreate.ts b/packages/twenty-front/src/modules/views/utils/getViewFiltersToCreate.ts index a222a1daf51d..aff45654a802 100644 --- a/packages/twenty-front/src/modules/views/utils/getViewFiltersToCreate.ts +++ b/packages/twenty-front/src/modules/views/utils/getViewFiltersToCreate.ts @@ -1,5 +1,5 @@ import { ViewFilter } from '@/views/types/ViewFilter'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const getViewFiltersToCreate = ( currentViewFilters: ViewFilter[], diff --git a/packages/twenty-front/src/modules/views/utils/getViewFiltersToUpdate.ts b/packages/twenty-front/src/modules/views/utils/getViewFiltersToUpdate.ts index d30ee10b2643..b0776841e5f9 100644 --- a/packages/twenty-front/src/modules/views/utils/getViewFiltersToUpdate.ts +++ b/packages/twenty-front/src/modules/views/utils/getViewFiltersToUpdate.ts @@ -1,6 +1,6 @@ import { ViewFilter } from '@/views/types/ViewFilter'; import { areViewFiltersEqual } from '@/views/utils/areViewFiltersEqual'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const getViewFiltersToUpdate = ( currentViewFilters: ViewFilter[], diff --git a/packages/twenty-front/src/modules/views/utils/mapViewFieldsToColumnDefinitions.ts b/packages/twenty-front/src/modules/views/utils/mapViewFieldsToColumnDefinitions.ts index 4019e3619644..dd431c6c29ab 100644 --- a/packages/twenty-front/src/modules/views/utils/mapViewFieldsToColumnDefinitions.ts +++ b/packages/twenty-front/src/modules/views/utils/mapViewFieldsToColumnDefinitions.ts @@ -1,8 +1,8 @@ import { FieldMetadata } from '@/object-record/record-field/types/FieldMetadata'; import { ColumnDefinition } from '@/object-record/record-table/types/ColumnDefinition'; +import { isDefined } from 'twenty-shared'; import { mapArrayToObject } from '~/utils/array/mapArrayToObject'; import { moveArrayItem } from '~/utils/array/moveArrayItem'; -import { isDefined } from '~/utils/isDefined'; import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull'; import { ViewField } from '../types/ViewField'; diff --git a/packages/twenty-front/src/modules/views/utils/mapViewFiltersToFilters.ts b/packages/twenty-front/src/modules/views/utils/mapViewFiltersToFilters.ts index feff9e41d64c..b4da197ea986 100644 --- a/packages/twenty-front/src/modules/views/utils/mapViewFiltersToFilters.ts +++ b/packages/twenty-front/src/modules/views/utils/mapViewFiltersToFilters.ts @@ -1,5 +1,5 @@ import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { RecordFilterDefinition } from '@/object-record/record-filter/types/RecordFilterDefinition'; import { ViewFilter } from '../types/ViewFilter'; diff --git a/packages/twenty-front/src/modules/views/utils/mapViewGroupsToRecordGroupDefinitions.ts b/packages/twenty-front/src/modules/views/utils/mapViewGroupsToRecordGroupDefinitions.ts index 4bd759ba5e60..3b7ad89f7fda 100644 --- a/packages/twenty-front/src/modules/views/utils/mapViewGroupsToRecordGroupDefinitions.ts +++ b/packages/twenty-front/src/modules/views/utils/mapViewGroupsToRecordGroupDefinitions.ts @@ -1,4 +1,4 @@ -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { diff --git a/packages/twenty-front/src/modules/views/utils/mapViewSortsToSorts.ts b/packages/twenty-front/src/modules/views/utils/mapViewSortsToSorts.ts index 34e8c2f07c4f..7e414196672e 100644 --- a/packages/twenty-front/src/modules/views/utils/mapViewSortsToSorts.ts +++ b/packages/twenty-front/src/modules/views/utils/mapViewSortsToSorts.ts @@ -1,6 +1,6 @@ import { Sort } from '@/object-record/object-sort-dropdown/types/Sort'; import { SortDefinition } from '@/object-record/object-sort-dropdown/types/SortDefinition'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { ViewSort } from '../types/ViewSort'; diff --git a/packages/twenty-front/src/modules/views/utils/shouldReplaceFilter.ts b/packages/twenty-front/src/modules/views/utils/shouldReplaceFilter.ts index 2e4d0f1c8dc4..a90ef228f0d1 100644 --- a/packages/twenty-front/src/modules/views/utils/shouldReplaceFilter.ts +++ b/packages/twenty-front/src/modules/views/utils/shouldReplaceFilter.ts @@ -1,5 +1,5 @@ import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const shouldReplaceFilter = ( oldFilter: Pick<RecordFilter, 'id' | 'fieldMetadataId' | 'viewFilterGroupId'>, diff --git a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerContentEffect.tsx b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerContentEffect.tsx index 767f3cf68713..eaacac4173c2 100644 --- a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerContentEffect.tsx +++ b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerContentEffect.tsx @@ -14,7 +14,7 @@ import { viewPickerKanbanFieldMetadataIdComponentState } from '@/views/view-pick import { viewPickerReferenceViewIdComponentState } from '@/views/view-picker/states/viewPickerReferenceViewIdComponentState'; import { viewPickerSelectedIconComponentState } from '@/views/view-picker/states/viewPickerSelectedIconComponentState'; import { viewPickerTypeComponentState } from '@/views/view-picker/states/viewPickerTypeComponentState'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const ViewPickerContentEffect = () => { const setViewPickerSelectedIcon = useSetRecoilComponentStateV2( diff --git a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerDropdown.tsx b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerDropdown.tsx index 59709a48f14d..1c0c08143d7c 100644 --- a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerDropdown.tsx +++ b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerDropdown.tsx @@ -22,7 +22,7 @@ import { ViewPickerListContent } from '@/views/view-picker/components/ViewPicker import { VIEW_PICKER_DROPDOWN_ID } from '@/views/view-picker/constants/ViewPickerDropdownId'; import { useUpdateViewFromCurrentState } from '@/views/view-picker/hooks/useUpdateViewFromCurrentState'; import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; const StyledDropdownLabelAdornments = styled.span` align-items: center; diff --git a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerListContent.tsx b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerListContent.tsx index 0d6155d2e3c8..ecc9b599e9f6 100644 --- a/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerListContent.tsx +++ b/packages/twenty-front/src/modules/views/view-picker/components/ViewPickerListContent.tsx @@ -14,8 +14,8 @@ import { useUpdateView } from '@/views/hooks/useUpdateView'; import { ViewPickerOptionDropdown } from '@/views/view-picker/components/ViewPickerOptionDropdown'; import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode'; import { viewPickerReferenceViewIdComponentState } from '@/views/view-picker/states/viewPickerReferenceViewIdComponentState'; +import { isDefined } from 'twenty-shared'; import { moveArrayItem } from '~/utils/array/moveArrayItem'; -import { isDefined } from '~/utils/isDefined'; const StyledBoldDropdownMenuItemsContainer = styled(DropdownMenuItemsContainer)` font-weight: ${({ theme }) => theme.font.weight.regular}; diff --git a/packages/twenty-front/src/modules/views/view-picker/hooks/useGetAvailableFieldsForKanban.ts b/packages/twenty-front/src/modules/views/view-picker/hooks/useGetAvailableFieldsForKanban.ts index c5ab5bb2e668..5d73ebe8107d 100644 --- a/packages/twenty-front/src/modules/views/view-picker/hooks/useGetAvailableFieldsForKanban.ts +++ b/packages/twenty-front/src/modules/views/view-picker/hooks/useGetAvailableFieldsForKanban.ts @@ -7,9 +7,9 @@ import { SettingsPath } from '@/types/SettingsPath'; import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { viewObjectMetadataIdComponentState } from '@/views/states/viewObjectMetadataIdComponentState'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; -import { isDefined } from '~/utils/isDefined'; export const useGetAvailableFieldsForKanban = () => { const viewObjectMetadataId = useRecoilComponentValueV2( diff --git a/packages/twenty-front/src/modules/workflow/components/RecordShowPageWorkflowHeader.tsx b/packages/twenty-front/src/modules/workflow/components/RecordShowPageWorkflowHeader.tsx index 0127d7b72065..fb10a84bf601 100644 --- a/packages/twenty-front/src/modules/workflow/components/RecordShowPageWorkflowHeader.tsx +++ b/packages/twenty-front/src/modules/workflow/components/RecordShowPageWorkflowHeader.tsx @@ -8,6 +8,7 @@ import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithC import { useTheme } from '@emotion/react'; import { useLingui } from '@lingui/react/macro'; +import { isDefined } from 'twenty-shared'; import { Button, IconPlayerPlay, @@ -15,7 +16,6 @@ import { IconPower, IconSettingsAutomation, IconTrash, - isDefined, } from 'twenty-ui'; import { assertWorkflowWithCurrentVersionIsDefined } from '../utils/assertWorkflowWithCurrentVersionIsDefined'; diff --git a/packages/twenty-front/src/modules/workflow/components/RecordShowPageWorkflowVersionHeader.tsx b/packages/twenty-front/src/modules/workflow/components/RecordShowPageWorkflowVersionHeader.tsx index 95ef0c28ccd2..8b4771f94011 100644 --- a/packages/twenty-front/src/modules/workflow/components/RecordShowPageWorkflowVersionHeader.tsx +++ b/packages/twenty-front/src/modules/workflow/components/RecordShowPageWorkflowVersionHeader.tsx @@ -10,13 +10,9 @@ import { useWorkflowVersion } from '@/workflow/hooks/useWorkflowVersion'; import { openOverrideWorkflowDraftConfirmationModalState } from '@/workflow/states/openOverrideWorkflowDraftConfirmationModalState'; import { Workflow, WorkflowVersion } from '@/workflow/types/Workflow'; import { useSetRecoilState } from 'recoil'; -import { - Button, - IconPencil, - IconPlayerStop, - IconPower, - isDefined, -} from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { Button, IconPencil, IconPlayerStop, IconPower } from 'twenty-ui'; + import { useNavigateApp } from '~/hooks/useNavigateApp'; export const RecordShowPageWorkflowVersionHeader = ({ diff --git a/packages/twenty-front/src/modules/workflow/components/WorkflowRunOutputVisualizer.tsx b/packages/twenty-front/src/modules/workflow/components/WorkflowRunOutputVisualizer.tsx index 08d7703a0626..836d3bea16c7 100644 --- a/packages/twenty-front/src/modules/workflow/components/WorkflowRunOutputVisualizer.tsx +++ b/packages/twenty-front/src/modules/workflow/components/WorkflowRunOutputVisualizer.tsx @@ -1,6 +1,7 @@ import { useWorkflowRun } from '@/workflow/hooks/useWorkflowRun'; import styled from '@emotion/styled'; -import { CodeEditor, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { CodeEditor } from 'twenty-ui'; const StyledSourceCodeContainer = styled.div` margin: ${({ theme }) => theme.spacing(4)}; diff --git a/packages/twenty-front/src/modules/workflow/components/WorkflowRunVersionVisualizer.tsx b/packages/twenty-front/src/modules/workflow/components/WorkflowRunVersionVisualizer.tsx index 71ea331d4786..dd6ac30f452d 100644 --- a/packages/twenty-front/src/modules/workflow/components/WorkflowRunVersionVisualizer.tsx +++ b/packages/twenty-front/src/modules/workflow/components/WorkflowRunVersionVisualizer.tsx @@ -1,7 +1,7 @@ import { useWorkflowRun } from '@/workflow/hooks/useWorkflowRun'; import { WorkflowVersionVisualizer } from '@/workflow/workflow-diagram/components/WorkflowVersionVisualizer'; import { WorkflowVersionVisualizerEffect } from '@/workflow/workflow-diagram/components/WorkflowVersionVisualizerEffect'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const WorkflowRunVersionVisualizer = ({ workflowRunId, diff --git a/packages/twenty-front/src/modules/workflow/hooks/useAllActiveWorkflowVersions.ts b/packages/twenty-front/src/modules/workflow/hooks/useAllActiveWorkflowVersions.ts index 916634b248aa..37425e232439 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useAllActiveWorkflowVersions.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useAllActiveWorkflowVersions.ts @@ -8,7 +8,7 @@ import { WorkflowTriggerType, WorkflowVersion, } from '@/workflow/types/Workflow'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useAllActiveWorkflowVersions = ({ objectMetadataItem, diff --git a/packages/twenty-front/src/modules/workflow/hooks/useDeleteWorkflowVersionStep.ts b/packages/twenty-front/src/modules/workflow/hooks/useDeleteWorkflowVersionStep.ts index 75a0717939b7..8ec72a7f6707 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useDeleteWorkflowVersionStep.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useDeleteWorkflowVersionStep.ts @@ -1,18 +1,18 @@ +import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; +import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; +import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; +import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; +import { DELETE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/deleteWorkflowVersionStep'; +import { WorkflowVersion } from '@/workflow/types/Workflow'; import { useApolloClient, useMutation } from '@apollo/client'; +import { isDefined } from 'twenty-shared'; import { + DeleteWorkflowVersionStepInput, DeleteWorkflowVersionStepMutation, DeleteWorkflowVersionStepMutationVariables, - DeleteWorkflowVersionStepInput, WorkflowAction, } from '~/generated/graphql'; -import { DELETE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/deleteWorkflowVersionStep'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; -import { isDefined } from 'twenty-ui'; -import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; -import { WorkflowVersion } from '@/workflow/types/Workflow'; export const useDeleteWorkflowVersionStep = () => { const apolloClient = useApolloClient(); diff --git a/packages/twenty-front/src/modules/workflow/hooks/useWorkflowWithCurrentVersion.ts b/packages/twenty-front/src/modules/workflow/hooks/useWorkflowWithCurrentVersion.ts index b67e8f874073..859a0a9855cb 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useWorkflowWithCurrentVersion.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useWorkflowWithCurrentVersion.ts @@ -5,7 +5,7 @@ import { WorkflowWithCurrentVersion, } from '@/workflow/types/Workflow'; import { useMemo } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useWorkflowWithCurrentVersion = ( workflowId: string | undefined, diff --git a/packages/twenty-front/src/modules/workflow/states/serverlessFunctionTestDataFamilyState.ts b/packages/twenty-front/src/modules/workflow/states/serverlessFunctionTestDataFamilyState.ts index 4f297fa74bef..65050a520540 100644 --- a/packages/twenty-front/src/modules/workflow/states/serverlessFunctionTestDataFamilyState.ts +++ b/packages/twenty-front/src/modules/workflow/states/serverlessFunctionTestDataFamilyState.ts @@ -13,7 +13,10 @@ export type ServerlessFunctionTestData = { height: number; }; -export const DEFAULT_OUTPUT_VALUE = 'Enter an input above then press "Test"'; +export const DEFAULT_OUTPUT_VALUE = { + data: 'Enter an input above then press "Test"', + status: ServerlessFunctionExecutionStatus.IDLE, +}; export const serverlessFunctionTestDataFamilyState = createFamilyState< ServerlessFunctionTestData, @@ -24,6 +27,6 @@ export const serverlessFunctionTestDataFamilyState = createFamilyState< language: 'plaintext', height: 64, input: {}, - output: { data: DEFAULT_OUTPUT_VALUE }, + output: DEFAULT_OUTPUT_VALUE, }, }); diff --git a/packages/twenty-front/src/modules/workflow/utils/assertWorkflowWithCurrentVersionIsDefined.ts b/packages/twenty-front/src/modules/workflow/utils/assertWorkflowWithCurrentVersionIsDefined.ts index c7849dd6cbd4..dafcaa157086 100644 --- a/packages/twenty-front/src/modules/workflow/utils/assertWorkflowWithCurrentVersionIsDefined.ts +++ b/packages/twenty-front/src/modules/workflow/utils/assertWorkflowWithCurrentVersionIsDefined.ts @@ -3,7 +3,7 @@ import { WorkflowVersion, WorkflowWithCurrentVersion, } from '@/workflow/types/Workflow'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; // eslint-disable-next-line prefer-arrow/prefer-arrow-functions export function assertWorkflowWithCurrentVersionIsDefined( diff --git a/packages/twenty-front/src/modules/workflow/utils/findStepPosition.ts b/packages/twenty-front/src/modules/workflow/utils/findStepPosition.ts index d609c3931be3..306c70b16d97 100644 --- a/packages/twenty-front/src/modules/workflow/utils/findStepPosition.ts +++ b/packages/twenty-front/src/modules/workflow/utils/findStepPosition.ts @@ -1,6 +1,6 @@ import { WorkflowStep } from '@/workflow/types/Workflow'; import { TRIGGER_STEP_ID } from '@/workflow/workflow-trigger/constants/TriggerStepId'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; /** * This function returns the reference of the array where the step should be positioned diff --git a/packages/twenty-front/src/modules/workflow/utils/getStepDefinitionOrThrow.ts b/packages/twenty-front/src/modules/workflow/utils/getStepDefinitionOrThrow.ts index e134cfb8e5ab..74fe0bbea004 100644 --- a/packages/twenty-front/src/modules/workflow/utils/getStepDefinitionOrThrow.ts +++ b/packages/twenty-front/src/modules/workflow/utils/getStepDefinitionOrThrow.ts @@ -1,7 +1,7 @@ import { WorkflowVersion } from '@/workflow/types/Workflow'; import { findStepPosition } from '@/workflow/utils/findStepPosition'; import { TRIGGER_STEP_ID } from '@/workflow/workflow-trigger/constants/TriggerStepId'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const getStepDefinitionOrThrow = ({ stepId, diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramBaseStepNode.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramBaseStepNode.tsx index 42ed618674c8..7d5b510a4797 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramBaseStepNode.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramBaseStepNode.tsx @@ -7,8 +7,8 @@ import { WorkflowDiagramStepNodeData } from '@/workflow/workflow-diagram/types/W import styled from '@emotion/styled'; import { Handle, Position } from '@xyflow/react'; import React from 'react'; -import { capitalize } from 'twenty-shared'; -import { isDefined, Label, OverflowingTextWithTooltip } from 'twenty-ui'; +import { capitalize, isDefined } from 'twenty-shared'; +import { Label, OverflowingTextWithTooltip } from 'twenty-ui'; type Variant = 'placeholder'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx index 0594b3e4eb99..79854ba9ec5e 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasBase.tsx @@ -29,7 +29,8 @@ import { import '@xyflow/react/dist/style.css'; import React, { useEffect, useMemo, useRef } from 'react'; import { useRecoilValue, useSetRecoilState } from 'recoil'; -import { THEME_COMMON, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { THEME_COMMON } from 'twenty-ui'; const StyledResetReactflowStyles = styled.div` height: 100%; diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditableEffect.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditableEffect.tsx index 539e53deed27..4855c93b6eff 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditableEffect.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditableEffect.tsx @@ -17,7 +17,8 @@ import { useLingui } from '@lingui/react/macro'; import { OnSelectionChangeParams, useOnSelectionChange } from '@xyflow/react'; import { useCallback } from 'react'; import { useSetRecoilState } from 'recoil'; -import { IconBolt, isDefined, useIcons } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconBolt, useIcons } from 'twenty-ui'; export const WorkflowDiagramCanvasEditableEffect = () => { const { t } = useLingui(); diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasReadonlyEffect.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasReadonlyEffect.tsx index 2dfeeaa5eeee..59c19f4f0268 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasReadonlyEffect.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramCanvasReadonlyEffect.tsx @@ -14,7 +14,8 @@ import { getWorkflowNodeIconKey } from '@/workflow/workflow-diagram/utils/getWor import { OnSelectionChangeParams, useOnSelectionChange } from '@xyflow/react'; import { useCallback } from 'react'; import { useSetRecoilState } from 'recoil'; -import { isDefined, useIcons } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { useIcons } from 'twenty-ui'; export const WorkflowDiagramCanvasReadonlyEffect = () => { const { getIcon } = useIcons(); diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramEffect.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramEffect.tsx index bfee6650ce2b..4dfbd4ad7d70 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramEffect.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowDiagramEffect.tsx @@ -11,7 +11,7 @@ import { getWorkflowVersionDiagram } from '@/workflow/workflow-diagram/utils/get import { mergeWorkflowDiagrams } from '@/workflow/workflow-diagram/utils/mergeWorkflowDiagrams'; import { useEffect } from 'react'; import { useRecoilCallback, useSetRecoilState } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const WorkflowDiagramEffect = ({ workflowWithCurrentVersion, diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVersionVisualizer.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVersionVisualizer.tsx index e34bf67390e4..c62c8a2351c9 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVersionVisualizer.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVersionVisualizer.tsx @@ -1,7 +1,7 @@ import { useWorkflowVersion } from '@/workflow/hooks/useWorkflowVersion'; import { WorkflowDiagramCanvasReadonly } from '@/workflow/workflow-diagram/components/WorkflowDiagramCanvasReadonly'; import '@xyflow/react/dist/style.css'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const WorkflowVersionVisualizer = ({ workflowVersionId, diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVersionVisualizerEffect.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVersionVisualizerEffect.tsx index 1df237c3d057..95da1b18703f 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVersionVisualizerEffect.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVersionVisualizerEffect.tsx @@ -4,7 +4,7 @@ import { workflowDiagramState } from '@/workflow/workflow-diagram/states/workflo import { getWorkflowVersionDiagram } from '@/workflow/workflow-diagram/utils/getWorkflowVersionDiagram'; import { useEffect } from 'react'; import { useSetRecoilState } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const WorkflowVersionVisualizerEffect = ({ workflowVersionId, diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVisualizer.tsx b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVisualizer.tsx index b717fb4b2756..5cb00f94fa5d 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVisualizer.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/components/WorkflowVisualizer.tsx @@ -3,7 +3,7 @@ import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithC import { WorkflowDiagramCanvasEditable } from '@/workflow/workflow-diagram/components/WorkflowDiagramCanvasEditable'; import { WorkflowDiagramEffect } from '@/workflow/workflow-diagram/components/WorkflowDiagramEffect'; import '@xyflow/react/dist/style.css'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const WorkflowVisualizer = ({ targetableObject, diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/hooks/useTriggerNodeSelection.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/hooks/useTriggerNodeSelection.ts index 6168eec8e362..d1d6de80462f 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/hooks/useTriggerNodeSelection.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/hooks/useTriggerNodeSelection.ts @@ -6,7 +6,7 @@ import { import { useReactFlow } from '@xyflow/react'; import { useEffect } from 'react'; import { useRecoilState } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useTriggerNodeSelection = () => { const reactflow = useReactFlow<WorkflowDiagramNode, WorkflowDiagramEdge>(); diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowDiagram.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowDiagram.ts index 364b511eac24..c60eeb9f3b42 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowDiagram.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/generateWorkflowDiagram.ts @@ -11,7 +11,7 @@ import { DATABASE_TRIGGER_TYPES } from '@/workflow/workflow-trigger/constants/Da import { TRIGGER_STEP_ID } from '@/workflow/workflow-trigger/constants/TriggerStepId'; import { getTriggerIcon } from '@/workflow/workflow-trigger/utils/getTriggerIcon'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { v4 } from 'uuid'; export const generateWorkflowDiagram = ({ diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/getWorkflowVersionDiagram.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/getWorkflowVersionDiagram.ts index 579c7891defc..31e4cd981b4f 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/getWorkflowVersionDiagram.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/getWorkflowVersionDiagram.ts @@ -1,7 +1,7 @@ import { WorkflowVersion } from '@/workflow/types/Workflow'; import { WorkflowDiagram } from '@/workflow/workflow-diagram/types/WorkflowDiagram'; import { generateWorkflowDiagram } from '@/workflow/workflow-diagram/utils/generateWorkflowDiagram'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; const EMPTY_DIAGRAM: WorkflowDiagram = { nodes: [], diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowEditStep.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowEditStep.tsx index 4e71b7dd123f..f64d4342c14b 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowEditStep.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowEditStep.tsx @@ -2,7 +2,7 @@ import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithC import { workflowIdState } from '@/workflow/states/workflowIdState'; import { RightDrawerWorkflowEditStepContent } from '@/workflow/workflow-steps/components/RightDrawerWorkflowEditStepContent'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const RightDrawerWorkflowEditStep = () => { const workflowId = useRecoilValue(workflowIdState); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowEditStepContent.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowEditStepContent.tsx index 0dbda05395d6..37aadc98d51b 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowEditStepContent.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowEditStepContent.tsx @@ -4,7 +4,7 @@ import { WorkflowStepDetail } from '@/workflow/workflow-steps/components/Workflo import { useUpdateStep } from '@/workflow/workflow-steps/hooks/useUpdateStep'; import { useUpdateWorkflowVersionTrigger } from '@/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const RightDrawerWorkflowEditStepContent = ({ workflow, diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowViewStep.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowViewStep.tsx index 896c071172fa..c1f6540cb9cd 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowViewStep.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowViewStep.tsx @@ -2,7 +2,7 @@ import { useWorkflowVersion } from '@/workflow/hooks/useWorkflowVersion'; import { workflowVersionIdState } from '@/workflow/states/workflowVersionIdState'; import { RightDrawerWorkflowViewStepContent } from '@/workflow/workflow-steps/components/RightDrawerWorkflowViewStepContent'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const RightDrawerWorkflowViewStep = () => { const workflowVersionId = useRecoilValue(workflowVersionIdState); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowViewStepContent.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowViewStepContent.tsx index 1e54e35f6aee..c7a635664530 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowViewStepContent.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/components/RightDrawerWorkflowViewStepContent.tsx @@ -2,7 +2,7 @@ import { WorkflowVersion } from '@/workflow/types/Workflow'; import { workflowSelectedNodeState } from '@/workflow/workflow-diagram/states/workflowSelectedNodeState'; import { WorkflowStepDetail } from '@/workflow/workflow-steps/components/WorkflowStepDetail'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const RightDrawerWorkflowViewStepContent = ({ workflowVersion, diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/components/WorkflowStepDetail.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/components/WorkflowStepDetail.tsx index 04ef74d3100d..eee236a821c0 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/components/WorkflowStepDetail.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/components/WorkflowStepDetail.tsx @@ -12,7 +12,7 @@ import { WorkflowEditActionFormUpdateRecord } from '@/workflow/workflow-steps/wo import { WorkflowEditTriggerDatabaseEventForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm'; import { WorkflowEditTriggerManualForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerManualForm'; import { Suspense, lazy } from 'react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { RightDrawerSkeletonLoader } from '~/loading/components/RightDrawerSkeletonLoader'; const WorkflowEditActionFormServerlessFunction = lazy(() => diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateStep.ts index f65967bb2fe7..2da43ab34c7a 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateStep.ts @@ -11,7 +11,8 @@ import { getWorkflowNodeIconKey } from '@/workflow/workflow-diagram/utils/getWor import { useCreateWorkflowVersionStep } from '@/workflow/workflow-steps/hooks/useCreateWorkflowVersionStep'; import { workflowCreateStepFromParentStepIdState } from '@/workflow/workflow-steps/states/workflowCreateStepFromParentStepIdState'; import { useRecoilValue, useSetRecoilState } from 'recoil'; -import { isDefined, useIcons } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { useIcons } from 'twenty-ui'; export const useCreateStep = ({ workflow, diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionStep.ts index 0662c192ead3..ffa71ff8cacb 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionStep.ts @@ -1,17 +1,17 @@ +import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; +import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; +import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; +import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; +import { CREATE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/createWorkflowVersionStep'; +import { WorkflowVersion } from '@/workflow/types/Workflow'; import { useApolloClient, useMutation } from '@apollo/client'; +import { isDefined } from 'twenty-shared'; import { + CreateWorkflowVersionStepInput, CreateWorkflowVersionStepMutation, CreateWorkflowVersionStepMutationVariables, - CreateWorkflowVersionStepInput, } from '~/generated/graphql'; -import { CREATE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/createWorkflowVersionStep'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; -import { isDefined } from 'twenty-ui'; -import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; -import { WorkflowVersion } from '@/workflow/types/Workflow'; export const useCreateWorkflowVersionStep = () => { const apolloClient = useApolloClient(); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateStep.ts index b24d7e24622e..c81888a6f432 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateStep.ts @@ -4,7 +4,7 @@ import { WorkflowWithCurrentVersion, } from '@/workflow/types/Workflow'; import { useUpdateWorkflowVersionStep } from '@/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const useUpdateStep = ({ workflow, diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts index 543d99f8617a..4a2e48dc92d7 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts @@ -1,18 +1,18 @@ +import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; +import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; +import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; +import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; +import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; +import { UPDATE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/updateWorkflowVersionStep'; +import { WorkflowVersion } from '@/workflow/types/Workflow'; import { useApolloClient, useMutation } from '@apollo/client'; +import { isDefined } from 'twenty-shared'; import { UpdateWorkflowVersionStepInput, UpdateWorkflowVersionStepMutation, UpdateWorkflowVersionStepMutationVariables, WorkflowAction, } from '~/generated/graphql'; -import { UPDATE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/updateWorkflowVersionStep'; -import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache'; -import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; -import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; -import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; -import { isDefined } from 'twenty-ui'; -import { WorkflowVersion } from '@/workflow/types/Workflow'; export const useUpdateWorkflowVersionStep = () => { const apolloClient = useApolloClient(); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/RightDrawerWorkflowSelectAction.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/RightDrawerWorkflowSelectAction.tsx index 39c009d826e6..fe750afc085e 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/RightDrawerWorkflowSelectAction.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/RightDrawerWorkflowSelectAction.tsx @@ -2,7 +2,7 @@ import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithC import { workflowIdState } from '@/workflow/states/workflowIdState'; import { RightDrawerWorkflowSelectActionContent } from '@/workflow/workflow-steps/workflow-actions/components/RightDrawerWorkflowSelectActionContent'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const RightDrawerWorkflowSelectAction = () => { const workflowId = useRecoilValue(workflowIdState); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormCreateRecord.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormCreateRecord.tsx index cb47cb32217b..768f6f8b9e94 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormCreateRecord.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormCreateRecord.tsx @@ -11,7 +11,8 @@ import { getActionIcon } from '@/workflow/workflow-steps/workflow-actions/utils/ import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components/WorkflowVariablePicker'; import { useTheme } from '@emotion/react'; import { useEffect, useState } from 'react'; -import { HorizontalSeparator, isDefined, useIcons } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { HorizontalSeparator, useIcons } from 'twenty-ui'; import { JsonValue } from 'type-fest'; import { useDebouncedCallback } from 'use-debounce'; import { FieldMetadataType } from '~/generated/graphql'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormDeleteRecord.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormDeleteRecord.tsx index 2820dfbee6e0..5f2a8cdd95d4 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormDeleteRecord.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormDeleteRecord.tsx @@ -5,10 +5,11 @@ import { WorkflowStepHeader } from '@/workflow/workflow-steps/components/Workflo import { WorkflowSingleRecordPicker } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowSingleRecordPicker'; import { useTheme } from '@emotion/react'; import { useEffect, useState } from 'react'; -import { HorizontalSeparator, isDefined, useIcons } from 'twenty-ui'; import { WorkflowStepBody } from '@/workflow/workflow-steps/components/WorkflowStepBody'; import { getActionIcon } from '@/workflow/workflow-steps/workflow-actions/utils/getActionIcon'; +import { isDefined } from 'twenty-shared'; +import { HorizontalSeparator, useIcons } from 'twenty-ui'; import { JsonValue } from 'type-fest'; import { useDebouncedCallback } from 'use-debounce'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormSendEmail.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormSendEmail.tsx index 4788885db178..e8854714563a 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormSendEmail.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormSendEmail.tsx @@ -14,7 +14,8 @@ import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components import { useTheme } from '@emotion/react'; import { useEffect, useState } from 'react'; import { useRecoilValue } from 'recoil'; -import { IconPlus, isDefined, useIcons } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconPlus, useIcons } from 'twenty-ui'; import { JsonValue } from 'type-fest'; import { useDebouncedCallback } from 'use-debounce'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormServerlessFunction.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormServerlessFunction.tsx index 6ad61b5c507c..d3fa8495d57e 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormServerlessFunction.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormServerlessFunction.tsx @@ -33,13 +33,8 @@ import { editor } from 'monaco-editor'; import { AutoTypings } from 'monaco-editor-auto-typings'; import { useEffect, useState } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; -import { - CodeEditor, - IconCode, - IconPlayerPlay, - isDefined, - useIcons, -} from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { CodeEditor, IconCode, IconPlayerPlay, useIcons } from 'twenty-ui'; import { useDebouncedCallback } from 'use-debounce'; const StyledContainer = styled.div` @@ -86,12 +81,14 @@ export const WorkflowEditActionFormServerlessFunction = ({ }: WorkflowEditActionFormServerlessFunctionProps) => { const theme = useTheme(); const { getIcon } = useIcons(); + const [shouldBuildServerlessFunction, setShouldBuildServerlessFunction] = + useState(false); const serverlessFunctionId = action.settings.input.serverlessFunctionId; const serverlessFunctionVersion = action.settings.input.serverlessFunctionVersion; const tabListId = `${WORKFLOW_SERVERLESS_FUNCTION_TAB_LIST_COMPONENT_ID}_${serverlessFunctionId}`; - const { activeTabId, setActiveTabId } = useTabList(tabListId); - const { updateOneServerlessFunction, isReady } = + const { activeTabId } = useTabList(tabListId); + const { updateOneServerlessFunction } = useUpdateOneServerlessFunction(serverlessFunctionId); const { getUpdatableWorkflowVersion } = useGetUpdatableWorkflowVersion(); @@ -126,13 +123,14 @@ export const WorkflowEditActionFormServerlessFunction = ({ }); }; - const { testServerlessFunction } = useTestServerlessFunction({ - serverlessFunctionId, - serverlessFunctionVersion, - callback: updateOutputSchemaFromTestResult, - }); + const { testServerlessFunction, isTesting, isBuilding } = + useTestServerlessFunction({ + serverlessFunctionId, + callback: updateOutputSchemaFromTestResult, + }); const handleSave = useDebouncedCallback(async () => { + setShouldBuildServerlessFunction(true); await updateOneServerlessFunction({ name: formValues.name, description: formValues.description, @@ -231,8 +229,10 @@ export const WorkflowEditActionFormServerlessFunction = ({ }; const handleRunFunction = async () => { - await testServerlessFunction(); - setActiveTabId('test'); + if (!isTesting) { + await testServerlessFunction(shouldBuildServerlessFunction); + setShouldBuildServerlessFunction(false); + } }; const handleEditorDidMount = async ( @@ -313,7 +313,6 @@ export const WorkflowEditActionFormServerlessFunction = ({ readonly={actionOptions.readonly} /> <StyledCodeEditorContainer> - <InputLabel>Code {!isReady && <span>•</span>}</InputLabel> <CodeEditor height={343} value={formValues.code?.[INDEX_FILE_PATH]} @@ -339,6 +338,8 @@ export const WorkflowEditActionFormServerlessFunction = ({ <InputLabel>Result</InputLabel> <ServerlessFunctionExecutionResult serverlessFunctionTestData={serverlessFunctionTestData} + isBuilding={isBuilding} + isTesting={isTesting} /> </StyledCodeEditorContainer> </> @@ -347,7 +348,11 @@ export const WorkflowEditActionFormServerlessFunction = ({ {activeTabId === 'test' && ( <RightDrawerFooter actions={[ - <CmdEnterActionButton title="Test" onClick={handleRunFunction} />, + <CmdEnterActionButton + title="Test" + onClick={handleRunFunction} + disabled={isTesting || isBuilding} + />, ]} /> )} diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormUpdateRecord.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormUpdateRecord.tsx index 5ef1f57654cb..422f6bdfafca 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormUpdateRecord.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFormUpdateRecord.tsx @@ -3,7 +3,6 @@ import { Select, SelectOption } from '@/ui/input/components/Select'; import { WorkflowUpdateRecordAction } from '@/workflow/types/Workflow'; import { useTheme } from '@emotion/react'; import { useEffect, useState } from 'react'; -import { HorizontalSeparator, isDefined, useIcons } from 'twenty-ui'; import { formatFieldMetadataItemAsFieldDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition'; import { FormFieldInput } from '@/object-record/record-field/components/FormFieldInput'; @@ -13,6 +12,8 @@ import { WorkflowStepHeader } from '@/workflow/workflow-steps/components/Workflo import { WorkflowSingleRecordPicker } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowSingleRecordPicker'; import { getActionIcon } from '@/workflow/workflow-steps/workflow-actions/utils/getActionIcon'; import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components/WorkflowVariablePicker'; +import { isDefined } from 'twenty-shared'; +import { HorizontalSeparator, useIcons } from 'twenty-ui'; import { JsonValue } from 'type-fest'; import { useDebouncedCallback } from 'use-debounce'; import { FieldMetadataType } from '~/generated-metadata/graphql'; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowSingleRecordPicker.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowSingleRecordPicker.tsx index 57c7bec9e968..e6da767088fc 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowSingleRecordPicker.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowSingleRecordPicker.tsx @@ -1,10 +1,3 @@ -import { - IconChevronDown, - IconForbid, - isDefined, - LightIconButton, -} from 'twenty-ui'; - import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord'; import { FormFieldInputContainer } from '@/object-record/record-field/form-types/components/FormFieldInputContainer'; import { FormFieldInputInputContainer } from '@/object-record/record-field/form-types/components/FormFieldInputInputContainer'; @@ -23,6 +16,8 @@ import { WorkflowVariablesDropdown } from '@/workflow/workflow-variables/compone import { css } from '@emotion/react'; import styled from '@emotion/styled'; import { useCallback } from 'react'; +import { isDefined } from 'twenty-shared'; +import { IconChevronDown, IconForbid, LightIconButton } from 'twenty-ui'; import { isValidUuid } from '~/utils/isValidUuid'; const StyledFormSelectContainer = styled(FormFieldInputInputContainer)` diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/utils/getWrongExportedFunctionMarkers.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/utils/getWrongExportedFunctionMarkers.ts index 525914104fe2..dbedb096b6f4 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/utils/getWrongExportedFunctionMarkers.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/utils/getWrongExportedFunctionMarkers.ts @@ -1,4 +1,4 @@ -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; const getSubstringCoordinate = ( text: string, diff --git a/packages/twenty-front/src/modules/workflow/workflow-trigger/components/RightDrawerWorkflowSelectTriggerType.tsx b/packages/twenty-front/src/modules/workflow/workflow-trigger/components/RightDrawerWorkflowSelectTriggerType.tsx index 305d7f230770..5c2f8a8f88f9 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-trigger/components/RightDrawerWorkflowSelectTriggerType.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-trigger/components/RightDrawerWorkflowSelectTriggerType.tsx @@ -2,7 +2,7 @@ import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithC import { workflowIdState } from '@/workflow/states/workflowIdState'; import { RightDrawerWorkflowSelectTriggerTypeContent } from '@/workflow/workflow-trigger/components/RightDrawerWorkflowSelectTriggerTypeContent'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const RightDrawerWorkflowSelectTriggerType = () => { const workflowId = useRecoilValue(workflowIdState); diff --git a/packages/twenty-front/src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx b/packages/twenty-front/src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx index c0016dadad54..cc70c4a5b1e6 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx @@ -7,7 +7,8 @@ import { WorkflowStepHeader } from '@/workflow/workflow-steps/components/Workflo import { getTriggerIcon } from '@/workflow/workflow-trigger/utils/getTriggerIcon'; import { getTriggerDefaultLabel } from '@/workflow/workflow-trigger/utils/getTriggerLabel'; import { useTheme } from '@emotion/react'; -import { isDefined, useIcons } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { useIcons } from 'twenty-ui'; type WorkflowEditTriggerDatabaseEventFormProps = { trigger: WorkflowDatabaseEventTrigger; diff --git a/packages/twenty-front/src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerManualForm.tsx b/packages/twenty-front/src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerManualForm.tsx index 291b230aff93..da4499094477 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerManualForm.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerManualForm.tsx @@ -10,7 +10,8 @@ import { MANUAL_TRIGGER_AVAILABILITY_OPTIONS } from '@/workflow/workflow-trigger import { getManualTriggerDefaultSettings } from '@/workflow/workflow-trigger/utils/getManualTriggerDefaultSettings'; import { getTriggerIcon } from '@/workflow/workflow-trigger/utils/getTriggerIcon'; import { useTheme } from '@emotion/react'; -import { isDefined, useIcons } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { useIcons } from 'twenty-ui'; type WorkflowEditTriggerManualFormProps = { trigger: WorkflowManualTrigger; diff --git a/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts b/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts index 783bad350b5a..15ffb01de815 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-trigger/hooks/useUpdateWorkflowVersionTrigger.ts @@ -1,13 +1,13 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; +import { useComputeStepOutputSchema } from '@/workflow/hooks/useComputeStepOutputSchema'; +import { useGetUpdatableWorkflowVersion } from '@/workflow/hooks/useGetUpdatableWorkflowVersion'; import { WorkflowTrigger, WorkflowVersion, WorkflowWithCurrentVersion, } from '@/workflow/types/Workflow'; -import { isDefined } from 'twenty-ui'; -import { useComputeStepOutputSchema } from '@/workflow/hooks/useComputeStepOutputSchema'; -import { useGetUpdatableWorkflowVersion } from '@/workflow/hooks/useGetUpdatableWorkflowVersion'; +import { isDefined } from 'twenty-shared'; export const useUpdateWorkflowVersionTrigger = ({ workflow, diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowTextEditorVariableChip.tsx b/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowTextEditorVariableChip.tsx index 885f9f5dd0e6..bf4fa8a271c8 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowTextEditorVariableChip.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowTextEditorVariableChip.tsx @@ -12,6 +12,7 @@ type WorkflowTextEditorVariableChipProps = NodeViewProps; export const WorkflowTextEditorVariableChip = ({ deleteNode, node, + editor, }: WorkflowTextEditorVariableChipProps) => { const attrs = node.attrs as { variable: string; @@ -19,7 +20,10 @@ export const WorkflowTextEditorVariableChip = ({ return ( <NodeViewWrapper as={StyledWrapper} style={{ whiteSpace: 'nowrap' }}> - <VariableChip rawVariableName={attrs.variable} onRemove={deleteNode} /> + <VariableChip + rawVariableName={attrs.variable} + onRemove={editor.isEditable ? deleteNode : undefined} + /> </NodeViewWrapper> ); }; diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowVariablesDropdown.tsx b/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowVariablesDropdown.tsx index 300da804092b..425e7d171c5a 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowVariablesDropdown.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowVariablesDropdown.tsx @@ -11,7 +11,8 @@ import { StepOutputSchema } from '@/workflow/workflow-variables/types/StepOutput import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; import { useState } from 'react'; -import { IconVariablePlus, isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; +import { IconVariablePlus } from 'twenty-ui'; const StyledDropdownVariableButtonContainer = styled( StyledDropdownButtonContainer, diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowVariablesDropdownFieldItems.tsx b/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowVariablesDropdownFieldItems.tsx index 8026fdf62ff4..5e0e92383c37 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowVariablesDropdownFieldItems.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/components/WorkflowVariablesDropdownFieldItems.tsx @@ -19,9 +19,9 @@ import { getStepHeaderLabel } from '@/workflow/workflow-variables/utils/getStepH import { isLinkOutputSchema } from '@/workflow/workflow-variables/utils/isLinkOutputSchema'; import { useState } from 'react'; import { useSetRecoilState } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { IconChevronLeft, - isDefined, MenuItemSelect, OverflowingTextWithTooltip, useIcons, diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/hooks/useAvailableVariablesInWorkflowStep.ts b/packages/twenty-front/src/modules/workflow/workflow-variables/hooks/useAvailableVariablesInWorkflowStep.ts index bdd870f7a0bf..233cfa25c53d 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/hooks/useAvailableVariablesInWorkflowStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/hooks/useAvailableVariablesInWorkflowStep.ts @@ -13,7 +13,7 @@ import { filterOutputSchema } from '@/workflow/workflow-variables/utils/filterOu import { getTriggerStepName } from '@/workflow/workflow-variables/utils/getTriggerStepName'; import isEmpty from 'lodash.isempty'; import { useRecoilValue } from 'recoil'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { isEmptyObject } from '~/utils/isEmptyObject'; export const useAvailableVariablesInWorkflowStep = ({ diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/__tests__/getInitialEditorContent.test.ts b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/__tests__/getInitialEditorContent.test.ts new file mode 100644 index 000000000000..88000ea27fe3 --- /dev/null +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/__tests__/getInitialEditorContent.test.ts @@ -0,0 +1,306 @@ +import { getInitialEditorContent } from '../getInitialEditorContent'; + +describe('getInitialEditorContent', () => { + it('should handle single line text', () => { + expect(getInitialEditorContent('Hello world')).toMatchInlineSnapshot(` +{ + "content": [ + { + "content": [ + { + "text": "Hello world", + "type": "text", + }, + ], + "type": "paragraph", + }, + ], + "type": "doc", +} +`); + }); + + it('should handle text with newlines', () => { + expect(getInitialEditorContent('Line 1\nLine 2')).toMatchInlineSnapshot(` +{ + "content": [ + { + "content": [ + { + "text": "Line 1", + "type": "text", + }, + { + "type": "hardBreak", + }, + { + "text": "Line 2", + "type": "text", + }, + ], + "type": "paragraph", + }, + ], + "type": "doc", +} +`); + }); + + it('should handle single variable', () => { + expect(getInitialEditorContent('{{user.name}}')).toMatchInlineSnapshot(` +{ + "content": [ + { + "content": [ + { + "attrs": { + "variable": "{{user.name}}", + }, + "type": "variableTag", + }, + ], + "type": "paragraph", + }, + ], + "type": "doc", +} +`); + }); + + it('should handle text with variables', () => { + expect(getInitialEditorContent('Hello {{user.name}}, welcome!')) + .toMatchInlineSnapshot(` +{ + "content": [ + { + "content": [ + { + "text": "Hello ", + "type": "text", + }, + { + "attrs": { + "variable": "{{user.name}}", + }, + "type": "variableTag", + }, + { + "text": ", welcome!", + "type": "text", + }, + ], + "type": "paragraph", + }, + ], + "type": "doc", +} +`); + }); + + it('should handle text with multiple variables', () => { + expect( + getInitialEditorContent('Hello {{user.firstName}} {{user.lastName}}!'), + ).toMatchInlineSnapshot(` +{ + "content": [ + { + "content": [ + { + "text": "Hello ", + "type": "text", + }, + { + "attrs": { + "variable": "{{user.firstName}}", + }, + "type": "variableTag", + }, + { + "text": " ", + "type": "text", + }, + { + "attrs": { + "variable": "{{user.lastName}}", + }, + "type": "variableTag", + }, + { + "text": "!", + "type": "text", + }, + ], + "type": "paragraph", + }, + ], + "type": "doc", +} +`); + }); + + it('should handle newlines with variables', () => { + expect( + getInitialEditorContent('Hello {{user.name}}\nWelcome to {{app.name}}'), + ).toMatchInlineSnapshot(` +{ + "content": [ + { + "content": [ + { + "text": "Hello ", + "type": "text", + }, + { + "attrs": { + "variable": "{{user.name}}", + }, + "type": "variableTag", + }, + { + "type": "hardBreak", + }, + { + "text": "Welcome to ", + "type": "text", + }, + { + "attrs": { + "variable": "{{app.name}}", + }, + "type": "variableTag", + }, + ], + "type": "paragraph", + }, + ], + "type": "doc", +} +`); + }); + + it('should handle empty strings', () => { + expect(getInitialEditorContent('')).toMatchInlineSnapshot(` +{ + "content": [ + { + "content": [], + "type": "paragraph", + }, + ], + "type": "doc", +} +`); + }); + + it('should handle multiple empty parts', () => { + expect(getInitialEditorContent('Hello {{user.name}} !')) + .toMatchInlineSnapshot(` +{ + "content": [ + { + "content": [ + { + "text": "Hello ", + "type": "text", + }, + { + "attrs": { + "variable": "{{user.name}}", + }, + "type": "variableTag", + }, + { + "text": " !", + "type": "text", + }, + ], + "type": "paragraph", + }, + ], + "type": "doc", +} +`); + }); + + it('should handle multiple newlines', () => { + expect(getInitialEditorContent('Line1\n\nLine3')).toMatchInlineSnapshot(` +{ + "content": [ + { + "content": [ + { + "text": "Line1", + "type": "text", + }, + { + "type": "hardBreak", + }, + { + "type": "hardBreak", + }, + { + "text": "Line3", + "type": "text", + }, + ], + "type": "paragraph", + }, + ], + "type": "doc", +} +`); + }); + + it('should ignore malformed variable tags', () => { + expect( + getInitialEditorContent('Hello {{user.name}} and {{invalid}more}} text'), + ).toMatchInlineSnapshot(` +{ + "content": [ + { + "content": [ + { + "text": "Hello ", + "type": "text", + }, + { + "attrs": { + "variable": "{{user.name}}", + }, + "type": "variableTag", + }, + { + "text": " and {{invalid}more}} text", + "type": "text", + }, + ], + "type": "paragraph", + }, + ], + "type": "doc", +} +`); + }); + + it('should handle trailing newlines', () => { + expect(getInitialEditorContent('Hello\n')).toMatchInlineSnapshot(` +{ + "content": [ + { + "content": [ + { + "text": "Hello", + "type": "text", + }, + { + "type": "hardBreak", + }, + ], + "type": "paragraph", + }, + ], + "type": "doc", +} +`); + }); +}); diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/__tests__/initializeEditorContent.test.ts b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/__tests__/initializeEditorContent.test.ts deleted file mode 100644 index e9056342c0e1..000000000000 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/__tests__/initializeEditorContent.test.ts +++ /dev/null @@ -1,195 +0,0 @@ -import { Editor } from '@tiptap/react'; -import { initializeEditorContent } from '../initializeEditorContent'; - -describe('initializeEditorContent', () => { - let mockEditor: Editor; - - beforeEach(() => { - mockEditor = { - commands: { - insertContent: jest.fn(), - }, - } as unknown as Editor; - }); - - it('should handle single line text', () => { - initializeEditorContent(mockEditor, 'Hello world'); - - expect(mockEditor.commands.insertContent).toHaveBeenCalledTimes(1); - expect(mockEditor.commands.insertContent).toHaveBeenCalledWith( - 'Hello world', - ); - }); - - it('should handle text with newlines', () => { - initializeEditorContent(mockEditor, 'Line 1\nLine 2'); - - expect(mockEditor.commands.insertContent).toHaveBeenCalledTimes(3); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 1, - 'Line 1', - ); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(2, { - type: 'hardBreak', - }); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 3, - 'Line 2', - ); - }); - - it('should handle single variable', () => { - initializeEditorContent(mockEditor, '{{user.name}}'); - - expect(mockEditor.commands.insertContent).toHaveBeenCalledTimes(1); - expect(mockEditor.commands.insertContent).toHaveBeenCalledWith({ - type: 'variableTag', - attrs: { variable: '{{user.name}}' }, - }); - }); - - it('should handle text with variables', () => { - initializeEditorContent(mockEditor, 'Hello {{user.name}}, welcome!'); - - expect(mockEditor.commands.insertContent).toHaveBeenCalledTimes(3); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 1, - 'Hello ', - ); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(2, { - type: 'variableTag', - attrs: { variable: '{{user.name}}' }, - }); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 3, - ', welcome!', - ); - }); - - it('should handle text with multiple variables', () => { - initializeEditorContent( - mockEditor, - 'Hello {{user.firstName}} {{user.lastName}}!', - ); - - expect(mockEditor.commands.insertContent).toHaveBeenCalledTimes(5); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 1, - 'Hello ', - ); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(2, { - type: 'variableTag', - attrs: { variable: '{{user.firstName}}' }, - }); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(3, ' '); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(4, { - type: 'variableTag', - attrs: { variable: '{{user.lastName}}' }, - }); - }); - - it('should handle newlines with variables', () => { - initializeEditorContent( - mockEditor, - 'Hello {{user.name}}\nWelcome to {{app.name}}', - ); - - expect(mockEditor.commands.insertContent).toHaveBeenCalledTimes(5); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 1, - 'Hello ', - ); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(2, { - type: 'variableTag', - attrs: { variable: '{{user.name}}' }, - }); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(3, { - type: 'hardBreak', - }); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 4, - 'Welcome to ', - ); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(5, { - type: 'variableTag', - attrs: { variable: '{{app.name}}' }, - }); - }); - - it('should handle empty strings', () => { - initializeEditorContent(mockEditor, ''); - expect(mockEditor.commands.insertContent).not.toHaveBeenCalled(); - }); - - it('should handle multiple empty parts', () => { - initializeEditorContent(mockEditor, 'Hello {{user.name}} !'); - - expect(mockEditor.commands.insertContent).toHaveBeenCalledTimes(3); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 1, - 'Hello ', - ); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(2, { - type: 'variableTag', - attrs: { variable: '{{user.name}}' }, - }); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 3, - ' !', - ); - }); - - it('should handle multiple newlines', () => { - initializeEditorContent(mockEditor, 'Line1\n\nLine3'); - - expect(mockEditor.commands.insertContent).toHaveBeenCalledTimes(4); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 1, - 'Line1', - ); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(2, { - type: 'hardBreak', - }); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(3, { - type: 'hardBreak', - }); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 4, - 'Line3', - ); - }); - - it('should ignore malformed variable tags', () => { - initializeEditorContent( - mockEditor, - 'Hello {{user.name}} and {{invalid}more}} text', - ); - - expect(mockEditor.commands.insertContent).toHaveBeenCalledTimes(3); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 1, - 'Hello ', - ); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(2, { - type: 'variableTag', - attrs: { variable: '{{user.name}}' }, - }); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 3, - ' and {{invalid}more}} text', - ); - }); - - it('should handle trailing newlines', () => { - initializeEditorContent(mockEditor, 'Hello\n'); - - expect(mockEditor.commands.insertContent).toHaveBeenCalledTimes(2); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith( - 1, - 'Hello', - ); - expect(mockEditor.commands.insertContent).toHaveBeenNthCalledWith(2, { - type: 'hardBreak', - }); - }); -}); diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/extractVariableLabel.ts b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/extractVariableLabel.ts index 4aff2c153444..1944a823672b 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/extractVariableLabel.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/extractVariableLabel.ts @@ -1,4 +1,4 @@ -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; const CAPTURE_ALL_VARIABLE_TAG_INNER_REGEX = /{{([^{}]+)}}/g; diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/filterOutputSchema.ts b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/filterOutputSchema.ts index 9b3849a8c3d6..4a9687725eb5 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/filterOutputSchema.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/filterOutputSchema.ts @@ -6,7 +6,7 @@ import { import { isBaseOutputSchema } from '@/workflow/workflow-variables/utils/isBaseOutputSchema'; import { isLinkOutputSchema } from '@/workflow/workflow-variables/utils/isLinkOutputSchema'; import { isRecordOutputSchema } from '@/workflow/workflow-variables/utils/isRecordOutputSchema'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; const isValidRecordOutputSchema = ( outputSchema: RecordOutputSchema, diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/getInitialEditorContent.ts b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/getInitialEditorContent.ts new file mode 100644 index 000000000000..6e4a5475e84b --- /dev/null +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/getInitialEditorContent.ts @@ -0,0 +1,44 @@ +import { isStandaloneVariableString } from '@/workflow/utils/isStandaloneVariableString'; +import { isNonEmptyString } from '@sniptt/guards'; +import { JSONContent } from '@tiptap/react'; + +export const CAPTURE_VARIABLE_TAG_REGEX = /({{[^{}]+}})/; + +export const getInitialEditorContent = (rawContent: string): JSONContent => { + const paragraphContent: JSONContent[] = []; + const lines = rawContent.split(/\n/); + + lines.forEach((line, index) => { + const parts = line.split(CAPTURE_VARIABLE_TAG_REGEX); + + parts.forEach((part) => { + if (isStandaloneVariableString(part)) { + paragraphContent.push({ + type: 'variableTag', + attrs: { variable: part }, + }); + } else if (isNonEmptyString(part)) { + paragraphContent.push({ + type: 'text', + text: part, + }); + } + }); + + if (index < lines.length - 1) { + paragraphContent.push({ + type: 'hardBreak', + }); + } + }); + + return { + type: 'doc', + content: [ + { + type: 'paragraph', + content: paragraphContent, + }, + ], + }; +}; diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/getStepHeaderLabel.ts b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/getStepHeaderLabel.ts index 3b734eaab3c5..23f55f5af9f6 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/getStepHeaderLabel.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/getStepHeaderLabel.ts @@ -2,7 +2,7 @@ import { StepOutputSchema } from '@/workflow/workflow-variables/types/StepOutput import { getCurrentSubStepFromPath } from '@/workflow/workflow-variables/utils/getCurrentSubStepFromPath'; import { isBaseOutputSchema } from '@/workflow/workflow-variables/utils/isBaseOutputSchema'; import { isRecordOutputSchema } from '@/workflow/workflow-variables/utils/isRecordOutputSchema'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const getStepHeaderLabel = ( step: StepOutputSchema, diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/getTriggerStepName.ts b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/getTriggerStepName.ts index 27ac9f86a96e..192c9c6be16b 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/getTriggerStepName.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/getTriggerStepName.ts @@ -4,8 +4,7 @@ import { } from '@/workflow/types/Workflow'; import { assertUnreachable } from '@/workflow/utils/assertUnreachable'; import { getTriggerDefaultLabel } from '@/workflow/workflow-trigger/utils/getTriggerLabel'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from 'twenty-ui'; +import { capitalize, isDefined } from 'twenty-shared'; export const getTriggerStepName = (trigger: WorkflowTrigger): string => { switch (trigger.type) { diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/initializeEditorContent.ts b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/initializeEditorContent.ts deleted file mode 100644 index a194de4caa14..000000000000 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/initializeEditorContent.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { isNonEmptyString } from '@sniptt/guards'; -import { Editor } from '@tiptap/react'; - -export const CAPTURE_VARIABLE_TAG_REGEX = /({{[^{}]+}})/; - -export const initializeEditorContent = (editor: Editor, content: string) => { - const lines = content.split(/\n/); - - lines.forEach((line, index) => { - const parts = line.split(CAPTURE_VARIABLE_TAG_REGEX); - parts.forEach((part) => { - if (part.length === 0) { - return; - } - - if (part.startsWith('{{') && part.endsWith('}}')) { - editor.commands.insertContent({ - type: 'variableTag', - attrs: { variable: part }, - }); - return; - } - - if (isNonEmptyString(part)) { - editor.commands.insertContent(part); - } - }); - - // Add hard break if it's not the last line - if (index < lines.length - 1) { - editor.commands.insertContent({ - type: 'hardBreak', - }); - } - }); -}; diff --git a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/parseEditorContent.ts b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/parseEditorContent.ts index c27e655d0021..804fc1c15b05 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-variables/utils/parseEditorContent.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-variables/utils/parseEditorContent.ts @@ -1,5 +1,5 @@ import { JSONContent } from '@tiptap/react'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const parseEditorContent = (json: JSONContent): string => { const parseNode = (node: JSONContent): string => { diff --git a/packages/twenty-front/src/modules/workspace/components/WorkspaceInviteTeam.tsx b/packages/twenty-front/src/modules/workspace/components/WorkspaceInviteTeam.tsx index 761458006f3a..67253747c5e3 100644 --- a/packages/twenty-front/src/modules/workspace/components/WorkspaceInviteTeam.tsx +++ b/packages/twenty-front/src/modules/workspace/components/WorkspaceInviteTeam.tsx @@ -9,7 +9,7 @@ import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/Snac import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { TextInput } from '@/ui/input/components/TextInput'; import { sanitizeEmailList } from '@/workspace/utils/sanitizeEmailList'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { useCreateWorkspaceInvitation } from '../../workspace-invitation/hooks/useCreateWorkspaceInvitation'; const StyledContainer = styled.div` diff --git a/packages/twenty-front/src/modules/workspace/components/WorkspaceProviderEffect.tsx b/packages/twenty-front/src/modules/workspace/components/WorkspaceProviderEffect.tsx index 25baa6facda5..6630050a5785 100644 --- a/packages/twenty-front/src/modules/workspace/components/WorkspaceProviderEffect.tsx +++ b/packages/twenty-front/src/modules/workspace/components/WorkspaceProviderEffect.tsx @@ -5,7 +5,7 @@ import { useReadWorkspaceSubdomainFromCurrentLocation } from '@/domain-manager/h import { useRedirectToWorkspaceDomain } from '@/domain-manager/hooks/useRedirectToWorkspaceDomain'; import { lastAuthenticatedWorkspaceDomainState } from '@/domain-manager/states/lastAuthenticatedWorkspaceDomainState'; import { useEffect } from 'react'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { useGetPublicWorkspaceDataBySubdomain } from '@/domain-manager/hooks/useGetPublicWorkspaceDataBySubdomain'; import { useIsCurrentLocationOnDefaultDomain } from '@/domain-manager/hooks/useIsCurrentLocationOnDefaultDomain'; diff --git a/packages/twenty-front/src/pages/auth/Authorize.tsx b/packages/twenty-front/src/pages/auth/Authorize.tsx index c88677308ce7..6b841f3039b1 100644 --- a/packages/twenty-front/src/pages/auth/Authorize.tsx +++ b/packages/twenty-front/src/pages/auth/Authorize.tsx @@ -5,10 +5,10 @@ import { useSearchParams } from 'react-router-dom'; import { useRedirect } from '@/domain-manager/hooks/useRedirect'; import { useLingui } from '@lingui/react/macro'; +import { isDefined } from 'twenty-shared'; import { MainButton, UndecoratedLink } from 'twenty-ui'; import { useAuthorizeAppMutation } from '~/generated/graphql'; import { useNavigateApp } from '~/hooks/useNavigateApp'; -import { isDefined } from '~/utils/isDefined'; type App = { id: string; name: string; logo: string }; diff --git a/packages/twenty-front/src/pages/auth/SignInUp.tsx b/packages/twenty-front/src/pages/auth/SignInUp.tsx index ce52288ea937..41cf129710a4 100644 --- a/packages/twenty-front/src/pages/auth/SignInUp.tsx +++ b/packages/twenty-front/src/pages/auth/SignInUp.tsx @@ -18,8 +18,8 @@ import { useIsCurrentLocationOnAWorkspaceSubdomain } from '@/domain-manager/hook import { useIsCurrentLocationOnDefaultDomain } from '@/domain-manager/hooks/useIsCurrentLocationOnDefaultDomain'; import { DEFAULT_WORKSPACE_NAME } from '@/ui/navigation/navigation-drawer/constants/DefaultWorkspaceName'; import { useMemo } from 'react'; +import { isDefined } from 'twenty-shared'; import { AnimatedEaseIn } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; import { useSearchParams } from 'react-router-dom'; import { PublicWorkspaceDataOutput } from '~/generated-metadata/graphql'; diff --git a/packages/twenty-front/src/pages/object-record/RecordIndexPage.tsx b/packages/twenty-front/src/pages/object-record/RecordIndexPage.tsx index 36bb2df80f15..57aeb8b56378 100644 --- a/packages/twenty-front/src/pages/object-record/RecordIndexPage.tsx +++ b/packages/twenty-front/src/pages/object-record/RecordIndexPage.tsx @@ -22,8 +22,7 @@ import { PageTitle } from '@/ui/utilities/page-title/components/PageTitle'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { ViewComponentInstanceContext } from '@/views/states/contexts/ViewComponentInstanceContext'; import { useRecoilCallback } from 'recoil'; -import { capitalize } from 'twenty-shared'; -import { isDefined } from 'twenty-ui'; +import { capitalize, isDefined } from 'twenty-shared'; const StyledIndexContainer = styled.div` display: flex; diff --git a/packages/twenty-front/src/pages/onboarding/ChooseYourPlan.tsx b/packages/twenty-front/src/pages/onboarding/ChooseYourPlan.tsx index e168b5e1b084..e1ed9373332e 100644 --- a/packages/twenty-front/src/pages/onboarding/ChooseYourPlan.tsx +++ b/packages/twenty-front/src/pages/onboarding/ChooseYourPlan.tsx @@ -10,11 +10,11 @@ import { billingState } from '@/client-config/states/billingState'; import styled from '@emotion/styled'; import { Trans, useLingui } from '@lingui/react/macro'; import { useRecoilState, useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { ActionLink, CAL_LINK, CardPicker, - isDefined, Loader, MainButton, } from 'twenty-ui'; diff --git a/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx b/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx index 08c3b337842e..fb1dd66b8c2c 100644 --- a/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx +++ b/packages/twenty-front/src/pages/onboarding/CreateProfile.tsx @@ -21,8 +21,8 @@ import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { TextInputV2 } from '@/ui/input/components/TextInputV2'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { WorkspaceMember } from '@/workspace-member/types/WorkspaceMember'; +import { isDefined } from 'twenty-shared'; import { OnboardingStatus } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; const StyledContentContainer = styled.div` width: 100%; diff --git a/packages/twenty-front/src/pages/onboarding/CreateWorkspace.tsx b/packages/twenty-front/src/pages/onboarding/CreateWorkspace.tsx index c881250e88c1..2d031a8e808c 100644 --- a/packages/twenty-front/src/pages/onboarding/CreateWorkspace.tsx +++ b/packages/twenty-front/src/pages/onboarding/CreateWorkspace.tsx @@ -15,11 +15,11 @@ import { WorkspaceLogoUploader } from '@/settings/workspace/components/Workspace import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { TextInputV2 } from '@/ui/input/components/TextInputV2'; +import { isDefined } from 'twenty-shared'; import { OnboardingStatus, useActivateWorkspaceMutation, } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; const StyledContentContainer = styled.div` width: 100%; diff --git a/packages/twenty-front/src/pages/onboarding/InviteTeam.tsx b/packages/twenty-front/src/pages/onboarding/InviteTeam.tsx index 947984526e35..eade4a3069ff 100644 --- a/packages/twenty-front/src/pages/onboarding/InviteTeam.tsx +++ b/packages/twenty-front/src/pages/onboarding/InviteTeam.tsx @@ -30,8 +30,8 @@ import { } from 'twenty-ui'; import { z } from 'zod'; +import { isDefined } from 'twenty-shared'; import { OnboardingStatus } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; import { useCreateWorkspaceInvitation } from '../../modules/workspace-invitation/hooks/useCreateWorkspaceInvitation'; const StyledAnimatedContainer = styled.div` diff --git a/packages/twenty-front/src/pages/onboarding/PaymentSuccess.tsx b/packages/twenty-front/src/pages/onboarding/PaymentSuccess.tsx index 5cf3759f6048..d7689b2b75bd 100644 --- a/packages/twenty-front/src/pages/onboarding/PaymentSuccess.tsx +++ b/packages/twenty-front/src/pages/onboarding/PaymentSuccess.tsx @@ -1,20 +1,14 @@ -import { useTheme } from '@emotion/react'; -import styled from '@emotion/styled'; -import { useSetRecoilState } from 'recoil'; -import { - AnimatedEaseIn, - IconCheck, - isDefined, - MainButton, - RGBA, -} from 'twenty-ui'; - import { SubTitle } from '@/auth/components/SubTitle'; import { Title } from '@/auth/components/Title'; import { currentUserState } from '@/auth/states/currentUserState'; import { useOnboardingStatus } from '@/onboarding/hooks/useOnboardingStatus'; import { AppPath } from '@/types/AppPath'; import { useSubscriptionStatus } from '@/workspace/hooks/useSubscriptionStatus'; +import { useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; +import { useSetRecoilState } from 'recoil'; +import { isDefined } from 'twenty-shared'; +import { AnimatedEaseIn, IconCheck, MainButton, RGBA } from 'twenty-ui'; import { OnboardingStatus, useGetCurrentUserLazyQuery, diff --git a/packages/twenty-front/src/pages/settings/SettingsBilling.tsx b/packages/twenty-front/src/pages/settings/SettingsBilling.tsx index bdc719ac1b7f..0bf8c0e6501c 100644 --- a/packages/twenty-front/src/pages/settings/SettingsBilling.tsx +++ b/packages/twenty-front/src/pages/settings/SettingsBilling.tsx @@ -12,6 +12,7 @@ import { import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { SettingsBillingCoverImage } from '@/billing/components/SettingsBillingCoverImage'; +import { useRedirect } from '@/domain-manager/hooks/useRedirect'; import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer'; import { SettingsPath } from '@/types/SettingsPath'; import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar'; @@ -19,15 +20,14 @@ import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { useSubscriptionStatus } from '@/workspace/hooks/useSubscriptionStatus'; +import { isDefined } from 'twenty-shared'; import { SubscriptionInterval, SubscriptionStatus, useBillingPortalSessionQuery, useUpdateBillingSubscriptionMutation, } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; -import { useRedirect } from '@/domain-manager/hooks/useRedirect'; type SwitchInfo = { newInterval: SubscriptionInterval; diff --git a/packages/twenty-front/src/pages/settings/SettingsWorkspaceMembers.tsx b/packages/twenty-front/src/pages/settings/SettingsWorkspaceMembers.tsx index 629723f6b11e..9726d9aa0dc6 100644 --- a/packages/twenty-front/src/pages/settings/SettingsWorkspaceMembers.tsx +++ b/packages/twenty-front/src/pages/settings/SettingsWorkspaceMembers.tsx @@ -34,8 +34,8 @@ import { WorkspaceMember } from '@/workspace-member/types/WorkspaceMember'; import { WorkspaceInviteLink } from '@/workspace/components/WorkspaceInviteLink'; import { WorkspaceInviteTeam } from '@/workspace/components/WorkspaceInviteTeam'; import { formatDistanceToNow } from 'date-fns'; +import { isDefined } from 'twenty-shared'; import { useGetWorkspaceInvitationsQuery } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; import { TableCell } from '../../modules/ui/layout/table/components/TableCell'; import { TableRow } from '../../modules/ui/layout/table/components/TableRow'; diff --git a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectDetailPage.tsx b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectDetailPage.tsx index 1d14cc6a9af2..eccc0bf41787 100644 --- a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectDetailPage.tsx +++ b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectDetailPage.tsx @@ -18,6 +18,8 @@ import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import styled from '@emotion/styled'; import { t } from '@lingui/core/macro'; import { useRecoilState, useRecoilValue } from 'recoil'; + +import { isDefined } from 'twenty-shared'; import { Button, H3Title, @@ -28,7 +30,6 @@ import { IconSettings, MAIN_COLORS, UndecoratedLink, - isDefined, } from 'twenty-ui'; import { FeatureFlagKey } from '~/generated/graphql'; import { useNavigateApp } from '~/hooks/useNavigateApp'; diff --git a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx index 7ada32c61d21..ed8c194f770c 100644 --- a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx +++ b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectFieldEdit.tsx @@ -34,10 +34,10 @@ import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/Snac import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { useLingui } from '@lingui/react/macro'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { useNavigateApp } from '~/hooks/useNavigateApp'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; -import { isDefined } from '~/utils/isDefined'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; //TODO: fix this type diff --git a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx index 141eaf412acf..73012617a7a3 100644 --- a/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx +++ b/packages/twenty-front/src/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect.tsx @@ -12,7 +12,7 @@ import { zodResolver } from '@hookform/resolvers/zod'; import { useEffect } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { useParams } from 'react-router-dom'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; import { z } from 'zod'; import { FieldMetadataType } from '~/generated-metadata/graphql'; import { useNavigateApp } from '~/hooks/useNavigateApp'; diff --git a/packages/twenty-front/src/pages/settings/data-model/utils/getSettingsObjectFieldType.ts b/packages/twenty-front/src/pages/settings/data-model/utils/getSettingsObjectFieldType.ts index 1386d810bd1d..b73e5d5309ec 100644 --- a/packages/twenty-front/src/pages/settings/data-model/utils/getSettingsObjectFieldType.ts +++ b/packages/twenty-front/src/pages/settings/data-model/utils/getSettingsObjectFieldType.ts @@ -1,7 +1,7 @@ import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { getFieldIdentifierType } from '@/settings/data-model/utils/getFieldIdentifierType'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const getSettingsObjectFieldType = ( objectMetadataItem: ObjectMetadataItem, diff --git a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx index b9de4a5ca301..cee2a148b1cf 100644 --- a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx +++ b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx @@ -16,9 +16,9 @@ import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBa import { useLingui } from '@lingui/react/macro'; import { useRecoilCallback } from 'recoil'; import { Key } from 'ts-key-enum'; +import { isDefined } from 'twenty-shared'; import { useGenerateApiKeyTokenMutation } from '~/generated/graphql'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; -import { isDefined } from '~/utils/isDefined'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; export const SettingsDevelopersApiKeysNew = () => { diff --git a/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx b/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx index cc5a4286b57a..489705908244 100644 --- a/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx +++ b/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail.tsx @@ -11,7 +11,6 @@ import { IconPlus, IconRefresh, IconTrash, - isDefined, Section, useIcons, } from 'twenty-ui'; @@ -37,6 +36,7 @@ import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBa import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { Trans, useLingui } from '@lingui/react/macro'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { FeatureFlagKey } from '~/generated/graphql'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; import { WEBHOOK_EMPTY_OPERATION } from '~/pages/settings/developers/webhooks/constants/WebhookEmptyOperation'; diff --git a/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew.tsx b/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew.tsx index 8c70d3648e85..aa39310764e5 100644 --- a/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew.tsx +++ b/packages/twenty-front/src/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew.tsx @@ -1,5 +1,4 @@ import { useState } from 'react'; -import { H2Title, isDefined, Section } from 'twenty-ui'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; @@ -10,6 +9,8 @@ import { SettingsPath } from '@/types/SettingsPath'; import { TextInput } from '@/ui/input/components/TextInput'; import { SubMenuTopBarContainer } from '@/ui/layout/page/components/SubMenuTopBarContainer'; import { useLingui } from '@lingui/react/macro'; +import { isDefined } from 'twenty-shared'; +import { H2Title, Section } from 'twenty-ui'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; import { isValidUrl } from '~/utils/url/isValidUrl'; diff --git a/packages/twenty-front/src/pages/settings/profile/appearance/components/DateTimeSettings.tsx b/packages/twenty-front/src/pages/settings/profile/appearance/components/DateTimeSettings.tsx index 221083ea0c2e..75e4f406e9d5 100644 --- a/packages/twenty-front/src/pages/settings/profile/appearance/components/DateTimeSettings.tsx +++ b/packages/twenty-front/src/pages/settings/profile/appearance/components/DateTimeSettings.tsx @@ -13,6 +13,7 @@ import { detectTimeFormat } from '@/localization/utils/detectTimeFormat'; import { detectTimeZone } from '@/localization/utils/detectTimeZone'; import { getWorkspaceDateFormatFromDateFormat } from '@/localization/utils/getWorkspaceDateFormatFromDateFormat'; import { getWorkspaceTimeFormatFromTimeFormat } from '@/localization/utils/getWorkspaceTimeFormatFromTimeFormat'; +import { isDefined } from 'twenty-shared'; import { WorkspaceMemberDateFormatEnum, WorkspaceMemberTimeFormatEnum, @@ -20,7 +21,6 @@ import { import { DateTimeSettingsDateFormatSelect } from '~/pages/settings/profile/appearance/components/DateTimeSettingsDateFormatSelect'; import { DateTimeSettingsTimeFormatSelect } from '~/pages/settings/profile/appearance/components/DateTimeSettingsTimeFormatSelect'; import { DateTimeSettingsTimeZoneSelect } from '~/pages/settings/profile/appearance/components/DateTimeSettingsTimeZoneSelect'; -import { isDefined } from '~/utils/isDefined'; import { isEmptyObject } from '~/utils/isEmptyObject'; import { logError } from '~/utils/logError'; diff --git a/packages/twenty-front/src/pages/settings/profile/appearance/components/DateTimeSettingsTimeZoneSelect.tsx b/packages/twenty-front/src/pages/settings/profile/appearance/components/DateTimeSettingsTimeZoneSelect.tsx index 3f83e595683a..433246f8bf98 100644 --- a/packages/twenty-front/src/pages/settings/profile/appearance/components/DateTimeSettingsTimeZoneSelect.tsx +++ b/packages/twenty-front/src/pages/settings/profile/appearance/components/DateTimeSettingsTimeZoneSelect.tsx @@ -2,7 +2,7 @@ import { detectTimeZone } from '@/localization/utils/detectTimeZone'; import { findAvailableTimeZoneOption } from '@/localization/utils/findAvailableTimeZoneOption'; import { AVAILABLE_TIMEZONE_OPTIONS } from '@/settings/accounts/constants/AvailableTimezoneOptions'; import { Select } from '@/ui/input/components/Select'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; type DateTimeSettingsTimeZoneSelectProps = { value?: string; diff --git a/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx b/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx index 07df7bfc81db..651dcd21d87f 100644 --- a/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx +++ b/packages/twenty-front/src/pages/settings/profile/appearance/components/LocalePicker.tsx @@ -10,9 +10,8 @@ import { Select } from '@/ui/input/components/Select'; import { useRefreshObjectMetadataItems } from '@/object-metadata/hooks/useRefreshObjectMetadataItem'; import { i18n } from '@lingui/core'; import { useLingui } from '@lingui/react/macro'; -import { APP_LOCALES } from 'twenty-shared'; +import { APP_LOCALES, isDefined } from 'twenty-shared'; import { dynamicActivate } from '~/utils/i18n/dynamicActivate'; -import { isDefined } from '~/utils/isDefined'; import { logError } from '~/utils/logError'; const StyledContainer = styled.div` @@ -52,7 +51,7 @@ export const LocalePicker = () => { if (!isDefined(currentWorkspaceMember)) return; - const handleLocaleChange = async (value: string) => { + const handleLocaleChange = async (value: keyof typeof APP_LOCALES) => { setCurrentWorkspaceMember({ ...currentWorkspaceMember, ...{ locale: value }, @@ -91,6 +90,10 @@ export const LocalePicker = () => { label: t`Korean`, value: APP_LOCALES.ko, }, + { + label: t`Japanese`, + value: APP_LOCALES.ja, + }, { label: t`Portuguese — Portugal`, value: APP_LOCALES['pt-PT'], @@ -123,7 +126,9 @@ export const LocalePicker = () => { fullWidth value={i18n.locale} options={localeOptions} - onChange={(value) => handleLocaleChange(value)} + onChange={(value) => + handleLocaleChange(value as keyof typeof APP_LOCALES) + } /> </StyledContainer> ); diff --git a/packages/twenty-front/src/pages/settings/serverless-functions/SettingsServerlessFunctionDetail.tsx b/packages/twenty-front/src/pages/settings/serverless-functions/SettingsServerlessFunctionDetail.tsx index 775034d111ef..69ef70eedcc5 100644 --- a/packages/twenty-front/src/pages/settings/serverless-functions/SettingsServerlessFunctionDetail.tsx +++ b/packages/twenty-front/src/pages/settings/serverless-functions/SettingsServerlessFunctionDetail.tsx @@ -19,11 +19,11 @@ import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useState } from 'react'; import { useParams } from 'react-router-dom'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { IconCode, IconGauge, IconSettings, IconTestPipe } from 'twenty-ui'; import { useDebouncedCallback } from 'use-debounce'; import { FeatureFlagKey } from '~/generated/graphql'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; -import { isDefined } from '~/utils/isDefined'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; const TAB_LIST_COMPONENT_ID = 'serverless-function-detail'; diff --git a/packages/twenty-front/src/pages/settings/serverless-functions/SettingsServerlessFunctionsNew.tsx b/packages/twenty-front/src/pages/settings/serverless-functions/SettingsServerlessFunctionsNew.tsx index a41f9ebe4272..3a5313f6d63d 100644 --- a/packages/twenty-front/src/pages/settings/serverless-functions/SettingsServerlessFunctionsNew.tsx +++ b/packages/twenty-front/src/pages/settings/serverless-functions/SettingsServerlessFunctionsNew.tsx @@ -10,9 +10,9 @@ import { SettingsPath } from '@/types/SettingsPath'; import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useState } from 'react'; import { Key } from 'ts-key-enum'; +import { isDefined } from 'twenty-shared'; import { useHotkeyScopeOnMount } from '~/hooks/useHotkeyScopeOnMount'; import { useNavigateSettings } from '~/hooks/useNavigateSettings'; -import { isDefined } from '~/utils/isDefined'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; export const SettingsServerlessFunctionsNew = () => { diff --git a/packages/twenty-front/src/pages/settings/workspace/SettingsHostname.tsx b/packages/twenty-front/src/pages/settings/workspace/SettingsHostname.tsx index 54799534e23a..300ffad6e420 100644 --- a/packages/twenty-front/src/pages/settings/workspace/SettingsHostname.tsx +++ b/packages/twenty-front/src/pages/settings/workspace/SettingsHostname.tsx @@ -1,18 +1,18 @@ -import { zodResolver } from '@hookform/resolvers/zod'; -import { Button, H2Title, Section } from 'twenty-ui'; +import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; +import { useRedirectToWorkspaceDomain } from '@/domain-manager/hooks/useRedirectToWorkspaceDomain'; import { TextInputV2 } from '@/ui/input/components/TextInputV2'; +import styled from '@emotion/styled'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { useLingui } from '@lingui/react/macro'; import { Controller, useForm } from 'react-hook-form'; -import { z } from 'zod'; -import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { useRecoilState } from 'recoil'; -import styled from '@emotion/styled'; +import { isDefined } from 'twenty-shared'; +import { Button, H2Title, Section } from 'twenty-ui'; +import { z } from 'zod'; import { - useUpdateWorkspaceMutation, useGetHostnameDetailsQuery, + useUpdateWorkspaceMutation, } from '~/generated/graphql'; -import { isDefined } from '~/utils/isDefined'; -import { useRedirectToWorkspaceDomain } from '@/domain-manager/hooks/useRedirectToWorkspaceDomain'; -import { useLingui } from '@lingui/react/macro'; const validationSchema = z .object({ diff --git a/packages/twenty-front/src/pages/settings/workspace/SettingsHostnameEffect.tsx b/packages/twenty-front/src/pages/settings/workspace/SettingsHostnameEffect.tsx index 099ccdab4fb0..23dac27bb6cf 100644 --- a/packages/twenty-front/src/pages/settings/workspace/SettingsHostnameEffect.tsx +++ b/packages/twenty-front/src/pages/settings/workspace/SettingsHostnameEffect.tsx @@ -1,7 +1,7 @@ -import { isDefined } from '~/utils/isDefined'; -import { useEffect } from 'react'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; +import { useEffect } from 'react'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { useGetHostnameDetailsQuery } from '~/generated/graphql'; export const SettingsHostnameEffect = () => { diff --git a/packages/twenty-front/src/pages/settings/workspace/SettingsSubdomain.tsx b/packages/twenty-front/src/pages/settings/workspace/SettingsSubdomain.tsx index 3b96e295cb13..fd2b4a48c9b6 100644 --- a/packages/twenty-front/src/pages/settings/workspace/SettingsSubdomain.tsx +++ b/packages/twenty-front/src/pages/settings/workspace/SettingsSubdomain.tsx @@ -1,12 +1,12 @@ -import { H2Title, Section } from 'twenty-ui'; import { TextInputV2 } from '@/ui/input/components/TextInputV2'; -import { Controller, useFormContext } from 'react-hook-form'; import styled from '@emotion/styled'; import { useLingui } from '@lingui/react/macro'; +import { Controller, useFormContext } from 'react-hook-form'; +import { H2Title, Section } from 'twenty-ui'; -import { isDefined } from '~/utils/isDefined'; import { domainConfigurationState } from '@/domain-manager/states/domainConfigurationState'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared'; const StyledDomainFormWrapper = styled.div` align-items: center; diff --git a/packages/twenty-front/src/testing/decorators/RecordTableDecorator.tsx b/packages/twenty-front/src/testing/decorators/RecordTableDecorator.tsx index c634c91ecbbf..835271543234 100644 --- a/packages/twenty-front/src/testing/decorators/RecordTableDecorator.tsx +++ b/packages/twenty-front/src/testing/decorators/RecordTableDecorator.tsx @@ -5,7 +5,7 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat import { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext'; import { RecordTableBodyContextProvider } from '@/object-record/record-table/contexts/RecordTableBodyContext'; import { RecordTableContextProvider } from '@/object-record/record-table/contexts/RecordTableContext'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const RecordTableDecorator: Decorator = (Story) => { const objectMetadataItems = useRecoilValue(objectMetadataItemsState); diff --git a/packages/twenty-front/src/testing/decorators/getFieldDecorator.tsx b/packages/twenty-front/src/testing/decorators/getFieldDecorator.tsx index ee2906b3ba13..84df810b2c1b 100644 --- a/packages/twenty-front/src/testing/decorators/getFieldDecorator.tsx +++ b/packages/twenty-front/src/testing/decorators/getFieldDecorator.tsx @@ -11,11 +11,11 @@ import { } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { ObjectRecord } from '@/object-record/types/ObjectRecord'; +import { isDefined } from 'twenty-shared'; import { getCompaniesMock } from '~/testing/mock-data/companies'; import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems'; import { getPeopleMock } from '~/testing/mock-data/people'; import { mockedTasks } from '~/testing/mock-data/tasks'; -import { isDefined } from '~/utils/isDefined'; const RecordMockSetterEffect = ({ companies, diff --git a/packages/twenty-front/src/testing/mock-data/index.ts b/packages/twenty-front/src/testing/mock-data/index.ts index 0d8eb19d10b9..4fab4e61bcba 100644 --- a/packages/twenty-front/src/testing/mock-data/index.ts +++ b/packages/twenty-front/src/testing/mock-data/index.ts @@ -6,8 +6,7 @@ import { isString, } from '@sniptt/guards'; import { GraphQLVariables } from 'msw'; - -import { isDefined } from '../../utils/isDefined'; +import { isDefined } from 'twenty-shared'; type StringFilter = { equals?: string; diff --git a/packages/twenty-front/src/testing/profiling/components/ProfilerWrapper.tsx b/packages/twenty-front/src/testing/profiling/components/ProfilerWrapper.tsx index 7fba31d21efa..c8d5ec57b42b 100644 --- a/packages/twenty-front/src/testing/profiling/components/ProfilerWrapper.tsx +++ b/packages/twenty-front/src/testing/profiling/components/ProfilerWrapper.tsx @@ -1,12 +1,12 @@ import { Profiler, ProfilerOnRenderCallback } from 'react'; import { useRecoilCallback } from 'recoil'; +import { isDefined } from 'twenty-shared'; import { profilingQueueState } from '~/testing/profiling/states/profilingQueueState'; import { profilingSessionDataPointsState } from '~/testing/profiling/states/profilingSessionDataPointsState'; import { profilingSessionState } from '~/testing/profiling/states/profilingSessionState'; import { ProfilingDataPoint } from '~/testing/profiling/types/ProfilingDataPoint'; import { getProfilingQueueIdentifier } from '~/testing/profiling/utils/getProfilingQueueIdentifier'; -import { isDefined } from '~/utils/isDefined'; export const ProfilerWrapper = ({ profilingId, diff --git a/packages/twenty-front/src/testing/profiling/utils/getProfilingReportFromDocument.ts b/packages/twenty-front/src/testing/profiling/utils/getProfilingReportFromDocument.ts index f2571af56055..f3631730ef71 100644 --- a/packages/twenty-front/src/testing/profiling/utils/getProfilingReportFromDocument.ts +++ b/packages/twenty-front/src/testing/profiling/utils/getProfilingReportFromDocument.ts @@ -1,9 +1,9 @@ import { isNonEmptyString } from '@sniptt/guards'; +import { isDefined } from 'twenty-shared'; import { PROFILING_REPORTER_DIV_ID } from '~/testing/profiling/constants/ProfilingReporterDivId'; import { ProfilingReport } from '~/testing/profiling/types/ProfilingReportByRun'; import { parseProfilingReportString } from '~/testing/profiling/utils/parseProfilingReportString'; -import { isDefined } from '~/utils/isDefined'; export const getProfilingReportFromDocument = ( documentElement: Element, diff --git a/packages/twenty-front/src/testing/profiling/utils/getProfilingStory.ts b/packages/twenty-front/src/testing/profiling/utils/getProfilingStory.ts index 38df0ecb2e69..989c0da20ac0 100644 --- a/packages/twenty-front/src/testing/profiling/utils/getProfilingStory.ts +++ b/packages/twenty-front/src/testing/profiling/utils/getProfilingStory.ts @@ -1,9 +1,9 @@ import { StoryObj } from '@storybook/react'; import { expect, findByTestId } from '@storybook/test'; +import { isDefined } from 'twenty-shared'; import { ProfilerDecorator } from '~/testing/decorators/ProfilerDecorator'; import { getProfilingReportFromDocument } from '~/testing/profiling/utils/getProfilingReportFromDocument'; -import { isDefined } from '~/utils/isDefined'; export const getProfilingStory = ({ componentName, diff --git a/packages/twenty-front/src/utils/combineRefs.ts b/packages/twenty-front/src/utils/combineRefs.ts index 5ba8dd16d4c5..cf75362ae426 100644 --- a/packages/twenty-front/src/utils/combineRefs.ts +++ b/packages/twenty-front/src/utils/combineRefs.ts @@ -1,6 +1,6 @@ import { isFunction } from '@sniptt/guards'; import { MutableRefObject, Ref } from 'react'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; export const combineRefs = <T>(...refs: (Ref<T> | undefined)[]) => { return (node: T) => { diff --git a/packages/twenty-front/src/utils/date-utils.ts b/packages/twenty-front/src/utils/date-utils.ts index a43a2d4f57d4..5e138f7b4d63 100644 --- a/packages/twenty-front/src/utils/date-utils.ts +++ b/packages/twenty-front/src/utils/date-utils.ts @@ -4,7 +4,7 @@ import { differenceInCalendarDays, formatDistanceToNow } from 'date-fns'; import { DateTime } from 'luxon'; import moize from 'moize'; -import { isDefined } from '~/utils/isDefined'; +import { isDefined } from 'twenty-shared'; import { logError } from './logError'; diff --git a/packages/twenty-front/src/utils/getDisplayValueByUrlType.ts b/packages/twenty-front/src/utils/getDisplayValueByUrlType.ts index cc1accb5685a..783790538a64 100644 --- a/packages/twenty-front/src/utils/getDisplayValueByUrlType.ts +++ b/packages/twenty-front/src/utils/getDisplayValueByUrlType.ts @@ -1,5 +1,5 @@ +import { isDefined } from 'twenty-shared'; import { LinkType } from 'twenty-ui'; -import { isDefined } from './isDefined'; type getUrlDisplayValueByUrlTypeProps = { type: LinkType; diff --git a/packages/twenty-front/src/utils/i18n/dynamicActivate.ts b/packages/twenty-front/src/utils/i18n/dynamicActivate.ts index d2b0e0477f1b..b384f60cab3a 100644 --- a/packages/twenty-front/src/utils/i18n/dynamicActivate.ts +++ b/packages/twenty-front/src/utils/i18n/dynamicActivate.ts @@ -1,6 +1,7 @@ import { i18n } from '@lingui/core'; +import { APP_LOCALES } from 'twenty-shared'; -export const dynamicActivate = async (locale: string) => { +export const dynamicActivate = async (locale: keyof typeof APP_LOCALES) => { const { messages } = await import(`../../locales/generated/${locale}.ts`); i18n.load(locale, messages); i18n.activate(locale); diff --git a/packages/twenty-front/src/utils/is-domain.ts b/packages/twenty-front/src/utils/is-domain.ts index 7db9720748b0..94f0f3539bdb 100644 --- a/packages/twenty-front/src/utils/is-domain.ts +++ b/packages/twenty-front/src/utils/is-domain.ts @@ -1,4 +1,4 @@ -import { isDefined } from './isDefined'; +import { isDefined } from 'twenty-shared'; export const isDomain = (url: string | undefined | null) => isDefined(url) && diff --git a/packages/twenty-front/src/utils/isDefined.ts b/packages/twenty-front/src/utils/isDefined.ts deleted file mode 100644 index 81eb67203a03..000000000000 --- a/packages/twenty-front/src/utils/isDefined.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { isNull, isUndefined } from '@sniptt/guards'; - -export const isDefined = <T>(value: T | null | undefined): value is T => - !isUndefined(value) && !isNull(value); diff --git a/packages/twenty-front/src/utils/navigation/getAppPath.ts b/packages/twenty-front/src/utils/navigation/getAppPath.ts index f9925c7e91e5..5804b3c82d1b 100644 --- a/packages/twenty-front/src/utils/navigation/getAppPath.ts +++ b/packages/twenty-front/src/utils/navigation/getAppPath.ts @@ -1,7 +1,7 @@ import { AppPath } from '@/types/AppPath'; import qs from 'qs'; import { generatePath, PathParam } from 'react-router-dom'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const getAppPath = <T extends AppPath>( to: T, diff --git a/packages/twenty-front/src/utils/navigation/getSettingsPath.ts b/packages/twenty-front/src/utils/navigation/getSettingsPath.ts index 6c40b209396d..570c3b0b0e8d 100644 --- a/packages/twenty-front/src/utils/navigation/getSettingsPath.ts +++ b/packages/twenty-front/src/utils/navigation/getSettingsPath.ts @@ -2,7 +2,7 @@ import { AppPath } from '@/types/AppPath'; import { SettingsPath } from '@/types/SettingsPath'; import qs from 'qs'; import { generatePath, PathParam } from 'react-router-dom'; -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const getSettingsPath = <T extends SettingsPath>( to: T, diff --git a/packages/twenty-front/src/utils/parseJson.ts b/packages/twenty-front/src/utils/parseJson.ts index 45ee92a9ed54..a233a511575e 100644 --- a/packages/twenty-front/src/utils/parseJson.ts +++ b/packages/twenty-front/src/utils/parseJson.ts @@ -1,4 +1,4 @@ -import { isDefined } from 'twenty-ui'; +import { isDefined } from 'twenty-shared'; export const parseJson = <T>(json: string | undefined | null) => { if (!isDefined(json)) { diff --git a/packages/twenty-front/src/utils/recoil-effects.ts b/packages/twenty-front/src/utils/recoil-effects.ts index 5c409e7dc95c..a926347ed06b 100644 --- a/packages/twenty-front/src/utils/recoil-effects.ts +++ b/packages/twenty-front/src/utils/recoil-effects.ts @@ -1,11 +1,10 @@ -import { AtomEffect } from 'recoil'; import omit from 'lodash.omit'; +import { AtomEffect } from 'recoil'; import { z } from 'zod'; +import { isDefined } from 'twenty-shared'; import { cookieStorage } from '~/utils/cookie-storage'; -import { isDefined } from './isDefined'; - export const localStorageEffect = <T>(key?: string): AtomEffect<T> => ({ setSelf, onSet, node }) => { diff --git a/packages/twenty-server/@types/express.d.ts b/packages/twenty-server/@types/express.d.ts index f30a99a198d7..6bf3987b07c1 100644 --- a/packages/twenty-server/@types/express.d.ts +++ b/packages/twenty-server/@types/express.d.ts @@ -10,5 +10,6 @@ declare module 'express-serve-static-core' { workspaceId?: string; workspaceMetadataVersion?: number; workspaceMemberId?: string; + userWorkspaceId?: string; } } diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-40/0-40-migrate-aggregate-operations-options.command.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-40/0-40-migrate-aggregate-operations-options.command.ts index 26bdf699de42..279393c1293e 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-40/0-40-migrate-aggregate-operations-options.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-40/0-40-migrate-aggregate-operations-options.command.ts @@ -4,6 +4,7 @@ import chalk from 'chalk'; import { Command } from 'nest-commander'; import { Repository } from 'typeorm'; import { v4 } from 'uuid'; +import { isDefined } from 'twenty-shared'; import { ActiveWorkspacesCommandOptions, @@ -30,7 +31,6 @@ import { VIEW_STANDARD_FIELD_IDS, } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; -import { isDefined } from 'src/utils/is-defined'; @Command({ name: 'upgrade-0.40:migrate-aggregate-operation-options', diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-41/0-41-add-context-to-actor-composite-type.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-41/0-41-add-context-to-actor-composite-type.ts index 7912a41898df..1e5f4eca53f6 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-41/0-41-add-context-to-actor-composite-type.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-41/0-41-add-context-to-actor-composite-type.ts @@ -97,12 +97,6 @@ export class AddContextToActorCompositeTypeCommand extends ActiveWorkspacesComma field.object.nameSingular, ); - if (!dryRun) { - await this.workspaceMetadataVersionService.incrementMetadataVersion( - workspaceId, - ); - } - if (!dryRun) { const rowsToUpdate = await fieldRepository.update( { @@ -124,6 +118,14 @@ export class AddContextToActorCompositeTypeCommand extends ActiveWorkspacesComma ); } } + + if (!dryRun) { + await this.workspaceMetadataVersionService.incrementMetadataVersion( + workspaceId, + ); + } + + this.twentyORMGlobalManager.destroyDataSourceForWorkspace(workspaceId); } private async addContextColumn( diff --git a/packages/twenty-server/src/database/commands/upgrade-version/0-41/0-41-seed-workflow-views.command.ts b/packages/twenty-server/src/database/commands/upgrade-version/0-41/0-41-seed-workflow-views.command.ts index 4bce88ee7be3..ae4583c41b2e 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version/0-41/0-41-seed-workflow-views.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version/0-41/0-41-seed-workflow-views.command.ts @@ -77,6 +77,8 @@ export class SeedWorkflowViewsCommand extends ActiveWorkspacesCommandRunner { workflowObjectMetadata.id, dryRun, ); + + this.twentyORMGlobalManager.destroyDataSourceForWorkspace(workspaceId); } private async seedWorkflowViews( diff --git a/packages/twenty-server/src/database/typeorm/metadata/migrations/1738233783889-addNewSyncStatusToServerless.ts b/packages/twenty-server/src/database/typeorm/metadata/migrations/1738233783889-addNewSyncStatusToServerless.ts new file mode 100644 index 000000000000..9e73cdf36483 --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/metadata/migrations/1738233783889-addNewSyncStatusToServerless.ts @@ -0,0 +1,49 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddNewSyncStatusToServerless1738233783889 + implements MigrationInterface +{ + name = 'AddNewSyncStatusToServerless1738233783889'; + + public async up(queryRunner: QueryRunner): Promise<void> { + await queryRunner.query( + `ALTER TYPE "metadata"."serverlessFunction_syncstatus_enum" RENAME TO "serverlessFunction_syncstatus_enum_old"`, + ); + await queryRunner.query( + `CREATE TYPE "metadata"."serverlessFunction_syncstatus_enum" AS ENUM('NOT_READY', 'BUILDING', 'READY')`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."serverlessFunction" ALTER COLUMN "syncStatus" DROP DEFAULT`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."serverlessFunction" ALTER COLUMN "syncStatus" TYPE "metadata"."serverlessFunction_syncstatus_enum" USING "syncStatus"::"text"::"metadata"."serverlessFunction_syncstatus_enum"`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."serverlessFunction" ALTER COLUMN "syncStatus" SET DEFAULT 'NOT_READY'`, + ); + await queryRunner.query( + `DROP TYPE "metadata"."serverlessFunction_syncstatus_enum_old"`, + ); + } + + public async down(queryRunner: QueryRunner): Promise<void> { + await queryRunner.query( + `CREATE TYPE "metadata"."serverlessFunction_syncstatus_enum_old" AS ENUM('NOT_READY', 'READY')`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."serverlessFunction" ALTER COLUMN "syncStatus" DROP DEFAULT`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."serverlessFunction" ALTER COLUMN "syncStatus" TYPE "metadata"."serverlessFunction_syncstatus_enum_old" USING "syncStatus"::"text"::"metadata"."serverlessFunction_syncstatus_enum_old"`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."serverlessFunction" ALTER COLUMN "syncStatus" SET DEFAULT 'NOT_READY'`, + ); + await queryRunner.query( + `DROP TYPE "metadata"."serverlessFunction_syncstatus_enum"`, + ); + await queryRunner.query( + `ALTER TYPE "metadata"."serverlessFunction_syncstatus_enum_old" RENAME TO "serverlessFunction_syncstatus_enum"`, + ); + } +} diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/object-records-to-graphql-connection.helper.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/object-records-to-graphql-connection.helper.ts index bcf2a5fef4f4..93cf0238613c 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/object-records-to-graphql-connection.helper.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/object-records-to-graphql-connection.helper.ts @@ -1,4 +1,4 @@ -import { FieldMetadataType } from 'twenty-shared'; +import { FieldMetadataType, isDefined } from 'twenty-shared'; import { ObjectRecord, @@ -24,7 +24,6 @@ import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-met import { getObjectMetadataMapItemByNameSingular } from 'src/engine/metadata-modules/utils/get-object-metadata-map-item-by-name-singular.util'; import { CompositeFieldMetadataType } from 'src/engine/metadata-modules/workspace-migration/factories/composite-column-action.factory'; import { isRelationFieldMetadataType } from 'src/engine/utils/is-relation-field-metadata-type.util'; -import { isDefined } from 'src/utils/is-defined'; import { isPlainObject } from 'src/utils/is-plain-object'; export class ObjectRecordsToGraphqlConnectionHelper { diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-aggregate.helper.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-aggregate.helper.ts index c5fad015fa4b..6911040dcc4d 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-aggregate.helper.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/helpers/process-aggregate.helper.ts @@ -1,11 +1,11 @@ import { Injectable } from '@nestjs/common'; import { SelectQueryBuilder } from 'typeorm'; +import { isDefined } from 'twenty-shared'; import { AGGREGATE_OPERATIONS } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { AggregationField } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-available-aggregations-from-object-fields.util'; import { formatColumnNamesFromCompositeFieldAndSubfields } from 'src/engine/twenty-orm/utils/format-column-names-from-composite-field-and-subfield.util'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class ProcessAggregateHelper { diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-many-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-many-resolver.service.ts index 9f81c733d63c..c379e61a0158 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-many-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-find-many-resolver.service.ts @@ -1,5 +1,7 @@ import { Injectable } from '@nestjs/common'; +import { isDefined } from 'twenty-shared'; + import { GraphqlQueryBaseResolverService, GraphqlQueryResolverExecutionArgs, @@ -27,7 +29,6 @@ import { getPaginationInfo, } from 'src/engine/api/graphql/graphql-query-runner/utils/cursors.util'; import { formatResult } from 'src/engine/twenty-orm/utils/format-result.util'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class GraphqlQueryFindManyResolverService extends GraphqlQueryBaseResolverService< diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-search-resolver.service.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-search-resolver.service.ts index 0957978f0674..1ab52158c753 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-search-resolver.service.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/resolvers/graphql-query-search-resolver.service.ts @@ -1,6 +1,7 @@ import { Injectable } from '@nestjs/common'; import { Brackets } from 'typeorm'; +import { isDefined } from 'twenty-shared'; import { GraphqlQueryBaseResolverService, @@ -19,7 +20,6 @@ import { QUERY_MAX_RECORDS } from 'src/engine/api/graphql/graphql-query-runner/c import { ObjectRecordsToGraphqlConnectionHelper } from 'src/engine/api/graphql/graphql-query-runner/helpers/object-records-to-graphql-connection.helper'; import { SEARCH_VECTOR_FIELD } from 'src/engine/metadata-modules/constants/search-vector-field.constants'; import { formatResult } from 'src/engine/twenty-orm/utils/format-result.util'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class GraphqlQuerySearchResolverService extends GraphqlQueryBaseResolverService< diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/query-result-getters.factory.ts b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/query-result-getters.factory.ts index 1be177ba4419..4af65cb52f75 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/query-result-getters.factory.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/query-result-getters.factory.ts @@ -1,5 +1,7 @@ import { Injectable, Logger } from '@nestjs/common'; +import { isDefined } from 'twenty-shared'; + import { ObjectRecord } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface'; import { QueryResultFieldValue } from 'src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/interfaces/query-result-field-value'; import { QueryResultGetterHandlerInterface } from 'src/engine/api/graphql/workspace-query-runner/factories/query-result-getters/interfaces/query-result-getter-handler.interface'; @@ -21,7 +23,6 @@ import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/service import { FileService } from 'src/engine/core-modules/file/services/file.service'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { isRelationFieldMetadata } from 'src/engine/utils/is-relation-field-metadata.util'; -import { isDefined } from 'src/utils/is-defined'; // TODO: find a way to prevent conflict between handlers executing logic on object relations // And this factory that is also executing logic on object relations diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/utils/with-soft-deleted.util.ts b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/utils/with-soft-deleted.util.ts index 0ed2d7391821..5eab6be3b232 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/utils/with-soft-deleted.util.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/utils/with-soft-deleted.util.ts @@ -1,6 +1,6 @@ -import { ObjectRecordFilter } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface'; +import { isDefined } from 'twenty-shared'; -import { isDefined } from 'src/utils/is-defined'; +import { ObjectRecordFilter } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface'; export const withSoftDeleted = <T extends ObjectRecordFilter>( filter: T | undefined | null, diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/utils/workspace-query-runner-graphql-api-exception-handler.util.ts b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/utils/workspace-query-runner-graphql-api-exception-handler.util.ts index 4a201a82c1c5..cd0002d43c27 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/utils/workspace-query-runner-graphql-api-exception-handler.util.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-query-runner/utils/workspace-query-runner-graphql-api-exception-handler.util.ts @@ -1,4 +1,5 @@ import { QueryFailedError } from 'typeorm'; +import { isDefined } from 'twenty-shared'; import { WorkspaceQueryRunnerOptions } from 'src/engine/api/graphql/workspace-query-runner/interfaces/query-runner-option.interface'; @@ -17,7 +18,6 @@ import { TimeoutError, UserInputError, } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; -import { isDefined } from 'src/utils/is-defined'; export const workspaceQueryRunnerGraphqlApiExceptionHandler = ( error: Error, diff --git a/packages/twenty-server/src/engine/api/rest/core/query-builder/utils/filter-utils/format-field-values.utils.ts b/packages/twenty-server/src/engine/api/rest/core/query-builder/utils/filter-utils/format-field-values.utils.ts index 33052ef834c8..13b53e9eace2 100644 --- a/packages/twenty-server/src/engine/api/rest/core/query-builder/utils/filter-utils/format-field-values.utils.ts +++ b/packages/twenty-server/src/engine/api/rest/core/query-builder/utils/filter-utils/format-field-values.utils.ts @@ -1,9 +1,8 @@ import { BadRequestException } from '@nestjs/common'; -import { FieldMetadataType } from 'twenty-shared'; +import { FieldMetadataType, isDefined } from 'twenty-shared'; import { FieldValue } from 'src/engine/api/rest/core/types/field-value.type'; -import { isDefined } from 'src/utils/is-defined'; export const formatFieldValue = ( value: string, diff --git a/packages/twenty-server/src/engine/core-modules/auth/auth.exception.ts b/packages/twenty-server/src/engine/core-modules/auth/auth.exception.ts index e5d4e03a55ea..ef6d2f3e9d54 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/auth.exception.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/auth.exception.ts @@ -8,6 +8,7 @@ export class AuthException extends CustomException { export enum AuthExceptionCode { USER_NOT_FOUND = 'USER_NOT_FOUND', + USER_WORKSPACE_NOT_FOUND = 'USER_WORKSPACE_NOT_FOUND', EMAIL_NOT_VERIFIED = 'EMAIL_NOT_VERIFIED', CLIENT_NOT_FOUND = 'CLIENT_NOT_FOUND', WORKSPACE_NOT_FOUND = 'WORKSPACE_NOT_FOUND', diff --git a/packages/twenty-server/src/engine/core-modules/auth/auth.module.ts b/packages/twenty-server/src/engine/core-modules/auth/auth.module.ts index eb6fa57dbe68..19516d0460db 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/auth.module.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/auth.module.ts @@ -29,11 +29,13 @@ import { EmailVerificationModule } from 'src/engine/core-modules/email-verificat import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { FileUploadModule } from 'src/engine/core-modules/file/file-upload/file-upload.module'; +import { GuardRedirectModule } from 'src/engine/core-modules/guard-redirect/guard-redirect.module'; import { JwtModule } from 'src/engine/core-modules/jwt/jwt.module'; import { KeyValuePair } from 'src/engine/core-modules/key-value-pair/key-value-pair.entity'; import { OnboardingModule } from 'src/engine/core-modules/onboarding/onboarding.module'; import { WorkspaceSSOModule } from 'src/engine/core-modules/sso/sso.module'; import { WorkspaceSSOIdentityProvider } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; +import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module'; import { User } from 'src/engine/core-modules/user/user.entity'; import { UserModule } from 'src/engine/core-modules/user/user.module'; @@ -45,7 +47,6 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module'; import { WorkspaceManagerModule } from 'src/engine/workspace-manager/workspace-manager.module'; import { ConnectedAccountModule } from 'src/modules/connected-account/connected-account.module'; -import { GuardRedirectModule } from 'src/engine/core-modules/guard-redirect/guard-redirect.module'; import { AuthResolver } from './auth.resolver'; @@ -70,6 +71,7 @@ import { JwtAuthStrategy } from './strategies/jwt.auth.strategy'; FeatureFlag, WorkspaceSSOIdentityProvider, KeyValuePair, + UserWorkspace, ], 'core', ), diff --git a/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.ts b/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.ts index 49cb5a43fe93..cf7db2ac6c2a 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/auth.resolver.ts @@ -1,5 +1,5 @@ import { UseFilters, UseGuards } from '@nestjs/common'; -import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; +import { Args, Context, Mutation, Query, Resolver } from '@nestjs/graphql'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; @@ -33,6 +33,7 @@ import { TransientTokenService } from 'src/engine/core-modules/auth/token/servic import { CaptchaGuard } from 'src/engine/core-modules/captcha/captcha.guard'; import { DomainManagerService } from 'src/engine/core-modules/domain-manager/services/domain-manager.service'; import { EmailVerificationService } from 'src/engine/core-modules/email-verification/services/email-verification.service'; +import { I18nContext } from 'src/engine/core-modules/i18n/types/i18n-context.type'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { UserService } from 'src/engine/core-modules/user/services/user.service'; import { User } from 'src/engine/core-modules/user/user.entity'; @@ -336,6 +337,7 @@ export class AuthResolver { @Mutation(() => EmailPasswordResetLink) async emailPasswordResetLink( @Args() emailPasswordResetInput: EmailPasswordResetLinkInput, + @Context() context: I18nContext, ): Promise<EmailPasswordResetLink> { const resetToken = await this.resetPasswordService.generatePasswordResetToken( @@ -345,6 +347,7 @@ export class AuthResolver { return await this.resetPasswordService.sendEmailPasswordResetLink( resetToken, emailPasswordResetInput.email, + context.req.headers['x-locale'] || 'en', ); } @@ -352,13 +355,18 @@ export class AuthResolver { async updatePasswordViaResetToken( @Args() { passwordResetToken, newPassword }: UpdatePasswordViaResetTokenInput, + @Context() context: I18nContext, ): Promise<InvalidatePassword> { const { id } = await this.resetPasswordService.validatePasswordResetToken( passwordResetToken, ); - await this.authService.updatePassword(id, newPassword); + await this.authService.updatePassword( + id, + newPassword, + context.req.headers['x-locale'] || 'en', + ); return await this.resetPasswordService.invalidatePasswordResetToken(id); } diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.ts b/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.ts index 072a1d93f2de..d5ba7fcadd2a 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/auth.service.ts @@ -3,10 +3,11 @@ import { InjectRepository } from '@nestjs/typeorm'; import crypto from 'node:crypto'; -import { render } from '@react-email/components'; +import { render } from '@react-email/render'; import { addMilliseconds } from 'date-fns'; import ms from 'ms'; import { PasswordUpdateNotifyEmail } from 'twenty-emails'; +import { APP_LOCALES } from 'twenty-shared'; import { Repository } from 'typeorm'; import { NodeEnvironment } from 'src/engine/core-modules/environment/interfaces/node-environment.interface'; @@ -379,6 +380,7 @@ export class AuthService { async updatePassword( userId: string, newPassword: string, + locale: keyof typeof APP_LOCALES, ): Promise<UpdatePassword> { if (!userId) { throw new AuthException( @@ -415,14 +417,11 @@ export class AuthService { userName: `${user.firstName} ${user.lastName}`, email: user.email, link: this.domainManagerService.getBaseUrl().toString(), + locale, }); - const html = render(emailTemplate, { - pretty: true, - }); - const text = render(emailTemplate, { - plainText: true, - }); + const html = render(emailTemplate, { pretty: true }); + const text = render(emailTemplate, { plainText: true }); this.emailService.send({ from: `${this.environmentService.get( diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.spec.ts index 237964556eca..30d4ff074c53 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.spec.ts @@ -9,11 +9,11 @@ import { AppTokenType, } from 'src/engine/core-modules/app-token/app-token.entity'; import { AuthException } from 'src/engine/core-modules/auth/auth.exception'; +import { DomainManagerService } from 'src/engine/core-modules/domain-manager/services/domain-manager.service'; import { EmailService } from 'src/engine/core-modules/email/email.service'; import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service'; import { User } from 'src/engine/core-modules/user/user.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; -import { DomainManagerService } from 'src/engine/core-modules/domain-manager/services/domain-manager.service'; import { ResetPasswordService } from './reset-password.service'; @@ -149,6 +149,7 @@ describe('ResetPasswordService', () => { const result = await service.sendEmailPasswordResetLink( mockToken, 'test@example.com', + 'en', ); expect(result.success).toBe(true); @@ -162,6 +163,7 @@ describe('ResetPasswordService', () => { service.sendEmailPasswordResetLink( {} as any, 'nonexistent@example.com', + 'en', ), ).rejects.toThrow(AuthException); }); diff --git a/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.ts b/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.ts index df84d6f0c304..4d016878e976 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/services/reset-password.service.ts @@ -7,6 +7,7 @@ import { render } from '@react-email/render'; import { addMilliseconds, differenceInMilliseconds } from 'date-fns'; import ms from 'ms'; import { PasswordResetLinkEmail } from 'twenty-emails'; +import { APP_LOCALES } from 'twenty-shared'; import { IsNull, MoreThan, Repository } from 'typeorm'; import { @@ -106,6 +107,7 @@ export class ResetPasswordService { async sendEmailPasswordResetLink( resetToken: PasswordResetToken, email: string, + locale: keyof typeof APP_LOCALES, ): Promise<EmailPasswordResetLink> { const user = await this.userRepository.findOneBy({ email, @@ -133,16 +135,13 @@ export class ResetPasswordService { long: true, }, ), + locale, }; const emailTemplate = PasswordResetLinkEmail(emailData); - const html = render(emailTemplate, { - pretty: true, - }); - const text = render(emailTemplate, { - plainText: true, - }); + const html = render(emailTemplate, { pretty: true }); + const text = render(emailTemplate, { plainText: true }); this.emailService.send({ from: `${this.environmentService.get( diff --git a/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts index 168e1c574619..192fbe176293 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts @@ -3,6 +3,7 @@ import { AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; import { JwtPayload } from 'src/engine/core-modules/auth/types/auth-context.type'; +import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { JwtAuthStrategy } from './jwt.auth.strategy'; @@ -11,6 +12,7 @@ describe('JwtAuthStrategy', () => { let strategy: JwtAuthStrategy; let workspaceRepository: any; + let userWorkspaceRepository: any; let userRepository: any; let dataSourceService: any; let typeORMService: any; @@ -27,6 +29,10 @@ describe('JwtAuthStrategy', () => { findOne: jest.fn(async () => null), }; + userWorkspaceRepository = { + findOne: jest.fn(async () => new UserWorkspace()), + }; + // first we test the API_KEY case it('should throw AuthException if type is API_KEY and workspace is not found', async () => { const payload = { @@ -45,6 +51,7 @@ describe('JwtAuthStrategy', () => { dataSourceService, workspaceRepository, {} as any, + userWorkspaceRepository, ); await expect(strategy.validate(payload as JwtPayload)).rejects.toThrow( @@ -80,6 +87,7 @@ describe('JwtAuthStrategy', () => { dataSourceService, workspaceRepository, {} as any, + userWorkspaceRepository, ); await expect(strategy.validate(payload as JwtPayload)).rejects.toThrow( @@ -117,6 +125,7 @@ describe('JwtAuthStrategy', () => { dataSourceService, workspaceRepository, {} as any, + userWorkspaceRepository, ); const result = await strategy.validate(payload as JwtPayload); @@ -148,6 +157,7 @@ describe('JwtAuthStrategy', () => { dataSourceService, workspaceRepository, userRepository, + userWorkspaceRepository, ); await expect(strategy.validate(payload as JwtPayload)).rejects.toThrow( @@ -160,7 +170,7 @@ describe('JwtAuthStrategy', () => { } }); - it('should be truthy if type is ACCESS, no jti, and user exist', async () => { + it('should throw AuthExceptionCode if type is ACCESS, no jti, and userWorkspace not found', async () => { const payload = { sub: 'sub-default', type: 'ACCESS', @@ -174,6 +184,50 @@ describe('JwtAuthStrategy', () => { findOne: jest.fn(async () => ({ lastName: 'lastNameDefault' })), }; + userWorkspaceRepository = { + findOne: jest.fn(async () => null), + }; + + strategy = new JwtAuthStrategy( + {} as any, + {} as any, + typeORMService, + dataSourceService, + workspaceRepository, + userRepository, + userWorkspaceRepository, + ); + + await expect(strategy.validate(payload as JwtPayload)).rejects.toThrow( + new AuthException('UserWorkspace not found', expect.any(String)), + ); + try { + await strategy.validate(payload as JwtPayload); + } catch (e) { + expect(e.code).toBe(AuthExceptionCode.USER_WORKSPACE_NOT_FOUND); + } + }); + + it('should be truthy if type is ACCESS, no jti, and user and userWorkspace exist', async () => { + const payload = { + sub: 'sub-default', + type: 'ACCESS', + }; + + workspaceRepository = { + findOneBy: jest.fn(async () => new Workspace()), + }; + + userRepository = { + findOne: jest.fn(async () => ({ lastName: 'lastNameDefault' })), + }; + + userWorkspaceRepository = { + findOne: jest.fn(async () => ({ + id: 'userWorkspaceId', + })), + }; + strategy = new JwtAuthStrategy( {} as any, {} as any, @@ -181,10 +235,12 @@ describe('JwtAuthStrategy', () => { dataSourceService, workspaceRepository, userRepository, + userWorkspaceRepository, ); const user = await strategy.validate(payload as JwtPayload); expect(user.user?.lastName).toBe('lastNameDefault'); + expect(user.userWorkspaceId).toBe('userWorkspaceId'); }); }); diff --git a/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.ts b/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.ts index ae6c9906148d..d72cadb88204 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.ts @@ -16,6 +16,7 @@ import { } from 'src/engine/core-modules/auth/types/auth-context.type'; import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; +import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { User } from 'src/engine/core-modules/user/user.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; @@ -32,6 +33,8 @@ export class JwtAuthStrategy extends PassportStrategy(Strategy, 'jwt') { private readonly workspaceRepository: Repository<Workspace>, @InjectRepository(User, 'core') private readonly userRepository: Repository<User>, + @InjectRepository(UserWorkspace, 'core') + private readonly userWorkspaceRepository: Repository<UserWorkspace>, ) { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), @@ -117,7 +120,20 @@ export class JwtAuthStrategy extends PassportStrategy(Strategy, 'jwt') { ); } - return { user, workspace }; + const userWorkspace = await this.userWorkspaceRepository.findOne({ + where: { + id: payload.userWorkspaceId, + }, + }); + + if (!userWorkspace) { + throw new AuthException( + 'UserWorkspace not found', + AuthExceptionCode.USER_WORKSPACE_NOT_FOUND, + ); + } + + return { user, workspace, userWorkspaceId: userWorkspace.id }; } async validate(payload: JwtPayload): Promise<AuthContext> { diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.spec.ts index 43438bb5d00f..29aa566c2918 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.spec.ts @@ -12,6 +12,7 @@ import { EmailService } from 'src/engine/core-modules/email/email.service'; import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; import { SSOService } from 'src/engine/core-modules/sso/services/sso.service'; +import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { User } from 'src/engine/core-modules/user/user.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager'; @@ -25,6 +26,7 @@ describe('AccessTokenService', () => { let userRepository: Repository<User>; let workspaceRepository: Repository<Workspace>; let twentyORMGlobalManager: TwentyORMGlobalManager; + let userWorkspaceRepository: Repository<UserWorkspace>; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -63,6 +65,10 @@ describe('AccessTokenService', () => { provide: getRepositoryToken(Workspace, 'core'), useClass: Repository, }, + { + provide: getRepositoryToken(UserWorkspace, 'core'), + useClass: Repository, + }, { provide: EmailService, useValue: {}, @@ -92,6 +98,9 @@ describe('AccessTokenService', () => { twentyORMGlobalManager = module.get<TwentyORMGlobalManager>( TwentyORMGlobalManager, ); + userWorkspaceRepository = module.get<Repository<UserWorkspace>>( + getRepositoryToken(UserWorkspace, 'core'), + ); }); it('should be defined', () => { @@ -109,6 +118,7 @@ describe('AccessTokenService', () => { activationStatus: WorkspaceActivationStatus.ACTIVE, id: workspaceId, }; + const mockUserWorkspace = { id: 'userWorkspaceId' }; const mockWorkspaceMember = { id: 'workspace-member-id' }; const mockToken = 'mock-token'; @@ -117,6 +127,9 @@ describe('AccessTokenService', () => { jest .spyOn(workspaceRepository, 'findOne') .mockResolvedValue(mockWorkspace as Workspace); + jest + .spyOn(userWorkspaceRepository, 'findOne') + .mockResolvedValue(mockUserWorkspace as UserWorkspace); jest .spyOn(twentyORMGlobalManager, 'getRepositoryForWorkspace') .mockResolvedValue({ diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.ts b/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.ts index 09dc96cd6246..59f147d438db 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/services/access-token.service.ts @@ -20,6 +20,7 @@ import { } from 'src/engine/core-modules/auth/types/auth-context.type'; import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service'; import { JwtWrapperService } from 'src/engine/core-modules/jwt/services/jwt-wrapper.service'; +import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; import { User } from 'src/engine/core-modules/user/user.entity'; import { userValidator } from 'src/engine/core-modules/user/user.validate'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; @@ -38,6 +39,8 @@ export class AccessTokenService { @InjectRepository(Workspace, 'core') private readonly workspaceRepository: Repository<Workspace>, private readonly twentyORMGlobalManager: TwentyORMGlobalManager, + @InjectRepository(UserWorkspace, 'core') + private readonly userWorkspaceRepository: Repository<UserWorkspace>, ) {} async generateAccessToken( @@ -87,11 +90,18 @@ export class AccessTokenService { tokenWorkspaceMemberId = workspaceMember.id; } + const userWorkspace = await this.userWorkspaceRepository.findOne({ + where: { + userId: user.id, + workspaceId, + }, + }); const jwtPayload: JwtPayload = { sub: user.id, workspaceId, workspaceMemberId: tokenWorkspaceMemberId, + userWorkspaceId: userWorkspace?.id, }; return { @@ -108,10 +118,10 @@ export class AccessTokenService { const decoded = await this.jwtWrapperService.decode(token); - const { user, apiKey, workspace, workspaceMemberId } = + const { user, apiKey, workspace, workspaceMemberId, userWorkspaceId } = await this.jwtStrategy.validate(decoded as JwtPayload); - return { user, apiKey, workspace, workspaceMemberId }; + return { user, apiKey, workspace, workspaceMemberId, userWorkspaceId }; } async validateTokenByRequest(request: Request): Promise<AuthContext> { diff --git a/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts b/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts index 2ad512b8b51c..79a9ccce56ca 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/token/token.module.ts @@ -12,15 +12,19 @@ import { RenewTokenService } from 'src/engine/core-modules/auth/token/services/r import { EmailModule } from 'src/engine/core-modules/email/email.module'; import { JwtModule } from 'src/engine/core-modules/jwt/jwt.module'; import { WorkspaceSSOModule } from 'src/engine/core-modules/sso/sso.module'; +import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module'; import { User } from 'src/engine/core-modules/user/user.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; -import { UserWorkspaceModule } from 'src/engine/core-modules/user-workspace/user-workspace.module'; @Module({ imports: [ JwtModule, - TypeOrmModule.forFeature([User, AppToken, Workspace], 'core'), + TypeOrmModule.forFeature( + [User, AppToken, Workspace, UserWorkspace], + 'core', + ), TypeORMModule, DataSourceModule, EmailModule, diff --git a/packages/twenty-server/src/engine/core-modules/auth/types/auth-context.type.ts b/packages/twenty-server/src/engine/core-modules/auth/types/auth-context.type.ts index 5bbcfbca6557..9174f7cf021b 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/types/auth-context.type.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/types/auth-context.type.ts @@ -8,6 +8,7 @@ export type AuthContext = { apiKey?: ApiKeyWorkspaceEntity | null | undefined; workspaceMemberId?: string; workspace: Workspace; + userWorkspaceId?: string; }; export type JwtPayload = { @@ -16,4 +17,5 @@ export type JwtPayload = { workspaceMemberId?: string; jti?: string; type?: WorkspaceTokenType; + userWorkspaceId?: string; }; diff --git a/packages/twenty-server/src/engine/core-modules/domain-manager/services/domain-manager.service.ts b/packages/twenty-server/src/engine/core-modules/domain-manager/services/domain-manager.service.ts index f0577cff23f6..6f51204f0c56 100644 --- a/packages/twenty-server/src/engine/core-modules/domain-manager/services/domain-manager.service.ts +++ b/packages/twenty-server/src/engine/core-modules/domain-manager/services/domain-manager.service.ts @@ -1,21 +1,21 @@ import { Injectable, Logger } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; import Cloudflare from 'cloudflare'; +import { Repository } from 'typeorm'; +import { isDefined } from 'twenty-shared'; -import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service'; -import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; -import { isDefined } from 'src/utils/is-defined'; -import { domainManagerValidator } from 'src/engine/core-modules/domain-manager/validator/cloudflare.validate'; import { DomainManagerException, DomainManagerExceptionCode, } from 'src/engine/core-modules/domain-manager/domain-manager.exception'; +import { CustomHostnameDetails } from 'src/engine/core-modules/domain-manager/dtos/custom-hostname-details'; import { generateRandomSubdomain } from 'src/engine/core-modules/domain-manager/utils/generate-random-subdomain'; -import { getSubdomainNameFromDisplayName } from 'src/engine/core-modules/domain-manager/utils/get-subdomain-name-from-display-name'; import { getSubdomainFromEmail } from 'src/engine/core-modules/domain-manager/utils/get-subdomain-from-email'; -import { CustomHostnameDetails } from 'src/engine/core-modules/domain-manager/dtos/custom-hostname-details'; +import { getSubdomainNameFromDisplayName } from 'src/engine/core-modules/domain-manager/utils/get-subdomain-name-from-display-name'; +import { domainManagerValidator } from 'src/engine/core-modules/domain-manager/validator/cloudflare.validate'; +import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service'; +import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; @Injectable() export class DomainManagerService { diff --git a/packages/twenty-server/src/engine/core-modules/domain-manager/utils/get-subdomain-from-email.ts b/packages/twenty-server/src/engine/core-modules/domain-manager/utils/get-subdomain-from-email.ts index 9e5a3ea1118c..0f6232ab81e8 100644 --- a/packages/twenty-server/src/engine/core-modules/domain-manager/utils/get-subdomain-from-email.ts +++ b/packages/twenty-server/src/engine/core-modules/domain-manager/utils/get-subdomain-from-email.ts @@ -1,6 +1,7 @@ -import { isDefined } from 'src/utils/is-defined'; -import { isWorkEmail } from 'src/utils/is-work-email'; +import { isDefined } from 'twenty-shared'; + import { getDomainNameByEmail } from 'src/utils/get-domain-name-by-email'; +import { isWorkEmail } from 'src/utils/is-work-email'; export const getSubdomainFromEmail = (email?: string) => { if (!isDefined(email) || !isWorkEmail(email)) return; diff --git a/packages/twenty-server/src/engine/core-modules/domain-manager/utils/get-subdomain-name-from-display-name.ts b/packages/twenty-server/src/engine/core-modules/domain-manager/utils/get-subdomain-name-from-display-name.ts index e53b20eac8b1..dbe6f71d7c82 100644 --- a/packages/twenty-server/src/engine/core-modules/domain-manager/utils/get-subdomain-name-from-display-name.ts +++ b/packages/twenty-server/src/engine/core-modules/domain-manager/utils/get-subdomain-name-from-display-name.ts @@ -1,4 +1,4 @@ -import { isDefined } from 'src/utils/is-defined'; +import { isDefined } from 'twenty-shared'; export const getSubdomainNameFromDisplayName = (displayName?: string) => { if (!isDefined(displayName)) return; diff --git a/packages/twenty-server/src/engine/core-modules/email-verification/services/email-verification.service.ts b/packages/twenty-server/src/engine/core-modules/email-verification/services/email-verification.service.ts index 1d31398bc3b8..31c424656b92 100644 --- a/packages/twenty-server/src/engine/core-modules/email-verification/services/email-verification.service.ts +++ b/packages/twenty-server/src/engine/core-modules/email-verification/services/email-verification.service.ts @@ -5,6 +5,7 @@ import { render } from '@react-email/render'; import { addMilliseconds, differenceInMilliseconds } from 'date-fns'; import ms from 'ms'; import { SendEmailVerificationLinkEmail } from 'twenty-emails'; +import { APP_LOCALES } from 'twenty-shared'; import { Repository } from 'typeorm'; import { @@ -55,13 +56,12 @@ export class EmailVerificationService { const emailData = { link: verificationLink.toString(), + locale: 'en' as keyof typeof APP_LOCALES, }; const emailTemplate = SendEmailVerificationLinkEmail(emailData); - const html = render(emailTemplate, { - pretty: true, - }); + const html = render(emailTemplate); const text = render(emailTemplate, { plainText: true, diff --git a/packages/twenty-server/src/engine/core-modules/email/email-sender.job.ts b/packages/twenty-server/src/engine/core-modules/email/email-sender.job.ts index 85203d80bdb6..b85bc158975a 100644 --- a/packages/twenty-server/src/engine/core-modules/email/email-sender.job.ts +++ b/packages/twenty-server/src/engine/core-modules/email/email-sender.job.ts @@ -1,9 +1,9 @@ import { SendMailOptions } from 'nodemailer'; import { EmailSenderService } from 'src/engine/core-modules/email/email-sender.service'; -import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; -import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; +import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; +import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; @Processor(MessageQueue.emailQueue) export class EmailSenderJob { diff --git a/packages/twenty-server/src/engine/core-modules/email/email.service.ts b/packages/twenty-server/src/engine/core-modules/email/email.service.ts index 6aa24c1e6688..2a223415ca13 100644 --- a/packages/twenty-server/src/engine/core-modules/email/email.service.ts +++ b/packages/twenty-server/src/engine/core-modules/email/email.service.ts @@ -2,10 +2,10 @@ import { Injectable } from '@nestjs/common'; import { SendMailOptions } from 'nodemailer'; -import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; -import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; import { EmailSenderJob } from 'src/engine/core-modules/email/email-sender.job'; import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator'; +import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; +import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; @Injectable() export class EmailService { diff --git a/packages/twenty-server/src/engine/core-modules/feature-flag/validates/feature-flag.validate.ts b/packages/twenty-server/src/engine/core-modules/feature-flag/validates/feature-flag.validate.ts index 9022ccea33fe..93d8867191ff 100644 --- a/packages/twenty-server/src/engine/core-modules/feature-flag/validates/feature-flag.validate.ts +++ b/packages/twenty-server/src/engine/core-modules/feature-flag/validates/feature-flag.validate.ts @@ -1,6 +1,7 @@ +import { isDefined } from 'twenty-shared'; + import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { CustomException } from 'src/utils/custom-exception'; -import { isDefined } from 'src/utils/is-defined'; const assertIsFeatureFlagKey = ( featureFlagKey: string, diff --git a/packages/twenty-server/src/engine/core-modules/file-storage/drivers/s3.driver.ts b/packages/twenty-server/src/engine/core-modules/file-storage/drivers/s3.driver.ts index 766be0b13b80..2f2d34952c7b 100644 --- a/packages/twenty-server/src/engine/core-modules/file-storage/drivers/s3.driver.ts +++ b/packages/twenty-server/src/engine/core-modules/file-storage/drivers/s3.driver.ts @@ -1,7 +1,7 @@ -import { Readable } from 'stream'; import fs from 'fs'; import { mkdir } from 'fs/promises'; import { join } from 'path'; +import { Readable } from 'stream'; import { pipeline } from 'stream/promises'; import { @@ -18,14 +18,13 @@ import { S3, S3ClientConfig, } from '@aws-sdk/client-s3'; +import { isDefined } from 'twenty-shared'; +import { StorageDriver } from 'src/engine/core-modules/file-storage/drivers/interfaces/storage-driver.interface'; import { FileStorageException, FileStorageExceptionCode, } from 'src/engine/core-modules/file-storage/interfaces/file-storage-exception'; -import { StorageDriver } from 'src/engine/core-modules/file-storage/drivers/interfaces/storage-driver.interface'; - -import { isDefined } from 'src/utils/is-defined'; export interface S3DriverOptions extends S3ClientConfig { bucketName: string; diff --git a/packages/twenty-server/src/engine/core-modules/i18n/i18n.service.ts b/packages/twenty-server/src/engine/core-modules/i18n/i18n.service.ts index fdc35b9792e2..e15c7cb7968d 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/i18n.service.ts +++ b/packages/twenty-server/src/engine/core-modules/i18n/i18n.service.ts @@ -7,15 +7,17 @@ import { messages as enMessages } from 'src/engine/core-modules/i18n/locales/gen import { messages as esMessages } from 'src/engine/core-modules/i18n/locales/generated/es'; import { messages as frMessages } from 'src/engine/core-modules/i18n/locales/generated/fr'; import { messages as itMessages } from 'src/engine/core-modules/i18n/locales/generated/it'; +import { messages as jaMessages } from 'src/engine/core-modules/i18n/locales/generated/ja'; import { messages as koMessages } from 'src/engine/core-modules/i18n/locales/generated/ko'; import { messages as pseudoEnMessages } from 'src/engine/core-modules/i18n/locales/generated/pseudo-en'; import { messages as ptBRMessages } from 'src/engine/core-modules/i18n/locales/generated/pt-BR'; import { messages as ptPTMessages } from 'src/engine/core-modules/i18n/locales/generated/pt-PT'; import { messages as zhHansMessages } from 'src/engine/core-modules/i18n/locales/generated/zh-Hans'; import { messages as zhHantMessages } from 'src/engine/core-modules/i18n/locales/generated/zh-Hant'; + @Injectable() export class I18nService implements OnModuleInit { - async onModuleInit() { + async loadTranslations() { i18n.load('en', enMessages); i18n.load('fr', frMessages); i18n.load('pseudo-en', pseudoEnMessages); @@ -23,6 +25,7 @@ export class I18nService implements OnModuleInit { i18n.load('de', deMessages); i18n.load('it', itMessages); i18n.load('es', esMessages); + i18n.load('ja', jaMessages); i18n.load('pt-PT', ptPTMessages); i18n.load('pt-BR', ptBRMessages); i18n.load('zh-Hans', zhHansMessages); @@ -30,4 +33,8 @@ export class I18nService implements OnModuleInit { i18n.activate('en'); } + + async onModuleInit() { + this.loadTranslations(); + } } diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/de.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/de.po index 0fa6e8d4600d..c46038b7e0c4 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/de.po +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/de.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 13:59+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/es.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/es.po index b5c43f46e803..8990d6a4bfce 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/es.po +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/es.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 13:59+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/fr.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/fr.po index 9024277a0712..1d0ede2085b2 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/fr.po +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/fr.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 13:59+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/generated/ja.ts b/packages/twenty-server/src/engine/core-modules/i18n/locales/generated/ja.ts new file mode 100644 index 000000000000..8dd00e59f34e --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/generated/ja.ts @@ -0,0 +1 @@ +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"Qyrd7v\":[\"(System) View Fields\"],\"9Y3fTB\":[\"(System) View Filter Groups\"],\"TB2jLV\":[\"(System) View Filters\"],\"Y7M7Ro\":[\"(System) View Groups\"],\"9vliLw\":[\"(System) View Sorts\"],\"5B59WE\":[\"(System) Views\"],\"kZR6+h\":[\"A company\"],\"+aeifv\":[\"A connected account\"],\"HCoswz\":[\"A favorite that can be accessed from the left menu\"],\"6w8bHl\":[\"A Folder of favorites\"],\"sSGYmf\":[\"A group of related messages (e.g. email thread, chat thread)\"],\"vZj1Xc\":[\"A message sent or received through a messaging channel (email, chat, etc.)\"],\"bufuBA\":[\"A note\"],\"6kUkZW\":[\"A note target\"],\"Io42ej\":[\"A person\"],\"mkFXEH\":[\"A task\"],\"hk2NzW\":[\"A task target\"],\"HTSJFW\":[\"A webhook\"],\"ZIN9Ga\":[\"A workflow\"],\"juBVjt\":[\"A workflow event listener\"],\"1+xDbI\":[\"A workflow run\"],\"N0g7rp\":[\"A workflow version\"],\"HpZ/I5\":[\"A workspace member\"],\"GDKKxT\":[\"Access Token\"],\"pd81Qb\":[\"Account Owner\"],\"loqL/f\":[\"Account owner for companies\"],\"HZosRi\":[\"Account Owner For Companies\"],\"Du6bPw\":[\"Address\"],\"JiOJxf\":[\"Address (deprecated) \"],\"Knl3c9\":[\"Address of the company\"],\"zJhwjv\":[\"Address of the company - deprecated in favor of new address field\"],\"ZfVqbP\":[\"Aggregate operation\"],\"W58PBh\":[\"Aggregated / filtered event to be displayed on the timeline\"],\"hehnjM\":[\"Amount\"],\"qeHcQj\":[\"An API key\"],\"MjyFvC\":[\"An attachment\"],\"+bL++X\":[\"An audit log of actions performed in the system\"],\"muVHgL\":[\"An event related to user behavior\"],\"bZq8rL\":[\"An opportunity\"],\"JKWicb\":[\"Annual Recurring Revenue: The actual or estimated annual revenue of the company\"],\"yRnk5W\":[\"API Key\"],\"FfSJ1Y\":[\"API Keys\"],\"puNs/l\":[\"ApiKey expiration date\"],\"YHiNxr\":[\"ApiKey name\"],\"xrndTt\":[\"ApiKey revocation date\"],\"3EiOLz\":[\"ARR\"],\"Ek7xGj\":[\"Assigned tasks\"],\"ojKCLU\":[\"Assignee\"],\"Max2GU\":[\"Associated User Id\"],\"UY1vmE\":[\"Attachment\"],\"JAefBH\":[\"Attachment author\"],\"bIaesZ\":[\"Attachment company\"],\"gfGYcl\":[\"Attachment full path\"],\"wjocwa\":[\"Attachment name\"],\"FWlOXr\":[\"Attachment note\"],\"YASWpH\":[\"Attachment opportunity\"],\"P38yED\":[\"Attachment person\"],\"Tx1DxS\":[\"Attachment task\"],\"4qqxMt\":[\"Attachment type\"],\"w/Sphq\":[\"Attachments\"],\"2tQOVc\":[\"Attachments created by the workspace member\"],\"iVnA89\":[\"Attachments linked to the company\"],\"MuTXtT\":[\"Attachments linked to the contact.\"],\"kw0mLu\":[\"Attachments linked to the opportunity\"],\"fCbqr7\":[\"Attachments tied to the \",[\"label\"]],\"ilRCh1\":[\"Audit Log\"],\"EPEFrH\":[\"Audit Logs\"],\"RqCC/0\":[\"Audit Logs linked to the workspace member\"],\"cNBqH+\":[\"Auth failed at\"],\"VbeIOx\":[\"Author\"],\"XJONK6\":[\"Authored attachments\"],\"RpExX0\":[\"Automatically create People records when receiving or sending emails\"],\"lXxdId\":[\"Automatically create records for people you participated with in an event.\"],\"kfcRb0\":[\"Avatar\"],\"S/mJUR\":[\"Avatar Url\"],\"20B9kW\":[\"Behavioral Event\"],\"Jeh/Q/\":[\"Behavioral Events\"],\"K1172m\":[\"Blocklist\"],\"Tv2hxv\":[\"Blocklisted handles\"],\"L5JhJe\":[\"Blocklists\"],\"bGQplw\":[\"Body\"],\"8mVqF7\":[\"Cached record name\"],\"Nh6GTX\":[\"Calendar Channel\"],\"jfNQ0m\":[\"Calendar Channel Event Association\"],\"kYNT3F\":[\"Calendar Channel Event Associations\"],\"Znix/S\":[\"Calendar Channels\"],\"bRk+FR\":[\"Calendar event\"],\"N2kMfO\":[\"Calendar event participant\"],\"AWDqkQ\":[\"Calendar event participants\"],\"ZI2UyM\":[\"Calendar Event Participants\"],\"X9A2xC\":[\"Calendar events\"],\"4IVK41\":[\"Channel ID\"],\"Ubg/B+\":[\"Channel Type\"],\"3wV73y\":[\"City\"],\"NRF7pg\":[\"Close date\"],\"96YB1a\":[\"Color Scheme\"],\"07OSD1\":[\"Compact View\"],\"s2QZS6\":[\"Companies\"],\"7i8j3G\":[\"Company\"],\"yA1de7\":[\"Company record position\"],\"AgktVC\":[\"Conference Solution\"],\"PQ1Dw2\":[\"Connected Account\"],\"9TzudL\":[\"Connected accounts\"],\"AMDUqA\":[\"Connected Accounts\"],\"bA6O5B\":[\"Contact auto creation policy\"],\"RnsmQs\":[\"Contact’s avatar\"],\"pL+pqi\":[\"Contact’s city\"],\"VnWMlz\":[\"Contact’s company\"],\"ITlFIB\":[\"Contact’s Emails\"],\"GuRtLY\":[\"Contact’s job title\"],\"QrCvRQ\":[\"Contact’s Linkedin account\"],\"6xPSVt\":[\"Contact’s name\"],\"Y37CZ4\":[\"Contact’s phone number\"],\"zsW3gg\":[\"Contact’s phone numbers\"],\"uuZ00G\":[\"Contact’s X/Twitter account\"],\"NCIYDF\":[\"Created by\"],\"wPvFAD\":[\"Creation date\"],\"CJXWmO\":[\"Creation DateTime\"],\"Lhd0oQ\":[\"Date format\"],\"1lL5Iu\":[\"Date when the record was deleted\"],\"QN9ahV\":[\"Deleted at\"],\"U1bSSI\":[\"Describes if the view is in compact mode\"],\"Nu4oKW\":[\"Description\"],\"MRB7nI\":[\"Direction\"],\"0gS7M5\":[\"Display Name\"],\"0H/D9K\":[\"Display Value\"],\"wMncXq\":[\"Domain Name\"],\"YOowcq\":[\"Due Date\"],\"BXEcos\":[\"Emails\"],\"gqv5ZL\":[\"Employees\"],\"VFv2ZC\":[\"End Date\"],\"k//6Xs\":[\"Event company\"],\"FJ7QI4\":[\"Event context\"],\"kJDmsI\":[\"Event details\"],\"0JhmlM\":[\"Event external ID\"],\"aZJLAR\":[\"Event ID\"],\"81maJp\":[\"Event Listeners\"],\"PYs3rP\":[\"Event name\"],\"evIGwh\":[\"Event name/type\"],\"vv99Wu\":[\"Event note\"],\"eSt759\":[\"Event opportunity\"],\"aicVfT\":[\"Event Participants\"],\"0mp45a\":[\"Event person\"],\"mMq0Wy\":[\"Event task\"],\"dCV1dS\":[\"Event workflow\"],\"W84pl6\":[\"Event workflow run\"],\"vUpps9\":[\"Event workflow version\"],\"LxOGsB\":[\"Event workspace member\"],\"tst44n\":[\"Events\"],\"fHL+iH\":[\"Events linked to the person\"],\"3/O8MM\":[\"Events linked to the workspace member\"],\"QQlMid\":[\"Exclude group emails\"],\"kenYGr\":[\"Exclude non professional emails\"],\"Lo5U0b\":[\"Executed by\"],\"sZg7s1\":[\"Expiration date\"],\"6Ki4Pv\":[\"Favorite\"],\"aKUOPp\":[\"Favorite company\"],\"TDlZ/o\":[\"Favorite Folder\"],\"WDVfUH\":[\"Favorite folder position\"],\"SStz54\":[\"Favorite Folders\"],\"dz/fFp\":[\"Favorite note\"],\"RRr9Bp\":[\"Favorite opportunity\"],\"RM6B6V\":[\"Favorite person\"],\"oVA9vM\":[\"Favorite position\"],\"OaQVQH\":[\"Favorite task\"],\"VkWV1s\":[\"Favorite view\"],\"l+lx2f\":[\"Favorite workflow\"],\"BPBnux\":[\"Favorite workflow run\"],\"5X6Vlz\":[\"Favorite workflow version\"],\"FDpezg\":[\"Favorite workspace member\"],\"X9kySA\":[\"Favorites\"],\"0CzeFL\":[\"Favorites in this folder\"],\"zQponA\":[\"Favorites linked to the company\"],\"VaKLrB\":[\"Favorites linked to the contact\"],\"GOfcBt\":[\"Favorites linked to the note\"],\"9zd8hg\":[\"Favorites linked to the opportunity\"],\"L5ccWD\":[\"Favorites linked to the task\"],\"R+1ib/\":[\"Favorites linked to the view\"],\"ee0tmj\":[\"Favorites linked to the workflow\"],\"zar5jz\":[\"Favorites linked to the workflow run\"],\"499/sw\":[\"Favorites linked to the workflow version\"],\"rgmtb4\":[\"Favorites linked to the workspace member\"],\"GyXrE1\":[\"Favorites tied to the \",[\"label\"]],\"nSFFML\":[\"Field Metadata Id\"],\"g+t8w9\":[\"Field metadata used for aggregate operation\"],\"J4hC2m\":[\"Field used for full-text search\"],\"zuDgzc\":[\"Field Value\"],\"lEpDue\":[\"Folder for Message Channel\"],\"cqQyPB\":[\"Folder name\"],\"oQA+cA\":[\"Full path\"],\"UzpVUy\":[\"Group by this field value\"],\"TkE8dW\":[\"handle\"],\"Nf7oXL\":[\"Handle\"],\"GvgxWx\":[\"Handle Aliases\"],\"VehAU2\":[\"Header message Id\"],\"NNJnBi\":[\"iCal UID\"],\"wwu18a\":[\"Icon\"],\"CiyiKN\":[\"ICP\"],\"dFb5Nt\":[\"Id\"],\"Ebc83S\":[\"Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you\"],\"NrA0WZ\":[\"If the event is related to a particular object\"],\"grHYXZ\":[\"Is canceled\"],\"k+g9Uh\":[\"Is Contact Auto Creation Enabled\"],\"uBx1xd\":[\"Is Full Day\"],\"3iAfL2\":[\"Is Organizer\"],\"Mqzqb8\":[\"Is Sync Enabled\"],\"27z+FV\":[\"Job Title\"],\"shbh25\":[\"Json object to provide context (user, device, workspace, etc.)\"],\"HgJ9jQ\":[\"Json object to provide output of the workflow run\"],\"AQuLwi\":[\"Json object to provide steps\"],\"fOjmZ1\":[\"Json object to provide trigger\"],\"TVc0/Q\":[\"Json value for event details\"],\"qmarO2\":[\"kanbanfieldMetadataId\"],\"7sMeHQ\":[\"Key\"],\"vXIe7J\":[\"Language\"],\"WvYp6o\":[\"Last published Version Id\"],\"Y60/DC\":[\"Last sync cursor\"],\"Zdx9Qq\":[\"Last sync date\"],\"c7uqNg\":[\"Last sync history ID\"],\"tGwswq\":[\"Last time the record was changed\"],\"o1zvNS\":[\"Last update\"],\"wR9USP\":[\"Linked Object Metadata Id\"],\"PV1Nm7\":[\"Linked Opportunities\"],\"6YiMr4\":[\"Linked Record cached name\"],\"sgHAxx\":[\"Linked Record id\"],\"uCA6be\":[\"Linkedin\"],\"LeFv/R\":[\"List of opportunities for which that person is the point of contact\"],\"wJijgU\":[\"Location\"],\"y+q8Lv\":[\"Logical Operator\"],\"6kQXsS\":[\"Logical operator for the filter group\"],\"EnfPm2\":[\"Meet Link\"],\"xDAtGP\":[\"Message\"],\"g+QGD6\":[\"Message Channel\"],\"DzU4a3\":[\"Message Channel Association\"],\"wd/R++\":[\"Message Channel Id\"],\"disipM\":[\"Message Channel Message Association\"],\"ijQY3P\":[\"Message Channel Message Associations\"],\"k7LXPQ\":[\"Message Channels\"],\"/4uGJc\":[\"Message Direction\"],\"fBw8fQ\":[\"Message External Id\"],\"CStLnc\":[\"Message Folder\"],\"p4ANpY\":[\"Message Folders\"],\"6icznk\":[\"Message Id\"],\"9FJSpK\":[\"Message id from the message header\"],\"yaC1Aq\":[\"Message id from the messaging provider\"],\"IUmVwu\":[\"Message Participant\"],\"FhIFx7\":[\"Message Participants\"],\"IC5A8V\":[\"Message Synced with a Message Channel\"],\"de2nM/\":[\"Message Thread\"],\"km1jgD\":[\"Message Thread Id\"],\"RD0ecC\":[\"Message Threads\"],\"t7TeQU\":[\"Messages\"],\"WoWdku\":[\"Messages from the channel.\"],\"rYPBO7\":[\"Messages from the thread.\"],\"XcKQrV\":[\"Messaging provider access token\"],\"80EvIk\":[\"Messaging provider refresh token\"],\"6YtxFj\":[\"Name\"],\"EEVPOx\":[\"Name of the favorite folder\"],\"csMjko\":[\"Name of the workflow run\"],\"KiJn9B\":[\"Note\"],\"GGlkb7\":[\"Note attachments\"],\"Q1Rz+6\":[\"Note body\"],\"Yp057F\":[\"Note record position\"],\"spaO7l\":[\"Note Target\"],\"mkchvJ\":[\"Note targets\"],\"tD4BxK\":[\"Note Targets\"],\"jDThel\":[\"Note title\"],\"1DBGsz\":[\"Notes\"],\"Ne73P/\":[\"Notes tied to the \",[\"label\"]],\"fXBE74\":[\"Notes tied to the company\"],\"iQ5AH6\":[\"Notes tied to the contact\"],\"0bi/Eh\":[\"Notes tied to the opportunity\"],\"B2Y6QU\":[\"NoteTarget company\"],\"/mH0jo\":[\"NoteTarget note\"],\"DTs4tO\":[\"NoteTarget opportunity\"],\"gBwbnk\":[\"NoteTarget person\"],\"ioJFzx\":[\"Number of employees in the company\"],\"hhe7Ce\":[\"Object id\"],\"dnPgTI\":[\"Object metadata id\"],\"T/nPf5\":[\"Object Metadata Id\"],\"afsWF6\":[\"Object name\"],\"Fzfj4N\":[\"Operand\"],\"FZg3wM\":[\"Operation\"],\"B1MDds\":[\"Operations\"],\"4MyDFl\":[\"Opportunities\"],\"5QgKbT\":[\"Opportunities linked to the company.\"],\"SV/iis\":[\"Opportunity\"],\"WnMlKn\":[\"Opportunity amount\"],\"aj3fnv\":[\"Opportunity close date\"],\"3NYczb\":[\"Opportunity company\"],\"as45IN\":[\"Opportunity point of contact\"],\"5Nu7Uw\":[\"Opportunity probability\"],\"Q1dzBp\":[\"Opportunity record position\"],\"5ugYS3\":[\"Opportunity stage\"],\"eLggyd\":[\"Optional aggregate operation\"],\"kdClJ/\":[\"Optional secret used to compute the HMAC signature for webhook payloads. This secret is shared between Twenty and the webhook consumer to authenticate webhook requests.\"],\"gh06VD\":[\"Output\"],\"pDUbN1\":[\"Parent View Filter Group\"],\"YKSmIP\":[\"Parent View Filter Group Id\"],\"1wdjme\":[\"People\"],\"E1zc7W\":[\"People linked to the company.\"],\"OZdaTZ\":[\"Person\"],\"c3Qq6o\":[\"Person record Position\"],\"zmwvG2\":[\"Phone\"],\"m2ivgq\":[\"Phones\"],\"P04j61\":[\"Point of Contact\"],\"p/78dY\":[\"Position\"],\"HH1bMC\":[\"Position in the parent view filter group\"],\"CvOSME\":[\"Position in the view filter group\"],\"h8PGuF\":[\"Position in view filter group\"],\"TTHIbk\":[\"Preferred color scheme\"],\"5v4qYi\":[\"Preferred language\"],\"WJIL29\":[\"Probability\"],\"CrfRPa\":[\"provider\"],\"YfbwOB\":[\"Received At\"],\"4Tvtbu\":[\"Record id\"],\"9gXJw8\":[\"Recurring Event ID\"],\"2rvMKg\":[\"Refresh Token\"],\"2LpFdR\":[\"Related user email address\"],\"g87L9j\":[\"Relations\"],\"rnCndp\":[\"Response Status\"],\"MCWKAU\":[\"Revocation date\"],\"GDvlUT\":[\"Role\"],\"Tpm2G9\":[\"Runs\"],\"N/rFzD\":[\"Scopes\"],\"PdVIJC\":[\"Search vector\"],\"8VEDbV\":[\"Secret\"],\"Cj2Gtd\":[\"Size\"],\"3PRxO3\":[\"Stage\"],\"D3iCkb\":[\"Start Date\"],\"uAQUqI\":[\"Status\"],\"Db4W3/\":[\"Statuses\"],\"UJmAAK\":[\"Subject\"],\"oyJYg7\":[\"Sync Cursor\"],\"awvBUx\":[\"Sync Cursor. Used for syncing events from the calendar provider\"],\"dNAbG6\":[\"Sync stage\"],\"aqNjQE\":[\"Sync stage started at\"],\"bRUdLR\":[\"Sync status\"],\"4SHJe4\":[\"Target Url\"],\"Q3P/4s\":[\"Task\"],\"kS+Ym6\":[\"Task assignee\"],\"7fYQ6E\":[\"Task attachments\"],\"X8fs74\":[\"Task body\"],\"EPxYHS\":[\"Task due date\"],\"fUw1j+\":[\"Task record position\"],\"I6+0ph\":[\"Task status\"],\"WSiiWf\":[\"Task Target\"],\"khGQLP\":[\"Task targets\"],\"836FiO\":[\"Task Targets\"],\"R+s8S+\":[\"Task title\"],\"GtycJ/\":[\"Tasks\"],\"HlDeG3\":[\"Tasks assigned to the workspace member\"],\"Ca/n4T\":[\"Tasks tied to the \",[\"label\"]],\"M4rBti\":[\"Tasks tied to the company\"],\"/VaiDW\":[\"Tasks tied to the contact\"],\"1TfX9U\":[\"Tasks tied to the opportunity\"],\"pP0Dt9\":[\"TaskTarget company\"],\"UJ2aPi\":[\"TaskTarget opportunity\"],\"I1MiSs\":[\"TaskTarget person\"],\"pciKLT\":[\"TaskTarget task\"],\"xeiujy\":[\"Text\"],\"6PJbR2\":[\"The account handle (email, username, phone number, etc.)\"],\"zUXOAB\":[\"The account provider\"],\"qnNFrW\":[\"The company Linkedin account\"],\"N31Pso\":[\"The company name\"],\"BHFCqB\":[\"The company Twitter/X account\"],\"OBmU0K\":[\"The company website URL. We use this url to fetch the company icon\"],\"zGBDEH\":[\"The creator of the record\"],\"bMyVOx\":[\"The current statuses of the workflow versions\"],\"0bo4Q0\":[\"The date the message was received\"],\"8h4mhq\":[\"The executor of the workflow\"],\"W3raza\":[\"The folder this favorite belongs to\"],\"DbWmKZ\":[\"The opportunity name\"],\"7mPrpl\":[\"The workflow event listener name\"],\"od0omS\":[\"The workflow last published version id\"],\"/EdWx6\":[\"The workflow name\"],\"EhAsND\":[\"The workflow version name\"],\"dhx13p\":[\"The workflow version status\"],\"Zl0BJl\":[\"Thread External Id\"],\"RSSbWN\":[\"Thread id from the messaging provider\"],\"sS8v5K\":[\"Throttle Failure Count\"],\"n9nSNJ\":[\"Time format\"],\"Mz2JN2\":[\"Time zone\"],\"az1boY\":[\"Timeline Activities\"],\"fqKMpF\":[\"Timeline Activities linked to the company\"],\"4/UzU5\":[\"Timeline Activities linked to the note.\"],\"p6feIz\":[\"Timeline Activities linked to the opportunity.\"],\"yvPwuF\":[\"Timeline activities linked to the run\"],\"q96UvB\":[\"Timeline Activities linked to the task.\"],\"N9HMa/\":[\"Timeline activities linked to the version\"],\"B1CYKX\":[\"Timeline activities linked to the workflow\"],\"G0UmtQ\":[\"Timeline Activities tied to the \",[\"label\"]],\"K/kU4E\":[\"Timeline Activity\"],\"MHrjPM\":[\"Title\"],\"+zy2Nq\":[\"Type\"],\"0gY5lO\":[\"Update DateTime\"],\"YFciqL\":[\"User Email\"],\"d1BTW8\":[\"User Id\"],\"4juE7s\":[\"User time zone\"],\"43zCwQ\":[\"User's preferred date format\"],\"kJuoKm\":[\"User's preferred time format\"],\"wMHvYH\":[\"Value\"],\"7aatUy\":[\"Version status\"],\"CdQeU7\":[\"Version steps\"],\"PGMPIi\":[\"Version trigger\"],\"IYNSdp\":[\"Versions\"],\"jpctdh\":[\"View\"],\"cZPDyy\":[\"View Field\"],\"6jpoH4\":[\"View Field position\"],\"Ju6gri\":[\"View Field related view\"],\"tvTr2y\":[\"View Field size\"],\"BkII8t\":[\"View Field target field\"],\"Gd/LzL\":[\"View Field visibility\"],\"GUFYyq\":[\"View Fields\"],\"JRtI7Y\":[\"View Filter\"],\"L2gQ5q\":[\"View Filter Display Value\"],\"l9/6pD\":[\"View Filter Group\"],\"Mbosm8\":[\"View Filter Group Id\"],\"/aP3iG\":[\"View Filter Groups\"],\"4MG8+B\":[\"View Filter operand\"],\"OrUkUF\":[\"View Filter related view\"],\"TyXOtD\":[\"View Filter target field\"],\"3KzkxN\":[\"View Filter value\"],\"vj5JsR\":[\"View Filters\"],\"ziEP12\":[\"View Group\"],\"uQ3c2q\":[\"View Group related view\"],\"EFlLpQ\":[\"View Group target field\"],\"b1Vc+l\":[\"View Group visibility\"],\"V4nZs/\":[\"View Groups\"],\"qXlovu\":[\"View icon\"],\"cd/+ZD\":[\"View Kanban column field\"],\"vdfZ+A\":[\"View key\"],\"oOljSE\":[\"View name\"],\"rhO8zp\":[\"View position\"],\"EUjpwJ\":[\"View Sort\"],\"6ZUale\":[\"View Sort direction\"],\"/rCPqN\":[\"View Sort related view\"],\"+du2wy\":[\"View Sort target field\"],\"UsdY3K\":[\"View Sorts\"],\"clWwIZ\":[\"View target object\"],\"bJAIqT\":[\"View type\"],\"1I6UoR\":[\"Views\"],\"2q/Q7x\":[\"Visibility\"],\"oh8+os\":[\"Visible\"],\"TRDppN\":[\"Webhook\"],\"fyB2Wp\":[\"Webhook operation\"],\"gONLmX\":[\"Webhook operations\"],\"cPoSTF\":[\"Webhook target url\"],\"v1kQyJ\":[\"Webhooks\"],\"bLt/0J\":[\"Workflow\"],\"E03XpH\":[\"Workflow event listeners linked to the workflow.\"],\"vwSkSW\":[\"Workflow linked to the run.\"],\"y9tnFx\":[\"Workflow record position\"],\"5vIcqC\":[\"Workflow Run\"],\"3Iz+qz\":[\"Workflow run ended at\"],\"IUaK6s\":[\"Workflow run position\"],\"zaN7tH\":[\"Workflow run started at\"],\"1TU2A8\":[\"Workflow run status\"],\"u6DF/V\":[\"Workflow Runs\"],\"9nOy7k\":[\"Workflow runs linked to the version.\"],\"c37F3j\":[\"Workflow runs linked to the workflow.\"],\"lTXctu\":[\"Workflow version\"],\"+wYPET\":[\"Workflow Version\"],\"CocTJJ\":[\"Workflow version linked to the run.\"],\"9l+pJT\":[\"Workflow version position\"],\"OCyhkn\":[\"Workflow Versions\"],\"018fP9\":[\"Workflow versions linked to the workflow.\"],\"ENOy6I\":[\"WorkflowEventListener\"],\"HN90FO\":[\"WorkflowEventListener workflow\"],\"3JA9se\":[\"WorkflowEventListeners\"],\"woYYQq\":[\"Workflows\"],\"urCUgs\":[\"WorkflowVersion\"],\"b4kire\":[\"WorkflowVersion workflow\"],\"CbGxon\":[\"Workspace member\"],\"qc38qR\":[\"Workspace Member\"],\"R1S9pO\":[\"Workspace member avatar\"],\"5VCX7o\":[\"Workspace member name\"],\"YCAEr+\":[\"Workspace Members\"],\"EtzFC0\":[\"WorkspaceMember\"],\"0gv+T2\":[\"X\"],\"vPccnr\":[\"Your team member responsible for managing the company account\"]}")as Messages; \ No newline at end of file diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/it.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/it.po index 5ec26deda9d3..36a1b6719291 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/it.po +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/it.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 13:59+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/ja.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/ja.po new file mode 100644 index 000000000000..5322057e7d5f --- /dev/null +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/ja.po @@ -0,0 +1,2236 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2025-02-01 10:10+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: ja\n" + +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:32 +msgid "(System) View Fields" +msgstr "(システム)ビューフィールド" + +#: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:29 +msgid "(System) View Filter Groups" +msgstr "(システム)フィルタグループの表示" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:25 +msgid "(System) View Filters" +msgstr "(システム)ビューフィルタ" + +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:23 +msgid "(System) View Groups" +msgstr "(システム)ビューグループ" + +#: src/modules/view/standard-objects/view-sort.workspace-entity.ts:26 +msgid "(System) View Sorts" +msgstr "(システム)ビューソート" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:33 +msgid "(System) Views" +msgstr "(システム)ビュー" + +#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:24 +msgid "A Folder of favorites" +msgstr "お気に入りのフォルダ" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:55 +msgid "A company" +msgstr "A社" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:30 +msgid "A connected account" +msgstr "接続アカウント" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:37 +msgid "A favorite that can be accessed from the left menu" +msgstr "左メニューからアクセスできるお気に入り" + +#: src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts:25 +msgid "A group of related messages (e.g. email thread, chat thread)" +msgstr "関連するメッセージのグループ(電子メールのスレッド、チャットのスレッドなど)" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:30 +msgid "A message sent or received through a messaging channel (email, chat, etc.)" +msgstr "メッセージング・チャンネル(電子メール、チャットなど)を通じて送受信されるメッセージ。" + +#: src/modules/note/standard-objects/note.workspace-entity.ts:46 +msgid "A note" +msgstr "メモ" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:27 +msgid "A note target" +msgstr "注意目標" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:59 +msgid "A person" +msgstr "ある人物" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:48 +msgid "A task" +msgstr "課題" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:27 +msgid "A task target" +msgstr "タスクターゲット" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:20 +msgid "A webhook" +msgstr "ウェブフック" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:59 +msgid "A workflow" +msgstr "ワークフロー" + +#: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:24 +msgid "A workflow event listener" +msgstr "ワークフローのイベントリスナー" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:54 +msgid "A workflow run" +msgstr "ワークフローの実行" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:67 +msgid "A workflow version" +msgstr "ワークフロー版" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:78 +msgid "A workspace member" +msgstr "ワークスペース・メンバー" + +#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:17 +msgid "API Key" +msgstr "APIキー" + +#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:18 +msgid "API Keys" +msgstr "APIキー" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:113 +msgid "ARR" +msgstr "受取通知" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:58 +msgid "Access Token" +msgstr "アクセス・トークン" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:114 +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:115 +#: src/modules/company/standard-objects/company.workspace-entity.ts:176 +msgid "Account Owner" +msgstr "アカウント・オーナー" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:168 +msgid "Account Owner For Companies" +msgstr "企業向けアカウント・オーナー" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:169 +msgid "Account owner for companies" +msgstr "企業のアカウント・オーナー" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:123 +msgid "Address" +msgstr "住所" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:264 +msgid "Address (deprecated) " +msgstr "アドレス (非推奨) " + +#: src/modules/company/standard-objects/company.workspace-entity.ts:124 +msgid "Address of the company" +msgstr "会社住所" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:265 +msgid "Address of the company - deprecated in favor of new address field" +msgstr "会社の住所 - 新しい住所フィールドに取って代わられ、非推奨。" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:189 +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:96 +msgid "Aggregate operation" +msgstr "集計作業" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:35 +msgid "Aggregated / filtered event to be displayed on the timeline" +msgstr "タイムライン上に表示される集計/フィルターされたイベント" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:69 +msgid "Amount" +msgstr "金額" + +#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:19 +msgid "An API key" +msgstr "APIキー" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:32 +msgid "An attachment" +msgstr "添付ファイル" + +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:24 +msgid "An audit log of actions performed in the system" +msgstr "システムで実行されたアクションの監査ログ" + +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:20 +msgid "An event related to user behavior" +msgstr "ユーザーの行動に関するイベント" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:50 +msgid "An opportunity" +msgstr "機会" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:114 +msgid "Annual Recurring Revenue: The actual or estimated annual revenue of the company" +msgstr "年間経常収益:企業の実際の年間売上高または推定年間売上高" + +#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:39 +msgid "ApiKey expiration date" +msgstr "ApiKeyの有効期限" + +#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:30 +msgid "ApiKey name" +msgstr "ApiKey名" + +#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:48 +msgid "ApiKey revocation date" +msgstr "ApiKeyの失効日" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:145 +msgid "Assigned tasks" +msgstr "割り当てられたタスク" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:168 +msgid "Assignee" +msgstr "譲受人" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:136 +msgid "Associated User Id" +msgstr "関連ユーザーID" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:30 +msgid "Attachment" +msgstr "アタッチメント" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:70 +msgid "Attachment author" +msgstr "添付ファイル作成者" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:129 +msgid "Attachment company" +msgstr "アタッチメント会社" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:52 +msgid "Attachment full path" +msgstr "添付ファイルのフルパス" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:43 +msgid "Attachment name" +msgstr "添付ファイル名" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:99 +msgid "Attachment note" +msgstr "添付文書" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:144 +msgid "Attachment opportunity" +msgstr "アタッチメントの機会" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:114 +msgid "Attachment person" +msgstr "アタッチメント担当者" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:84 +msgid "Attachment task" +msgstr "アタッチメント・タスク" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:61 +msgid "Attachment type" +msgstr "アタッチメントタイプ" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:156 +#: src/modules/person/standard-objects/person.workspace-entity.ts:238 +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:199 +#: src/modules/note/standard-objects/note.workspace-entity.ts:118 +#: src/modules/company/standard-objects/company.workspace-entity.ts:239 +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:31 +#: src/engine/twenty-orm/custom.workspace-entity.ts:118 +msgid "Attachments" +msgstr "アタッチメント" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:181 +msgid "Attachments created by the workspace member" +msgstr "ワークスペース・メンバーが作成した添付ファイル" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:240 +msgid "Attachments linked to the company" +msgstr "会社に関連する添付ファイル" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:239 +msgid "Attachments linked to the contact." +msgstr "連絡先にリンクされている添付ファイル。" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:200 +msgid "Attachments linked to the opportunity" +msgstr "この機会に関連する添付ファイル" + +#: src/engine/twenty-orm/custom.workspace-entity.ts:123 +msgid "Attachments tied to the {label}" +msgstr "{label}]に紐づくアタッチメント" + +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:22 +msgid "Audit Log" +msgstr "監査ログ" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:255 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:23 +msgid "Audit Logs" +msgstr "監査ログ" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:256 +msgid "Audit Logs linked to the workspace member" +msgstr "ワークスペース・メンバにリンクされた監査ログ" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:85 +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:86 +msgid "Auth failed at" +msgstr "で認証に失敗した。" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:69 +msgid "Author" +msgstr "著者" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:180 +msgid "Authored attachments" +msgstr "執筆者" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:171 +msgid "Automatically create People records when receiving or sending emails" +msgstr "メールの受信・送信時に自動的にPeopleレコードを作成" + +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:222 +msgid "Automatically create records for people you participated with in an event." +msgstr "イベントに一緒に参加した人の記録を自動的に作成します。" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:146 +msgid "Avatar" +msgstr "アバター" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:117 +msgid "Avatar Url" +msgstr "アバターURL" + +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:18 +msgid "Behavioral Event" +msgstr "行動イベント" + +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:19 +msgid "Behavioral Events" +msgstr "行動イベント" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:216 +#: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:22 +#: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:24 +msgid "Blocklist" +msgstr "ブロックリスト" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:217 +msgid "Blocklisted handles" +msgstr "ブロックリスト入りハンドル" + +#: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:23 +msgid "Blocklists" +msgstr "ブロックリスト" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:77 +#: src/modules/task/standard-objects/task.workspace-entity.ts:87 +#: src/modules/note/standard-objects/note.workspace-entity.ts:75 +#: src/modules/note/standard-objects/note.workspace-entity.ts:85 +msgid "Body" +msgstr "ボディ" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:75 +msgid "Cached record name" +msgstr "キャッシュレコード名" + +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:74 +msgid "Calendar Channel" +msgstr "カレンダーチャンネル" + +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:23 +msgid "Calendar Channel Event Association" +msgstr "カレンダー チャンネルイベント協会" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:155 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:156 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:322 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:323 +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:24 +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:25 +msgid "Calendar Channel Event Associations" +msgstr "カレンダー チャンネル イベント関連" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:139 +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:140 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:75 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:76 +msgid "Calendar Channels" +msgstr "カレンダー・チャンネル" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:228 +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:229 +#: src/modules/person/standard-objects/person.workspace-entity.ts:262 +#: src/modules/person/standard-objects/person.workspace-entity.ts:263 +msgid "Calendar Event Participants" +msgstr "カレンダーイベント参加者" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:27 +msgid "Calendar event" +msgstr "カレンダーイベント" + +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:32 +msgid "Calendar event participant" +msgstr "カレンダーイベント参加者" + +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:33 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:34 +msgid "Calendar event participants" +msgstr "カレンダーイベント参加者" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:28 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:29 +msgid "Calendar events" +msgstr "カレンダー・イベント" + +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:55 +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:56 +msgid "Channel ID" +msgstr "チャンネルID" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:136 +msgid "Channel Type" +msgstr "チャンネル・タイプ" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:137 +msgid "City" +msgstr "都市" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:79 +msgid "Close date" +msgstr "締切日" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:97 +msgid "Color Scheme" +msgstr "カラースキーム" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:108 +msgid "Compact View" +msgstr "コンパクトビュー" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:54 +msgid "Companies" +msgstr "企業" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:134 +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:65 +#: src/modules/person/standard-objects/person.workspace-entity.ts:177 +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:148 +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:65 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:88 +#: src/modules/company/standard-objects/company.workspace-entity.ts:53 +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:128 +msgid "Company" +msgstr "会社概要" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:144 +msgid "Company record position" +msgstr "会社記録ポジション" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:135 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:136 +msgid "Conference Solution" +msgstr "会議ソリューション" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:359 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:360 +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:28 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:307 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:308 +msgid "Connected Account" +msgstr "接続アカウント" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:29 +msgid "Connected Accounts" +msgstr "接続アカウント" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:192 +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:193 +msgid "Connected accounts" +msgstr "接続アカウント" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:170 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:221 +msgid "Contact auto creation policy" +msgstr "コンタクト自動作成ポリシー" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:80 +msgid "Contact’s Emails" +msgstr "連絡先のEメール" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:90 +msgid "Contact’s Linkedin account" +msgstr "連絡先のLinkedinアカウント" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:100 +msgid "Contact’s X/Twitter account" +msgstr "連絡先のX/Twitterアカウント" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:147 +msgid "Contact’s avatar" +msgstr "コンタクトのアバター" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:138 +msgid "Contact’s city" +msgstr "連絡先の都市" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:178 +msgid "Contact’s company" +msgstr "連絡先の会社" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:110 +msgid "Contact’s job title" +msgstr "連絡先の役職" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:70 +msgid "Contact’s name" +msgstr "担当者名" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:119 +msgid "Contact’s phone number" +msgstr "連絡先の電話番号" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:129 +msgid "Contact’s phone numbers" +msgstr "連絡先の電話番号" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:166 +#: src/modules/task/standard-objects/task.workspace-entity.ts:136 +#: src/modules/person/standard-objects/person.workspace-entity.ts:167 +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:123 +#: src/modules/note/standard-objects/note.workspace-entity.ts:98 +#: src/modules/company/standard-objects/company.workspace-entity.ts:154 +#: src/engine/twenty-orm/custom.workspace-entity.ts:61 +msgid "Created by" +msgstr "作成者" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:88 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:89 +msgid "Creation DateTime" +msgstr "作成日時" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:44 +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:45 +#: src/engine/twenty-orm/base.workspace-entity.ts:26 +#: src/engine/twenty-orm/base.workspace-entity.ts:27 +msgid "Creation date" +msgstr "作成日" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:278 +msgid "Date format" +msgstr "日付形式" + +#: src/engine/twenty-orm/base.workspace-entity.ts:53 +msgid "Date when the record was deleted" +msgstr "レコードが削除された日付" + +#: src/engine/twenty-orm/base.workspace-entity.ts:52 +msgid "Deleted at" +msgstr "で削除" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:109 +msgid "Describes if the view is in compact mode" +msgstr "ビューがコンパクトモードであるかどうかを示します。" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:59 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:108 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:109 +msgid "Description" +msgstr "説明" + +#: src/modules/view/standard-objects/view-sort.workspace-entity.ts:48 +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:66 +msgid "Direction" +msgstr "ディレクション" + +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:62 +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:63 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:54 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:55 +msgid "Display Name" +msgstr "表示名" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:59 +msgid "Display Value" +msgstr "表示値" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:73 +msgid "Domain Name" +msgstr "ドメイン名" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:100 +msgid "Due Date" +msgstr "期日" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:79 +msgid "Emails" +msgstr "電子メール" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:83 +msgid "Employees" +msgstr "従業員" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:78 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:79 +msgid "End Date" +msgstr "終了日" + +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:109 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:110 +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:70 +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:71 +msgid "Event ID" +msgstr "イベントID" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:132 +msgid "Event Listeners" +msgstr "イベント・リスナー" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:168 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:169 +msgid "Event Participants" +msgstr "イベント参加者" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:135 +msgid "Event company" +msgstr "イベント会社" + +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:67 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:52 +msgid "Event context" +msgstr "イベント・コンテキスト" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:63 +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:57 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:42 +msgid "Event details" +msgstr "イベント詳細" + +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:35 +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:36 +msgid "Event external ID" +msgstr "イベント外部ID" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:54 +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:55 +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:48 +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:49 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:33 +msgid "Event name" +msgstr "イベント名" + +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:87 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:34 +msgid "Event name/type" +msgstr "イベント名/タイプ" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:165 +msgid "Event note" +msgstr "イベントメモ" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:150 +msgid "Event opportunity" +msgstr "イベントの機会" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:120 +msgid "Event person" +msgstr "イベント関係者" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:180 +msgid "Event task" +msgstr "イベントタスク" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:195 +msgid "Event workflow" +msgstr "イベントのワークフロー" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:225 +msgid "Event workflow run" +msgstr "イベントワークフローの実行" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:210 +msgid "Event workflow version" +msgstr "イベントワークフローバージョン" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:105 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:91 +msgid "Event workspace member" +msgstr "イベント・ワークスペース・メンバー" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:242 +#: src/modules/person/standard-objects/person.workspace-entity.ts:276 +msgid "Events" +msgstr "イベント" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:277 +msgid "Events linked to the person" +msgstr "その人に関連する出来事" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:243 +msgid "Events linked to the workspace member" +msgstr "ワークスペース・メンバーにリンクされたイベント" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:210 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:211 +msgid "Exclude group emails" +msgstr "グループメールの除外" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:200 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:201 +msgid "Exclude non professional emails" +msgstr "プロ以外のメールは除く" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:127 +msgid "Executed by" +msgstr "実行者" + +#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:38 +msgid "Expiration date" +msgstr "有効期限" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:35 +msgid "Favorite" +msgstr "お気に入り" + +#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:22 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:103 +msgid "Favorite Folder" +msgstr "お気に入りフォルダ" + +#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:23 +msgid "Favorite Folders" +msgstr "お気に入りのフォルダ" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:89 +msgid "Favorite company" +msgstr "お気に入りの会社" + +#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:33 +msgid "Favorite folder position" +msgstr "お気に入りのフォルダ位置" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:194 +msgid "Favorite note" +msgstr "お気に入りのメモ" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:119 +msgid "Favorite opportunity" +msgstr "お気に入りの機会" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:74 +msgid "Favorite person" +msgstr "好きな人" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:47 +msgid "Favorite position" +msgstr "好きなポジション" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:179 +msgid "Favorite task" +msgstr "好きな仕事" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:209 +msgid "Favorite view" +msgstr "お気に入りの眺め" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:134 +msgid "Favorite workflow" +msgstr "お気に入りのワークフロー" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:164 +msgid "Favorite workflow run" +msgstr "お気に入りのワークフロー" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:149 +msgid "Favorite workflow version" +msgstr "お気に入りのワークフローバージョン" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:59 +msgid "Favorite workspace member" +msgstr "お気に入りのワークスペース・メンバー" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:157 +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:143 +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:154 +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:186 +#: src/modules/view/standard-objects/view.workspace-entity.ts:177 +#: src/modules/task/standard-objects/task.workspace-entity.ts:197 +#: src/modules/person/standard-objects/person.workspace-entity.ts:226 +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:164 +#: src/modules/note/standard-objects/note.workspace-entity.ts:143 +#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:52 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:36 +#: src/modules/company/standard-objects/company.workspace-entity.ts:226 +#: src/engine/twenty-orm/custom.workspace-entity.ts:101 +msgid "Favorites" +msgstr "お気に入り" + +#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:53 +msgid "Favorites in this folder" +msgstr "このフォルダのお気に入り" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:227 +msgid "Favorites linked to the company" +msgstr "会社に関連したお気に入り" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:227 +msgid "Favorites linked to the contact" +msgstr "連絡先にリンクされているお気に入り" + +#: src/modules/note/standard-objects/note.workspace-entity.ts:144 +msgid "Favorites linked to the note" +msgstr "メモにリンクされたお気に入り" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:165 +msgid "Favorites linked to the opportunity" +msgstr "チャンスにリンクしたお気に入り" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:198 +msgid "Favorites linked to the task" +msgstr "タスクにリンクされたお気に入り" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:178 +msgid "Favorites linked to the view" +msgstr "ビューにリンクされたお気に入り" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:144 +msgid "Favorites linked to the workflow" +msgstr "ワークフローにリンクされたお気に入り" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:187 +msgid "Favorites linked to the workflow run" +msgstr "ワークフローにリンクされたお気に入り" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:155 +msgid "Favorites linked to the workflow version" +msgstr "ワークフローのバージョンにリンクされたお気に入り" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:158 +msgid "Favorites linked to the workspace member" +msgstr "ワークスペース・メンバーにリンクされたお気に入り" + +#: src/engine/twenty-orm/custom.workspace-entity.ts:106 +msgid "Favorites tied to the {label}" +msgstr "{label}]に紐づくお気に入り" + +#: src/modules/view/standard-objects/view-sort.workspace-entity.ts:39 +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:32 +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:34 +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:45 +msgid "Field Metadata Id" +msgstr "フィールド・メタデータID" + +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:51 +msgid "Field Value" +msgstr "フィールド値" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:262 +#: src/modules/view/standard-objects/view.workspace-entity.ts:263 +msgid "Field metadata used for aggregate operation" +msgstr "集約操作に使用されるフィールド・メタデータ" + +#: src/engine/metadata-modules/constants/search-vector-field.constants.ts:6 +msgid "Field used for full-text search" +msgstr "全文検索に使用されるフィールド" + +#: src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts:23 +msgid "Folder for Message Channel" +msgstr "メッセージチャンネル用フォルダ" + +#: src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts:33 +msgid "Folder name" +msgstr "フォルダ名" + +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:51 +msgid "Full path" +msgstr "フルパス" + +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:52 +msgid "Group by this field value" +msgstr "このフィールド値でグループ化する" + +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:53 +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:54 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:126 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:127 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:45 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:46 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:86 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:87 +#: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:34 +#: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:35 +msgid "Handle" +msgstr "ハンドル" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:95 +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:96 +msgid "Handle Aliases" +msgstr "ハンドルの別名" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:40 +msgid "Header message Id" +msgstr "ヘッダー・メッセージId" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:133 +msgid "ICP" +msgstr "ICP" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:79 +msgid "Icon" +msgstr "アイコン" + +#: src/engine/twenty-orm/base.workspace-entity.ts:14 +#: src/engine/twenty-orm/base.workspace-entity.ts:15 +msgid "Id" +msgstr "アイド" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:134 +msgid "Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you" +msgstr "理想の顧客像: その企業があなたにとって最も適切で価値のある顧客であるかどうかを示します。" + +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:78 +msgid "If the event is related to a particular object" +msgstr "イベントが特定のオブジェクトに関連している場合" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:160 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:161 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:211 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:212 +msgid "Is Contact Auto Creation Enabled" +msgstr "コンタクトの自動作成が有効になっているか" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:58 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:59 +msgid "Is Full Day" +msgstr "全日" + +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:63 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:64 +msgid "Is Organizer" +msgstr "オーガナイザー" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:220 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:221 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:258 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:259 +msgid "Is Sync Enabled" +msgstr "同期が有効か" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:48 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:49 +msgid "Is canceled" +msgstr "中止" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:109 +msgid "Job Title" +msgstr "役職名" + +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:68 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:53 +msgid "Json object to provide context (user, device, workspace, etc.)" +msgstr "コンテキスト(ユーザー、デバイス、ワークスペースなど)を提供するJsonオブジェクト。" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:137 +msgid "Json object to provide output of the workflow run" +msgstr "ワークフロー実行の出力を提供するJsonオブジェクト" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:95 +msgid "Json object to provide steps" +msgstr "ステップを提供するJsonオブジェクト" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:85 +msgid "Json object to provide trigger" +msgstr "トリガーを提供するJsonオブジェクト" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:64 +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:58 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:43 +msgid "Json value for event details" +msgstr "イベント詳細のJson値" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:68 +msgid "Key" +msgstr "キー" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:107 +msgid "Language" +msgstr "言語" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:77 +msgid "Last published Version Id" +msgstr "最終発行バージョンID" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:230 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:231 +msgid "Last sync cursor" +msgstr "最終同期カーソル" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:239 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:240 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:277 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:278 +msgid "Last sync date" +msgstr "最終同期日" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:76 +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:77 +msgid "Last sync history ID" +msgstr "最終同期履歴ID" + +#: src/engine/twenty-orm/base.workspace-entity.ts:40 +msgid "Last time the record was changed" +msgstr "前回の記録変更" + +#: src/engine/twenty-orm/base.workspace-entity.ts:39 +msgid "Last update" +msgstr "最終更新日" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:93 +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:94 +msgid "Linked Object Metadata Id" +msgstr "リンクされたオブジェクトのメタデータID" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:192 +msgid "Linked Opportunities" +msgstr "リンクされた機会" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:74 +msgid "Linked Record cached name" +msgstr "リンクレコードのキャッシュ名" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:83 +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:84 +msgid "Linked Record id" +msgstr "リンクレコードID" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:89 +#: src/modules/company/standard-objects/company.workspace-entity.ts:93 +msgid "Linkedin" +msgstr "リンクトイン" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:193 +msgid "List of opportunities for which that person is the point of contact" +msgstr "担当者が窓口となる機会のリスト" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:117 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:118 +msgid "Location" +msgstr "所在地" + +#: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:60 +msgid "Logical Operator" +msgstr "論理演算子" + +#: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:61 +msgid "Logical operator for the filter group" +msgstr "フィルタグループの論理演算子" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:144 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:145 +msgid "Meet Link" +msgstr "リンク" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:28 +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:71 +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:72 +msgid "Message" +msgstr "メッセージ" + +#: src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts:41 +#: src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts:42 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:84 +msgid "Message Channel" +msgstr "メッセージチャンネル" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:105 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:374 +msgid "Message Channel Association" +msgstr "メッセージ・チャネル・アソシエーション" + +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:91 +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:92 +msgid "Message Channel Id" +msgstr "メッセージ・チャンネルID" + +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:29 +msgid "Message Channel Message Association" +msgstr "メッセージ・チャンネル メッセージ・アソシエーション" + +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:30 +msgid "Message Channel Message Associations" +msgstr "メッセージ・チャンネル メッセージ・アソシエーション" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:85 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:86 +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:128 +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:129 +msgid "Message Channels" +msgstr "メッセージ・チャンネル" + +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:67 +msgid "Message Direction" +msgstr "メッセージの方向性" + +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:45 +msgid "Message External Id" +msgstr "メッセージ外部ID" + +#: src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts:21 +msgid "Message Folder" +msgstr "メッセージフォルダ" + +#: src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts:22 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:388 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:389 +msgid "Message Folders" +msgstr "メッセージフォルダー" + +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:106 +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:107 +msgid "Message Id" +msgstr "メッセージID" + +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:25 +msgid "Message Participant" +msgstr "メッセージ参加者" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:204 +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:205 +#: src/modules/person/standard-objects/person.workspace-entity.ts:249 +#: src/modules/person/standard-objects/person.workspace-entity.ts:250 +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:93 +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:94 +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:26 +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:27 +msgid "Message Participants" +msgstr "メッセージ参加者" + +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:31 +msgid "Message Synced with a Message Channel" +msgstr "メッセージチャンネルと同期したメッセージ" + +#: src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts:23 +msgid "Message Thread" +msgstr "メッセージスレッド" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:77 +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:78 +msgid "Message Thread Id" +msgstr "メッセージスレッドID" + +#: src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts:24 +msgid "Message Threads" +msgstr "メッセージスレッド" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:41 +msgid "Message id from the message header" +msgstr "メッセージヘッダからのメッセージID" + +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:46 +msgid "Message id from the messaging provider" +msgstr "メッセージング・プロバイダーからのメッセージID" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:29 +#: src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts:34 +msgid "Messages" +msgstr "メッセージ" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:106 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:375 +msgid "Messages from the channel." +msgstr "チャンネルからのメッセージ" + +#: src/modules/messaging/common/standard-objects/message-thread.workspace-entity.ts:35 +msgid "Messages from the thread." +msgstr "スレッドからのメッセージ" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:59 +msgid "Messaging provider access token" +msgstr "メッセージング・プロバイダのアクセストークン" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:68 +msgid "Messaging provider refresh token" +msgstr "メッセージング・プロバイダのリフレッシュ・トークン" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:88 +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:68 +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:75 +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:62 +#: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:34 +#: src/modules/view/standard-objects/view.workspace-entity.ts:43 +#: src/modules/person/standard-objects/person.workspace-entity.ts:69 +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:60 +#: src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts:32 +#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:43 +#: src/modules/company/standard-objects/company.workspace-entity.ts:64 +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:42 +#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:29 +#: src/engine/twenty-orm/custom.workspace-entity.ts:40 +#: src/engine/twenty-orm/custom.workspace-entity.ts:41 +msgid "Name" +msgstr "名称" + +#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:44 +msgid "Name of the favorite folder" +msgstr "お気に入りフォルダ名" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:63 +msgid "Name of the workflow run" +msgstr "ワークフローの実行名" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:164 +#: src/modules/note/standard-objects/note.workspace-entity.ts:44 +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:35 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:193 +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:98 +msgid "Note" +msgstr "注" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:25 +msgid "Note Target" +msgstr "備考 ターゲット" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:26 +msgid "Note Targets" +msgstr "ノート 目標" + +#: src/modules/note/standard-objects/note.workspace-entity.ts:119 +msgid "Note attachments" +msgstr "添付資料" + +#: src/modules/note/standard-objects/note.workspace-entity.ts:76 +#: src/modules/note/standard-objects/note.workspace-entity.ts:86 +msgid "Note body" +msgstr "ノート本体" + +#: src/modules/note/standard-objects/note.workspace-entity.ts:56 +msgid "Note record position" +msgstr "レコード位置" + +#: src/modules/note/standard-objects/note.workspace-entity.ts:107 +msgid "Note targets" +msgstr "注目標" + +#: src/modules/note/standard-objects/note.workspace-entity.ts:67 +msgid "Note title" +msgstr "タイトル" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:66 +msgid "NoteTarget company" +msgstr "注対象会社" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:36 +msgid "NoteTarget note" +msgstr "ノート対象ノート" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:81 +msgid "NoteTarget opportunity" +msgstr "注チャンス" + +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:51 +msgid "NoteTarget person" +msgstr "ノート対象者" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:215 +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:188 +#: src/modules/note/standard-objects/note.workspace-entity.ts:45 +#: src/modules/company/standard-objects/company.workspace-entity.ts:203 +#: src/engine/twenty-orm/custom.workspace-entity.ts:69 +msgid "Notes" +msgstr "備考" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:204 +msgid "Notes tied to the company" +msgstr "会社と結びついたノート" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:216 +msgid "Notes tied to the contact" +msgstr "コンタクトに関連するメモ" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:189 +msgid "Notes tied to the opportunity" +msgstr "機会に関する注意事項" + +#: src/engine/twenty-orm/custom.workspace-entity.ts:74 +msgid "Notes tied to the {label}" +msgstr "{label}]に紐づくメモ" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:84 +msgid "Number of employees in the company" +msgstr "従業員数" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:51 +msgid "Object Metadata Id" +msgstr "オブジェクト・メタデータID" + +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:86 +msgid "Object id" +msgstr "オブジェクトID" + +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:71 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:72 +msgid "Object metadata id" +msgstr "オブジェクトのメタデータID" + +#: src/modules/timeline/standard-objects/behavioral-event.workspace-entity.ts:77 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:62 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:63 +msgid "Object name" +msgstr "オブジェクト名" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:42 +msgid "Operand" +msgstr "オペランド" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:39 +msgid "Operation" +msgstr "オペレーション" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:49 +msgid "Operations" +msgstr "オペレーション" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:49 +#: src/modules/company/standard-objects/company.workspace-entity.ts:214 +msgid "Opportunities" +msgstr "チャンス" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:215 +msgid "Opportunities linked to the company." +msgstr "会社に関連した機会。" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:149 +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:80 +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:48 +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:80 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:118 +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:143 +msgid "Opportunity" +msgstr "チャンス" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:70 +msgid "Opportunity amount" +msgstr "チャンス量" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:80 +msgid "Opportunity close date" +msgstr "機会終了日" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:149 +msgid "Opportunity company" +msgstr "オポチュニティ・カンパニー" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:133 +msgid "Opportunity point of contact" +msgstr "チャンスの窓口" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:224 +msgid "Opportunity probability" +msgstr "機会確率" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:113 +msgid "Opportunity record position" +msgstr "機会記録ポジション" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:90 +msgid "Opportunity stage" +msgstr "チャンスステージ" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:190 +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:97 +msgid "Optional aggregate operation" +msgstr "オプションの集計作業" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:70 +msgid "Optional secret used to compute the HMAC signature for webhook payloads. This secret is shared between Twenty and the webhook consumer to authenticate webhook requests." +msgstr "webhook ペイロードの HMAC 署名を計算するために使用するオプションの秘密。この秘密は Twenty と webhook コンシューマの間で共有され、webhook リクエストを認証します。" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:136 +msgid "Output" +msgstr "出力" + +#: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:52 +msgid "Parent View Filter Group" +msgstr "親ビューフィルターグループ" + +#: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:51 +msgid "Parent View Filter Group Id" +msgstr "親ビューフィルタグループID" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:58 +#: src/modules/company/standard-objects/company.workspace-entity.ts:164 +msgid "People" +msgstr "人々" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:165 +msgid "People linked to the company." +msgstr "会社に関係する人々。" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:119 +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:50 +#: src/modules/person/standard-objects/person.workspace-entity.ts:57 +#: src/modules/note/standard-objects/note-target.workspace-entity.ts:50 +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:85 +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:86 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:73 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:123 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:124 +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:113 +msgid "Person" +msgstr "人物" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:157 +msgid "Person record Position" +msgstr "個人記録 ポジション" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:118 +msgid "Phone" +msgstr "電話" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:128 +msgid "Phones" +msgstr "電話" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:132 +msgid "Point of Contact" +msgstr "連絡先" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:98 +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:115 +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:146 +#: src/modules/view/standard-objects/view.workspace-entity.ts:98 +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:59 +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:74 +#: src/modules/task/standard-objects/task.workspace-entity.ts:57 +#: src/modules/person/standard-objects/person.workspace-entity.ts:156 +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:112 +#: src/modules/note/standard-objects/note.workspace-entity.ts:55 +#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:32 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:46 +#: src/modules/company/standard-objects/company.workspace-entity.ts:143 +#: src/engine/twenty-orm/custom.workspace-entity.ts:49 +#: src/engine/twenty-orm/custom.workspace-entity.ts:50 +msgid "Position" +msgstr "ポジション" + +#: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:90 +msgid "Position in the parent view filter group" +msgstr "親ビューフィルタグループ内での位置" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:92 +msgid "Position in the view filter group" +msgstr "ビューフィルタグループ内での位置" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:91 +#: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:89 +msgid "Position in view filter group" +msgstr "ビューフィルタグループ内の位置" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:98 +msgid "Preferred color scheme" +msgstr "好みの配色" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:108 +msgid "Preferred language" +msgstr "使用言語" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:223 +msgid "Probability" +msgstr "確率" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:67 +msgid "Received At" +msgstr "受理日時" + +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:80 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:81 +msgid "Record id" +msgstr "レコードID" + +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:45 +#: src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts:46 +msgid "Recurring Event ID" +msgstr "定期イベントID" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:67 +msgid "Refresh Token" +msgstr "リフレッシュ・トークン" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:127 +msgid "Related user email address" +msgstr "関連ユーザーのメールアドレス" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:144 +#: src/modules/note/standard-objects/note.workspace-entity.ts:106 +msgid "Relations" +msgstr "関係" + +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:73 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:74 +msgid "Response Status" +msgstr "対応状況" + +#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:47 +msgid "Revocation date" +msgstr "失効日" + +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:37 +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:38 +msgid "Role" +msgstr "役割" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:121 +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:142 +msgid "Runs" +msgstr "走行距離" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:104 +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:105 +msgid "Scopes" +msgstr "スコープ" + +#: src/engine/metadata-modules/constants/search-vector-field.constants.ts:5 +msgid "Search vector" +msgstr "検索ベクトル" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:69 +msgid "Secret" +msgstr "シークレット" + +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:64 +msgid "Size" +msgstr "サイズ" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:89 +msgid "Stage" +msgstr "ステージ" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:68 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:69 +msgid "Start Date" +msgstr "開始日" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:110 +msgid "Status" +msgstr "ステータス" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:87 +msgid "Statuses" +msgstr "ステータス" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:49 +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:50 +msgid "Subject" +msgstr "テーマ" + +#: src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts:51 +#: src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts:52 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:268 +msgid "Sync Cursor" +msgstr "同期カーソル" + +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:269 +msgid "Sync Cursor. Used for syncing events from the calendar provider" +msgstr "同期カーソル。カレンダー・プロバイダからのイベントの同期に使用" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:291 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:292 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:137 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:138 +msgid "Sync stage" +msgstr "シンクステージ" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:339 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:340 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:287 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:288 +msgid "Sync stage started at" +msgstr "シンクステージ開始" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:249 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:250 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:95 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:96 +msgid "Sync status" +msgstr "同期ステータス" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:30 +msgid "Target Url" +msgstr "ターゲットURL" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:179 +#: src/modules/task/standard-objects/task.workspace-entity.ts:46 +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:35 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:178 +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:83 +msgid "Task" +msgstr "タスク" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:25 +msgid "Task Target" +msgstr "タスクターゲット" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:26 +msgid "Task Targets" +msgstr "タスク目標" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:169 +msgid "Task assignee" +msgstr "タスク担当者" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:157 +msgid "Task attachments" +msgstr "タスクアタッチメント" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:78 +#: src/modules/task/standard-objects/task.workspace-entity.ts:88 +msgid "Task body" +msgstr "タスク本体" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:101 +msgid "Task due date" +msgstr "タスクの期日" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:58 +msgid "Task record position" +msgstr "タスクレコードの位置" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:111 +msgid "Task status" +msgstr "タスクステータス" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:145 +msgid "Task targets" +msgstr "タスク目標" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:69 +msgid "Task title" +msgstr "タスクタイトル" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:66 +msgid "TaskTarget company" +msgstr "タスクターゲット会社" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:81 +msgid "TaskTarget opportunity" +msgstr "タスクターゲット機会" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:51 +msgid "TaskTarget person" +msgstr "タスク対象者" + +#: src/modules/task/standard-objects/task-target.workspace-entity.ts:36 +msgid "TaskTarget task" +msgstr "タスク対象タスク" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:47 +#: src/modules/person/standard-objects/person.workspace-entity.ts:204 +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:177 +#: src/modules/company/standard-objects/company.workspace-entity.ts:192 +#: src/engine/twenty-orm/custom.workspace-entity.ts:85 +msgid "Tasks" +msgstr "タスク" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:146 +msgid "Tasks assigned to the workspace member" +msgstr "ワークスペース・メンバーに割り当てられたタスク" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:193 +msgid "Tasks tied to the company" +msgstr "会社に関連した仕事" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:205 +msgid "Tasks tied to the contact" +msgstr "コンタクトに関連するタスク" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:178 +msgid "Tasks tied to the opportunity" +msgstr "機会に関するタスク" + +#: src/engine/twenty-orm/custom.workspace-entity.ts:90 +msgid "Tasks tied to the {label}" +msgstr "{label}]に関連するタスク" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:58 +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:59 +msgid "Text" +msgstr "テキスト" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:41 +msgid "The account handle (email, username, phone number, etc.)" +msgstr "アカウントハンドル(Eメール、ユーザー名、電話番号など)" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:50 +msgid "The account provider" +msgstr "口座提供者" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:94 +msgid "The company Linkedin account" +msgstr "会社のLinkedinアカウント" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:104 +msgid "The company Twitter/X account" +msgstr "Twitter/Xアカウント" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:65 +msgid "The company name" +msgstr "会社名" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:74 +msgid "The company website URL. We use this url to fetch the company icon" +msgstr "会社のウェブサイトのURL。会社のアイコンを取得するためにこのURLを使用します。" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:168 +#: src/modules/task/standard-objects/task.workspace-entity.ts:138 +#: src/modules/person/standard-objects/person.workspace-entity.ts:169 +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:125 +#: src/modules/note/standard-objects/note.workspace-entity.ts:100 +#: src/modules/company/standard-objects/company.workspace-entity.ts:156 +#: src/engine/twenty-orm/custom.workspace-entity.ts:63 +msgid "The creator of the record" +msgstr "記録の作成者" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:88 +msgid "The current statuses of the workflow versions" +msgstr "ワークフローバージョンの現在のステータス" + +#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:68 +msgid "The date the message was received" +msgstr "メッセージを受信した日付" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:129 +msgid "The executor of the workflow" +msgstr "ワークフローの実行者" + +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:104 +msgid "The folder this favorite belongs to" +msgstr "このお気に入りのフォルダ" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:61 +msgid "The opportunity name" +msgstr "機会名" + +#: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:35 +msgid "The workflow event listener name" +msgstr "ワークフローイベントのリスナー名" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:78 +msgid "The workflow last published version id" +msgstr "ワークフローの最終公開バージョンID" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:69 +msgid "The workflow name" +msgstr "ワークフロー名" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:76 +msgid "The workflow version name" +msgstr "ワークフローのバージョン名" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:105 +msgid "The workflow version status" +msgstr "ワークフローのバージョンステータス" + +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:56 +msgid "Thread External Id" +msgstr "スレッド外部ID" + +#: src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts:57 +msgid "Thread id from the messaging provider" +msgstr "メッセージング・プロバイダーからのスレッドID" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:349 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:350 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:297 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:298 +msgid "Throttle Failure Count" +msgstr "スロットル故障回数" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:314 +msgid "Time format" +msgstr "時間形式" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:268 +msgid "Time zone" +msgstr "タイムゾーン" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:155 +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:166 +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:198 +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:34 +#: src/modules/task/standard-objects/task.workspace-entity.ts:185 +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:211 +#: src/modules/note/standard-objects/note.workspace-entity.ts:131 +#: src/modules/company/standard-objects/company.workspace-entity.ts:251 +#: src/engine/twenty-orm/custom.workspace-entity.ts:134 +msgid "Timeline Activities" +msgstr "タイムライン活動" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:252 +msgid "Timeline Activities linked to the company" +msgstr "タイムライン 会社に関連する活動" + +#: src/modules/note/standard-objects/note.workspace-entity.ts:132 +msgid "Timeline Activities linked to the note." +msgstr "メモにリンクされたタイムライン活動。" + +#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:212 +msgid "Timeline Activities linked to the opportunity." +msgstr "タイムライン 機会に関連する活動。" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:186 +msgid "Timeline Activities linked to the task." +msgstr "タイムライン タスクにリンクされた活動" + +#: src/engine/twenty-orm/custom.workspace-entity.ts:139 +msgid "Timeline Activities tied to the {label}" +msgstr "{label}]に紐づくタイムライン活動" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:33 +msgid "Timeline Activity" +msgstr "タイムライン活動" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:199 +msgid "Timeline activities linked to the run" +msgstr "ランに関連したタイムライン活動" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:167 +msgid "Timeline activities linked to the version" +msgstr "バージョンにリンクしたタイムライン活動" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:156 +msgid "Timeline activities linked to the workflow" +msgstr "ワークフローにリンクされたタイムラインアクティビティ" + +#: src/modules/task/standard-objects/task.workspace-entity.ts:68 +#: src/modules/note/standard-objects/note.workspace-entity.ts:66 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:39 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:40 +msgid "Title" +msgstr "タイトル" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:59 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:135 +#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:60 +msgid "Type" +msgstr "タイプ" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:98 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:99 +msgid "Update DateTime" +msgstr "更新日時" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:126 +msgid "User Email" +msgstr "ユーザーEメール" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:135 +msgid "User Id" +msgstr "ユーザーID" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:270 +msgid "User time zone" +msgstr "ユーザーのタイムゾーン" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:279 +msgid "User's preferred date format" +msgstr "ユーザーが希望する日付フォーマット" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:315 +msgid "User's preferred time format" +msgstr "ユーザーが希望する時間フォーマット" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:51 +msgid "Value" +msgstr "価値" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:104 +msgid "Version status" +msgstr "バージョンステータス" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:94 +msgid "Version steps" +msgstr "バージョン・ステップ" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:84 +msgid "Version trigger" +msgstr "バージョン・トリガー" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:110 +msgid "Versions" +msgstr "バージョン" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:31 +#: src/modules/view/standard-objects/view-sort.workspace-entity.ts:57 +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:70 +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:67 +#: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:38 +#: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:39 +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:85 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:208 +msgid "View" +msgstr "表示" + +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:30 +msgid "View Field" +msgstr "フィールドを見る" + +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:60 +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:75 +msgid "View Field position" +msgstr "フィールドポジションを見る" + +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:86 +msgid "View Field related view" +msgstr "ビューフィールド関連ビュー" + +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:65 +msgid "View Field size" +msgstr "フィールドサイズを見る" + +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:46 +msgid "View Field target field" +msgstr "対象フィールドを見る" + +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:55 +msgid "View Field visibility" +msgstr "フィールドの視界を見る" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:117 +#: src/modules/view/standard-objects/view.workspace-entity.ts:118 +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:31 +msgid "View Fields" +msgstr "ビュー・フィールズ" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:23 +msgid "View Filter" +msgstr "フィルターを見る" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:60 +msgid "View Filter Display Value" +msgstr "フィルター表示値の表示" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:83 +#: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:27 +msgid "View Filter Group" +msgstr "フィルターグループを見る" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:82 +msgid "View Filter Group Id" +msgstr "フィルターグループIDを表示" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:153 +#: src/modules/view/standard-objects/view.workspace-entity.ts:154 +#: src/modules/view/standard-objects/view-filter-group.workspace-entity.ts:28 +msgid "View Filter Groups" +msgstr "フィルターグループの表示" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:43 +msgid "View Filter operand" +msgstr "フィルタ・オペランドを表示" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:68 +msgid "View Filter related view" +msgstr "フィルター関連のビュー" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:35 +msgid "View Filter target field" +msgstr "フィルター対象フィールドを表示" + +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:52 +msgid "View Filter value" +msgstr "フィルター値を見る" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:141 +#: src/modules/view/standard-objects/view.workspace-entity.ts:142 +#: src/modules/view/standard-objects/view-filter.workspace-entity.ts:24 +msgid "View Filters" +msgstr "フィルターを見る" + +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:21 +msgid "View Group" +msgstr "グループを見る" + +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:71 +msgid "View Group related view" +msgstr "グループ関連ビュー" + +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:33 +msgid "View Group target field" +msgstr "グループ対象フィールドを表示" + +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:42 +msgid "View Group visibility" +msgstr "グループの可視性を表示" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:129 +#: src/modules/view/standard-objects/view.workspace-entity.ts:130 +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:22 +msgid "View Groups" +msgstr "グループを見る" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:88 +msgid "View Kanban column field" +msgstr "カンバン列フィールドを表示" + +#: src/modules/view/standard-objects/view-sort.workspace-entity.ts:24 +msgid "View Sort" +msgstr "ソートを見る" + +#: src/modules/view/standard-objects/view-sort.workspace-entity.ts:49 +msgid "View Sort direction" +msgstr "ソート方向を見る" + +#: src/modules/view/standard-objects/view-sort.workspace-entity.ts:58 +msgid "View Sort related view" +msgstr "関連するビューを並べ替える" + +#: src/modules/view/standard-objects/view-sort.workspace-entity.ts:40 +msgid "View Sort target field" +msgstr "ソート対象フィールドを表示" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:165 +#: src/modules/view/standard-objects/view.workspace-entity.ts:166 +#: src/modules/view/standard-objects/view-sort.workspace-entity.ts:25 +msgid "View Sorts" +msgstr "種類を見る" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:80 +msgid "View icon" +msgstr "アイコンを見る" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:69 +msgid "View key" +msgstr "キーを見る" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:44 +msgid "View name" +msgstr "名前を見る" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:99 +msgid "View position" +msgstr "ポジションを見る" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:52 +msgid "View target object" +msgstr "対象オブジェクトを見る" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:60 +msgid "View type" +msgstr "タイプを見る" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:32 +msgid "Views" +msgstr "ビュー" + +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:96 +#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:97 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:186 +#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:187 +msgid "Visibility" +msgstr "視認性" + +#: src/modules/view/standard-objects/view-group.workspace-entity.ts:41 +#: src/modules/view/standard-objects/view-field.workspace-entity.ts:54 +msgid "Visible" +msgstr "可視" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:18 +msgid "Webhook" +msgstr "ウェブフック" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:40 +msgid "Webhook operation" +msgstr "ウェブフック操作" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:50 +msgid "Webhook operations" +msgstr "ウェブフック操作" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:31 +msgid "Webhook target url" +msgstr "WebhookターゲットURL" + +#: src/modules/webhook/standard-objects/webhook.workspace-entity.ts:19 +msgid "Webhooks" +msgstr "ウェブフック" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:57 +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:127 +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:172 +#: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:43 +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:194 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:133 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:148 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:163 +msgid "Workflow" +msgstr "ワークフロー" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:52 +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:224 +msgid "Workflow Run" +msgstr "ワークフローの実行" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:53 +msgid "Workflow Runs" +msgstr "ワークフローの実行" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:65 +msgid "Workflow Version" +msgstr "ワークフロー版" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:66 +msgid "Workflow Versions" +msgstr "ワークフローのバージョン" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:133 +msgid "Workflow event listeners linked to the workflow." +msgstr "ワークフローにリンクされたワークフローイベントリスナー。" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:173 +msgid "Workflow linked to the run." +msgstr "ランにリンクされたワークフロー。" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:99 +msgid "Workflow record position" +msgstr "ワークフローの記録位置" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:81 +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:82 +msgid "Workflow run ended at" +msgstr "ワークフローの実行は次の時点で終了した。" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:147 +msgid "Workflow run position" +msgstr "ワークフロー実行位置" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:71 +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:72 +msgid "Workflow run started at" +msgstr "ワークフローの実行開始" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:91 +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:92 +msgid "Workflow run status" +msgstr "ワークフロー実行状況" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:143 +msgid "Workflow runs linked to the version." +msgstr "バージョンにリンクされたワークフローの実行。" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:122 +msgid "Workflow runs linked to the workflow." +msgstr "ワークフローにリンクされたワークフローの実行。" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:158 +msgid "Workflow version" +msgstr "ワークフロー版" + +#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:159 +msgid "Workflow version linked to the run." +msgstr "ランにリンクされたワークフローのバージョン。" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:116 +msgid "Workflow version position" +msgstr "ワークフローのバージョン位置" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:111 +msgid "Workflow versions linked to the workflow." +msgstr "ワークフローにリンクされたワークフローのバージョン。" + +#: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:22 +msgid "WorkflowEventListener" +msgstr "ワークフローイベントリスナー" + +#: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:44 +msgid "WorkflowEventListener workflow" +msgstr "WorkflowEventListener ワークフロー" + +#: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:23 +msgid "WorkflowEventListeners" +msgstr "ワークフローイベントリスナー" + +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:209 +msgid "WorkflowVersion" +msgstr "ワークフローバージョン" + +#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:128 +msgid "WorkflowVersion workflow" +msgstr "ワークフローバージョンワークフロー" + +#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:58 +msgid "Workflows" +msgstr "ワークフロー" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:76 +#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:104 +#: src/modules/timeline/standard-objects/audit-log.workspace-entity.ts:90 +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:100 +#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:58 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:138 +#: src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts:139 +msgid "Workspace Member" +msgstr "ワークスペース・メンバー" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:77 +msgid "Workspace Members" +msgstr "ワークスペース・メンバー" + +#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:101 +msgid "Workspace member" +msgstr "ワークスペース・メンバー" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:118 +msgid "Workspace member avatar" +msgstr "ワークスペース・メンバーのアバター" + +#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:89 +msgid "Workspace member name" +msgstr "ワークスペース・メンバー名" + +#: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:43 +#: src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts:44 +msgid "WorkspaceMember" +msgstr "ワークスペース・メンバー" + +#: src/modules/person/standard-objects/person.workspace-entity.ts:99 +#: src/modules/company/standard-objects/company.workspace-entity.ts:103 +msgid "X" +msgstr "X" + +#: src/modules/company/standard-objects/company.workspace-entity.ts:177 +msgid "Your team member responsible for managing the company account" +msgstr "企業アカウントの管理を担当するチームメンバー" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:40 +msgid "handle" +msgstr "ハンドル" + +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:126 +#: src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts:127 +msgid "iCal UID" +msgstr "iCal UID" + +#: src/modules/view/standard-objects/view.workspace-entity.ts:87 +msgid "kanbanfieldMetadataId" +msgstr "kanbanfieldMetadataId" + +#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:49 +msgid "provider" +msgstr "プロバイダー" diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/ko.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/ko.po index aa2d5e4d14e9..763e56cfad3a 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/ko.po +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/ko.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 13:59+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/pt-br.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/pt-br.po index 176c53ed4a63..3146b3133241 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/pt-br.po +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/pt-br.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 13:59+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/pt-pt.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/pt-pt.po index 664bd1006f2a..d8aec47ee9c1 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/pt-pt.po +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/pt-pt.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 13:59+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/zh-Hans.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/zh-Hans.po index 142e1664f7c5..7ad8cc73c93d 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/zh-Hans.po +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/zh-Hans.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 13:59+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/packages/twenty-server/src/engine/core-modules/i18n/locales/zh-Hant.po b/packages/twenty-server/src/engine/core-modules/i18n/locales/zh-Hant.po index 7c0f0c43d1ba..7cac42f2392f 100644 --- a/packages/twenty-server/src/engine/core-modules/i18n/locales/zh-Hant.po +++ b/packages/twenty-server/src/engine/core-modules/i18n/locales/zh-Hant.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"POT-Creation-Date: 2025-01-31 13:59+0100\n" +"POT-Creation-Date: 2025-02-01 10:10+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/packages/twenty-server/src/engine/core-modules/jwt/services/jwt-wrapper.service.ts b/packages/twenty-server/src/engine/core-modules/jwt/services/jwt-wrapper.service.ts index f3237e794162..51ec81933ad5 100644 --- a/packages/twenty-server/src/engine/core-modules/jwt/services/jwt-wrapper.service.ts +++ b/packages/twenty-server/src/engine/core-modules/jwt/services/jwt-wrapper.service.ts @@ -4,13 +4,13 @@ import { JwtService, JwtSignOptions, JwtVerifyOptions } from '@nestjs/jwt'; import { createHash } from 'crypto'; import * as jwt from 'jsonwebtoken'; +import { isDefined } from 'twenty-shared'; import { AuthException, AuthExceptionCode, } from 'src/engine/core-modules/auth/auth.exception'; import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service'; -import { isDefined } from 'src/utils/is-defined'; export type WorkspaceTokenType = | 'ACCESS' diff --git a/packages/twenty-server/src/engine/core-modules/serverless/drivers/lambda.driver.ts b/packages/twenty-server/src/engine/core-modules/serverless/drivers/lambda.driver.ts index 08e9b719a361..742c8614fe31 100644 --- a/packages/twenty-server/src/engine/core-modules/serverless/drivers/lambda.driver.ts +++ b/packages/twenty-server/src/engine/core-modules/serverless/drivers/lambda.driver.ts @@ -1,7 +1,6 @@ import * as fs from 'fs/promises'; import { join } from 'path'; -import dotenv from 'dotenv'; import { CreateFunctionCommand, DeleteFunctionCommand, @@ -10,51 +9,52 @@ import { InvokeCommandInput, Lambda, LambdaClientConfig, + ListLayerVersionsCommand, + ListLayerVersionsCommandInput, PublishLayerVersionCommand, PublishLayerVersionCommandInput, PublishVersionCommand, PublishVersionCommandInput, ResourceNotFoundException, UpdateFunctionCodeCommand, - waitUntilFunctionUpdatedV2, - ListLayerVersionsCommandInput, - ListLayerVersionsCommand, UpdateFunctionConfigurationCommand, UpdateFunctionConfigurationCommandInput, + waitUntilFunctionUpdatedV2, } from '@aws-sdk/client-lambda'; import { CreateFunctionCommandInput } from '@aws-sdk/client-lambda/dist-types/commands/CreateFunctionCommand'; import { UpdateFunctionCodeCommandInput } from '@aws-sdk/client-lambda/dist-types/commands/UpdateFunctionCodeCommand'; +import dotenv from 'dotenv'; +import { isDefined } from 'twenty-shared'; import { ServerlessDriver, ServerlessExecuteResult, } from 'src/engine/core-modules/serverless/drivers/interfaces/serverless-driver.interface'; -import { - ServerlessFunctionEntity, - ServerlessFunctionRuntime, -} from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; +import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; +import { COMMON_LAYER_NAME } from 'src/engine/core-modules/serverless/drivers/constants/common-layer-name'; +import { ENV_FILE_NAME } from 'src/engine/core-modules/serverless/drivers/constants/env-file-name'; +import { OUTDIR_FOLDER } from 'src/engine/core-modules/serverless/drivers/constants/outdir-folder'; +import { SERVERLESS_TMPDIR_FOLDER } from 'src/engine/core-modules/serverless/drivers/constants/serverless-tmpdir-folder'; +import { compileTypescript } from 'src/engine/core-modules/serverless/drivers/utils/compile-typescript'; +import { copyAndBuildDependencies } from 'src/engine/core-modules/serverless/drivers/utils/copy-and-build-dependencies'; +import { createZipFile } from 'src/engine/core-modules/serverless/drivers/utils/create-zip-file'; import { LambdaBuildDirectoryManager, NODE_LAYER_SUBFOLDER, } from 'src/engine/core-modules/serverless/drivers/utils/lambda-build-directory-manager'; -import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; -import { createZipFile } from 'src/engine/core-modules/serverless/drivers/utils/create-zip-file'; +import { getServerlessFolder } from 'src/engine/core-modules/serverless/utils/serverless-get-folder.utils'; import { ServerlessFunctionExecutionStatus } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function-execution-result.dto'; +import { + ServerlessFunctionEntity, + ServerlessFunctionRuntime, +} from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; import { ServerlessFunctionException, ServerlessFunctionExceptionCode, } from 'src/engine/metadata-modules/serverless-function/serverless-function.exception'; -import { isDefined } from 'src/utils/is-defined'; -import { COMMON_LAYER_NAME } from 'src/engine/core-modules/serverless/drivers/constants/common-layer-name'; -import { copyAndBuildDependencies } from 'src/engine/core-modules/serverless/drivers/utils/copy-and-build-dependencies'; -import { getServerlessFolder } from 'src/engine/core-modules/serverless/utils/serverless-get-folder.utils'; -import { SERVERLESS_TMPDIR_FOLDER } from 'src/engine/core-modules/serverless/drivers/constants/serverless-tmpdir-folder'; -import { compileTypescript } from 'src/engine/core-modules/serverless/drivers/utils/compile-typescript'; -import { ENV_FILE_NAME } from 'src/engine/core-modules/serverless/drivers/constants/env-file-name'; -import { OUTDIR_FOLDER } from 'src/engine/core-modules/serverless/drivers/constants/outdir-folder'; -const UPDATE_FUNCTION_DURATION_TIMEOUT_IN_SECONDS = 30; +const UPDATE_FUNCTION_DURATION_TIMEOUT_IN_SECONDS = 60; export interface LambdaDriverOptions extends LambdaClientConfig { fileStorageService: FileStorageService; @@ -133,7 +133,7 @@ export class LambdaDriver implements ServerlessDriver { await lambdaBuildDirectoryManager.clean(); if (!isDefined(result.LayerVersionArn)) { - throw new Error('new layer version arn si undefined'); + throw new Error('new layer version arn if undefined'); } return result.LayerVersionArn; @@ -177,15 +177,13 @@ export class LambdaDriver implements ServerlessDriver { return join(SERVERLESS_TMPDIR_FOLDER, serverlessFunction.id, version); }; - async build(serverlessFunction: ServerlessFunctionEntity, version: string) { - const computedVersion = - version === 'latest' ? serverlessFunction.latestVersion : version; + async build(serverlessFunction: ServerlessFunctionEntity, version: 'draft') { + if (version !== 'draft') { + throw new Error("We can only build 'draft' version with lambda driver"); + } const inMemoryServerlessFunctionFolderPath = - this.getInMemoryServerlessFunctionFolderPath( - serverlessFunction, - computedVersion, - ); + this.getInMemoryServerlessFunctionFolderPath(serverlessFunction, version); const folderPath = getServerlessFolder({ serverlessFunction, diff --git a/packages/twenty-server/src/engine/core-modules/user/user.validate.ts b/packages/twenty-server/src/engine/core-modules/user/user.validate.ts index cda344200091..9a0e40d9f690 100644 --- a/packages/twenty-server/src/engine/core-modules/user/user.validate.ts +++ b/packages/twenty-server/src/engine/core-modules/user/user.validate.ts @@ -1,10 +1,11 @@ +import { isDefined } from 'twenty-shared'; + import { User } from 'src/engine/core-modules/user/user.entity'; -import { CustomException } from 'src/utils/custom-exception'; -import { isDefined } from 'src/utils/is-defined'; import { UserException, UserExceptionCode, } from 'src/engine/core-modules/user/user.exception'; +import { CustomException } from 'src/utils/custom-exception'; const assertIsDefinedOrThrow = ( user: User | undefined | null, diff --git a/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.ts b/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.ts index 2c25a04c4ca4..c7c73128784a 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace-invitation/services/workspace-invitation.service.ts @@ -7,6 +7,7 @@ import { render } from '@react-email/render'; import { addMilliseconds } from 'date-fns'; import ms from 'ms'; import { SendInviteLinkEmail } from 'twenty-emails'; +import { APP_LOCALES } from 'twenty-shared'; import { IsNull, Repository } from 'typeorm'; import { @@ -296,13 +297,11 @@ export class WorkspaceInvitationService { lastName: sender.lastName, }, serverUrl: this.environmentService.get('SERVER_URL'), + locale: 'en' as keyof typeof APP_LOCALES, }; const emailTemplate = SendInviteLinkEmail(emailData); - const html = render(emailTemplate, { - pretty: true, - }); - + const html = render(emailTemplate); const text = render(emailTemplate, { plainText: true, }); diff --git a/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts b/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts index ed724900e9c5..ea20e8b98236 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts @@ -4,11 +4,12 @@ import { InjectRepository } from '@nestjs/typeorm'; import assert from 'assert'; import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm'; -import { WorkspaceActivationStatus } from 'twenty-shared'; +import { WorkspaceActivationStatus, isDefined } from 'twenty-shared'; import { Repository } from 'typeorm'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; import { BillingService } from 'src/engine/core-modules/billing/services/billing.service'; +import { DomainManagerService } from 'src/engine/core-modules/domain-manager/services/domain-manager.service'; import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; @@ -23,8 +24,6 @@ import { import { workspaceValidator } from 'src/engine/core-modules/workspace/workspace.validate'; import { WorkspaceManagerService } from 'src/engine/workspace-manager/workspace-manager.service'; import { DEFAULT_FEATURE_FLAGS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/default-feature-flags'; -import { isDefined } from 'src/utils/is-defined'; -import { DomainManagerService } from 'src/engine/core-modules/domain-manager/services/domain-manager.service'; @Injectable() // eslint-disable-next-line @nx/workspace-inject-workspace-repository diff --git a/packages/twenty-server/src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util.ts b/packages/twenty-server/src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util.ts index 72e4253b6d52..2f1dcd73397e 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util.ts @@ -1,7 +1,8 @@ +import { isDefined } from 'twenty-shared'; + import { SSOIdentityProviderStatus } from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity'; import { AuthProviders } from 'src/engine/core-modules/workspace/dtos/public-workspace-data-output'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; -import { isDefined } from 'src/utils/is-defined'; export const getAuthProvidersByWorkspace = ({ workspace, diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts index ba92894bec63..526f49cf1980 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace.resolver.ts @@ -11,11 +11,13 @@ import { InjectRepository } from '@nestjs/typeorm'; import { FileUpload, GraphQLUpload } from 'graphql-upload'; import { Repository } from 'typeorm'; +import { isDefined } from 'twenty-shared'; import { FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.interface'; import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; +import { CustomHostnameDetails } from 'src/engine/core-modules/domain-manager/dtos/custom-hostname-details'; import { DomainManagerService } from 'src/engine/core-modules/domain-manager/services/domain-manager.service'; import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; @@ -42,9 +44,7 @@ import { UserAuthGuard } from 'src/engine/guards/user-auth.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { GraphqlValidationExceptionFilter } from 'src/filters/graphql-validation-exception.filter'; import { assert } from 'src/utils/assert'; -import { isDefined } from 'src/utils/is-defined'; import { streamToBuffer } from 'src/utils/stream-to-buffer'; -import { CustomHostnameDetails } from 'src/engine/core-modules/domain-manager/dtos/custom-hostname-details'; import { Workspace } from './workspace.entity'; diff --git a/packages/twenty-server/src/engine/decorators/auth/auth-user-workspace-id.decorator.ts b/packages/twenty-server/src/engine/decorators/auth/auth-user-workspace-id.decorator.ts new file mode 100644 index 000000000000..7e7b3347b24b --- /dev/null +++ b/packages/twenty-server/src/engine/decorators/auth/auth-user-workspace-id.decorator.ts @@ -0,0 +1,11 @@ +import { ExecutionContext, createParamDecorator } from '@nestjs/common'; + +import { getRequest } from 'src/utils/extract-request'; + +export const AuthUserWorkspaceId = createParamDecorator( + (data: unknown, ctx: ExecutionContext) => { + const request = getRequest(ctx); + + return request.userWorkspaceId; + }, +); diff --git a/packages/twenty-server/src/engine/guards/jwt-auth.guard.ts b/packages/twenty-server/src/engine/guards/jwt-auth.guard.ts index fb7edf644ba4..fb451e3d5c72 100644 --- a/packages/twenty-server/src/engine/guards/jwt-auth.guard.ts +++ b/packages/twenty-server/src/engine/guards/jwt-auth.guard.ts @@ -27,6 +27,7 @@ export class JwtAuthGuard implements CanActivate { request.workspaceId = data.workspace.id; request.workspaceMetadataVersion = metadataVersion; request.workspaceMemberId = data.workspaceMemberId; + request.userWorkspaceId = data.userWorkspaceId; return true; } catch (error) { diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type.ts index 3ea641bd75cb..91722d51b9cc 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type.ts @@ -1,9 +1,9 @@ import { ConnectedAccountProvider, FieldMetadataType } from 'twenty-shared'; +import { v4 } from 'uuid'; -import { - CompositeProperty, - CompositeType, -} from 'src/engine/metadata-modules/field-metadata/interfaces/composite-type.interface'; +import { CompositeType } from 'src/engine/metadata-modules/field-metadata/interfaces/composite-type.interface'; + +import { FieldMetadataDefaultOption } from 'src/engine/metadata-modules/field-metadata/dtos/options.input'; export enum FieldActorSource { EMAIL = 'EMAIL', @@ -23,12 +23,16 @@ export const actorCompositeType: CompositeType = { type: FieldMetadataType.SELECT, hidden: false, isRequired: true, - options: Object.keys(FieldActorSource).map((key, index) => ({ - label: `${FieldActorSource[key].toLowerCase()}`, - value: key, - position: index, - })), - } as CompositeProperty<FieldMetadataType.SELECT>, + options: Object.keys(FieldActorSource).map( + (key, index) => + ({ + id: v4(), + label: `${FieldActorSource[key].toLowerCase()}`, + value: key, + position: index, + }) satisfies Required<FieldMetadataDefaultOption>, + ), + }, { name: 'workspaceMemberId', type: FieldMetadataType.UUID, diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.service.ts index b1845aa5fcf0..1e21b0b9a713 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.service.ts @@ -4,7 +4,7 @@ import { InjectDataSource, InjectRepository } from '@nestjs/typeorm'; import { i18n } from '@lingui/core'; import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm'; import isEmpty from 'lodash.isempty'; -import { FieldMetadataType } from 'twenty-shared'; +import { APP_LOCALES, FieldMetadataType, isDefined } from 'twenty-shared'; import { DataSource, FindOneOptions, In, Repository } from 'typeorm'; import { v4 as uuidV4, v4 } from 'uuid'; @@ -61,7 +61,6 @@ import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target import { WorkspaceMigrationRunnerService } from 'src/engine/workspace-manager/workspace-migration-runner/workspace-migration-runner.service'; import { ViewService } from 'src/modules/view/services/view.service'; import { ViewFieldWorkspaceEntity } from 'src/modules/view/standard-objects/view-field.workspace-entity'; -import { isDefined } from 'src/utils/is-defined'; import { FieldMetadataValidationService } from './field-metadata-validation.service'; import { FieldMetadataEntity } from './field-metadata.entity'; @@ -600,7 +599,7 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit async resolveTranslatableString( fieldMetadata: FieldMetadataDTO, labelKey: 'label' | 'description', - locale: string | undefined, + locale: keyof typeof APP_LOCALES | undefined, ): Promise<string> { if (fieldMetadata.isCustom) { return fieldMetadata[labelKey] ?? ''; diff --git a/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.service.ts index c0ab6d4058fb..91a69e3e6838 100644 --- a/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.service.ts @@ -3,6 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import isEmpty from 'lodash.isempty'; import { Repository } from 'typeorm'; +import { isDefined } from 'twenty-shared'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { @@ -20,7 +21,6 @@ import { } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity'; import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service'; import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class IndexMetadataService { diff --git a/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.service.ts b/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.service.ts index af0746159a80..cbf1734f3e0b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/permissions/permissions.service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; +import { isDefined } from 'twenty-shared'; import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service'; import { UserWorkspace } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; @@ -12,7 +13,6 @@ import { } from 'src/engine/metadata-modules/permissions/permissions.exception'; import { RoleEntity } from 'src/engine/metadata-modules/permissions/role.entity'; import { UserWorkspaceRoleEntity } from 'src/engine/metadata-modules/permissions/user-workspace-role.entity'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class PermissionsService { diff --git a/packages/twenty-server/src/engine/metadata-modules/relation-metadata/relation-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/relation-metadata/relation-metadata.service.ts index 27ef8baca58a..2a65510f39ec 100644 --- a/packages/twenty-server/src/engine/metadata-modules/relation-metadata/relation-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/relation-metadata/relation-metadata.service.ts @@ -3,7 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm'; import camelCase from 'lodash.camelcase'; -import { FieldMetadataType } from 'twenty-shared'; +import { FieldMetadataType, isDefined } from 'twenty-shared'; import { FindOneOptions, In, Repository } from 'typeorm'; import { v4 as uuidV4 } from 'uuid'; @@ -34,7 +34,6 @@ import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service'; import { WorkspaceMigrationRunnerService } from 'src/engine/workspace-manager/workspace-migration-runner/workspace-migration-runner.service'; import { BASE_OBJECT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; -import { isDefined } from 'src/utils/is-defined'; import { RelationMetadataEntity, diff --git a/packages/twenty-server/src/engine/metadata-modules/search/search.service.ts b/packages/twenty-server/src/engine/metadata-modules/search/search.service.ts index 6103bd8c3f68..a8711dd875fa 100644 --- a/packages/twenty-server/src/engine/metadata-modules/search/search.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/search/search.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { FieldMetadataType } from 'twenty-shared'; +import { FieldMetadataType, isDefined } from 'twenty-shared'; import { Repository } from 'typeorm'; import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface'; @@ -28,7 +28,6 @@ import { getTsVectorColumnExpressionFromFields, } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/get-ts-vector-column-expression.util'; import { SearchableFieldType } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/is-searchable-field.util'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class SearchService { diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/dtos/build-draft-serverless-function.input.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/dtos/build-draft-serverless-function.input.ts new file mode 100644 index 000000000000..3b47ec6e2e29 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/dtos/build-draft-serverless-function.input.ts @@ -0,0 +1,9 @@ +import { ID, InputType } from '@nestjs/graphql'; + +import { IDField } from '@ptc-org/nestjs-query-graphql'; + +@InputType() +export class BuildDraftServerlessFunctionInput { + @IDField(() => ID, { description: 'The id of the function.' }) + id!: string; +} diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/dtos/serverless-function-execution-result.dto.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/dtos/serverless-function-execution-result.dto.ts index cbd87a3dcc2d..a839a6af6bf5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/dtos/serverless-function-execution-result.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/dtos/serverless-function-execution-result.dto.ts @@ -4,6 +4,7 @@ import { IsObject, IsOptional } from 'class-validator'; import graphqlTypeJson from 'graphql-type-json'; export enum ServerlessFunctionExecutionStatus { + IDLE = 'IDLE', SUCCESS = 'SUCCESS', ERROR = 'ERROR', } diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/jobs/build-serverless-function.job.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/jobs/build-serverless-function.job.ts deleted file mode 100644 index 317219d8f997..000000000000 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/jobs/build-serverless-function.job.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Scope } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; - -import { Repository } from 'typeorm'; - -import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; -import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; -import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; -import { ServerlessService } from 'src/engine/core-modules/serverless/serverless.service'; -import { - ServerlessFunctionEntity, - ServerlessFunctionSyncStatus, -} from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; -import { isDefined } from 'src/utils/is-defined'; - -export type BuildServerlessFunctionBatchEvent = { - serverlessFunctions: { - serverlessFunctionId: string; - serverlessFunctionVersion: string; - }[]; - workspaceId: string; -}; - -@Processor({ - queueName: MessageQueue.serverlessFunctionQueue, - scope: Scope.REQUEST, -}) -export class BuildServerlessFunctionJob { - constructor( - @InjectRepository(ServerlessFunctionEntity, 'metadata') - private readonly serverlessFunctionRepository: Repository<ServerlessFunctionEntity>, - private readonly serverlessService: ServerlessService, - ) {} - - @Process(BuildServerlessFunctionJob.name) - async handle(batchEvent: BuildServerlessFunctionBatchEvent): Promise<void> { - for (const { - serverlessFunctionId, - serverlessFunctionVersion, - } of batchEvent.serverlessFunctions) { - const serverlessFunction = - await this.serverlessFunctionRepository.findOneBy({ - id: serverlessFunctionId, - workspaceId: batchEvent.workspaceId, - }); - - if (isDefined(serverlessFunction)) { - await this.serverlessFunctionRepository.update(serverlessFunction.id, { - syncStatus: ServerlessFunctionSyncStatus.NOT_READY, - }); - await this.serverlessService.build( - serverlessFunction, - serverlessFunctionVersion, - ); - await this.serverlessFunctionRepository.update(serverlessFunction.id, { - syncStatus: ServerlessFunctionSyncStatus.READY, - }); - } - } - } -} diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.entity.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.entity.ts index 7aa9ee725fb0..3b74a39cdd8c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.entity.ts @@ -13,6 +13,7 @@ const DEFAULT_SERVERLESS_TIMEOUT_SECONDS = 300; // 5 minutes export enum ServerlessFunctionSyncStatus { NOT_READY = 'NOT_READY', + BUILDING = 'BUILDING', READY = 'READY', } diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.exception.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.exception.ts index 1201e47a9554..f5280c89d245 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.exception.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.exception.ts @@ -13,5 +13,6 @@ export enum ServerlessFunctionExceptionCode { FEATURE_FLAG_INVALID = 'FEATURE_FLAG_INVALID', SERVERLESS_FUNCTION_ALREADY_EXIST = 'SERVERLESS_FUNCTION_ALREADY_EXIST', SERVERLESS_FUNCTION_NOT_READY = 'SERVERLESS_FUNCTION_NOT_READY', + SERVERLESS_FUNCTION_BUILDING = 'SERVERLESS_FUNCTION_BUILDING', SERVERLESS_FUNCTION_EXECUTION_LIMIT_REACHED = 'SERVERLESS_FUNCTION_EXECUTION_LIMIT_REACHED', } diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts index 981394dff1cd..02f2b0accb82 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts @@ -11,7 +11,6 @@ import { ThrottlerModule } from 'src/engine/core-modules/throttler/throttler.mod import { ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; import { ServerlessFunctionResolver } from 'src/engine/metadata-modules/serverless-function/serverless-function.resolver'; import { ServerlessFunctionService } from 'src/engine/metadata-modules/serverless-function/serverless-function.service'; -import { BuildServerlessFunctionJob } from 'src/engine/metadata-modules/serverless-function/jobs/build-serverless-function.job'; @Module({ imports: [ @@ -22,11 +21,7 @@ import { BuildServerlessFunctionJob } from 'src/engine/metadata-modules/serverle ThrottlerModule, AnalyticsModule, ], - providers: [ - ServerlessFunctionService, - ServerlessFunctionResolver, - BuildServerlessFunctionJob, - ], + providers: [ServerlessFunctionService, ServerlessFunctionResolver], exports: [ServerlessFunctionService], }) export class ServerlessFunctionModule {} diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.resolver.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.resolver.ts index 716e798e58d3..b3c267358820 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.resolver.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.resolver.ts @@ -24,6 +24,7 @@ import { } from 'src/engine/metadata-modules/serverless-function/serverless-function.exception'; import { ServerlessFunctionService } from 'src/engine/metadata-modules/serverless-function/serverless-function.service'; import { serverlessFunctionGraphQLApiExceptionHandler } from 'src/engine/metadata-modules/serverless-function/utils/serverless-function-graphql-api-exception-handler.utils'; +import { BuildDraftServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/build-draft-serverless-function.input'; @UseGuards(WorkspaceAuthGuard) @Resolver() @@ -204,4 +205,22 @@ export class ServerlessFunctionResolver { serverlessFunctionGraphQLApiExceptionHandler(error); } } + + @Mutation(() => ServerlessFunctionDTO) + async buildDraftServerlessFunction( + @Args('input') input: BuildDraftServerlessFunctionInput, + @AuthWorkspace() { id: workspaceId }: Workspace, + ) { + try { + await this.checkFeatureFlag(workspaceId); + const { id } = input; + + return await this.serverlessFunctionService.buildDraftServerlessFunction( + id, + workspaceId, + ); + } catch (error) { + serverlessFunctionGraphQLApiExceptionHandler(error); + } + } } diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.service.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.service.ts index 66cc4d0f1606..c86ab3122520 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.service.ts @@ -5,6 +5,7 @@ import { basename, dirname, join } from 'path'; import deepEqual from 'deep-equal'; import { IsNull, Not, Repository } from 'typeorm'; +import { isDefined } from 'twenty-shared'; import { FileStorageExceptionCode } from 'src/engine/core-modules/file-storage/interfaces/file-storage-exception'; import { ServerlessExecuteResult } from 'src/engine/core-modules/serverless/drivers/interfaces/serverless-driver.interface'; @@ -26,10 +27,6 @@ import { getServerlessFolder } from 'src/engine/core-modules/serverless/utils/se import { ThrottlerService } from 'src/engine/core-modules/throttler/throttler.service'; import { CreateServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/create-serverless-function.input'; import { UpdateServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/update-serverless-function.input'; -import { - BuildServerlessFunctionBatchEvent, - BuildServerlessFunctionJob, -} from 'src/engine/metadata-modules/serverless-function/jobs/build-serverless-function.job'; import { ServerlessFunctionEntity, ServerlessFunctionSyncStatus, @@ -38,7 +35,6 @@ import { ServerlessFunctionException, ServerlessFunctionExceptionCode, } from 'src/engine/metadata-modules/serverless-function/serverless-function.exception'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class ServerlessFunctionService { @@ -141,6 +137,16 @@ export class ServerlessFunctionService { workspaceId, }); + if ( + version === 'draft' && + functionToExecute.syncStatus !== ServerlessFunctionSyncStatus.READY + ) { + await this.buildDraftServerlessFunction( + functionToExecute.id, + workspaceId, + ); + } + const resultServerlessFunction = await this.serverlessService.execute( functionToExecute, payload, @@ -276,12 +282,6 @@ export class ServerlessFunctionService { }); } - await this.buildServerlessFunction({ - serverlessFunctionId: existingServerlessFunction.id, - serverlessFunctionVersion: 'draft', - workspaceId, - }); - return this.serverlessFunctionRepository.findOneBy({ id: existingServerlessFunction.id, }); @@ -322,6 +322,7 @@ export class ServerlessFunctionService { ...serverlessFunctionInput, workspaceId, layerVersion: LAST_LAYER_VERSION, + syncStatus: ServerlessFunctionSyncStatus.NOT_READY, }); const createdServerlessFunction = @@ -341,12 +342,6 @@ export class ServerlessFunctionService { }); } - await this.buildServerlessFunction({ - serverlessFunctionId: createdServerlessFunction.id, - serverlessFunctionVersion: 'draft', - workspaceId, - }); - return this.serverlessFunctionRepository.findOneBy({ id: createdServerlessFunction.id, }); @@ -361,6 +356,10 @@ export class ServerlessFunctionService { version: string; workspaceId: string; }) { + if (version === 'draft') { + return; + } + const serverlessFunction = await this.findOneOrFail({ id, workspaceId, @@ -381,10 +380,8 @@ export class ServerlessFunctionService { }, }); - await this.buildServerlessFunction({ - serverlessFunctionId: id, - serverlessFunctionVersion: 'draft', - workspaceId, + await this.serverlessFunctionRepository.update(serverlessFunction.id, { + syncStatus: ServerlessFunctionSyncStatus.NOT_READY, }); } @@ -403,24 +400,31 @@ export class ServerlessFunctionService { } } - private async buildServerlessFunction({ - serverlessFunctionId, - serverlessFunctionVersion, - workspaceId, - }: { - serverlessFunctionId: string; - serverlessFunctionVersion: string; - workspaceId: string; - }) { - await this.messageQueueService.add<BuildServerlessFunctionBatchEvent>( - BuildServerlessFunctionJob.name, - { - serverlessFunctions: [ - { serverlessFunctionId, serverlessFunctionVersion }, - ], - workspaceId, - }, - { id: `${serverlessFunctionId}-${serverlessFunctionVersion}` }, - ); + async buildDraftServerlessFunction(id: string, workspaceId: string) { + const functionToBuild = await this.findOneOrFail({ + id, + workspaceId, + }); + + if (functionToBuild.syncStatus === ServerlessFunctionSyncStatus.READY) { + return functionToBuild; + } + + if (functionToBuild.syncStatus === ServerlessFunctionSyncStatus.BUILDING) { + throw new ServerlessFunctionException( + 'This function is currently building. Please try later', + ServerlessFunctionExceptionCode.SERVERLESS_FUNCTION_BUILDING, + ); + } + + await this.serverlessFunctionRepository.update(functionToBuild.id, { + syncStatus: ServerlessFunctionSyncStatus.BUILDING, + }); + await this.serverlessService.build(functionToBuild, 'draft'); + await this.serverlessFunctionRepository.update(functionToBuild.id, { + syncStatus: ServerlessFunctionSyncStatus.READY, + }); + + return functionToBuild; } } diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/serverless-function-graphql-api-exception-handler.utils.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/serverless-function-graphql-api-exception-handler.utils.ts index 04a1ab8fddf3..5518e7dac667 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/serverless-function-graphql-api-exception-handler.utils.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/serverless-function-graphql-api-exception-handler.utils.ts @@ -18,6 +18,7 @@ export const serverlessFunctionGraphQLApiExceptionHandler = (error: any) => { case ServerlessFunctionExceptionCode.SERVERLESS_FUNCTION_ALREADY_EXIST: throw new ConflictError(error.message); case ServerlessFunctionExceptionCode.SERVERLESS_FUNCTION_NOT_READY: + case ServerlessFunctionExceptionCode.SERVERLESS_FUNCTION_BUILDING: case ServerlessFunctionExceptionCode.FEATURE_FLAG_INVALID: throw new ForbiddenError(error.message); default: diff --git a/packages/twenty-server/src/engine/middlewares/middleware.service.ts b/packages/twenty-server/src/engine/middlewares/middleware.service.ts index 1fa56e476c55..e53cf11d51b7 100644 --- a/packages/twenty-server/src/engine/middlewares/middleware.service.ts +++ b/packages/twenty-server/src/engine/middlewares/middleware.service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common'; import { Request, Response } from 'express'; import { ExtractJwt } from 'passport-jwt'; +import { isDefined } from 'twenty-shared'; import { AuthExceptionCode } from 'src/engine/core-modules/auth/auth.exception'; import { AccessTokenService } from 'src/engine/core-modules/auth/token/services/access-token.service'; @@ -19,7 +20,6 @@ import { } from 'src/engine/utils/global-exception-handler.util'; import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service'; import { CustomException } from 'src/utils/custom-exception'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class MiddlewareService { diff --git a/packages/twenty-server/src/engine/seeder/seeder.service.ts b/packages/twenty-server/src/engine/seeder/seeder.service.ts index 14ce7885fba3..8a7e43fa0358 100644 --- a/packages/twenty-server/src/engine/seeder/seeder.service.ts +++ b/packages/twenty-server/src/engine/seeder/seeder.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@nestjs/common'; -import { capitalize, FieldMetadataType } from 'twenty-shared'; +import { capitalize, FieldMetadataType, isDefined } from 'twenty-shared'; import { ObjectMetadataSeed } from 'src/engine/seeder/interfaces/object-metadata-seed'; @@ -12,7 +12,6 @@ import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field- import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service'; import { computeTableName } from 'src/engine/utils/compute-table-name.util'; import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class SeederService { diff --git a/packages/twenty-server/src/engine/twenty-orm/utils/format-column-names-from-composite-field-and-subfield.util.ts b/packages/twenty-server/src/engine/twenty-orm/utils/format-column-names-from-composite-field-and-subfield.util.ts index f9e95804da0e..387449256f2b 100644 --- a/packages/twenty-server/src/engine/twenty-orm/utils/format-column-names-from-composite-field-and-subfield.util.ts +++ b/packages/twenty-server/src/engine/twenty-orm/utils/format-column-names-from-composite-field-and-subfield.util.ts @@ -1,6 +1,4 @@ -import { capitalize } from 'twenty-shared'; - -import { isDefined } from 'src/utils/is-defined'; +import { capitalize, isDefined } from 'twenty-shared'; export const formatColumnNamesFromCompositeFieldAndSubfields = ( fieldName: string, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts index 270c511495e1..5c49ca1c80de 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-cleaner/services/cleaner.workspace-service.ts @@ -1,7 +1,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { render } from '@react-email/components'; +import { render } from '@react-email/render'; import { CleanSuspendedWorkspaceEmail, WarnSuspendedWorkspaceEmail, @@ -176,12 +176,8 @@ export class CleanerWorkspaceService { workspaceDisplayName, }; const emailTemplate = CleanSuspendedWorkspaceEmail(emailData); - const html = render(emailTemplate, { - pretty: true, - }); - const text = render(emailTemplate, { - plainText: true, - }); + const html = render(emailTemplate, { pretty: true }); + const text = render(emailTemplate, { plainText: true }); this.emailService.send({ to: workspaceMember.userEmail, diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-get-message-list.service.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-get-message-list.service.ts index ebbb11a42b1f..afb5ecb222ae 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-get-message-list.service.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-get-message-list.service.ts @@ -1,6 +1,7 @@ import { Injectable } from '@nestjs/common'; import { gmail_v1 as gmailV1 } from 'googleapis'; +import { isDefined } from 'twenty-shared'; import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; import { @@ -19,7 +20,6 @@ import { GetPartialMessageListResponse, } from 'src/modules/messaging/message-import-manager/services/messaging-get-message-list.service'; import { assertNotNull } from 'src/utils/assert'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class GmailGetMessageListService { diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-get-messages.service.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-get-messages.service.ts index ce228e3d997b..34fe3f1e10df 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-get-messages.service.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-get-messages.service.ts @@ -2,13 +2,13 @@ import { Injectable, Logger } from '@nestjs/common'; import { AxiosResponse } from 'axios'; import { gmail_v1 as gmailV1 } from 'googleapis'; +import { isDefined } from 'twenty-shared'; import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; import { GmailFetchByBatchService } from 'src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-fetch-by-batch.service'; import { GmailHandleErrorService } from 'src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-handle-error.service'; import { parseAndFormatGmailMessage } from 'src/modules/messaging/message-import-manager/drivers/gmail/utils/parse-and-format-gmail-message.util'; import { MessageWithParticipants } from 'src/modules/messaging/message-import-manager/types/message'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class GmailGetMessagesService { diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/microsoft/services/microsoft-get-messages.service.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/microsoft/services/microsoft-get-messages.service.ts index 84201dc6279d..b9a0bd0efd7c 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/microsoft/services/microsoft-get-messages.service.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/microsoft/services/microsoft-get-messages.service.ts @@ -1,11 +1,12 @@ import { Injectable, Logger } from '@nestjs/common'; +import { isDefined } from 'twenty-shared'; + import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; import { computeMessageDirection } from 'src/modules/messaging/message-import-manager/drivers/gmail/utils/compute-message-direction.util'; import { MicrosoftGraphBatchResponse } from 'src/modules/messaging/message-import-manager/drivers/microsoft/services/microsoft-get-messages.interface'; import { MessageWithParticipants } from 'src/modules/messaging/message-import-manager/types/message'; import { formatAddressObjectAsParticipants } from 'src/modules/messaging/message-import-manager/utils/format-address-object-as-participants.util'; -import { isDefined } from 'src/utils/is-defined'; import { MicrosoftFetchByBatchService } from './microsoft-fetch-by-batch.service'; import { MicrosoftHandleErrorService } from './microsoft-handle-error.service'; diff --git a/packages/twenty-server/src/modules/workflow/common/workspace-services/workflow-version-step.workspace-service.ts b/packages/twenty-server/src/modules/workflow/common/workspace-services/workflow-version-step.workspace-service.ts index 04905675b7e0..a685e7844c06 100644 --- a/packages/twenty-server/src/modules/workflow/common/workspace-services/workflow-version-step.workspace-service.ts +++ b/packages/twenty-server/src/modules/workflow/common/workspace-services/workflow-version-step.workspace-service.ts @@ -3,6 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { v4 } from 'uuid'; +import { isDefined } from 'twenty-shared'; import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action'; import { BASE_TYPESCRIPT_PROJECT_INPUT_SCHEMA } from 'src/engine/core-modules/serverless/drivers/constants/base-typescript-project-input-schema'; @@ -28,7 +29,6 @@ import { WorkflowAction, WorkflowActionType, } from 'src/modules/workflow/workflow-executor/workflow-actions/types/workflow-action.type'; -import { isDefined } from 'src/utils/is-defined'; const TRIGGER_STEP_ID = 'trigger'; diff --git a/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-builder.workspace-service.ts b/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-builder.workspace-service.ts index 015f5daa0ac5..0afd026ea622 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-builder.workspace-service.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-builder/workflow-builder.workspace-service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; +import { isDefined } from 'twenty-shared'; import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action'; import { checkStringIsDatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/utils/check-string-is-database-event-action'; @@ -19,7 +20,6 @@ import { WorkflowTrigger, WorkflowTriggerType, } from 'src/modules/workflow/workflow-trigger/types/workflow-trigger.type'; -import { isDefined } from 'src/utils/is-defined'; @Injectable() export class WorkflowBuilderWorkspaceService { diff --git a/packages/twenty-server/src/modules/workflow/workflow-executor/workflow-actions/mail-sender/send-email.workflow-action.ts b/packages/twenty-server/src/modules/workflow/workflow-executor/workflow-actions/mail-sender/send-email.workflow-action.ts index 01003b30f49e..49464640a92d 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-executor/workflow-actions/mail-sender/send-email.workflow-action.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-executor/workflow-actions/mail-sender/send-email.workflow-action.ts @@ -3,6 +3,7 @@ import { Injectable, Logger } from '@nestjs/common'; import DOMPurify from 'dompurify'; import { JSDOM } from 'jsdom'; import { z } from 'zod'; +import { isDefined } from 'twenty-shared'; import { WorkflowAction } from 'src/modules/workflow/workflow-executor/interfaces/workflow-action.interface'; @@ -20,7 +21,6 @@ import { } from 'src/modules/workflow/workflow-executor/workflow-actions/mail-sender/exceptions/send-email-action.exception'; import { WorkflowSendEmailActionInput } from 'src/modules/workflow/workflow-executor/workflow-actions/mail-sender/types/workflow-send-email-action-input.type'; import { WorkflowActionResult } from 'src/modules/workflow/workflow-executor/workflow-actions/types/workflow-action-result.type'; -import { isDefined } from 'src/utils/is-defined'; export type WorkflowSendEmailStepOutputSchema = { success: boolean; diff --git a/packages/twenty-server/src/modules/workflow/workflow-status/jobs/workflow-statuses-update.job.ts b/packages/twenty-server/src/modules/workflow/workflow-status/jobs/workflow-statuses-update.job.ts index 467fd090072a..9083a8e5e188 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-status/jobs/workflow-statuses-update.job.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-status/jobs/workflow-statuses-update.job.ts @@ -1,24 +1,25 @@ import { Scope } from '@nestjs/common'; +import { isDefined } from 'twenty-shared'; + import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; +import { ServerlessFunctionService } from 'src/engine/metadata-modules/serverless-function/serverless-function.service'; +import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository'; import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager'; import { WorkflowVersionStatus, WorkflowVersionWorkspaceEntity, } from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity'; import { WorkflowWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow.workspace-entity'; -import { getStatusCombinationFromArray } from 'src/modules/workflow/workflow-status/utils/get-status-combination-from-array.util'; -import { getStatusCombinationFromUpdate } from 'src/modules/workflow/workflow-status/utils/get-status-combination-from-update.util'; -import { getWorkflowStatusesFromCombination } from 'src/modules/workflow/workflow-status/utils/get-statuses-from-combination.util'; -import { ServerlessFunctionService } from 'src/engine/metadata-modules/serverless-function/serverless-function.service'; import { WorkflowAction, WorkflowActionType, } from 'src/modules/workflow/workflow-executor/workflow-actions/types/workflow-action.type'; -import { isDefined } from 'src/utils/is-defined'; -import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository'; +import { getStatusCombinationFromArray } from 'src/modules/workflow/workflow-status/utils/get-status-combination-from-array.util'; +import { getStatusCombinationFromUpdate } from 'src/modules/workflow/workflow-status/utils/get-status-combination-from-update.util'; +import { getWorkflowStatusesFromCombination } from 'src/modules/workflow/workflow-status/utils/get-statuses-from-combination.util'; export enum WorkflowVersionEventType { CREATE = 'CREATE', diff --git a/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts b/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts index 7891470f10ae..1f9c214d30d2 100644 --- a/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts +++ b/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts @@ -1,7 +1,7 @@ import { registerEnumType } from '@nestjs/graphql'; import { msg } from '@lingui/core/macro'; -import { FieldMetadataType } from 'twenty-shared'; +import { APP_LOCALES, FieldMetadataType } from 'twenty-shared'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; @@ -109,7 +109,7 @@ export class WorkspaceMemberWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconLanguage', defaultValue: "'en'", }) - locale: string; + locale: keyof typeof APP_LOCALES; @WorkspaceField({ standardId: WORKSPACE_MEMBER_STANDARD_FIELD_IDS.avatarUrl, diff --git a/packages/twenty-server/src/utils/compute-display-name.ts b/packages/twenty-server/src/utils/compute-display-name.ts index 728dcd3a174c..b024bd39e994 100644 --- a/packages/twenty-server/src/utils/compute-display-name.ts +++ b/packages/twenty-server/src/utils/compute-display-name.ts @@ -1,5 +1,6 @@ +import { isDefined } from 'twenty-shared'; + import { FullNameMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/full-name.composite-type'; -import { isDefined } from 'src/utils/is-defined'; export const computeDisplayName = ( name: FullNameMetadata | null | undefined, diff --git a/packages/twenty-server/src/utils/is-defined.ts b/packages/twenty-server/src/utils/is-defined.ts deleted file mode 100644 index 1be478d76dd0..000000000000 --- a/packages/twenty-server/src/utils/is-defined.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const isDefined = <T>(value: T | null | undefined): value is T => { - return value !== null && value !== undefined; -}; diff --git a/packages/twenty-shared/src/constants/Locales.ts b/packages/twenty-shared/src/constants/Locales.ts index 0a2c634af881..50c01b606f6a 100644 --- a/packages/twenty-shared/src/constants/Locales.ts +++ b/packages/twenty-shared/src/constants/Locales.ts @@ -5,6 +5,7 @@ export const APP_LOCALES = { it: 'it', es: 'es', ko: 'ko', + ja: 'ja', 'pt-PT': 'pt-PT', 'pt-BR': 'pt-BR', 'zh-Hans': 'zh-Hans', diff --git a/packages/twenty-shared/src/index.ts b/packages/twenty-shared/src/index.ts index 42da3fc6ae29..579e14d54785 100644 --- a/packages/twenty-shared/src/index.ts +++ b/packages/twenty-shared/src/index.ts @@ -6,6 +6,6 @@ export * from './types/ConnectedAccountProvider'; export * from './types/FieldMetadataType'; export * from './utils/fieldMetadata/isFieldMetadataDateKind'; export * from './utils/image/getImageAbsoluteURI'; +export * from './utils/isDefined'; export * from './utils/strings'; export * from './workspace'; - diff --git a/packages/twenty-front/src/utils/__tests__/isDefined.test.ts b/packages/twenty-shared/src/utils/__tests__/isDefined.test.ts similarity index 87% rename from packages/twenty-front/src/utils/__tests__/isDefined.test.ts rename to packages/twenty-shared/src/utils/__tests__/isDefined.test.ts index d5b0bae7dd1f..81d379d6fb33 100644 --- a/packages/twenty-front/src/utils/__tests__/isDefined.test.ts +++ b/packages/twenty-shared/src/utils/__tests__/isDefined.test.ts @@ -1,5 +1,4 @@ -import { isDefined } from '~/utils/isDefined'; - +import { isDefined } from '../isDefined'; describe('isDefined', () => { it('returns true if value is not undefined nor null', () => { expect(isDefined('')).toBe(true); diff --git a/packages/twenty-chrome-extension/src/utils/isDefined.ts b/packages/twenty-shared/src/utils/isDefined.ts similarity index 100% rename from packages/twenty-chrome-extension/src/utils/isDefined.ts rename to packages/twenty-shared/src/utils/isDefined.ts diff --git a/packages/twenty-ui/src/display/chip/components/AvatarChip.tsx b/packages/twenty-ui/src/display/chip/components/AvatarChip.tsx index 4cd7736a4567..46d098293fcf 100644 --- a/packages/twenty-ui/src/display/chip/components/AvatarChip.tsx +++ b/packages/twenty-ui/src/display/chip/components/AvatarChip.tsx @@ -4,9 +4,9 @@ import { AvatarType } from '@ui/display/avatar/types/AvatarType'; import { Chip, ChipSize, ChipVariant } from '@ui/display/chip/components/Chip'; import { IconComponent } from '@ui/display/icon/types/IconComponent'; import { ThemeContext } from '@ui/theme'; -import { isDefined } from '@ui/utilities/isDefined'; import { Nullable } from '@ui/utilities/types/Nullable'; import { MouseEvent, useContext } from 'react'; +import { isDefined } from 'twenty-shared'; // Import Link from react-router-dom instead of UndecoratedLink import { Link } from 'react-router-dom'; diff --git a/packages/twenty-ui/src/display/icon/components/TablerIcons.ts b/packages/twenty-ui/src/display/icon/components/TablerIcons.ts index 13561f90f13d..9ccd02fae456 100644 --- a/packages/twenty-ui/src/display/icon/components/TablerIcons.ts +++ b/packages/twenty-ui/src/display/icon/components/TablerIcons.ts @@ -173,6 +173,7 @@ export { IconListCheck, IconListDetails, IconListNumbers, + IconLoader, IconLock, IconLockOpen, IconMail, @@ -236,6 +237,7 @@ export { IconSquare, IconSquareKey, IconSquareRoundedCheck, + IconSquareRoundedX, IconTable, IconTag, IconTags, diff --git a/packages/twenty-ui/src/display/tag/components/Tag.tsx b/packages/twenty-ui/src/display/tag/components/Tag.tsx index 0a9156771648..dc1cb65fb9ff 100644 --- a/packages/twenty-ui/src/display/tag/components/Tag.tsx +++ b/packages/twenty-ui/src/display/tag/components/Tag.tsx @@ -9,7 +9,7 @@ import { ThemeContext, ThemeType, } from '@ui/theme'; -import { isDefined } from '@ui/utilities'; +import { isDefined } from 'twenty-shared'; const spacing5 = THEME_COMMON.spacing(5); const spacing2 = THEME_COMMON.spacing(2); diff --git a/packages/twenty-ui/src/display/tooltip/OverflowingTextWithTooltip.tsx b/packages/twenty-ui/src/display/tooltip/OverflowingTextWithTooltip.tsx index 18977b9a09fa..cb1e10c1fd83 100644 --- a/packages/twenty-ui/src/display/tooltip/OverflowingTextWithTooltip.tsx +++ b/packages/twenty-ui/src/display/tooltip/OverflowingTextWithTooltip.tsx @@ -4,7 +4,7 @@ import { createPortal } from 'react-dom'; import { THEME_COMMON } from '@ui/theme'; -import { isDefined } from '@ui/utilities'; +import { isDefined } from 'twenty-shared'; import { AppTooltip, TooltipDelay } from './AppTooltip'; const spacing4 = THEME_COMMON.spacing(4); diff --git a/packages/twenty-ui/src/feedback/progress-bar/hooks/useProgressAnimation.ts b/packages/twenty-ui/src/feedback/progress-bar/hooks/useProgressAnimation.ts index be0ed37770ab..c028b7b0c06a 100644 --- a/packages/twenty-ui/src/feedback/progress-bar/hooks/useProgressAnimation.ts +++ b/packages/twenty-ui/src/feedback/progress-bar/hooks/useProgressAnimation.ts @@ -1,12 +1,12 @@ -import { useCallback, useEffect, useState } from 'react'; import { millisecondsToSeconds } from 'date-fns'; import { animate, AnimationPlaybackControls, ValueAnimationTransition, } from 'framer-motion'; +import { useCallback, useEffect, useState } from 'react'; -import { isDefined } from '@ui/utilities'; +import { isDefined } from 'twenty-shared'; export const useProgressAnimation = ({ autoPlay = true, diff --git a/packages/twenty-ui/src/input/button/components/ButtonGroup.tsx b/packages/twenty-ui/src/input/button/components/ButtonGroup.tsx index e0a8cff1d018..9735685b39a2 100644 --- a/packages/twenty-ui/src/input/button/components/ButtonGroup.tsx +++ b/packages/twenty-ui/src/input/button/components/ButtonGroup.tsx @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; import React, { ReactNode } from 'react'; -import { isDefined } from '@ui/utilities'; +import { isDefined } from 'twenty-shared'; import { ButtonPosition, ButtonProps } from './Button'; diff --git a/packages/twenty-ui/src/input/button/components/FloatingButtonGroup.tsx b/packages/twenty-ui/src/input/button/components/FloatingButtonGroup.tsx index 29edea1254bf..dd38576bcd96 100644 --- a/packages/twenty-ui/src/input/button/components/FloatingButtonGroup.tsx +++ b/packages/twenty-ui/src/input/button/components/FloatingButtonGroup.tsx @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; import React from 'react'; -import { isDefined } from '@ui/utilities'; +import { isDefined } from 'twenty-shared'; import { FloatingButtonPosition, FloatingButtonProps } from './FloatingButton'; diff --git a/packages/twenty-ui/src/input/code-editor/components/CodeEditor.tsx b/packages/twenty-ui/src/input/code-editor/components/CodeEditor.tsx index a671a4434a29..d97074ec9976 100644 --- a/packages/twenty-ui/src/input/code-editor/components/CodeEditor.tsx +++ b/packages/twenty-ui/src/input/code-editor/components/CodeEditor.tsx @@ -1,17 +1,40 @@ -import { useTheme, css } from '@emotion/react'; +import { css, useTheme } from '@emotion/react'; +import styled from '@emotion/styled'; import Editor, { EditorProps, Monaco } from '@monaco-editor/react'; +import { Loader } from '@ui/feedback/loader/components/Loader'; import { codeEditorTheme } from '@ui/input'; -import { isDefined } from '@ui/utilities'; -import styled from '@emotion/styled'; -import { useState } from 'react'; import { editor } from 'monaco-editor'; +import { useState } from 'react'; +import { isDefined } from 'twenty-shared'; type CodeEditorProps = Omit<EditorProps, 'onChange'> & { onChange?: (value: string) => void; setMarkers?: (value: string) => editor.IMarkerData[]; withHeader?: boolean; + isLoading?: boolean; }; +const StyledEditorLoader = styled.div<{ + height: string | number; + withHeader?: boolean; +}>` + align-items: center; + display: flex; + height: ${({ height }) => height}px; + justify-content: center; + border: 1px solid ${({ theme }) => theme.border.color.medium}; + background-color: ${({ theme }) => theme.background.transparent.lighter}; + ${({ withHeader, theme }) => + withHeader + ? css` + border-radius: 0 0 ${theme.border.radius.sm} ${theme.border.radius.sm}; + border-top: none; + ` + : css` + border-radius: ${theme.border.radius.sm}; + `} +`; + const StyledEditor = styled(Editor)<{ withHeader: boolean }>` .monaco-editor { border-radius: ${({ theme }) => theme.border.radius.sm}; @@ -42,6 +65,7 @@ export const CodeEditor = ({ onValidate, height = 450, withHeader = false, + isLoading = false, options, }: CodeEditorProps) => { const theme = useTheme(); @@ -64,12 +88,17 @@ export const CodeEditor = ({ } }; - return ( + return isLoading ? ( + <StyledEditorLoader height={height} withHeader={withHeader}> + <Loader /> + </StyledEditorLoader> + ) : ( <StyledEditor height={height} withHeader={withHeader} - value={value} + value={isLoading ? '' : value} language={language} + loading="" onMount={(editor, monaco) => { setMonaco(monaco); setEditor(editor); diff --git a/packages/twenty-ui/src/layout/animated-expandable-container/components/AnimatedExpandableContainer.tsx b/packages/twenty-ui/src/layout/animated-expandable-container/components/AnimatedExpandableContainer.tsx index e0d73d323c37..38cae182a0e9 100644 --- a/packages/twenty-ui/src/layout/animated-expandable-container/components/AnimatedExpandableContainer.tsx +++ b/packages/twenty-ui/src/layout/animated-expandable-container/components/AnimatedExpandableContainer.tsx @@ -6,9 +6,9 @@ import { AnimationDurations } from '@ui/layout/animated-expandable-container/typ import { AnimationMode } from '@ui/layout/animated-expandable-container/types/AnimationMode'; import { AnimationSize } from '@ui/layout/animated-expandable-container/types/AnimationSize'; import { getExpandableAnimationConfig } from '@ui/layout/animated-expandable-container/utils/getExpandableAnimationConfig'; -import { isDefined } from '@ui/utilities'; import { AnimatePresence, motion } from 'framer-motion'; import { ReactNode, useRef, useState } from 'react'; +import { isDefined } from 'twenty-shared'; const StyledMotionContainer = styled(motion.div)<{ containAnimation: boolean; diff --git a/packages/twenty-ui/src/navigation/menu-item/components/MenuItemAvatar.tsx b/packages/twenty-ui/src/navigation/menu-item/components/MenuItemAvatar.tsx index 5e845696d493..e62fb81e2d27 100644 --- a/packages/twenty-ui/src/navigation/menu-item/components/MenuItemAvatar.tsx +++ b/packages/twenty-ui/src/navigation/menu-item/components/MenuItemAvatar.tsx @@ -7,8 +7,8 @@ import { } from '@ui/display'; import { LightIconButtonGroup } from '@ui/input'; import { MenuItemIconButton } from '@ui/navigation/menu-item/components/MenuItem'; -import { isDefined } from '@ui/utilities'; import { MouseEvent } from 'react'; +import { isDefined } from 'twenty-shared'; import { StyledHoverableMenuItemBase, StyledMenuItemLeftContent, diff --git a/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommand.tsx b/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommand.tsx index f32be3366f4d..2aed3ce35201 100644 --- a/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommand.tsx +++ b/packages/twenty-ui/src/navigation/menu-item/components/MenuItemCommand.tsx @@ -63,9 +63,24 @@ const StyledMenuItemCommandContainer = styled.div<{ isSelected?: boolean }>` } `; +const StyledDescription = styled.span` + color: ${({ theme }) => theme.font.color.light}; + + &::before { + content: '·'; + margin: ${({ theme }) => theme.spacing(0, 1)}; + } +`; + +const StyledTextContainer = styled.div` + display: flex; + flex-direction: row; +`; + export type MenuItemCommandProps = { LeftIcon?: IconComponent; text: string; + description?: string; hotKeys?: string[]; className?: string; isSelected?: boolean; @@ -76,6 +91,7 @@ export type MenuItemCommandProps = { export const MenuItemCommand = ({ LeftIcon, text, + description, hotKeys, className, isSelected, @@ -97,7 +113,10 @@ export const MenuItemCommand = ({ <LeftIcon size={theme.icon.size.sm} /> </StyledBigIconContainer> )} - <StyledMenuItemLabelText>{text}</StyledMenuItemLabelText> + <StyledTextContainer> + <StyledMenuItemLabelText>{text}</StyledMenuItemLabelText> + {description && <StyledDescription>{description}</StyledDescription>} + </StyledTextContainer> {RightComponent} </StyledMenuItemLeftContent> {!isMobile && <MenuItemCommandHotKeys hotKeys={hotKeys} />} diff --git a/packages/twenty-ui/src/navigation/menu-item/components/__stories__/MenuItemCommand.stories.tsx b/packages/twenty-ui/src/navigation/menu-item/components/__stories__/MenuItemCommand.stories.tsx index f1d16e2ac6d6..be80bb93baf4 100644 --- a/packages/twenty-ui/src/navigation/menu-item/components/__stories__/MenuItemCommand.stories.tsx +++ b/packages/twenty-ui/src/navigation/menu-item/components/__stories__/MenuItemCommand.stories.tsx @@ -35,6 +35,15 @@ export const Default: Story = { decorators: [ComponentDecorator], }; +export const WithDescription: Story = { + args: { + text: 'Menu item', + hotKeys: ['⌘', '1'], + description: 'Description', + }, + decorators: [ComponentDecorator], +}; + export const Catalog: CatalogStory<Story, typeof MenuItemCommand> = { args: { text: 'Menu item', diff --git a/packages/twenty-ui/src/testing/utils/getCanvasElementForDropdownTesting.ts b/packages/twenty-ui/src/testing/utils/getCanvasElementForDropdownTesting.ts index 94c85f04637a..7fd8f2733843 100644 --- a/packages/twenty-ui/src/testing/utils/getCanvasElementForDropdownTesting.ts +++ b/packages/twenty-ui/src/testing/utils/getCanvasElementForDropdownTesting.ts @@ -1,4 +1,4 @@ -import { isDefined } from '@ui/utilities'; +import { isDefined } from 'twenty-shared'; export const getCanvasElementForDropdownTesting = () => { const canvasElement = document.getElementsByClassName( diff --git a/packages/twenty-ui/src/theme/constants/Animation.ts b/packages/twenty-ui/src/theme/constants/Animation.ts index 865d43b2b9a9..248a76585643 100644 --- a/packages/twenty-ui/src/theme/constants/Animation.ts +++ b/packages/twenty-ui/src/theme/constants/Animation.ts @@ -3,6 +3,7 @@ export const ANIMATION = { instant: 0.075, fast: 0.15, normal: 0.3, + slow: 1.5, }, }; diff --git a/packages/twenty-ui/src/theme/utils/getNextThemeColor.ts b/packages/twenty-ui/src/theme/utils/getNextThemeColor.ts index c949672a6688..f1b91d4a7e4d 100644 --- a/packages/twenty-ui/src/theme/utils/getNextThemeColor.ts +++ b/packages/twenty-ui/src/theme/utils/getNextThemeColor.ts @@ -1,5 +1,5 @@ import { MAIN_COLOR_NAMES, ThemeColor } from '@ui/theme'; -import { isDefined } from '@ui/utilities'; +import { isDefined } from 'twenty-shared'; export const getNextThemeColor = (currentColor?: ThemeColor): ThemeColor => { if (!isDefined(currentColor)) { diff --git a/packages/twenty-ui/src/utilities/animation/components/AnimatedCircleLoading.tsx b/packages/twenty-ui/src/utilities/animation/components/AnimatedCircleLoading.tsx new file mode 100644 index 000000000000..cca1aee22ebf --- /dev/null +++ b/packages/twenty-ui/src/utilities/animation/components/AnimatedCircleLoading.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { motion } from 'framer-motion'; +import styled from '@emotion/styled'; +import { useTheme } from '@emotion/react'; + +const StyledAnimatedContainer = styled(motion.div)` + align-items: center; + display: flex; + justify-content: center; +`; + +export const AnimatedCircleLoading = ({ + children, +}: { + children: React.ReactNode; +}) => { + const theme = useTheme(); + return ( + <StyledAnimatedContainer + initial={{ rotate: 0 }} + animate={{ + rotate: 360, + }} + transition={{ + repeat: Infinity, + duration: theme.animation.duration.slow, + ease: 'easeInOut', + }} + > + {children} + </StyledAnimatedContainer> + ); +}; diff --git a/packages/twenty-ui/src/utilities/animation/index.ts b/packages/twenty-ui/src/utilities/animation/index.ts index fdde953664af..cba279289a69 100644 --- a/packages/twenty-ui/src/utilities/animation/index.ts +++ b/packages/twenty-ui/src/utilities/animation/index.ts @@ -4,3 +4,4 @@ export * from './components/AnimatedEaseInOut'; export * from './components/AnimatedFadeOut'; export * from './components/AnimatedTextWord'; export * from './components/AnimatedTranslation'; +export * from './components/AnimatedCircleLoading'; diff --git a/packages/twenty-ui/src/utilities/dimensions/components/ComputeNodeDimensions.tsx b/packages/twenty-ui/src/utilities/dimensions/components/ComputeNodeDimensions.tsx index 49e84b79fbc2..f7b4d39a2fed 100644 --- a/packages/twenty-ui/src/utilities/dimensions/components/ComputeNodeDimensions.tsx +++ b/packages/twenty-ui/src/utilities/dimensions/components/ComputeNodeDimensions.tsx @@ -1,6 +1,6 @@ import styled from '@emotion/styled'; -import { isDefined } from '@ui/utilities'; import { ReactNode, useLayoutEffect, useRef, useState } from 'react'; +import { isDefined } from 'twenty-shared'; type ComputeNodeDimensionsProps = { children: ( diff --git a/packages/twenty-ui/src/utilities/index.ts b/packages/twenty-ui/src/utilities/index.ts index f45ce2d7a906..189ce4fb5ea3 100644 --- a/packages/twenty-ui/src/utilities/index.ts +++ b/packages/twenty-ui/src/utilities/index.ts @@ -1,3 +1,4 @@ +export * from './animation/components/AnimatedCircleLoading'; export * from './animation/components/AnimatedContainer'; export * from './animation/components/AnimatedEaseIn'; export * from './animation/components/AnimatedEaseInOut'; @@ -9,7 +10,6 @@ export * from './device/getOsControlSymbol'; export * from './device/getOsShortcutSeparator'; export * from './device/getUserDevice'; export * from './dimensions/components/ComputeNodeDimensions'; -export * from './isDefined'; export * from './responsive/hooks/useIsMobile'; export * from './screen-size/hooks/useScreenSize'; export * from './state/utils/createState'; diff --git a/packages/twenty-ui/src/utilities/isDefined.ts b/packages/twenty-ui/src/utilities/isDefined.ts deleted file mode 100644 index 81eb67203a03..000000000000 --- a/packages/twenty-ui/src/utilities/isDefined.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { isNull, isUndefined } from '@sniptt/guards'; - -export const isDefined = <T>(value: T | null | undefined): value is T => - !isUndefined(value) && !isNull(value); diff --git a/packages/twenty-ui/src/utilities/utils/getDisplayValueByUrlType.ts b/packages/twenty-ui/src/utilities/utils/getDisplayValueByUrlType.ts index 577906adafcf..c630305a4553 100644 --- a/packages/twenty-ui/src/utilities/utils/getDisplayValueByUrlType.ts +++ b/packages/twenty-ui/src/utilities/utils/getDisplayValueByUrlType.ts @@ -1,5 +1,5 @@ import { LinkType } from '@ui/navigation/link'; -import { isDefined } from '../isDefined'; +import { isDefined } from 'twenty-shared'; type getUrlDisplayValueByUrlTypeProps = { type: LinkType; diff --git a/packages/twenty-website/src/content/developers/self-hosting/upgrade-guide.mdx b/packages/twenty-website/src/content/developers/self-hosting/upgrade-guide.mdx index 57737878577c..7d2e9649368d 100644 --- a/packages/twenty-website/src/content/developers/self-hosting/upgrade-guide.mdx +++ b/packages/twenty-website/src/content/developers/self-hosting/upgrade-guide.mdx @@ -26,6 +26,22 @@ If you want to upgrade your instance by few versions, e.g. from 0.33.0 to 0.35.0 ## Version-specific upgrade steps + + +### v0.40.0 to v0.41.0 + +Upgrade your Twenty instance to use v0.41.0 image + +``` +yarn database:migrate:prod +yarn command:prod upgrade-0.41 +``` + +**Environment Variables** + +- Removed: `AUTH_MICROSOFT_TENANT_ID` + + ### v0.35.0 to v0.40.0 Upgrade your Twenty instance to use v0.40.0 image diff --git a/yarn.lock b/yarn.lock index ca3eab9838f0..eef5407be3de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11460,202 +11460,236 @@ __metadata: languageName: node linkType: hard -"@react-email/body@npm:0.0.4": - version: 0.0.4 - resolution: "@react-email/body@npm:0.0.4" +"@react-email/body@npm:0.0.11": + version: 0.0.11 + resolution: "@react-email/body@npm:0.0.11" + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/4a86ea8041bf94992acde12efd79cd91f980b3c40a86792f98bd546e0b49f19fbdca1fc87d5d3e472a70535a3195f2738bbec1f9dec862d48c4bc625f599d3d6 + languageName: node + linkType: hard + +"@react-email/button@npm:0.0.19": + version: 0.0.19 + resolution: "@react-email/button@npm:0.0.19" peerDependencies: - react: 18.2.0 - checksum: 10c0/756a184bc1284e8ce1828cd3abc0ea3aa24262e6c677b4e4de48fd6c298717fbc0164e7af7ac4c72262bc3138222ab7fc30c63b0520178315fece2bd78d12f98 + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/e96fe15cb4307c36add3ebaf382cf5f408c29fbbc433ef09b347a4d6488eecdaa23424880f8bdad18f773c91e8c0b2d24ec74c9010608f55100c5625c9c0be56 languageName: node linkType: hard -"@react-email/button@npm:0.0.11": +"@react-email/code-block@npm:0.0.11": version: 0.0.11 - resolution: "@react-email/button@npm:0.0.11" + resolution: "@react-email/code-block@npm:0.0.11" + dependencies: + prismjs: "npm:1.29.0" peerDependencies: - react: 18.2.0 - checksum: 10c0/91de881f33adec7f5ff311dc8259771fff638cbb736a851a6d4a7e634378555177eb112bc38abb18af7e4bc8ccc899f5bce5b20d409e377d289904d37a20c0ce + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/98a45460620c887a8adf5c59a936dd9fa2df76101b00b246df90ffe9108158262715b00401018ba6ba22f10dfad46b7e9b71cefa3c672728deee0a18c1f13293 languageName: node linkType: hard -"@react-email/column@npm:0.0.8": - version: 0.0.8 - resolution: "@react-email/column@npm:0.0.8" +"@react-email/code-inline@npm:0.0.5": + version: 0.0.5 + resolution: "@react-email/code-inline@npm:0.0.5" peerDependencies: - react: 18.2.0 - checksum: 10c0/5a937dbe7a69c1db8078f84cf70b66224be187dafa78e683103ccbbdb5d3ad2267f7b92c4fbd73922e8c8dda2a4372f37c1a7efac38501cb356d20c028a87574 + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/4081233686dd09575c580303f2822c415e1acc3c21847e64536afee60d37108810f5325e50a417ca39ab796fb21aae488108b4dcb55b0bb5e5b750f1019f32d7 languageName: node linkType: hard -"@react-email/components@npm:0.0.12": - version: 0.0.12 - resolution: "@react-email/components@npm:0.0.12" - dependencies: - "@react-email/body": "npm:0.0.4" - "@react-email/button": "npm:0.0.11" - "@react-email/column": "npm:0.0.8" - "@react-email/container": "npm:0.0.10" - "@react-email/font": "npm:0.0.4" - "@react-email/head": "npm:0.0.6" - "@react-email/heading": "npm:0.0.9" - "@react-email/hr": "npm:0.0.6" - "@react-email/html": "npm:0.0.6" - "@react-email/img": "npm:0.0.6" - "@react-email/link": "npm:0.0.6" - "@react-email/preview": "npm:0.0.7" - "@react-email/render": "npm:0.0.9" - "@react-email/row": "npm:0.0.6" - "@react-email/section": "npm:0.0.10" - "@react-email/tailwind": "npm:0.0.13" - "@react-email/text": "npm:0.0.6" - peerDependencies: - react: 18.2.0 - checksum: 10c0/1cc01198e5eeb42aac79b11e1a0ceaddd75d3164425899d6fc676ddbcd84cb869cebb0c6feb1f4383ba92d150c32e94d1fe5eec2ee74711b9309569e3d9bc6ac - languageName: node - linkType: hard - -"@react-email/container@npm:0.0.10": - version: 0.0.10 - resolution: "@react-email/container@npm:0.0.10" +"@react-email/column@npm:0.0.13": + version: 0.0.13 + resolution: "@react-email/column@npm:0.0.13" peerDependencies: - react: 18.2.0 - checksum: 10c0/d074fad448f6033d232b890b9d1a9914d0f92908ba494feaa627828718f4fa6e639636f239eb8eeb8b597c220da9019e90cb72ee2b0328c2ec908fd73e48fc13 + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/56ebc6af1c546daca2c32b0700538242ab7d90ffff4be37bf9dcf929311b6996c66b39f506dfd37063bacd4382abdeab93baf8c1e3266aa62fe3b282b16a023f languageName: node linkType: hard -"@react-email/font@npm:0.0.4": - version: 0.0.4 - resolution: "@react-email/font@npm:0.0.4" +"@react-email/components@npm:0.0.32": + version: 0.0.32 + resolution: "@react-email/components@npm:0.0.32" + dependencies: + "@react-email/body": "npm:0.0.11" + "@react-email/button": "npm:0.0.19" + "@react-email/code-block": "npm:0.0.11" + "@react-email/code-inline": "npm:0.0.5" + "@react-email/column": "npm:0.0.13" + "@react-email/container": "npm:0.0.15" + "@react-email/font": "npm:0.0.9" + "@react-email/head": "npm:0.0.12" + "@react-email/heading": "npm:0.0.15" + "@react-email/hr": "npm:0.0.11" + "@react-email/html": "npm:0.0.11" + "@react-email/img": "npm:0.0.11" + "@react-email/link": "npm:0.0.12" + "@react-email/markdown": "npm:0.0.14" + "@react-email/preview": "npm:0.0.12" + "@react-email/render": "npm:1.0.4" + "@react-email/row": "npm:0.0.12" + "@react-email/section": "npm:0.0.16" + "@react-email/tailwind": "npm:1.0.4" + "@react-email/text": "npm:0.0.11" peerDependencies: - react: 18.2.0 - checksum: 10c0/066a0016fa78267c83665d5e3846421f7d787361b11f4e712bd32353d0de947a72a42036fdfd35b75eff479ca77deba0f5c220bee43ace8594f7c6345c30a0bc + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/8162915c75fbf03eeba9e34cc63cf29e3bbe264c3a3c2ea6cc16a134817a640b60b81c2368cae5947e917dfe2a1fbfb1177d22c5220ea6f16a17a76797eb9003 languageName: node linkType: hard -"@react-email/head@npm:0.0.6": - version: 0.0.6 - resolution: "@react-email/head@npm:0.0.6" +"@react-email/container@npm:0.0.15": + version: 0.0.15 + resolution: "@react-email/container@npm:0.0.15" peerDependencies: - react: 18.2.0 - checksum: 10c0/aa2362c965c6f1fa2bcd41be04c1ce8695864153768b4ba4f4b102dd1e1adb28ba067c54f71ded592799aacfa348813cae0f442797b3448bb87feb4588443546 + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/5098468b5336682f0f833a57cea1182bfe4a46bb03d5aa9fc85f96ab1e79845e30a9487c4c56094a9482465e94aa4395f10978c99b1772ca4bd0823d2d9071f6 languageName: node linkType: hard -"@react-email/heading@npm:0.0.9": +"@react-email/font@npm:0.0.9": version: 0.0.9 - resolution: "@react-email/heading@npm:0.0.9" - dependencies: - "@radix-ui/react-slot": "npm:1.0.2" - react: "npm:18.2.0" - checksum: 10c0/d082d2a4d3db312cbaa0d62419cc1b29c6b6c3ee1467a220c97c9cb009be1af5f6409370b9caac054d8aee8d326fb6e894a72073ff429f05ed097ba471e12a43 + resolution: "@react-email/font@npm:0.0.9" + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/b51c9bc22f3ea6e26c34fd5e4186be0b42a0414558f318b5784079145b267f7316729d54c8ba8c955ee5100e4b9ca9f5048c123a66ad2e277d49dd07c718287c languageName: node linkType: hard -"@react-email/hr@npm:0.0.6": - version: 0.0.6 - resolution: "@react-email/hr@npm:0.0.6" +"@react-email/head@npm:0.0.12": + version: 0.0.12 + resolution: "@react-email/head@npm:0.0.12" peerDependencies: - react: 18.2.0 - checksum: 10c0/b965c176192a06b39d2c696a8b747cdf4060ba7229a7d45eaf1d5729c59920fefe90f43fbc5f8d203a8e5d77645ee62745d06ec5ec5c9b030815f0642a8ac4ab + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/511147ea52330f5752e2d226a3417192adb5c0f301e35077a07fd66b99504eda6c3bfa49713a10400cf8542d75dfb317e5050b5383b285129db9854d5760d97d languageName: node linkType: hard -"@react-email/html@npm:0.0.6": - version: 0.0.6 - resolution: "@react-email/html@npm:0.0.6" +"@react-email/heading@npm:0.0.15": + version: 0.0.15 + resolution: "@react-email/heading@npm:0.0.15" peerDependencies: - react: 18.2.0 - checksum: 10c0/9046476ccb20e405a64e33ca3a80f1ed7645bacec0601001fd36efd95497a5999daebf0ad141f0c08387190582e23ff2b2f7fc536461ec9b27d0b397a311fe4f + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/74e58d2933eb6d37f4f3a6f82c63af6c9ffe2ce8cd14c7f6e27f8b76d39800cbf1a215d86e17a55d69eca4c73d5e9ea747ae1cd0a7df4a08a861a13afb9989dc languageName: node linkType: hard -"@react-email/img@npm:0.0.6": - version: 0.0.6 - resolution: "@react-email/img@npm:0.0.6" +"@react-email/hr@npm:0.0.11": + version: 0.0.11 + resolution: "@react-email/hr@npm:0.0.11" peerDependencies: - react: 18.2.0 - checksum: 10c0/046f0b60bdf9c7c04a2033b39967de96e31ffedae8922f9f187ce39f6040deee33f02e5695f56c26cf1691cce7de937bcbd303c3804b9a824d0aabc71427a462 + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/9d8199bdcfdc7e180636cdc11b7af5c44d185598fedd97dd0734103d662074ed8b7204e362c31f0dfd3925c37181e2fe22dbf1f76908c862d489f34e7efea7a9 languageName: node linkType: hard -"@react-email/link@npm:0.0.6": - version: 0.0.6 - resolution: "@react-email/link@npm:0.0.6" +"@react-email/html@npm:0.0.11": + version: 0.0.11 + resolution: "@react-email/html@npm:0.0.11" peerDependencies: - react: 18.2.0 - checksum: 10c0/3e5eb2e222abe99bdcec6127a20d4ac8ed584189527a2bced119b09d08625b74f0ffa8a1de009974b4cd47249ade4081e108ca4fd65daa0ca811a7c6058cf838 + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/04be96e135677cd507636877c2f9bf1a507d40f6d4442ff3fac58bc70d478e7f23dd03d94ecc1605d3e368d50129281e71f4b7afb242f1b32d285bfc37236a09 languageName: node linkType: hard -"@react-email/preview@npm:0.0.7": - version: 0.0.7 - resolution: "@react-email/preview@npm:0.0.7" +"@react-email/img@npm:0.0.11": + version: 0.0.11 + resolution: "@react-email/img@npm:0.0.11" peerDependencies: - react: 18.2.0 - checksum: 10c0/9125597760e69d36b9caf1a94595913f52364642351728a5ff91b7d97fce26fad74bae5f1c9baade8831f4154d4c88c773adcbc1f9f1d602b4113c50bf21eb30 + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/082e9f7d7290de4d340b06bc0ab0e4ffec08604885fdf06d93594e3684726279a3a65c0be2c83c9397bb832289078d533f0499b423ed3558f7736ad7d333d457 languageName: node linkType: hard -"@react-email/render@npm:0.0.10": - version: 0.0.10 - resolution: "@react-email/render@npm:0.0.10" +"@react-email/link@npm:0.0.12": + version: 0.0.12 + resolution: "@react-email/link@npm:0.0.12" + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/d831666bd52af9ba3a50bd4853e2b70387a041264e3781d3dab4708b755e8b2cb6df339f71eecd889b35221c205bd9997d47e950d1e3b226b4be50a22405ca87 + languageName: node + linkType: hard + +"@react-email/markdown@npm:0.0.14": + version: 0.0.14 + resolution: "@react-email/markdown@npm:0.0.14" + dependencies: + md-to-react-email: "npm:5.0.5" + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/e124a1844704e3c48f189d2d2769ca9f1193499f1c7353a804161b1c5df373fa815255116e653f7228192bcd5ff826ff55eb15c972a8e7facb6c82721511c764 + languageName: node + linkType: hard + +"@react-email/preview@npm:0.0.12": + version: 0.0.12 + resolution: "@react-email/preview@npm:0.0.12" + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/54c09fb599263b7e01f290cd3ed37db31b7370cb036851496067470f4873dfe82102e0746e390e9b83e27d9a054044259412521ba65eac7366fb5e17580b7787 + languageName: node + linkType: hard + +"@react-email/render@npm:0.0.17": + version: 0.0.17 + resolution: "@react-email/render@npm:0.0.17" dependencies: html-to-text: "npm:9.0.5" - pretty: "npm:2.0.0" - react: "npm:18.2.0" - react-dom: "npm:18.2.0" - checksum: 10c0/ea0db578ef58734160ac512d04de5b09f558d192fbb74c0b9bdb3006e91d0d73ee7d77007f4740bef0d587f8b231f8dba5ef01e16e18d2deb37859ddd2e7d09a + js-beautify: "npm:^1.14.11" + react-promise-suspense: "npm:0.3.4" + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + checksum: 10c0/34a1c5a55586d7cd723638d8cd5328fddf30015e5065a2e9d5204772e0532e84d63af1b2b1b8ec02cef52a8f57d34871200c0075a9ed7b2861362d8138d3db5e languageName: node linkType: hard -"@react-email/render@npm:0.0.9": - version: 0.0.9 - resolution: "@react-email/render@npm:0.0.9" +"@react-email/render@npm:1.0.4": + version: 1.0.4 + resolution: "@react-email/render@npm:1.0.4" dependencies: html-to-text: "npm:9.0.5" - pretty: "npm:2.0.0" - react: "npm:18.2.0" - react-dom: "npm:18.2.0" - checksum: 10c0/128b3a7c65e77a14600e48fb24183e182de82b4ddc8ff11bb239c421fa68bd6eb8b063822b5abe9f8599e34ece315cdb961b4133c59285cebcc517d2ec0ae8da + prettier: "npm:3.4.2" + react-promise-suspense: "npm:0.3.4" + peerDependencies: + react: ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/88d01143a634294b4092b847bfe0c71fc28063055c979d0dbe29c226c7d84a9dd673a6c2a035d6091decbb7743faf6a5394a9a38c74a51745bf6031b6d01b087 languageName: node linkType: hard -"@react-email/row@npm:0.0.6": - version: 0.0.6 - resolution: "@react-email/row@npm:0.0.6" +"@react-email/row@npm:0.0.12": + version: 0.0.12 + resolution: "@react-email/row@npm:0.0.12" peerDependencies: - react: 18.2.0 - checksum: 10c0/ca1d92094a5ccc35c93560538311c38989162e9f0235a71897296bc43f2c0ba31d53df9c7db1688f7be0d77ccc03a0094cc227c4d095787f3b3ea0c3d262e520 + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/440c54071543700ce7a0db4749c93c56fa0cfae1057464231b25d9d7598f81a2f395816b922376acd5445c29163ae2858e4fc840d8cf30f3d4520104f7f5e3ed languageName: node linkType: hard -"@react-email/section@npm:0.0.10": - version: 0.0.10 - resolution: "@react-email/section@npm:0.0.10" +"@react-email/section@npm:0.0.16": + version: 0.0.16 + resolution: "@react-email/section@npm:0.0.16" peerDependencies: - react: 18.2.0 - checksum: 10c0/d1af5dc3ff9a5bd2675a82f976df79ab5acded5ca305536df36ad84440b3828b021f8026d721e34fe92853bc3dfe8b9aa4603c25bf2f901b22049748ed6a7fbc + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/48bfacdd78d403b50c4c1098d100a96f3afe6159d910374a0306d6186daa1bf3803b4a2b3163fb38d9137835041b9f70145c7bb2f652ba347a82a0d396fe2ef2 languageName: node linkType: hard -"@react-email/tailwind@npm:0.0.13": - version: 0.0.13 - resolution: "@react-email/tailwind@npm:0.0.13" - dependencies: - react: "npm:18.2.0" - react-dom: "npm:18.2.0" +"@react-email/tailwind@npm:1.0.4": + version: 1.0.4 + resolution: "@react-email/tailwind@npm:1.0.4" peerDependencies: - react: 18.2.0 - checksum: 10c0/5980a8593b699e9a0e0a8178120d206e74ccb525ba5fedb02e7048f8efff7ca41f82308584624a9701dc021d2ccfd8fa224f11a191d78e567a77f8d35bd47bb4 + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/47472ae00c1731ec9cce20e1083fcb405c049a378d28889fb5334d6d3fbd1526e13f6c775691f3fa5e6796a30b98b2f3e9e242a61454dfc097dc5f6f5dc5fc8d languageName: node linkType: hard -"@react-email/text@npm:0.0.6": - version: 0.0.6 - resolution: "@react-email/text@npm:0.0.6" +"@react-email/text@npm:0.0.11": + version: 0.0.11 + resolution: "@react-email/text@npm:0.0.11" peerDependencies: - react: 18.2.0 - checksum: 10c0/1e960838bfe81bf33b42db1aa1d84446fc36911b4d9e9a79570d9a43fe9cc29d9271f7e1b25448383d8fe950a73130f8bed5c65cd8dbc786a2e6fe02e0c16202 + react: ^18.0 || ^19.0 || ^19.0.0-rc + checksum: 10c0/b79545cebe067bbfa7d32d02cc5911bc4f85c939f4f64b2bf181fcba59627ea950d14bb3cfc344641ce8f66876847ddeb3796d8da81a6019b6fe341e1b656db1 languageName: node linkType: hard @@ -23562,17 +23596,6 @@ __metadata: languageName: node linkType: hard -"condense-newlines@npm:^0.2.1": - version: 0.2.1 - resolution: "condense-newlines@npm:0.2.1" - dependencies: - extend-shallow: "npm:^2.0.1" - is-whitespace: "npm:^0.3.0" - kind-of: "npm:^3.0.2" - checksum: 10c0/19485db92a5d4658b50ab250626ece0cebe57f73af126b348604309894ed9a2b05f88f1802a090fd1897156eda0af69d8f14446bc62f978e0d048b5135e91694 - languageName: node - linkType: hard - "confbox@npm:^0.1.7": version: 0.1.7 resolution: "confbox@npm:0.1.7" @@ -27573,6 +27596,13 @@ __metadata: languageName: node linkType: hard +"fast-deep-equal@npm:^2.0.1": + version: 2.0.1 + resolution: "fast-deep-equal@npm:2.0.1" + checksum: 10c0/1602e0d6ed63493c865cc6b03f9070d6d3926e8cd086a123060b58f80a295f3f08b1ecfb479ae7c45b7fd45535202aea7cf5b49bc31bffb81c20b1502300be84 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3, fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -31207,7 +31237,7 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^1.1.0, is-buffer@npm:^1.1.5": +"is-buffer@npm:^1.1.0": version: 1.1.6 resolution: "is-buffer@npm:1.1.6" checksum: 10c0/ae18aa0b6e113d6c490ad1db5e8df9bdb57758382b313f5a22c9c61084875c6396d50bbf49315f5b1926d142d74dfb8d31b40d993a383e0a158b15fea7a82234 @@ -31789,13 +31819,6 @@ __metadata: languageName: node linkType: hard -"is-whitespace@npm:^0.3.0": - version: 0.3.0 - resolution: "is-whitespace@npm:0.3.0" - checksum: 10c0/2f4ef13e0195170bbb587437133ef81ed9d6aec1c5e88f4c2b9055a18a1e70f75d9a9376f0cdae64f3c519e05e5f734d6b8f9682e5cb50384843480bade785ae - languageName: node - linkType: hard - "is-windows@npm:^0.2.0": version: 0.2.0 resolution: "is-windows@npm:0.2.0" @@ -32841,7 +32864,7 @@ __metadata: languageName: node linkType: hard -"js-beautify@npm:^1.6.12": +"js-beautify@npm:^1.14.11": version: 1.15.1 resolution: "js-beautify@npm:1.15.1" dependencies: @@ -33594,15 +33617,6 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^3.0.2": - version: 3.2.2 - resolution: "kind-of@npm:3.2.2" - dependencies: - is-buffer: "npm:^1.1.5" - checksum: 10c0/7e34bc29d4b02c997f92f080de34ebb92033a96736bbb0bb2410e033a7e5ae6571f1fa37b2d7710018f95361473b816c604234197f4f203f9cf149d8ef1574d9 - languageName: node - linkType: hard - "kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": version: 6.0.3 resolution: "kind-of@npm:6.0.3" @@ -34968,6 +34982,15 @@ __metadata: languageName: node linkType: hard +"marked@npm:7.0.4": + version: 7.0.4 + resolution: "marked@npm:7.0.4" + bin: + marked: bin/marked.js + checksum: 10c0/7f5993bfb2d260806ffada81051c45952857117cba0fd82790779dc696c7ebd35a96be47409b4bdabd75e7ede286f5f5142a75a47200e3fa54eaf8b0cd6f74f6 + languageName: node + linkType: hard + "match-sorter@npm:^6.0.2": version: 6.3.4 resolution: "match-sorter@npm:6.3.4" @@ -34987,6 +35010,17 @@ __metadata: languageName: node linkType: hard +"md-to-react-email@npm:5.0.5": + version: 5.0.5 + resolution: "md-to-react-email@npm:5.0.5" + dependencies: + marked: "npm:7.0.4" + peerDependencies: + react: ^18.0 || ^19.0 + checksum: 10c0/0d6eedb905562d88025fbf45c79117d9d668c86427eac9a3ecc2f5082a7fac9cf55c271f8892083e994d794322e8f0ede928ee2380465c9f4f878cbd2a392999 + languageName: node + linkType: hard + "md5.js@npm:^1.3.4": version: 1.3.5 resolution: "md5.js@npm:1.3.5" @@ -39842,6 +39876,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:3.4.2": + version: 3.4.2 + resolution: "prettier@npm:3.4.2" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/99e076a26ed0aba4ebc043880d0f08bbb8c59a4c6641cdee6cdadf2205bdd87aa1d7823f50c3aea41e015e99878d37c58d7b5f0e663bba0ef047f94e36b96446 + languageName: node + linkType: hard + "prettier@npm:^3.1.1, prettier@npm:^3.2.5": version: 3.3.3 resolution: "prettier@npm:3.3.3" @@ -39906,17 +39949,6 @@ __metadata: languageName: node linkType: hard -"pretty@npm:2.0.0": - version: 2.0.0 - resolution: "pretty@npm:2.0.0" - dependencies: - condense-newlines: "npm:^0.2.1" - extend-shallow: "npm:^2.0.1" - js-beautify: "npm:^1.6.12" - checksum: 10c0/2fcd72f331d0afae3893ba88a5c05f6fdd62b059cb309028aa3309fc8a90410d81dfe66ae95677bc6d6d4a68f3cc1a247c13e5872bd35686f99acb33acc51164 - languageName: node - linkType: hard - "prettyjson@npm:^1.2.1": version: 1.2.5 resolution: "prettyjson@npm:1.2.5" @@ -39950,7 +39982,7 @@ __metadata: languageName: node linkType: hard -"prismjs@npm:^1.23.0": +"prismjs@npm:1.29.0, prismjs@npm:^1.23.0": version: 1.29.0 resolution: "prismjs@npm:1.29.0" checksum: 10c0/d906c4c4d01b446db549b4f57f72d5d7e6ccaca04ecc670fb85cea4d4b1acc1283e945a9cbc3d81819084a699b382f970e02f9d1378e14af9808d366d9ed7ec6 @@ -40819,18 +40851,6 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:18.2.0": - version: 18.2.0 - resolution: "react-dom@npm:18.2.0" - dependencies: - loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.0" - peerDependencies: - react: ^18.2.0 - checksum: 10c0/66dfc5f93e13d0674e78ef41f92ed21dfb80f9c4ac4ac25a4b51046d41d4d2186abc915b897f69d3d0ebbffe6184e7c5876f2af26bfa956f179225d921be713a - languageName: node - linkType: hard - "react-dom@npm:^18, react-dom@npm:^18.2.0": version: 18.3.1 resolution: "react-dom@npm:18.3.1" @@ -41061,6 +41081,15 @@ __metadata: languageName: node linkType: hard +"react-promise-suspense@npm:0.3.4": + version: 0.3.4 + resolution: "react-promise-suspense@npm:0.3.4" + dependencies: + fast-deep-equal: "npm:^2.0.1" + checksum: 10c0/ab7a22f5400f9e9933995537bf6430a4c79e33a121aedb51864968e7604e5c40421fd539ead62554f32300b7d49755c79636de06caa36fe52973b626b4ddfebf + languageName: node + linkType: hard + "react-query@npm:^3.34.19": version: 3.39.3 resolution: "react-query@npm:3.39.3" @@ -41369,15 +41398,6 @@ __metadata: languageName: node linkType: hard -"react@npm:18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/b562d9b569b0cb315e44b48099f7712283d93df36b19a39a67c254c6686479d3980b7f013dc931f4a5a3ae7645eae6386b4aa5eea933baa54ecd0f9acb0902b8 - languageName: node - linkType: hard - "react@npm:^18, react@npm:^18.2.0": version: 18.3.1 resolution: "react@npm:18.3.1" @@ -42830,7 +42850,7 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.0, scheduler@npm:^0.23.2": +"scheduler@npm:^0.23.2": version: 0.23.2 resolution: "scheduler@npm:0.23.2" dependencies: @@ -45827,6 +45847,8 @@ __metadata: "twenty-chrome-extension@workspace:packages/twenty-chrome-extension": version: 0.0.0-use.local resolution: "twenty-chrome-extension@workspace:packages/twenty-chrome-extension" + dependencies: + twenty-shared: "workspace:*" languageName: unknown linkType: soft @@ -46059,8 +46081,8 @@ __metadata: "@playwright/test": "npm:^1.46.0" "@ptc-org/nestjs-query-core": "npm:^4.2.0" "@ptc-org/nestjs-query-typeorm": "npm:4.2.1-alpha.2" - "@react-email/components": "npm:0.0.12" - "@react-email/render": "npm:0.0.10" + "@react-email/components": "npm:0.0.32" + "@react-email/render": "npm:0.0.17" "@sentry/node": "npm:^8" "@sentry/profiling-node": "npm:^8" "@sentry/react": "npm:^8"