Compare commits

...
Author SHA1 Message Date
Sonarly Claude Code 4ee15a60b3 Morph relation persist uses wrong foreign key naming, producing invalid field parentObjectId
https://sonarly.com/issue/8116?type=bug

When editing a morph relation field on a task record via the Field Widget, `usePersistField.ts` constructs the wrong foreign key name (`parentObjectId` instead of e.g. `parentObjectCompanyId`), causing the optimistic cache validation to throw.

Fix: The morph relation branch in `usePersistField.ts` (lines 220–243, introduced by regression commit `4e767799c6`) used `getForeignKeyNameFromRelationFieldName(fieldName)` to construct the update key, producing `parentObjectId` instead of the required target-specific key like `parentObjectCompanyId`. This caused `computeOptimisticRecordFromInput` to throw because `parentObjectId` doesn't match any known field pattern for morph relations.

The fix replaces the broken morph relation branch with the correct approach that mirrors `useMorphPersistManyToOne`:

1. **Extracts `morphRelations` and `relationType`** from the field definition metadata (cast as `FieldMorphRelationMetadata`).
2. **Builds the null-out record** using `buildRecordWithAllMorphObjectIdsToNull` — this correctly zeroes out all morph target IDs (e.g., both `parentObjectCompanyId` and `parentObjectPersonId`) before setting the new one.
3. **For null values**: sends the all-null record to clear the relation.
4. **For non-null values**: finds the matching `morphRelation` by comparing `valueToPersist.__typename` (e.g., `"Company"`) against each `targetObjectMetadata.nameSingular` (e.g., `"company"`), then uses `computeMorphRelationFieldName()` to compute the correct key (e.g., `parentObjectCompany`), and sends `{ ...allNull, parentObjectCompanyId: valueToPersist.id }`.

```typescript file=packages/twenty-front/src/modules/object-record/record-field/ui/hooks/usePersistField.ts lines=222-292
if (fieldIsMorphRelationManyToOne) {
  if (valueToPersist?.id === currentValue?.id) {
    return;
  }

  const morphFieldDefinition =
    fieldDefinition as FieldDefinition<FieldMorphRelationMetadata>;
  const { morphRelations, relationType } =
    morphFieldDefinition.metadata;

  const recordWithAllMorphObjectIdsToNull =
    buildRecordWithAllMorphObjectIdsToNull({
      morphRelations,
      fieldName,
      relationType,
    });

  if (!valueToPersist) {
    // null out all morph IDs to clear the relation
    const newRecord = await updateOneRecord({ ... });
    upsertRecordsInStore({ ... });
    return;
  }

  const targetMorphRelation = morphRelations.find(
    (morphRelation) =>
      morphRelation.targetObjectMetadata.nameSingular.toLowerCase() ===
      valueToPersist.__typename?.toLowerCase(),
  );

  const computedFieldName = computeMorphRelationFieldName({
    fieldName,
    relationType,
    targetObjectMetadataNameSingular: targetMorphRelation.targetObjectMetadata.nameSingular,
    targetObjectMetadataNamePlural: targetMorphRelation.targetObjectMetadata.namePlural,
  });

  // Produces e.g. "parentObjectCompanyId" ✓ instead of "parentObjectId" ✗
  const newRecord = await updateOneRecord({
    updateOneRecordInput: {
      ...recordWithAllMorphObjectIdsToNull,
      [`${computedFieldName}Id`]: valueToPersist.id,
    },
  });
  ...
}
```

Two additional imports were added:
- `computeMorphRelationFieldName` from `twenty-shared/utils`
- `buildRecordWithAllMorphObjectIdsToNull` from the local utils path
2026-03-03 03:39:12 +00:00
Abdul RahmanandGitHub ae291c99ba fix: record does not open in side panel after returning from fullscreen (#17131)
Closes #17089 

### 1. Can't reopen record after having navigated to its show page
After opening a record in the show page from the command menu and going
back to the index, clicking the same record again did nothing. The
command menu navigation stack was not cleared when opening in the show
page, so the "already open" check skipped reopening. We now clear the
command menu navigation stack before navigating to the show page (in
`RecordShowRightDrawerOpenRecordButton`), so the same record can be
reopened from the index.

### 2. Row doesn't highlight when opening command menu after return from
show page
After returning from the record show page to the index, the first row
click opened the command menu but the row did not highlight. The "side
panel close" event was emitted not only when the panel actually closed,
but also when opening the command menu (cleanup ran with
`isCommandMenuClosing` and always emitted the event). Listeners like
`RecordTableDeactivateRecordTableRowEffect` then deactivated the row. We
now emit the side panel close event only when the close animation
actually completes (`CommandMenuSidePanelForDesktop`), and skip emitting
it when cleanup is run from the open path (`useNavigateCommandMenu`
passes `emitSidePanelCloseEvent: false`). The table still deactivates
the row when the user closes the panel, but no longer when they open the
command menu by clicking a row.
2026-03-02 23:25:11 +00:00
7809f83e72 fix: [Note] Title not filled by default #13838 (#18297)
Fixes #13838 
When creating a note from the command menu side panel (e.g. clicking
"Add Note" in a related notes section on an Opportunity/company/people
page), the title field was not auto-focused — focus point went to body
instead.

## Root Cause

When a record opens in the side panel, there is no page navigation, so
`PageChangeEffect` (which handles title auto-focus for full-page views)
never runs. `openNewRecordTitleCell()` was simply never called for the
side-panel path.

## Fix

`openRecordInCommandMenu` is the single entry point for all side-panel
record opens, so title auto-focus is handled there once for all callers.
Previously, `useCreateNewIndexRecord` called `openRecordInCommandMenu`
and then called `openNewRecordTitleCell` separately, which would have
caused a double invocation after this fix. The redundant call has been
removed.

## Before


https://github.com/user-attachments/assets/df0d9e4f-dc25-4a0d-a49e-898a14f9c0a0

## After


https://github.com/user-attachments/assets/1a5044f7-6bb7-4333-8934-c1081b935e97

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-02 20:09:36 +00:00
27847f6ac6 i18n - translations (#18330)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-03-02 21:00:18 +01:00
Félix MalfaitandGitHub 6351c6c1c6 feat: remember original URL and redirect after login (#18308)
## Summary

- Implement a return-to-path mechanism that preserves the user's
intended destination across authentication flows (login, magic link,
cross-domain redirects)
- Uses layered persistence: Jotai atom (in-memory), sessionStorage with
TTL (tab-switch resilience), URL query parameter (cross-domain
propagation)
- Includes path validation to prevent open redirects, automatic cleanup
after successful login, and comprehensive test coverage
- Replaces the unused `previousUrlState` with a robust
`returnToPathState` system

## Test plan

- [ ] Visit a deep link (e.g. `/objects/tasks`) while logged out —
should redirect to login, then back to `/objects/tasks` after logging in
- [ ] Visit an OAuth authorize link while logged out — should redirect
to login, then to the authorize page
- [ ] Test magic link flow: click sign-in link that opens new tab —
should still redirect to original destination
- [ ] Test cross-domain: visit `app.twenty.com/objects/tasks` — should
preserve path through workspace domain redirect
- [ ] Verify auth/onboarding paths are excluded from being saved as
return paths
- [ ] Verify return-to-path is cleared after successful navigation
- [ ] All 215 existing `usePageChangeEffectNavigateLocation` tests pass


Made with [Cursor](https://cursor.com)
2026-03-02 19:00:48 +01:00
Abdullah.andGitHub 20a2c3836e feat: introduce role selector when inviting members to a workspace (#18085)
This PR adds an explicit role selector to the "Invite by email" flow,
requires a role choice before sending, and stores the selected role with
each invitation. The backend now accepts and persists `roleId` on
invitations and applies it when the invite is accepted, while keeping it
optional to avoid breaking existing clients and legacy invites.

---

### Frontend

- **Settings → Members → Invite by email**
- New **Role** dropdown (same `Select` pattern as member/API key role
selectors) between the email input and Invite button.
- Roles are loaded via `SettingsRolesQueryEffect` and
`settingsAllRolesSelector`; only roles with `canBeAssignedToUsers` are
shown.
- Role is **required**: form validates `roleId` (e.g.
`z.string().min(1)`) and the Invite button is disabled until a role is
selected and emails are valid.
- `WorkspaceInviteTeam` receives `roles` as a prop from the parent;
layout is responsive (e.g. stacked on small viewports).
- **Pending invitations table**
- New **Role** column showing the invitation’s role label (or "Unknown
role" for legacy invites without `roleId`), using the same roles source
for lookup.
- **Onboarding invite step**
- When sending invites during onboarding, the workspace **default role**
is used when available (`currentWorkspace?.defaultRole?.id`), so no role
selector is added there.
- **GraphQL**
- `sendInvitations` mutation accepts optional `roleId`;
`findWorkspaceInvitations` and resend mutation responses include
`roleId` on `WorkspaceInvitation`. Frontend types (e.g.
`WorkspaceInvitation`, hook variables) updated accordingly.

---

### Backend

- **API**
- `SendInvitationsInput` has an **optional** `roleId` (UUID, nullable).
The resolver normalises `null` to `undefined` so existing callers and
legacy flows are not broken.
- **Validation (when `roleId` is provided)**
- Role checks are centralised in **RoleValidationService**
(`RoleValidationModule`, in `metadata-modules/role-validation/`). It
validates that the role exists in the workspace and has
`canBeAssignedToUsers`, and throws a permissions-style error otherwise.
This avoids circular dependencies (e.g. `RoleModule` imports
`UserWorkspaceModule`, so invite/accept flows cannot depend on
`RoleModule`).
- **Send flow:** `WorkspaceInvitationResolver` and
`WorkspaceInvitationService.sendInvitations` both call
`RoleValidationService.validateRoleAssignableToUsersOrThrow` when
`roleId` is present (resolver before calling the service; service again
before creating tokens so that **resend** also validates the stored role
and fails fast if the role was deleted or made unassignable).
- **Accept flow:**
`UserWorkspaceService.addUserToWorkspaceIfUserNotInWorkspace` uses the
same service in `resolveRoleIdForNewMember` when an invitation provides
a `roleId`, then falls back to `workspace.defaultRoleId` when not.
Role/default is resolved and validated before any user/workspace/member
creation.
- **Persistence**
- Invitation app tokens store `roleId` in `context` next to `email`
(`context: { email, roleId? }`). `generateInvitationToken` and
`createWorkspaceInvitation` accept an optional `roleId` and only add it
to `context` when defined.
- **Resend**
- Resend passes the existing invitation’s `context.roleId` into
`sendInvitations`. The service validates that role (when present) before
creating the new token, so if the role was deleted or made unassignable,
resend fails with a clear error instead of sending a broken link.
- **Response shape**
- `SendInvitationsOutput.result` remains `WorkspaceInvitation[]`. When
`usePersonalInvitation` is false we only push full invitation records
(from `castAppTokenToWorkspaceInvitationUtil`), so the result always
matches the GraphQL type (`id`, `email`, `roleId`, `expiresAt`).
- **Modules**
- `WorkspaceInvitationModule` and `UserWorkspaceModule` import
**RoleValidationModule** (not `RoleModule`) and inject
**RoleValidationService** for validation. `RoleModule` imports
`RoleValidationModule` and `RoleService` delegates to
`RoleValidationService` for the same validation where the module graph
allows.

---

### Backward compatibility

- **Optional `roleId`**: Clients that don’t send `roleId` (or send
`null`) are unchanged; invitations are created without a role and the
accept flow uses the workspace default role.
- **Legacy invitations**: App tokens with only `context.email` still
work; `context.roleId` is optional and the UI can show e.g. "Unknown
role" for those in the pending-invitations table.
2026-03-02 18:58:32 +01:00
nitinandGitHub 1eb284c87f Fix command menu text/number inputs to commit on blur and cancel cleanly on Escape (#18283)
closes https://github.com/twentyhq/twenty/issues/18264




https://github.com/user-attachments/assets/7b576a00-78bc-46a2-9528-d8b3bcbdd530




https://github.com/user-attachments/assets/4102468e-e85f-46a0-8b23-e7abd77bfc95



### PR description -
This fixes flaky persistence in command menu text and number inputs.

- moved commit logic to onBlur (single commit path)
- Enter now blurs, so it uses the same commit path
- Escape now cancels edit (restores draft + exits) without persisting
- removed dependency on input click-outside commit timing

### Outcome -

- clicking anywhere outside the input now reliably persists edits
- Escape consistently discards edits
2026-03-02 15:30:51 +00:00
Charles BochetandGitHub c4140f85df chore(twenty-front): migrate small modules from Emotion to Linaria (PR 1/10) (#18314)
## Emotion → Linaria migration — PR 1 of 10

First batch of the `twenty-front` migration from Emotion (runtime
CSS-in-JS) to Linaria (zero-runtime, build-time extraction via
wyw-in-js). Covers **100 files** across 10 small standalone modules —
chosen as the lowest-risk starting point.

### Modules migrated

spreadsheet-import (28) · navigation-menu-item (17) · views (14) ·
billing (10) · blocknote-editor (7) · advanced-text-editor (7) ·
favorites (7) · navigation (4) · information-banner (3) ·
sign-in-background-mock (3)

### Migration pattern

Every file follows the same mechanical transformation:

| Emotion | Linaria |
|---|---|
| `import styled from '@emotion/styled'` | `import { styled } from
'@linaria/react'` |
| `${({ theme }) => theme.font.color.primary}` |
`${themeCssVariables.font.color.primary}` |
| `${({ theme }) => theme.spacing(4)}` |
`${themeCssVariables.spacing[4]}` |
| `const theme = useTheme()` | `const { theme } =
useContext(ThemeContext)` |
| `import { type Theme } from '@emotion/react'` | `import { type
ThemeType } from 'twenty-ui/theme'` |

`themeCssVariables` is a build-time object where every leaf is a
`var(--t-xxx)` CSS custom property reference, evaluated statically by
wyw-in-js. Runtime theme access (icon sizes, colors passed as props)
uses `useContext(ThemeContext)`.

### Gotchas encountered & fixed

- **Interpolation return types** — wyw-in-js requires `string | number`,
never `false`/`undefined`. Replaced `condition && 'css'` with `condition
? 'css' : ''`.
- **`css` tag inside `styled` templates** — Linaria `css` returns a
class name, not CSS text. Replaced with plain template strings.
- **`styled(Component)` needs `className`** — added `className` prop to
`NavigationDrawerSection`, `DropdownMenuItemsContainer`, and `Heading`.
- **`shouldForwardProp` not supported** — Linaria filters invalid DOM
props automatically for HTML elements. For custom components, used
wrapper divs where needed.
- **`FormFieldPlaceholderStyles`** — converted from Emotion `css`
function to a static string using `themeCssVariables`.
2026-03-02 16:33:40 +01:00
Charles BochetandGitHub 9c4b0f526c Refactor chip component hierarchy: AvatarChip → AvatarOrIcon (#18313)
## Summary

Cleans up the chip component hierarchy in `twenty-ui`:

- **Fix twenty-ui Storybook** — The `wyw-in-js` Vite plugin crashed on
`/@react-refresh` virtual module. Fixed by setting `enforce: 'pre'` so
it runs before the React refresh plugin injects virtual imports.
- **Rename `AvatarChip` → `AvatarOrIcon`** — The old name was
misleading. This component is not a chip — it's a polymorphic renderer
that displays either an `Avatar` (image/initials) or an `Icon` (plain or
with colored background). It's typically slotted into `Chip`/`LinkChip`
as `leftComponent`.
- **Move `rightComponentDivider` to `Chip`/`LinkChip`** — The vertical
separator between chip content and a right action (e.g. a close button)
is a chip layout concern, not an avatar concern. Added
`rightComponentDivider` boolean prop to `Chip` and `LinkChip`.
- **Remove `MultipleAvatarChip`** — Zero consumers in the codebase. The
command menu implements its own overlapping avatar layout.
- **Migrate raw icon usages** — `CalendarEventDetails` and `FileIcon`
(small size) now use `AvatarOrIcon` for consistent Chip icon rendering.
- **Enhance stories** — Full `CatalogDecorator` coverage for `Chip` and
`LinkChip` showing all variants, sizes, accents, and states.

## Component hierarchy

```
AvatarOrIcon (twenty-ui)
  ├── No Icon → renders Avatar (image or initials)
  ├── Icon + background → renders icon in colored square
  └── Icon only → renders plain icon
  Used as leftComponent/rightComponent in Chip or standalone

Chip (twenty-ui)
  ├── leftComponent (typically AvatarOrIcon)
  ├── label (with overflow tooltip)
  ├── rightComponentDivider (optional vertical separator)
  └── rightComponent (e.g. close icon via AvatarOrIcon)

LinkChip (twenty-ui)
  └── Wraps Chip inside a react-router <Link>

RecordChip (twenty-front)
  └── Composes Chip/LinkChip + AvatarOrIcon with record data
```

## `Chip` API additions

| Prop | Type | Description |
|------|------|-------------|
| `rightComponentDivider` | `boolean` | Renders a vertical separator
before `rightComponent` |

## Stories

<img width="1032" height="576" alt="image"
src="https://github.com/user-attachments/assets/fe7c7666-9b16-4545-b87e-1b53e22d462d"
/>
2026-03-02 15:48:49 +01:00
WeikoandGitHub 37bcb35391 Migrate pagelayout position frontend (#18229)
## Context
Part 1 of migrating gridPosition in favor of typed position
FE should now always send both values to the BE and use both.

Next steps: 
- Update the backend to enforce and validate the new position field + DB
migrations gridPositon -> position (type: GRID)
- Cleanup frontend usage
- Cleanup backend
2026-03-02 14:42:30 +01:00
361 changed files with 7318 additions and 2160 deletions
+381
View File
@@ -0,0 +1,381 @@
# Emotion → Linaria Migration Plan: twenty-front
## Overview
Migrate all Emotion (`@emotion/styled`, `@emotion/react`) usages in
`packages/twenty-front/src` to Linaria (`@linaria/react`, `@linaria/core`),
following the same patterns already established in the `twenty-ui` package.
Linaria is a **zero-runtime** CSS-in-JS library. Styles are extracted at
build time by [wyw-in-js](https://wyw-in-js.dev/) (the Vite plugin is
`@wyw-in-js/vite`, already configured in `twenty-front/vite.config.ts`).
This means every expression inside a `styled` or `css` template literal
must be statically evaluable at build time — no runtime theme objects,
no closures over component state, no side-effects.
**Total files to migrate: ~998**
| Category | Files | Description |
|---|---|---|
| styled-only | 694 | Import `@emotion/styled` but not `useTheme` |
| styled + useTheme | 224 | Import both `@emotion/styled` and `useTheme` |
| useTheme-only | 79 | Import `useTheme` but not `@emotion/styled` |
| css / Global only | 1 | Import `css` or `Global` from `@emotion/react` only |
## Theme Architecture
Two build-time utilities produce the theme system:
- **`buildThemeReferencingRootCssVariables`** — walks the theme object and
builds a nested mirror where every leaf is a `var(--t-xxx)` string
(evaluated at build time by wyw-in-js)
- **`prepareThemeForRootCssVariableInjection`** — walks the runtime theme
and collects flat `[--css-variable-name, value]` pairs, injected onto
`document.documentElement` by `ThemeCssVariableInjectorEffect`
`themeCssVariables` is the build-time object; every leaf resolves to a CSS
`var()` reference. It is safe to use inside `styled` and `css` templates
because wyw-in-js can evaluate it statically.
## Migration Patterns
### 1. `styled` import
```diff
- import styled from '@emotion/styled';
+ import { styled } from '@linaria/react';
```
### 2. Theme access in styled components
Replace Emotion's `({ theme }) =>` prop-function pattern with static
`themeCssVariables` references:
```diff
+ import { themeCssVariables } from 'twenty-ui/theme';
const StyledTitle = styled.span`
- color: ${({ theme }) => theme.font.color.primary};
- font-size: ${({ theme }) => theme.font.size.lg};
+ color: ${themeCssVariables.font.color.primary};
+ font-size: ${themeCssVariables.font.size.lg};
`;
```
### 3. Spacing
`theme.spacing(N)` is a function; in Linaria it becomes an indexed lookup:
```diff
- margin-top: ${({ theme }) => theme.spacing(3)};
+ margin-top: ${themeCssVariables.spacing[3]};
```
For multi-arg spacing like `theme.spacing(2, 4)``"8px 16px"`:
```diff
- padding: ${({ theme }) => theme.spacing(2, 4)};
+ padding: ${themeCssVariables.spacing[2]} ${themeCssVariables.spacing[4]};
```
The spacing scale covers integers 032 plus `0.5` and `1.5`. Any other
fractional values (`0.25`, `0.75`, `1.25`, `2.5`, `3.5`) must be replaced
with literal pixel values (e.g. `theme.spacing(2.5)``10px`).
### 4. `useTheme` → `useContext(ThemeContext)`
For runtime theme access (icon sizes, animation durations, conditional logic
outside of styled components):
```diff
- import { useTheme } from '@emotion/react';
+ import { useContext } from 'react';
+ import { ThemeContext } from 'twenty-ui/theme';
const MyComponent = () => {
- const theme = useTheme();
+ const { theme } = useContext(ThemeContext);
return <Icon size={theme.icon.size.sm} />;
};
```
### 5. `css` template literal
Linaria's `css` (from `@linaria/core`) returns a **class name string**, not
a serialized style object like Emotion's `css`. This has two consequences:
**Standalone usage** — apply via `className`, not the `css` prop:
```diff
- import { css } from '@emotion/react';
+ import { css } from '@linaria/core';
const myClass = css`
text-decoration: none;
`;
- <Link css={myClass} />
+ <Link className={myClass} />
```
**Inside `styled` templates** — do NOT nest `css` tags. Linaria's `css`
returns a class name, not raw CSS text, so interpolating it inside `styled`
produces broken output. Use plain strings instead:
```diff
// WRONG — css`` returns a class name, not CSS text
${({ handle }) =>
handle === 'left'
- ? css`left: ${themeCssVariables.spacing[1]};`
- : css`right: ${themeCssVariables.spacing[1]};`}
+ ? `left: ${themeCssVariables.spacing[1]};`
+ : `right: ${themeCssVariables.spacing[1]};`}
```
### 6. Interpolation return types
wyw-in-js requires prop interpolation functions to return `string | number`.
They must **never** return `false`, `undefined`, or `null`. Replace
short-circuit `&&` with ternary expressions:
```diff
// WRONG — returns false when condition is false
- ${({ isActive }) => isActive && `background: ${themeCssVariables.color.blue};`}
// CORRECT
+ ${({ isActive }) => isActive ? `background: ${themeCssVariables.color.blue};` : ''}
```
### 7. Block interpolations (multi-declaration returns)
Linaria wraps each interpolation result in a single CSS custom property
(`var(--xxx)`). An interpolation that returns **multiple CSS declarations**
produces invalid CSS. Split into one interpolation per property:
```diff
// WRONG — single interpolation returning multiple declarations
- ${({ divider, theme }) => {
- const border = `1px solid ${theme.border.color.light}`;
- return divider === 'left' ? `border-left: ${border}` : `border-right: ${border}`;
- }}
// CORRECT — one interpolation per property
+ border-left: ${({ divider }) =>
+ divider === 'left' ? `1px solid ${themeCssVariables.border.color.light}` : 'none'};
+ border-right: ${({ divider }) =>
+ divider === 'right' ? `1px solid ${themeCssVariables.border.color.light}` : 'none'};
```
### 8. CSS var + unit concatenation
CSS custom properties can't be concatenated with unit suffixes directly
(`var(--x)px` is invalid). Use `calc()` to attach units:
```diff
- transition: background ${themeCssVariables.animation.duration.instant}s ease;
+ transition: background calc(${themeCssVariables.animation.duration.instant} * 1s) ease;
```
### 9. `styled(Component)` requires `className`
Linaria's `styled(Component)` works by passing a generated `className` to
the wrapped component. The component **must** accept and forward a
`className` prop — otherwise the styles are silently lost. If the component
doesn't support it, either add `className` support or use a wrapper div.
Linaria also does **not** support Emotion's `shouldForwardProp` option.
Custom props on HTML elements are automatically filtered by Linaria's
runtime (via `@emotion/is-prop-valid`). For custom components, all props are
forwarded — ensure the wrapped component ignores unknown props gracefully.
### 10. `type Theme` → `type ThemeType`
```diff
- import { type Theme } from '@emotion/react';
+ import { type ThemeType } from 'twenty-ui/theme';
```
### 11. Framer Motion integration
Linaria doesn't support `styled(motion.div)` — wrapping a motion element
with `styled()` causes the component body to be stripped at build time by
wyw-in-js. Define the styled component first, then wrap with
`motion.create()`:
```tsx
const StyledBarBase = styled.div`
background-color: ${themeCssVariables.font.color.primary};
height: 100%;
`;
const StyledBar = motion.create(StyledBarBase);
```
### 12. Dynamic styles via CSS variables
When a component needs to compute styles from multiple props with complex
branching logic (e.g. combining `variant`, `accent`, `disabled`, `focus`),
Linaria's prop interpolations become unwieldy. Use a `computeDynamicStyles`
helper that returns a `CSSProperties` object injected via `style={}`,
referenced from the static CSS with `var()`:
```tsx
const StyledButton = styled.button`
background: var(--btn-bg);
border-color: var(--btn-border-color);
&:hover { background: var(--btn-hover-bg); }
`;
const dynamicStyles = useMemo(() => {
const s = computeButtonDynamicStyles(variant, accent, ...);
return {
'--btn-bg': s.background,
'--btn-hover-bg': s.hoverBackground,
} as CSSProperties;
}, [variant, accent, ...]);
return <StyledButton style={dynamicStyles} />;
```
### 13. `Global` component
Replace Emotion's `<Global styles={...} />` with standard CSS or the
`ThemeCssVariableInjectorEffect` pattern from twenty-ui.
### 14. `ThemeProvider`
The `BaseThemeProvider` already wraps children with both Emotion's
`ThemeProvider` and Linaria's `ThemeContextProvider`. Once all Emotion usages
are gone, the Emotion `ThemeProvider` wrapper can be removed.
---
## PR Breakdown
Files are grouped to keep each PR around ~100 files with consistent review
surface. We start with the simplest, lowest-risk modules.
### PR 1 (~97 files) — Small standalone modules
Low-risk modules with mostly simple `styled`-only patterns.
| Module | Files |
|---|---|
| spreadsheet-import | 28 |
| billing | 10 |
| views | 14 |
| navigation-menu-item | 14 |
| blocknote-editor | 7 |
| advanced-text-editor | 7 |
| favorites | 7 |
| navigation | 4 |
| information-banner | 3 |
| sign-in-background-mock | 3 |
### PR 2 (~100 files) — Auth, tiny modules, loading, testing, pages (part 1)
| Module | Files |
|---|---|
| auth | 19 |
| action-menu | 3 |
| object-metadata | 3 |
| onboarding | 2 |
| workspace | 2 |
| file | 2 |
| error-handler | 2 |
| front-components | 1 |
| geo-map | 1 |
| hooks | 1 |
| loading | 5 |
| testing | 5 |
| pages (first ~55 files) | ~55 |
### PR 3 (~97 files) — Pages (remaining) + activities + AI
| Module | Files |
|---|---|
| pages (remaining ~16 files) | ~16 |
| activities | 53 |
| ai | 28 |
### PR 4 (~100 files) — Command-menu + workflow (part 1)
| Module | Files |
|---|---|
| command-menu | 53 |
| workflow (first ~47 files) | ~47 |
### PR 5 (~115 files) — Workflow (remaining) + page-layout
| Module | Files |
|---|---|
| workflow (remaining ~32 files) | ~32 |
| page-layout | 83 |
### PR 6 (~100 files) — UI module (part 1)
| Module | Files |
|---|---|
| ui (first ~100 files) | ~100 |
### PR 7 (~85 files) — UI module (remaining) + object-record (start)
| Module | Files |
|---|---|
| ui (remaining ~23 files) | ~23 |
| object-record (first ~62 files) | ~62 |
### PR 8 (~100 files) — Object-record (continued)
| Module | Files |
|---|---|
| object-record (next ~100 files) | ~100 |
### PR 9 (~100 files) — Settings (part 1)
| Module | Files |
|---|---|
| settings (first ~100 files) | ~100 |
### PR 10 (~102 files) — Settings (part 2) + final cleanup
| Module | Files |
|---|---|
| settings (remaining ~102 files) | ~102 |
| css/Global-only file | 1 |
### Post-migration PR — Remove Emotion
Once all PRs are merged:
- Remove `ThemeProvider` from `@emotion/react` in `BaseThemeProvider`
- Remove `@emotion/styled` and `@emotion/react` dependencies
- Remove `@styled/typescript-styled-plugin` from tsconfig
- Clean up any remaining Emotion-related configuration
---
## Risk Assessment
| Risk | Mitigation |
|---|---|
| wyw-in-js evaluates at build time; dynamic expressions may fail | Use `themeCssVariables` for static theme values; pass dynamic values as component props or via `style={}` CSS variables |
| `theme.spacing(N)` function → `themeCssVariables.spacing[N]` index | Pre-computed for integers 032 plus 0.5 and 1.5; other fractional values → literal pixel values |
| `useTheme` used for runtime logic (not just styles) | Replace with `useContext(ThemeContext)`, destructure `{ theme }` |
| Multi-arg `theme.spacing(a, b, c)` | Split into individual `themeCssVariables.spacing[N]` references |
| `css` tag inside `styled` templates | Linaria `css` returns class name, not CSS text; use plain strings inside `styled` |
| Interpolation returns `false` / `undefined` | wyw-in-js requires `string \| number`; use ternary `? : ''` instead of `&&` |
| Block interpolations (multiple declarations) | Split into one interpolation per CSS property |
| `var(--x)px` concatenation | Use `calc(var(--x) * 1px)` |
| `styled(motion.div)` stripped by wyw-in-js | Use `motion.create(StyledBase)` pattern |
| `styled(Component)` with no `className` prop | Add `className` support to wrapped component or use wrapper div |
| Complex multi-prop style branching | Use `computeDynamicStyles` + `style={}` + `var()` references |
---
## Validation Checklist (per PR)
- [ ] `npx nx lint:diff-with-main twenty-front` passes
- [ ] `npx nx typecheck twenty-front` passes
- [ ] `npx nx test twenty-front` passes
- [ ] Visual spot-check of affected components in the app
- [ ] No remaining `@emotion/styled` or `@emotion/react` imports in migrated files
@@ -0,0 +1,115 @@
import { expect, test as base } from '@playwright/test';
import { LoginPage } from '../../lib/pom/loginPage';
const test = base.extend<{ loginPage: LoginPage }>({
loginPage: async ({ page }, use) => {
const loginPage = new LoginPage(page);
await use(loginPage);
},
});
const loginAndSelectWorkspace = async (loginPage: LoginPage, page: any) => {
await page.waitForLoadState('networkidle');
await loginPage.clickLoginWithEmailIfVisible();
await loginPage.typeEmail(process.env.DEFAULT_LOGIN!);
await loginPage.clickContinueButton();
await loginPage.typePassword(process.env.DEFAULT_PASSWORD!);
await page.waitForLoadState('networkidle');
await loginPage.clickSignInButton();
await page.waitForLoadState('networkidle');
const workspaceButton = page.getByText('Apple', { exact: true });
await workspaceButton.waitFor({ state: 'visible', timeout: 15000 }).catch(
() => {
// Single workspace mode — no workspace selection
},
);
if (await workspaceButton.isVisible()) {
await workspaceButton.click();
}
await page.waitForFunction(
() =>
!window.location.href.includes('verify') &&
!window.location.href.includes('welcome'),
{ timeout: 15000 },
);
};
test.describe('Return-to-path after login', () => {
test.use({ storageState: { cookies: [], origins: [] } });
test('should redirect to deep link after login', async ({
page,
loginPage,
}) => {
const deepLink = '/settings/accounts';
await test.step('Navigate to deep link while logged out', async () => {
await page.goto(deepLink);
await page.waitForURL('**/welcome');
await page.waitForLoadState('domcontentloaded');
});
await test.step('Log in and select workspace', async () => {
await loginAndSelectWorkspace(loginPage, page);
});
await test.step(
'Verify redirected to original deep link',
async () => {
await page.waitForURL(`**${deepLink}`, {
timeout: 30000,
waitUntil: 'commit',
});
expect(new URL(page.url()).pathname).toBe(deepLink);
},
);
await test.step(
'Verify return-to-path query param was consumed',
async () => {
const url = new URL(page.url());
expect(url.searchParams.has('returnToPath')).toBe(false);
},
);
});
test('should preserve path with query params across login', async ({
page,
loginPage,
}) => {
const targetPath =
'/authorize?clientId=test-client-id&redirectUrl=https%3A%2F%2Fexample.com%2Fcallback';
await test.step(
'Navigate to path with query params while logged out',
async () => {
await page.goto(targetPath);
await page.waitForURL('**/welcome');
await page.waitForLoadState('domcontentloaded');
},
);
await test.step('Log in and select workspace', async () => {
await loginAndSelectWorkspace(loginPage, page);
});
await test.step(
'Verify redirected to original path with query params',
async () => {
await page.waitForURL('**/authorize**', { timeout: 15000 });
const url = new URL(page.url());
expect(url.pathname).toBe('/authorize');
expect(url.searchParams.get('clientId')).toBe('test-client-id');
expect(url.searchParams.get('redirectUrl')).toBe(
'https://example.com/callback',
);
},
);
});
});
@@ -3035,6 +3035,7 @@ export type MutationSaveImapSmtpCaldavAccountArgs = {
export type MutationSendInvitationsArgs = {
emails: Array<Scalars['String']>;
roleId?: InputMaybe<Scalars['UUID']>;
};
@@ -5451,6 +5452,7 @@ export type WorkspaceInvitation = {
email: Scalars['String'];
expiresAt: Scalars['DateTime'];
id: Scalars['UUID'];
roleId?: Maybe<Scalars['UUID']>;
};
export type WorkspaceInviteHashValid = {
@@ -7172,19 +7174,20 @@ export type ResendWorkspaceInvitationMutationVariables = Exact<{
}>;
export type ResendWorkspaceInvitationMutation = { __typename?: 'Mutation', resendWorkspaceInvitation: { __typename?: 'SendInvitations', success: boolean, errors: Array<string>, result: Array<{ __typename?: 'WorkspaceInvitation', id: string, email: string, expiresAt: string }> } };
export type ResendWorkspaceInvitationMutation = { __typename?: 'Mutation', resendWorkspaceInvitation: { __typename?: 'SendInvitations', success: boolean, errors: Array<string>, result: Array<{ __typename?: 'WorkspaceInvitation', id: string, email: string, roleId?: string | null, expiresAt: string }> } };
export type SendInvitationsMutationVariables = Exact<{
emails: Array<Scalars['String']> | Scalars['String'];
roleId?: InputMaybe<Scalars['UUID']>;
}>;
export type SendInvitationsMutation = { __typename?: 'Mutation', sendInvitations: { __typename?: 'SendInvitations', success: boolean, errors: Array<string>, result: Array<{ __typename?: 'WorkspaceInvitation', id: string, email: string, expiresAt: string }> } };
export type SendInvitationsMutation = { __typename?: 'Mutation', sendInvitations: { __typename?: 'SendInvitations', success: boolean, errors: Array<string>, result: Array<{ __typename?: 'WorkspaceInvitation', id: string, email: string, roleId?: string | null, expiresAt: string }> } };
export type GetWorkspaceInvitationsQueryVariables = Exact<{ [key: string]: never; }>;
export type GetWorkspaceInvitationsQuery = { __typename?: 'Query', findWorkspaceInvitations: Array<{ __typename?: 'WorkspaceInvitation', id: string, email: string, expiresAt: string }> };
export type GetWorkspaceInvitationsQuery = { __typename?: 'Query', findWorkspaceInvitations: Array<{ __typename?: 'WorkspaceInvitation', id: string, email: string, roleId?: string | null, expiresAt: string }> };
export type DeletedWorkspaceMemberQueryFragmentFragment = { __typename?: 'DeletedWorkspaceMember', id: string, avatarUrl?: string | null, userEmail: string, name: { __typename?: 'FullName', firstName: string, lastName: string } };
@@ -16582,6 +16585,7 @@ export const ResendWorkspaceInvitationDocument = gql`
... on WorkspaceInvitation {
id
email
roleId
expiresAt
}
}
@@ -16615,14 +16619,15 @@ export type ResendWorkspaceInvitationMutationHookResult = ReturnType<typeof useR
export type ResendWorkspaceInvitationMutationResult = Apollo.MutationResult<ResendWorkspaceInvitationMutation>;
export type ResendWorkspaceInvitationMutationOptions = Apollo.BaseMutationOptions<ResendWorkspaceInvitationMutation, ResendWorkspaceInvitationMutationVariables>;
export const SendInvitationsDocument = gql`
mutation SendInvitations($emails: [String!]!) {
sendInvitations(emails: $emails) {
mutation SendInvitations($emails: [String!]!, $roleId: UUID) {
sendInvitations(emails: $emails, roleId: $roleId) {
success
errors
result {
... on WorkspaceInvitation {
id
email
roleId
expiresAt
}
}
@@ -16645,6 +16650,7 @@ export type SendInvitationsMutationFn = Apollo.MutationFunction<SendInvitationsM
* const [sendInvitationsMutation, { data, loading, error }] = useSendInvitationsMutation({
* variables: {
* emails: // value for 'emails'
* roleId: // value for 'roleId'
* },
* });
*/
@@ -16660,6 +16666,7 @@ export const GetWorkspaceInvitationsDocument = gql`
findWorkspaceInvitations {
id
email
roleId
expiresAt
}
}
@@ -52,9 +52,11 @@ jest.mocked(useDefaultHomePagePath).mockReturnValue({
});
jest.mock('@/domain-manager/hooks/useIsCurrentLocationOnAWorkspace');
jest.mocked(useIsCurrentLocationOnAWorkspace).mockReturnValue({
isOnAWorkspace: true,
});
const setupMockIsOnAWorkspace = (isOnAWorkspace: boolean) => {
jest.mocked(useIsCurrentLocationOnAWorkspace).mockReturnValue({
isOnAWorkspace,
});
};
jest.mock('react-router-dom');
const setupMockUseParams = (objectNamePlural?: string) => {
@@ -68,12 +70,14 @@ const setupMockState = (
objectNamePlural?: string,
verifyEmailRedirectPath?: string,
calendarBookingPageId?: string | null,
returnToPath?: string,
) => {
jest
.mocked(useAtomStateValue)
.mockReturnValueOnce(calendarBookingPageId ?? 'mock-calendar-id')
.mockReturnValueOnce([{ namePlural: objectNamePlural ?? '' }])
.mockReturnValueOnce(verifyEmailRedirectPath);
.mockReturnValueOnce(verifyEmailRedirectPath)
.mockReturnValueOnce(returnToPath ?? '');
};
// prettier-ignore
@@ -83,9 +87,11 @@ const testCases: {
isWorkspaceSuspended: boolean;
onboardingStatus: OnboardingStatus | undefined;
res: string | undefined;
isOnAWorkspace?: boolean;
objectNamePluralFromParams?: string;
objectNamePluralFromMetadata?: string;
verifyEmailRedirectPath?: string;
returnToPath?: string;
}[] = [
{ loc: AppPath.Verify, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.PLAN_REQUIRED, res: AppPath.PlanRequired },
{ loc: AppPath.Verify, isLoggedIn: true, isWorkspaceSuspended: true, onboardingStatus: OnboardingStatus.COMPLETED, res: getSettingsPath(SettingsPath.Billing) },
@@ -320,6 +326,15 @@ const testCases: {
{ loc: AppPath.NotFound, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.INVITE_TEAM, res: AppPath.InviteTeam },
{ loc: AppPath.NotFound, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.BOOK_ONBOARDING, res: AppPath.BookCallDecision },
{ loc: AppPath.NotFound, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, res: undefined },
// returnToPath: should redirect to saved path instead of defaultHomePagePath
{ loc: AppPath.Verify, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, returnToPath: '/authorize?clientId=abc', res: '/authorize?clientId=abc' },
{ loc: AppPath.SignInUp, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, returnToPath: '/objects/tasks', res: '/objects/tasks' },
{ loc: AppPath.Index, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, returnToPath: '/settings/api-keys', res: '/settings/api-keys' },
// isOnAWorkspace:false — on default domain, don't redirect to returnToPath or defaultHomePagePath from auth pages
{ loc: AppPath.Verify, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, isOnAWorkspace: false, res: undefined },
{ loc: AppPath.SignInUp, isLoggedIn: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, isOnAWorkspace: false, res: undefined },
];
describe('usePageChangeEffectNavigateLocation', () => {
@@ -330,17 +345,25 @@ describe('usePageChangeEffectNavigateLocation', () => {
onboardingStatus,
isWorkspaceSuspended,
isLoggedIn,
isOnAWorkspace,
objectNamePluralFromParams,
objectNamePluralFromMetadata,
verifyEmailRedirectPath,
returnToPath,
res,
}) => {
setupMockIsMatchingLocation(loc);
setupMockOnboardingStatus(onboardingStatus);
setupMockIsWorkspaceActivationStatusEqualsTo(isWorkspaceSuspended);
setupMockIsLogged(isLoggedIn);
setupMockIsOnAWorkspace(isOnAWorkspace ?? true);
setupMockUseParams(objectNamePluralFromParams);
setupMockState(objectNamePluralFromMetadata, verifyEmailRedirectPath);
setupMockState(
objectNamePluralFromMetadata,
verifyEmailRedirectPath,
undefined,
returnToPath,
);
expect(usePageChangeEffectNavigateLocation()).toEqual(res);
},
@@ -355,7 +378,10 @@ describe('usePageChangeEffectNavigateLocation', () => {
.length) +
['nonExistingObjectInParam', 'existingObjectInParam:false'].length +
['caseWithRedirectionToVerifyEmailRedirectPath', 'caseWithout']
.length,
.length +
['returnToPath:verify', 'returnToPath:signInUp', 'returnToPath:index']
.length +
['notOnWorkspace:verify', 'notOnWorkspace:signInUp'].length,
);
});
});
@@ -1,5 +1,8 @@
import { verifyEmailRedirectPathState } from '@/app/states/verifyEmailRedirectPathState';
import { ONBOARDING_PATHS } from '@/auth/constants/OnboardingPaths';
import { ONGOING_USER_CREATION_PATHS } from '@/auth/constants/OngoingUserCreationPaths';
import { useIsLogged } from '@/auth/hooks/useIsLogged';
import { returnToPathState } from '@/auth/states/returnToPathState';
import { calendarBookingPageIdState } from '@/client-config/states/calendarBookingPageIdState';
import { useIsCurrentLocationOnAWorkspace } from '@/domain-manager/hooks/useIsCurrentLocationOnAWorkspace';
import { useDefaultHomePagePath } from '@/navigation/hooks/useDefaultHomePagePath';
@@ -7,6 +10,8 @@ import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadat
import { useOnboardingStatus } from '@/onboarding/hooks/useOnboardingStatus';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useIsWorkspaceActivationStatusEqualsTo } from '@/workspace/hooks/useIsWorkspaceActivationStatusEqualsTo';
import { isValidReturnToPath } from '@/auth/utils/isValidReturnToPath';
import { isNonEmptyString } from '@sniptt/guards';
import { useLocation, useParams } from 'react-router-dom';
import { AppPath, SettingsPath } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
@@ -14,6 +19,12 @@ import { WorkspaceActivationStatus } from 'twenty-shared/workspace';
import { OnboardingStatus } from '~/generated-metadata/graphql';
import { isMatchingLocation } from '~/utils/isMatchingLocation';
const readReturnToPathFromUrlSearchParams = (): string | null => {
const value = new URLSearchParams(window.location.search).get('returnToPath');
return value && isValidReturnToPath(value) ? value : null;
};
export const usePageChangeEffectNavigateLocation = () => {
const isLoggedIn = useIsLogged();
const { isOnAWorkspace } = useIsCurrentLocationOnAWorkspace();
@@ -27,22 +38,6 @@ export const usePageChangeEffectNavigateLocation = () => {
const someMatchingLocationOf = (appPaths: AppPath[]): boolean =>
appPaths.some((appPath) => isMatchingLocation(location, appPath));
const onGoingUserCreationPaths = [
AppPath.Invite,
AppPath.SignInUp,
AppPath.VerifyEmail,
AppPath.Verify,
];
const onboardingPaths = [
AppPath.CreateWorkspace,
AppPath.CreateProfile,
AppPath.SyncEmails,
AppPath.InviteTeam,
AppPath.PlanRequired,
AppPath.PlanRequiredSuccess,
AppPath.BookCallDecision,
AppPath.BookCall,
];
const objectNamePlural = useParams().objectNamePlural ?? '';
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
@@ -53,10 +48,15 @@ export const usePageChangeEffectNavigateLocation = () => {
verifyEmailRedirectPathState,
);
const returnToPath = useAtomStateValue(returnToPathState);
const resolvedReturnToPath = isNonEmptyString(returnToPath)
? returnToPath
: readReturnToPathFromUrlSearchParams();
if (
(!isLoggedIn || (isLoggedIn && !isOnAWorkspace)) &&
!someMatchingLocationOf([
...onGoingUserCreationPaths,
...ONGOING_USER_CREATION_PATHS,
AppPath.ResetPassword,
])
) {
@@ -135,15 +135,19 @@ export const usePageChangeEffectNavigateLocation = () => {
if (
onboardingStatus === OnboardingStatus.COMPLETED &&
someMatchingLocationOf([...onboardingPaths, ...onGoingUserCreationPaths]) &&
someMatchingLocationOf([
...ONBOARDING_PATHS,
...ONGOING_USER_CREATION_PATHS,
]) &&
!isMatchingLocation(location, AppPath.ResetPassword) &&
isLoggedIn
isLoggedIn &&
isOnAWorkspace
) {
return defaultHomePagePath;
return resolvedReturnToPath ?? defaultHomePagePath;
}
if (isMatchingLocation(location, AppPath.Index) && isLoggedIn) {
return defaultHomePagePath;
return resolvedReturnToPath ?? defaultHomePagePath;
}
if (
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} van {totalCount} in {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} dag} other {{days} dae}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adres 1"
msgid "Address 2"
msgstr "Adres 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Stel die rolverwante instellings aan"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Toegewys {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Toegewys aan"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Verstek landkode"
msgid "Default palette"
msgstr "Verstekpalet"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Verstekrol"
@@ -9782,7 +9799,6 @@ msgstr "Opsionele geheim gebruik om die HMAC-handtekening vir webhook-vragte te
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rol"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Diensverskaffer Besonderhede"
msgid "Set {placeholderForEmptyCell}"
msgstr "Stel {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Stel 27n verstekrol vir hierdie werksruimte in"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} من {totalCount} في {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, zero {{days} أيام} one {{days} يوم} two {{days} يومان} few {{days} أيام} many {{days} أيام} other {{days} أيام}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "العنوان 1"
msgid "Address 2"
msgstr "العنوان 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "ضبط الإعدادات المتعلقة بالدور"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "معين {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "مُعين إلى"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "رمز البلد الافتراضي"
msgid "Default palette"
msgstr "لوحة الألوان الافتراضية"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "الدور الافتراضي"
@@ -9782,7 +9799,6 @@ msgstr "سر اختياري يُستخدم لحساب توقيع HMAC لأحما
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "دور"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "تفاصيل موفر الخدمة"
msgid "Set {placeholderForEmptyCell}"
msgstr "عيّن {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "تعيين دور افتراضي لمساحة العمل هذه"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} de {totalCount} en {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} dia} other {{days} dies}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adreça 1"
msgid "Address 2"
msgstr "Adreça 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Ajusta els paràmetres relacionats amb el rol"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Assignat {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Assignat a"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Codi de país predeterminat"
msgid "Default palette"
msgstr "Paleta predeterminada"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Rol predeterminat"
@@ -9782,7 +9799,6 @@ msgstr "Secret opcional usat per calcular la signatura HMAC dels càrregues úti
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rol"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Detalls del Proveïdor de Serveis"
msgid "Set {placeholderForEmptyCell}"
msgstr "Estableix {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Defineix un rol predeterminat per a aquest espai de treball"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} z {totalCount} v {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} den} few {{days} dny} many {{days} dnů} other {{days} dnů}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adresa 1"
msgid "Address 2"
msgstr "Adresa 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Upravit nastavení související s rolí"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Přiřazeno {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Přiřazeno"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Výchozí číselný kód země"
msgid "Default palette"
msgstr "Výchozí paleta"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Výchozí role"
@@ -9782,7 +9799,6 @@ msgstr "Volitelný tajný klíč použitý k výpočtu HMAC podpisu pro údaje w
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "role"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Detaily poskytovatele služby"
msgid "Set {placeholderForEmptyCell}"
msgstr "Nastavit {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Nastavit výchozí roli pro tento pracovní prostor"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} af {totalCount} i {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} dag} other {{days} dage}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adresse 1"
msgid "Address 2"
msgstr "Adresse 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Juster de rolle-relaterede indstillinger"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Tildelt {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Tildelt til"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Standardlandekode"
msgid "Default palette"
msgstr "Standardfarvepalet"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Standardrolle"
@@ -9782,7 +9799,6 @@ msgstr "Valgfri hemmelighed brugt til at beregne HMAC-signatur for webhook-indho
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rolle"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Tjenesteudbyderoplysninger"
msgid "Set {placeholderForEmptyCell}"
msgstr "Angiv {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Indstil en standardrolle for dette arbejdsområde"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} von {totalCount} in {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} Tag} other {{days} Tage}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adresse 1"
msgid "Address 2"
msgstr "Adresse 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Passen Sie die rollenspezifischen Einstellungen an"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Zugewiesen {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Zugewiesen an"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Standard-Ländercode"
msgid "Default palette"
msgstr "Standardpalette"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Standardrolle"
@@ -9782,7 +9799,6 @@ msgstr "Optionales Geheimnis, um die HMAC-Signatur für Webhook-Nutzlasten zu be
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rolle"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Details des Dienstanbieters"
msgid "Set {placeholderForEmptyCell}"
msgstr "{placeholderForEmptyCell} festlegen"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Legen Sie eine Standardrolle für diesen Arbeitsbereich fest"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} από {totalCount} στα {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} ημέρα} other {{days} ημέρες}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Διεύθυνση 1"
msgid "Address 2"
msgstr "Διεύθυνση 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Ρυθμίστε τις ρυθμίσεις που σχετίζονται με τον ρόλο"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Ανατίθεται {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Ανατεθειμένο σε"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Προεπιλεγμένος Κωδικός Χώρας"
msgid "Default palette"
msgstr "Προεπιλεγμένη παλέτα"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Προεπιλεγμένος Ρόλος"
@@ -9782,7 +9799,6 @@ msgstr "Προαιρετικό μυστικό που χρησιμοποιείτ
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "ρόλος"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Λεπτομέρειες Παρόχου Υπηρεσίας"
msgid "Set {placeholderForEmptyCell}"
msgstr "Ορίστε {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Ορίστε έναν προεπιλεγμένο ρόλο για αυτόν τον χώρο εργασίας"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -207,6 +207,11 @@ msgstr "{currentRank} of {totalCount} in {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} day} other {{days} days}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr "{daysLeft} days"
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -463,6 +468,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr "1 day"
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1134,11 +1144,6 @@ msgstr "Address 1"
msgid "Address 2"
msgstr "Address 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Adjust the role-related settings"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1957,6 +1962,11 @@ msgstr "Assigned {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Assigned to"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4082,8 +4092,15 @@ msgstr "Default Country Code"
msgid "Default palette"
msgstr "Default palette"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr "Default role"
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Default Role"
@@ -9777,7 +9794,6 @@ msgstr "Optional secret used to compute the HMAC signature for webhook payloads"
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11083,6 +11099,7 @@ msgid "role"
msgstr "role"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11907,10 +11924,10 @@ msgstr "Service Provider Details"
msgid "Set {placeholderForEmptyCell}"
msgstr "Set {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Set a default role for this workspace"
msgid "Set a default for this workspace"
msgstr "Set a default for this workspace"
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} de {totalCount} en {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} día} other {{days} días}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Dirección 1"
msgid "Address 2"
msgstr "Dirección 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Ajusta la configuración relacionada con el rol"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Asignado {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Asignado a"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Código de país predeterminado"
msgid "Default palette"
msgstr "Paleta predeterminada"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Rol predeterminado"
@@ -9782,7 +9799,6 @@ msgstr "Secreto opcional utilizado para calcular la firma HMAC de los datos del
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rol"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Detalles del Proveedor de Servicios"
msgid "Set {placeholderForEmptyCell}"
msgstr "Establecer {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Configurar un rol predeterminado para este espacio de trabajo"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} / {totalCount} joukossa {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} päivä} other {{days} päivää}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Osoite 1"
msgid "Address 2"
msgstr "Osoite 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Säädä rooliin liittyviä asetuksia"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Määritetty {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Määrätty henkilölle"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Oletusmaakoodi"
msgid "Default palette"
msgstr "Oletuspaletti"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Oletusrooli"
@@ -9782,7 +9799,6 @@ msgstr "Vaihtoehtoinen salaisuus, jota käytetään HMAC-allekirjoituksen laskem
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rooli"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Palveluntarjoajan Tiedot"
msgid "Set {placeholderForEmptyCell}"
msgstr "Aseta {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Aseta oletusrooli tälle työtilalle"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} sur {totalCount} dans {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} jour} other {{days} jours}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adresse 1"
msgid "Address 2"
msgstr "Adresse 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Ajuster les paramètres liés au rôle"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Assigné {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Attribué à"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Code du pays par défaut"
msgid "Default palette"
msgstr "Palette par défaut"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Rôle par défaut"
@@ -9782,7 +9799,6 @@ msgstr "Secret facultatif utilisé pour calculer la signature HMAC des charges u
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rôle"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Détails du fournisseur de services"
msgid "Set {placeholderForEmptyCell}"
msgstr "Définir {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Définir un rôle par défaut pour cet espace de travail"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} מתוך {totalCount} ב{objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} יום} two {{days} ימים} many {{days} ימים} other {{days} ימים}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "כתובת 1"
msgid "Address 2"
msgstr "כתובת 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "התאם את ההגדרות הקשורות לתפקיד"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "ניתן להקצות את {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "מוקצה ל"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "קוד מדינה ברירת מחדל"
msgid "Default palette"
msgstr "פלטת ברירת המחדל"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "תפקיד ברירת מחדל"
@@ -9782,7 +9799,6 @@ msgstr "סוד אופציונלי המשמש לחישוב חתימת HMAC עבו
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "תפקיד"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "פרטי ספק השירות"
msgid "Set {placeholderForEmptyCell}"
msgstr "הגדר {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "קבע תפקיד ברירת מחדל למרחב העבודה הזה"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank}/{totalCount} a(z) {objectLabelPlural} között"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} nap} other {{days} napok}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Cím 1"
msgid "Address 2"
msgstr "Cím 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Állítsa be a szerepkörhöz kapcsolódó beállításokat"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Hozzárendelve {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Hozzárendelve"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Alapértelmezett országkód"
msgid "Default palette"
msgstr "Alapértelmezett paletta"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Alapértelmezett szerep"
@@ -9782,7 +9799,6 @@ msgstr "Opcionális titok az HMAC aláírás kiszámításához a webhook terhel
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "szerepkör"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Szolgáltatói adatok"
msgid "Set {placeholderForEmptyCell}"
msgstr "Állítsa be: {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Állítson be egy alapértelmezett szerepkört ehhez a munkaterülethez"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} di {totalCount} in {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} giorno} other {{days} giorni}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Indirizzo 1"
msgid "Address 2"
msgstr "Indirizzo 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Regola le impostazioni relative al ruolo"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Assegnato {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Assegnato a"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Prefisso internazionale predefinito"
msgid "Default palette"
msgstr "Tavolozza predefinita"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Ruolo predefinito"
@@ -9782,7 +9799,6 @@ msgstr "Segreto opzionale usato per calcolare la firma HMAC per i payload dei we
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "ruolo"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Dettagli del service provider"
msgid "Set {placeholderForEmptyCell}"
msgstr "Imposta {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Imposta un ruolo predefinito per questo spazio di lavoro"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{objectLabelPlural} の {totalCount} 件中 {currentRank}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, other {{days} 日}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "住所 1"
msgid "Address 2"
msgstr "住所 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "役割に関連した設定を調整する"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "{roleTargetDisplayName}を割り当て済み"
msgid "Assigned to"
msgstr "担当"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "デフォルトの国コード"
msgid "Default palette"
msgstr "デフォルトのパレット"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "デフォルト役割"
@@ -9782,7 +9799,6 @@ msgstr "Webhookペイロード用HMAC署名の計算に使用するオプショ
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "役割"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "サービスプロバイダーの詳細"
msgid "Set {placeholderForEmptyCell}"
msgstr "{placeholderForEmptyCell} を設定"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "このワークスペースのデフォルトロールを設定する"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{objectLabelPlural}에서 {totalCount}개 중 {currentRank}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, other {{days}일}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "주소 1"
msgid "Address 2"
msgstr "주소 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "역할 관련 설정 조정"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "{roleTargetDisplayName} 할당됨"
msgid "Assigned to"
msgstr "할당됨"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "기본 국가 코드"
msgid "Default palette"
msgstr "기본 팔레트"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "기본 역할"
@@ -9782,7 +9799,6 @@ msgstr "Webhook 페이로드에 대한 HMAC 서명을 계산하는 데 사용되
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "역할"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "서비스 공급자 세부 정보"
msgid "Set {placeholderForEmptyCell}"
msgstr "{placeholderForEmptyCell} 설정"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "이 작업 공간의 기본 역할 설정"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} van {totalCount} in {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} dag} other {{days} dagen}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adres 1"
msgid "Address 2"
msgstr "Adres 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Pas de rolgerelateerde instellingen aan"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Toegewezen {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Toegewezen aan"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Standaard landcode"
msgid "Default palette"
msgstr "Standaardpalet"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Standaardrol"
@@ -9782,7 +9799,6 @@ msgstr "Optioneel geheim gebruikt om de HMAC-handtekening voor webhook-payloads
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rol"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Serviceprovidergegevens"
msgid "Set {placeholderForEmptyCell}"
msgstr "Stel {placeholderForEmptyCell} in"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Stel een standaardrol in voor deze werkruimte"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} av {totalCount} i {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} dag} other {{days} dager}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adresse 1"
msgid "Address 2"
msgstr "Adresse 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Juster innstillingen relatert til rollen"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Tildelt {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Tilordnet til"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Standardlandkode"
msgid "Default palette"
msgstr "Standardpalett"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Standardrolle"
@@ -9782,7 +9799,6 @@ msgstr "Valgfri hemmelighet brukt for å beregne HMAC-signaturen for webhook-pay
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rolle"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Tjenesteyterens detaljopplysninger"
msgid "Set {placeholderForEmptyCell}"
msgstr "Angi {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Angi en standardrolle for dette arbeidsområdet"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} z {totalCount} w {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} dzień} few {{days} dni} many {{days} dni} other {{days} dni}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adres 1"
msgid "Address 2"
msgstr "Adres 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Dostosuj ustawienia związane z rolą"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Przypisano {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Przypisane do"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Domyślny kod kraju"
msgid "Default palette"
msgstr "Domyślna paleta"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Domyślna rola"
@@ -9782,7 +9799,6 @@ msgstr "Opcjonalny sekret używany do obliczenia sygnatury HMAC dla ładunków w
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rola"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Szczegóły dostawcy usług"
msgid "Set {placeholderForEmptyCell}"
msgstr "Ustaw {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Ustaw domyślną rolę dla tego miejsca pracy"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+25 -8
View File
@@ -207,6 +207,11 @@ msgstr ""
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr ""
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -463,6 +468,11 @@ msgstr ""
msgid "0 */1 * * *"
msgstr ""
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1134,11 +1144,6 @@ msgstr ""
msgid "Address 2"
msgstr ""
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr ""
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1957,6 +1962,11 @@ msgstr ""
msgid "Assigned to"
msgstr ""
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4082,8 +4092,15 @@ msgstr ""
msgid "Default palette"
msgstr ""
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr ""
@@ -9777,7 +9794,6 @@ msgstr ""
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11083,6 +11099,7 @@ msgid "role"
msgstr ""
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11907,9 +11924,9 @@ msgstr ""
msgid "Set {placeholderForEmptyCell}"
msgstr ""
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} de {totalCount} em {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} dia} other {{days} dias}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Endereço 1"
msgid "Address 2"
msgstr "Endereço 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Ajustar as configurações relacionadas ao papel"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "{roleTargetDisplayName} atribuído"
msgid "Assigned to"
msgstr "Atribuído a"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Código do País Padrão"
msgid "Default palette"
msgstr "Paleta Padrão"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Função Padrão"
@@ -9782,7 +9799,6 @@ msgstr "Segredo opcional usado para computar a assinatura HMAC para os payloads
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "função"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Detalhes do Provedor de Serviço"
msgid "Set {placeholderForEmptyCell}"
msgstr "Definir {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Defina uma função padrão para este espaço de trabalho"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} de {totalCount} em {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} dia} other {{days} dias}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Endereço 1"
msgid "Address 2"
msgstr "Endereço 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Ajustar as configurações relacionadas ao papel"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Atribuído {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Atribuído a"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Código de país padrão"
msgid "Default palette"
msgstr "Paleta padrão"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Função padrão"
@@ -9782,7 +9799,6 @@ msgstr "Segredo opcional usado para calcular a assinatura HMAC para payloads de
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "função"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Detalhes do Provedor de Serviço"
msgid "Set {placeholderForEmptyCell}"
msgstr "Definir {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Defina um papel padrão para este espaço de trabalho"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} din {totalCount} în {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} zi} few {{days} zile} other {{days} zile}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adresă 1"
msgid "Address 2"
msgstr "Adresă 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Ajustează setările legate de rol"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Atribuit {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Asignat către"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Codul de țară implicit"
msgid "Default palette"
msgstr "Paletă implicită"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Rol implicit"
@@ -9782,7 +9799,6 @@ msgstr "Secret opțional folosit pentru a calcula semnătura HMAC pentru încăr
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rol"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Detalii Furnizor de Servicii"
msgid "Set {placeholderForEmptyCell}"
msgstr "Setează {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Setați un rol prestabilit pentru acest spațiu de lucru"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
Binary file not shown.
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} од {totalCount} у {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} дан} few {{days} дана} other {{days} дана}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Адреса 1"
msgid "Address 2"
msgstr "Адреса 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Прилагодите подешавања повезана са улогом"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Додељено {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Додељено"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Подразумевани код земље"
msgid "Default palette"
msgstr "Подразумевана палета"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Подразумевана улога"
@@ -9782,7 +9799,6 @@ msgstr "Опциони код за израчунавање HMAC потписа
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "улога"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Детаљи добављача услуга"
msgid "Set {placeholderForEmptyCell}"
msgstr "Постави {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Подесите подразумевану улогу за овај радни простор"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} av {totalCount} i {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} dag} other {{days} dagar}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adress 1"
msgid "Address 2"
msgstr "Adress 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Justera de rollrelaterade inställningarna"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Tilldelad {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Tilldelad till"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Standardlandskod"
msgid "Default palette"
msgstr "Standardpalett"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Standardroll"
@@ -9784,7 +9801,6 @@ msgstr "Valfri hemlighet som används för att beräkna HMAC-signaturen för web
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11090,6 +11106,7 @@ msgid "role"
msgstr "roll"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11916,10 +11933,10 @@ msgstr "Detaljer för tjänsteleverantör"
msgid "Set {placeholderForEmptyCell}"
msgstr "Ange {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Ange en standardroll för det här arbetsutrymmet"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{objectLabelPlural} içinde {totalCount} üzerinden {currentRank}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} gün} other {{days} günler}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Adres 1"
msgid "Address 2"
msgstr "Adres 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Rol ile ilgili ayarları ayarla"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Atanmış {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Atanan"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Varsayılan Ülke Kodu"
msgid "Default palette"
msgstr "Varsayılan palet"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Varsayılan Rol"
@@ -9782,7 +9799,6 @@ msgstr "Webhook yükleri için HMAC imzası oluşturmak için kullanılan (iste
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "rol"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Hizmet Sağlayıcı Bilgileri"
msgid "Set {placeholderForEmptyCell}"
msgstr "{placeholderForEmptyCell} ayarla"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Bu çalışma alanı için varsayılan bir rol ayarlayın"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} із {totalCount} у {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, one {{days} день} few {{days} дні} many {{days} днів} other {{days} днів}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Адреса 1"
msgid "Address 2"
msgstr "Адреса 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Налаштувати параметри, пов'язані з роллю"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Призначено {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Призначено"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Код країни за замовчуванням"
msgid "Default palette"
msgstr ""
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Роль за замовчуванням"
@@ -9782,7 +9799,6 @@ msgstr "Необов'язковий секретний ключ, що викор
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "роль"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Деталі постачальника послуг"
msgid "Set {placeholderForEmptyCell}"
msgstr "Задати {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Встановіть роль за замовчуванням для цього робочого простору"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{currentRank} trên {totalCount} trong {objectLabelPlural}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, other {{days} ngày}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "Địa chỉ 1"
msgid "Address 2"
msgstr "Địa chỉ 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "Điều chỉnh các cài đặt liên quan đến vai trò"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "Phân công {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "Được gán cho"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "Mã quốc gia mặc định"
msgid "Default palette"
msgstr "Bảng màu mặc định"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "Vai trò Mặc định"
@@ -9782,7 +9799,6 @@ msgstr "Bí mật tùy chọn dùng để tính toán chữ ký HMAC cho tải t
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "vai trò"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "Chi tiết Nhà Cung Cấp Dịch Vụ"
msgid "Set {placeholderForEmptyCell}"
msgstr "Đặt {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "Đặt một vai trò mặc định cho không gian làm việc này"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "{objectLabelPlural} 中第 {currentRank}/{totalCount}"
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, other {{days} 天}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "地址 1"
msgid "Address 2"
msgstr "地址 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "调整角色相关设置"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "分配了 {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "分配给"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "默认国家代码"
msgid "Default palette"
msgstr "默认调色板"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "默认角色"
@@ -9782,7 +9799,6 @@ msgstr "用于计算 webhook 负载的 HMAC 签名的可选密钥"
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "角色"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "服务提供商详情"
msgid "Set {placeholderForEmptyCell}"
msgstr "设置{placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "为此工作区设置一个默认角色"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
+26 -9
View File
@@ -212,6 +212,11 @@ msgstr "在 {objectLabelPlural} 中排名第 {currentRank}(共 {totalCount}
msgid "{days, plural, one {{days} day} other {{days} days}}"
msgstr "{days, plural, other {{days} 天}}"
#. js-lingui-id: Muj+po
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "{daysLeft} days"
msgstr ""
#. js-lingui-id: 0KwX9P
#. placeholder {0}: (1000).toFixed(decimals)
#. placeholder {1}: (1000).toFixed(decimals)
@@ -468,6 +473,11 @@ msgstr "0"
msgid "0 */1 * * *"
msgstr "0 */1 * * *"
#. js-lingui-id: gphxoA
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "1 day"
msgstr ""
#. js-lingui-id: tEdOxj
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
#: src/pages/settings/accounts/SettingsAccountsConfigurationStepEmail.tsx
@@ -1139,11 +1149,6 @@ msgstr "地址 1"
msgid "Address 2"
msgstr "地址 2"
#. js-lingui-id: Eis4ey
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Adjust the role-related settings"
msgstr "調整角色相關的設定"
#. js-lingui-id: U3pytU
#: src/modules/settings/members/components/MemberInfosTab.tsx
msgid "Admin"
@@ -1962,6 +1967,11 @@ msgstr "指派 {roleTargetDisplayName}"
msgid "Assigned to"
msgstr "分配給"
#. js-lingui-id: TzM/0+
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Assigned to users who join via invite link, approved domain, or SSO, and used as fallback when an assigned role is deleted"
msgstr ""
#. js-lingui-id: 0dtKl9
#: src/modules/settings/roles/role/components/SettingsRole.tsx
msgid "Assignment"
@@ -4087,8 +4097,15 @@ msgstr "默認國際冠碼"
msgid "Default palette"
msgstr "預設調色盤"
#. js-lingui-id: v41VX6
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/modules/workspace/components/WorkspaceInviteTeam.tsx
msgid "Default role"
msgstr ""
#. js-lingui-id: CGhRMh
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Default Role"
msgstr "預設角色"
@@ -9782,7 +9799,6 @@ msgstr "用於計算Webhook有效負載的HMAC簽名的可選密鑰"
#. js-lingui-id: 0zpgxV
#: src/modules/ui/layout/dropdown/components/OptionsDropdownMenu.tsx
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableFilterDropdown.tsx
@@ -11088,6 +11104,7 @@ msgid "role"
msgstr "角色"
#. js-lingui-id: GDvlUT
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
@@ -11912,10 +11929,10 @@ msgstr "服務提供者詳細信息"
msgid "Set {placeholderForEmptyCell}"
msgstr "設定 {placeholderForEmptyCell}"
#. js-lingui-id: YZwx1e
#. js-lingui-id: QEVmIH
#: src/modules/settings/roles/components/SettingsRolesDefaultRole.tsx
msgid "Set a default role for this workspace"
msgstr "設定此工作區的預設角色"
msgid "Set a default for this workspace"
msgstr ""
#. js-lingui-id: PPcets
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
@@ -4,14 +4,9 @@ import { useOpenRecordInCommandMenu } from '@/command-menu/hooks/useOpenRecordIn
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { type FieldMetadataItemRelation } from '@/object-metadata/types/FieldMetadataItemRelation';
import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem';
import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord';
import { useRecordTitleCell } from '@/object-record/record-title-cell/hooks/useRecordTitleCell';
import { RecordTitleCellContainerType } from '@/object-record/record-title-cell/types/RecordTitleCellContainerType';
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
import { getForeignKeyNameFromRelationFieldName } from '@/object-record/utils/getForeignKeyNameFromRelationFieldName';
import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId';
import { isDefined } from 'twenty-shared/utils';
interface CreateRelatedRecordActionProps {
targetFieldMetadataItemRelation: FieldMetadataItemRelation;
@@ -46,8 +41,6 @@ export const CreateRelatedRecordAction = ({
objectNameSingular: CoreObjectNameSingular.NoteTarget,
});
const { openRecordTitleCell } = useRecordTitleCell();
const targetObject =
targetObjectMetadataItem.nameSingular === CoreObjectNameSingular.TaskTarget
? taskObjectMetadataItem
@@ -99,21 +92,6 @@ export const CreateRelatedRecordAction = ({
objectNameSingular: targetObject.nameSingular,
isNewRecord: true,
});
const labelIdentifierFieldMetadataItem =
getLabelIdentifierFieldMetadataItem(targetObject);
if (isDefined(labelIdentifierFieldMetadataItem)) {
openRecordTitleCell({
recordId: createdRecord.id,
fieldMetadataItemId: labelIdentifierFieldMetadataItem.id,
instanceId: getRecordFieldInputInstanceId({
recordId: createdRecord.id,
fieldName: labelIdentifierFieldMetadataItem.name,
prefix: RecordTitleCellContainerType.ShowPage,
}),
});
}
};
return (
@@ -2,6 +2,7 @@ import { ActionMenuComponentInstanceContext } from '@/action-menu/states/context
import { getRightDrawerActionMenuDropdownIdFromActionMenuId } from '@/action-menu/utils/getRightDrawerActionMenuDropdownIdFromActionMenuId';
import { SIDE_PANEL_FOCUS_ID } from '@/command-menu/constants/SidePanelFocusId';
import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu';
import { commandMenuNavigationStackState } from '@/command-menu/states/commandMenuNavigationStackState';
import { CommandMenuPageComponentInstanceContext } from '@/command-menu/states/contexts/CommandMenuPageComponentInstanceContext';
import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId';
import { contextStoreRecordShowParentViewComponentState } from '@/context-store/states/contextStoreRecordShowParentViewComponentState';
@@ -16,9 +17,9 @@ import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/com
import { useComponentInstanceStateContext } from '@/ui/utilities/state/component-state/hooks/useComponentInstanceStateContext';
import { useAtomComponentStateCallbackState } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateCallbackState';
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue';
import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState';
import { t } from '@lingui/core/macro';
import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue';
import { useStore } from 'jotai';
import { useCallback } from 'react';
import { AppPath } from 'twenty-shared/types';
@@ -94,10 +95,15 @@ export const RecordShowRightDrawerOpenRecordButton = ({
const parentView = store.get(parentViewState);
if (parentView?.parentViewObjectNameSingular !== objectNameSingular) {
if (
isDefined(parentView) &&
parentView.parentViewObjectNameSingular !== objectNameSingular
) {
store.set(parentViewState, undefined);
}
store.set(commandMenuNavigationStackState.atom, []);
navigate(AppPath.RecordShowPage, {
objectNameSingular,
objectRecordId: recordId,
@@ -1,4 +1,4 @@
import { css, useTheme } from '@emotion/react';
import { css } from '@emotion/react';
import styled from '@emotion/styled';
import { useLingui } from '@lingui/react/macro';
import { useCallback, useState } from 'react';
@@ -25,7 +25,13 @@ import { useIsRecordReadOnly } from '@/object-record/read-only/hooks/useIsRecord
import { isRecordFieldReadOnly } from '@/object-record/read-only/utils/isRecordFieldReadOnly';
import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId';
import { isDefined } from 'twenty-shared/utils';
import { Chip, ChipAccent, ChipSize, ChipVariant } from 'twenty-ui/components';
import {
AvatarOrIcon,
Chip,
ChipAccent,
ChipSize,
ChipVariant,
} from 'twenty-ui/components';
import { IconCalendarEvent } from 'twenty-ui/display';
import { beautifyPastDateRelativeToNow } from '~/utils/date-utils';
@@ -88,7 +94,6 @@ export const CalendarEventDetails = ({
calendarEvent,
}: CalendarEventDetailsProps) => {
const { t } = useLingui();
const theme = useTheme();
const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular: CoreObjectNameSingular.CalendarEvent,
});
@@ -202,7 +207,7 @@ export const CalendarEventDetails = ({
size={ChipSize.Large}
variant={ChipVariant.Highlighted}
clickable={false}
leftComponent={<IconCalendarEvent size={theme.icon.size.md} />}
leftComponent={<AvatarOrIcon Icon={IconCalendarEvent} />}
label={t`Event`}
/>
<StyledHeader>
@@ -2,8 +2,9 @@ import { ImageBubbleMenu } from '@/advanced-text-editor/components/ImageBubbleMe
import { LinkBubbleMenu } from '@/advanced-text-editor/components/LinkBubbleMenu';
import { TextBubbleMenu } from '@/advanced-text-editor/components/TextBubbleMenu';
import { FORM_FIELD_PLACEHOLDER_STYLES } from '@/object-record/record-field/ui/form-types/constants/FormFieldPlaceholderStyles';
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { EditorContent, type Editor } from '@tiptap/react';
import { themeCssVariables } from 'twenty-ui/theme-constants';
const StyledEditorContainer = styled.div<{
readonly?: boolean;
@@ -24,14 +25,16 @@ const StyledEditorContainer = styled.div<{
}
.tiptap {
padding: ${({ theme }) => `${theme.spacing(1)} ${theme.spacing(2)}`};
padding: ${themeCssVariables.spacing[1]} ${themeCssVariables.spacing[2]};
box-sizing: border-box;
height: 100%;
color: ${({ theme, readonly }) =>
readonly ? theme.font.color.light : theme.font.color.primary};
font-family: ${({ theme }) => theme.font.family};
font-size: ${({ theme }) => theme.font.size.sm};
font-weight: ${({ theme }) => theme.font.weight.regular};
color: ${({ readonly }) =>
readonly
? themeCssVariables.font.color.light
: themeCssVariables.font.color.primary};
font-family: ${themeCssVariables.font.family};
font-size: ${themeCssVariables.font.size.sm};
font-weight: ${themeCssVariables.font.weight.regular};
border: none !important;
p.is-editor-empty:first-of-type::before {
@@ -48,10 +51,10 @@ const StyledEditorContainer = styled.div<{
}
.variable-tag {
background-color: ${({ theme }) => theme.color.blue3};
border-radius: ${({ theme }) => theme.border.radius.sm};
color: ${({ theme }) => theme.color.blue};
padding: ${({ theme }) => theme.spacing(1)};
background-color: ${themeCssVariables.color.blue3};
border-radius: ${themeCssVariables.border.radius.sm};
color: ${themeCssVariables.color.blue};
padding: ${themeCssVariables.spacing[1]};
}
h1 {
@@ -67,7 +70,7 @@ const StyledEditorContainer = styled.div<{
}
li {
margin-bottom: ${({ theme }) => theme.spacing(2)};
margin-bottom: ${themeCssVariables.spacing[2]};
line-height: 1.5;
}
}
@@ -1,7 +1,8 @@
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import React from 'react';
import type { IconComponent } from 'twenty-ui/display';
import { FloatingIconButton } from 'twenty-ui/input';
import { themeCssVariables } from 'twenty-ui/theme-constants';
type BubbleMenuIconButtonProps = {
className?: string;
@@ -14,9 +15,9 @@ type BubbleMenuIconButtonProps = {
const StyledBubbleMenuIconButton = styled(FloatingIconButton)`
border: none;
border-radius: ${({ theme }) => theme.spacing(1.5)};
width: ${({ theme }) => theme.spacing(6)};
height: ${({ theme }) => theme.spacing(6)};
border-radius: ${themeCssVariables.spacing[1.5]};
width: ${themeCssVariables.spacing[6]};
height: ${themeCssVariables.spacing[6]};
`;
export const BubbleMenuIconButton = ({
@@ -3,7 +3,7 @@ import { EditLinkPopover } from '@/advanced-text-editor/components/EditLinkPopov
import { TurnIntoBlockDropdown } from '@/advanced-text-editor/components/TurnIntoBlockDropdown';
import { useTextBubbleState } from '@/advanced-text-editor/hooks/useTextBubbleState';
import { isTextSelected } from '@/advanced-text-editor/utils/isTextSelected';
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { type Editor } from '@tiptap/core';
import { BubbleMenu } from '@tiptap/react/menus';
import {
@@ -14,13 +14,15 @@ import {
IconStrikethrough,
IconUnderline,
} from 'twenty-ui/display';
import { themeCssVariables } from 'twenty-ui/theme-constants';
export const StyledBubbleMenuContainer = styled.div`
backdrop-filter: blur(20px);
background-color: ${({ theme }) => theme.background.primary};
border-radius: ${({ theme }) => theme.border.radius.md};
box-shadow: ${({ theme }) =>
`0px 2px 4px 0px ${theme.background.transparent.light}, 0px 0px 4px 0px ${theme.background.transparent.medium}`};
background-color: ${themeCssVariables.background.primary};
border-radius: ${themeCssVariables.border.radius.md};
box-shadow:
0px 2px 4px 0px ${themeCssVariables.background.transparent.light},
0px 0px 4px 0px ${themeCssVariables.background.transparent.medium};
display: inline-flex;
gap: 2px;
padding: 2px;
@@ -3,32 +3,33 @@ import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
import { useToggleDropdown } from '@/ui/layout/dropdown/hooks/useToggleDropdown';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { t } from '@lingui/core/macro';
import { type Editor } from '@tiptap/react';
import { useId } from 'react';
import { useContext, useId } from 'react';
import { IconPilcrow } from 'twenty-ui/display';
import { MenuItem } from 'twenty-ui/navigation';
import { ThemeContext } from 'twenty-ui/theme';
import { themeCssVariables } from 'twenty-ui/theme-constants';
const StyledMenuItem = styled.button`
align-items: center;
background: none;
border: none;
color: ${({ theme }) => theme.font.color.tertiary};
color: ${themeCssVariables.font.color.tertiary};
cursor: pointer;
display: flex;
font-size: ${({ theme }) => theme.font.size.sm};
font-weight: ${({ theme }) => theme.font.weight.regular};
font-size: ${themeCssVariables.font.size.sm};
font-weight: ${themeCssVariables.font.weight.regular};
gap: 4px;
height: ${({ theme }) => theme.spacing(6)};
height: ${themeCssVariables.spacing[6]};
padding: 0;
width: 100%;
padding: 0 ${({ theme }) => theme.spacing(1.5)};
border-radius: ${({ theme }) => theme.spacing(1.5)};
padding: 0 ${themeCssVariables.spacing[1.5]};
border-radius: ${themeCssVariables.spacing[1.5]};
:hover {
background: ${({ theme }) => theme.background.transparent.medium};
background: ${themeCssVariables.background.transparent.medium};
}
:focus {
@@ -43,7 +44,7 @@ type TurnIntoBlockDropdownProps = {
export const TurnIntoBlockDropdown = ({
editor,
}: TurnIntoBlockDropdownProps) => {
const theme = useTheme();
const { theme } = useContext(ThemeContext);
const instanceId = useId();
const dropdownId = `turn-into-block-dropdown-${instanceId}`;
@@ -1,11 +1,13 @@
import { getFileType } from '@/activities/files/utils/getFileType';
import { useFileCategoryColors } from '@/file/hooks/useFileCategoryColors';
import { IconMapping } from '@/file/utils/fileIconMappings';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { useContext } from 'react';
import { type WorkflowAttachment } from 'twenty-shared/workflow';
import { AvatarChip } from 'twenty-ui/components';
import { AvatarOrIcon } from 'twenty-ui/components';
import { IconX } from 'twenty-ui/display';
import { ThemeContext } from 'twenty-ui/theme';
import { themeCssVariables } from 'twenty-ui/theme-constants';
type WorkflowAttachmentChipProps = {
file: WorkflowAttachment;
@@ -15,20 +17,20 @@ type WorkflowAttachmentChipProps = {
const StyledChip = styled.div<{ deletable: boolean }>`
align-items: center;
background-color: ${({ theme }) => theme.background.transparent.light};
border: 1px solid ${({ theme }) => theme.border.color.medium};
border-radius: ${({ theme }) => theme.border.radius.sm};
column-gap: ${({ theme }) => theme.spacing(1)};
background-color: ${themeCssVariables.background.transparent.light};
border: 1px solid ${themeCssVariables.border.color.medium};
border-radius: ${themeCssVariables.border.radius.sm};
column-gap: ${themeCssVariables.spacing[1]};
display: inline-flex;
flex-direction: row;
flex-shrink: 0;
max-width: 140px;
padding-left: ${({ theme }) => theme.spacing(1)};
padding-left: ${themeCssVariables.spacing[1]};
`;
const StyledLabel = styled.span`
color: ${({ theme }) => theme.font.color.primary};
font-size: ${({ theme }) => theme.font.size.sm};
color: ${themeCssVariables.font.color.primary};
font-size: ${themeCssVariables.font.size.sm};
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@@ -43,18 +45,18 @@ const StyledDelete = styled.button`
margin: 0;
padding: 0;
cursor: pointer;
font-size: ${({ theme }) => theme.font.size.sm};
font-size: ${themeCssVariables.font.size.sm};
user-select: none;
flex-shrink: 0;
background: none;
border: none;
color: ${({ theme }) => theme.font.color.tertiary};
border-top-right-radius: ${({ theme }) => theme.border.radius.sm};
border-bottom-right-radius: ${({ theme }) => theme.border.radius.sm};
color: ${themeCssVariables.font.color.tertiary};
border-top-right-radius: ${themeCssVariables.border.radius.sm};
border-bottom-right-radius: ${themeCssVariables.border.radius.sm};
&:hover {
background-color: ${({ theme }) => theme.background.transparent.medium};
color: ${({ theme }) => theme.font.color.primary};
background-color: ${themeCssVariables.background.transparent.medium};
color: ${themeCssVariables.font.color.primary};
}
`;
@@ -64,11 +66,11 @@ export const WorkflowAttachmentChip = ({
readonly = false,
}: WorkflowAttachmentChipProps) => {
const iconColors = useFileCategoryColors();
const theme = useTheme();
const { theme } = useContext(ThemeContext);
return (
<StyledChip data-chip deletable={!readonly}>
<AvatarChip
<AvatarOrIcon
Icon={IconMapping[getFileType(file.name)]}
IconBackgroundColor={iconColors[getFileType(file.name)]}
/>
@@ -2,13 +2,14 @@ import { WorkflowAttachmentChip } from '@/advanced-text-editor/components/Workfl
import { useUploadWorkflowFile } from '@/advanced-text-editor/hooks/useUploadWorkflowFile';
import { InputLabel } from '@/ui/input/components/InputLabel';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { useLingui } from '@lingui/react/macro';
import { type ChangeEvent, useRef } from 'react';
import { type ChangeEvent, useContext, useRef } from 'react';
import { isDefined } from 'twenty-shared/utils';
import { type WorkflowAttachment } from 'twenty-shared/workflow';
import { IconUpload } from 'twenty-ui/display';
import { ThemeContext } from 'twenty-ui/theme';
import { themeCssVariables } from 'twenty-ui/theme-constants';
type WorkflowSendEmailAttachmentsProps = {
files: WorkflowAttachment[];
@@ -26,21 +27,21 @@ const StyledFileInput = styled.input`
`;
const StyledUploadArea = styled.div<{ hasFiles: boolean }>`
background-color: ${({ theme }) => theme.background.transparent.lighter};
border: 1px solid ${({ theme }) => theme.border.color.medium};
border-radius: ${({ theme }) => theme.border.radius.sm};
background-color: ${themeCssVariables.background.transparent.lighter};
border: 1px solid ${themeCssVariables.border.color.medium};
border-radius: ${themeCssVariables.border.radius.sm};
display: flex;
flex-direction: column;
min-height: ${({ hasFiles }) => (hasFiles ? 'auto' : '24px')};
justify-content: center;
padding-top: ${({ theme }) => theme.spacing(1)};
padding-bottom: ${({ theme }) => theme.spacing(1)};
padding-left: ${({ theme }) => theme.spacing(2)};
padding-right: ${({ theme }) => theme.spacing(2)};
padding-top: ${themeCssVariables.spacing[1]};
padding-bottom: ${themeCssVariables.spacing[1]};
padding-left: ${themeCssVariables.spacing[2]};
padding-right: ${themeCssVariables.spacing[2]};
&:hover {
background-color: ${({ theme }) => theme.background.transparent.light};
border-color: ${({ theme }) => theme.border.color.strong};
background-color: ${themeCssVariables.background.transparent.light};
border-color: ${themeCssVariables.border.color.strong};
}
`;
@@ -48,17 +49,17 @@ const StyledChipsContainer = styled.div`
display: flex;
flex-direction: row;
flex-wrap: wrap;
gap: ${({ theme }) => theme.spacing(1)};
gap: ${themeCssVariables.spacing[1]};
`;
const StyledUploadAreaLabel = styled.div`
justify-content: center;
color: ${({ theme }) => theme.font.color.tertiary};
color: ${themeCssVariables.font.color.tertiary};
display: flex;
font-size: ${({ theme }) => theme.font.size.sm};
font-weight: ${({ theme }) => theme.font.weight.medium};
color: ${({ theme }) => theme.font.color.secondary};
gap: ${({ theme }) => theme.spacing(1)};
font-size: ${themeCssVariables.font.size.sm};
font-weight: ${themeCssVariables.font.weight.medium};
color: ${themeCssVariables.font.color.secondary};
gap: ${themeCssVariables.spacing[1]};
`;
export const WorkflowSendEmailAttachments = ({
@@ -69,7 +70,7 @@ export const WorkflowSendEmailAttachments = ({
const fileInputRef = useRef<HTMLInputElement>(null);
const { uploadWorkflowFile } = useUploadWorkflowFile();
const { t } = useLingui();
const theme = useTheme();
const { theme } = useContext(ThemeContext);
const handleAddFileClick = (e: React.MouseEvent) => {
const target = e.target as HTMLElement;
@@ -1,29 +1,26 @@
import { css } from '@emotion/react';
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { type NodeViewProps, NodeViewWrapper } from '@tiptap/react';
import React, { useCallback, useRef, useState } from 'react';
import { isDefined } from 'twenty-shared/utils';
import { themeCssVariables } from 'twenty-ui/theme-constants';
const IMAGE_MIN_WIDTH = 32;
const IMAGE_MAX_WIDTH = 600;
const StyledNodeViewWrapper = styled(NodeViewWrapper)`
const StyledNodeViewWrapperContainer = styled.div<{
align?: string;
}>`
height: 100%;
${({ align }) => {
switch (align) {
case 'left':
return css`
margin-left: 0;
`;
return 'margin-left: 0;';
case 'right':
return css`
margin-right: 0;
`;
return 'margin-right: 0;';
case 'center':
return css`
margin-left: auto;
margin-right: auto;
`;
return 'margin-left: auto; margin-right: auto;';
default:
return '';
}
}}
`;
@@ -43,28 +40,21 @@ const StyledImage = styled.img`
`;
const StyledImageHandle = styled.div<{ handle: 'left' | 'right' }>`
border-radius: ${({ theme }) => theme.border.radius.md};
background-color: ${({ theme }) => theme.background.primaryInverted};
border: 1px solid ${({ theme }) => theme.background.primary};
border-radius: ${themeCssVariables.border.radius.md};
background-color: ${themeCssVariables.background.primaryInverted};
border: 1px solid ${themeCssVariables.background.primary};
cursor: col-resize;
height: ${({ theme }) => theme.spacing(8)};
height: ${themeCssVariables.spacing[8]};
position: absolute;
top: 50%;
transform: translateY(-50%);
width: ${({ theme }) => theme.spacing(2)};
width: ${themeCssVariables.spacing[2]};
z-index: 1;
${({ handle, theme }) => {
if (handle === 'left') {
return css`
left: ${theme.spacing(1)};
`;
}
return css`
right: ${theme.spacing(1)};
`;
}}
${({ handle }) =>
handle === 'left'
? `left: ${themeCssVariables.spacing[1]};`
: `right: ${themeCssVariables.spacing[1]};`}
`;
type ResizeParams = {
@@ -179,37 +169,38 @@ export const ResizableImageView = (props: ResizableImageViewProps) => {
}, []);
return (
<StyledNodeViewWrapper
onMouseEnter={handleImageHover}
onMouseLeave={handleImageHoverEnd}
align={align}
>
<StyledImageWrapper
ref={imageWrapperRef}
style={{ width: width ? `${width}px` : 'fit-content' }}
<NodeViewWrapper>
<StyledNodeViewWrapperContainer
onMouseEnter={handleImageHover}
onMouseLeave={handleImageHoverEnd}
align={align}
>
<StyledImageContainer>
<StyledImage
src={src}
alt={alt}
draggable={false}
contentEditable={false}
/>
{/* Show resize handles when hovering over image OR actively resizing */}
{(isHovering || isDefined(resizeParams)) && (
<>
<StyledImageHandle
handle="left"
onMouseDown={(e) => handleImageHandleMouseDown('left', e)}
/>
<StyledImageHandle
handle="right"
onMouseDown={(e) => handleImageHandleMouseDown('right', e)}
/>
</>
)}
</StyledImageContainer>
</StyledImageWrapper>
</StyledNodeViewWrapper>
<StyledImageWrapper
ref={imageWrapperRef}
style={{ width: width ? `${width}px` : 'fit-content' }}
>
<StyledImageContainer>
<StyledImage
src={src}
alt={alt}
draggable={false}
contentEditable={false}
/>
{(isHovering || isDefined(resizeParams)) && (
<>
<StyledImageHandle
handle="left"
onMouseDown={(e) => handleImageHandleMouseDown('left', e)}
/>
<StyledImageHandle
handle="right"
onMouseDown={(e) => handleImageHandleMouseDown('right', e)}
/>
</>
)}
</StyledImageContainer>
</StyledImageWrapper>
</StyledNodeViewWrapperContainer>
</NodeViewWrapper>
);
};
@@ -2,7 +2,7 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadata
import { getLinkToShowPage } from '@/object-metadata/utils/getLinkToShowPage';
import { t } from '@lingui/core/macro';
import { isNonEmptyString } from '@sniptt/guards';
import { AvatarChip, ChipVariant, LinkChip } from 'twenty-ui/components';
import { AvatarOrIcon, ChipVariant, LinkChip } from 'twenty-ui/components';
type RecordLinkProps = {
objectNameSingular: string;
@@ -34,7 +34,7 @@ export const RecordLink = ({
to={linkToShowPage}
variant={ChipVariant.Highlighted}
leftComponent={
<AvatarChip
<AvatarOrIcon
placeholder={displayName}
placeholderColorSeed={recordId}
avatarType="rounded"
@@ -6,7 +6,12 @@ import { useTheme } from '@emotion/react';
import { t } from '@lingui/core/macro';
import { type FileUIPart } from 'ai';
import { isDefined } from 'twenty-shared/utils';
import { AvatarChip, Chip, ChipVariant, LinkChip } from 'twenty-ui/components';
import {
AvatarOrIcon,
Chip,
ChipVariant,
LinkChip,
} from 'twenty-ui/components';
import { type IconComponent, IconX } from 'twenty-ui/display';
import { Loader } from 'twenty-ui/feedback';
@@ -36,21 +41,22 @@ export const AgentChatFilePreview = ({
const leftComponent = isUploading ? (
<Loader color="yellow" />
) : (
<AvatarChip
<AvatarOrIcon
Icon={FileCategoryIcon}
IconBackgroundColor={iconBackgroundColor}
/>
);
const rightComponent = onRemove ? (
<AvatarChip
<AvatarOrIcon
Icon={IconX}
IconColor={theme.font.color.secondary}
onClick={onRemove}
divider="left"
/>
) : undefined;
const hasRightDivider = isDefined(onRemove);
if (isDefined(fileUrl)) {
return (
<LinkChip
@@ -61,6 +67,7 @@ export const AgentChatFilePreview = ({
target="_blank"
leftComponent={leftComponent}
rightComponent={rightComponent}
rightComponentDivider={hasRightDivider}
/>
);
}
@@ -73,6 +80,7 @@ export const AgentChatFilePreview = ({
clickable={false}
leftComponent={leftComponent}
rightComponent={rightComponent}
rightComponentDivider={hasRightDivider}
/>
);
};
@@ -7,7 +7,8 @@ import { currentUserState } from '@/auth/states/currentUserState';
import { currentUserWorkspaceState } from '@/auth/states/currentUserWorkspaceState';
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
import { previousUrlState } from '@/auth/states/previousUrlState';
import { returnToPathState } from '@/auth/states/returnToPathState';
import { isValidReturnToPath } from '@/auth/utils/isValidReturnToPath';
import { tokenPairState } from '@/auth/states/tokenPairState';
import { appVersionState } from '@/client-config/states/appVersionState';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
@@ -36,7 +37,7 @@ export const useApolloFactory = (options: Partial<Options<any>> = {}) => {
const setCurrentUser = useSetAtomState(currentUserState);
const setCurrentUserWorkspace = useSetAtomState(currentUserWorkspaceState);
const setPreviousUrl = useSetAtomState(previousUrlState);
const setReturnToPath = useSetAtomState(returnToPathState);
const location = useLocation();
const { enqueueErrorSnackBar } = useSnackBar();
@@ -76,7 +77,11 @@ export const useApolloFactory = (options: Partial<Options<any>> = {}) => {
!isMatchingLocation(location, AppPath.Invite) &&
!isMatchingLocation(location, AppPath.ResetPassword)
) {
setPreviousUrl(`${location.pathname}${location.search}`);
const path = `${location.pathname}${location.search}${location.hash}`;
if (isValidReturnToPath(path)) {
setReturnToPath(path);
}
navigate(AppPath.SignInUp);
}
},
@@ -109,7 +114,7 @@ export const useApolloFactory = (options: Partial<Options<any>> = {}) => {
setCurrentUser,
setCurrentWorkspaceMember,
setCurrentWorkspace,
setPreviousUrl,
setReturnToPath,
enqueueErrorSnackBar,
]);
@@ -4,16 +4,11 @@ import {
} from '@/analytics/hooks/useEventTracker';
import { useExecuteTasksOnAnyLocationChange } from '@/app/hooks/useExecuteTasksOnAnyLocationChange';
import { isAppEffectRedirectEnabledState } from '@/app/states/isAppEffectRedirectEnabledState';
import { ONBOARDING_PATHS } from '@/auth/constants/OnboardingPaths';
import { ONGOING_USER_CREATION_PATHS } from '@/auth/constants/OngoingUserCreationPaths';
import { useReturnToPath } from '@/auth/hooks/useReturnToPath';
import { useRequestFreshCaptchaToken } from '@/captcha/hooks/useRequestFreshCaptchaToken';
import { isCaptchaScriptLoadedState } from '@/captcha/states/isCaptchaScriptLoadedState';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useCallback, useEffect, useState } from 'react';
import {
matchPath,
useLocation,
useNavigate,
useParams,
} from 'react-router-dom';
import { isCaptchaRequiredForPath } from '@/captcha/utils/isCaptchaRequiredForPath';
import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu';
import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState';
@@ -35,6 +30,15 @@ import { PageFocusId } from '@/types/PageFocusId';
import { useResetFocusStackToFocusItem } from '@/ui/utilities/focus/hooks/useResetFocusStackToFocusItem';
import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType';
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useStore } from 'jotai';
import { useCallback, useEffect, useState } from 'react';
import {
matchPath,
useLocation,
useNavigate,
useParams,
} from 'react-router-dom';
import { AppBasePath, AppPath, CommandMenuPages } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { AnalyticsType } from '~/generated-metadata/graphql';
@@ -42,7 +46,12 @@ import { usePageChangeEffectNavigateLocation } from '~/hooks/usePageChangeEffect
import { useInitializeQueryParamState } from '~/modules/app/hooks/useInitializeQueryParamState';
import { isMatchingLocation } from '~/utils/isMatchingLocation';
import { getPageTitleFromPath } from '~/utils/title-utils';
import { useStore } from 'jotai';
const AUTH_AND_ONBOARDING_PATHS = [
...ONGOING_USER_CREATION_PATHS,
...ONBOARDING_PATHS,
AppPath.ResetPassword,
];
// TODO: break down into smaller functions and / or hooks
// - moved usePageChangeEffectNavigateLocation into dedicated hook
@@ -99,6 +108,13 @@ export const PageChangeEffect = () => {
const { closeCommandMenu } = useCommandMenu();
const { saveReturnToPath, getReturnToPath, clearReturnToPath } =
useReturnToPath();
const isOnAuthOrOnboardingPage = AUTH_AND_ONBOARDING_PATHS.some((appPath) =>
isMatchingLocation(location, appPath),
);
const closeCommandMenuUnlessOnEditPage = useCallback(() => {
const currentPage = store.get(commandMenuPageState.atom);
if (currentPage === CommandMenuPages.NavigationMenuItemEdit) {
@@ -133,13 +149,33 @@ export const PageChangeEffect = () => {
isDefined(pageChangeEffectNavigateLocation) &&
isAppEffectRedirectEnabled
) {
if (
pageChangeEffectNavigateLocation === AppPath.SignInUp &&
!isOnAuthOrOnboardingPage
) {
saveReturnToPath(
`${window.location.pathname}${window.location.search}${window.location.hash}`,
);
}
const consumedReturnToPath =
getReturnToPath() === pageChangeEffectNavigateLocation;
navigate(pageChangeEffectNavigateLocation);
if (consumedReturnToPath) {
clearReturnToPath();
}
}
}, [
navigate,
pageChangeEffectNavigateLocation,
initializeQueryParamState,
isAppEffectRedirectEnabled,
isOnAuthOrOnboardingPage,
saveReturnToPath,
getReturnToPath,
clearReturnToPath,
]);
useEffect(() => {
@@ -1,7 +1,9 @@
import { useCallback } from 'react';
import { billingCheckoutSessionState } from '@/auth/states/billingCheckoutSessionState';
import { returnToPathState } from '@/auth/states/returnToPathState';
import { type BillingCheckoutSession } from '@/auth/types/billingCheckoutSession.type';
import { isValidReturnToPath } from '@/auth/utils/isValidReturnToPath';
import { BILLING_CHECKOUT_SESSION_DEFAULT_VALUE } from '@/billing/constants/BillingCheckoutSessionDefaultValue';
import deepEqual from 'deep-equal';
import { useStore } from 'jotai';
@@ -9,7 +11,7 @@ import { useStore } from 'jotai';
export const useInitializeQueryParamState = () => {
const store = useStore();
const initializeQueryParamState = useCallback(() => {
const handlers = {
const handlers: Record<string, (value: string) => void> = {
billingCheckoutSession: (value: string) => {
const billingCheckoutSession = store.get(
billingCheckoutSessionState.atom,
@@ -43,6 +45,11 @@ export const useInitializeQueryParamState = () => {
);
}
},
returnToPath: (value: string) => {
if (isValidReturnToPath(value)) {
store.set(returnToPathState.atom, value);
}
},
};
const queryParams = new URLSearchParams(window.location.search);
@@ -0,0 +1,12 @@
import { AppPath } from 'twenty-shared/types';
export const ONBOARDING_PATHS = [
AppPath.CreateWorkspace,
AppPath.CreateProfile,
AppPath.SyncEmails,
AppPath.InviteTeam,
AppPath.PlanRequired,
AppPath.PlanRequiredSuccess,
AppPath.BookCallDecision,
AppPath.BookCall,
];
@@ -0,0 +1,8 @@
import { AppPath } from 'twenty-shared/types';
export const ONGOING_USER_CREATION_PATHS = [
AppPath.Invite,
AppPath.SignInUp,
AppPath.VerifyEmail,
AppPath.Verify,
];
@@ -131,6 +131,8 @@ export const useAuth = () => {
isCaptchaScriptLoadedState.atom,
);
store.set(isAppEffectRedirectEnabledState.atom, false);
sessionStorage.clear();
localStorage.clear();
@@ -158,6 +160,7 @@ export const useAuth = () => {
setLastAuthenticateWorkspaceDomain(null);
await resetToMockedMetadata();
navigate(AppPath.SignInUp);
store.set(isAppEffectRedirectEnabledState.atom, true);
}, [
client,
setLastAuthenticateWorkspaceDomain,
@@ -0,0 +1,46 @@
import { useCallback } from 'react';
import { returnToPathState } from '@/auth/states/returnToPathState';
import { isValidReturnToPath } from '@/auth/utils/isValidReturnToPath';
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
import { isNonEmptyString } from '@sniptt/guards';
import { useStore } from 'jotai';
export const useReturnToPath = () => {
const store = useStore();
const setReturnToPath = useSetAtomState(returnToPathState);
const saveReturnToPath = useCallback(
(path: string) => {
if (!isValidReturnToPath(path)) {
return;
}
setReturnToPath(path);
},
[setReturnToPath],
);
const getReturnToPath = useCallback((): string | null => {
const currentReturnToPath = store.get(returnToPathState.atom);
if (
isNonEmptyString(currentReturnToPath) &&
isValidReturnToPath(currentReturnToPath)
) {
return currentReturnToPath;
}
return null;
}, [store]);
const clearReturnToPath = useCallback(() => {
setReturnToPath('');
}, [setReturnToPath]);
return {
saveReturnToPath,
getReturnToPath,
clearReturnToPath,
};
};
@@ -1,4 +1,5 @@
import { availableWorkspacesState } from '@/auth/states/availableWorkspacesState';
import { returnToPathState } from '@/auth/states/returnToPathState';
import { useBuildWorkspaceUrl } from '@/domain-manager/hooks/useBuildWorkspaceUrl';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
@@ -29,6 +30,7 @@ import {
import { type AvailableWorkspace } from '~/generated-metadata/graphql';
import { getWorkspaceUrl } from '~/utils/getWorkspaceUrl';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { isNonEmptyString } from '@sniptt/guards';
const StyledContentContainer = styled(motion.div)`
margin-bottom: ${({ theme }) => theme.spacing(8)};
@@ -135,6 +137,7 @@ export const SignInUpGlobalScopeForm = () => {
const { t } = useLingui();
const { form } = useSignInUpForm();
const returnToPath = useAtomStateValue(returnToPathState);
const getAvailableWorkspaceUrl = (availableWorkspace: AvailableWorkspace) => {
const { pathname, searchParams } = getAvailableWorkspacePathAndSearchParams(
@@ -145,7 +148,10 @@ export const SignInUpGlobalScopeForm = () => {
return buildWorkspaceUrl(
getWorkspaceUrl(availableWorkspace.workspaceUrls),
pathname,
searchParams,
{
...searchParams,
...(isNonEmptyString(returnToPath) ? { returnToPath } : {}),
},
);
};
@@ -1,5 +1,6 @@
import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState';
export const previousUrlState = createAtomState<string>({
key: 'previousUrlState',
export const returnToPathState = createAtomState<string>({
key: 'returnToPathState',
defaultValue: '',
});
@@ -0,0 +1,24 @@
import { ONBOARDING_PATHS } from '@/auth/constants/OnboardingPaths';
import { ONGOING_USER_CREATION_PATHS } from '@/auth/constants/OngoingUserCreationPaths';
import { isNonEmptyString } from '@sniptt/guards';
import { AppPath } from 'twenty-shared/types';
const extractPathPrefix = (appPath: string): string => appPath.split('/:')[0];
const EXCLUDED_PATH_PREFIXES = [
...ONGOING_USER_CREATION_PATHS,
...ONBOARDING_PATHS,
AppPath.ResetPassword,
].map(extractPathPrefix);
export const isValidReturnToPath = (path: string): boolean => {
if (!isNonEmptyString(path) || path === '/') {
return false;
}
if (!path.startsWith('/') || path.startsWith('//')) {
return false;
}
return !EXCLUDED_PATH_PREFIXES.some((prefix) => path.startsWith(prefix));
};
@@ -8,12 +8,13 @@ import { useCurrentMetered } from '@/billing/hooks/useCurrentMetered';
import { useGetWorkflowNodeExecutionUsage } from '@/billing/hooks/useGetWorkflowNodeExecutionUsage';
import { useNumberFormat } from '@/localization/hooks/useNumberFormat';
import { useSubscriptionStatus } from '@/workspace/hooks/useSubscriptionStatus';
import { useTheme } from '@emotion/react';
import { t } from '@lingui/core/macro';
import { useContext } from 'react';
import { formatToShortNumber } from 'twenty-shared/utils';
import { H2Title, HorizontalSeparator } from 'twenty-ui/display';
import { ProgressBar } from 'twenty-ui/feedback';
import { Section } from 'twenty-ui/layout';
import { ThemeContext } from 'twenty-ui/theme';
import { SubscriptionStatus } from '~/generated-metadata/graphql';
export const SettingsBillingCreditsSection = ({
@@ -59,7 +60,7 @@ export const SettingsBillingCreditsSection = ({
currentBillingSubscription.interval,
);
const theme = useTheme();
const { theme } = useContext(ThemeContext);
return (
<>
@@ -27,7 +27,7 @@ import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal';
import { useModal } from '@/ui/layout/modal/hooks/useModal';
import { useSubscriptionStatus } from '@/workspace/hooks/useSubscriptionStatus';
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { useLingui } from '@lingui/react/macro';
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
import { useMemo, useState } from 'react';
@@ -45,6 +45,7 @@ import {
} from 'twenty-ui/display';
import { Button } from 'twenty-ui/input';
import { Section } from 'twenty-ui/layout';
import { themeCssVariables } from 'twenty-ui/theme-constants';
import {
BillingPlanKey,
BillingProductKey,
@@ -83,8 +84,8 @@ const CANCEL_SWITCH_METERED_PRICE_MODAL_ID =
const StyledSwitchButtonContainer = styled.div`
align-items: center;
display: flex;
gap: ${({ theme }) => theme.spacing(2)};
margin-top: ${({ theme }) => theme.spacing(4)};
gap: ${themeCssVariables.spacing[2]};
margin-top: ${themeCssVariables.spacing[4]};
`;
export const SettingsBillingSubscriptionInfo = ({
@@ -1,18 +1,19 @@
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import React from 'react';
import { styled } from '@linaria/react';
import React, { useContext } from 'react';
import { IconCheck } from 'twenty-ui/display';
import { ThemeContext } from 'twenty-ui/theme';
import { themeCssVariables } from 'twenty-ui/theme-constants';
const StyledBenefitContainer = styled.div`
color: ${({ theme }) => theme.font.color.secondary};
color: ${themeCssVariables.font.color.secondary};
display: flex;
flex-direction: row;
gap: ${({ theme }) => theme.spacing(2)};
gap: ${themeCssVariables.spacing[2]};
`;
const StyledCheckContainer = styled.div`
align-items: center;
background-color: ${({ theme }) => theme.background.tertiary};
background-color: ${themeCssVariables.background.tertiary};
border-radius: 50%;
display: flex;
height: 16px;
@@ -23,7 +24,7 @@ type SubscriptionBenefitProps = {
children: React.ReactNode;
};
export const SubscriptionBenefit = ({ children }: SubscriptionBenefitProps) => {
const theme = useTheme();
const { theme } = useContext(ThemeContext);
return (
<StyledBenefitContainer>
<StyledCheckContainer>
@@ -1,13 +1,14 @@
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { themeCssVariables } from 'twenty-ui/theme-constants';
const StyledSubscriptionInfoContainer = styled.div`
background-color: ${({ theme }) => theme.background.secondary};
border: 1px solid ${({ theme }) => theme.border.color.medium};
border-radius: ${({ theme }) => theme.border.radius.md};
background-color: ${themeCssVariables.background.secondary};
border: 1px solid ${themeCssVariables.border.color.medium};
border-radius: ${themeCssVariables.border.radius.md};
display: flex;
flex-direction: column;
gap: ${({ theme }) => theme.spacing(3)};
padding: ${({ theme }) => theme.spacing(3)};
gap: ${themeCssVariables.spacing[3]};
padding: ${themeCssVariables.spacing[3]};
width: 100%;
`;
@@ -1,5 +1,6 @@
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { useLingui } from '@lingui/react/macro';
import { themeCssVariables } from 'twenty-ui/theme-constants';
import { SubscriptionInterval } from '~/generated-metadata/graphql';
type SubscriptionPriceProps = {
@@ -8,16 +9,16 @@ type SubscriptionPriceProps = {
};
const StyledPriceSpan = styled.span`
color: ${({ theme }) => theme.font.color.primary};
font-size: ${({ theme }) => theme.font.size.xxl};
font-weight: ${({ theme }) => theme.font.weight.semiBold};
margin-bottom: ${({ theme }) => theme.spacing(1)};
color: ${themeCssVariables.font.color.primary};
font-size: ${themeCssVariables.font.size.xxl};
font-weight: ${themeCssVariables.font.weight.semiBold};
margin-bottom: ${themeCssVariables.spacing[1]};
`;
const StyledPriceUnitSpan = styled.span`
color: ${({ theme }) => theme.font.color.light};
font-size: ${({ theme }) => theme.font.size.md};
font-weight: ${({ theme }) => theme.font.weight.medium};
color: ${themeCssVariables.font.color.light};
font-size: ${themeCssVariables.font.size.md};
font-weight: ${themeCssVariables.font.weight.medium};
`;
const formatYearlyPriceToMonthly = (price: number): number => {
@@ -1,5 +1,6 @@
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { useLingui } from '@lingui/react/macro';
import { themeCssVariables } from 'twenty-ui/theme-constants';
type TrialCardProps = {
duration: number;
@@ -12,15 +13,15 @@ const StyledTrialCardContainer = styled.div`
`;
const StyledTrialDurationContainer = styled.div`
color: ${({ theme }) => theme.font.color.secondary};
font-size: ${({ theme }) => theme.font.size.md};
color: ${themeCssVariables.font.color.secondary};
font-size: ${themeCssVariables.font.size.md};
display: flex;
margin-bottom: ${({ theme }) => theme.spacing(2)};
margin-bottom: ${themeCssVariables.spacing[2]};
`;
const StyledCreditCardRequirementContainer = styled.div`
color: ${({ theme }) => theme.font.color.tertiary};
font-size: ${({ theme }) => theme.font.size.md};
color: ${themeCssVariables.font.color.tertiary};
font-size: ${themeCssVariables.font.size.md};
display: flex;
`;
@@ -12,12 +12,13 @@ import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { Select } from '@/ui/input/components/Select';
import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal';
import { useModal } from '@/ui/layout/modal/hooks/useModal';
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { t } from '@lingui/core/macro';
import { useState } from 'react';
import { findOrThrow, isDefined } from 'twenty-shared/utils';
import { H2Title } from 'twenty-ui/display';
import { Button } from 'twenty-ui/input';
import { themeCssVariables } from 'twenty-ui/theme-constants';
import {
useSetMeteredSubscriptionPriceMutation,
SubscriptionInterval,
@@ -27,7 +28,7 @@ const StyledRow = styled.div`
align-items: flex-end;
display: flex;
flex-wrap: wrap;
gap: ${({ theme }) => theme.spacing(2)};
gap: ${themeCssVariables.spacing[2]};
`;
const StyledSelect = styled(Select<string>)`
@@ -2,7 +2,8 @@ import React from 'react';
import { Tag } from 'twenty-ui/components';
import { t } from '@lingui/core/macro';
import { BillingPlanKey } from '~/generated-metadata/graphql';
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { themeCssVariables } from 'twenty-ui/theme-constants';
export type PlansTagsProps = {
plan: BillingPlanKey;
@@ -11,7 +12,7 @@ export type PlansTagsProps = {
const StyledTagsWrapper = styled.div`
display: flex;
gap: ${({ theme }) => theme.spacing(1)};
gap: ${themeCssVariables.spacing[1]};
`;
export const PlansTags = ({ plan, isTrialPeriod = false }: PlansTagsProps) => {
@@ -1,4 +1,5 @@
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { themeCssVariables } from 'twenty-ui/theme-constants';
type SettingsBillingLabelValueItemProps = {
label: string;
@@ -12,16 +13,18 @@ const StyledContainer = styled.div`
`;
const StyledLabelSpan = styled.span`
color: ${({ theme }) => theme.font.color.tertiary};
font-size: ${({ theme }) => theme.font.size.xs};
font-weight: ${({ theme }) => theme.font.weight.semiBold};
color: ${themeCssVariables.font.color.tertiary};
font-size: ${themeCssVariables.font.size.xs};
font-weight: ${themeCssVariables.font.weight.semiBold};
`;
const StyledValueSpan = styled.span<{ isPrimaryColor: boolean }>`
color: ${({ theme, isPrimaryColor }) =>
isPrimaryColor ? theme.font.color.primary : theme.font.color.secondary};
font-size: ${({ theme }) => theme.font.size.sm};
font-weight: ${({ theme }) => theme.font.weight.medium};
color: ${({ isPrimaryColor }) =>
isPrimaryColor
? themeCssVariables.font.color.primary
: themeCssVariables.font.color.secondary};
font-size: ${themeCssVariables.font.size.sm};
font-weight: ${themeCssVariables.font.weight.medium};
`;
export const SettingsBillingLabelValueItem = ({
@@ -1,8 +1,9 @@
import { type IconComponent } from 'twenty-ui/display';
import React from 'react';
import styled from '@emotion/styled';
import { useTheme } from '@emotion/react';
import React, { useContext } from 'react';
import { styled } from '@linaria/react';
import { t } from '@lingui/core/macro';
import { ThemeContext } from 'twenty-ui/theme';
import { themeCssVariables } from 'twenty-ui/theme-constants';
type SubscriptionInfoRowContainerProps = {
Icon: IconComponent;
@@ -13,16 +14,16 @@ type SubscriptionInfoRowContainerProps = {
const StyledContainer = styled.div`
align-items: center;
gap: ${({ theme }) => theme.spacing(1)};
color: ${({ theme }) => theme.font.color.primary};
gap: ${themeCssVariables.spacing[1]};
color: ${themeCssVariables.font.color.primary};
display: grid;
grid-template-columns: repeat(3, 1fr);
`;
const StyledIconLabelContainer = styled.div`
align-items: center;
gap: ${({ theme }) => theme.spacing(1)};
color: ${({ theme }) => theme.font.color.tertiary};
gap: ${themeCssVariables.spacing[1]};
color: ${themeCssVariables.font.color.tertiary};
display: flex;
`;
@@ -33,8 +34,8 @@ const StyledLabelContainer = styled.div`
`;
const StyledHeaderText = styled.div`
color: ${({ theme }) => theme.font.color.tertiary};
font-size: ${({ theme }) => theme.font.size.sm};
color: ${themeCssVariables.font.color.tertiary};
font-size: ${themeCssVariables.font.size.sm};
`;
export const SubscriptionInfoHeaderRow = ({ show }: { show: boolean }) => {
@@ -54,7 +55,7 @@ export const SubscriptionInfoRowContainer = ({
currentValue,
nextValue,
}: SubscriptionInfoRowContainerProps) => {
const theme = useTheme();
const { theme } = useContext(ThemeContext);
return (
<StyledContainer>
<StyledIconLabelContainer>
@@ -1,8 +1,9 @@
import { createReactBlockSpec } from '@blocknote/react';
import styled from '@emotion/styled';
import { styled } from '@linaria/react';
import { isNonEmptyString } from '@sniptt/guards';
import { type ChangeEvent, useRef } from 'react';
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
import { themeCssVariables } from 'twenty-ui/theme-constants';
import { type AttachmentFileCategory } from '@/activities/files/types/AttachmentFileCategory';
import { getFileType } from '@/activities/files/utils/getFileType';
@@ -18,23 +19,23 @@ const StyledFileInput = styled.input`
const StyledFileLine = styled.div`
align-items: center;
display: flex;
gap: ${({ theme }) => theme.spacing(2)};
gap: ${themeCssVariables.spacing[2]};
`;
const StyledLink = styled.a`
align-items: center;
color: ${({ theme }) => theme.font.color.primary};
color: ${themeCssVariables.font.color.primary};
display: flex;
text-decoration: none;
:hover {
color: ${({ theme }) => theme.font.color.secondary};
color: ${themeCssVariables.font.color.secondary};
}
`;
const StyledUploadFileContainer = styled.div`
align-items: center;
display: flex;
gap: ${({ theme }) => theme.spacing(2)};
gap: ${themeCssVariables.spacing[2]};
`;
export const FileBlock = createReactBlockSpec(

Some files were not shown because too many files have changed in this diff Show More