Compare commits
134
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a32032b78 | ||
|
|
ea5091f8c0 | ||
|
|
5f5f654602 | ||
|
|
381f3ba7d9 | ||
|
|
64470baa1e | ||
|
|
f5e8c05267 | ||
|
|
48c540eb6f | ||
|
|
5583254f58 | ||
|
|
97832af778 | ||
|
|
7ce3e2b065 | ||
|
|
a49d8386aa | ||
|
|
e420ee8746 | ||
|
|
7adab8884b | ||
|
|
6101a4f113 | ||
|
|
da8fe7f6f7 | ||
|
|
cddc47b61f | ||
|
|
446c39d1c0 | ||
|
|
5eda10760c | ||
|
|
b9605a3003 | ||
|
|
56d6e13b5d | ||
|
|
725171bfd3 | ||
|
|
3b85747d3f | ||
|
|
a4cc7fb9c5 | ||
|
|
0f8152f536 | ||
|
|
a328c127f3 | ||
|
|
8cb803cedf | ||
|
|
5e83ad43de | ||
|
|
7ba5fe32f8 | ||
|
|
7601dbc218 | ||
|
|
8a968d1e31 | ||
|
|
0c4a194c7a | ||
|
|
94b8e34362 | ||
|
|
2fccd194f3 | ||
|
|
762fb6fd64 | ||
|
|
7956ecc7b2 | ||
|
|
e12b55a951 | ||
|
|
2df32f7003 | ||
|
|
46ee72160d | ||
|
|
f953aea3c5 | ||
|
|
c805a351ab | ||
|
|
3e48be4c31 | ||
|
|
a9ea1c6eed | ||
|
|
7a721ef5dd | ||
|
|
77e5b06a50 | ||
|
|
bc28e1557c | ||
|
|
42f452311b | ||
|
|
59a222e0f0 | ||
|
|
307b6c94de | ||
|
|
3463ee5dc4 | ||
|
|
9cf6f42313 | ||
|
|
a88d1f4442 | ||
|
|
43249d80e8 | ||
|
|
ed9dd3c275 | ||
|
|
b3354ab6e7 | ||
|
|
762de40c3d | ||
|
|
573ecea753 | ||
|
|
c8a3de6c65 | ||
|
|
edba7fe085 | ||
|
|
ef328755bb | ||
|
|
1e42be5a44 | ||
|
|
b194b67ac4 | ||
|
|
eaf54ae02f | ||
|
|
fb4d037b93 | ||
|
|
edc47bd458 | ||
|
|
47bdcb11d8 | ||
|
|
b817bdca02 | ||
|
|
9c07ecd363 | ||
|
|
eb13378760 | ||
|
|
3e699c4458 | ||
|
|
f738961127 | ||
|
|
49aac04b84 | ||
|
|
40c6c63bf5 | ||
|
|
d583984bf0 | ||
|
|
714f149b0c | ||
|
|
194f0963dc | ||
|
|
5fa3094800 | ||
|
|
87f8e5ca19 | ||
|
|
e041125426 | ||
|
|
d88fb2bd65 | ||
|
|
cdc7339da1 | ||
|
|
69d228d8a1 | ||
|
|
455022f652 | ||
|
|
fa354b4c1c | ||
|
|
0894f2004b | ||
|
|
665db83bb5 | ||
|
|
64a7725ac7 | ||
|
|
76d3e4ad2e | ||
|
|
fb772c7695 | ||
|
|
123d6241d7 | ||
|
|
d2a99ef72d | ||
|
|
96959b43ba | ||
|
|
3f495124a5 | ||
|
|
353d1e89d5 | ||
|
|
87f5c0083f | ||
|
|
7dfc556250 | ||
|
|
9f6855e7dd | ||
|
|
33c74c4d28 | ||
|
|
ce2723d6cf | ||
|
|
12233e6c47 | ||
|
|
84b325876d | ||
|
|
88c0b24d9e | ||
|
|
87bb2f94bb | ||
|
|
c67602f2e8 | ||
|
|
e34ca3817c | ||
|
|
227d24512e | ||
|
|
1382790c80 | ||
|
|
5e7e5dd466 | ||
|
|
6182918a66 | ||
|
|
6829fc315a | ||
|
|
8425afd930 | ||
|
|
64e031b9dd | ||
|
|
cd10f3cbd9 | ||
|
|
bf5cc68f25 | ||
|
|
8bf9b12ace | ||
|
|
2ac93bd803 | ||
|
|
884b06936e | ||
|
|
63666547fb | ||
|
|
21142d98fe | ||
|
|
7091561489 | ||
|
|
de401d96fe | ||
|
|
09806d7d8c | ||
|
|
150c326369 | ||
|
|
c73cdd0844 | ||
|
|
4e46aa32bb | ||
|
|
9e385e44f9 | ||
|
|
63806b24fe | ||
|
|
7540bb064f | ||
|
|
ad1a4ecca0 | ||
|
|
d9d3648baa | ||
|
|
fda5aba9ec | ||
|
|
4264741281 | ||
|
|
6e259d3ded | ||
|
|
3ae63f0574 | ||
|
|
c8f5ecb2b6 |
@@ -22,7 +22,7 @@ This main guide provides a high-level overview and navigation hub.
|
||||
|
||||
A syncable entity is a metadata entity that:
|
||||
- Has a **`universalIdentifier`**: A unique identifier used for syncing entities across workspaces/applications
|
||||
- Has an **`applicationId`**: Links the entity to an application (Twenty Standard or Custom applications)
|
||||
- Has an **`applicationId`**: Links the entity to an application (Standard or Custom applications)
|
||||
- Participates in the **workspace migration system**: Can be created, updated, and deleted through the migration pipeline
|
||||
- Is **cached as a flat entity**: Denormalized representation for efficient validation and change detection
|
||||
|
||||
|
||||
@@ -69,13 +69,14 @@ jobs:
|
||||
|
||||
- name: Server / Start
|
||||
run: |
|
||||
npx nx start twenty-server &
|
||||
npx nx run twenty-server:start:ci &
|
||||
echo "Waiting for server to be ready..."
|
||||
timeout 60 bash -c 'until curl -s http://localhost:3000/health; do sleep 2; done'
|
||||
timeout 60 bash -c 'until curl -sf http://localhost:3000/healthz; do sleep 2; done'
|
||||
|
||||
- name: Start worker
|
||||
working-directory: packages/twenty-server
|
||||
run: |
|
||||
npx nx run twenty-server:worker &
|
||||
NODE_ENV=development node dist/queue-worker/queue-worker.js &
|
||||
echo "Worker started"
|
||||
|
||||
- name: Zapier / Build
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "create-twenty-app",
|
||||
"version": "1.22.0-canary.3",
|
||||
"version": "1.22.0",
|
||||
"description": "Command-line interface to create Twenty application",
|
||||
"main": "dist/cli.cjs",
|
||||
"bin": "dist/cli.cjs",
|
||||
|
||||
@@ -7,9 +7,7 @@
|
||||
"npm": "please-use-yarn",
|
||||
"yarn": ">=4.0.2"
|
||||
},
|
||||
"keywords": [
|
||||
"twenty-app"
|
||||
],
|
||||
"keywords": [],
|
||||
"packageManager": "yarn@4.9.2",
|
||||
"scripts": {
|
||||
"twenty": "twenty",
|
||||
|
||||
-70
@@ -1,70 +0,0 @@
|
||||
import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/constants/universal-identifiers';
|
||||
import { appBuild, appDeploy, appInstall, appUninstall } from 'twenty-sdk/cli';
|
||||
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
|
||||
import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
||||
|
||||
const APP_PATH = process.cwd();
|
||||
|
||||
describe('App installation', () => {
|
||||
beforeAll(async () => {
|
||||
const buildResult = await appBuild({
|
||||
appPath: APP_PATH,
|
||||
tarball: true,
|
||||
onProgress: (message: string) => console.log(`[build] ${message}`),
|
||||
});
|
||||
|
||||
if (!buildResult.success) {
|
||||
throw new Error(
|
||||
`Build failed: ${buildResult.error?.message ?? 'Unknown error'}`,
|
||||
);
|
||||
}
|
||||
|
||||
const deployResult = await appDeploy({
|
||||
tarballPath: buildResult.data.tarballPath!,
|
||||
onProgress: (message: string) => console.log(`[deploy] ${message}`),
|
||||
});
|
||||
|
||||
if (!deployResult.success) {
|
||||
throw new Error(
|
||||
`Deploy failed: ${deployResult.error?.message ?? 'Unknown error'}`,
|
||||
);
|
||||
}
|
||||
|
||||
const installResult = await appInstall({ appPath: APP_PATH });
|
||||
|
||||
if (!installResult.success) {
|
||||
throw new Error(
|
||||
`Install failed: ${installResult.error?.message ?? 'Unknown error'}`,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
const uninstallResult = await appUninstall({ appPath: APP_PATH });
|
||||
|
||||
if (!uninstallResult.success) {
|
||||
console.warn(
|
||||
`App uninstall failed: ${uninstallResult.error?.message ?? 'Unknown error'}`,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it('should find the installed app in the applications list', async () => {
|
||||
const metadataClient = new MetadataApiClient();
|
||||
|
||||
const result = await metadataClient.query({
|
||||
findManyApplications: {
|
||||
id: true,
|
||||
name: true,
|
||||
universalIdentifier: true,
|
||||
},
|
||||
});
|
||||
|
||||
const installedApp = result.findManyApplications.find(
|
||||
(application: { universalIdentifier: string }) =>
|
||||
application.universalIdentifier === APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
);
|
||||
|
||||
expect(installedApp).toBeDefined();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,87 @@
|
||||
import * as fs from 'fs';
|
||||
import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
|
||||
import { appDevOnce, appUninstall } from 'twenty-sdk/cli';
|
||||
|
||||
const APP_PATH = process.cwd();
|
||||
const CONFIG_DIR = path.join(os.homedir(), '.twenty');
|
||||
|
||||
function validateEnv(): { apiUrl: string; apiKey: string } {
|
||||
const apiUrl = process.env.TWENTY_API_URL;
|
||||
const apiKey = process.env.TWENTY_API_KEY;
|
||||
|
||||
if (!apiUrl || !apiKey) {
|
||||
throw new Error(
|
||||
'TWENTY_API_URL and TWENTY_API_KEY must be set.\n' +
|
||||
'Start a local server: yarn twenty server start\n' +
|
||||
'Or set them in vitest env config.',
|
||||
);
|
||||
}
|
||||
|
||||
return { apiUrl, apiKey };
|
||||
}
|
||||
|
||||
async function checkServer(apiUrl: string) {
|
||||
let response: Response;
|
||||
|
||||
try {
|
||||
response = await fetch(`${apiUrl}/healthz`);
|
||||
} catch {
|
||||
throw new Error(
|
||||
`Twenty server is not reachable at ${apiUrl}. ` +
|
||||
'Make sure the server is running before executing integration tests.',
|
||||
);
|
||||
}
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Server at ${apiUrl} returned ${response.status}`);
|
||||
}
|
||||
}
|
||||
|
||||
function writeConfig(apiUrl: string, apiKey: string) {
|
||||
const payload = JSON.stringify(
|
||||
{
|
||||
remotes: {
|
||||
local: { apiUrl, apiKey, accessToken: apiKey },
|
||||
},
|
||||
defaultRemote: 'local',
|
||||
},
|
||||
null,
|
||||
2,
|
||||
);
|
||||
|
||||
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
||||
fs.writeFileSync(path.join(CONFIG_DIR, 'config.test.json'), payload);
|
||||
}
|
||||
|
||||
export async function setup() {
|
||||
const { apiUrl, apiKey } = validateEnv();
|
||||
|
||||
await checkServer(apiUrl);
|
||||
|
||||
writeConfig(apiUrl, apiKey);
|
||||
|
||||
await appUninstall({ appPath: APP_PATH }).catch(() => {});
|
||||
|
||||
const result = await appDevOnce({
|
||||
appPath: APP_PATH,
|
||||
onProgress: (message: string) => console.log(`[dev] ${message}`),
|
||||
});
|
||||
|
||||
if (!result.success) {
|
||||
throw new Error(
|
||||
`Dev sync failed: ${result.error?.message ?? 'Unknown error'}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export async function teardown() {
|
||||
const uninstallResult = await appUninstall({ appPath: APP_PATH });
|
||||
|
||||
if (!uninstallResult.success) {
|
||||
console.warn(
|
||||
`App uninstall failed: ${uninstallResult.error?.message ?? 'Unknown error'}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
import { CoreApiClient } from 'twenty-client-sdk/core';
|
||||
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
|
||||
import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/constants/universal-identifiers';
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
describe('App installation', () => {
|
||||
it('should find the installed app in the applications list', async () => {
|
||||
const client = new MetadataApiClient();
|
||||
|
||||
const result = await client.query({
|
||||
findManyApplications: {
|
||||
id: true,
|
||||
name: true,
|
||||
universalIdentifier: true,
|
||||
},
|
||||
});
|
||||
|
||||
const app = result.findManyApplications.find(
|
||||
(a: { universalIdentifier: string }) =>
|
||||
a.universalIdentifier === APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
);
|
||||
|
||||
expect(app).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('CoreApiClient', () => {
|
||||
it('should support CRUD on standard objects', async () => {
|
||||
const client = new CoreApiClient();
|
||||
|
||||
const created = await client.mutation({
|
||||
createNote: {
|
||||
__args: { data: { title: 'Integration test note' } },
|
||||
id: true,
|
||||
},
|
||||
});
|
||||
expect(created.createNote.id).toBeDefined();
|
||||
|
||||
await client.mutation({
|
||||
destroyNote: {
|
||||
__args: { id: created.createNote.id },
|
||||
id: true,
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -1,6 +1,15 @@
|
||||
import tsconfigPaths from 'vite-tsconfig-paths';
|
||||
import { defineConfig } from 'vitest/config';
|
||||
|
||||
const TWENTY_API_URL = process.env.TWENTY_API_URL ?? 'http://localhost:2020';
|
||||
const TWENTY_API_KEY =
|
||||
process.env.TWENTY_API_KEY ??
|
||||
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC0xYzI1LTRkMDItYmYyNS02YWVjY2Y3ZWE0MTkiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWMyNS00ZDAyLWJmMjUtNmFlY2NmN2VhNDE5IiwiaWF0IjoxNzM1Njg5NjAwLCJleHAiOjQ4OTE0NDk2MDAsImp0aSI6IjIwMjAyMDIwLWY0MDEtNGQ4YS1hNzMxLTY0ZDAwN2MyN2JhZCJ9.bfQjfyN0NEtTCLE_xPyNcwonDzlSXFoP8kdCQTdnuDc';
|
||||
|
||||
// Make env vars available to globalSetup (test.env only applies to workers)
|
||||
process.env.TWENTY_API_URL = TWENTY_API_URL;
|
||||
process.env.TWENTY_API_KEY = TWENTY_API_KEY;
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
tsconfigPaths({
|
||||
@@ -11,13 +20,12 @@ export default defineConfig({
|
||||
test: {
|
||||
testTimeout: 120_000,
|
||||
hookTimeout: 120_000,
|
||||
fileParallelism: false,
|
||||
include: ['src/**/*.integration-test.ts'],
|
||||
setupFiles: ['src/__tests__/setup-test.ts'],
|
||||
globalSetup: ['src/__tests__/global-setup.ts'],
|
||||
env: {
|
||||
TWENTY_API_URL: process.env.TWENTY_API_URL ?? 'http://localhost:2020',
|
||||
TWENTY_API_KEY:
|
||||
process.env.TWENTY_API_KEY ??
|
||||
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC0xYzI1LTRkMDItYmYyNS02YWVjY2Y3ZWE0MTkiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWMyNS00ZDAyLWJmMjUtNmFlY2NmN2VhNDE5IiwiaWF0IjoxNzM1Njg5NjAwLCJleHAiOjQ4OTE0NDk2MDAsImp0aSI6IjIwMjAyMDIwLWY0MDEtNGQ4YS1hNzMxLTY0ZDAwN2MyN2JhZCJ9.bfQjfyN0NEtTCLE_xPyNcwonDzlSXFoP8kdCQTdnuDc',
|
||||
TWENTY_API_URL,
|
||||
TWENTY_API_KEY,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
import * as fs from 'fs';
|
||||
import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
|
||||
import { appDevOnce, appUninstall } from 'twenty-sdk/cli';
|
||||
|
||||
const APP_PATH = process.cwd();
|
||||
const CONFIG_DIR = path.join(os.homedir(), '.twenty');
|
||||
|
||||
function validateEnv(): { apiUrl: string; apiKey: string } {
|
||||
const apiUrl = process.env.TWENTY_API_URL;
|
||||
const apiKey = process.env.TWENTY_API_KEY;
|
||||
|
||||
if (!apiUrl || !apiKey) {
|
||||
throw new Error(
|
||||
'TWENTY_API_URL and TWENTY_API_KEY must be set.\n' +
|
||||
'Start a local server: yarn twenty server start\n' +
|
||||
'Or set them in vitest env config.',
|
||||
);
|
||||
}
|
||||
|
||||
return { apiUrl, apiKey };
|
||||
}
|
||||
|
||||
async function checkServer(apiUrl: string) {
|
||||
let response: Response;
|
||||
|
||||
try {
|
||||
response = await fetch(`${apiUrl}/healthz`);
|
||||
} catch {
|
||||
throw new Error(
|
||||
`Twenty server is not reachable at ${apiUrl}. ` +
|
||||
'Make sure the server is running before executing integration tests.',
|
||||
);
|
||||
}
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Server at ${apiUrl} returned ${response.status}`);
|
||||
}
|
||||
}
|
||||
|
||||
function writeConfig(apiUrl: string, apiKey: string) {
|
||||
const payload = JSON.stringify(
|
||||
{
|
||||
remotes: {
|
||||
local: { apiUrl, apiKey, accessToken: apiKey },
|
||||
},
|
||||
defaultRemote: 'local',
|
||||
},
|
||||
null,
|
||||
2,
|
||||
);
|
||||
|
||||
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
||||
fs.writeFileSync(path.join(CONFIG_DIR, 'config.test.json'), payload);
|
||||
}
|
||||
|
||||
export async function setup() {
|
||||
const { apiUrl, apiKey } = validateEnv();
|
||||
|
||||
await checkServer(apiUrl);
|
||||
|
||||
writeConfig(apiUrl, apiKey);
|
||||
|
||||
await appUninstall({ appPath: APP_PATH }).catch(() => {});
|
||||
|
||||
const result = await appDevOnce({
|
||||
appPath: APP_PATH,
|
||||
onProgress: (message: string) => console.log(`[dev] ${message}`),
|
||||
});
|
||||
|
||||
if (!result.success) {
|
||||
throw new Error(
|
||||
`Dev sync failed: ${result.error?.message ?? 'Unknown error'}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export async function teardown() {
|
||||
const uninstallResult = await appUninstall({ appPath: APP_PATH });
|
||||
|
||||
if (!uninstallResult.success) {
|
||||
console.warn(
|
||||
`App uninstall failed: ${uninstallResult.error?.message ?? 'Unknown error'}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
|
||||
import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/application.config';
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
describe('App installation', () => {
|
||||
it('should find the installed app in the applications list', async () => {
|
||||
const client = new MetadataApiClient();
|
||||
|
||||
const result = await client.query({
|
||||
findManyApplications: {
|
||||
id: true,
|
||||
name: true,
|
||||
universalIdentifier: true,
|
||||
},
|
||||
});
|
||||
|
||||
const app = result.findManyApplications.find(
|
||||
(a: { universalIdentifier: string }) =>
|
||||
a.universalIdentifier === APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
);
|
||||
|
||||
expect(app).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('PostCard object', () => {
|
||||
it('should exist with expected fields and relations', async () => {
|
||||
const client = new MetadataApiClient();
|
||||
|
||||
const { objects } = await client.query({
|
||||
objects: {
|
||||
__args: {
|
||||
filter: { isCustom: { is: true } },
|
||||
paging: { first: 50 },
|
||||
},
|
||||
edges: {
|
||||
node: {
|
||||
nameSingular: true,
|
||||
fields: {
|
||||
__args: { paging: { first: 500 } },
|
||||
edges: { node: { name: true } },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const obj = objects.edges
|
||||
.map((e: { node: { nameSingular: string } }) => e.node)
|
||||
.find((n: { nameSingular: string }) => n.nameSingular === 'postCard');
|
||||
expect(obj).toBeDefined();
|
||||
|
||||
const names = obj!.fields.edges.map(
|
||||
(e: { node: { name: string } }) => e.node.name,
|
||||
);
|
||||
expect(names).toContain('name');
|
||||
expect(names).toContain('content');
|
||||
expect(names).toContain('status');
|
||||
expect(names).toContain('deliveredAt');
|
||||
expect(names).toContain('recipient');
|
||||
});
|
||||
|
||||
});
|
||||
@@ -1,53 +0,0 @@
|
||||
import * as fs from 'fs';
|
||||
import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
import { beforeAll } from 'vitest';
|
||||
|
||||
const CONFIG_DIR = path.join(os.homedir(), '.twenty');
|
||||
const CONFIG_PATH = path.join(CONFIG_DIR, 'config.test.json');
|
||||
|
||||
beforeAll(async () => {
|
||||
const apiUrl = process.env.TWENTY_API_URL!;
|
||||
const token = process.env.TWENTY_API_KEY!;
|
||||
|
||||
if (!apiUrl || !token) {
|
||||
throw new Error(
|
||||
'TWENTY_API_URL and TWENTY_API_KEY must be set.\n' +
|
||||
'Start a local server: yarn twenty server start\n' +
|
||||
'Or set them in vitest env config.',
|
||||
);
|
||||
}
|
||||
|
||||
let response: Response;
|
||||
|
||||
try {
|
||||
response = await fetch(`${apiUrl}/healthz`);
|
||||
} catch {
|
||||
throw new Error(
|
||||
`Twenty server is not reachable at ${apiUrl}. ` +
|
||||
'Make sure the server is running before executing integration tests.',
|
||||
);
|
||||
}
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Server at ${apiUrl} returned ${response.status}`);
|
||||
}
|
||||
|
||||
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
||||
|
||||
fs.writeFileSync(
|
||||
CONFIG_PATH,
|
||||
JSON.stringify(
|
||||
{
|
||||
remotes: {
|
||||
local: { apiUrl, apiKey: token },
|
||||
},
|
||||
defaultRemote: 'local',
|
||||
},
|
||||
null,
|
||||
2,
|
||||
),
|
||||
);
|
||||
|
||||
process.env.TWENTY_APP_ACCESS_TOKEN ??= token;
|
||||
});
|
||||
@@ -1,6 +1,15 @@
|
||||
import tsconfigPaths from 'vite-tsconfig-paths';
|
||||
import { defineConfig } from 'vitest/config';
|
||||
|
||||
const TWENTY_API_URL = process.env.TWENTY_API_URL ?? 'http://localhost:2020';
|
||||
const TWENTY_API_KEY =
|
||||
process.env.TWENTY_API_KEY ??
|
||||
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC0xYzI1LTRkMDItYmYyNS02YWVjY2Y3ZWE0MTkiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWMyNS00ZDAyLWJmMjUtNmFlY2NmN2VhNDE5IiwiaWF0IjoxNzM1Njg5NjAwLCJleHAiOjQ4OTE0NDk2MDAsImp0aSI6IjIwMjAyMDIwLWY0MDEtNGQ4YS1hNzMxLTY0ZDAwN2MyN2JhZCJ9.bfQjfyN0NEtTCLE_xPyNcwonDzlSXFoP8kdCQTdnuDc';
|
||||
|
||||
// Make env vars available to globalSetup (test.env only applies to workers)
|
||||
process.env.TWENTY_API_URL = TWENTY_API_URL;
|
||||
process.env.TWENTY_API_KEY = TWENTY_API_KEY;
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
tsconfigPaths({
|
||||
@@ -11,13 +20,12 @@ export default defineConfig({
|
||||
test: {
|
||||
testTimeout: 120_000,
|
||||
hookTimeout: 120_000,
|
||||
fileParallelism: false,
|
||||
include: ['src/**/*.integration-test.ts'],
|
||||
setupFiles: ['src/__tests__/setup-test.ts'],
|
||||
globalSetup: ['src/__tests__/global-setup.ts'],
|
||||
env: {
|
||||
TWENTY_API_URL: process.env.TWENTY_API_URL ?? 'http://localhost:2020',
|
||||
TWENTY_API_KEY:
|
||||
process.env.TWENTY_API_KEY ??
|
||||
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC0xYzI1LTRkMDItYmYyNS02YWVjY2Y3ZWE0MTkiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWMyNS00ZDAyLWJmMjUtNmFlY2NmN2VhNDE5IiwiaWF0IjoxNzM1Njg5NjAwLCJleHAiOjQ4OTE0NDk2MDAsImp0aSI6IjIwMjAyMDIwLWY0MDEtNGQ4YS1hNzMxLTY0ZDAwN2MyN2JhZCJ9.bfQjfyN0NEtTCLE_xPyNcwonDzlSXFoP8kdCQTdnuDc',
|
||||
TWENTY_API_URL,
|
||||
TWENTY_API_KEY,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
name: CD
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
types: [labeled]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
TWENTY_DEPLOY_URL: http://localhost:3000
|
||||
|
||||
concurrency:
|
||||
group: cd-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
deploy-and-install:
|
||||
if: >-
|
||||
github.event_name == 'push' ||
|
||||
(github.event_name == 'pull_request' && github.event.label.name == 'deploy')
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
|
||||
- name: Deploy
|
||||
uses: twentyhq/twenty/.github/actions/deploy-twenty-app@main
|
||||
with:
|
||||
api-url: ${{ env.TWENTY_DEPLOY_URL }}
|
||||
api-key: ${{ secrets.TWENTY_DEPLOY_API_KEY }}
|
||||
|
||||
- name: Install
|
||||
uses: twentyhq/twenty/.github/actions/install-twenty-app@main
|
||||
with:
|
||||
api-url: ${{ env.TWENTY_DEPLOY_URL }}
|
||||
api-key: ${{ secrets.TWENTY_DEPLOY_API_KEY }}
|
||||
@@ -0,0 +1,48 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request: {}
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
TWENTY_VERSION: latest
|
||||
|
||||
concurrency:
|
||||
group: ci-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Spawn Twenty test instance
|
||||
id: twenty
|
||||
uses: twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main
|
||||
with:
|
||||
twenty-version: ${{ env.TWENTY_VERSION }}
|
||||
|
||||
- name: Enable Corepack
|
||||
run: corepack enable
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: yarn
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn install --immutable
|
||||
|
||||
- name: Run integration tests
|
||||
run: yarn test
|
||||
env:
|
||||
TWENTY_API_URL: ${{ steps.twenty.outputs.server-url }}
|
||||
TWENTY_API_KEY: ${{ steps.twenty.outputs.api-key }}
|
||||
@@ -35,3 +35,4 @@ yarn-error.log*
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
*.d.ts
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
24.5.0
|
||||
@@ -1,40 +1,19 @@
|
||||
{
|
||||
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
||||
"plugins": ["typescript", "import", "unicorn"],
|
||||
"plugins": ["typescript"],
|
||||
"categories": {
|
||||
"correctness": "off"
|
||||
},
|
||||
"ignorePatterns": ["node_modules"],
|
||||
"ignorePatterns": ["node_modules", "dist"],
|
||||
"rules": {
|
||||
"func-style": ["error", "declaration", { "allowArrowFunctions": true }],
|
||||
"no-console": ["warn", { "allow": ["group", "groupCollapsed", "groupEnd"] }],
|
||||
"no-control-regex": "off",
|
||||
"no-debugger": "error",
|
||||
"no-duplicate-imports": "error",
|
||||
"no-undef": "off",
|
||||
"no-unused-vars": "off",
|
||||
"no-redeclare": "off",
|
||||
|
||||
"import/no-duplicates": "error",
|
||||
|
||||
"typescript/no-redeclare": "error",
|
||||
"typescript/ban-ts-comment": "error",
|
||||
"typescript/consistent-type-imports": ["error", {
|
||||
"prefer": "type-imports",
|
||||
"fixStyle": "inline-type-imports"
|
||||
}],
|
||||
"typescript/explicit-function-return-type": "off",
|
||||
"typescript/explicit-module-boundary-types": "off",
|
||||
"typescript/no-empty-object-type": ["error", {
|
||||
"allowInterfaces": "with-single-extends"
|
||||
}],
|
||||
"typescript/no-empty-function": "off",
|
||||
"typescript/no-explicit-any": "off",
|
||||
"typescript/no-unused-vars": ["warn", {
|
||||
"vars": "all",
|
||||
"varsIgnorePattern": "^_",
|
||||
"args": "after-used",
|
||||
"argsIgnorePattern": "^_"
|
||||
}]
|
||||
"typescript/no-unused-vars": [
|
||||
"warn",
|
||||
{
|
||||
"argsIgnorePattern": "^_"
|
||||
}
|
||||
],
|
||||
"typescript/no-explicit-any": "off"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1 @@
|
||||
yarnPath: .yarn/releases/yarn-4.9.2.cjs
|
||||
|
||||
nodeLinker: node-modules
|
||||
|
||||
enableTransparentWorkspaces: false
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
## Base documentation
|
||||
|
||||
- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started
|
||||
- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples/postcard
|
||||
|
||||
## UUID requirement
|
||||
|
||||
- All generated UUIDs must be valid UUID v4.
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it.
|
||||
- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar.
|
||||
- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab.
|
||||
@@ -0,0 +1,14 @@
|
||||
## Base documentation
|
||||
|
||||
- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started
|
||||
- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples/postcard
|
||||
|
||||
## UUID requirement
|
||||
|
||||
- All generated UUIDs must be valid UUID v4.
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it.
|
||||
- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar.
|
||||
- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab.
|
||||
@@ -0,0 +1,14 @@
|
||||
## Base documentation
|
||||
|
||||
- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started
|
||||
- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples/postcard
|
||||
|
||||
## UUID requirement
|
||||
|
||||
- All generated UUIDs must be valid UUID v4.
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it.
|
||||
- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar.
|
||||
- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab.
|
||||
@@ -1,44 +1,11 @@
|
||||
# Self Hosting
|
||||
This is a [Twenty](https://twenty.com) application bootstrapped with [`create-twenty-app`](https://www.npmjs.com/package/create-twenty-app).
|
||||
|
||||
Used to manage billing and telemetry of self-hosted instances
|
||||
## Getting Started
|
||||
|
||||
## Features
|
||||
Run `yarn twenty help` to list all available commands.
|
||||
|
||||
### Telemetry Webhook
|
||||
## Learn More
|
||||
|
||||
Receives user signup telemetry events from self-hosted Twenty instances and creates/updates selfHostingUser records.
|
||||
|
||||
**Endpoint:** `POST /webhook/telemetry`
|
||||
|
||||
**Payload Structure:**
|
||||
```json
|
||||
{
|
||||
"action": "user_signup",
|
||||
"timestamp": "2025-11-21T...",
|
||||
"version": "1",
|
||||
"payload": {
|
||||
"userId": "uuid",
|
||||
"workspaceId": "uuid",
|
||||
"payload": {
|
||||
"events": [
|
||||
{
|
||||
"userEmail": "user@example.com",
|
||||
"userId": "uuid",
|
||||
"userFirstName": "John",
|
||||
"userLastName": "Doe",
|
||||
"locale": "en",
|
||||
"serverUrl": "https://self-hosted.example.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Self hosting user created/updated: uuid"
|
||||
}
|
||||
```
|
||||
- [Twenty Apps documentation](https://docs.twenty.com/developers/extend/apps/getting-started)
|
||||
- [twenty-sdk CLI reference](https://www.npmjs.com/package/twenty-sdk)
|
||||
- [Discord](https://discord.gg/cx5n4Jzs57)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "self-hosting",
|
||||
"version": "0.0.1",
|
||||
"version": "1.0.0",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "^24.5.0",
|
||||
@@ -11,13 +11,22 @@
|
||||
"scripts": {
|
||||
"twenty": "twenty",
|
||||
"lint": "oxlint -c .oxlintrc.json .",
|
||||
"lint:fix": "oxlint --fix -c .oxlintrc.json ."
|
||||
"lint:fix": "oxlint --fix -c .oxlintrc.json .",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest"
|
||||
},
|
||||
"dependencies": {
|
||||
"twenty-client-sdk": "1.22.0-canary.6",
|
||||
"twenty-sdk": "1.22.0-canary.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^24.7.2",
|
||||
"@types/react": "^19.0.0",
|
||||
"oxlint": "^0.16.0",
|
||||
"twenty-sdk": "0.6.2"
|
||||
},
|
||||
"$schema": "https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-cli/src/constants/schemas/appManifest.schema.json",
|
||||
"universalIdentifier": "a7070f46-3158-4b40-828f-8e6b1febc233"
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0",
|
||||
"typescript": "^5.9.3",
|
||||
"vite-tsconfig-paths": "^4.2.1",
|
||||
"vitest": "^3.1.1"
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/application.config';
|
||||
import { appBuild, appDeploy, appInstall, appUninstall } from 'twenty-sdk/cli';
|
||||
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
|
||||
import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
||||
import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/application.config';
|
||||
|
||||
const APP_PATH = process.cwd();
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import { defineApplication } from 'twenty-sdk';
|
||||
import { UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers.constant';
|
||||
|
||||
export const APPLICATION_UNIVERSAL_IDENTIFIER =
|
||||
'94f7db30-59e5-4b09-a5fe-64cd3d4a65b0';
|
||||
|
||||
export default defineApplication({
|
||||
universalIdentifier: '94f7db30-59e5-4b09-a5fe-64cd3d4a65b0',
|
||||
displayName: 'Self Hosting',
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import {
|
||||
type ObjectRecordUpdateEvent,
|
||||
} from 'twenty-sdk';
|
||||
import { SELF_HOSTING_USER_NAME_SINGULAR } from 'src/objects/selfHostingUser.object';
|
||||
import { CoreApiClient } from 'twenty-sdk/clients';
|
||||
import { CoreApiClient } from 'twenty-client-sdk/core';
|
||||
|
||||
type SelfHostingUser = {
|
||||
id: string;
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
import { defineLogicFunction, type RoutePayload } from 'twenty-sdk';
|
||||
import { CoreApiClient } from 'twenty-sdk/clients';
|
||||
import { CoreApiClient } from 'twenty-client-sdk/core';
|
||||
import { type TelemetryEvent } from 'src/logic-functions/types/telemetry-event.type';
|
||||
|
||||
export const main = async (
|
||||
|
||||
@@ -4,7 +4,7 @@ import { UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers.const
|
||||
export default defineRole({
|
||||
universalIdentifier:
|
||||
UNIVERSAL_IDENTIFIERS.roles.defaultRole.universalIdentifier,
|
||||
label: 'default role',
|
||||
label: 'Self hosting default role',
|
||||
description: 'Add a description for your role',
|
||||
canReadAllObjectRecords: true,
|
||||
canUpdateAllObjectRecords: true,
|
||||
|
||||
@@ -27,5 +27,16 @@
|
||||
"~/*": ["./*"]
|
||||
}
|
||||
},
|
||||
"exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.spec.ts"]
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"dist",
|
||||
"**/*.test.ts",
|
||||
"**/*.spec.ts",
|
||||
"**/*.integration-test.ts"
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.spec.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
"types": ["vitest/globals", "node"]
|
||||
},
|
||||
"include": ["src/**/*.ts", "src/**/*.tsx"],
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
import tsconfigPaths from 'vite-tsconfig-paths';
|
||||
import { defineConfig } from 'vitest/config';
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
tsconfigPaths({
|
||||
projects: ['tsconfig.spec.json'],
|
||||
ignoreConfigErrors: true,
|
||||
}),
|
||||
],
|
||||
test: {
|
||||
testTimeout: 120_000,
|
||||
hookTimeout: 120_000,
|
||||
include: ['src/**/*.integration-test.ts'],
|
||||
setupFiles: ['src/__tests__/setup-test.ts'],
|
||||
env: {
|
||||
TWENTY_API_URL: process.env.TWENTY_API_URL ?? 'http://localhost:2020',
|
||||
TWENTY_API_KEY:
|
||||
process.env.TWENTY_API_KEY ??
|
||||
// Tim Apple (admin) access token for twenty-app-dev
|
||||
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC05ZTNiLTQ2ZDQtYTU1Ni04OGI5ZGRjMmIwMzQiLCJ1c2VySWQiOiIyMDIwMjAyMC05ZTNiLTQ2ZDQtYTU1Ni04OGI5ZGRjMmIwMzQiLCJ3b3Jrc3BhY2VJZCI6IjIwMjAyMDIwLTFjMjUtNGQwMi1iZjI1LTZhZWNjZjdlYTQxOSIsIndvcmtzcGFjZU1lbWJlcklkIjoiMjAyMDIwMjAtMDY4Ny00YzQxLWI3MDctZWQxYmZjYTk3MmE3IiwidXNlcldvcmtzcGFjZUlkIjoiMjAyMDIwMjAtOWUzYi00NmQ0LWE1NTYtODhiOWRkYzJiMDM1IiwidHlwZSI6IkFDQ0VTUyIsImF1dGhQcm92aWRlciI6InBhc3N3b3JkIiwiaWF0IjoxNzUxMjgxNzA0LCJleHAiOjQ5MDQ4ODE3MDR9.9S4wc0MOr5iczsomlFxZdOHD1IRDS4dnRSwNVNpctF4',
|
||||
},
|
||||
},
|
||||
});
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "twenty-client-sdk",
|
||||
"version": "1.22.0-canary.3",
|
||||
"version": "1.22.0",
|
||||
"sideEffects": false,
|
||||
"license": "AGPL-3.0",
|
||||
"scripts": {
|
||||
|
||||
@@ -583,6 +583,7 @@ type ViewField {
|
||||
workspaceId: UUID!
|
||||
createdAt: DateTime!
|
||||
updatedAt: DateTime!
|
||||
isActive: Boolean!
|
||||
deletedAt: DateTime
|
||||
isOverridden: Boolean @deprecated(reason: "isOverridden is deprecated")
|
||||
}
|
||||
@@ -691,6 +692,7 @@ type ViewFieldGroup {
|
||||
workspaceId: UUID!
|
||||
createdAt: DateTime!
|
||||
updatedAt: DateTime!
|
||||
isActive: Boolean!
|
||||
deletedAt: DateTime
|
||||
viewFields: [ViewField!]!
|
||||
isOverridden: Boolean! @deprecated(reason: "isOverridden is deprecated")
|
||||
@@ -733,6 +735,7 @@ enum ViewType {
|
||||
KANBAN
|
||||
CALENDAR
|
||||
FIELDS_WIDGET
|
||||
TABLE_WIDGET
|
||||
}
|
||||
|
||||
enum ViewKey {
|
||||
@@ -790,7 +793,6 @@ type Workspace {
|
||||
isCustomDomainEnabled: Boolean!
|
||||
editableProfileFields: [String!]
|
||||
defaultRole: Role
|
||||
version: String
|
||||
fastModel: String!
|
||||
smartModel: String!
|
||||
aiAdditionalInstructions: String
|
||||
@@ -899,6 +901,7 @@ type PageLayoutWidget {
|
||||
conditionalAvailabilityExpression: String
|
||||
createdAt: DateTime!
|
||||
updatedAt: DateTime!
|
||||
isActive: Boolean!
|
||||
deletedAt: DateTime
|
||||
isOverridden: Boolean @deprecated(reason: "isOverridden is deprecated")
|
||||
}
|
||||
@@ -1234,6 +1237,7 @@ type PageLayoutTab {
|
||||
layoutMode: PageLayoutTabLayoutMode
|
||||
createdAt: DateTime!
|
||||
updatedAt: DateTime!
|
||||
isActive: Boolean!
|
||||
deletedAt: DateTime
|
||||
isOverridden: Boolean @deprecated(reason: "isOverridden is deprecated")
|
||||
}
|
||||
@@ -1254,6 +1258,7 @@ enum PageLayoutType {
|
||||
RECORD_INDEX
|
||||
RECORD_PAGE
|
||||
DASHBOARD
|
||||
STANDALONE_PAGE
|
||||
}
|
||||
|
||||
type Analytics {
|
||||
@@ -1482,6 +1487,7 @@ type NavigationMenuItem {
|
||||
icon: String
|
||||
color: String
|
||||
folderId: UUID
|
||||
pageLayoutId: UUID
|
||||
position: Float!
|
||||
applicationId: UUID
|
||||
createdAt: DateTime!
|
||||
@@ -1495,6 +1501,7 @@ enum NavigationMenuItemType {
|
||||
LINK
|
||||
OBJECT
|
||||
RECORD
|
||||
PAGE_LAYOUT
|
||||
}
|
||||
|
||||
type ObjectRecordEventProperties {
|
||||
@@ -1573,9 +1580,26 @@ enum LogicFunctionExecutionStatus {
|
||||
ERROR
|
||||
}
|
||||
|
||||
type BillingTrialPeriod {
|
||||
duration: Float!
|
||||
isCreditCardRequired: Boolean!
|
||||
type FeatureFlag {
|
||||
key: FeatureFlagKey!
|
||||
value: Boolean!
|
||||
}
|
||||
|
||||
enum FeatureFlagKey {
|
||||
IS_UNIQUE_INDEXES_ENABLED
|
||||
IS_JSON_FILTER_ENABLED
|
||||
IS_AI_ENABLED
|
||||
IS_COMMAND_MENU_ITEM_ENABLED
|
||||
IS_MARKETPLACE_SETTING_TAB_VISIBLE
|
||||
IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED
|
||||
IS_PUBLIC_DOMAIN_ENABLED
|
||||
IS_EMAILING_DOMAIN_ENABLED
|
||||
IS_JUNCTION_RELATIONS_ENABLED
|
||||
IS_DRAFT_EMAIL_ENABLED
|
||||
IS_CONNECTED_ACCOUNT_MIGRATED
|
||||
IS_RICH_TEXT_V1_MIGRATED
|
||||
IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED
|
||||
IS_DATASOURCE_MIGRATED
|
||||
}
|
||||
|
||||
type WorkspaceUrls {
|
||||
@@ -1583,6 +1607,89 @@ type WorkspaceUrls {
|
||||
subdomainUrl: String!
|
||||
}
|
||||
|
||||
type UserInfo {
|
||||
id: UUID!
|
||||
email: String!
|
||||
firstName: String
|
||||
lastName: String
|
||||
createdAt: DateTime!
|
||||
}
|
||||
|
||||
type WorkspaceInfo {
|
||||
id: UUID!
|
||||
name: String!
|
||||
allowImpersonation: Boolean!
|
||||
logo: String
|
||||
totalUsers: Float!
|
||||
activationStatus: WorkspaceActivationStatus!
|
||||
createdAt: DateTime!
|
||||
workspaceUrls: WorkspaceUrls!
|
||||
users: [UserInfo!]!
|
||||
featureFlags: [FeatureFlag!]!
|
||||
}
|
||||
|
||||
type UserLookup {
|
||||
user: UserInfo!
|
||||
workspaces: [WorkspaceInfo!]!
|
||||
}
|
||||
|
||||
type AdminPanelRecentUser {
|
||||
id: UUID!
|
||||
email: String!
|
||||
firstName: String
|
||||
lastName: String
|
||||
createdAt: DateTime!
|
||||
workspaceName: String
|
||||
workspaceId: UUID
|
||||
}
|
||||
|
||||
type AdminPanelTopWorkspace {
|
||||
id: UUID!
|
||||
name: String!
|
||||
totalUsers: Int!
|
||||
subdomain: String!
|
||||
}
|
||||
|
||||
type AdminWorkspaceChatThread {
|
||||
id: UUID!
|
||||
title: String
|
||||
totalInputTokens: Int!
|
||||
totalOutputTokens: Int!
|
||||
conversationSize: Int!
|
||||
createdAt: DateTime!
|
||||
updatedAt: DateTime!
|
||||
}
|
||||
|
||||
type AdminChatMessagePart {
|
||||
type: String!
|
||||
textContent: String
|
||||
toolName: String
|
||||
}
|
||||
|
||||
type AdminChatMessage {
|
||||
id: UUID!
|
||||
role: AgentMessageRole!
|
||||
parts: [AdminChatMessagePart!]!
|
||||
createdAt: DateTime!
|
||||
}
|
||||
|
||||
"""Role of a message in a chat thread"""
|
||||
enum AgentMessageRole {
|
||||
SYSTEM
|
||||
USER
|
||||
ASSISTANT
|
||||
}
|
||||
|
||||
type AdminChatThreadMessages {
|
||||
thread: AdminWorkspaceChatThread!
|
||||
messages: [AdminChatMessage!]!
|
||||
}
|
||||
|
||||
type BillingTrialPeriod {
|
||||
duration: Float!
|
||||
isCreditCardRequired: Boolean!
|
||||
}
|
||||
|
||||
type SSOIdentityProvider {
|
||||
id: UUID!
|
||||
name: String!
|
||||
@@ -1625,6 +1732,12 @@ type PublicWorkspaceData {
|
||||
workspaceUrls: WorkspaceUrls!
|
||||
}
|
||||
|
||||
type PublicWorkspaceDataSummary {
|
||||
id: UUID!
|
||||
logo: String
|
||||
displayName: String
|
||||
}
|
||||
|
||||
type NativeModelCapabilities {
|
||||
webSearch: Boolean
|
||||
twitterSearch: Boolean
|
||||
@@ -1729,24 +1842,6 @@ type PublicFeatureFlag {
|
||||
metadata: PublicFeatureFlagMetadata!
|
||||
}
|
||||
|
||||
enum FeatureFlagKey {
|
||||
IS_UNIQUE_INDEXES_ENABLED
|
||||
IS_JSON_FILTER_ENABLED
|
||||
IS_AI_ENABLED
|
||||
IS_COMMAND_MENU_ITEM_ENABLED
|
||||
IS_MARKETPLACE_SETTING_TAB_VISIBLE
|
||||
IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED
|
||||
IS_PUBLIC_DOMAIN_ENABLED
|
||||
IS_EMAILING_DOMAIN_ENABLED
|
||||
IS_JUNCTION_RELATIONS_ENABLED
|
||||
IS_DRAFT_EMAIL_ENABLED
|
||||
IS_CONNECTED_ACCOUNT_MIGRATED
|
||||
IS_RICH_TEXT_V1_MIGRATED
|
||||
IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED
|
||||
IS_RECORD_TABLE_WIDGET_ENABLED
|
||||
IS_DATASOURCE_MIGRATED
|
||||
}
|
||||
|
||||
type ClientConfigMaintenanceMode {
|
||||
startAt: DateTime!
|
||||
endAt: DateTime!
|
||||
@@ -1930,34 +2025,6 @@ type SystemHealth {
|
||||
services: [SystemHealthService!]!
|
||||
}
|
||||
|
||||
type FeatureFlag {
|
||||
key: FeatureFlagKey!
|
||||
value: Boolean!
|
||||
}
|
||||
|
||||
type UserInfo {
|
||||
id: UUID!
|
||||
email: String!
|
||||
firstName: String
|
||||
lastName: String
|
||||
}
|
||||
|
||||
type WorkspaceInfo {
|
||||
id: UUID!
|
||||
name: String!
|
||||
allowImpersonation: Boolean!
|
||||
logo: String
|
||||
totalUsers: Float!
|
||||
workspaceUrls: WorkspaceUrls!
|
||||
users: [UserInfo!]!
|
||||
featureFlags: [FeatureFlag!]!
|
||||
}
|
||||
|
||||
type UserLookup {
|
||||
user: UserInfo!
|
||||
workspaces: [WorkspaceInfo!]!
|
||||
}
|
||||
|
||||
type VersionInfo {
|
||||
currentVersion: String
|
||||
latestVersion: String!
|
||||
@@ -2139,30 +2206,18 @@ type DeletedWorkspaceMember {
|
||||
userWorkspaceId: UUID
|
||||
}
|
||||
|
||||
type BillingEntitlement {
|
||||
key: BillingEntitlementKey!
|
||||
value: Boolean!
|
||||
type Relation {
|
||||
type: RelationType!
|
||||
sourceObjectMetadata: Object!
|
||||
targetObjectMetadata: Object!
|
||||
sourceFieldMetadata: Field!
|
||||
targetFieldMetadata: Field!
|
||||
}
|
||||
|
||||
enum BillingEntitlementKey {
|
||||
SSO
|
||||
CUSTOM_DOMAIN
|
||||
RLS
|
||||
AUDIT_LOGS
|
||||
}
|
||||
|
||||
type DomainRecord {
|
||||
validationType: String!
|
||||
type: String!
|
||||
status: String!
|
||||
key: String!
|
||||
value: String!
|
||||
}
|
||||
|
||||
type DomainValidRecords {
|
||||
id: UUID!
|
||||
domain: String!
|
||||
records: [DomainRecord!]!
|
||||
"""Relation type"""
|
||||
enum RelationType {
|
||||
ONE_TO_MANY
|
||||
MANY_TO_ONE
|
||||
}
|
||||
|
||||
type IndexEdge {
|
||||
@@ -2264,25 +2319,6 @@ type ObjectFieldsConnection {
|
||||
edges: [FieldEdge!]!
|
||||
}
|
||||
|
||||
type UpsertRowLevelPermissionPredicatesResult {
|
||||
predicates: [RowLevelPermissionPredicate!]!
|
||||
predicateGroups: [RowLevelPermissionPredicateGroup!]!
|
||||
}
|
||||
|
||||
type Relation {
|
||||
type: RelationType!
|
||||
sourceObjectMetadata: Object!
|
||||
targetObjectMetadata: Object!
|
||||
sourceFieldMetadata: Field!
|
||||
targetFieldMetadata: Field!
|
||||
}
|
||||
|
||||
"""Relation type"""
|
||||
enum RelationType {
|
||||
ONE_TO_MANY
|
||||
MANY_TO_ONE
|
||||
}
|
||||
|
||||
type FieldConnection {
|
||||
"""Paging information"""
|
||||
pageInfo: PageInfo!
|
||||
@@ -2291,6 +2327,37 @@ type FieldConnection {
|
||||
edges: [FieldEdge!]!
|
||||
}
|
||||
|
||||
type BillingEntitlement {
|
||||
key: BillingEntitlementKey!
|
||||
value: Boolean!
|
||||
}
|
||||
|
||||
enum BillingEntitlementKey {
|
||||
SSO
|
||||
CUSTOM_DOMAIN
|
||||
RLS
|
||||
AUDIT_LOGS
|
||||
}
|
||||
|
||||
type DomainRecord {
|
||||
validationType: String!
|
||||
type: String!
|
||||
status: String!
|
||||
key: String!
|
||||
value: String!
|
||||
}
|
||||
|
||||
type DomainValidRecords {
|
||||
id: UUID!
|
||||
domain: String!
|
||||
records: [DomainRecord!]!
|
||||
}
|
||||
|
||||
type UpsertRowLevelPermissionPredicatesResult {
|
||||
predicates: [RowLevelPermissionPredicate!]!
|
||||
predicateGroups: [RowLevelPermissionPredicateGroup!]!
|
||||
}
|
||||
|
||||
type AuthToken {
|
||||
token: String!
|
||||
expiresAt: DateTime!
|
||||
@@ -2457,6 +2524,7 @@ type File {
|
||||
|
||||
type MarketplaceApp {
|
||||
id: String!
|
||||
universalIdentifier: String!
|
||||
name: String!
|
||||
description: String!
|
||||
icon: String!
|
||||
@@ -2526,6 +2594,7 @@ type Location {
|
||||
}
|
||||
|
||||
type PlaceDetailsResult {
|
||||
street: String
|
||||
state: String
|
||||
postcode: String
|
||||
city: String
|
||||
@@ -2659,6 +2728,7 @@ enum EngineComponentKey {
|
||||
|
||||
enum CommandMenuItemAvailabilityType {
|
||||
GLOBAL
|
||||
GLOBAL_OBJECT_CONTEXT
|
||||
RECORD_SELECTION
|
||||
FALLBACK
|
||||
}
|
||||
@@ -3281,10 +3351,14 @@ type Query {
|
||||
currentUser: User!
|
||||
currentWorkspace: Workspace!
|
||||
getPublicWorkspaceDataByDomain(origin: String): PublicWorkspaceData!
|
||||
getPublicWorkspaceDataById(id: UUID!): PublicWorkspaceDataSummary!
|
||||
getSSOIdentityProviders: [FindAvailableSSOIDP!]!
|
||||
getConnectedImapSmtpCaldavAccount(id: UUID!): ConnectedImapSmtpCaldavAccount!
|
||||
getAutoCompleteAddress(address: String!, token: String!, country: String, isFieldCity: Boolean): [AutocompleteResult!]!
|
||||
getAddressDetails(placeId: String!, token: String!): PlaceDetailsResult!
|
||||
userLookupAdminPanel(userIdentifier: String!): UserLookup!
|
||||
adminPanelRecentUsers(searchTerm: String = ""): [AdminPanelRecentUser!]!
|
||||
adminPanelTopWorkspaces(searchTerm: String = ""): [AdminPanelTopWorkspace!]!
|
||||
getConfigVariablesGrouped: ConfigVariables!
|
||||
getSystemHealthStatus: SystemHealth!
|
||||
getIndicatorHealthStatus(indicatorId: HealthIndicatorId!): AdminPanelHealthServiceData!
|
||||
@@ -3299,6 +3373,10 @@ type Query {
|
||||
getModelsDevSuggestions(providerType: String!): [ModelsDevModelSuggestion!]!
|
||||
getAdminAiUsageByWorkspace(periodStart: DateTime, periodEnd: DateTime): [UsageBreakdownItem!]!
|
||||
getMaintenanceMode: MaintenanceMode
|
||||
workspaceLookupAdminPanel(workspaceId: UUID!): UserLookup!
|
||||
getAdminWorkspaceChatThreads(workspaceId: UUID!): [AdminWorkspaceChatThread!]!
|
||||
getAdminChatThreadMessages(threadId: UUID!): AdminChatThreadMessages!
|
||||
findOneAdminApplicationRegistration(id: String!): ApplicationRegistration!
|
||||
getUsageAnalytics(input: UsageAnalyticsInput): UsageAnalytics!
|
||||
getPostgresCredentials: PostgresCredentials
|
||||
findManyPublicDomains: [PublicDomain!]!
|
||||
@@ -3505,6 +3583,7 @@ type Mutation {
|
||||
updatePageLayout(id: String!, input: UpdatePageLayoutInput!): PageLayout!
|
||||
destroyPageLayout(id: String!): Boolean!
|
||||
updatePageLayoutWithTabsAndWidgets(id: String!, input: UpdatePageLayoutWithTabsInput!): PageLayout!
|
||||
resetPageLayoutToDefault(id: String!): PageLayout!
|
||||
resetPageLayoutWidgetToDefault(id: String!): PageLayoutWidget!
|
||||
resetPageLayoutTabToDefault(id: String!): PageLayoutTab!
|
||||
createPageLayoutWidget(input: CreatePageLayoutWidgetInput!): PageLayoutWidget!
|
||||
@@ -3596,6 +3675,7 @@ type Mutation {
|
||||
verifyTwoFactorAuthenticationMethodForAuthenticatedUser(otp: String!): VerifyTwoFactorAuthenticationMethod!
|
||||
deleteUser: User!
|
||||
deleteUserFromWorkspace(workspaceMemberIdToDelete: String!): UserWorkspace!
|
||||
updateWorkspaceMemberSettings(input: UpdateWorkspaceMemberSettingsInput!): Boolean!
|
||||
updateUserEmail(newEmail: String!, verifyEmailRedirectPath: String): Boolean!
|
||||
resendEmailVerificationToken(email: String!, origin: String!): ResendEmailVerificationToken!
|
||||
activateWorkspace(data: ActivateWorkspaceInput!): Workspace!
|
||||
@@ -3611,7 +3691,6 @@ type Mutation {
|
||||
startChannelSync(connectedAccountId: UUID!): ChannelSyncSuccess!
|
||||
saveImapSmtpCaldavAccount(accountOwnerId: UUID!, handle: String!, connectionParameters: EmailAccountConnectionParameters!, id: UUID): ImapSmtpCaldavConnectionSuccess!
|
||||
updateLabPublicFeatureFlag(input: UpdateLabPublicFeatureFlagInput!): FeatureFlag!
|
||||
userLookupAdminPanel(userIdentifier: String!): UserLookup!
|
||||
updateWorkspaceFeatureFlag(workspaceId: UUID!, featureFlag: String!, value: Boolean!): Boolean!
|
||||
setAdminAiModelEnabled(modelId: String!, enabled: Boolean!): Boolean!
|
||||
setAdminAiModelsEnabled(modelIds: [String!]!, enabled: Boolean!): Boolean!
|
||||
@@ -3675,6 +3754,7 @@ input CreateNavigationMenuItemInput {
|
||||
icon: String
|
||||
color: String
|
||||
folderId: UUID
|
||||
pageLayoutId: UUID
|
||||
position: Float
|
||||
}
|
||||
|
||||
@@ -3693,6 +3773,7 @@ input UpdateNavigationMenuItemInput {
|
||||
link: String
|
||||
icon: String
|
||||
color: String
|
||||
pageLayoutId: UUID
|
||||
}
|
||||
|
||||
"""The `Upload` scalar type represents a file upload."""
|
||||
@@ -4526,9 +4607,15 @@ input UpdateApplicationRegistrationVariableInput {
|
||||
|
||||
input UpdateApplicationRegistrationVariablePayload {
|
||||
value: String
|
||||
resetValue: Boolean
|
||||
description: String
|
||||
}
|
||||
|
||||
input UpdateWorkspaceMemberSettingsInput {
|
||||
workspaceMemberId: UUID!
|
||||
update: JSON!
|
||||
}
|
||||
|
||||
input ActivateWorkspaceInput {
|
||||
displayName: String
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -215,7 +215,8 @@ ENV PG_DATABASE_URL=postgres://twenty:twenty@localhost:5432/default \
|
||||
DISABLE_DB_MIGRATIONS=true \
|
||||
DISABLE_CRON_JOBS_REGISTRATION=true \
|
||||
IS_BILLING_ENABLED=false \
|
||||
SIGN_IN_PREFILLED=true
|
||||
SIGN_IN_PREFILLED=true \
|
||||
APPLICATION_LOG_DRIVER=CONSOLE
|
||||
|
||||
EXPOSE 2020
|
||||
VOLUME ["/data/postgres", "/app/packages/twenty-server/.local-storage"]
|
||||
|
||||
@@ -476,7 +476,7 @@ export default defineLogicFunction({
|
||||
httpRouteTriggerSettings: {
|
||||
path: '/post-card/create',
|
||||
httpMethod: 'GET',
|
||||
isAuthRequired: false,
|
||||
isAuthRequired: true,
|
||||
},
|
||||
/*databaseEventTriggerSettings: {
|
||||
eventName: 'people.created',
|
||||
|
||||
@@ -220,6 +220,7 @@ The scaffolder already started a local Twenty server for you. To manage it later
|
||||
|---------|-------------|
|
||||
| `yarn twenty server start` | Start the local server (pulls image if needed) |
|
||||
| `yarn twenty server start --port 3030` | Start on a custom port |
|
||||
| `yarn twenty server start --test` | Start a separate test instance on port 2021 |
|
||||
| `yarn twenty server stop` | Stop the server (preserves data) |
|
||||
| `yarn twenty server status` | Show server status, URL, and credentials |
|
||||
| `yarn twenty server logs` | Stream server logs |
|
||||
@@ -228,6 +229,20 @@ The scaffolder already started a local Twenty server for you. To manage it later
|
||||
|
||||
Data is persisted across restarts in two Docker volumes (`twenty-app-dev-data` for PostgreSQL, `twenty-app-dev-storage` for files). Use `reset` to wipe everything and start fresh.
|
||||
|
||||
### Running a test instance
|
||||
|
||||
Pass `--test` to any `server` command to manage a second, fully isolated instance — useful for running integration tests or experimenting without touching your main dev data.
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `yarn twenty server start --test` | Start the test instance (defaults to port 2021) |
|
||||
| `yarn twenty server stop --test` | Stop the test instance |
|
||||
| `yarn twenty server status --test` | Show test instance status, URL, and credentials |
|
||||
| `yarn twenty server logs --test` | Stream test instance logs |
|
||||
| `yarn twenty server reset --test` | Wipe test data and start fresh |
|
||||
|
||||
The test instance runs in its own Docker container (`twenty-app-dev-test`) with dedicated volumes (`twenty-app-dev-test-data`, `twenty-app-dev-test-storage`) and config, so it can run in parallel with your main instance without conflicts. Combine `--test` with `--port` to override the default 2021.
|
||||
|
||||
<Note>
|
||||
The server requires **Docker** to be running. If you see a "Docker not running" error, make sure Docker Desktop (or the Docker daemon) is started.
|
||||
</Note>
|
||||
|
||||
@@ -80,6 +80,57 @@ Pre-release tags work as expected: bumping `1.0.0-rc.1` → `1.0.0-rc.2` is allo
|
||||
|
||||
{/* TODO: add screenshot of the Upgrade button */}
|
||||
|
||||
## Automated CI/CD (scaffolded workflows)
|
||||
|
||||
Apps generated with `create-twenty-app` ship with two GitHub Actions workflows out of the box, under `.github/workflows/`. They are ready to run as soon as you push the repo to GitHub — no extra setup is needed for CI, and CD only requires a single secret.
|
||||
|
||||
### CI — `ci.yml`
|
||||
|
||||
Runs integration tests on every push to `main` and every pull request.
|
||||
|
||||
**What it does:**
|
||||
|
||||
1. Checks out your app's source.
|
||||
2. Spawns an isolated Twenty test instance using the `twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main` composite action (the CI equivalent of `yarn twenty server start --test`).
|
||||
3. Enables Corepack, sets up Node.js from your `.nvmrc`, and installs dependencies with `yarn install --immutable`.
|
||||
4. Runs `yarn test`, passing `TWENTY_API_URL` and `TWENTY_API_KEY` from the spawned instance so your tests can talk to a real server.
|
||||
|
||||
**Config knobs:**
|
||||
|
||||
- `TWENTY_VERSION` (env, defaults to `latest`) — pin the Twenty server version used in CI by editing this in `ci.yml`.
|
||||
- Concurrency is grouped by `github.ref` and cancels in-progress runs on new pushes.
|
||||
|
||||
No secrets are required — the test instance is ephemeral and lives only for the duration of the job.
|
||||
|
||||
### CD — `cd.yml`
|
||||
|
||||
Deploys your app to a configured Twenty server on every push to `main`, and optionally from a pull request when the `deploy` label is applied.
|
||||
|
||||
**What it does:**
|
||||
|
||||
1. Checks out the PR head (for labeled PRs) or the pushed commit.
|
||||
2. Runs `twentyhq/twenty/.github/actions/deploy-twenty-app@main` — the CI equivalent of `yarn twenty deploy`.
|
||||
3. Runs `twentyhq/twenty/.github/actions/install-twenty-app@main` so the newly deployed version is installed into the target workspace.
|
||||
|
||||
**Required configuration:**
|
||||
|
||||
| Setting | Where | Purpose |
|
||||
|---------|-------|---------|
|
||||
| `TWENTY_DEPLOY_URL` | `env` in `cd.yml` (defaults to `http://localhost:3000`) | The Twenty server to deploy to. Change this to your real server URL before first use. |
|
||||
| `TWENTY_DEPLOY_API_KEY` | GitHub repo **Settings → Secrets and variables → Actions** | API key with deploy permission on the target server. |
|
||||
|
||||
<Note>
|
||||
The default `TWENTY_DEPLOY_URL` of `http://localhost:3000` is a placeholder — it will not reach anything from a GitHub-hosted runner. Update it to your server's public URL (or use a self-hosted runner with network access) before enabling CD.
|
||||
</Note>
|
||||
|
||||
**Triggering a preview deploy from a PR:**
|
||||
|
||||
Add the `deploy` label to a pull request. The `if:` guard in `cd.yml` will run the job for that PR using the PR's head commit, letting you validate a change on the target server before merging.
|
||||
|
||||
### Pinning the reusable actions
|
||||
|
||||
Both workflows reference reusable actions at `@main`, so action updates in the `twentyhq/twenty` repo are picked up automatically. If you want deterministic builds, replace `@main` with a commit SHA or release tag on each `uses:` line.
|
||||
|
||||
## Publishing to npm
|
||||
|
||||
Publishing to npm makes your app discoverable in the Twenty marketplace. Any Twenty workspace can browse, install, and upgrade marketplace apps directly from the UI.
|
||||
@@ -87,7 +138,7 @@ Publishing to npm makes your app discoverable in the Twenty marketplace. Any Twe
|
||||
### Requirements
|
||||
|
||||
- An [npm](https://www.npmjs.com) account
|
||||
- The `twenty-app` keyword in your `package.json` `keywords` array (already included when you scaffold with `create-twenty-app`)
|
||||
- The `twenty-app` keyword in your `package.json` `keywords` array (add it manually — it is not included by default in the `create-twenty-app` template)
|
||||
|
||||
```json filename="package.json"
|
||||
{
|
||||
|
||||
@@ -476,7 +476,7 @@ export default defineLogicFunction({
|
||||
httpRouteTriggerSettings: {
|
||||
path: '/post-card/create',
|
||||
httpMethod: 'GET',
|
||||
isAuthRequired: false,
|
||||
isAuthRequired: true,
|
||||
},
|
||||
/*databaseEventTriggerSettings: {
|
||||
eventName: 'people.created',
|
||||
|
||||
@@ -220,6 +220,7 @@ npx create-twenty-app@latest my-twenty-app --example postcard
|
||||
| -------------------------------------- | --------------------------------------------- |
|
||||
| `yarn twenty server start` | بدء الخادم المحلي (يسحب الصورة إذا لزم الأمر) |
|
||||
| `yarn twenty server start --port 3030` | ابدأ على منفذ مخصّص |
|
||||
| `yarn twenty server start --test` | ابدأ مثيل اختبار منفصل على المنفذ 2021 |
|
||||
| `yarn twenty server stop` | إيقاف الخادم (مع الحفاظ على البيانات) |
|
||||
| `yarn twenty server status` | عرض حالة الخادم، وعنوان URL، وبيانات الاعتماد |
|
||||
| `yarn twenty server logs` | بث سجلات الخادم |
|
||||
@@ -228,6 +229,20 @@ npx create-twenty-app@latest my-twenty-app --example postcard
|
||||
|
||||
يتم الاحتفاظ بالبيانات عبر عمليات إعادة التشغيل في وحدتي تخزين Docker (`twenty-app-dev-data` لـ PostgreSQL، و`twenty-app-dev-storage` للملفات). استخدم `reset` لمسح كل شيء والبدء من جديد.
|
||||
|
||||
### تشغيل مثيل الاختبار
|
||||
|
||||
مرر `--test` إلى أي أمر `server` لإدارة مثيل ثانٍ معزول تمامًا — مفيد لتشغيل اختبارات التكامل أو للتجربة من دون لمس بيانات التطوير الرئيسية لديك.
|
||||
|
||||
| أمر | الوصف |
|
||||
| ---------------------------------- | ---------------------------------------------------- |
|
||||
| `yarn twenty server start --test` | بدء مثيل الاختبار (المنفذ الافتراضي 2021) |
|
||||
| `yarn twenty server stop --test` | إيقاف مثيل الاختبار |
|
||||
| `yarn twenty server status --test` | عرض حالة مثيل الاختبار، وعنوان URL، وبيانات الاعتماد |
|
||||
| `yarn twenty server logs --test` | بث سجلات مثيل الاختبار |
|
||||
| `yarn twenty server reset --test` | محو بيانات الاختبار والبدء من جديد |
|
||||
|
||||
يعمل مثيل الاختبار في حاوية Docker خاصة به (`twenty-app-dev-test`) مع وحدات تخزين مخصصة (`twenty-app-dev-test-data`, `twenty-app-dev-test-storage`) وتهيئة مستقلة، بحيث يمكنه العمل بالتوازي مع مثيلك الرئيسي من دون تعارضات. اجمع `--test` مع `--port` لتجاوز القيمة الافتراضية 2021.
|
||||
|
||||
<Note>
|
||||
يتطلّب الخادم أن يكون **Docker** قيد التشغيل. إذا ظهرت لك رسالة خطأ "Docker not running"، فتأكّد من تشغيل Docker Desktop (أو خادوم Docker).
|
||||
</Note>
|
||||
|
||||
@@ -80,6 +80,57 @@ yarn twenty deploy
|
||||
|
||||
{/* TODO: add screenshot of the Upgrade button */}
|
||||
|
||||
## CI/CD المؤتمتة (مهام سير عمل مُولَّدة بالقوالب)
|
||||
|
||||
التطبيقات المُولَّدة باستخدام `create-twenty-app` تأتي افتراضيًا مع مهمَّتي سير عمل من GitHub Actions ضمن `.github/workflows/`. هي جاهزة للتشغيل بمجرد دفع المستودع إلى GitHub — لا حاجة لأي إعداد إضافي لـ CI، وCD يتطلّب سرًّا واحدًا فقط.
|
||||
|
||||
### CI — `ci.yml`
|
||||
|
||||
يشغّل اختبارات التكامل عند كل دفع إلى `main` وعند كل طلب سحب.
|
||||
|
||||
**ماذا يفعل:**
|
||||
|
||||
1. يجلب مصدر تطبيقك.
|
||||
2. ينشئ مثيلاً اختبارياً معزولاً من Twenty باستخدام الإجراء المركّب `twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main` (المكافئ في CI للأمر `yarn twenty server start --test`).
|
||||
3. يُفعِّل Corepack، ويُعدّ Node.js من ملف `.nvmrc` لديك، ويثبّت التبعيات بواسطة `yarn install --immutable`.
|
||||
4. يشغّل `yarn test`، ويمرّر `TWENTY_API_URL` و`TWENTY_API_KEY` من المثيل الذي تم إنشاؤه بحيث تتمكّن اختباراتك من التواصل مع خادم حقيقي.
|
||||
|
||||
**خيارات التكوين:**
|
||||
|
||||
* `TWENTY_VERSION` (متغيّر بيئة، القيمة الافتراضية `latest`) — ثبّت نسخة خادم Twenty المستخدمة في CI عبر تعديل هذا في `ci.yml`.
|
||||
* يتم تجميع التشغيل المتزامن حسب `github.ref` ويلغي التشغيلات قيد التقدّم عند أي دفع جديد.
|
||||
|
||||
لا تتطلّب أي أسرار — مثيل الاختبار مؤقّت ويستمر فقط طوال مدّة المهمّة.
|
||||
|
||||
### CD — `cd.yml`
|
||||
|
||||
ينشر تطبيقك إلى خادم Twenty مُهيّأ عند كل دفع إلى `main`، وبشكل اختياري من طلب سحب عند تطبيق الوسم `deploy`.
|
||||
|
||||
**ماذا يفعل:**
|
||||
|
||||
1. يجلب رأس طلب السحب (للطلبات الموسومة) أو الالتزام المدفوع.
|
||||
2. يشغّل `twentyhq/twenty/.github/actions/deploy-twenty-app@main` — وهو المكافئ في CI للأمر `yarn twenty deploy`.
|
||||
3. يشغّل `twentyhq/twenty/.github/actions/install-twenty-app@main` بحيث تُثبَّت النسخة المُنشَرة حديثًا في مساحة العمل المستهدفة.
|
||||
|
||||
**التكوين المطلوب:**
|
||||
|
||||
| الإعداد | حيث | الغرض |
|
||||
| ----------------------- | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
|
||||
| `TWENTY_DEPLOY_URL` | `env` في `cd.yml` (القيمة الافتراضية `http://localhost:3000`) | خادم Twenty الذي سيتم النشر إليه. غيّر هذا إلى عنوان URL لخادمك الحقيقي قبل أول استخدام. |
|
||||
| `TWENTY_DEPLOY_API_KEY` | في مستودع GitHub **Settings → Secrets and variables → Actions** | مفتاح API يمتلك إذن النشر على الخادم المستهدف. |
|
||||
|
||||
<Note>
|
||||
القيمة الافتراضية لـ `TWENTY_DEPLOY_URL` وهي `http://localhost:3000` مجرد عنصر نائب — لن تصل إلى أي شيء من مُشغِّل مستضاف لدى GitHub. حدّثها إلى عنوان URL العام لخادمك (أو استخدم مُشغِّلًا مستضافًا ذاتيًا مع وصول شبكي) قبل تمكين CD.
|
||||
</Note>
|
||||
|
||||
**تشغيل نشر معاينة من طلب سحب:**
|
||||
|
||||
أضِف الوسم `deploy` إلى طلب سحب. الشرط `if:` في `cd.yml` سيشغّل المهمّة لذلك الطلب مستخدمًا التزام رأس الطلب، مما يتيح لك التحقّق من التغيير على الخادم المستهدف قبل الدمج.
|
||||
|
||||
### تثبيت الإجراءات القابلة لإعادة الاستخدام
|
||||
|
||||
يشير كلا سيرَي العمل إلى إجراءات قابلة لإعادة الاستخدام عند `@main`، لذا تُلتقط تحديثات الإجراءات في مستودع `twentyhq/twenty` تلقائيًا. إذا كنت تريد بناءات حتمية، فاستبدِل `@main` بقيمة SHA لالتزام أو بوسم إصدار في كل سطر `uses:`.
|
||||
|
||||
## النشر على npm
|
||||
|
||||
يُتيح النشر على npm إمكانية العثور على تطبيقك في سوق Twenty. يمكن لأي مساحة عمل في Twenty استعراض تطبيقات السوق وتثبيتها وترقيتها مباشرةً من واجهة المستخدم.
|
||||
@@ -87,7 +138,7 @@ yarn twenty deploy
|
||||
### المتطلبات
|
||||
|
||||
* حساب على [npm](https://www.npmjs.com)
|
||||
* الكلمة المفتاحية `twenty-app` في مصفوفة `keywords` في `package.json` (موجودة مسبقًا عند تهيئة المشروع باستخدام `create-twenty-app`)
|
||||
* الكلمة المفتاحية `twenty-app` في مصفوفة `keywords` في `package.json` (أضفها يدويًا — فهي غير مضمنة افتراضيًا في قالب `create-twenty-app`)
|
||||
|
||||
```json filename="package.json"
|
||||
{
|
||||
|
||||
@@ -476,7 +476,7 @@ export default defineLogicFunction({
|
||||
httpRouteTriggerSettings: {
|
||||
path: '/post-card/create',
|
||||
httpMethod: 'GET',
|
||||
isAuthRequired: false,
|
||||
isAuthRequired: true,
|
||||
},
|
||||
/*databaseEventTriggerSettings: {
|
||||
eventName: 'people.created',
|
||||
|
||||
@@ -220,6 +220,7 @@ Nástroj pro vytvoření kostry vám již spustil lokální server Twenty. Pro j
|
||||
| -------------------------------------- | ------------------------------------------------------ |
|
||||
| `yarn twenty server start` | Spustí lokální server (v případě potřeby stáhne image) |
|
||||
| `yarn twenty server start --port 3030` | Spustí na vlastním portu |
|
||||
| `yarn twenty server start --test` | Spusťte samostatnou testovací instanci na portu 2021 |
|
||||
| `yarn twenty server stop` | Zastaví server (zachová data) |
|
||||
| `yarn twenty server status` | Zobrazí stav serveru, URL a přihlašovací údaje |
|
||||
| `yarn twenty server logs` | Streamuje protokoly serveru |
|
||||
@@ -228,6 +229,20 @@ Nástroj pro vytvoření kostry vám již spustil lokální server Twenty. Pro j
|
||||
|
||||
Data přetrvávají při restartech ve dvou svazcích Dockeru (`twenty-app-dev-data` pro PostgreSQL, `twenty-app-dev-storage` pro soubory). Pomocí `reset` vymažte vše a začněte znovu.
|
||||
|
||||
### Spuštění testovací instance
|
||||
|
||||
Předejte volbu `--test` libovolnému příkazu `server` pro správu druhé, plně izolované instance — užitečné pro spouštění integračních testů nebo experimentování, aniž byste se dotkli svých hlavních vývojových dat.
|
||||
|
||||
| Příkaz | Popis |
|
||||
| ---------------------------------- | --------------------------------------------------------- |
|
||||
| `yarn twenty server start --test` | Spustí testovací instanci (výchozí port je 2021) |
|
||||
| `yarn twenty server stop --test` | Zastaví testovací instanci |
|
||||
| `yarn twenty server status --test` | Zobrazí stav testovací instance, URL a přihlašovací údaje |
|
||||
| `yarn twenty server logs --test` | Streamuje protokoly testovací instance |
|
||||
| `yarn twenty server reset --test` | Vymaže testovací data a začne znovu |
|
||||
|
||||
Testovací instance běží ve vlastním kontejneru Docker (`twenty-app-dev-test`) s vyhrazenými svazky (`twenty-app-dev-test-data`, `twenty-app-dev-test-storage`) a konfigurací, takže může běžet paralelně s vaší hlavní instancí bez konfliktů. Zkombinujte `--test` s `--port` pro změnu výchozího portu 2021.
|
||||
|
||||
<Note>
|
||||
Server vyžaduje, aby **Docker** běžel. Pokud vidíte chybu "Docker not running", ujistěte se, že je spuštěný Docker Desktop (nebo démon Dockeru).
|
||||
</Note>
|
||||
|
||||
@@ -80,6 +80,57 @@ Předběžné tagy fungují podle očekávání: zvýšení z `1.0.0-rc.1` → `
|
||||
|
||||
{/* TODO: add screenshot of the Upgrade button */}
|
||||
|
||||
## Automatizované CI/CD (předpřipravené workflowy)
|
||||
|
||||
Aplikace vygenerované pomocí `create-twenty-app` jsou hned připravené se dvěma workflowy GitHub Actions ve složce `.github/workflows/`. Jsou připravené ke spuštění hned, jakmile repozitář pushnete na GitHub — pro CI není potřeba žádné další nastavení a CD vyžaduje pouze jeden secret.
|
||||
|
||||
### CI — `ci.yml`
|
||||
|
||||
Automaticky spouští integrační testy při každém pushi do `main` a u pull requestů.
|
||||
|
||||
**K čemu slouží:**
|
||||
|
||||
1. Provede checkout zdrojového kódu vaší aplikace.
|
||||
2. Spustí izolovanou testovací instanci Twenty pomocí složené akce `twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main` (ekvivalent v CI k `yarn twenty server start --test`).
|
||||
3. Povolí Corepack, nastaví Node.js podle vašeho `.nvmrc` a nainstaluje závislosti pomocí `yarn install --immutable`.
|
||||
4. Spustí `yarn test` a předá `TWENTY_API_URL` a `TWENTY_API_KEY` ze spuštěné instance, aby vaše testy mohly komunikovat se skutečným serverem.
|
||||
|
||||
**Konfigurační volby:**
|
||||
|
||||
* `TWENTY_VERSION` (env, výchozí hodnota `latest`) — uzamkněte v CI používanou verzi serveru Twenty úpravou této hodnoty v `ci.yml`.
|
||||
* Souběžné běhy jsou seskupeny podle `github.ref` a při nových pushích ruší právě probíhající běhy.
|
||||
|
||||
Nejsou potřeba žádné secrety — testovací instance je efemérní a existuje pouze po dobu běhu úlohy.
|
||||
|
||||
### CD — `cd.yml`
|
||||
|
||||
Nasazuje vaši aplikaci na nakonfigurovaný server Twenty při každém pushi do `main` a volitelně také z pull requestu, pokud je přidán štítek `deploy`.
|
||||
|
||||
**K čemu slouží:**
|
||||
|
||||
1. Provede checkout headu PR (u označených PR) nebo pushnutého commitu.
|
||||
2. Spustí `twentyhq/twenty/.github/actions/deploy-twenty-app@main` — ekvivalent v CI k `yarn twenty deploy`.
|
||||
3. Spustí `twentyhq/twenty/.github/actions/install-twenty-app@main`, aby se nově nasazená verze nainstalovala do cílového workspace.
|
||||
|
||||
**Požadovaná konfigurace:**
|
||||
|
||||
| Nastavení | Kde | Účel |
|
||||
| ----------------------- | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
||||
| `TWENTY_DEPLOY_URL` | `env` v `cd.yml` (výchozí `http://localhost:3000`) | Server Twenty, na který se nasazuje. Před prvním použitím to změňte na skutečnou URL vašeho serveru. |
|
||||
| `TWENTY_DEPLOY_API_KEY` | GitHub repozitář **Settings → Secrets and variables → Actions** | API klíč s oprávněním k nasazení na cílovém serveru. |
|
||||
|
||||
<Note>
|
||||
Výchozí `TWENTY_DEPLOY_URL` `http://localhost:3000` je pouze zástupná hodnota — z runneru hostovaného GitHubem tato adresa nebude dosažitelná. Před povolením CD ji aktualizujte na veřejnou URL vašeho serveru (nebo použijte self-hosted runner s přístupem do sítě).
|
||||
</Note>
|
||||
|
||||
**Spuštění náhledového nasazení z PR:**
|
||||
|
||||
Přidejte k pull requestu štítek `deploy`. Podmínka `if:` v `cd.yml` spustí úlohu pro dané PR s použitím head commitu PR, což vám umožní ověřit změnu na cílovém serveru před sloučením.
|
||||
|
||||
### Připnutí verzí znovupoužitelných akcí
|
||||
|
||||
Obě workflowy odkazují na znovupoužitelné akce na `@main`, takže aktualizace akcí v repozitáři `twentyhq/twenty` se přeberou automaticky. Pokud chcete deterministická sestavení, nahraďte `@main` v každém řádku `uses:` za commit SHA nebo tag vydání.
|
||||
|
||||
## Publikování na npm
|
||||
|
||||
Publikování na npm zajistí, že bude vaše aplikace dohledatelná v Marketplace Twenty. Jakýkoli pracovní prostor Twenty může procházet, instalovat a aktualizovat aplikace z Marketplace přímo z UI.
|
||||
@@ -87,7 +138,7 @@ Publikování na npm zajistí, že bude vaše aplikace dohledatelná v Marketpla
|
||||
### Požadavky
|
||||
|
||||
* Účet na [npm](https://www.npmjs.com)
|
||||
* Klíčové slovo `twenty-app` ve vašem poli `keywords` v souboru `package.json` (již je zahrnuto, když založíte projekt pomocí `create-twenty-app`)
|
||||
* Klíčové slovo `twenty-app` ve vašem poli `keywords` v souboru `package.json` (přidejte je ručně — ve výchozím nastavení není zahrnuto v šabloně `create-twenty-app`)
|
||||
|
||||
```json filename="package.json"
|
||||
{
|
||||
|
||||
@@ -476,7 +476,7 @@ export default defineLogicFunction({
|
||||
httpRouteTriggerSettings: {
|
||||
path: '/post-card/create',
|
||||
httpMethod: 'GET',
|
||||
isAuthRequired: false,
|
||||
isAuthRequired: true,
|
||||
},
|
||||
/*databaseEventTriggerSettings: {
|
||||
eventName: 'people.created',
|
||||
|
||||
@@ -220,6 +220,7 @@ Der Scaffolder hat bereits einen lokalen Twenty-Server für Sie gestartet. Um ih
|
||||
| -------------------------------------- | ----------------------------------------------------------- |
|
||||
| `yarn twenty server start` | Lokalen Server starten (lädt das Image bei Bedarf herunter) |
|
||||
| `yarn twenty server start --port 3030` | Auf einem benutzerdefinierten Port starten |
|
||||
| `yarn twenty server start --test` | Starten Sie eine separate Testinstanz auf Port 2021 |
|
||||
| `yarn twenty server stop` | Server stoppen (Daten bleiben erhalten) |
|
||||
| `yarn twenty server status` | Serverstatus, URL und Anmeldedaten anzeigen |
|
||||
| `yarn twenty server logs` | Serverprotokolle streamen |
|
||||
@@ -228,6 +229,20 @@ Der Scaffolder hat bereits einen lokalen Twenty-Server für Sie gestartet. Um ih
|
||||
|
||||
Daten bleiben über Neustarts hinweg in zwei Docker-Volumes bestehen (`twenty-app-dev-data` für PostgreSQL, `twenty-app-dev-storage` für Dateien). Verwenden Sie `reset`, um alles zu löschen und neu zu beginnen.
|
||||
|
||||
### Eine Testinstanz ausführen
|
||||
|
||||
Übergeben Sie `--test` an jeden `server`-Befehl, um eine zweite, vollständig isolierte Instanz zu verwalten — nützlich, um Integrationstests auszuführen oder zu experimentieren, ohne Ihre Hauptentwicklungsdaten anzutasten.
|
||||
|
||||
| Befehl | Beschreibung |
|
||||
| ---------------------------------- | ----------------------------------------------------- |
|
||||
| `yarn twenty server start --test` | Die Testinstanz starten (standardmäßig Port 2021) |
|
||||
| `yarn twenty server stop --test` | Die Testinstanz stoppen |
|
||||
| `yarn twenty server status --test` | Status, URL und Anmeldedaten der Testinstanz anzeigen |
|
||||
| `yarn twenty server logs --test` | Protokolle der Testinstanz streamen |
|
||||
| `yarn twenty server reset --test` | Alle Testdaten löschen und neu starten |
|
||||
|
||||
Die Testinstanz läuft in einem eigenen Docker-Container (`twenty-app-dev-test`) mit dedizierten Volumes (`twenty-app-dev-test-data`, `twenty-app-dev-test-storage`) und eigener Konfiguration, sodass sie parallel zu Ihrer Hauptinstanz ohne Konflikte ausgeführt werden kann. Kombinieren Sie `--test` mit `--port`, um den Standardport 2021 zu überschreiben.
|
||||
|
||||
<Note>
|
||||
Der Server erfordert, dass **Docker** läuft. Wenn der Fehler "Docker not running" angezeigt wird, stellen Sie sicher, dass Docker Desktop (oder der Docker-Daemon) gestartet ist.
|
||||
</Note>
|
||||
|
||||
@@ -80,6 +80,57 @@ Pre-Release-Tags funktionieren wie erwartet: Das Erhöhen von `1.0.0-rc.1` → `
|
||||
|
||||
{/* TODO: add screenshot of the Upgrade button */}
|
||||
|
||||
## Automatisiertes CI/CD (vorgefertigte Workflows)
|
||||
|
||||
Apps, die mit `create-twenty-app` erzeugt wurden, enthalten von Haus aus zwei GitHub-Actions-Workflows unter `.github/workflows/`. Sie sind einsatzbereit, sobald Sie das Repository zu GitHub pushen — für CI ist keine zusätzliche Einrichtung erforderlich, und für CD ist nur ein einziges Secret nötig.
|
||||
|
||||
### CI — `ci.yml`
|
||||
|
||||
Führt Ihre Integrationstests bei jedem Push auf `main` und bei Pull Requests aus.
|
||||
|
||||
**Was sie macht:**
|
||||
|
||||
1. Checkt den Quellcode Ihrer App aus.
|
||||
2. Startet eine isolierte Twenty-Testinstanz mithilfe der Composite-Action `twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main` (das CI-Äquivalent zu `yarn twenty server start --test`).
|
||||
3. Aktiviert Corepack, richtet Node.js anhand Ihrer `.nvmrc` ein und installiert Abhängigkeiten mit `yarn install --immutable`.
|
||||
4. Führt `yarn test` aus und übergibt `TWENTY_API_URL` und `TWENTY_API_KEY` aus der gestarteten Instanz, damit Ihre Tests mit einem echten Server kommunizieren können.
|
||||
|
||||
**Konfigurationsoptionen:**
|
||||
|
||||
* `TWENTY_VERSION` (env, standardmäßig `latest`) — fixieren Sie die in CI verwendete Twenty-Server-Version, indem Sie dies in `ci.yml` anpassen.
|
||||
* Die Parallelität wird nach `github.ref` gruppiert und bricht laufende Ausführungen bei neuen Pushes ab.
|
||||
|
||||
Es sind keine Secrets erforderlich — die Testinstanz ist flüchtig und existiert nur für die Dauer des Jobs.
|
||||
|
||||
### CD — `cd.yml`
|
||||
|
||||
Stellt Ihre App bei jedem Push auf `main` auf einem konfigurierten Twenty-Server bereit und optional aus einem Pull Request, wenn das Label `deploy` gesetzt ist.
|
||||
|
||||
**Was sie macht:**
|
||||
|
||||
1. Checkt den PR-Head (bei PRs mit Label) oder den gepushten Commit aus.
|
||||
2. Führt `twentyhq/twenty/.github/actions/deploy-twenty-app@main` aus — das CI-Äquivalent zu `yarn twenty deploy`.
|
||||
3. Führt `twentyhq/twenty/.github/actions/install-twenty-app@main` aus, damit die neu bereitgestellte Version in den Ziel-Workspace installiert wird.
|
||||
|
||||
**Erforderliche Konfiguration:**
|
||||
|
||||
| Einstellung | Wo | Zweck |
|
||||
| ----------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `TWENTY_DEPLOY_URL` | `env` in `cd.yml` (standardmäßig `http://localhost:3000`) | Der Twenty-Server, auf den bereitgestellt werden soll. Ändern Sie dies vor der ersten Verwendung auf die echte Server-URL. |
|
||||
| `TWENTY_DEPLOY_API_KEY` | GitHub-Repository **Settings → Secrets and variables → Actions** | API-Schlüssel mit Berechtigung zum Bereitstellen auf dem Zielserver. |
|
||||
|
||||
<Note>
|
||||
Der Standardwert von `TWENTY_DEPLOY_URL` (`http://localhost:3000`) ist ein Platzhalter — von einem GitHub-gehosteten Runner ist er nicht erreichbar. Aktualisieren Sie sie auf die öffentliche URL Ihres Servers (oder verwenden Sie einen selbstgehosteten Runner mit Netzwerkzugriff), bevor Sie CD aktivieren.
|
||||
</Note>
|
||||
|
||||
**Eine Vorschau-Bereitstellung aus einem PR auslösen:**
|
||||
|
||||
Fügen Sie einem Pull Request das Label `deploy` hinzu. Die `if:`-Bedingung in `cd.yml` führt den Job für diesen PR mit dem Head-Commit des PR aus, sodass Sie eine Änderung auf dem Zielserver vor dem Mergen validieren können.
|
||||
|
||||
### Fixieren der wiederverwendbaren Actions
|
||||
|
||||
Beide Workflows verweisen auf wiederverwendbare Actions mit `@main`, sodass Aktualisierungen der Actions im Repository `twentyhq/twenty` automatisch übernommen werden. Wenn Sie deterministische Builds möchten, ersetzen Sie `@main` in jeder `uses:`-Zeile durch eine Commit-SHA oder einen Release-Tag.
|
||||
|
||||
## Auf npm veröffentlichen
|
||||
|
||||
Die Veröffentlichung auf npm macht Ihre App im Twenty-Marktplatz auffindbar. Jeder Twenty-Arbeitsbereich kann Marktplatz-Apps direkt über die Benutzeroberfläche durchsuchen, installieren und aktualisieren.
|
||||
@@ -87,7 +138,7 @@ Die Veröffentlichung auf npm macht Ihre App im Twenty-Marktplatz auffindbar. Je
|
||||
### Anforderungen
|
||||
|
||||
* Ein [npm](https://www.npmjs.com)-Konto
|
||||
* Das Schlüsselwort `twenty-app` in Ihrem `package.json`-Array `keywords` (bereits enthalten, wenn Sie mit `create-twenty-app` ein Gerüst erstellen)
|
||||
* Das Schlüsselwort `twenty-app` in Ihrem `package.json`-Array `keywords` (manuell hinzufügen — es ist in der `create-twenty-app`-Vorlage standardmäßig nicht enthalten)
|
||||
|
||||
```json filename="package.json"
|
||||
{
|
||||
|
||||
@@ -476,7 +476,7 @@ export default defineLogicFunction({
|
||||
httpRouteTriggerSettings: {
|
||||
path: '/post-card/create',
|
||||
httpMethod: 'GET',
|
||||
isAuthRequired: false,
|
||||
isAuthRequired: true,
|
||||
},
|
||||
/*databaseEventTriggerSettings: {
|
||||
eventName: 'people.created',
|
||||
|
||||
@@ -220,6 +220,7 @@ Lo scaffolder ha già avviato per te un server Twenty locale. Per gestirlo in se
|
||||
| -------------------------------------- | --------------------------------------------------------- |
|
||||
| `yarn twenty server start` | Avvia il server locale (scarica l'immagine se necessario) |
|
||||
| `yarn twenty server start --port 3030` | Avvia su una porta personalizzata |
|
||||
| `yarn twenty server start --test` | Avvia un'istanza di test separata sulla porta 2021 |
|
||||
| `yarn twenty server stop` | Arresta il server (conserva i dati) |
|
||||
| `yarn twenty server status` | Mostra stato del server, URL e credenziali |
|
||||
| `yarn twenty server logs` | Trasmetti in streaming i log del server |
|
||||
@@ -228,6 +229,20 @@ Lo scaffolder ha già avviato per te un server Twenty locale. Per gestirlo in se
|
||||
|
||||
I dati vengono mantenuti tra i riavvii in due volumi Docker (`twenty-app-dev-data` per PostgreSQL, `twenty-app-dev-storage` per i file). Usa `reset` per cancellare tutto e ripartire da zero.
|
||||
|
||||
### Esecuzione di un'istanza di test
|
||||
|
||||
Passa `--test` a qualsiasi comando `server` per gestire una seconda istanza completamente isolata — utile per eseguire test di integrazione o per sperimentare senza toccare i tuoi dati di sviluppo principali.
|
||||
|
||||
| Comando | Descrizione |
|
||||
| ---------------------------------- | ------------------------------------------------------------------------ |
|
||||
| `yarn twenty server start --test` | Avvia l'istanza di test (per impostazione predefinita usa la porta 2021) |
|
||||
| `yarn twenty server stop --test` | Arresta l'istanza di test |
|
||||
| `yarn twenty server status --test` | Mostra stato, URL e credenziali dell'istanza di test |
|
||||
| `yarn twenty server logs --test` | Trasmetti in streaming i log dell'istanza di test |
|
||||
| `yarn twenty server reset --test` | Cancella i dati di test e riparti da zero |
|
||||
|
||||
L'istanza di test viene eseguita nel proprio container Docker (`twenty-app-dev-test`) con volumi dedicati (`twenty-app-dev-test-data`, `twenty-app-dev-test-storage`) e configurazione dedicata, così può essere eseguita in parallelo con la tua istanza principale senza conflitti. Combina `--test` con `--port` per sovrascrivere il valore predefinito 2021.
|
||||
|
||||
<Note>
|
||||
Il server richiede che **Docker** sia in esecuzione. Se vedi l'errore "Docker not running", assicurati che Docker Desktop (o il demone Docker) sia avviato.
|
||||
</Note>
|
||||
|
||||
@@ -80,6 +80,57 @@ I tag di pre-release funzionano come previsto: incrementare `1.0.0-rc.1` → `1.
|
||||
|
||||
{/* TODO: add screenshot of the Upgrade button */}
|
||||
|
||||
## CI/CD automatizzati (workflow preconfigurati)
|
||||
|
||||
Le app generate con `create-twenty-app` includono due workflow di GitHub Actions pronti all'uso, nella cartella `.github/workflows/`. Sono pronti all'esecuzione non appena esegui il push del repository su GitHub — non è necessaria alcuna configurazione aggiuntiva per la CI e la CD richiede solo un singolo secret.
|
||||
|
||||
### CI — `ci.yml`
|
||||
|
||||
Esegue automaticamente i test di integrazione a ogni push su `main` e sulle pull request.
|
||||
|
||||
**Cosa fa:**
|
||||
|
||||
1. Esegue il checkout del codice sorgente della tua app.
|
||||
2. Avvia un'istanza di test isolata di Twenty utilizzando l'azione composita `twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main` (l'equivalente per la CI di `yarn twenty server start --test`).
|
||||
3. Abilita Corepack, configura Node.js dal tuo `.nvmrc` e installa le dipendenze con `yarn install --immutable`.
|
||||
4. Esegue `yarn test`, passando `TWENTY_API_URL` e `TWENTY_API_KEY` dall'istanza avviata affinché i tuoi test possano comunicare con un server reale.
|
||||
|
||||
**Opzioni di configurazione:**
|
||||
|
||||
* `TWENTY_VERSION` (variabile di ambiente, predefinito `latest`) — fissa la versione del server Twenty usata nella CI modificando questo valore in `ci.yml`.
|
||||
* La concorrenza è raggruppata per `github.ref` e annulla le esecuzioni in corso in caso di nuovi push.
|
||||
|
||||
Non sono necessari Secrets — l'istanza di test è effimera ed esiste solo per la durata del job.
|
||||
|
||||
### CD — `cd.yml`
|
||||
|
||||
Esegue il deploy della tua app su un server Twenty configurato a ogni push su `main` e, facoltativamente, da una pull request quando viene applicata l'etichetta `deploy`.
|
||||
|
||||
**Cosa fa:**
|
||||
|
||||
1. Esegue il checkout della testa della PR (per le PR etichettate) oppure del commit inviato.
|
||||
2. Esegue `twentyhq/twenty/.github/actions/deploy-twenty-app@main` — l'equivalente per la CI di `yarn twenty deploy`.
|
||||
3. Esegue `twentyhq/twenty/.github/actions/install-twenty-app@main` in modo che la versione appena distribuita venga installata nello spazio di lavoro di destinazione.
|
||||
|
||||
**Configurazione richiesta:**
|
||||
|
||||
| Impostazione | Dove | Scopo |
|
||||
| ----------------------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
||||
| `TWENTY_DEPLOY_URL` | `env` in `cd.yml` (predefinito `http://localhost:3000`) | Il server Twenty su cui effettuare il deploy. Modificalo con l'URL reale del tuo server prima del primo utilizzo. |
|
||||
| `TWENTY_DEPLOY_API_KEY` | Repository GitHub **Settings → Secrets and variables → Actions** | Chiave API con autorizzazione di deploy sul server di destinazione. |
|
||||
|
||||
<Note>
|
||||
Il valore predefinito di `TWENTY_DEPLOY_URL`, `http://localhost:3000`, è un segnaposto — non raggiungerà alcuna risorsa da un runner ospitato su GitHub. Aggiornalo all'URL pubblico del tuo server (oppure usa un runner self-hosted con accesso di rete) prima di abilitare il CD.
|
||||
</Note>
|
||||
|
||||
**Attivare un deploy di anteprima da una PR:**
|
||||
|
||||
Aggiungi l'etichetta `deploy` a una pull request. La condizione `if:` in `cd.yml` eseguirà il job per quella PR utilizzando il commit di testa della PR, permettendoti di convalidare una modifica sul server di destinazione prima del merge.
|
||||
|
||||
### Bloccare le azioni riutilizzabili
|
||||
|
||||
Entrambi i workflow fanno riferimento ad azioni riutilizzabili a `@main`, quindi gli aggiornamenti delle azioni nel repository `twentyhq/twenty` vengono recepiti automaticamente. Se desideri build deterministiche, sostituisci `@main` con uno SHA di commit o un tag di release in ciascuna riga `uses:`.
|
||||
|
||||
## Pubblicazione su npm
|
||||
|
||||
La pubblicazione su npm rende la tua app scopribile nel marketplace di Twenty. Qualsiasi spazio di lavoro Twenty può sfogliare, installare e aggiornare le app del marketplace direttamente dall'interfaccia utente.
|
||||
@@ -87,7 +138,7 @@ La pubblicazione su npm rende la tua app scopribile nel marketplace di Twenty. Q
|
||||
### Requisiti
|
||||
|
||||
* Un account [npm](https://www.npmjs.com)
|
||||
* La parola chiave `twenty-app` nell'array `keywords` del tuo `package.json` (già inclusa quando inizializzi con `create-twenty-app`)
|
||||
* La parola chiave `twenty-app` nell'array `keywords` del tuo `package.json` (aggiungila manualmente — non è inclusa per impostazione predefinita nel template `create-twenty-app`)
|
||||
|
||||
```json filename="package.json"
|
||||
{
|
||||
|
||||
@@ -476,7 +476,7 @@ export default defineLogicFunction({
|
||||
httpRouteTriggerSettings: {
|
||||
path: '/post-card/create',
|
||||
httpMethod: 'GET',
|
||||
isAuthRequired: false,
|
||||
isAuthRequired: true,
|
||||
},
|
||||
/*databaseEventTriggerSettings: {
|
||||
eventName: 'people.created',
|
||||
|
||||
@@ -220,6 +220,7 @@ A ferramenta de scaffolding já iniciou um servidor local do Twenty para você.
|
||||
| -------------------------------------- | ------------------------------------------------------ |
|
||||
| `yarn twenty server start` | Inicia o servidor local (baixa a imagem se necessário) |
|
||||
| `yarn twenty server start --port 3030` | Iniciar em uma porta personalizada |
|
||||
| `yarn twenty server start --test` | Inicie uma instância de teste separada na porta 2021 |
|
||||
| `yarn twenty server stop` | Interrompe o servidor (preserva os dados) |
|
||||
| `yarn twenty server status` | Mostra o status do servidor, a URL e as credenciais |
|
||||
| `yarn twenty server logs` | Transmite os logs do servidor |
|
||||
@@ -228,6 +229,20 @@ A ferramenta de scaffolding já iniciou um servidor local do Twenty para você.
|
||||
|
||||
Os dados são persistidos entre reinicializações em dois volumes do Docker (`twenty-app-dev-data` para PostgreSQL, `twenty-app-dev-storage` para arquivos). Use `reset` para apagar tudo e começar do zero.
|
||||
|
||||
### Executando uma instância de teste
|
||||
|
||||
Passe `--test` para qualquer comando de `server` para gerenciar uma segunda instância totalmente isolada — útil para executar testes de integração ou experimentar sem tocar nos seus dados principais de desenvolvimento.
|
||||
|
||||
| Comando | Descrição |
|
||||
| ---------------------------------- | ------------------------------------------------------------- |
|
||||
| `yarn twenty server start --test` | Inicia a instância de teste (padrão: porta 2021) |
|
||||
| `yarn twenty server stop --test` | Interrompe a instância de teste |
|
||||
| `yarn twenty server status --test` | Mostra o status da instância de teste, a URL e as credenciais |
|
||||
| `yarn twenty server logs --test` | Transmite os logs da instância de teste |
|
||||
| `yarn twenty server reset --test` | Exclui os dados de teste e inicia do zero |
|
||||
|
||||
A instância de teste é executada em seu próprio contêiner Docker (`twenty-app-dev-test`) com volumes dedicados (`twenty-app-dev-test-data`, `twenty-app-dev-test-storage`) e configuração própria, para que possa ser executada em paralelo com sua instância principal sem conflitos. Combine `--test` com `--port` para substituir a porta padrão 2021.
|
||||
|
||||
<Note>
|
||||
O servidor requer que o **Docker** esteja em execução. Se você vir um erro "Docker not running", certifique-se de que o Docker Desktop (ou o daemon do Docker) esteja iniciado.
|
||||
</Note>
|
||||
|
||||
@@ -80,6 +80,57 @@ Tags de pré-lançamento funcionam como esperado: incrementar `1.0.0-rc.1` → `
|
||||
|
||||
{/* TODO: add screenshot of the Upgrade button */}
|
||||
|
||||
## CI/CD automatizado (fluxos de trabalho pré-configurados)
|
||||
|
||||
Os apps gerados com `create-twenty-app` já vêm com dois fluxos de trabalho do GitHub Actions prontos, em `.github/workflows/`. Eles estão prontos para executar assim que você fizer push do repositório para o GitHub — nenhuma configuração extra é necessária para CI, e CD requer apenas um único segredo.
|
||||
|
||||
### CI — `ci.yml`
|
||||
|
||||
Executa testes de integração a cada push para `main` e a cada pull request.
|
||||
|
||||
**O que faz:**
|
||||
|
||||
1. Faz checkout do código-fonte do seu app.
|
||||
2. Inicia uma instância de teste do Twenty isolada usando a ação composta `twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main` (o equivalente em CI de `yarn twenty server start --test`).
|
||||
3. Habilita o Corepack, configura o Node.js a partir do seu `.nvmrc` e instala as dependências com `yarn install --immutable`.
|
||||
4. Executa `yarn test`, passando `TWENTY_API_URL` e `TWENTY_API_KEY` da instância iniciada para que seus testes possam se comunicar com um servidor real.
|
||||
|
||||
**Opções de configuração:**
|
||||
|
||||
* `TWENTY_VERSION` (env, padrão `latest`) — fixe a versão do servidor Twenty usada no CI editando isto em `ci.yml`.
|
||||
* A concorrência é agrupada por `github.ref` e cancela execuções em andamento quando há novos pushes.
|
||||
|
||||
Nenhum segredo é necessário — a instância de teste é efêmera e existe apenas durante a execução do job.
|
||||
|
||||
### CD — `cd.yml`
|
||||
|
||||
Faz o deploy do seu app para um servidor Twenty configurado a cada push para `main` e, opcionalmente, a partir de um pull request quando o rótulo `deploy` é aplicado.
|
||||
|
||||
**O que faz:**
|
||||
|
||||
1. Faz checkout do head do PR (para PRs rotulados) ou do commit enviado.
|
||||
2. Executa `twentyhq/twenty/.github/actions/deploy-twenty-app@main` — o equivalente em CI de `yarn twenty deploy`.
|
||||
3. Executa `twentyhq/twenty/.github/actions/install-twenty-app@main` para que a versão recém-implantada seja instalada no workspace de destino.
|
||||
|
||||
**Configuração obrigatória:**
|
||||
|
||||
| Configuração | Onde | Finalidade |
|
||||
| ----------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
||||
| `TWENTY_DEPLOY_URL` | `env` em `cd.yml` (padrão `http://localhost:3000`) | O servidor Twenty para o qual fazer o deploy. Altere isto para a URL real do seu servidor antes do primeiro uso. |
|
||||
| `TWENTY_DEPLOY_API_KEY` | Repositório do GitHub **Settings → Secrets and variables → Actions** | Chave de API com permissão de deploy no servidor de destino. |
|
||||
|
||||
<Note>
|
||||
O `TWENTY_DEPLOY_URL` padrão de `http://localhost:3000` é um placeholder — ele não alcançará nada a partir de um runner hospedado pelo GitHub. Atualize-o para a URL pública do seu servidor (ou use um runner self-hosted com acesso à rede) antes de habilitar o CD.
|
||||
</Note>
|
||||
|
||||
**Acionando um deploy de pré-visualização a partir de um PR:**
|
||||
|
||||
Adicione o rótulo `deploy` a um pull request. A condição `if:` em `cd.yml` executará o job para esse PR usando o commit HEAD do PR, permitindo que você valide uma alteração no servidor de destino antes de fazer o merge.
|
||||
|
||||
### Fixando as ações reutilizáveis
|
||||
|
||||
Ambos os fluxos de trabalho fazem referência a ações reutilizáveis em `@main`, portanto as atualizações de ações no repositório `twentyhq/twenty` são aplicadas automaticamente. Se você quiser builds determinísticos, substitua `@main` por um SHA de commit ou uma tag de release em cada linha `uses:`.
|
||||
|
||||
## Publicação no npm
|
||||
|
||||
Publicar no npm torna seu aplicativo descobrível no Marketplace da Twenty. Qualquer espaço de trabalho da Twenty pode navegar, instalar e atualizar aplicativos do Marketplace diretamente pela UI.
|
||||
@@ -87,7 +138,7 @@ Publicar no npm torna seu aplicativo descobrível no Marketplace da Twenty. Qual
|
||||
### Requisitos
|
||||
|
||||
* Uma conta no [npm](https://www.npmjs.com)
|
||||
* A palavra-chave `twenty-app` no array `keywords` do seu `package.json` (já incluída quando você cria o projeto com `create-twenty-app`)
|
||||
* A palavra-chave `twenty-app` no array `keywords` do seu `package.json` (adicione-a manualmente — não é incluída por padrão no template `create-twenty-app`)
|
||||
|
||||
```json filename="package.json"
|
||||
{
|
||||
|
||||
@@ -476,7 +476,7 @@ export default defineLogicFunction({
|
||||
httpRouteTriggerSettings: {
|
||||
path: '/post-card/create',
|
||||
httpMethod: 'GET',
|
||||
isAuthRequired: false,
|
||||
isAuthRequired: true,
|
||||
},
|
||||
/*databaseEventTriggerSettings: {
|
||||
eventName: 'people.created',
|
||||
|
||||
@@ -220,6 +220,7 @@ npx create-twenty-app@latest my-twenty-app --example postcard
|
||||
| -------------------------------------- | -------------------------------------------------------------- |
|
||||
| `yarn twenty server start` | Запустить локальный сервер (при необходимости скачивает образ) |
|
||||
| `yarn twenty server start --port 3030` | Запустить на пользовательском порту |
|
||||
| `yarn twenty server start --test` | Запускает отдельный тестовый экземпляр на порту 2021 |
|
||||
| `yarn twenty server stop` | Остановить сервер (данные сохраняются) |
|
||||
| `yarn twenty server status` | Показать состояние сервера, URL и учётные данные |
|
||||
| `yarn twenty server logs` | Потоковый вывод журналов сервера |
|
||||
@@ -228,6 +229,20 @@ npx create-twenty-app@latest my-twenty-app --example postcard
|
||||
|
||||
Данные сохраняются между перезапусками в двух томах Docker (`twenty-app-dev-data` для PostgreSQL, `twenty-app-dev-storage` для файлов). Используйте `reset`, чтобы стереть всё и начать заново.
|
||||
|
||||
### Запуск тестового экземпляра
|
||||
|
||||
Передайте `--test` любой команде `server`, чтобы управлять вторым, полностью изолированным экземпляром — это полезно для запуска интеграционных тестов или экспериментов, не затрагивая ваши основные данные разработки.
|
||||
|
||||
| Команда | Описание |
|
||||
| ---------------------------------- | ------------------------------------------------------------- |
|
||||
| `yarn twenty server start --test` | Запустить тестовый экземпляр (по умолчанию — порт 2021) |
|
||||
| `yarn twenty server stop --test` | Остановить тестовый экземпляр |
|
||||
| `yarn twenty server status --test` | Показать состояние тестового экземпляра, URL и учётные данные |
|
||||
| `yarn twenty server logs --test` | Выводить журналы тестового экземпляра в потоковом режиме |
|
||||
| `yarn twenty server reset --test` | Удалить тестовые данные и начать с чистого листа |
|
||||
|
||||
Тестовый экземпляр запускается в собственном контейнере Docker (`twenty-app-dev-test`) с выделенными томами (`twenty-app-dev-test-data`, `twenty-app-dev-test-storage`) и собственной конфигурацией, поэтому он может работать параллельно с вашим основным экземпляром без конфликтов. Совместите `--test` с `--port`, чтобы переопределить значение по умолчанию (2021).
|
||||
|
||||
<Note>
|
||||
Для работы сервера необходимо, чтобы **Docker** был запущен. Если вы видите ошибку "Docker not running", убедитесь, что запущен Docker Desktop (или демон Docker).
|
||||
</Note>
|
||||
|
||||
@@ -80,6 +80,57 @@ When updating an already deployed tarball app, the server requires the `version`
|
||||
|
||||
{/* TODO: add screenshot of the Upgrade button */}
|
||||
|
||||
## Автоматизированный CI/CD (рабочие процессы, сгенерированные шаблоном)
|
||||
|
||||
Приложения, созданные с помощью `create-twenty-app`, «из коробки» включают два рабочих процесса GitHub Actions в каталоге `.github/workflows/`. Они готовы к запуску, как только вы запушите репозиторий на GitHub — для CI не требуется дополнительной настройки, а для CD нужен лишь один секрет.
|
||||
|
||||
### CI — `ci.yml`
|
||||
|
||||
Автоматически запускает интеграционные тесты при каждом пуше в `main` и для каждого pull request.
|
||||
|
||||
**Что делает:**
|
||||
|
||||
1. Извлекает исходный код вашего приложения.
|
||||
2. Запускает изолированный тестовый экземпляр Twenty с помощью составного действия `twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main` (эквивалент для CI `yarn twenty server start --test`).
|
||||
3. Включает Corepack, настраивает Node.js на основе вашего `.nvmrc` и устанавливает зависимости с помощью `yarn install --immutable`.
|
||||
4. Запускает `yarn test`, передавая `TWENTY_API_URL` и `TWENTY_API_KEY` из запущенного экземпляра, чтобы ваши тесты могли взаимодействовать с реальным сервером.
|
||||
|
||||
**Параметры конфигурации:**
|
||||
|
||||
* `TWENTY_VERSION` (переменная окружения, по умолчанию `latest`) — зафиксируйте версию сервера Twenty, используемую в CI, отредактировав это значение в `ci.yml`.
|
||||
* Параллельные запуски группируются по `github.ref` и отменяют выполняющиеся прогоны при новых пушах.
|
||||
|
||||
Секреты не требуются — тестовый экземпляр эфемерен и существует только на время выполнения задания.
|
||||
|
||||
### CD — `cd.yml`
|
||||
|
||||
Разворачивает ваше приложение на настроенном сервере Twenty при каждом пуше в `main` и, при необходимости, из pull request при наличии метки `deploy`.
|
||||
|
||||
**Что делает:**
|
||||
|
||||
1. Извлекает head-коммит PR (для PR с меткой) или запушенный коммит.
|
||||
2. Запускает `twentyhq/twenty/.github/actions/deploy-twenty-app@main` — эквивалент для CI `yarn twenty deploy`.
|
||||
3. Запускает `twentyhq/twenty/.github/actions/install-twenty-app@main`, чтобы новая развернутая версия была установлена в целевое рабочее пространство.
|
||||
|
||||
**Обязательная конфигурация:**
|
||||
|
||||
| Настройка | Где | Назначение |
|
||||
| ----------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
||||
| `TWENTY_DEPLOY_URL` | `env` в `cd.yml` (по умолчанию `http://localhost:3000`) | Сервер Twenty, на который выполняется деплой. Перед первым использованием замените это на URL вашего реального сервера. |
|
||||
| `TWENTY_DEPLOY_API_KEY` | В репозитории GitHub — **Settings → Secrets and variables → Actions** | Ключ API с правом деплоя на целевом сервере. |
|
||||
|
||||
<Note>
|
||||
Значение `TWENTY_DEPLOY_URL` по умолчанию — `http://localhost:3000` — это заглушка: с хостируемого GitHub раннера к ней не будет доступа. Перед включением CD замените его на публичный URL вашего сервера (или используйте self-hosted раннер с сетевым доступом).
|
||||
</Note>
|
||||
|
||||
**Запуск предварительного деплоя из PR:**
|
||||
|
||||
Добавьте к pull request метку `deploy`. Условие `if:` в `cd.yml` запустит задачу для этого PR, используя его head-коммит, что позволит проверить изменение на целевом сервере до слияния.
|
||||
|
||||
### Закрепление версий повторно используемых действий
|
||||
|
||||
Оба рабочих процесса ссылаются на повторно используемые действия с указанием `@main`, поэтому обновления действий в репозитории `twentyhq/twenty` подхватываются автоматически. Если вам нужны детерминированные сборки, замените `@main` на SHA коммита или тег релиза в каждой строке `uses:`.
|
||||
|
||||
## Публикация в npm
|
||||
|
||||
Публикация в npm делает ваше приложение видимым в маркетплейсе Twenty. Любое рабочее пространство Twenty может просматривать, устанавливать и обновлять приложения из маркетплейса непосредственно из интерфейса.
|
||||
@@ -87,7 +138,7 @@ When updating an already deployed tarball app, the server requires the `version`
|
||||
### Требования
|
||||
|
||||
* Учётная запись [npm](https://www.npmjs.com)
|
||||
* Ключевое слово `twenty-app` в массиве `keywords` вашего `package.json` (уже добавлено при создании проекта с помощью `create-twenty-app`)
|
||||
* Ключевое слово `twenty-app` в массиве `keywords` вашего `package.json` (добавьте его вручную — по умолчанию оно не включено в шаблон `create-twenty-app`)
|
||||
|
||||
```json filename="package.json"
|
||||
{
|
||||
|
||||
@@ -476,7 +476,7 @@ export default defineLogicFunction({
|
||||
httpRouteTriggerSettings: {
|
||||
path: '/post-card/create',
|
||||
httpMethod: 'GET',
|
||||
isAuthRequired: false,
|
||||
isAuthRequired: true,
|
||||
},
|
||||
/*databaseEventTriggerSettings: {
|
||||
eventName: 'people.created',
|
||||
|
||||
@@ -216,18 +216,33 @@ npx create-twenty-app@latest my-twenty-app --example postcard
|
||||
|
||||
İskelet oluşturucu sizin için zaten yerel bir Twenty sunucusu başlattı. Daha sonra yönetmek için `yarn twenty server` komutunu kullanın:
|
||||
|
||||
| Komut | Açıklama |
|
||||
| -------------------------------------- | ------------------------------------------------------ |
|
||||
| `yarn twenty server start` | Yerel sunucuyu başlatır (gerekirse imajı çeker) |
|
||||
| `yarn twenty server start --port 3030` | Özel bir portta başlatır |
|
||||
| `yarn twenty server stop` | Sunucuyu durdurur (verileri korur) |
|
||||
| `yarn twenty server status` | Sunucu durumunu, URL'yi ve kimlik bilgilerini gösterir |
|
||||
| `yarn twenty server logs` | Sunucu günlüklerini akış olarak iletir |
|
||||
| `yarn twenty server logs --lines 100` | Son 100 günlük satırını gösterir |
|
||||
| `yarn twenty server reset` | Tüm verileri siler ve sıfırdan başlatır |
|
||||
| Komut | Açıklama |
|
||||
| -------------------------------------- | --------------------------------------------------------------- |
|
||||
| `yarn twenty server start` | Yerel sunucuyu başlatır (gerekirse imajı çeker) |
|
||||
| `yarn twenty server start --port 3030` | Özel bir portta başlatır |
|
||||
| `yarn twenty server start --test` | 2021 numaralı bağlantı noktasında ayrı bir test örneği başlatın |
|
||||
| `yarn twenty server stop` | Sunucuyu durdurur (verileri korur) |
|
||||
| `yarn twenty server status` | Sunucu durumunu, URL'yi ve kimlik bilgilerini gösterir |
|
||||
| `yarn twenty server logs` | Sunucu günlüklerini akış olarak iletir |
|
||||
| `yarn twenty server logs --lines 100` | Son 100 günlük satırını gösterir |
|
||||
| `yarn twenty server reset` | Tüm verileri siler ve sıfırdan başlatır |
|
||||
|
||||
Veriler, yeniden başlatmalar arasında iki Docker biriminde kalıcıdır (PostgreSQL için `twenty-app-dev-data`, dosyalar için `twenty-app-dev-storage`). Her şeyi silip baştan başlamak için `reset` kullanın.
|
||||
|
||||
### Test örneği çalıştırma
|
||||
|
||||
`server` komutlarının herhangi birine `--test` parametresini vererek ikinci, tamamen yalıtılmış bir örneği yönetin — entegrasyon testlerini çalıştırmak veya ana geliştirme verilerinize dokunmadan denemeler yapmak için kullanışlıdır.
|
||||
|
||||
| Komut | Açıklama |
|
||||
| ---------------------------------- | -------------------------------------------------------------- |
|
||||
| `yarn twenty server start --test` | Test örneğini başlatır (varsayılan bağlantı noktası 2021'dir) |
|
||||
| `yarn twenty server stop --test` | Test örneğini durdurur |
|
||||
| `yarn twenty server status --test` | Test örneğinin durumunu, URL'yi ve kimlik bilgilerini gösterir |
|
||||
| `yarn twenty server logs --test` | Test örneği günlüklerini akış olarak iletir |
|
||||
| `yarn twenty server reset --test` | Test verilerini siler ve sıfırdan başlatır |
|
||||
|
||||
Test örneği, kendine ait bir Docker konteynerinde (`twenty-app-dev-test`), ayrılmış birimlerle (`twenty-app-dev-test-data`, `twenty-app-dev-test-storage`) ve yapılandırmayla çalışır; böylece ana örneğinizle çakışma olmadan paralel olarak çalışabilir. Varsayılan 2021'i geçersiz kılmak için `--test` ile `--port`'u birlikte kullanın.
|
||||
|
||||
<Note>
|
||||
Sunucunun çalışması için **Docker**'ın çalışıyor olması gerekir. "Docker not running" hatası görürseniz Docker Desktop'ın (veya Docker daemon'ının) başlatıldığından emin olun.
|
||||
</Note>
|
||||
|
||||
@@ -80,6 +80,57 @@ Bir güncelleme yayımlamak için:
|
||||
|
||||
{/* TODO: add screenshot of the Upgrade button */}
|
||||
|
||||
## Otomatik CI/CD (hazır şablonlu iş akışları)
|
||||
|
||||
`create-twenty-app` ile oluşturulan uygulamalar, kutudan çıktığı gibi `.github/workflows/` altında iki GitHub Actions iş akışıyla gelir. Depoyu GitHub’a iter itmez çalışmaya hazırdır — CI için ek bir kurulum gerekmez ve CD yalnızca tek bir gizli anahtar gerektirir.
|
||||
|
||||
### CI — `ci.yml`
|
||||
|
||||
Entegrasyon testlerini `main` dalına yapılan her itmede ve her çekme isteğinde otomatik olarak çalıştırır.
|
||||
|
||||
**Ne yapar:**
|
||||
|
||||
1. Uygulamanızın kaynak kodunu alır.
|
||||
2. `twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main` bileşik eylemini kullanarak yalıtılmış bir Twenty test örneği başlatır (CI'daki `yarn twenty server start --test` eşdeğeri).
|
||||
3. Corepack’i etkinleştirir, `.nvmrc` dosyanızdan Node.js'i kurar ve bağımlılıkları `yarn install --immutable` ile yükler.
|
||||
4. Oluşturulan örnekten `TWENTY_API_URL` ve `TWENTY_API_KEY` değerlerini aktararak `yarn test`i çalıştırır; böylece testleriniz gerçek bir sunucuyla haberleşebilir.
|
||||
|
||||
**Yapılandırma seçenekleri:**
|
||||
|
||||
* `TWENTY_VERSION` (ortam, varsayılanı `latest`) — CI’da kullanılan Twenty sunucu sürümünü `ci.yml` içinde bunu düzenleyerek sabitleyin.
|
||||
* Eşzamanlılık `github.ref` bazında gruplanır ve yeni itmelerde devam eden çalışmaları iptal eder.
|
||||
|
||||
Gizli anahtar gerekmez — test örneği geçicidir ve yalnızca iş süresi boyunca çalışır.
|
||||
|
||||
### CD — `cd.yml`
|
||||
|
||||
`main` dalına yapılan her itmede uygulamanızı yapılandırılmış bir Twenty sunucusuna dağıtır ve isteğe bağlı olarak `deploy` etiketi uygulandığında bir çekme isteğinden de dağıtım yapar.
|
||||
|
||||
**Ne yapar:**
|
||||
|
||||
1. Etiketli PR'ler için PR'in head commit'ini ya da itilen commit'i alır.
|
||||
2. `twentyhq/twenty/.github/actions/deploy-twenty-app@main` çalıştırır — `yarn twenty deploy` komutunun CI eşdeğeridir.
|
||||
3. `twentyhq/twenty/.github/actions/install-twenty-app@main` eylemini çalıştırır; böylece yeni dağıtılan sürüm hedef çalışma alanına kurulur.
|
||||
|
||||
**Gerekli yapılandırma:**
|
||||
|
||||
| Ayar | Koşul | Amaç |
|
||||
| ----------------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- |
|
||||
| `TWENTY_DEPLOY_URL` | `cd.yml` içinde `env` (varsayılan: `http://localhost:3000`) | Dağıtımın yapılacağı Twenty sunucusu. İlk kullanımdan önce bunu gerçek sunucu URL'nizle değiştirin. |
|
||||
| `TWENTY_DEPLOY_API_KEY` | GitHub deposu **Settings → Secrets and variables → Actions** | Hedef sunucuda dağıtım iznine sahip API anahtarı. |
|
||||
|
||||
<Note>
|
||||
Varsayılan `TWENTY_DEPLOY_URL` olan `http://localhost:3000` bir yer tutucudur — GitHub barındırmalı bir çalıştırıcıdan hiçbir yere erişemez. CD'yi etkinleştirmeden önce bunu sunucunuzun genel URL'siyle güncelleyin (veya ağ erişimi olan öz barındırılan bir çalıştırıcı kullanın).
|
||||
</Note>
|
||||
|
||||
**Bir PR'den bir önizleme dağıtımını tetikleme:**
|
||||
|
||||
Bir çekme isteğine `deploy` etiketini ekleyin. `cd.yml` içindeki `if:` koruması, ilgili PR için işi PR'in head commit'ini kullanarak çalıştırır; böylece birleştirmeden önce hedef sunucuda değişikliği doğrulayabilirsiniz.
|
||||
|
||||
### Yeniden kullanılabilir eylemleri sabitleme
|
||||
|
||||
Her iki iş akışı da `@main` üzerindeki yeniden kullanılabilir eylemlere başvurur; bu nedenle `twentyhq/twenty` deposundaki eylem güncellemeleri otomatik olarak alınır. Deterministik derlemeler istiyorsanız, her `uses:` satırında `@main` ifadesini bir commit SHA'sı veya sürüm etiketiyle değiştirin.
|
||||
|
||||
## npm’ye yayımlama
|
||||
|
||||
npm’ye yayımlamak, uygulamanızın Twenty pazaryerinde keşfedilebilir olmasını sağlar. Herhangi bir Twenty çalışma alanı, pazaryeri uygulamalarına doğrudan arayüzden göz atabilir, yükleyebilir ve güncelleyebilir.
|
||||
@@ -87,7 +138,7 @@ npm’ye yayımlamak, uygulamanızın Twenty pazaryerinde keşfedilebilir olmas
|
||||
### Gereksinimler
|
||||
|
||||
* Bir [npm](https://www.npmjs.com) hesabı
|
||||
* `package.json` içindeki `keywords` dizinizdeki `twenty-app` anahtar sözcüğü (`create-twenty-app` ile iskelet oluşturduğunuzda zaten eklenir)
|
||||
* `package.json` içindeki `keywords` dizinizdeki `twenty-app` anahtar sözcüğü (elle ekleyin — varsayılan olarak `create-twenty-app` şablonunda yer almaz)
|
||||
|
||||
```json filename="package.json"
|
||||
{
|
||||
|
||||
@@ -113,13 +113,6 @@ test('Create and update record', async ({ page }) => {
|
||||
await options.getByText('Hybrid').first().click({force: true});
|
||||
recordFieldList.getByText('Work Preference').first().click({force: true});
|
||||
|
||||
// Fill previous companies
|
||||
await recordFieldList.getByText('Previous Companies').first().click({force: true});
|
||||
await recordFieldList.getByText('Previous Companies').nth(1).click({force: true});
|
||||
await page.getByPlaceholder('Search').fill('VMw');
|
||||
await page.getByRole('listbox').first().getByText('VMware').click({force: true});
|
||||
await page.keyboard.press('Escape');
|
||||
|
||||
// Open full record page to get person ID
|
||||
await page.getByRole('button', { name: /^Open/ }).click();
|
||||
await page.waitForURL(/\/object\/person\//);
|
||||
@@ -149,6 +142,5 @@ test('Create and update record', async ({ page }) => {
|
||||
expect(findOnePersonReponseBody.data.person.linkedinLink.primaryLinkUrl).toBe('linkedin.com/johndoe');
|
||||
expect(findOnePersonReponseBody.data.person.phones.primaryPhoneNumber).toBe('611223344');
|
||||
expect(findOnePersonReponseBody.data.person.workPreference).toEqual(['HYBRID']);
|
||||
expect(findOnePersonReponseBody.data.person.previousCompanies.edges[0].node.company.name).toBe('VMware');
|
||||
|
||||
});
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
node_modules
|
||||
storybook-static
|
||||
src/__stories__/example-sources-built
|
||||
src/__stories__/example-sources-built/*
|
||||
!src/__stories__/example-sources-built/bundle-sizes.json.d.ts
|
||||
src/__stories__/example-sources-built-preact
|
||||
|
||||
+4
-1
@@ -60,7 +60,7 @@ const twentySharedAliases = Object.fromEntries(
|
||||
const storyAlias = {
|
||||
react: path.join(rootNodeModules, 'react'),
|
||||
'react-dom': path.join(rootNodeModules, 'react-dom'),
|
||||
'@/sdk': sdkIndividualIndex,
|
||||
'twenty-sdk': sdkIndividualIndex,
|
||||
'twenty-sdk/ui': twentyUiIndividualIndex,
|
||||
...twentySharedAliases,
|
||||
};
|
||||
@@ -77,6 +77,9 @@ const STORY_COMPONENTS = [
|
||||
'mui-example.front-component',
|
||||
'twenty-ui-example.front-component',
|
||||
'sdk-context-example.front-component',
|
||||
'form-events.front-component',
|
||||
'keyboard-events.front-component',
|
||||
'host-api-calls.front-component',
|
||||
];
|
||||
|
||||
const resolveEntryPoints = (): Record<string, string> => {
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ const getHtmlElementSchemas = (): ComponentSchema[] => {
|
||||
events: element.events
|
||||
? [...COMMON_HTML_EVENTS, ...element.events]
|
||||
: COMMON_HTML_EVENTS,
|
||||
htmlTag: extractHtmlTag(element.tag),
|
||||
htmlTag: element.htmlTag ?? extractHtmlTag(element.tag),
|
||||
}));
|
||||
};
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ export const HtmlElementConfigZ = z.object({
|
||||
.regex(/^Html[A-Z]/, 'Name must be PascalCase starting with Html'),
|
||||
properties: z.record(z.string(), PropertySchemaZ),
|
||||
events: z.array(z.string()).optional(),
|
||||
htmlTag: z.string().optional(),
|
||||
});
|
||||
|
||||
export const HtmlElementConfigArrayZ = z.array(HtmlElementConfigZ);
|
||||
|
||||
@@ -0,0 +1,348 @@
|
||||
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
||||
import { expect, fn, userEvent, waitFor, within } from 'storybook/test';
|
||||
|
||||
import { FrontComponentRenderer } from '../host/components/FrontComponentRenderer';
|
||||
|
||||
import { getBuiltStoryComponentPathForRender } from './utils/getBuiltStoryComponentPathForRender';
|
||||
|
||||
const errorHandler = fn();
|
||||
|
||||
const createHostApiMocks = () => ({
|
||||
navigate: fn().mockResolvedValue(undefined),
|
||||
enqueueSnackbar: fn().mockResolvedValue(undefined),
|
||||
openSidePanelPage: fn().mockResolvedValue(undefined),
|
||||
closeSidePanel: fn().mockResolvedValue(undefined),
|
||||
unmountFrontComponent: fn().mockResolvedValue(undefined),
|
||||
updateProgress: fn().mockResolvedValue(undefined),
|
||||
requestAccessTokenRefresh: fn().mockResolvedValue('refreshed-token'),
|
||||
openCommandConfirmationModal: fn().mockResolvedValue(undefined),
|
||||
});
|
||||
|
||||
const meta: Meta<typeof FrontComponentRenderer> = {
|
||||
title: 'FrontComponent/EventForwarding',
|
||||
component: FrontComponentRenderer,
|
||||
parameters: {
|
||||
layout: 'centered',
|
||||
},
|
||||
args: {
|
||||
onError: errorHandler,
|
||||
applicationAccessToken: 'fake-token',
|
||||
executionContext: {
|
||||
frontComponentId: 'storybook-test',
|
||||
userId: null,
|
||||
recordId: null,
|
||||
},
|
||||
colorScheme: 'light',
|
||||
frontComponentHostCommunicationApi: createHostApiMocks(),
|
||||
},
|
||||
beforeEach: () => {
|
||||
errorHandler.mockClear();
|
||||
},
|
||||
};
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof FrontComponentRenderer>;
|
||||
|
||||
const MOUNT_TIMEOUT = 30000;
|
||||
const INTERACTION_TIMEOUT = 5000;
|
||||
const HOST_API_TIMEOUT = 10000;
|
||||
|
||||
const createComponentStory = (
|
||||
name: string,
|
||||
options?: { play?: Story['play'] },
|
||||
): Story => ({
|
||||
args: {
|
||||
componentUrl: getBuiltStoryComponentPathForRender(
|
||||
`${name}.front-component`,
|
||||
),
|
||||
},
|
||||
...(options?.play ? { play: options.play } : {}),
|
||||
});
|
||||
|
||||
const createHostApiStory = (play: Story['play']): Story => ({
|
||||
...createComponentStory('host-api-calls'),
|
||||
args: {
|
||||
...createComponentStory('host-api-calls').args,
|
||||
frontComponentHostCommunicationApi: createHostApiMocks(),
|
||||
},
|
||||
play,
|
||||
});
|
||||
|
||||
export const FormTextInput: Story = createComponentStory('form-events', {
|
||||
play: async ({ canvasElement }) => {
|
||||
const canvas = within(canvasElement);
|
||||
|
||||
await canvas.findByTestId(
|
||||
'form-events-component',
|
||||
{},
|
||||
{ timeout: MOUNT_TIMEOUT },
|
||||
);
|
||||
|
||||
const textInput = await canvas.findByTestId('text-input');
|
||||
await userEvent.type(textInput, 'hello');
|
||||
|
||||
expect(
|
||||
await canvas.findByText('hello', {}, { timeout: INTERACTION_TIMEOUT }),
|
||||
).toBeVisible();
|
||||
},
|
||||
});
|
||||
|
||||
export const FormCheckbox: Story = createComponentStory('form-events', {
|
||||
play: async ({ canvasElement }) => {
|
||||
const canvas = within(canvasElement);
|
||||
|
||||
await canvas.findByTestId(
|
||||
'form-events-component',
|
||||
{},
|
||||
{ timeout: MOUNT_TIMEOUT },
|
||||
);
|
||||
|
||||
const checkbox = await canvas.findByTestId('checkbox-input');
|
||||
await userEvent.click(checkbox);
|
||||
|
||||
expect(
|
||||
await canvas.findByText('true', {}, { timeout: INTERACTION_TIMEOUT }),
|
||||
).toBeVisible();
|
||||
},
|
||||
});
|
||||
|
||||
export const FormFocusAndBlur: Story = createComponentStory('form-events', {
|
||||
play: async ({ canvasElement }) => {
|
||||
const canvas = within(canvasElement);
|
||||
|
||||
await canvas.findByTestId(
|
||||
'form-events-component',
|
||||
{},
|
||||
{ timeout: MOUNT_TIMEOUT },
|
||||
);
|
||||
|
||||
const textInput = await canvas.findByTestId('text-input');
|
||||
await userEvent.click(textInput);
|
||||
|
||||
expect(
|
||||
await canvas.findByText('focused', {}, { timeout: INTERACTION_TIMEOUT }),
|
||||
).toBeVisible();
|
||||
|
||||
await userEvent.click(await canvas.findByTestId('form-events-component'));
|
||||
|
||||
expect(
|
||||
await canvas.findByText('blurred', {}, { timeout: INTERACTION_TIMEOUT }),
|
||||
).toBeVisible();
|
||||
},
|
||||
});
|
||||
|
||||
export const FormSubmission: Story = createComponentStory('form-events', {
|
||||
play: async ({ canvasElement }) => {
|
||||
const canvas = within(canvasElement);
|
||||
|
||||
await canvas.findByTestId(
|
||||
'form-events-component',
|
||||
{},
|
||||
{ timeout: MOUNT_TIMEOUT },
|
||||
);
|
||||
|
||||
const textInput = await canvas.findByTestId('text-input');
|
||||
await userEvent.type(textInput, 'hello');
|
||||
|
||||
const checkbox = await canvas.findByTestId('checkbox-input');
|
||||
await userEvent.click(checkbox);
|
||||
|
||||
const submitButton = await canvas.findByTestId('submit-button');
|
||||
await userEvent.click(submitButton);
|
||||
|
||||
expect(
|
||||
await canvas.findByText(
|
||||
'{"text":"hello","checkbox":true}',
|
||||
{},
|
||||
{ timeout: INTERACTION_TIMEOUT },
|
||||
),
|
||||
).toBeVisible();
|
||||
},
|
||||
});
|
||||
|
||||
export const KeyboardBasicInput: Story = createComponentStory(
|
||||
'keyboard-events',
|
||||
{
|
||||
play: async ({ canvasElement }) => {
|
||||
const canvas = within(canvasElement);
|
||||
|
||||
await canvas.findByTestId(
|
||||
'keyboard-events-component',
|
||||
{},
|
||||
{ timeout: MOUNT_TIMEOUT },
|
||||
);
|
||||
|
||||
const input = await canvas.findByTestId('keyboard-input');
|
||||
await userEvent.click(input);
|
||||
|
||||
await userEvent.keyboard('a');
|
||||
|
||||
expect(
|
||||
await canvas.findByText('a', {}, { timeout: INTERACTION_TIMEOUT }),
|
||||
).toBeVisible();
|
||||
|
||||
expect(
|
||||
await canvas.findByText('KeyA', {}, { timeout: INTERACTION_TIMEOUT }),
|
||||
).toBeVisible();
|
||||
|
||||
expect(
|
||||
await canvas.findByText(
|
||||
/^[1-9]\d*$/,
|
||||
{},
|
||||
{ timeout: INTERACTION_TIMEOUT },
|
||||
),
|
||||
).toBeVisible();
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
export const KeyboardModifiers: Story = createComponentStory(
|
||||
'keyboard-events',
|
||||
{
|
||||
play: async ({ canvasElement }) => {
|
||||
const canvas = within(canvasElement);
|
||||
|
||||
await canvas.findByTestId(
|
||||
'keyboard-events-component',
|
||||
{},
|
||||
{ timeout: MOUNT_TIMEOUT },
|
||||
);
|
||||
|
||||
const input = await canvas.findByTestId('keyboard-input');
|
||||
await userEvent.click(input);
|
||||
|
||||
await userEvent.keyboard('{Shift>}b{/Shift}');
|
||||
|
||||
expect(
|
||||
await canvas.findByText('shift', {}, { timeout: INTERACTION_TIMEOUT }),
|
||||
).toBeVisible();
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
export const HostApiNavigate: Story = createHostApiStory(
|
||||
async ({ canvasElement, args }) => {
|
||||
const canvas = within(canvasElement);
|
||||
const api = args.frontComponentHostCommunicationApi!;
|
||||
|
||||
await canvas.findByTestId(
|
||||
'host-api-calls-component',
|
||||
{},
|
||||
{ timeout: MOUNT_TIMEOUT },
|
||||
);
|
||||
|
||||
const navigateBtn = await canvas.findByTestId('btn-navigate');
|
||||
await userEvent.click(navigateBtn);
|
||||
|
||||
await waitFor(
|
||||
() => {
|
||||
expect(api.navigate).toHaveBeenCalled();
|
||||
},
|
||||
{ timeout: HOST_API_TIMEOUT },
|
||||
);
|
||||
|
||||
expect(
|
||||
await canvas.findByText(
|
||||
'navigate:success',
|
||||
{},
|
||||
{ timeout: INTERACTION_TIMEOUT },
|
||||
),
|
||||
).toBeVisible();
|
||||
},
|
||||
);
|
||||
|
||||
export const HostApiSnackbar: Story = createHostApiStory(
|
||||
async ({ canvasElement, args }) => {
|
||||
const canvas = within(canvasElement);
|
||||
const api = args.frontComponentHostCommunicationApi!;
|
||||
|
||||
await canvas.findByTestId(
|
||||
'host-api-calls-component',
|
||||
{},
|
||||
{ timeout: MOUNT_TIMEOUT },
|
||||
);
|
||||
|
||||
const snackbarBtn = await canvas.findByTestId('btn-snackbar');
|
||||
await userEvent.click(snackbarBtn);
|
||||
|
||||
await waitFor(
|
||||
() => {
|
||||
expect(api.enqueueSnackbar).toHaveBeenCalledWith({
|
||||
message: 'Test notification',
|
||||
variant: 'success',
|
||||
});
|
||||
},
|
||||
{ timeout: HOST_API_TIMEOUT },
|
||||
);
|
||||
|
||||
expect(
|
||||
await canvas.findByText(
|
||||
'snackbar:success',
|
||||
{},
|
||||
{ timeout: INTERACTION_TIMEOUT },
|
||||
),
|
||||
).toBeVisible();
|
||||
},
|
||||
);
|
||||
|
||||
export const HostApiProgress: Story = createHostApiStory(
|
||||
async ({ canvasElement, args }) => {
|
||||
const canvas = within(canvasElement);
|
||||
const api = args.frontComponentHostCommunicationApi!;
|
||||
|
||||
await canvas.findByTestId(
|
||||
'host-api-calls-component',
|
||||
{},
|
||||
{ timeout: MOUNT_TIMEOUT },
|
||||
);
|
||||
|
||||
const progressBtn = await canvas.findByTestId('btn-progress');
|
||||
await userEvent.click(progressBtn);
|
||||
|
||||
await waitFor(
|
||||
() => {
|
||||
expect(api.updateProgress).toHaveBeenCalledWith(50);
|
||||
},
|
||||
{ timeout: HOST_API_TIMEOUT },
|
||||
);
|
||||
|
||||
expect(
|
||||
await canvas.findByText(
|
||||
'progress:success',
|
||||
{},
|
||||
{ timeout: INTERACTION_TIMEOUT },
|
||||
),
|
||||
).toBeVisible();
|
||||
},
|
||||
);
|
||||
|
||||
export const HostApiClosePanel: Story = createHostApiStory(
|
||||
async ({ canvasElement, args }) => {
|
||||
const canvas = within(canvasElement);
|
||||
const api = args.frontComponentHostCommunicationApi!;
|
||||
|
||||
await canvas.findByTestId(
|
||||
'host-api-calls-component',
|
||||
{},
|
||||
{ timeout: MOUNT_TIMEOUT },
|
||||
);
|
||||
|
||||
const closePanelBtn = await canvas.findByTestId('btn-close-panel');
|
||||
await userEvent.click(closePanelBtn);
|
||||
|
||||
await waitFor(
|
||||
() => {
|
||||
expect(api.closeSidePanel).toHaveBeenCalled();
|
||||
},
|
||||
{ timeout: HOST_API_TIMEOUT },
|
||||
);
|
||||
|
||||
expect(
|
||||
await canvas.findByText(
|
||||
'closePanel:success',
|
||||
{},
|
||||
{ timeout: INTERACTION_TIMEOUT },
|
||||
),
|
||||
).toBeVisible();
|
||||
},
|
||||
);
|
||||
+9
-8
@@ -16,7 +16,11 @@ const meta: Meta<typeof FrontComponentRenderer> = {
|
||||
args: {
|
||||
onError: errorHandler,
|
||||
applicationAccessToken: 'fake-token',
|
||||
executionContext: { frontComponentId: 'storybook-test', userId: null },
|
||||
executionContext: {
|
||||
frontComponentId: 'storybook-test',
|
||||
userId: null,
|
||||
recordId: null,
|
||||
},
|
||||
},
|
||||
beforeEach: () => {
|
||||
errorHandler.mockClear();
|
||||
@@ -92,13 +96,9 @@ export const Lifecycle: Story = {
|
||||
|
||||
expect(await canvas.findByText('Mounted')).toBeVisible();
|
||||
|
||||
await waitFor(
|
||||
() => {
|
||||
const tickElement = canvas.getByTestId('tick-count');
|
||||
expect(tickElement.textContent).toMatch(/Ticks: [1-9]\d*/);
|
||||
},
|
||||
{ timeout: 10000 },
|
||||
);
|
||||
expect(
|
||||
await canvas.findByText(/Ticks: [1-9]\d*/, {}, { timeout: 10000 }),
|
||||
).toBeVisible();
|
||||
},
|
||||
};
|
||||
|
||||
@@ -121,6 +121,7 @@ export const SdkContext: Story = {
|
||||
executionContext: {
|
||||
frontComponentId: 'sdk-context-test',
|
||||
userId: 'test-user-abc-123',
|
||||
recordId: null,
|
||||
},
|
||||
},
|
||||
play: async ({ canvasElement }) => {
|
||||
|
||||
@@ -16,7 +16,11 @@ const meta: Meta<typeof FrontComponentRenderer> = {
|
||||
args: {
|
||||
onError: errorHandler,
|
||||
applicationAccessToken: 'fake-token',
|
||||
executionContext: { frontComponentId: 'storybook-test', userId: null },
|
||||
executionContext: {
|
||||
frontComponentId: 'storybook-test',
|
||||
userId: null,
|
||||
recordId: null,
|
||||
},
|
||||
},
|
||||
beforeEach: () => {
|
||||
errorHandler.mockClear();
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
declare const bundleSizes: {
|
||||
name: string;
|
||||
reactBytes: number;
|
||||
preactBytes: number;
|
||||
}[];
|
||||
|
||||
export default bundleSizes;
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
import { defineFrontComponent } from 'twenty-sdk';
|
||||
import styled from '@emotion/styled';
|
||||
import { useState } from 'react';
|
||||
import { defineFrontComponent } from '@/sdk';
|
||||
|
||||
const Card = styled.div`
|
||||
padding: 24px;
|
||||
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
import { defineFrontComponent } from 'twenty-sdk';
|
||||
import { type ChangeEvent, useState } from 'react';
|
||||
|
||||
const CARD_STYLE = {
|
||||
padding: 24,
|
||||
backgroundColor: '#f0fdf4',
|
||||
border: '2px solid #22c55e',
|
||||
borderRadius: 12,
|
||||
fontFamily: 'system-ui, sans-serif',
|
||||
display: 'flex',
|
||||
flexDirection: 'column' as const,
|
||||
gap: 16,
|
||||
maxWidth: 400,
|
||||
};
|
||||
|
||||
const HEADING_STYLE = {
|
||||
color: '#166534',
|
||||
fontWeight: 700,
|
||||
fontSize: 18,
|
||||
margin: 0,
|
||||
};
|
||||
|
||||
const LABEL_STYLE = {
|
||||
fontSize: 13,
|
||||
fontWeight: 600,
|
||||
color: '#374151',
|
||||
};
|
||||
|
||||
const HINT_STYLE = {
|
||||
fontSize: 13,
|
||||
color: '#6b7280',
|
||||
};
|
||||
|
||||
const INPUT_STYLE = {
|
||||
padding: '8px 12px',
|
||||
border: '1px solid #d1d5db',
|
||||
borderRadius: 6,
|
||||
fontSize: 14,
|
||||
};
|
||||
|
||||
const SUBMIT_BUTTON_STYLE = {
|
||||
padding: '10px 20px',
|
||||
backgroundColor: '#16a34a',
|
||||
color: 'white',
|
||||
border: 'none',
|
||||
borderRadius: 6,
|
||||
fontWeight: 600,
|
||||
cursor: 'pointer',
|
||||
};
|
||||
|
||||
const FormEventsComponent = () => {
|
||||
const [textValue, setTextValue] = useState('');
|
||||
const [checkboxValue, setCheckboxValue] = useState(false);
|
||||
const [focusState, setFocusState] = useState('none');
|
||||
const [submittedData, setSubmittedData] = useState<string | null>(null);
|
||||
|
||||
return (
|
||||
<div data-testid="form-events-component" style={CARD_STYLE}>
|
||||
<h2 style={HEADING_STYLE}>Form Events</h2>
|
||||
|
||||
<div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
|
||||
<label style={LABEL_STYLE}>Text Input</label>
|
||||
<input
|
||||
data-testid="text-input"
|
||||
type="text"
|
||||
placeholder="Type here..."
|
||||
onChange={(event: ChangeEvent<HTMLInputElement>) => {
|
||||
const detail = (event as unknown as { detail: { value?: string } })
|
||||
.detail;
|
||||
setTextValue(detail?.value ?? '');
|
||||
}}
|
||||
onFocus={() => setFocusState('focused')}
|
||||
onBlur={() => setFocusState('blurred')}
|
||||
style={INPUT_STYLE}
|
||||
/>
|
||||
<span data-testid="text-value" style={HINT_STYLE}>
|
||||
{textValue}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
|
||||
<input
|
||||
data-testid="checkbox-input"
|
||||
type="checkbox"
|
||||
checked={checkboxValue}
|
||||
onChange={(event: ChangeEvent<HTMLInputElement>) => {
|
||||
const detail = (
|
||||
event as unknown as { detail: { checked?: boolean } }
|
||||
).detail;
|
||||
setCheckboxValue(detail?.checked ?? false);
|
||||
}}
|
||||
/>
|
||||
<label style={LABEL_STYLE}>Check me</label>
|
||||
<span data-testid="checkbox-value" style={HINT_STYLE}>
|
||||
{String(checkboxValue)}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<span data-testid="focus-state" style={HINT_STYLE}>
|
||||
{focusState}
|
||||
</span>
|
||||
|
||||
<button
|
||||
data-testid="submit-button"
|
||||
type="button"
|
||||
onClick={() =>
|
||||
setSubmittedData(
|
||||
JSON.stringify({ text: textValue, checkbox: checkboxValue }),
|
||||
)
|
||||
}
|
||||
style={SUBMIT_BUTTON_STYLE}
|
||||
>
|
||||
Submit
|
||||
</button>
|
||||
|
||||
{submittedData !== null && (
|
||||
<pre
|
||||
data-testid="submitted-data"
|
||||
style={{
|
||||
fontSize: 13,
|
||||
background: '#dcfce7',
|
||||
padding: 12,
|
||||
borderRadius: 8,
|
||||
margin: 0,
|
||||
overflow: 'auto',
|
||||
}}
|
||||
>
|
||||
{submittedData}
|
||||
</pre>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default defineFrontComponent({
|
||||
universalIdentifier: 'test-form-00000000-0000-0000-0000-000000000020',
|
||||
name: 'form-events-component',
|
||||
description:
|
||||
'Component testing form input events (onChange, onFocus, onBlur, submit)',
|
||||
component: FormEventsComponent,
|
||||
});
|
||||
+155
@@ -0,0 +1,155 @@
|
||||
import {
|
||||
AppPath,
|
||||
closeSidePanel,
|
||||
defineFrontComponent,
|
||||
enqueueSnackbar,
|
||||
navigate,
|
||||
openSidePanelPage,
|
||||
SidePanelPages,
|
||||
unmountFrontComponent,
|
||||
updateProgress,
|
||||
} from 'twenty-sdk';
|
||||
import { useState } from 'react';
|
||||
|
||||
const CARD_STYLE = {
|
||||
padding: 24,
|
||||
backgroundColor: '#faf5ff',
|
||||
border: '2px solid #a78bfa',
|
||||
borderRadius: 12,
|
||||
fontFamily: 'system-ui, sans-serif',
|
||||
display: 'flex',
|
||||
flexDirection: 'column' as const,
|
||||
gap: 10,
|
||||
maxWidth: 400,
|
||||
};
|
||||
|
||||
const HEADING_STYLE = {
|
||||
color: '#5b21b6',
|
||||
fontWeight: 700,
|
||||
fontSize: 18,
|
||||
margin: 0,
|
||||
};
|
||||
|
||||
const BUTTON_STYLE = {
|
||||
padding: '8px 16px',
|
||||
backgroundColor: '#7c3aed',
|
||||
color: 'white',
|
||||
border: 'none',
|
||||
borderRadius: 6,
|
||||
fontWeight: 600,
|
||||
cursor: 'pointer',
|
||||
fontSize: 13,
|
||||
};
|
||||
|
||||
const STATUS_STYLE = {
|
||||
fontSize: 13,
|
||||
color: '#6b7280',
|
||||
fontFamily: 'monospace',
|
||||
};
|
||||
|
||||
const HostApiCallsComponent = () => {
|
||||
const [apiStatus, setApiStatus] = useState('idle');
|
||||
|
||||
const callApi = async (name: string, apiFunction: () => Promise<void>) => {
|
||||
try {
|
||||
await apiFunction();
|
||||
setApiStatus(`${name}:success`);
|
||||
} catch (error) {
|
||||
setApiStatus(
|
||||
`${name}:error:${error instanceof Error ? error.message : String(error)}`,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div data-testid="host-api-calls-component" style={CARD_STYLE}>
|
||||
<h2 style={HEADING_STYLE}>Host API Calls</h2>
|
||||
|
||||
<button
|
||||
data-testid="btn-navigate"
|
||||
type="button"
|
||||
onClick={() =>
|
||||
callApi('navigate', () =>
|
||||
navigate(AppPath.RecordIndexPage, {
|
||||
objectNamePlural: 'companies',
|
||||
}),
|
||||
)
|
||||
}
|
||||
style={BUTTON_STYLE}
|
||||
>
|
||||
Navigate
|
||||
</button>
|
||||
|
||||
<button
|
||||
data-testid="btn-snackbar"
|
||||
type="button"
|
||||
onClick={() =>
|
||||
callApi('snackbar', () =>
|
||||
enqueueSnackbar({
|
||||
message: 'Test notification',
|
||||
variant: 'success',
|
||||
}),
|
||||
)
|
||||
}
|
||||
style={BUTTON_STYLE}
|
||||
>
|
||||
Snackbar
|
||||
</button>
|
||||
|
||||
<button
|
||||
data-testid="btn-side-panel"
|
||||
type="button"
|
||||
onClick={() =>
|
||||
callApi('sidePanel', () =>
|
||||
openSidePanelPage({
|
||||
page: SidePanelPages.ViewRecord,
|
||||
pageTitle: 'Test Record',
|
||||
}),
|
||||
)
|
||||
}
|
||||
style={BUTTON_STYLE}
|
||||
>
|
||||
Open Side Panel
|
||||
</button>
|
||||
|
||||
<button
|
||||
data-testid="btn-close-panel"
|
||||
type="button"
|
||||
onClick={() => callApi('closePanel', () => closeSidePanel())}
|
||||
style={BUTTON_STYLE}
|
||||
>
|
||||
Close Side Panel
|
||||
</button>
|
||||
|
||||
<button
|
||||
data-testid="btn-unmount"
|
||||
type="button"
|
||||
onClick={() => callApi('unmount', () => unmountFrontComponent())}
|
||||
style={BUTTON_STYLE}
|
||||
>
|
||||
Unmount
|
||||
</button>
|
||||
|
||||
<button
|
||||
data-testid="btn-progress"
|
||||
type="button"
|
||||
onClick={() => callApi('progress', () => updateProgress(50))}
|
||||
style={BUTTON_STYLE}
|
||||
>
|
||||
Update Progress (50)
|
||||
</button>
|
||||
|
||||
<span data-testid="api-status" style={STATUS_STYLE}>
|
||||
{apiStatus}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default defineFrontComponent({
|
||||
universalIdentifier: 'test-hapi-00000000-0000-0000-0000-000000000022',
|
||||
name: 'host-api-calls-component',
|
||||
description:
|
||||
'Component testing host communication API calls (navigate, snackbar, side panel, etc.)',
|
||||
component: HostApiCallsComponent,
|
||||
});
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
import { defineFrontComponent } from '@/sdk';
|
||||
import { defineFrontComponent } from 'twenty-sdk';
|
||||
import { useState } from 'react';
|
||||
|
||||
const InteractiveComponent = () => {
|
||||
|
||||
+125
@@ -0,0 +1,125 @@
|
||||
import { defineFrontComponent } from 'twenty-sdk';
|
||||
import { type KeyboardEvent, useState } from 'react';
|
||||
|
||||
type RemoteKeyboardEventDetail = {
|
||||
key?: string;
|
||||
code?: string;
|
||||
shiftKey?: boolean;
|
||||
ctrlKey?: boolean;
|
||||
metaKey?: boolean;
|
||||
altKey?: boolean;
|
||||
};
|
||||
|
||||
const KeyboardEventsComponent = () => {
|
||||
const [lastKey, setLastKey] = useState('');
|
||||
const [lastCode, setLastCode] = useState('');
|
||||
const [modifiers, setModifiers] = useState('');
|
||||
const [keyCount, setKeyCount] = useState(0);
|
||||
|
||||
// remote-dom serializes keyboard events into CustomEvent.detail
|
||||
const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {
|
||||
const data = (event as unknown as { detail: RemoteKeyboardEventDetail })
|
||||
.detail;
|
||||
|
||||
setLastKey(data.key ?? '');
|
||||
setLastCode(data.code ?? '');
|
||||
setKeyCount((previousCount) => previousCount + 1);
|
||||
|
||||
const activeModifiers: string[] = [];
|
||||
if (data.shiftKey) activeModifiers.push('shift');
|
||||
if (data.ctrlKey) activeModifiers.push('ctrl');
|
||||
if (data.metaKey) activeModifiers.push('meta');
|
||||
if (data.altKey) activeModifiers.push('alt');
|
||||
setModifiers(activeModifiers.join(','));
|
||||
};
|
||||
|
||||
return (
|
||||
<div
|
||||
data-testid="keyboard-events-component"
|
||||
style={{
|
||||
padding: 24,
|
||||
backgroundColor: '#fefce8',
|
||||
border: '2px solid #eab308',
|
||||
borderRadius: 12,
|
||||
fontFamily: 'system-ui, sans-serif',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
gap: 12,
|
||||
maxWidth: 400,
|
||||
}}
|
||||
>
|
||||
<h2
|
||||
style={{
|
||||
color: '#854d0e',
|
||||
fontWeight: 700,
|
||||
fontSize: 18,
|
||||
margin: 0,
|
||||
}}
|
||||
>
|
||||
Keyboard Events
|
||||
</h2>
|
||||
|
||||
<input
|
||||
data-testid="keyboard-input"
|
||||
type="text"
|
||||
placeholder="Press keys here..."
|
||||
onKeyDown={handleKeyDown}
|
||||
style={{
|
||||
padding: '8px 12px',
|
||||
border: '1px solid #d1d5db',
|
||||
borderRadius: 6,
|
||||
fontSize: 14,
|
||||
}}
|
||||
/>
|
||||
|
||||
<div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>
|
||||
<div style={{ display: 'flex', gap: 16 }}>
|
||||
<span style={{ fontSize: 13, color: '#6b7280' }}>
|
||||
Key:{' '}
|
||||
<span
|
||||
data-testid="last-key"
|
||||
style={{ fontWeight: 700, color: '#854d0e' }}
|
||||
>
|
||||
{lastKey}
|
||||
</span>
|
||||
</span>
|
||||
<span style={{ fontSize: 13, color: '#6b7280' }}>
|
||||
Code:{' '}
|
||||
<span
|
||||
data-testid="last-code"
|
||||
style={{ fontWeight: 700, color: '#854d0e' }}
|
||||
>
|
||||
{lastCode}
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<span style={{ fontSize: 13, color: '#6b7280' }}>
|
||||
Modifiers:{' '}
|
||||
<span
|
||||
data-testid="modifiers"
|
||||
style={{ fontWeight: 700, color: '#854d0e' }}
|
||||
>
|
||||
{modifiers}
|
||||
</span>
|
||||
</span>
|
||||
<span style={{ fontSize: 13, color: '#6b7280' }}>
|
||||
Key count:{' '}
|
||||
<span
|
||||
data-testid="key-count"
|
||||
style={{ fontWeight: 700, color: '#854d0e' }}
|
||||
>
|
||||
{keyCount}
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default defineFrontComponent({
|
||||
universalIdentifier: 'test-kbd0-00000000-0000-0000-0000-000000000021',
|
||||
name: 'keyboard-events-component',
|
||||
description:
|
||||
'Component testing keyboard event serialization (key, code, modifiers)',
|
||||
component: KeyboardEventsComponent,
|
||||
});
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
import { defineFrontComponent } from '@/sdk';
|
||||
import { defineFrontComponent } from 'twenty-sdk';
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
const LifecycleComponent = () => {
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import { defineFrontComponent } from 'twenty-sdk';
|
||||
import Button from '@mui/material/Button';
|
||||
import MuiChip from '@mui/material/Chip';
|
||||
import { useState } from 'react';
|
||||
import { defineFrontComponent } from '@/sdk';
|
||||
|
||||
const MuiComponent = () => {
|
||||
const [count, setCount] = useState(0);
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
import { useState } from 'react';
|
||||
import {
|
||||
defineFrontComponent,
|
||||
useFrontComponentExecutionContext,
|
||||
useUserId,
|
||||
} from '@/sdk';
|
||||
} from 'twenty-sdk';
|
||||
import { useState } from 'react';
|
||||
|
||||
const CARD_STYLE = {
|
||||
padding: 24,
|
||||
@@ -72,7 +72,7 @@ const SdkContextComponent = () => {
|
||||
overflow: 'auto',
|
||||
}}
|
||||
>
|
||||
{JSON.stringify(fullContext, null, 2) ?? 'undefined'}
|
||||
{JSON.stringify(fullContext, null, 2)}
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
import { defineFrontComponent } from 'twenty-sdk';
|
||||
import { useState } from 'react';
|
||||
import { defineFrontComponent } from '@/sdk';
|
||||
|
||||
const SHADCN_CSS = `
|
||||
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
import { defineFrontComponent } from '@/sdk';
|
||||
import { defineFrontComponent } from 'twenty-sdk';
|
||||
|
||||
const StaticComponent = () => (
|
||||
<div
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
import { defineFrontComponent } from 'twenty-sdk';
|
||||
import { useState } from 'react';
|
||||
import styled from 'styled-components';
|
||||
import { defineFrontComponent } from '@/sdk';
|
||||
|
||||
const Card = styled.div`
|
||||
padding: 24px;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
import { defineFrontComponent } from '@/sdk';
|
||||
import { defineFrontComponent } from 'twenty-sdk';
|
||||
import { useState } from 'react';
|
||||
|
||||
const TAILWIND_CSS = `
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
import { defineFrontComponent } from 'twenty-sdk';
|
||||
import { useState } from 'react';
|
||||
import { defineFrontComponent } from '@/sdk';
|
||||
import {
|
||||
Button,
|
||||
Chip,
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
type PropertySchema = {
|
||||
type: 'string' | 'number' | 'boolean';
|
||||
optional: boolean;
|
||||
};
|
||||
import { type PropertySchema } from './PropertySchema';
|
||||
import { SVG_PRESENTATION_PROPERTIES } from './SvgPresentationProperties';
|
||||
|
||||
export type AllowedHtmlElement = {
|
||||
tag: string;
|
||||
name: string;
|
||||
properties: Record<string, PropertySchema>;
|
||||
events?: string[];
|
||||
htmlTag?: string;
|
||||
};
|
||||
|
||||
export const ALLOWED_HTML_ELEMENTS: AllowedHtmlElement[] = [
|
||||
@@ -249,4 +248,421 @@ export const ALLOWED_HTML_ELEMENTS: AllowedHtmlElement[] = [
|
||||
height: { type: 'number', optional: true },
|
||||
},
|
||||
},
|
||||
|
||||
// Semantic inline text
|
||||
{ tag: 'html-b', name: 'HtmlB', properties: {} },
|
||||
{ tag: 'html-i', name: 'HtmlI', properties: {} },
|
||||
{ tag: 'html-u', name: 'HtmlU', properties: {} },
|
||||
{ tag: 'html-s', name: 'HtmlS', properties: {} },
|
||||
{ tag: 'html-mark', name: 'HtmlMark', properties: {} },
|
||||
{ tag: 'html-sub', name: 'HtmlSub', properties: {} },
|
||||
{ tag: 'html-sup', name: 'HtmlSup', properties: {} },
|
||||
{ tag: 'html-abbr', name: 'HtmlAbbr', properties: {} },
|
||||
{ tag: 'html-cite', name: 'HtmlCite', properties: {} },
|
||||
{ tag: 'html-kbd', name: 'HtmlKbd', properties: {} },
|
||||
{ tag: 'html-samp', name: 'HtmlSamp', properties: {} },
|
||||
{ tag: 'html-var', name: 'HtmlVar', properties: {} },
|
||||
{ tag: 'html-dfn', name: 'HtmlDfn', properties: {} },
|
||||
{ tag: 'html-bdi', name: 'HtmlBdi', properties: {} },
|
||||
{
|
||||
tag: 'html-bdo',
|
||||
name: 'HtmlBdo',
|
||||
properties: {
|
||||
dir: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-data',
|
||||
name: 'HtmlData',
|
||||
properties: {
|
||||
value: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
|
||||
// Edited/annotated text
|
||||
{
|
||||
tag: 'html-del',
|
||||
name: 'HtmlDel',
|
||||
properties: {
|
||||
cite: { type: 'string', optional: true },
|
||||
dateTime: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-ins',
|
||||
name: 'HtmlIns',
|
||||
properties: {
|
||||
cite: { type: 'string', optional: true },
|
||||
dateTime: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-q',
|
||||
name: 'HtmlQ',
|
||||
properties: {
|
||||
cite: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-time',
|
||||
name: 'HtmlTime',
|
||||
properties: {
|
||||
dateTime: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
|
||||
// Ruby annotations
|
||||
{ tag: 'html-ruby', name: 'HtmlRuby', properties: {} },
|
||||
{ tag: 'html-rt', name: 'HtmlRt', properties: {} },
|
||||
{ tag: 'html-rp', name: 'HtmlRp', properties: {} },
|
||||
|
||||
// Description lists
|
||||
{ tag: 'html-dl', name: 'HtmlDl', properties: {} },
|
||||
{ tag: 'html-dt', name: 'HtmlDt', properties: {} },
|
||||
{ tag: 'html-dd', name: 'HtmlDd', properties: {} },
|
||||
|
||||
// Structural/semantic
|
||||
{ tag: 'html-figure', name: 'HtmlFigure', properties: {} },
|
||||
{ tag: 'html-figcaption', name: 'HtmlFigcaption', properties: {} },
|
||||
{
|
||||
tag: 'html-details',
|
||||
name: 'HtmlDetails',
|
||||
properties: {
|
||||
open: { type: 'boolean', optional: true },
|
||||
},
|
||||
},
|
||||
{ tag: 'html-summary', name: 'HtmlSummary', properties: {} },
|
||||
{ tag: 'html-address', name: 'HtmlAddress', properties: {} },
|
||||
{
|
||||
tag: 'html-dialog',
|
||||
name: 'HtmlDialog',
|
||||
properties: {
|
||||
open: { type: 'boolean', optional: true },
|
||||
},
|
||||
},
|
||||
{ tag: 'html-hgroup', name: 'HtmlHgroup', properties: {} },
|
||||
{ tag: 'html-search', name: 'HtmlSearch', properties: {} },
|
||||
|
||||
// Table additions
|
||||
{ tag: 'html-caption', name: 'HtmlCaption', properties: {} },
|
||||
{
|
||||
tag: 'html-colgroup',
|
||||
name: 'HtmlColgroup',
|
||||
properties: {
|
||||
span: { type: 'number', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-col',
|
||||
name: 'HtmlCol',
|
||||
properties: {
|
||||
span: { type: 'number', optional: true },
|
||||
},
|
||||
},
|
||||
|
||||
// Form additions
|
||||
{
|
||||
tag: 'html-fieldset',
|
||||
name: 'HtmlFieldset',
|
||||
properties: {
|
||||
disabled: { type: 'boolean', optional: true },
|
||||
name: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{ tag: 'html-legend', name: 'HtmlLegend', properties: {} },
|
||||
{
|
||||
tag: 'html-output',
|
||||
name: 'HtmlOutput',
|
||||
properties: {
|
||||
name: { type: 'string', optional: true },
|
||||
htmlFor: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-progress',
|
||||
name: 'HtmlProgress',
|
||||
properties: {
|
||||
value: { type: 'number', optional: true },
|
||||
max: { type: 'number', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-meter',
|
||||
name: 'HtmlMeter',
|
||||
properties: {
|
||||
value: { type: 'number', optional: true },
|
||||
min: { type: 'number', optional: true },
|
||||
max: { type: 'number', optional: true },
|
||||
low: { type: 'number', optional: true },
|
||||
high: { type: 'number', optional: true },
|
||||
optimum: { type: 'number', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-optgroup',
|
||||
name: 'HtmlOptgroup',
|
||||
properties: {
|
||||
label: { type: 'string', optional: true },
|
||||
disabled: { type: 'boolean', optional: true },
|
||||
},
|
||||
},
|
||||
{ tag: 'html-datalist', name: 'HtmlDatalist', properties: {} },
|
||||
|
||||
// Media additions
|
||||
{ tag: 'html-picture', name: 'HtmlPicture', properties: {} },
|
||||
{
|
||||
tag: 'html-track',
|
||||
name: 'HtmlTrack',
|
||||
properties: {
|
||||
src: { type: 'string', optional: true },
|
||||
kind: { type: 'string', optional: true },
|
||||
srclang: { type: 'string', optional: true },
|
||||
label: { type: 'string', optional: true },
|
||||
default: { type: 'boolean', optional: true },
|
||||
},
|
||||
},
|
||||
|
||||
// Miscellaneous
|
||||
{ tag: 'html-wbr', name: 'HtmlWbr', properties: {} },
|
||||
{ tag: 'html-menu', name: 'HtmlMenu', properties: {} },
|
||||
|
||||
// SVG container/structural
|
||||
{
|
||||
tag: 'html-svg',
|
||||
name: 'HtmlSvg',
|
||||
properties: {
|
||||
...SVG_PRESENTATION_PROPERTIES,
|
||||
viewBox: { type: 'string', optional: true },
|
||||
xmlns: { type: 'string', optional: true },
|
||||
width: { type: 'string', optional: true },
|
||||
height: { type: 'string', optional: true },
|
||||
preserveAspectRatio: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-g',
|
||||
name: 'HtmlG',
|
||||
properties: {
|
||||
...SVG_PRESENTATION_PROPERTIES,
|
||||
},
|
||||
},
|
||||
{ tag: 'html-defs', name: 'HtmlDefs', properties: {} },
|
||||
{
|
||||
tag: 'html-symbol',
|
||||
name: 'HtmlSymbol',
|
||||
properties: {
|
||||
viewBox: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-use',
|
||||
name: 'HtmlUse',
|
||||
properties: {
|
||||
href: { type: 'string', optional: true },
|
||||
x: { type: 'string', optional: true },
|
||||
y: { type: 'string', optional: true },
|
||||
width: { type: 'string', optional: true },
|
||||
height: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-clippath',
|
||||
name: 'HtmlClipPath',
|
||||
htmlTag: 'clipPath',
|
||||
properties: {
|
||||
clipPathUnits: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-mask',
|
||||
name: 'HtmlMask',
|
||||
properties: {
|
||||
maskUnits: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
|
||||
// SVG shapes
|
||||
{
|
||||
tag: 'html-circle',
|
||||
name: 'HtmlCircle',
|
||||
properties: {
|
||||
...SVG_PRESENTATION_PROPERTIES,
|
||||
cx: { type: 'string', optional: true },
|
||||
cy: { type: 'string', optional: true },
|
||||
r: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-ellipse',
|
||||
name: 'HtmlEllipse',
|
||||
properties: {
|
||||
...SVG_PRESENTATION_PROPERTIES,
|
||||
cx: { type: 'string', optional: true },
|
||||
cy: { type: 'string', optional: true },
|
||||
rx: { type: 'string', optional: true },
|
||||
ry: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-rect',
|
||||
name: 'HtmlRect',
|
||||
properties: {
|
||||
...SVG_PRESENTATION_PROPERTIES,
|
||||
x: { type: 'string', optional: true },
|
||||
y: { type: 'string', optional: true },
|
||||
width: { type: 'string', optional: true },
|
||||
height: { type: 'string', optional: true },
|
||||
rx: { type: 'string', optional: true },
|
||||
ry: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-line',
|
||||
name: 'HtmlLine',
|
||||
properties: {
|
||||
...SVG_PRESENTATION_PROPERTIES,
|
||||
x1: { type: 'string', optional: true },
|
||||
y1: { type: 'string', optional: true },
|
||||
x2: { type: 'string', optional: true },
|
||||
y2: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-path',
|
||||
name: 'HtmlPath',
|
||||
properties: {
|
||||
...SVG_PRESENTATION_PROPERTIES,
|
||||
d: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-polygon',
|
||||
name: 'HtmlPolygon',
|
||||
properties: {
|
||||
...SVG_PRESENTATION_PROPERTIES,
|
||||
points: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-polyline',
|
||||
name: 'HtmlPolyline',
|
||||
properties: {
|
||||
...SVG_PRESENTATION_PROPERTIES,
|
||||
points: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
|
||||
// SVG text
|
||||
{
|
||||
tag: 'html-text',
|
||||
name: 'HtmlText',
|
||||
properties: {
|
||||
...SVG_PRESENTATION_PROPERTIES,
|
||||
x: { type: 'string', optional: true },
|
||||
y: { type: 'string', optional: true },
|
||||
dx: { type: 'string', optional: true },
|
||||
dy: { type: 'string', optional: true },
|
||||
textAnchor: { type: 'string', optional: true },
|
||||
dominantBaseline: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-tspan',
|
||||
name: 'HtmlTspan',
|
||||
properties: {
|
||||
...SVG_PRESENTATION_PROPERTIES,
|
||||
x: { type: 'string', optional: true },
|
||||
y: { type: 'string', optional: true },
|
||||
dx: { type: 'string', optional: true },
|
||||
dy: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
|
||||
// SVG gradients/patterns
|
||||
{
|
||||
tag: 'html-lineargradient',
|
||||
name: 'HtmlLinearGradient',
|
||||
htmlTag: 'linearGradient',
|
||||
properties: {
|
||||
x1: { type: 'string', optional: true },
|
||||
y1: { type: 'string', optional: true },
|
||||
x2: { type: 'string', optional: true },
|
||||
y2: { type: 'string', optional: true },
|
||||
gradientUnits: { type: 'string', optional: true },
|
||||
gradientTransform: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-radialgradient',
|
||||
name: 'HtmlRadialGradient',
|
||||
htmlTag: 'radialGradient',
|
||||
properties: {
|
||||
cx: { type: 'string', optional: true },
|
||||
cy: { type: 'string', optional: true },
|
||||
r: { type: 'string', optional: true },
|
||||
fx: { type: 'string', optional: true },
|
||||
fy: { type: 'string', optional: true },
|
||||
gradientUnits: { type: 'string', optional: true },
|
||||
gradientTransform: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-stop',
|
||||
name: 'HtmlStop',
|
||||
properties: {
|
||||
offset: { type: 'string', optional: true },
|
||||
stopColor: { type: 'string', optional: true },
|
||||
stopOpacity: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-pattern',
|
||||
name: 'HtmlPattern',
|
||||
properties: {
|
||||
x: { type: 'string', optional: true },
|
||||
y: { type: 'string', optional: true },
|
||||
width: { type: 'string', optional: true },
|
||||
height: { type: 'string', optional: true },
|
||||
patternUnits: { type: 'string', optional: true },
|
||||
patternTransform: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
|
||||
// SVG other
|
||||
{
|
||||
tag: 'html-image',
|
||||
name: 'HtmlImage',
|
||||
properties: {
|
||||
href: { type: 'string', optional: true },
|
||||
x: { type: 'string', optional: true },
|
||||
y: { type: 'string', optional: true },
|
||||
width: { type: 'string', optional: true },
|
||||
height: { type: 'string', optional: true },
|
||||
preserveAspectRatio: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-foreignobject',
|
||||
name: 'HtmlForeignObject',
|
||||
htmlTag: 'foreignObject',
|
||||
properties: {
|
||||
x: { type: 'string', optional: true },
|
||||
y: { type: 'string', optional: true },
|
||||
width: { type: 'string', optional: true },
|
||||
height: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{
|
||||
tag: 'html-marker',
|
||||
name: 'HtmlMarker',
|
||||
properties: {
|
||||
markerWidth: { type: 'string', optional: true },
|
||||
markerHeight: { type: 'string', optional: true },
|
||||
refX: { type: 'string', optional: true },
|
||||
refY: { type: 'string', optional: true },
|
||||
orient: { type: 'string', optional: true },
|
||||
markerUnits: { type: 'string', optional: true },
|
||||
},
|
||||
},
|
||||
{ tag: 'html-title', name: 'HtmlTitle', properties: {} },
|
||||
];
|
||||
|
||||
@@ -4,24 +4,29 @@ const UTILITY_TAG_MAPPINGS: Record<string, string> = {
|
||||
'remote-style': 'RemoteStyle',
|
||||
};
|
||||
|
||||
const getHostTagName = (element: (typeof ALLOWED_HTML_ELEMENTS)[number]) =>
|
||||
element.htmlTag ??
|
||||
(element.tag.startsWith('html-') ? element.tag.slice(5) : element.tag);
|
||||
|
||||
export const HTML_TAG_TO_REMOTE_COMPONENT: Record<string, string> = {
|
||||
...Object.fromEntries(
|
||||
ALLOWED_HTML_ELEMENTS.map((element) => [
|
||||
element.tag.startsWith('html-') ? element.tag.slice(5) : element.tag,
|
||||
getHostTagName(element),
|
||||
element.name,
|
||||
]),
|
||||
),
|
||||
...UTILITY_TAG_MAPPINGS,
|
||||
};
|
||||
|
||||
// Maps standard HTML tag names to their custom element equivalents
|
||||
// used by the remote DOM polyfill (e.g. "div" → "html-div").
|
||||
// Maps standard HTML/SVG tag names to their custom element equivalents
|
||||
// used by the remote DOM polyfill (e.g. "div" → "html-div",
|
||||
// "clipPath" → "html-clippath").
|
||||
// Consumed by the jsx-runtime wrapper so React creates the correct
|
||||
// custom elements instead of standard HTML tags.
|
||||
// custom elements instead of standard HTML/SVG tags.
|
||||
export const HTML_TAG_TO_CUSTOM_ELEMENT_TAG: Record<string, string> = {
|
||||
...Object.fromEntries(
|
||||
ALLOWED_HTML_ELEMENTS.map((element) => [
|
||||
element.tag.startsWith('html-') ? element.tag.slice(5) : element.tag,
|
||||
getHostTagName(element),
|
||||
element.tag,
|
||||
]),
|
||||
),
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
import { type PropertySchema } from './PropertySchema';
|
||||
|
||||
export const SVG_PRESENTATION_PROPERTIES: Record<string, PropertySchema> = {
|
||||
fill: { type: 'string', optional: true },
|
||||
fillOpacity: { type: 'string', optional: true },
|
||||
fillRule: { type: 'string', optional: true },
|
||||
stroke: { type: 'string', optional: true },
|
||||
strokeWidth: { type: 'string', optional: true },
|
||||
strokeOpacity: { type: 'string', optional: true },
|
||||
strokeLinecap: { type: 'string', optional: true },
|
||||
strokeLinejoin: { type: 'string', optional: true },
|
||||
strokeDasharray: { type: 'string', optional: true },
|
||||
strokeDashoffset: { type: 'string', optional: true },
|
||||
strokeMiterlimit: { type: 'string', optional: true },
|
||||
opacity: { type: 'string', optional: true },
|
||||
transform: { type: 'string', optional: true },
|
||||
clipPath: { type: 'string', optional: true },
|
||||
clipRule: { type: 'string', optional: true },
|
||||
mask: { type: 'string', optional: true },
|
||||
filter: { type: 'string', optional: true },
|
||||
pointerEvents: { type: 'string', optional: true },
|
||||
};
|
||||
+156
@@ -92,6 +92,162 @@ export const componentRegistry: Map<string, ComponentRegistryValue> = new Map([
|
||||
'html-source',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('source')),
|
||||
],
|
||||
['html-b', createRemoteComponentRenderer(createHtmlHostWrapper('b'))],
|
||||
['html-i', createRemoteComponentRenderer(createHtmlHostWrapper('i'))],
|
||||
['html-u', createRemoteComponentRenderer(createHtmlHostWrapper('u'))],
|
||||
['html-s', createRemoteComponentRenderer(createHtmlHostWrapper('s'))],
|
||||
['html-mark', createRemoteComponentRenderer(createHtmlHostWrapper('mark'))],
|
||||
['html-sub', createRemoteComponentRenderer(createHtmlHostWrapper('sub'))],
|
||||
['html-sup', createRemoteComponentRenderer(createHtmlHostWrapper('sup'))],
|
||||
['html-abbr', createRemoteComponentRenderer(createHtmlHostWrapper('abbr'))],
|
||||
['html-cite', createRemoteComponentRenderer(createHtmlHostWrapper('cite'))],
|
||||
['html-kbd', createRemoteComponentRenderer(createHtmlHostWrapper('kbd'))],
|
||||
['html-samp', createRemoteComponentRenderer(createHtmlHostWrapper('samp'))],
|
||||
['html-var', createRemoteComponentRenderer(createHtmlHostWrapper('var'))],
|
||||
['html-dfn', createRemoteComponentRenderer(createHtmlHostWrapper('dfn'))],
|
||||
['html-bdi', createRemoteComponentRenderer(createHtmlHostWrapper('bdi'))],
|
||||
['html-bdo', createRemoteComponentRenderer(createHtmlHostWrapper('bdo'))],
|
||||
['html-data', createRemoteComponentRenderer(createHtmlHostWrapper('data'))],
|
||||
['html-del', createRemoteComponentRenderer(createHtmlHostWrapper('del'))],
|
||||
['html-ins', createRemoteComponentRenderer(createHtmlHostWrapper('ins'))],
|
||||
['html-q', createRemoteComponentRenderer(createHtmlHostWrapper('q'))],
|
||||
['html-time', createRemoteComponentRenderer(createHtmlHostWrapper('time'))],
|
||||
['html-ruby', createRemoteComponentRenderer(createHtmlHostWrapper('ruby'))],
|
||||
['html-rt', createRemoteComponentRenderer(createHtmlHostWrapper('rt'))],
|
||||
['html-rp', createRemoteComponentRenderer(createHtmlHostWrapper('rp'))],
|
||||
['html-dl', createRemoteComponentRenderer(createHtmlHostWrapper('dl'))],
|
||||
['html-dt', createRemoteComponentRenderer(createHtmlHostWrapper('dt'))],
|
||||
['html-dd', createRemoteComponentRenderer(createHtmlHostWrapper('dd'))],
|
||||
[
|
||||
'html-figure',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('figure')),
|
||||
],
|
||||
[
|
||||
'html-figcaption',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('figcaption')),
|
||||
],
|
||||
[
|
||||
'html-details',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('details')),
|
||||
],
|
||||
[
|
||||
'html-summary',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('summary')),
|
||||
],
|
||||
[
|
||||
'html-address',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('address')),
|
||||
],
|
||||
[
|
||||
'html-dialog',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('dialog')),
|
||||
],
|
||||
[
|
||||
'html-hgroup',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('hgroup')),
|
||||
],
|
||||
[
|
||||
'html-search',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('search')),
|
||||
],
|
||||
[
|
||||
'html-caption',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('caption')),
|
||||
],
|
||||
[
|
||||
'html-colgroup',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('colgroup')),
|
||||
],
|
||||
['html-col', createRemoteComponentRenderer(createHtmlHostWrapper('col'))],
|
||||
[
|
||||
'html-fieldset',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('fieldset')),
|
||||
],
|
||||
[
|
||||
'html-legend',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('legend')),
|
||||
],
|
||||
[
|
||||
'html-output',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('output')),
|
||||
],
|
||||
[
|
||||
'html-progress',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('progress')),
|
||||
],
|
||||
['html-meter', createRemoteComponentRenderer(createHtmlHostWrapper('meter'))],
|
||||
[
|
||||
'html-optgroup',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('optgroup')),
|
||||
],
|
||||
[
|
||||
'html-datalist',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('datalist')),
|
||||
],
|
||||
[
|
||||
'html-picture',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('picture')),
|
||||
],
|
||||
['html-track', createRemoteComponentRenderer(createHtmlHostWrapper('track'))],
|
||||
['html-wbr', createRemoteComponentRenderer(createHtmlHostWrapper('wbr'))],
|
||||
['html-menu', createRemoteComponentRenderer(createHtmlHostWrapper('menu'))],
|
||||
['html-svg', createRemoteComponentRenderer(createHtmlHostWrapper('svg'))],
|
||||
['html-g', createRemoteComponentRenderer(createHtmlHostWrapper('g'))],
|
||||
['html-defs', createRemoteComponentRenderer(createHtmlHostWrapper('defs'))],
|
||||
[
|
||||
'html-symbol',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('symbol')),
|
||||
],
|
||||
['html-use', createRemoteComponentRenderer(createHtmlHostWrapper('use'))],
|
||||
[
|
||||
'html-clippath',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('clipPath')),
|
||||
],
|
||||
['html-mask', createRemoteComponentRenderer(createHtmlHostWrapper('mask'))],
|
||||
[
|
||||
'html-circle',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('circle')),
|
||||
],
|
||||
[
|
||||
'html-ellipse',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('ellipse')),
|
||||
],
|
||||
['html-rect', createRemoteComponentRenderer(createHtmlHostWrapper('rect'))],
|
||||
['html-line', createRemoteComponentRenderer(createHtmlHostWrapper('line'))],
|
||||
['html-path', createRemoteComponentRenderer(createHtmlHostWrapper('path'))],
|
||||
[
|
||||
'html-polygon',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('polygon')),
|
||||
],
|
||||
[
|
||||
'html-polyline',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('polyline')),
|
||||
],
|
||||
['html-text', createRemoteComponentRenderer(createHtmlHostWrapper('text'))],
|
||||
['html-tspan', createRemoteComponentRenderer(createHtmlHostWrapper('tspan'))],
|
||||
[
|
||||
'html-lineargradient',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('linearGradient')),
|
||||
],
|
||||
[
|
||||
'html-radialgradient',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('radialGradient')),
|
||||
],
|
||||
['html-stop', createRemoteComponentRenderer(createHtmlHostWrapper('stop'))],
|
||||
[
|
||||
'html-pattern',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('pattern')),
|
||||
],
|
||||
['html-image', createRemoteComponentRenderer(createHtmlHostWrapper('image'))],
|
||||
[
|
||||
'html-foreignobject',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('foreignObject')),
|
||||
],
|
||||
[
|
||||
'html-marker',
|
||||
createRemoteComponentRenderer(createHtmlHostWrapper('marker')),
|
||||
],
|
||||
['html-title', createRemoteComponentRenderer(createHtmlHostWrapper('title'))],
|
||||
['remote-style', createRemoteComponentRenderer(RemoteStyleRenderer)],
|
||||
['remote-fragment', RemoteFragmentRenderer],
|
||||
]);
|
||||
|
||||
@@ -13,14 +13,14 @@ const EVENT_NAME_MAP: Record<string, string> = Object.fromEntries(
|
||||
);
|
||||
|
||||
const VOID_ELEMENTS = new Set([
|
||||
'input',
|
||||
'br',
|
||||
'hr',
|
||||
'img',
|
||||
'area',
|
||||
'base',
|
||||
'br',
|
||||
'col',
|
||||
'embed',
|
||||
'hr',
|
||||
'img',
|
||||
'input',
|
||||
'link',
|
||||
'meta',
|
||||
'source',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -31,7 +31,6 @@
|
||||
"src/remote/mock/**/*",
|
||||
"src/host/generated/host-component-registry.ts",
|
||||
"src/remote/generated/remote-components.ts",
|
||||
"src/remote/generated/remote-elements.ts",
|
||||
"src/__stories__/**/*"
|
||||
"src/remote/generated/remote-elements.ts"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -61,8 +61,8 @@ const jestConfig = {
|
||||
extensionsToTreatAsEsm: ['.ts', '.tsx'],
|
||||
coverageThreshold: {
|
||||
global: {
|
||||
statements: 48.4,
|
||||
lines: 47.0,
|
||||
statements: 48,
|
||||
lines: 46,
|
||||
functions: 39.5,
|
||||
},
|
||||
},
|
||||
|
||||
File diff suppressed because one or more lines are too long
+44
-6
@@ -2,12 +2,13 @@ import { useHasAccessTokenPair } from '@/auth/hooks/useHasAccessTokenPair';
|
||||
import { useDefaultHomePagePath } from '@/navigation/hooks/useDefaultHomePagePath';
|
||||
import { useOnboardingStatus } from '@/onboarding/hooks/useOnboardingStatus';
|
||||
import { useIsWorkspaceActivationStatusEqualsTo } from '@/workspace/hooks/useIsWorkspaceActivationStatusEqualsTo';
|
||||
import { useQuery } from '@apollo/client/react';
|
||||
import { useParams } from 'react-router-dom';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { AppPath, SettingsPath } from 'twenty-shared/types';
|
||||
import { getSettingsPath } from 'twenty-shared/utils';
|
||||
|
||||
import { OnboardingStatus } from '~/generated-metadata/graphql';
|
||||
import { OnboardingStatus, PageLayoutType } from '~/generated-metadata/graphql';
|
||||
|
||||
import { useIsCurrentLocationOnAWorkspace } from '@/domain-manager/hooks/useIsCurrentLocationOnAWorkspace';
|
||||
import { usePageChangeEffectNavigateLocation } from '~/hooks/usePageChangeEffectNavigateLocation';
|
||||
@@ -58,11 +59,23 @@ const setupMockIsOnAWorkspace = (isOnAWorkspace: boolean) => {
|
||||
});
|
||||
};
|
||||
|
||||
jest.mock('@apollo/client/react');
|
||||
const setupMockUseQuery = (result?: { data?: unknown; loading?: boolean }) => {
|
||||
jest.mocked(useQuery).mockReturnValueOnce({
|
||||
data: result?.data ?? undefined,
|
||||
loading: result?.loading ?? false,
|
||||
} as ReturnType<typeof useQuery>);
|
||||
};
|
||||
|
||||
jest.mock('react-router-dom');
|
||||
const setupMockUseParams = (objectNamePlural?: string) => {
|
||||
jest
|
||||
.mocked(useParams)
|
||||
.mockReturnValueOnce({ objectNamePlural: objectNamePlural ?? '' });
|
||||
const setupMockUseParams = (
|
||||
objectNamePlural?: string,
|
||||
pageLayoutId?: string,
|
||||
) => {
|
||||
jest.mocked(useParams).mockReturnValueOnce({
|
||||
objectNamePlural: objectNamePlural ?? '',
|
||||
pageLayoutId,
|
||||
});
|
||||
};
|
||||
|
||||
jest.mock('@/ui/utilities/state/jotai/hooks/useAtomStateValue');
|
||||
@@ -92,6 +105,8 @@ const testCases: {
|
||||
objectNamePluralFromMetadata?: string;
|
||||
verifyEmailRedirectPath?: string;
|
||||
returnToPath?: string;
|
||||
pageLayoutId?: string;
|
||||
useQueryResult?: { data?: unknown; loading?: boolean };
|
||||
}[] = [
|
||||
{ loc: AppPath.Verify, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.PLAN_REQUIRED, res: AppPath.PlanRequired },
|
||||
{ loc: AppPath.Verify, hasAccessTokenPair: true, isWorkspaceSuspended: true, onboardingStatus: OnboardingStatus.COMPLETED, res: getSettingsPath(SettingsPath.Billing) },
|
||||
@@ -277,6 +292,20 @@ const testCases: {
|
||||
{ loc: AppPath.RecordShowPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.BOOK_ONBOARDING, res: AppPath.BookCallDecision },
|
||||
{ loc: AppPath.RecordShowPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, res: undefined },
|
||||
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.PLAN_REQUIRED, res: AppPath.PlanRequired },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: true, onboardingStatus: OnboardingStatus.COMPLETED, res: getSettingsPath(SettingsPath.Billing) },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: false, isWorkspaceSuspended: false, onboardingStatus: undefined, res: AppPath.SignInUp },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.WORKSPACE_ACTIVATION, res: AppPath.CreateWorkspace },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.PROFILE_CREATION, res: AppPath.CreateProfile },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.SYNC_EMAIL, res: AppPath.SyncEmails },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.INVITE_TEAM, res: AppPath.InviteTeam },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.BOOK_ONBOARDING, res: AppPath.BookCallDecision },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, res: undefined },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, res: undefined, pageLayoutId: 'valid-id', useQueryResult: { loading: true } },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, res: AppPath.NotFound, pageLayoutId: 'non-existent-id', useQueryResult: { data: { getPageLayout: null }, loading: false } },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, res: AppPath.NotFound, pageLayoutId: 'wrong-type-id', useQueryResult: { data: { getPageLayout: { type: PageLayoutType.RECORD_PAGE } }, loading: false } },
|
||||
{ loc: AppPath.PageLayoutPage, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.COMPLETED, res: undefined, pageLayoutId: 'valid-standalone-id', useQueryResult: { data: { getPageLayout: { type: PageLayoutType.STANDALONE_PAGE } }, loading: false } },
|
||||
|
||||
{ loc: AppPath.SettingsCatchAll, hasAccessTokenPair: true, isWorkspaceSuspended: false, onboardingStatus: OnboardingStatus.PLAN_REQUIRED, res: AppPath.PlanRequired },
|
||||
{ loc: AppPath.SettingsCatchAll, hasAccessTokenPair: true, isWorkspaceSuspended: true, onboardingStatus: OnboardingStatus.COMPLETED, res: undefined },
|
||||
{ loc: AppPath.SettingsCatchAll, hasAccessTokenPair: false, isWorkspaceSuspended: false, onboardingStatus: undefined, res: AppPath.SignInUp },
|
||||
@@ -350,6 +379,8 @@ describe('usePageChangeEffectNavigateLocation', () => {
|
||||
objectNamePluralFromMetadata,
|
||||
verifyEmailRedirectPath,
|
||||
returnToPath,
|
||||
pageLayoutId,
|
||||
useQueryResult,
|
||||
res,
|
||||
}) => {
|
||||
setupMockIsMatchingLocation(loc);
|
||||
@@ -357,7 +388,8 @@ describe('usePageChangeEffectNavigateLocation', () => {
|
||||
setupMockIsWorkspaceActivationStatusEqualsTo(isWorkspaceSuspended);
|
||||
setupMockHasAccessTokenPair(hasAccessTokenPair);
|
||||
setupMockIsOnAWorkspace(isOnAWorkspace ?? true);
|
||||
setupMockUseParams(objectNamePluralFromParams);
|
||||
setupMockUseQuery(useQueryResult);
|
||||
setupMockUseParams(objectNamePluralFromParams, pageLayoutId);
|
||||
setupMockState(
|
||||
objectNamePluralFromMetadata,
|
||||
verifyEmailRedirectPath,
|
||||
@@ -379,6 +411,12 @@ describe('usePageChangeEffectNavigateLocation', () => {
|
||||
['nonExistingObjectInParam', 'existingObjectInParam:false'].length +
|
||||
['caseWithRedirectionToVerifyEmailRedirectPath', 'caseWithout']
|
||||
.length +
|
||||
[
|
||||
'pageLayout:loading',
|
||||
'pageLayout:missing',
|
||||
'pageLayout:wrongType',
|
||||
'pageLayout:validStandalone',
|
||||
].length +
|
||||
['returnToPath:verify', 'returnToPath:signInUp', 'returnToPath:index']
|
||||
.length +
|
||||
['notOnWorkspace:verify', 'notOnWorkspace:signInUp'].length,
|
||||
|
||||
@@ -11,12 +11,17 @@ 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 { useQuery } from '@apollo/client/react';
|
||||
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';
|
||||
import { WorkspaceActivationStatus } from 'twenty-shared/workspace';
|
||||
import { OnboardingStatus } from '~/generated-metadata/graphql';
|
||||
import {
|
||||
FindOnePageLayoutTypeDocument,
|
||||
OnboardingStatus,
|
||||
PageLayoutType,
|
||||
} from '~/generated-metadata/graphql';
|
||||
import { isMatchingLocation } from '~/utils/isMatchingLocation';
|
||||
|
||||
const readReturnToPathFromUrlSearchParams = (): string | null => {
|
||||
@@ -39,11 +44,27 @@ export const usePageChangeEffectNavigateLocation = () => {
|
||||
const someMatchingLocationOf = (appPaths: AppPath[]): boolean =>
|
||||
appPaths.some((appPath) => isMatchingLocation(location, appPath));
|
||||
|
||||
const objectNamePlural = useParams().objectNamePlural ?? '';
|
||||
const params = useParams();
|
||||
|
||||
const objectNamePlural = params.objectNamePlural ?? '';
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const objectMetadataItem = objectMetadataItems?.find(
|
||||
(objectMetadataItem) => objectMetadataItem.namePlural === objectNamePlural,
|
||||
);
|
||||
|
||||
const pageLayoutId = params.pageLayoutId;
|
||||
const isOnPageLayoutPage = isMatchingLocation(
|
||||
location,
|
||||
AppPath.PageLayoutPage,
|
||||
);
|
||||
|
||||
const { data: pageLayoutData, loading: isPageLayoutLoading } = useQuery(
|
||||
FindOnePageLayoutTypeDocument,
|
||||
{
|
||||
variables: { id: pageLayoutId ?? '' },
|
||||
skip: !isOnPageLayoutPage || !isDefined(pageLayoutId),
|
||||
},
|
||||
);
|
||||
const verifyEmailRedirectPath = useAtomStateValue(
|
||||
verifyEmailRedirectPathState,
|
||||
);
|
||||
@@ -157,5 +178,15 @@ export const usePageChangeEffectNavigateLocation = () => {
|
||||
return AppPath.NotFound;
|
||||
}
|
||||
|
||||
if (
|
||||
isOnPageLayoutPage &&
|
||||
isDefined(pageLayoutId) &&
|
||||
!isPageLayoutLoading &&
|
||||
(!isDefined(pageLayoutData?.getPageLayout) ||
|
||||
pageLayoutData.getPageLayout.type !== PageLayoutType.STANDALONE_PAGE)
|
||||
) {
|
||||
return AppPath.NotFound;
|
||||
}
|
||||
|
||||
return;
|
||||
};
|
||||
|
||||
@@ -438,10 +438,10 @@ msgstr "{totalCost} krediete"
|
||||
msgid "{totalCount} selected"
|
||||
msgstr "{totalCount} geselekteer"
|
||||
|
||||
#. js-lingui-id: WwbakM
|
||||
#. js-lingui-id: XdG+hI
|
||||
#: src/modules/side-panel/pages/page-layout/components/record-page/SidePanelRecordPageFieldsSettings.tsx
|
||||
msgid "{totalFieldsCount} fields"
|
||||
msgstr "{totalFieldsCount} velde"
|
||||
msgid "{totalFieldsCount} visible fields"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: ITVweg
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownDefaultView.tsx
|
||||
@@ -668,7 +668,7 @@ msgid "About my subscription"
|
||||
msgstr "Oor my intekening"
|
||||
|
||||
#. js-lingui-id: DhgC7B
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "About this user"
|
||||
msgstr "Oor hierdie gebruiker"
|
||||
|
||||
@@ -677,6 +677,11 @@ msgstr "Oor hierdie gebruiker"
|
||||
msgid "About this workspace"
|
||||
msgstr "Oor hierdie werkruimte"
|
||||
|
||||
#. js-lingui-id: LuXP9q
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
|
||||
msgid "Access"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: pNW+Rt
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
msgid "Access Key ID"
|
||||
@@ -756,6 +761,7 @@ msgid "Action on click"
|
||||
msgstr "Aksie by klik"
|
||||
|
||||
#. js-lingui-id: 7L01XJ
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsToolSection.tsx
|
||||
@@ -784,7 +790,7 @@ msgstr "Aksies gebruikers kan uitvoer op hierdie voorwerp"
|
||||
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
|
||||
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
|
||||
msgid "Activate"
|
||||
msgstr "Aktiveer"
|
||||
|
||||
@@ -1203,11 +1209,14 @@ msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: g1in8j
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminQueueDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
@@ -1215,6 +1224,11 @@ msgstr ""
|
||||
msgid "Admin Panel"
|
||||
msgstr "Admin Paneel"
|
||||
|
||||
#. js-lingui-id: 6X68yA
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Admin Panel - General"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: sxkWRg
|
||||
#: src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx
|
||||
#: src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx
|
||||
@@ -1346,6 +1360,8 @@ msgstr ""
|
||||
#: src/pages/settings/ai/SettingsAIPrompts.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/utils/getActionHeaderTypeOrThrow.ts
|
||||
#: src/modules/side-panel/pages/workflow/action/components/SidePanelWorkflowSelectAction.tsx
|
||||
@@ -1361,6 +1377,11 @@ msgstr "KI"
|
||||
msgid "AI Chat"
|
||||
msgstr "AI-klets"
|
||||
|
||||
#. js-lingui-id: qiD/6r
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "AI chat threads for this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: E/lGXl
|
||||
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
|
||||
msgid "AI consumption across all workspaces."
|
||||
@@ -1574,6 +1595,11 @@ msgstr "Alle stelselobjekte is reeds in die sybalk"
|
||||
msgid "All tasks addressed. Maintain the momentum."
|
||||
msgstr "Alle take aangespreek. Behou die momentum."
|
||||
|
||||
#. js-lingui-id: 45Gm/K
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "All the applications currently installed on this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: XuuWVF
|
||||
#: src/modules/settings/roles/role-permissions/object-level-permissions/components/SettingsRolePermissionsObjectLevelObjectPicker.tsx
|
||||
msgid "All the standard objects"
|
||||
@@ -1585,7 +1611,7 @@ msgid "All workspace members already have this role"
|
||||
msgstr "Alle werkspasie lede het reeds hierdie rol"
|
||||
|
||||
#. js-lingui-id: MLmnB2
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "All workspaces this user is a member of"
|
||||
msgstr "Alle werksruimtes waarvan hierdie gebruiker 'n lid is"
|
||||
|
||||
@@ -1730,6 +1756,7 @@ msgstr "'n Fout het voorgekom tydens die oplaai van die prent."
|
||||
#: src/modules/ui/feedback/snack-bar-manager/hooks/useSnackBar.ts
|
||||
#: src/modules/page-layout/hooks/useUpdatePageLayoutWithTabsAndWidgets.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutWidgetToDefault.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutToDefault.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutTabToDefault.ts
|
||||
#: src/modules/object-metadata/hooks/useUpdateOneObjectMetadataItem.ts
|
||||
#: src/modules/object-metadata/hooks/useUpdateOneFieldMetadataItem.ts
|
||||
@@ -1760,7 +1787,6 @@ msgstr "'n Objek met hierdie naam bestaan reeds"
|
||||
|
||||
#. js-lingui-id: lxentK
|
||||
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
|
||||
#: src/modules/ai/utils/extractErrorMessage.ts
|
||||
msgid "An unexpected error occurred"
|
||||
msgstr "'n Onverwagte fout het voorgekom"
|
||||
|
||||
@@ -1786,8 +1812,8 @@ msgid "Any {fieldLabel} field"
|
||||
msgstr "Enige {fieldLabel}-veld"
|
||||
|
||||
#. js-lingui-id: COyjuu
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Any device"
|
||||
msgstr ""
|
||||
|
||||
@@ -1928,6 +1954,11 @@ msgstr "App"
|
||||
msgid "App installed on this workspace"
|
||||
msgstr "App op hierdie werkruimte geïnstalleer"
|
||||
|
||||
#. js-lingui-id: r5g1bX
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
msgid "App registrations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: aAIQg2
|
||||
#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx
|
||||
msgid "Appearance"
|
||||
@@ -2952,11 +2983,26 @@ msgstr "Grafiek"
|
||||
msgid "Chat"
|
||||
msgstr "Gesels"
|
||||
|
||||
#. js-lingui-id: eKz2ln
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
msgid "Chat conversation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: jTS+KY
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Chat Sessions"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: UxeiNP
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
|
||||
msgid "Chat with AI agents and use AI features"
|
||||
msgstr "Gesels met KI-agente en gebruik KI-funksies"
|
||||
|
||||
#. js-lingui-id: 8Q+lLG
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Chats"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: xK2nU3
|
||||
#: src/pages/settings/updates/SettingsUpdates.tsx
|
||||
msgid "Check out our latest releases"
|
||||
@@ -3153,7 +3199,6 @@ msgid "Close banner"
|
||||
msgstr "Sluit banier"
|
||||
|
||||
#. js-lingui-id: saip/v
|
||||
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "Close side panel"
|
||||
msgstr "Maak sypaneel toe"
|
||||
@@ -3533,9 +3578,7 @@ msgid "Content"
|
||||
msgstr "Inhoud"
|
||||
|
||||
#. js-lingui-id: M73whl
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
|
||||
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
|
||||
#: src/modules/ai/components/RoutingDebugDisplay.tsx
|
||||
msgid "Context"
|
||||
msgstr "Konteks"
|
||||
@@ -3968,7 +4011,9 @@ msgid "Create, edit, and delete workspace views"
|
||||
msgstr "Skep, wysig en verwyder werkruimte-uitsigte"
|
||||
|
||||
#. js-lingui-id: d+F6q9
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/components/SettingsDatabaseEventsForm.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/activities/calendar/components/CalendarEventDetails.tsx
|
||||
msgid "Created"
|
||||
msgstr "Geskep"
|
||||
@@ -4615,7 +4660,8 @@ msgstr "verwyder"
|
||||
#: src/modules/views/view-picker/components/ViewPickerOptionDropdown.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerEditButton.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerCreateButton.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
|
||||
#: src/modules/settings/logic-functions/components/tabs/SettingsLogicFunctionTabEnvironmentVariableTableRow.tsx
|
||||
#: src/modules/settings/emailing-domains/components/SettingsEmailingDomainRowDropdownMenu.tsx
|
||||
@@ -4868,8 +4914,8 @@ msgid "Description"
|
||||
msgstr "Beskrywing"
|
||||
|
||||
#. js-lingui-id: BBqGS9
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Desktop"
|
||||
msgstr ""
|
||||
|
||||
@@ -4910,6 +4956,11 @@ msgstr "Ontwikkelaar"
|
||||
msgid "Developers links"
|
||||
msgstr "Skakels vir ontwikkelaars"
|
||||
|
||||
#. js-lingui-id: E/QGRL
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Xm/s+u
|
||||
#: src/modules/settings/accounts/components/SettingsAccountsCalendarChannelsGeneral.tsx
|
||||
msgid "Display"
|
||||
@@ -4946,8 +4997,8 @@ msgid "Display text on multiple lines"
|
||||
msgstr "Vertoon teks op meerdere reëls"
|
||||
|
||||
#. js-lingui-id: vU/Hht
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
msgid "Distribution"
|
||||
msgstr "Verspreiding"
|
||||
|
||||
@@ -5092,7 +5143,7 @@ msgid "Drop file here..."
|
||||
msgstr "Los lêer hier..."
|
||||
|
||||
#. js-lingui-id: euc6Ns
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
@@ -5355,6 +5406,8 @@ msgstr "anders indien"
|
||||
#: src/pages/settings/SettingsProfile.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx
|
||||
#: src/modules/settings/security/components/SettingsSecurityEditableProfileFields.tsx
|
||||
@@ -5550,6 +5603,11 @@ msgstr "Leë Inboks"
|
||||
msgid "Empty Object"
|
||||
msgstr "Leë Objek"
|
||||
|
||||
#. js-lingui-id: 7A0K1Y
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "Empty tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: q11Dk2
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
msgid "Enable bypass options"
|
||||
@@ -5801,11 +5859,6 @@ msgstr "Voer die stelselprompt in wat hierdie agent se gedrag en vermoëns defin
|
||||
msgid "Enter the workspace subdomain to transfer this app to. You will lose access to manage it."
|
||||
msgstr "Voer die werkruimte se subdomein in waarna hierdie app oorgedra moet word. Jy sal toegang verloor om dit te bestuur."
|
||||
|
||||
#. js-lingui-id: rYIISB
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Enter user ID or email address"
|
||||
msgstr "Voer gebruiker-ID of e-posadres in"
|
||||
|
||||
#. js-lingui-id: pubQie
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/code-action/components/WorkflowEditActionCodeFields.tsx
|
||||
@@ -6441,11 +6494,6 @@ msgstr ""
|
||||
msgid "Failed to get response"
|
||||
msgstr "Kon nie antwoord kry nie"
|
||||
|
||||
#. js-lingui-id: CUzkVp
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Failed to impersonate user. {errorMessage}"
|
||||
msgstr "Kon nie gebruiker naboots nie. {errorMessage}"
|
||||
|
||||
#. js-lingui-id: qZwtAi
|
||||
#: src/modules/marketplace/hooks/useInstallApp.ts
|
||||
msgid "Failed to install the application."
|
||||
@@ -6533,11 +6581,6 @@ msgstr "Kon nie eienaarskap oordra nie. Maak seker die subdomein is korrek."
|
||||
msgid "Failed to update default model"
|
||||
msgstr "Kon nie verstekmodel opdateer nie"
|
||||
|
||||
#. js-lingui-id: P1NmNz
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Failed to update feature flag. {errorMessage}"
|
||||
msgstr "Kon nie funksievlag opdateer nie. {errorMessage}"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
|
||||
msgid "Failed to update model"
|
||||
@@ -6646,14 +6689,15 @@ msgid "Favorites"
|
||||
msgstr "Gunstelinge"
|
||||
|
||||
#. js-lingui-id: YXjpZx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Feature Flag"
|
||||
msgstr "Kenmerk Vlag"
|
||||
|
||||
#. js-lingui-id: kP/brT
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Feature Flags & Impersonation"
|
||||
msgstr "Kenmerk Vlaggies & Nabootsing"
|
||||
#. js-lingui-id: +ZqAYI
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Feature Flags"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: FkMol5
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
|
||||
@@ -7054,6 +7098,11 @@ msgstr "Front-end-komponente"
|
||||
msgid "Full access"
|
||||
msgstr "Volle toegang"
|
||||
|
||||
#. js-lingui-id: Ld0Tt4
|
||||
#: src/modules/side-panel/components/hooks/usePageLayoutHeaderInfo.ts
|
||||
msgid "Full tab widget"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YMZBxa
|
||||
#: src/pages/settings/security/event-logs/utils/getColumnsForEventLogTable.ts
|
||||
msgid "Function"
|
||||
@@ -7078,13 +7127,11 @@ msgstr ""
|
||||
#. js-lingui-id: Weq9zb
|
||||
#: src/pages/settings/SettingsWorkspace.tsx
|
||||
#: src/pages/settings/SettingsWorkspace.tsx
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroupsForDisplay.ts
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/keyboard-shortcut-menu/components/KeyboardShortcutMenuOpenContent.tsx
|
||||
msgid "General"
|
||||
msgstr "Algemeen"
|
||||
@@ -7135,11 +7182,6 @@ msgstr "Benut jou werkruimte optimaal deur jou span uit te nooi."
|
||||
msgid "Get your subscription"
|
||||
msgstr "Kry jou inskrywing"
|
||||
|
||||
#. js-lingui-id: 2GT3Hf
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Global"
|
||||
msgstr "Globaal"
|
||||
|
||||
#. js-lingui-id: sr0UJD
|
||||
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
|
||||
msgid "Go Back"
|
||||
@@ -7515,8 +7557,8 @@ msgid "Icon and Name"
|
||||
msgstr "Ikon en Naam"
|
||||
|
||||
#. js-lingui-id: S0kLOH
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
@@ -7621,9 +7663,10 @@ msgid "imap.example.com"
|
||||
msgstr "imap.example.com"
|
||||
|
||||
#. js-lingui-id: tSVr6t
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
#: src/modules/settings/members/components/MemberInfosTab.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Impersonate"
|
||||
msgstr "Naboots"
|
||||
|
||||
@@ -7633,7 +7676,7 @@ msgid "Impersonate workspace users"
|
||||
msgstr "Naboots werksruimte gebruikers"
|
||||
|
||||
#. js-lingui-id: yImXof
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Impersonation is disabled for this workspace"
|
||||
msgstr "Nabootsing is gedeaktiveer vir hierdie werksruimte"
|
||||
|
||||
@@ -7736,6 +7779,7 @@ msgid "Indexes"
|
||||
msgstr "Indekse"
|
||||
|
||||
#. js-lingui-id: CE+M2e
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
|
||||
msgid "Info"
|
||||
msgstr "Inligting"
|
||||
@@ -7830,10 +7874,10 @@ msgstr "Installasie"
|
||||
msgid "Installed"
|
||||
msgstr "Geïnstalleer"
|
||||
|
||||
#. js-lingui-id: N52taw
|
||||
#. js-lingui-id: OMxM9j
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "Installed applications"
|
||||
msgstr "Geïnstalleerde toepassings"
|
||||
msgid "Installed apps"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wJJ+Wy
|
||||
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
|
||||
@@ -8289,6 +8333,16 @@ msgstr "Laaste 1 uur"
|
||||
msgid "Last 1 Hour (oldest → newest)"
|
||||
msgstr "Laaste 1 Uur (oudste → nuutste)"
|
||||
|
||||
#. js-lingui-id: YoKFgq
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Last 10 users created. Click to impersonate."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: sgqwjE
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Last 10 users created. Click to manage feature flags or impersonate."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: XUlP/Y
|
||||
#: src/modules/settings/admin-panel/health-status/constants/WorkerQueueMetricsSelectOptions.ts
|
||||
msgid "Last 12 hours"
|
||||
@@ -8580,11 +8634,6 @@ msgstr "het 'n e-pos gekoppel met"
|
||||
msgid "list"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 5Kn+XX
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "List installed applications. Use filter to search for a specific application"
|
||||
msgstr "Lys geïnstalleerde toepassings. Gebruik die filter om na 'n spesifieke toepassing te soek"
|
||||
|
||||
#. js-lingui-id: Ap948/
|
||||
#: src/modules/settings/admin-panel/apps/components/SettingsAdminApps.tsx
|
||||
msgid "Listed"
|
||||
@@ -8769,16 +8818,6 @@ msgstr "Teken uit"
|
||||
msgid "Logs"
|
||||
msgstr "Logboeke"
|
||||
|
||||
#. js-lingui-id: PTozs8
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Look up users and manage their workspace feature flags or impersonate them."
|
||||
msgstr "Soek gebruikers en bestuur hul werkruimte kenmerk vlaggies of boots hulle na."
|
||||
|
||||
#. js-lingui-id: GPSwzy
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Look up users to impersonate them."
|
||||
msgstr "Soek gebruikers om hulle na te boots."
|
||||
|
||||
#. js-lingui-id: tL2lBI
|
||||
#: src/modules/workflow/workflow-diagram/utils/generateNodesAndEdgesForIteratorNode.ts
|
||||
msgid "loop"
|
||||
@@ -8806,6 +8845,7 @@ msgstr ""
|
||||
|
||||
#. js-lingui-id: wckWOP
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Manage"
|
||||
msgstr ""
|
||||
|
||||
@@ -8832,6 +8872,11 @@ msgstr "Bestuur faktuurinligting"
|
||||
msgid "Manage favorite"
|
||||
msgstr "Bestuur gunsteling"
|
||||
|
||||
#. js-lingui-id: Dt05oz
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Manage feature flags for this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: T6YjCk
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
msgid "Manage Members"
|
||||
@@ -8996,6 +9041,8 @@ msgstr ""
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMember.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
@@ -9054,6 +9101,7 @@ msgstr "Boodskap Sinchronisering is nie beskikbaar nie omdat die diens nie werk
|
||||
|
||||
#. js-lingui-id: t7TeQU
|
||||
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Messages"
|
||||
msgstr "Boodskappe"
|
||||
|
||||
@@ -9130,8 +9178,8 @@ msgid "Mission accomplished!"
|
||||
msgstr "Missie voltooi!"
|
||||
|
||||
#. js-lingui-id: dMsM20
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Mobile"
|
||||
msgstr ""
|
||||
|
||||
@@ -9231,7 +9279,6 @@ msgstr ""
|
||||
#. js-lingui-id: 2FYpfJ
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "More"
|
||||
msgstr "Meer"
|
||||
|
||||
@@ -9280,14 +9327,16 @@ msgid "Move Down"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: iSLA/r
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx
|
||||
#: src/modules/object-record/record-group/hooks/useRecordGroupActions.ts
|
||||
msgid "Move left"
|
||||
msgstr "Skuif links"
|
||||
|
||||
#. js-lingui-id: Ubl2by
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx
|
||||
#: src/modules/object-record/record-group/hooks/useRecordGroupActions.ts
|
||||
msgid "Move right"
|
||||
@@ -9366,6 +9415,8 @@ msgstr "mySkill"
|
||||
#: src/pages/settings/ai/constants/SettingsAiAgentTableMetadata.ts
|
||||
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
|
||||
#: src/pages/settings/ai/components/SettingsToolParameterTable.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/onboarding/CreateProfile.tsx
|
||||
#: src/modules/settings/workspace/components/NameField.tsx
|
||||
@@ -9612,6 +9663,20 @@ msgstr "Nuwe SSO Konfigurasie"
|
||||
msgid "New SSO provider"
|
||||
msgstr "Nuwe SSO Verskaffer"
|
||||
|
||||
#. js-lingui-id: 3YvS+c
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "New tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Db+TX4
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
msgid "New Tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wl18ST
|
||||
#: src/modules/activities/tasks/components/TaskGroups.tsx
|
||||
msgid "New task"
|
||||
@@ -9766,6 +9831,11 @@ msgstr "Geen roepkode"
|
||||
msgid "No chat"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: NjIy4U
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "No chat threads found."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wgUPZ1
|
||||
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
|
||||
msgid "No comment"
|
||||
@@ -9997,6 +10067,11 @@ msgstr "Geen lede voldoen aan jou soektog nie"
|
||||
msgid "No messages found for this turn"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: IohPnt
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminChatThreadMessageList.tsx
|
||||
msgid "No messages found."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 0NudpV
|
||||
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminWorkerMetricsGraph.tsx
|
||||
msgid "No metrics data available"
|
||||
@@ -10048,6 +10123,11 @@ msgstr "Geen parameters"
|
||||
msgid "No payment method found. Please update your billing details."
|
||||
msgstr "Geen betaalmetode gevind nie. Werk asseblief u faktureringsbesonderhede by."
|
||||
|
||||
#. js-lingui-id: orE/ux
|
||||
#: src/pages/settings/applications/SettingsApplicationDetails.tsx
|
||||
msgid "No permission defined for this application"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Od1X93
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx
|
||||
msgid "No permissions configured for this application."
|
||||
@@ -10160,6 +10240,11 @@ msgstr "Geen gebruiksdata nie"
|
||||
msgid "No usage data yet"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: EsP4NW
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "No users found matching your search criteria."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wJwIUq
|
||||
#: src/modules/object-record/record-field/ui/form-types/components/FormSelectFieldInput.tsx
|
||||
msgid "No value"
|
||||
@@ -10196,6 +10281,11 @@ msgstr "Geen werkstroom weergawes tot nou toe"
|
||||
msgid "No workspace selected"
|
||||
msgstr "Geen werksruimte gekies nie"
|
||||
|
||||
#. js-lingui-id: TiRphK
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "No workspaces found matching your search criteria."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Ah7JCB
|
||||
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
|
||||
msgid "Node"
|
||||
@@ -10281,6 +10371,11 @@ msgstr "Nota"
|
||||
msgid "Notes"
|
||||
msgstr "Notas"
|
||||
|
||||
#. js-lingui-id: DYCPYF
|
||||
#: src/modules/page-layout/widgets/components/StandaloneWidgetPlaceholder.tsx
|
||||
msgid "Nothing to see"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YwzE9K
|
||||
#: src/utils/date-utils.ts
|
||||
#: src/utils/date-utils.ts
|
||||
@@ -10346,7 +10441,7 @@ msgid "Numbered list"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: b/j06W
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAIMCP.tsx
|
||||
msgid "OAuth"
|
||||
msgstr "OAuth"
|
||||
@@ -10626,7 +10721,6 @@ msgid "Open Outlook"
|
||||
msgstr "Maak Outlook oop"
|
||||
|
||||
#. js-lingui-id: bY2Xkv
|
||||
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "Open side panel"
|
||||
msgstr "Maak sypaneel oop"
|
||||
@@ -10712,12 +10806,15 @@ msgstr "Rangskik"
|
||||
#. js-lingui-id: /IX/7x
|
||||
#: src/pages/settings/updates/SettingsUpdates.tsx
|
||||
#: src/pages/settings/security/SettingsSecurity.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
|
||||
#: src/modules/navigation/components/NavigationDrawerOtherSection.tsx
|
||||
#: src/modules/command-menu-item/edit/components/SidePanelCommandMenuItemEditPage.tsx
|
||||
@@ -11068,6 +11165,11 @@ msgstr "Prent"
|
||||
msgid "Pie Chart"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 3pU8e+
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Pin tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 2FIjLb
|
||||
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
|
||||
msgid "Pink"
|
||||
@@ -11087,6 +11189,7 @@ msgstr "Plekhouer"
|
||||
|
||||
#. js-lingui-id: MFTZK8
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsPlacementSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Placement"
|
||||
msgstr ""
|
||||
|
||||
@@ -11138,11 +11241,6 @@ msgstr "Koppel asseblief jou posbus {mailboxHandle} weer om jou e-posaliasse by
|
||||
msgid "Please refresh the page."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: X5x85V
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Please search for a user first"
|
||||
msgstr "Soek asseblief eers vir 'n gebruiker"
|
||||
|
||||
#. js-lingui-id: wCgL30
|
||||
#: src/pages/settings/data-model/new-field/SettingsObjectNewFieldConfigure.tsx
|
||||
msgid "Please select at least one destination object for this relation."
|
||||
@@ -11551,6 +11649,11 @@ msgstr "Ontvang 'n e-pos met skakel om wagwoord op te dateer"
|
||||
msgid "Recent Events (oldest → newest)"
|
||||
msgstr "Onlangse Gebeure (oudste → nuutste)"
|
||||
|
||||
#. js-lingui-id: EoiSFI
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Recent Users"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: yPrbsy
|
||||
#: src/modules/activities/emails/components/EmailComposerFields.tsx
|
||||
msgid "Recipients"
|
||||
@@ -11621,11 +11724,6 @@ msgstr "Rekord etiket"
|
||||
msgid "Record Page"
|
||||
msgstr "Rekordbladsy"
|
||||
|
||||
#. js-lingui-id: dSCufP
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Record Selection"
|
||||
msgstr "Rekord Seleksie"
|
||||
|
||||
#. js-lingui-id: NxW0+c
|
||||
#: src/modules/side-panel/pages/page-layout/utils/getPageLayoutPageTitle.ts
|
||||
msgid "Record Table Settings"
|
||||
@@ -11948,7 +12046,10 @@ msgstr "Stuur e-pos weer"
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/modules/views/components/ViewBarDetails.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Stel terug"
|
||||
|
||||
@@ -11958,21 +12059,25 @@ msgstr "Stel terug"
|
||||
msgid "Reset 2FA"
|
||||
msgstr "Herstel 2FA"
|
||||
|
||||
#. js-lingui-id: kw0Yv1
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "Reset all overrides on this layout to return it to the app default"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YdI8A2
|
||||
#: src/modules/command-menu-item/edit/components/CommandMenuItemOptionsDropdown.tsx
|
||||
msgid "Reset label to default"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 1IWc1n
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
|
||||
msgid "Reset to"
|
||||
msgstr "Herstel na"
|
||||
|
||||
#. js-lingui-id: L+rMC9
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/fields/forms/address/components/SettingsDataModelFieldAddressForm.tsx
|
||||
#: src/modules/command-menu-item/edit/components/SidePanelCommandMenuItemEditPage.tsx
|
||||
msgid "Reset to default"
|
||||
@@ -12238,6 +12343,11 @@ msgstr "Voer {formattedName} uit"
|
||||
msgid "Running function"
|
||||
msgstr "Funksie word uitgevoer"
|
||||
|
||||
#. js-lingui-id: SoR81K
|
||||
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
|
||||
msgid "Running workflows on all records is not yet supported. Please select records manually."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: LTC198
|
||||
#: src/modules/ai/components/CodeExecutionDisplay.tsx
|
||||
msgid "Running..."
|
||||
@@ -12316,17 +12426,11 @@ msgstr "SDK"
|
||||
#: src/modules/side-panel/hooks/useOpenRecordsSearchPageInSidePanel.ts
|
||||
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentWorkspaceMemberPickerDropdown.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/command-menu-item/engine-command/constants/EngineComponentKeyHeadlessComponentMap.tsx
|
||||
#: src/modules/command-menu-item/engine-command/constants/EngineComponentKeyHeadlessComponentMap.tsx
|
||||
msgid "Search"
|
||||
msgstr "Soek"
|
||||
|
||||
#. js-lingui-id: aOQ/Fi
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Search ''{sidePanelSearch}'' with..."
|
||||
msgstr "Soek ''{sidePanelSearch}'' met..."
|
||||
|
||||
#. js-lingui-id: g2dQp/
|
||||
#: src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionMeValueSelect.tsx
|
||||
msgid "Search 1 {fieldTypeLabelLowercase} field"
|
||||
@@ -12449,6 +12553,16 @@ msgstr "Soek enige veld"
|
||||
msgid "Search API keys"
|
||||
msgstr "Soek API sleutels"
|
||||
|
||||
#. js-lingui-id: iRegw9
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Search by name, email, or user ID..."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: KI1xjO
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Search by workspace name, subdomain, or ID..."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: yI4D/V
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/ChartColorSelectionDropdownContent.tsx
|
||||
msgid "Search colors"
|
||||
@@ -12937,7 +13051,7 @@ msgid "Set as default"
|
||||
msgstr "Stel as verstek"
|
||||
|
||||
#. js-lingui-id: 7f09hf
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
msgid "Set as pinned tab"
|
||||
msgstr "Stel as vasgespelde oortjie"
|
||||
|
||||
@@ -13010,7 +13124,7 @@ msgstr "Instelling van jou databasis..."
|
||||
#: src/pages/settings/ai/SettingsAgentForm.tsx
|
||||
#: src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownDefaultComponents.tsx
|
||||
#: src/modules/sign-in-background-mock/components/SignInAppNavigationDrawerMock.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dashboard/SidePanelDashboardRecordTableSettings.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsSection.tsx
|
||||
#: src/modules/settings/roles/role/components/SettingsRole.tsx
|
||||
@@ -13499,6 +13613,7 @@ msgstr "Staat"
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
@@ -14114,6 +14229,11 @@ msgstr "Daar is geen gekoppelde aktiwiteit by hierdie rekord nie."
|
||||
msgid "There was an error while updating password."
|
||||
msgstr "Daar was 'n fout terwyl die wagwoord opgedateer is."
|
||||
|
||||
#. js-lingui-id: vg1S0X
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
|
||||
msgid "These apps are not vetted. Use at your own risk."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: AUV+TY
|
||||
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
|
||||
msgid "Thinking"
|
||||
@@ -14144,6 +14264,11 @@ msgstr "Hierdie rekening is gekoppel, maar ons het nog nie toestemming om e-posk
|
||||
msgid "This action can return up to {maxRecordsFormatted} records."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 2xOCJW
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "This action cannot be undone."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Ox1hE7
|
||||
#: src/modules/settings/profile/components/DeleteAccount.tsx
|
||||
msgid ""
|
||||
@@ -14202,6 +14327,11 @@ msgstr "Hierdie toepassing is op die markplek gelys omdat dit op npm gepubliseer
|
||||
msgid "This application is not listed on the marketplace. It was shared via a direct link."
|
||||
msgstr "Hierdie toepassing is nie op die markplek gelys nie. Dit is via 'n direkte skakel gedeel."
|
||||
|
||||
#. js-lingui-id: D8qhoN
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
|
||||
msgid "This application is required for your workspace to function properly and cannot be uninstalled."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: SLIRqz
|
||||
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableHelpText.tsx
|
||||
msgid "This database value overrides environment settings. "
|
||||
@@ -14247,6 +14377,11 @@ msgstr "Hierdie sleutel moet via die liggaam-invoer gestel word"
|
||||
msgid "This model will be removed from the provider. You can re-add it later."
|
||||
msgstr "Hierdie model sal van die verskaffer verwyder word. Jy kan dit later weer byvoeg."
|
||||
|
||||
#. js-lingui-id: NCA55L
|
||||
#: src/modules/page-layout/widgets/components/StandaloneWidgetPlaceholder.tsx
|
||||
msgid "This page has no content"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: R/PuIn
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
msgid "This provider doesn't have a native SDK yet — it will use OpenAI-compatible mode. Need native support? Reach out to us."
|
||||
@@ -14316,7 +14451,8 @@ msgid "This week"
|
||||
msgstr "Hierdie week"
|
||||
|
||||
#. js-lingui-id: DF2voz
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "This will cancel all modifications done on the tab and its widgets. Edit mode will be canceled and the page will refresh. This action cannot be undone."
|
||||
msgstr ""
|
||||
|
||||
@@ -14439,6 +14575,11 @@ msgstr "Tydsberekening"
|
||||
msgid "title"
|
||||
msgstr "titel"
|
||||
|
||||
#. js-lingui-id: MHrjPM
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: /jQctM
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx
|
||||
#: src/modules/activities/emails/components/EmailComposerFields.tsx
|
||||
@@ -14502,6 +14643,12 @@ msgstr ""
|
||||
msgid "Too many records. Up to {maxRecordsString} allowed"
|
||||
msgstr "Te veel rekords. Tot {maxRecordsString} toegelaat"
|
||||
|
||||
#. js-lingui-id: tfaidv
|
||||
#. placeholder {0}: part.toolName
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminChatThreadMessageList.tsx
|
||||
msgid "Tool call: {0}"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: GnoLfm
|
||||
#: src/modules/ai/components/RoutingDebugDisplay.tsx
|
||||
msgid "Tool calls made"
|
||||
@@ -14533,6 +14680,16 @@ msgstr "Gereedskapgenerering"
|
||||
msgid "Tools"
|
||||
msgstr "Gereedskap"
|
||||
|
||||
#. js-lingui-id: nCq25C
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Top 10 workspaces by number of users"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: A4dnvW
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Top Workspaces"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 72c5Qo
|
||||
#: src/modules/page-layout/widgets/graph/graph-widget-pie-chart/hooks/usePieChartCenterMetricData.ts
|
||||
msgid "Total"
|
||||
@@ -14962,12 +15119,14 @@ msgid "Unordered list with bullets"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wja8aL
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/modules/ui/field/display/components/GlobalFilePreviewModal.tsx
|
||||
#: src/modules/ui/field/display/components/ArrayDisplay.tsx
|
||||
#: src/modules/ui/field/display/components/ActorDisplay.tsx
|
||||
#: src/modules/side-panel/components/SidePanelContextChip.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabsRenderer.tsx
|
||||
#: src/modules/page-layout/hooks/usePageLayoutAddTabStrategy.ts
|
||||
#: src/modules/object-record/record-title-cell/components/RecordTitleFullNameFieldDisplay.tsx
|
||||
#: src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx
|
||||
#: src/modules/object-record/components/RecordChip.tsx
|
||||
@@ -15062,6 +15221,7 @@ msgid "updated"
|
||||
msgstr "opgedateer"
|
||||
|
||||
#. js-lingui-id: +b7T3G
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/settings/components/SettingsDatabaseEventsForm.tsx
|
||||
msgid "Updated"
|
||||
msgstr "Opgedateer"
|
||||
@@ -15296,13 +15456,8 @@ msgstr "Gebruiker"
|
||||
msgid "User Context"
|
||||
msgstr "Gebruikerskonteks"
|
||||
|
||||
#. js-lingui-id: RNv3YS
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "User Impersonation"
|
||||
msgstr "Gebruiker Nabootsing"
|
||||
|
||||
#. js-lingui-id: tNT8wT
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "User Info"
|
||||
msgstr "Gebruiker Info"
|
||||
|
||||
@@ -15327,6 +15482,7 @@ msgstr "Gebruiker se gebruik"
|
||||
|
||||
#. js-lingui-id: Sxm8rQ
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Users"
|
||||
msgstr "Gebruikers"
|
||||
|
||||
@@ -15628,6 +15784,11 @@ msgstr "Violet"
|
||||
msgid "Visibility"
|
||||
msgstr "Sigbaarheid"
|
||||
|
||||
#. js-lingui-id: XQC+sL
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Visibility restriction"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: gkAApJ
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
msgid "Visibility Restriction"
|
||||
@@ -15980,6 +16141,7 @@ msgstr "Werksvloeie"
|
||||
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
|
||||
#: src/pages/settings/ai/SettingsAIPrompts.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
|
||||
#: src/modules/sign-in-background-mock/components/SignInAppNavigationDrawerMock.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
@@ -15992,6 +16154,8 @@ msgstr "Werksvloeie"
|
||||
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
|
||||
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
|
||||
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
|
||||
@@ -16041,6 +16205,11 @@ msgstr "Werkruimte logo"
|
||||
msgid "Workspace Member"
|
||||
msgstr "Werkruimte Lid"
|
||||
|
||||
#. js-lingui-id: wtxjAY
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Workspace members"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: CozWO1
|
||||
#: src/pages/onboarding/CreateWorkspace.tsx
|
||||
msgid "Workspace name"
|
||||
@@ -16052,7 +16221,7 @@ msgid "Workspace views require manage views permission"
|
||||
msgstr "Werkruimte-uitsigte vereis bestuur-uitsigte mag"
|
||||
|
||||
#. js-lingui-id: pmt7u4
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Workspaces"
|
||||
msgstr "Werkruimtes"
|
||||
|
||||
@@ -16288,10 +16457,10 @@ msgstr "Jou ondernemingsfunksies sal gedeaktiveer word"
|
||||
msgid "Your enterprise features will remain active until {cancelAtDate}."
|
||||
msgstr "Jou ondernemingsfunksies sal aktief bly tot {cancelAtDate}."
|
||||
|
||||
#. js-lingui-id: 69Siss
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
|
||||
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
|
||||
msgstr "Jou ondernemingssleutelformaat is verouderd. Aktiveer asseblief 'n nuwe sleutel om ondernemingsfunksies te behou."
|
||||
#. js-lingui-id: 5TsUUL
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
|
||||
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: NTpA4U
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
|
||||
@@ -438,10 +438,10 @@ msgstr "{totalCost, plural, zero {لا اعتمادات} one {اعتماد وا
|
||||
msgid "{totalCount} selected"
|
||||
msgstr "تم تحديد {totalCount}"
|
||||
|
||||
#. js-lingui-id: WwbakM
|
||||
#. js-lingui-id: XdG+hI
|
||||
#: src/modules/side-panel/pages/page-layout/components/record-page/SidePanelRecordPageFieldsSettings.tsx
|
||||
msgid "{totalFieldsCount} fields"
|
||||
msgstr "{totalFieldsCount} حقول"
|
||||
msgid "{totalFieldsCount} visible fields"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: ITVweg
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownDefaultView.tsx
|
||||
@@ -668,7 +668,7 @@ msgid "About my subscription"
|
||||
msgstr "حول اشتراكي"
|
||||
|
||||
#. js-lingui-id: DhgC7B
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "About this user"
|
||||
msgstr "حول هذا المستخدم"
|
||||
|
||||
@@ -677,6 +677,11 @@ msgstr "حول هذا المستخدم"
|
||||
msgid "About this workspace"
|
||||
msgstr "عن مساحة العمل هذه"
|
||||
|
||||
#. js-lingui-id: LuXP9q
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
|
||||
msgid "Access"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: pNW+Rt
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
msgid "Access Key ID"
|
||||
@@ -756,6 +761,7 @@ msgid "Action on click"
|
||||
msgstr "الإجراء عند النقر"
|
||||
|
||||
#. js-lingui-id: 7L01XJ
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsToolSection.tsx
|
||||
@@ -784,7 +790,7 @@ msgstr "الإجراءات التي يمكن للمستخدمين تنفيذها
|
||||
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
|
||||
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
|
||||
msgid "Activate"
|
||||
msgstr "تفعيل"
|
||||
|
||||
@@ -1203,11 +1209,14 @@ msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: g1in8j
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminQueueDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
@@ -1215,6 +1224,11 @@ msgstr ""
|
||||
msgid "Admin Panel"
|
||||
msgstr "اللوحة الإدارية"
|
||||
|
||||
#. js-lingui-id: 6X68yA
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Admin Panel - General"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: sxkWRg
|
||||
#: src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx
|
||||
#: src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx
|
||||
@@ -1346,6 +1360,8 @@ msgstr ""
|
||||
#: src/pages/settings/ai/SettingsAIPrompts.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/utils/getActionHeaderTypeOrThrow.ts
|
||||
#: src/modules/side-panel/pages/workflow/action/components/SidePanelWorkflowSelectAction.tsx
|
||||
@@ -1361,6 +1377,11 @@ msgstr "الذكاء الاصطناعي"
|
||||
msgid "AI Chat"
|
||||
msgstr "دردشة الذكاء الاصطناعي"
|
||||
|
||||
#. js-lingui-id: qiD/6r
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "AI chat threads for this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: E/lGXl
|
||||
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
|
||||
msgid "AI consumption across all workspaces."
|
||||
@@ -1574,6 +1595,11 @@ msgstr "جميع كائنات النظام موجودة بالفعل في الش
|
||||
msgid "All tasks addressed. Maintain the momentum."
|
||||
msgstr "تم التعامل مع جميع المهام. حافظ على الزخم."
|
||||
|
||||
#. js-lingui-id: 45Gm/K
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "All the applications currently installed on this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: XuuWVF
|
||||
#: src/modules/settings/roles/role-permissions/object-level-permissions/components/SettingsRolePermissionsObjectLevelObjectPicker.tsx
|
||||
msgid "All the standard objects"
|
||||
@@ -1585,7 +1611,7 @@ msgid "All workspace members already have this role"
|
||||
msgstr "جميع أعضاء مساحة العمل لديهم هذا الدور بالفعل"
|
||||
|
||||
#. js-lingui-id: MLmnB2
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "All workspaces this user is a member of"
|
||||
msgstr "جميع مساحات العمل التي يكون فيها هذا المستخدم عضوًا"
|
||||
|
||||
@@ -1730,6 +1756,7 @@ msgstr "حدث خطأ أثناء تحميل الصورة."
|
||||
#: src/modules/ui/feedback/snack-bar-manager/hooks/useSnackBar.ts
|
||||
#: src/modules/page-layout/hooks/useUpdatePageLayoutWithTabsAndWidgets.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutWidgetToDefault.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutToDefault.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutTabToDefault.ts
|
||||
#: src/modules/object-metadata/hooks/useUpdateOneObjectMetadataItem.ts
|
||||
#: src/modules/object-metadata/hooks/useUpdateOneFieldMetadataItem.ts
|
||||
@@ -1760,7 +1787,6 @@ msgstr "يوجد بالفعل كائن يحمل هذا الاسم"
|
||||
|
||||
#. js-lingui-id: lxentK
|
||||
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
|
||||
#: src/modules/ai/utils/extractErrorMessage.ts
|
||||
msgid "An unexpected error occurred"
|
||||
msgstr "حدث خطأ غير متوقع"
|
||||
|
||||
@@ -1786,8 +1812,8 @@ msgid "Any {fieldLabel} field"
|
||||
msgstr "أي حقل {fieldLabel}"
|
||||
|
||||
#. js-lingui-id: COyjuu
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Any device"
|
||||
msgstr ""
|
||||
|
||||
@@ -1928,6 +1954,11 @@ msgstr "التطبيق"
|
||||
msgid "App installed on this workspace"
|
||||
msgstr "التطبيق مثبت على مساحة العمل هذه"
|
||||
|
||||
#. js-lingui-id: r5g1bX
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
msgid "App registrations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: aAIQg2
|
||||
#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx
|
||||
msgid "Appearance"
|
||||
@@ -2952,11 +2983,26 @@ msgstr "الرسم البياني"
|
||||
msgid "Chat"
|
||||
msgstr "الدردشة"
|
||||
|
||||
#. js-lingui-id: eKz2ln
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
msgid "Chat conversation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: jTS+KY
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Chat Sessions"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: UxeiNP
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
|
||||
msgid "Chat with AI agents and use AI features"
|
||||
msgstr "التحدث مع وكلاء الذكاء الاصطناعي واستخدام ميزات الذكاء الاصطناعي"
|
||||
|
||||
#. js-lingui-id: 8Q+lLG
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Chats"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: xK2nU3
|
||||
#: src/pages/settings/updates/SettingsUpdates.tsx
|
||||
msgid "Check out our latest releases"
|
||||
@@ -3153,7 +3199,6 @@ msgid "Close banner"
|
||||
msgstr "إغلاق اللافتة"
|
||||
|
||||
#. js-lingui-id: saip/v
|
||||
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "Close side panel"
|
||||
msgstr "إغلاق اللوحة الجانبية"
|
||||
@@ -3533,9 +3578,7 @@ msgid "Content"
|
||||
msgstr "المحتوى"
|
||||
|
||||
#. js-lingui-id: M73whl
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
|
||||
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
|
||||
#: src/modules/ai/components/RoutingDebugDisplay.tsx
|
||||
msgid "Context"
|
||||
msgstr "السياق"
|
||||
@@ -3968,7 +4011,9 @@ msgid "Create, edit, and delete workspace views"
|
||||
msgstr "إنشاء وتحرير وحذف عروض مساحة العمل"
|
||||
|
||||
#. js-lingui-id: d+F6q9
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/components/SettingsDatabaseEventsForm.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/activities/calendar/components/CalendarEventDetails.tsx
|
||||
msgid "Created"
|
||||
msgstr "تم الإنشاء"
|
||||
@@ -4615,7 +4660,8 @@ msgstr "حذف"
|
||||
#: src/modules/views/view-picker/components/ViewPickerOptionDropdown.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerEditButton.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerCreateButton.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
|
||||
#: src/modules/settings/logic-functions/components/tabs/SettingsLogicFunctionTabEnvironmentVariableTableRow.tsx
|
||||
#: src/modules/settings/emailing-domains/components/SettingsEmailingDomainRowDropdownMenu.tsx
|
||||
@@ -4868,8 +4914,8 @@ msgid "Description"
|
||||
msgstr "الوصف"
|
||||
|
||||
#. js-lingui-id: BBqGS9
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Desktop"
|
||||
msgstr ""
|
||||
|
||||
@@ -4910,6 +4956,11 @@ msgstr "المطوّر"
|
||||
msgid "Developers links"
|
||||
msgstr "روابط المطورين"
|
||||
|
||||
#. js-lingui-id: E/QGRL
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Xm/s+u
|
||||
#: src/modules/settings/accounts/components/SettingsAccountsCalendarChannelsGeneral.tsx
|
||||
msgid "Display"
|
||||
@@ -4946,8 +4997,8 @@ msgid "Display text on multiple lines"
|
||||
msgstr "عرض النصوص في عدة خطوط"
|
||||
|
||||
#. js-lingui-id: vU/Hht
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
msgid "Distribution"
|
||||
msgstr "التوزيع"
|
||||
|
||||
@@ -5092,7 +5143,7 @@ msgid "Drop file here..."
|
||||
msgstr "أسقط الملف هنا..."
|
||||
|
||||
#. js-lingui-id: euc6Ns
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
@@ -5355,6 +5406,8 @@ msgstr "وإلا إذا"
|
||||
#: src/pages/settings/SettingsProfile.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx
|
||||
#: src/modules/settings/security/components/SettingsSecurityEditableProfileFields.tsx
|
||||
@@ -5550,6 +5603,11 @@ msgstr "صندوق الوارد فارغ"
|
||||
msgid "Empty Object"
|
||||
msgstr "كائن فارغ"
|
||||
|
||||
#. js-lingui-id: 7A0K1Y
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "Empty tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: q11Dk2
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
msgid "Enable bypass options"
|
||||
@@ -5801,11 +5859,6 @@ msgstr "أدخل الأمر الموجه للنظام الذي يحدد سلوك
|
||||
msgid "Enter the workspace subdomain to transfer this app to. You will lose access to manage it."
|
||||
msgstr "أدخل النطاق الفرعي لمساحة العمل المراد نقل هذا التطبيق إليها. ستفقد صلاحية إدارته."
|
||||
|
||||
#. js-lingui-id: rYIISB
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Enter user ID or email address"
|
||||
msgstr "أدخل معرف المستخدم أو عنوان البريد الإلكتروني"
|
||||
|
||||
#. js-lingui-id: pubQie
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/code-action/components/WorkflowEditActionCodeFields.tsx
|
||||
@@ -6441,11 +6494,6 @@ msgstr ""
|
||||
msgid "Failed to get response"
|
||||
msgstr "فشل في الحصول على رد"
|
||||
|
||||
#. js-lingui-id: CUzkVp
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Failed to impersonate user. {errorMessage}"
|
||||
msgstr "فشل في انتحال شخصية المستخدم. {errorMessage}"
|
||||
|
||||
#. js-lingui-id: qZwtAi
|
||||
#: src/modules/marketplace/hooks/useInstallApp.ts
|
||||
msgid "Failed to install the application."
|
||||
@@ -6533,11 +6581,6 @@ msgstr "فشل نقل الملكية. تحقق من صحة النطاق الفر
|
||||
msgid "Failed to update default model"
|
||||
msgstr "فشل في تحديث النموذج الافتراضي"
|
||||
|
||||
#. js-lingui-id: P1NmNz
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Failed to update feature flag. {errorMessage}"
|
||||
msgstr "فشل في تحديث علم الميزة. {errorMessage}"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
|
||||
msgid "Failed to update model"
|
||||
@@ -6646,14 +6689,15 @@ msgid "Favorites"
|
||||
msgstr "المفضلة"
|
||||
|
||||
#. js-lingui-id: YXjpZx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Feature Flag"
|
||||
msgstr "علم الميزة"
|
||||
|
||||
#. js-lingui-id: kP/brT
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Feature Flags & Impersonation"
|
||||
msgstr "أعلام الميزات والانتحال"
|
||||
#. js-lingui-id: +ZqAYI
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Feature Flags"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: FkMol5
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
|
||||
@@ -7054,6 +7098,11 @@ msgstr "المكوّنات الأمامية"
|
||||
msgid "Full access"
|
||||
msgstr "وصول كامل"
|
||||
|
||||
#. js-lingui-id: Ld0Tt4
|
||||
#: src/modules/side-panel/components/hooks/usePageLayoutHeaderInfo.ts
|
||||
msgid "Full tab widget"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YMZBxa
|
||||
#: src/pages/settings/security/event-logs/utils/getColumnsForEventLogTable.ts
|
||||
msgid "Function"
|
||||
@@ -7078,13 +7127,11 @@ msgstr "الرسم البياني القياسي"
|
||||
#. js-lingui-id: Weq9zb
|
||||
#: src/pages/settings/SettingsWorkspace.tsx
|
||||
#: src/pages/settings/SettingsWorkspace.tsx
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroupsForDisplay.ts
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/keyboard-shortcut-menu/components/KeyboardShortcutMenuOpenContent.tsx
|
||||
msgid "General"
|
||||
msgstr "عام"
|
||||
@@ -7135,11 +7182,6 @@ msgstr "استفد من مساحة العمل الخاصة بك عن طريق د
|
||||
msgid "Get your subscription"
|
||||
msgstr "احصل على اشتراكك"
|
||||
|
||||
#. js-lingui-id: 2GT3Hf
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Global"
|
||||
msgstr "عالمي"
|
||||
|
||||
#. js-lingui-id: sr0UJD
|
||||
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
|
||||
msgid "Go Back"
|
||||
@@ -7515,8 +7557,8 @@ msgid "Icon and Name"
|
||||
msgstr "الأيقونة والاسم"
|
||||
|
||||
#. js-lingui-id: S0kLOH
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "ID"
|
||||
msgstr "المعرف"
|
||||
|
||||
@@ -7621,9 +7663,10 @@ msgid "imap.example.com"
|
||||
msgstr "imap.example.com"
|
||||
|
||||
#. js-lingui-id: tSVr6t
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
#: src/modules/settings/members/components/MemberInfosTab.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Impersonate"
|
||||
msgstr "انتحال"
|
||||
|
||||
@@ -7633,7 +7676,7 @@ msgid "Impersonate workspace users"
|
||||
msgstr "انتحال صفة مستخدمي مساحة العمل"
|
||||
|
||||
#. js-lingui-id: yImXof
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Impersonation is disabled for this workspace"
|
||||
msgstr "التقمص معطل لهذه المساحة"
|
||||
|
||||
@@ -7736,6 +7779,7 @@ msgid "Indexes"
|
||||
msgstr "الفهرسات"
|
||||
|
||||
#. js-lingui-id: CE+M2e
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
|
||||
msgid "Info"
|
||||
msgstr "معلومات"
|
||||
@@ -7830,10 +7874,10 @@ msgstr "التثبيت"
|
||||
msgid "Installed"
|
||||
msgstr "مثبت"
|
||||
|
||||
#. js-lingui-id: N52taw
|
||||
#. js-lingui-id: OMxM9j
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "Installed applications"
|
||||
msgstr "التطبيقات المثبتة"
|
||||
msgid "Installed apps"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wJJ+Wy
|
||||
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
|
||||
@@ -8289,6 +8333,16 @@ msgstr "آخر ساعة واحدة"
|
||||
msgid "Last 1 Hour (oldest → newest)"
|
||||
msgstr "آخر ١ ساعة (الأقدم ← الأحدث)"
|
||||
|
||||
#. js-lingui-id: YoKFgq
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Last 10 users created. Click to impersonate."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: sgqwjE
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Last 10 users created. Click to manage feature flags or impersonate."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: XUlP/Y
|
||||
#: src/modules/settings/admin-panel/health-status/constants/WorkerQueueMetricsSelectOptions.ts
|
||||
msgid "Last 12 hours"
|
||||
@@ -8580,11 +8634,6 @@ msgstr "ربط رسالة بريد إلكتروني بـ"
|
||||
msgid "list"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 5Kn+XX
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "List installed applications. Use filter to search for a specific application"
|
||||
msgstr "اعرض قائمة التطبيقات المثبتة. استخدم عامل التصفية للبحث عن تطبيق محدد"
|
||||
|
||||
#. js-lingui-id: Ap948/
|
||||
#: src/modules/settings/admin-panel/apps/components/SettingsAdminApps.tsx
|
||||
msgid "Listed"
|
||||
@@ -8769,16 +8818,6 @@ msgstr "تسجيل الخروج"
|
||||
msgid "Logs"
|
||||
msgstr "السجلات"
|
||||
|
||||
#. js-lingui-id: PTozs8
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Look up users and manage their workspace feature flags or impersonate them."
|
||||
msgstr "ابحث عن المستخدمين وادرة أعلام الميزات الخاصة بمساحات العمل أو انتحلهم."
|
||||
|
||||
#. js-lingui-id: GPSwzy
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Look up users to impersonate them."
|
||||
msgstr "ابحث عن المستخدمين لانتحال هويتهم."
|
||||
|
||||
#. js-lingui-id: tL2lBI
|
||||
#: src/modules/workflow/workflow-diagram/utils/generateNodesAndEdgesForIteratorNode.ts
|
||||
msgid "loop"
|
||||
@@ -8806,6 +8845,7 @@ msgstr ""
|
||||
|
||||
#. js-lingui-id: wckWOP
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Manage"
|
||||
msgstr ""
|
||||
|
||||
@@ -8832,6 +8872,11 @@ msgstr "إدارة معلومات الفوترة"
|
||||
msgid "Manage favorite"
|
||||
msgstr "إدارة المفضلة"
|
||||
|
||||
#. js-lingui-id: Dt05oz
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Manage feature flags for this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: T6YjCk
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
msgid "Manage Members"
|
||||
@@ -8996,6 +9041,8 @@ msgstr ""
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMember.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
@@ -9054,6 +9101,7 @@ msgstr "مزامنة الرسائل غير متاحة لأن الخدمة متو
|
||||
|
||||
#. js-lingui-id: t7TeQU
|
||||
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Messages"
|
||||
msgstr "الرسائل"
|
||||
|
||||
@@ -9130,8 +9178,8 @@ msgid "Mission accomplished!"
|
||||
msgstr "تم إنجاز المهمة!"
|
||||
|
||||
#. js-lingui-id: dMsM20
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Mobile"
|
||||
msgstr ""
|
||||
|
||||
@@ -9231,7 +9279,6 @@ msgstr ""
|
||||
#. js-lingui-id: 2FYpfJ
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "More"
|
||||
msgstr "المزيد"
|
||||
|
||||
@@ -9280,14 +9327,16 @@ msgid "Move Down"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: iSLA/r
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx
|
||||
#: src/modules/object-record/record-group/hooks/useRecordGroupActions.ts
|
||||
msgid "Move left"
|
||||
msgstr "نقل إلى اليسار"
|
||||
|
||||
#. js-lingui-id: Ubl2by
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx
|
||||
#: src/modules/object-record/record-group/hooks/useRecordGroupActions.ts
|
||||
msgid "Move right"
|
||||
@@ -9366,6 +9415,8 @@ msgstr "mySkill"
|
||||
#: src/pages/settings/ai/constants/SettingsAiAgentTableMetadata.ts
|
||||
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
|
||||
#: src/pages/settings/ai/components/SettingsToolParameterTable.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/onboarding/CreateProfile.tsx
|
||||
#: src/modules/settings/workspace/components/NameField.tsx
|
||||
@@ -9612,6 +9663,20 @@ msgstr "تكوين SSO الجديد"
|
||||
msgid "New SSO provider"
|
||||
msgstr "موفر دخول موحد جديد"
|
||||
|
||||
#. js-lingui-id: 3YvS+c
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "New tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Db+TX4
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
msgid "New Tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wl18ST
|
||||
#: src/modules/activities/tasks/components/TaskGroups.tsx
|
||||
msgid "New task"
|
||||
@@ -9766,6 +9831,11 @@ msgstr "بدون رمز الاتصال"
|
||||
msgid "No chat"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: NjIy4U
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "No chat threads found."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wgUPZ1
|
||||
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
|
||||
msgid "No comment"
|
||||
@@ -9997,6 +10067,11 @@ msgstr "لا يوجد أعضاء مطابقة لبحثك"
|
||||
msgid "No messages found for this turn"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: IohPnt
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminChatThreadMessageList.tsx
|
||||
msgid "No messages found."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 0NudpV
|
||||
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminWorkerMetricsGraph.tsx
|
||||
msgid "No metrics data available"
|
||||
@@ -10048,6 +10123,11 @@ msgstr "لا معلمات"
|
||||
msgid "No payment method found. Please update your billing details."
|
||||
msgstr "لم يتم العثور على وسيلة دفع. يرجى تحديث تفاصيل الفوترة الخاصة بك."
|
||||
|
||||
#. js-lingui-id: orE/ux
|
||||
#: src/pages/settings/applications/SettingsApplicationDetails.tsx
|
||||
msgid "No permission defined for this application"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Od1X93
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx
|
||||
msgid "No permissions configured for this application."
|
||||
@@ -10160,6 +10240,11 @@ msgstr "لا توجد بيانات استخدام"
|
||||
msgid "No usage data yet"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: EsP4NW
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "No users found matching your search criteria."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wJwIUq
|
||||
#: src/modules/object-record/record-field/ui/form-types/components/FormSelectFieldInput.tsx
|
||||
msgid "No value"
|
||||
@@ -10196,6 +10281,11 @@ msgstr "لا توجد نسخ لعمليات العمل بعد"
|
||||
msgid "No workspace selected"
|
||||
msgstr "لم يتم تحديد مساحة عمل"
|
||||
|
||||
#. js-lingui-id: TiRphK
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "No workspaces found matching your search criteria."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Ah7JCB
|
||||
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
|
||||
msgid "Node"
|
||||
@@ -10281,6 +10371,11 @@ msgstr "ملاحظة"
|
||||
msgid "Notes"
|
||||
msgstr "الملاحظات"
|
||||
|
||||
#. js-lingui-id: DYCPYF
|
||||
#: src/modules/page-layout/widgets/components/StandaloneWidgetPlaceholder.tsx
|
||||
msgid "Nothing to see"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YwzE9K
|
||||
#: src/utils/date-utils.ts
|
||||
#: src/utils/date-utils.ts
|
||||
@@ -10346,7 +10441,7 @@ msgid "Numbered list"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: b/j06W
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAIMCP.tsx
|
||||
msgid "OAuth"
|
||||
msgstr "OAuth"
|
||||
@@ -10626,7 +10721,6 @@ msgid "Open Outlook"
|
||||
msgstr "فتح Outlook"
|
||||
|
||||
#. js-lingui-id: bY2Xkv
|
||||
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "Open side panel"
|
||||
msgstr "فتح اللوحة الجانبية"
|
||||
@@ -10712,12 +10806,15 @@ msgstr "تنظيم"
|
||||
#. js-lingui-id: /IX/7x
|
||||
#: src/pages/settings/updates/SettingsUpdates.tsx
|
||||
#: src/pages/settings/security/SettingsSecurity.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
|
||||
#: src/modules/navigation/components/NavigationDrawerOtherSection.tsx
|
||||
#: src/modules/command-menu-item/edit/components/SidePanelCommandMenuItemEditPage.tsx
|
||||
@@ -11068,6 +11165,11 @@ msgstr "صورة"
|
||||
msgid "Pie Chart"
|
||||
msgstr "الرسم البياني الدائري"
|
||||
|
||||
#. js-lingui-id: 3pU8e+
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Pin tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 2FIjLb
|
||||
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
|
||||
msgid "Pink"
|
||||
@@ -11087,6 +11189,7 @@ msgstr "نص توضيحي"
|
||||
|
||||
#. js-lingui-id: MFTZK8
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsPlacementSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Placement"
|
||||
msgstr ""
|
||||
|
||||
@@ -11138,11 +11241,6 @@ msgstr ""
|
||||
msgid "Please refresh the page."
|
||||
msgstr "يرجى تحديث الصفحة."
|
||||
|
||||
#. js-lingui-id: X5x85V
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Please search for a user first"
|
||||
msgstr "يرجى البحث عن مستخدم أولاً"
|
||||
|
||||
#. js-lingui-id: wCgL30
|
||||
#: src/pages/settings/data-model/new-field/SettingsObjectNewFieldConfigure.tsx
|
||||
msgid "Please select at least one destination object for this relation."
|
||||
@@ -11551,6 +11649,11 @@ msgstr "\\\\"
|
||||
msgid "Recent Events (oldest → newest)"
|
||||
msgstr "الأحداث الأخيرة (الأقدم ← الأحدث)"
|
||||
|
||||
#. js-lingui-id: EoiSFI
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Recent Users"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: yPrbsy
|
||||
#: src/modules/activities/emails/components/EmailComposerFields.tsx
|
||||
msgid "Recipients"
|
||||
@@ -11621,11 +11724,6 @@ msgstr "ملصق السجل"
|
||||
msgid "Record Page"
|
||||
msgstr "صفحة السجل"
|
||||
|
||||
#. js-lingui-id: dSCufP
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Record Selection"
|
||||
msgstr "\\\\"
|
||||
|
||||
#. js-lingui-id: NxW0+c
|
||||
#: src/modules/side-panel/pages/page-layout/utils/getPageLayoutPageTitle.ts
|
||||
msgid "Record Table Settings"
|
||||
@@ -11948,7 +12046,10 @@ msgstr "إعادة إرسال البريد الإلكتروني"
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/modules/views/components/ViewBarDetails.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "Reset"
|
||||
msgstr "إعادة تعيين"
|
||||
|
||||
@@ -11958,21 +12059,25 @@ msgstr "إعادة تعيين"
|
||||
msgid "Reset 2FA"
|
||||
msgstr "إعادة تعيين المصادقة الثنائية"
|
||||
|
||||
#. js-lingui-id: kw0Yv1
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "Reset all overrides on this layout to return it to the app default"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YdI8A2
|
||||
#: src/modules/command-menu-item/edit/components/CommandMenuItemOptionsDropdown.tsx
|
||||
msgid "Reset label to default"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 1IWc1n
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
|
||||
msgid "Reset to"
|
||||
msgstr "\\\\"
|
||||
|
||||
#. js-lingui-id: L+rMC9
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/fields/forms/address/components/SettingsDataModelFieldAddressForm.tsx
|
||||
#: src/modules/command-menu-item/edit/components/SidePanelCommandMenuItemEditPage.tsx
|
||||
msgid "Reset to default"
|
||||
@@ -12238,6 +12343,11 @@ msgstr "جارٍ تشغيل {formattedName}"
|
||||
msgid "Running function"
|
||||
msgstr "الدالة قيد التشغيل"
|
||||
|
||||
#. js-lingui-id: SoR81K
|
||||
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
|
||||
msgid "Running workflows on all records is not yet supported. Please select records manually."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: LTC198
|
||||
#: src/modules/ai/components/CodeExecutionDisplay.tsx
|
||||
msgid "Running..."
|
||||
@@ -12316,17 +12426,11 @@ msgstr "SDK"
|
||||
#: src/modules/side-panel/hooks/useOpenRecordsSearchPageInSidePanel.ts
|
||||
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentWorkspaceMemberPickerDropdown.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/command-menu-item/engine-command/constants/EngineComponentKeyHeadlessComponentMap.tsx
|
||||
#: src/modules/command-menu-item/engine-command/constants/EngineComponentKeyHeadlessComponentMap.tsx
|
||||
msgid "Search"
|
||||
msgstr "\\\\"
|
||||
|
||||
#. js-lingui-id: aOQ/Fi
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Search ''{sidePanelSearch}'' with..."
|
||||
msgstr "ابحث عن ''{sidePanelSearch}'' بواسطة..."
|
||||
|
||||
#. js-lingui-id: g2dQp/
|
||||
#: src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionMeValueSelect.tsx
|
||||
msgid "Search 1 {fieldTypeLabelLowercase} field"
|
||||
@@ -12449,6 +12553,16 @@ msgstr "البحث في أي حقل"
|
||||
msgid "Search API keys"
|
||||
msgstr "البحث عن مفاتيح API"
|
||||
|
||||
#. js-lingui-id: iRegw9
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Search by name, email, or user ID..."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: KI1xjO
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Search by workspace name, subdomain, or ID..."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: yI4D/V
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/ChartColorSelectionDropdownContent.tsx
|
||||
msgid "Search colors"
|
||||
@@ -12937,7 +13051,7 @@ msgid "Set as default"
|
||||
msgstr "تعيين كافتراضي"
|
||||
|
||||
#. js-lingui-id: 7f09hf
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
msgid "Set as pinned tab"
|
||||
msgstr "تعيين كعلامة تبويب مثبتة"
|
||||
|
||||
@@ -13010,7 +13124,7 @@ msgstr "إعداد قاعدة البيانات الخاصة بك..."
|
||||
#: src/pages/settings/ai/SettingsAgentForm.tsx
|
||||
#: src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownDefaultComponents.tsx
|
||||
#: src/modules/sign-in-background-mock/components/SignInAppNavigationDrawerMock.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dashboard/SidePanelDashboardRecordTableSettings.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsSection.tsx
|
||||
#: src/modules/settings/roles/role/components/SettingsRole.tsx
|
||||
@@ -13499,6 +13613,7 @@ msgstr "الولاية"
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
@@ -14114,6 +14229,11 @@ msgstr "لا توجد أنشطة مرتبطة بهذا السجل."
|
||||
msgid "There was an error while updating password."
|
||||
msgstr "حدث خطأ أثناء تحديث كلمة المرور."
|
||||
|
||||
#. js-lingui-id: vg1S0X
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
|
||||
msgid "These apps are not vetted. Use at your own risk."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: AUV+TY
|
||||
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
|
||||
msgid "Thinking"
|
||||
@@ -14144,6 +14264,11 @@ msgstr "هذا الحساب متصل، ولكن لا نملك حتى الآن إ
|
||||
msgid "This action can return up to {maxRecordsFormatted} records."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 2xOCJW
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "This action cannot be undone."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Ox1hE7
|
||||
#: src/modules/settings/profile/components/DeleteAccount.tsx
|
||||
msgid ""
|
||||
@@ -14202,6 +14327,11 @@ msgstr "هذا التطبيق مُدرج في السوق لأنه منشور ع
|
||||
msgid "This application is not listed on the marketplace. It was shared via a direct link."
|
||||
msgstr "هذا التطبيق غير مدرج في سوق التطبيقات. تمت مشاركته عبر رابط مباشر."
|
||||
|
||||
#. js-lingui-id: D8qhoN
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
|
||||
msgid "This application is required for your workspace to function properly and cannot be uninstalled."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: SLIRqz
|
||||
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableHelpText.tsx
|
||||
msgid "This database value overrides environment settings. "
|
||||
@@ -14247,6 +14377,11 @@ msgstr "يجب تعيين هذا المفتاح عبر إدخال نص الطل
|
||||
msgid "This model will be removed from the provider. You can re-add it later."
|
||||
msgstr "سيتم إزالة هذا النموذج من المزود. يمكنك إضافته مرة أخرى لاحقًا."
|
||||
|
||||
#. js-lingui-id: NCA55L
|
||||
#: src/modules/page-layout/widgets/components/StandaloneWidgetPlaceholder.tsx
|
||||
msgid "This page has no content"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: R/PuIn
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
msgid "This provider doesn't have a native SDK yet — it will use OpenAI-compatible mode. Need native support? Reach out to us."
|
||||
@@ -14316,7 +14451,8 @@ msgid "This week"
|
||||
msgstr "هذا الأسبوع"
|
||||
|
||||
#. js-lingui-id: DF2voz
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "This will cancel all modifications done on the tab and its widgets. Edit mode will be canceled and the page will refresh. This action cannot be undone."
|
||||
msgstr ""
|
||||
|
||||
@@ -14439,6 +14575,11 @@ msgstr "التوقيت"
|
||||
msgid "title"
|
||||
msgstr "العنوان"
|
||||
|
||||
#. js-lingui-id: MHrjPM
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: /jQctM
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx
|
||||
#: src/modules/activities/emails/components/EmailComposerFields.tsx
|
||||
@@ -14502,6 +14643,12 @@ msgstr ""
|
||||
msgid "Too many records. Up to {maxRecordsString} allowed"
|
||||
msgstr "عدد كبير جدًا من السجلات. يُسمح بما يصل إلى {maxRecordsString}"
|
||||
|
||||
#. js-lingui-id: tfaidv
|
||||
#. placeholder {0}: part.toolName
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminChatThreadMessageList.tsx
|
||||
msgid "Tool call: {0}"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: GnoLfm
|
||||
#: src/modules/ai/components/RoutingDebugDisplay.tsx
|
||||
msgid "Tool calls made"
|
||||
@@ -14533,6 +14680,16 @@ msgstr "توليد الأداة"
|
||||
msgid "Tools"
|
||||
msgstr "أدوات"
|
||||
|
||||
#. js-lingui-id: nCq25C
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Top 10 workspaces by number of users"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: A4dnvW
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Top Workspaces"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 72c5Qo
|
||||
#: src/modules/page-layout/widgets/graph/graph-widget-pie-chart/hooks/usePieChartCenterMetricData.ts
|
||||
msgid "Total"
|
||||
@@ -14962,12 +15119,14 @@ msgid "Unordered list with bullets"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wja8aL
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/modules/ui/field/display/components/GlobalFilePreviewModal.tsx
|
||||
#: src/modules/ui/field/display/components/ArrayDisplay.tsx
|
||||
#: src/modules/ui/field/display/components/ActorDisplay.tsx
|
||||
#: src/modules/side-panel/components/SidePanelContextChip.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabsRenderer.tsx
|
||||
#: src/modules/page-layout/hooks/usePageLayoutAddTabStrategy.ts
|
||||
#: src/modules/object-record/record-title-cell/components/RecordTitleFullNameFieldDisplay.tsx
|
||||
#: src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx
|
||||
#: src/modules/object-record/components/RecordChip.tsx
|
||||
@@ -15062,6 +15221,7 @@ msgid "updated"
|
||||
msgstr "تم التحديث"
|
||||
|
||||
#. js-lingui-id: +b7T3G
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/settings/components/SettingsDatabaseEventsForm.tsx
|
||||
msgid "Updated"
|
||||
msgstr "تم التحديث"
|
||||
@@ -15296,13 +15456,8 @@ msgstr "المستخدم"
|
||||
msgid "User Context"
|
||||
msgstr "سياق المستخدم"
|
||||
|
||||
#. js-lingui-id: RNv3YS
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "User Impersonation"
|
||||
msgstr "انتحال هوية المستخدم"
|
||||
|
||||
#. js-lingui-id: tNT8wT
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "User Info"
|
||||
msgstr "معلومات المستخدم"
|
||||
|
||||
@@ -15327,6 +15482,7 @@ msgstr "استخدام المستخدم"
|
||||
|
||||
#. js-lingui-id: Sxm8rQ
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Users"
|
||||
msgstr "المستخدمون"
|
||||
|
||||
@@ -15628,6 +15784,11 @@ msgstr "بنفسجي"
|
||||
msgid "Visibility"
|
||||
msgstr "الرؤية"
|
||||
|
||||
#. js-lingui-id: XQC+sL
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Visibility restriction"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: gkAApJ
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
msgid "Visibility Restriction"
|
||||
@@ -15978,6 +16139,7 @@ msgstr "سير العمل"
|
||||
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
|
||||
#: src/pages/settings/ai/SettingsAIPrompts.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
|
||||
#: src/modules/sign-in-background-mock/components/SignInAppNavigationDrawerMock.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
@@ -15990,6 +16152,8 @@ msgstr "سير العمل"
|
||||
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
|
||||
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
|
||||
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
|
||||
@@ -16039,6 +16203,11 @@ msgstr "شعار مساحة العمل"
|
||||
msgid "Workspace Member"
|
||||
msgstr "عضو في مساحة العمل"
|
||||
|
||||
#. js-lingui-id: wtxjAY
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Workspace members"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: CozWO1
|
||||
#: src/pages/onboarding/CreateWorkspace.tsx
|
||||
msgid "Workspace name"
|
||||
@@ -16050,7 +16219,7 @@ msgid "Workspace views require manage views permission"
|
||||
msgstr "تتطلب عروض مساحة العمل أذونات لإدارة العروض"
|
||||
|
||||
#. js-lingui-id: pmt7u4
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Workspaces"
|
||||
msgstr "مساحات العمل"
|
||||
|
||||
@@ -16286,10 +16455,10 @@ msgstr "سيتم تعطيل ميزات Enterprise لديك"
|
||||
msgid "Your enterprise features will remain active until {cancelAtDate}."
|
||||
msgstr "ستظل ميزات Enterprise لديك نشطة حتى {cancelAtDate}."
|
||||
|
||||
#. js-lingui-id: 69Siss
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
|
||||
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
|
||||
msgstr "تنسيق مفتاح Enterprise الخاص بك لم يعد مدعومًا. يُرجى تفعيل مفتاح جديد للإبقاء على ميزات Enterprise."
|
||||
#. js-lingui-id: 5TsUUL
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
|
||||
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: NTpA4U
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
|
||||
@@ -438,10 +438,10 @@ msgstr "{totalCost} crèdits"
|
||||
msgid "{totalCount} selected"
|
||||
msgstr "{totalCount} seleccionats"
|
||||
|
||||
#. js-lingui-id: WwbakM
|
||||
#. js-lingui-id: XdG+hI
|
||||
#: src/modules/side-panel/pages/page-layout/components/record-page/SidePanelRecordPageFieldsSettings.tsx
|
||||
msgid "{totalFieldsCount} fields"
|
||||
msgstr "{totalFieldsCount} camps"
|
||||
msgid "{totalFieldsCount} visible fields"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: ITVweg
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownDefaultView.tsx
|
||||
@@ -668,7 +668,7 @@ msgid "About my subscription"
|
||||
msgstr "Sobre la meva subscripció"
|
||||
|
||||
#. js-lingui-id: DhgC7B
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "About this user"
|
||||
msgstr "Sobre aquest usuari"
|
||||
|
||||
@@ -677,6 +677,11 @@ msgstr "Sobre aquest usuari"
|
||||
msgid "About this workspace"
|
||||
msgstr "Sobre aquest espai de treball"
|
||||
|
||||
#. js-lingui-id: LuXP9q
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
|
||||
msgid "Access"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: pNW+Rt
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
msgid "Access Key ID"
|
||||
@@ -756,6 +761,7 @@ msgid "Action on click"
|
||||
msgstr "Acció en fer clic"
|
||||
|
||||
#. js-lingui-id: 7L01XJ
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsToolSection.tsx
|
||||
@@ -784,7 +790,7 @@ msgstr "Accions que poden realitzar els usuaris en aquest objecte"
|
||||
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
|
||||
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
|
||||
msgid "Activate"
|
||||
msgstr "Activa"
|
||||
|
||||
@@ -1203,11 +1209,14 @@ msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: g1in8j
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminQueueDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
@@ -1215,6 +1224,11 @@ msgstr ""
|
||||
msgid "Admin Panel"
|
||||
msgstr "Panel d'Administració"
|
||||
|
||||
#. js-lingui-id: 6X68yA
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Admin Panel - General"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: sxkWRg
|
||||
#: src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx
|
||||
#: src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx
|
||||
@@ -1346,6 +1360,8 @@ msgstr ""
|
||||
#: src/pages/settings/ai/SettingsAIPrompts.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/utils/getActionHeaderTypeOrThrow.ts
|
||||
#: src/modules/side-panel/pages/workflow/action/components/SidePanelWorkflowSelectAction.tsx
|
||||
@@ -1361,6 +1377,11 @@ msgstr "IA"
|
||||
msgid "AI Chat"
|
||||
msgstr "Xat amb IA"
|
||||
|
||||
#. js-lingui-id: qiD/6r
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "AI chat threads for this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: E/lGXl
|
||||
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
|
||||
msgid "AI consumption across all workspaces."
|
||||
@@ -1574,6 +1595,11 @@ msgstr "Tots els objectes del sistema ja són a la barra lateral"
|
||||
msgid "All tasks addressed. Maintain the momentum."
|
||||
msgstr "Totes les tasques ateses. Mantén l'impuls."
|
||||
|
||||
#. js-lingui-id: 45Gm/K
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "All the applications currently installed on this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: XuuWVF
|
||||
#: src/modules/settings/roles/role-permissions/object-level-permissions/components/SettingsRolePermissionsObjectLevelObjectPicker.tsx
|
||||
msgid "All the standard objects"
|
||||
@@ -1585,7 +1611,7 @@ msgid "All workspace members already have this role"
|
||||
msgstr "Tots els membres d'espai de treball ja tenen aquest rol"
|
||||
|
||||
#. js-lingui-id: MLmnB2
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "All workspaces this user is a member of"
|
||||
msgstr "Tots els espais de treball del qual aquest usuari és membre"
|
||||
|
||||
@@ -1730,6 +1756,7 @@ msgstr "S'ha produït un error en carregar la imatge."
|
||||
#: src/modules/ui/feedback/snack-bar-manager/hooks/useSnackBar.ts
|
||||
#: src/modules/page-layout/hooks/useUpdatePageLayoutWithTabsAndWidgets.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutWidgetToDefault.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutToDefault.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutTabToDefault.ts
|
||||
#: src/modules/object-metadata/hooks/useUpdateOneObjectMetadataItem.ts
|
||||
#: src/modules/object-metadata/hooks/useUpdateOneFieldMetadataItem.ts
|
||||
@@ -1760,7 +1787,6 @@ msgstr "Ja existeix un objecte amb aquest nom"
|
||||
|
||||
#. js-lingui-id: lxentK
|
||||
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
|
||||
#: src/modules/ai/utils/extractErrorMessage.ts
|
||||
msgid "An unexpected error occurred"
|
||||
msgstr "S'ha produït un error inesperat"
|
||||
|
||||
@@ -1786,8 +1812,8 @@ msgid "Any {fieldLabel} field"
|
||||
msgstr "Qualsevol camp {fieldLabel}"
|
||||
|
||||
#. js-lingui-id: COyjuu
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Any device"
|
||||
msgstr ""
|
||||
|
||||
@@ -1928,6 +1954,11 @@ msgstr "App"
|
||||
msgid "App installed on this workspace"
|
||||
msgstr "Aplicació instal·lada en aquest espai de treball"
|
||||
|
||||
#. js-lingui-id: r5g1bX
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
msgid "App registrations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: aAIQg2
|
||||
#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx
|
||||
msgid "Appearance"
|
||||
@@ -2952,11 +2983,26 @@ msgstr "Gràfic"
|
||||
msgid "Chat"
|
||||
msgstr "Xat"
|
||||
|
||||
#. js-lingui-id: eKz2ln
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
msgid "Chat conversation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: jTS+KY
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Chat Sessions"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: UxeiNP
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
|
||||
msgid "Chat with AI agents and use AI features"
|
||||
msgstr "Xat amb agents d'IA i utilitzar funcions d'IA"
|
||||
|
||||
#. js-lingui-id: 8Q+lLG
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Chats"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: xK2nU3
|
||||
#: src/pages/settings/updates/SettingsUpdates.tsx
|
||||
msgid "Check out our latest releases"
|
||||
@@ -3153,7 +3199,6 @@ msgid "Close banner"
|
||||
msgstr "Tanca el bàner"
|
||||
|
||||
#. js-lingui-id: saip/v
|
||||
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "Close side panel"
|
||||
msgstr "Tanca el panell lateral"
|
||||
@@ -3533,9 +3578,7 @@ msgid "Content"
|
||||
msgstr "Contingut"
|
||||
|
||||
#. js-lingui-id: M73whl
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
|
||||
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
|
||||
#: src/modules/ai/components/RoutingDebugDisplay.tsx
|
||||
msgid "Context"
|
||||
msgstr "Context"
|
||||
@@ -3968,7 +4011,9 @@ msgid "Create, edit, and delete workspace views"
|
||||
msgstr "Crea, edita i elimina vistes d'espai de treball"
|
||||
|
||||
#. js-lingui-id: d+F6q9
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/components/SettingsDatabaseEventsForm.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/activities/calendar/components/CalendarEventDetails.tsx
|
||||
msgid "Created"
|
||||
msgstr "Creat"
|
||||
@@ -4615,7 +4660,8 @@ msgstr "elimina"
|
||||
#: src/modules/views/view-picker/components/ViewPickerOptionDropdown.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerEditButton.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerCreateButton.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
|
||||
#: src/modules/settings/logic-functions/components/tabs/SettingsLogicFunctionTabEnvironmentVariableTableRow.tsx
|
||||
#: src/modules/settings/emailing-domains/components/SettingsEmailingDomainRowDropdownMenu.tsx
|
||||
@@ -4868,8 +4914,8 @@ msgid "Description"
|
||||
msgstr "Descripció"
|
||||
|
||||
#. js-lingui-id: BBqGS9
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Desktop"
|
||||
msgstr ""
|
||||
|
||||
@@ -4910,6 +4956,11 @@ msgstr "Desenvolupador"
|
||||
msgid "Developers links"
|
||||
msgstr "Enllaços per a desenvolupadors"
|
||||
|
||||
#. js-lingui-id: E/QGRL
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Xm/s+u
|
||||
#: src/modules/settings/accounts/components/SettingsAccountsCalendarChannelsGeneral.tsx
|
||||
msgid "Display"
|
||||
@@ -4946,8 +4997,8 @@ msgid "Display text on multiple lines"
|
||||
msgstr "Mostra text en múltiples línies"
|
||||
|
||||
#. js-lingui-id: vU/Hht
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
msgid "Distribution"
|
||||
msgstr "Distribució"
|
||||
|
||||
@@ -5092,7 +5143,7 @@ msgid "Drop file here..."
|
||||
msgstr "Deixa el fitxer aquí..."
|
||||
|
||||
#. js-lingui-id: euc6Ns
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
@@ -5355,6 +5406,8 @@ msgstr "altrament, si"
|
||||
#: src/pages/settings/SettingsProfile.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx
|
||||
#: src/modules/settings/security/components/SettingsSecurityEditableProfileFields.tsx
|
||||
@@ -5550,6 +5603,11 @@ msgstr "Bústia buida"
|
||||
msgid "Empty Object"
|
||||
msgstr "Objecte Buit"
|
||||
|
||||
#. js-lingui-id: 7A0K1Y
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "Empty tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: q11Dk2
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
msgid "Enable bypass options"
|
||||
@@ -5801,11 +5859,6 @@ msgstr "Introdueix l'indicador del sistema que defineix el comportament i capaci
|
||||
msgid "Enter the workspace subdomain to transfer this app to. You will lose access to manage it."
|
||||
msgstr "Introdueix el subdomini de l'espai de treball al qual transferir aquesta aplicació. Perdràs l'accés per gestionar-la."
|
||||
|
||||
#. js-lingui-id: rYIISB
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Enter user ID or email address"
|
||||
msgstr "Introdueix ID d'usuari o adreça de correu electrònic"
|
||||
|
||||
#. js-lingui-id: pubQie
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/code-action/components/WorkflowEditActionCodeFields.tsx
|
||||
@@ -6441,11 +6494,6 @@ msgstr ""
|
||||
msgid "Failed to get response"
|
||||
msgstr "No s'ha pogut obtenir la resposta"
|
||||
|
||||
#. js-lingui-id: CUzkVp
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Failed to impersonate user. {errorMessage}"
|
||||
msgstr "No s'ha pogut suplantar l'usuari. {errorMessage}"
|
||||
|
||||
#. js-lingui-id: qZwtAi
|
||||
#: src/modules/marketplace/hooks/useInstallApp.ts
|
||||
msgid "Failed to install the application."
|
||||
@@ -6533,11 +6581,6 @@ msgstr "No s'ha pogut transferir la propietat. Comprova que el subdomini sigui c
|
||||
msgid "Failed to update default model"
|
||||
msgstr "No s'ha pogut actualitzar el model predeterminat"
|
||||
|
||||
#. js-lingui-id: P1NmNz
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Failed to update feature flag. {errorMessage}"
|
||||
msgstr "No s'ha pogut actualitzar el feature flag. {errorMessage}"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
|
||||
msgid "Failed to update model"
|
||||
@@ -6646,14 +6689,15 @@ msgid "Favorites"
|
||||
msgstr "Preferits"
|
||||
|
||||
#. js-lingui-id: YXjpZx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Feature Flag"
|
||||
msgstr "Funcionalitat de bandera"
|
||||
|
||||
#. js-lingui-id: kP/brT
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Feature Flags & Impersonation"
|
||||
msgstr "Funcionalitats i usurpació d'identitat"
|
||||
#. js-lingui-id: +ZqAYI
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Feature Flags"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: FkMol5
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
|
||||
@@ -7054,6 +7098,11 @@ msgstr "Components frontals"
|
||||
msgid "Full access"
|
||||
msgstr "Accés complet"
|
||||
|
||||
#. js-lingui-id: Ld0Tt4
|
||||
#: src/modules/side-panel/components/hooks/usePageLayoutHeaderInfo.ts
|
||||
msgid "Full tab widget"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YMZBxa
|
||||
#: src/pages/settings/security/event-logs/utils/getColumnsForEventLogTable.ts
|
||||
msgid "Function"
|
||||
@@ -7078,13 +7127,11 @@ msgstr "Gràfic de mesurador"
|
||||
#. js-lingui-id: Weq9zb
|
||||
#: src/pages/settings/SettingsWorkspace.tsx
|
||||
#: src/pages/settings/SettingsWorkspace.tsx
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroupsForDisplay.ts
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/keyboard-shortcut-menu/components/KeyboardShortcutMenuOpenContent.tsx
|
||||
msgid "General"
|
||||
msgstr "General"
|
||||
@@ -7135,11 +7182,6 @@ msgstr "Treu el màxim partit al teu espai de treball convidant al teu equip."
|
||||
msgid "Get your subscription"
|
||||
msgstr "Obteniu la vostra subscripció"
|
||||
|
||||
#. js-lingui-id: 2GT3Hf
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Global"
|
||||
msgstr "Global"
|
||||
|
||||
#. js-lingui-id: sr0UJD
|
||||
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
|
||||
msgid "Go Back"
|
||||
@@ -7515,8 +7557,8 @@ msgid "Icon and Name"
|
||||
msgstr "Icona i nom"
|
||||
|
||||
#. js-lingui-id: S0kLOH
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
@@ -7621,9 +7663,10 @@ msgid "imap.example.com"
|
||||
msgstr "imap.example.com"
|
||||
|
||||
#. js-lingui-id: tSVr6t
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
#: src/modules/settings/members/components/MemberInfosTab.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Impersonate"
|
||||
msgstr "Usurpa"
|
||||
|
||||
@@ -7633,7 +7676,7 @@ msgid "Impersonate workspace users"
|
||||
msgstr "Simular usuaris d'espais de treball"
|
||||
|
||||
#. js-lingui-id: yImXof
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Impersonation is disabled for this workspace"
|
||||
msgstr "La suplantació d'identitat està deshabilitada per a aquest espai de treball"
|
||||
|
||||
@@ -7736,6 +7779,7 @@ msgid "Indexes"
|
||||
msgstr "Índexs"
|
||||
|
||||
#. js-lingui-id: CE+M2e
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
|
||||
msgid "Info"
|
||||
msgstr "Informació"
|
||||
@@ -7830,10 +7874,10 @@ msgstr "Instal·lació"
|
||||
msgid "Installed"
|
||||
msgstr "Instal·lades"
|
||||
|
||||
#. js-lingui-id: N52taw
|
||||
#. js-lingui-id: OMxM9j
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "Installed applications"
|
||||
msgstr "Aplicacions instal·lades"
|
||||
msgid "Installed apps"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wJJ+Wy
|
||||
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
|
||||
@@ -8289,6 +8333,16 @@ msgstr "Última 1 hora"
|
||||
msgid "Last 1 Hour (oldest → newest)"
|
||||
msgstr "Darrera 1 Hora (més antic → més nou)"
|
||||
|
||||
#. js-lingui-id: YoKFgq
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Last 10 users created. Click to impersonate."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: sgqwjE
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Last 10 users created. Click to manage feature flags or impersonate."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: XUlP/Y
|
||||
#: src/modules/settings/admin-panel/health-status/constants/WorkerQueueMetricsSelectOptions.ts
|
||||
msgid "Last 12 hours"
|
||||
@@ -8580,11 +8634,6 @@ msgstr "ha enllaçat un correu amb"
|
||||
msgid "list"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 5Kn+XX
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "List installed applications. Use filter to search for a specific application"
|
||||
msgstr "Llista les aplicacions instal·lades. Utilitza el filtre per cercar una aplicació concreta"
|
||||
|
||||
#. js-lingui-id: Ap948/
|
||||
#: src/modules/settings/admin-panel/apps/components/SettingsAdminApps.tsx
|
||||
msgid "Listed"
|
||||
@@ -8769,16 +8818,6 @@ msgstr "Tancar sessió"
|
||||
msgid "Logs"
|
||||
msgstr "Registres"
|
||||
|
||||
#. js-lingui-id: PTozs8
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Look up users and manage their workspace feature flags or impersonate them."
|
||||
msgstr "Cerqueu usuaris i gestioneu les seves funcionalitats d'espai de treball o usurpeu-los."
|
||||
|
||||
#. js-lingui-id: GPSwzy
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Look up users to impersonate them."
|
||||
msgstr "Cerqueu usuaris per usurpar-los."
|
||||
|
||||
#. js-lingui-id: tL2lBI
|
||||
#: src/modules/workflow/workflow-diagram/utils/generateNodesAndEdgesForIteratorNode.ts
|
||||
msgid "loop"
|
||||
@@ -8806,6 +8845,7 @@ msgstr ""
|
||||
|
||||
#. js-lingui-id: wckWOP
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Manage"
|
||||
msgstr ""
|
||||
|
||||
@@ -8832,6 +8872,11 @@ msgstr "Gestiona la informació de facturació"
|
||||
msgid "Manage favorite"
|
||||
msgstr "Gestiona preferides"
|
||||
|
||||
#. js-lingui-id: Dt05oz
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Manage feature flags for this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: T6YjCk
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
msgid "Manage Members"
|
||||
@@ -8996,6 +9041,8 @@ msgstr ""
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMember.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
@@ -9054,6 +9101,7 @@ msgstr "La sincronització de missatges no està disponible perquè el servei es
|
||||
|
||||
#. js-lingui-id: t7TeQU
|
||||
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Messages"
|
||||
msgstr "Missatges"
|
||||
|
||||
@@ -9130,8 +9178,8 @@ msgid "Mission accomplished!"
|
||||
msgstr "Missió acomplerta!"
|
||||
|
||||
#. js-lingui-id: dMsM20
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Mobile"
|
||||
msgstr ""
|
||||
|
||||
@@ -9231,7 +9279,6 @@ msgstr ""
|
||||
#. js-lingui-id: 2FYpfJ
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "More"
|
||||
msgstr "Més"
|
||||
|
||||
@@ -9280,14 +9327,16 @@ msgid "Move Down"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: iSLA/r
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx
|
||||
#: src/modules/object-record/record-group/hooks/useRecordGroupActions.ts
|
||||
msgid "Move left"
|
||||
msgstr "Moure a l'esquerra"
|
||||
|
||||
#. js-lingui-id: Ubl2by
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx
|
||||
#: src/modules/object-record/record-group/hooks/useRecordGroupActions.ts
|
||||
msgid "Move right"
|
||||
@@ -9366,6 +9415,8 @@ msgstr "mySkill"
|
||||
#: src/pages/settings/ai/constants/SettingsAiAgentTableMetadata.ts
|
||||
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
|
||||
#: src/pages/settings/ai/components/SettingsToolParameterTable.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/onboarding/CreateProfile.tsx
|
||||
#: src/modules/settings/workspace/components/NameField.tsx
|
||||
@@ -9612,6 +9663,20 @@ msgstr "Nova configuració SSO"
|
||||
msgid "New SSO provider"
|
||||
msgstr "Nou proveïdor SSO"
|
||||
|
||||
#. js-lingui-id: 3YvS+c
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "New tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Db+TX4
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
msgid "New Tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wl18ST
|
||||
#: src/modules/activities/tasks/components/TaskGroups.tsx
|
||||
msgid "New task"
|
||||
@@ -9766,6 +9831,11 @@ msgstr "Sense prefix de trucada"
|
||||
msgid "No chat"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: NjIy4U
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "No chat threads found."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wgUPZ1
|
||||
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
|
||||
msgid "No comment"
|
||||
@@ -9997,6 +10067,11 @@ msgstr "Cap membre concorda amb la teva cerca"
|
||||
msgid "No messages found for this turn"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: IohPnt
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminChatThreadMessageList.tsx
|
||||
msgid "No messages found."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 0NudpV
|
||||
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminWorkerMetricsGraph.tsx
|
||||
msgid "No metrics data available"
|
||||
@@ -10048,6 +10123,11 @@ msgstr "Sense paràmetres"
|
||||
msgid "No payment method found. Please update your billing details."
|
||||
msgstr "No s'ha trobat cap mètode de pagament. Si us plau actualitzi les seves dades de facturació."
|
||||
|
||||
#. js-lingui-id: orE/ux
|
||||
#: src/pages/settings/applications/SettingsApplicationDetails.tsx
|
||||
msgid "No permission defined for this application"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Od1X93
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx
|
||||
msgid "No permissions configured for this application."
|
||||
@@ -10160,6 +10240,11 @@ msgstr "No hi ha dades d'ús"
|
||||
msgid "No usage data yet"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: EsP4NW
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "No users found matching your search criteria."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wJwIUq
|
||||
#: src/modules/object-record/record-field/ui/form-types/components/FormSelectFieldInput.tsx
|
||||
msgid "No value"
|
||||
@@ -10196,6 +10281,11 @@ msgstr "Encara no hi ha versions de workflows"
|
||||
msgid "No workspace selected"
|
||||
msgstr "No s'ha seleccionat cap espai de treball"
|
||||
|
||||
#. js-lingui-id: TiRphK
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "No workspaces found matching your search criteria."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Ah7JCB
|
||||
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
|
||||
msgid "Node"
|
||||
@@ -10281,6 +10371,11 @@ msgstr "Nota"
|
||||
msgid "Notes"
|
||||
msgstr "Notes"
|
||||
|
||||
#. js-lingui-id: DYCPYF
|
||||
#: src/modules/page-layout/widgets/components/StandaloneWidgetPlaceholder.tsx
|
||||
msgid "Nothing to see"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YwzE9K
|
||||
#: src/utils/date-utils.ts
|
||||
#: src/utils/date-utils.ts
|
||||
@@ -10346,7 +10441,7 @@ msgid "Numbered list"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: b/j06W
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAIMCP.tsx
|
||||
msgid "OAuth"
|
||||
msgstr "OAuth"
|
||||
@@ -10626,7 +10721,6 @@ msgid "Open Outlook"
|
||||
msgstr "Obrir en Outlook"
|
||||
|
||||
#. js-lingui-id: bY2Xkv
|
||||
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "Open side panel"
|
||||
msgstr "Obre el panell lateral"
|
||||
@@ -10712,12 +10806,15 @@ msgstr "Organitza"
|
||||
#. js-lingui-id: /IX/7x
|
||||
#: src/pages/settings/updates/SettingsUpdates.tsx
|
||||
#: src/pages/settings/security/SettingsSecurity.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
|
||||
#: src/modules/navigation/components/NavigationDrawerOtherSection.tsx
|
||||
#: src/modules/command-menu-item/edit/components/SidePanelCommandMenuItemEditPage.tsx
|
||||
@@ -11068,6 +11165,11 @@ msgstr "Fotografia"
|
||||
msgid "Pie Chart"
|
||||
msgstr "Gràfic circular"
|
||||
|
||||
#. js-lingui-id: 3pU8e+
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Pin tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 2FIjLb
|
||||
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
|
||||
msgid "Pink"
|
||||
@@ -11087,6 +11189,7 @@ msgstr "Marcador de posició"
|
||||
|
||||
#. js-lingui-id: MFTZK8
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsPlacementSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Placement"
|
||||
msgstr ""
|
||||
|
||||
@@ -11138,11 +11241,6 @@ msgstr "Torna a connectar la teva bústia {mailboxHandle} per actualitzar els te
|
||||
msgid "Please refresh the page."
|
||||
msgstr "Si us plau, actualitza la pàgina."
|
||||
|
||||
#. js-lingui-id: X5x85V
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Please search for a user first"
|
||||
msgstr "Si us plau, cerca un usuari primer"
|
||||
|
||||
#. js-lingui-id: wCgL30
|
||||
#: src/pages/settings/data-model/new-field/SettingsObjectNewFieldConfigure.tsx
|
||||
msgid "Please select at least one destination object for this relation."
|
||||
@@ -11551,6 +11649,11 @@ msgstr "Rep un correu que conté l'enllaç per actualitzar la contrasenya"
|
||||
msgid "Recent Events (oldest → newest)"
|
||||
msgstr "Esdeveniments recents (més antic → més nou)"
|
||||
|
||||
#. js-lingui-id: EoiSFI
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Recent Users"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: yPrbsy
|
||||
#: src/modules/activities/emails/components/EmailComposerFields.tsx
|
||||
msgid "Recipients"
|
||||
@@ -11621,11 +11724,6 @@ msgstr "Etiqueta de registre"
|
||||
msgid "Record Page"
|
||||
msgstr "Pàgina de registre"
|
||||
|
||||
#. js-lingui-id: dSCufP
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Record Selection"
|
||||
msgstr "Selecció d'enregistrament"
|
||||
|
||||
#. js-lingui-id: NxW0+c
|
||||
#: src/modules/side-panel/pages/page-layout/utils/getPageLayoutPageTitle.ts
|
||||
msgid "Record Table Settings"
|
||||
@@ -11948,7 +12046,10 @@ msgstr "Reenviar correu electrònic"
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/modules/views/components/ViewBarDetails.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Restableix"
|
||||
|
||||
@@ -11958,21 +12059,25 @@ msgstr "Restableix"
|
||||
msgid "Reset 2FA"
|
||||
msgstr "Reinicia 2FA"
|
||||
|
||||
#. js-lingui-id: kw0Yv1
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "Reset all overrides on this layout to return it to the app default"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YdI8A2
|
||||
#: src/modules/command-menu-item/edit/components/CommandMenuItemOptionsDropdown.tsx
|
||||
msgid "Reset label to default"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 1IWc1n
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
|
||||
msgid "Reset to"
|
||||
msgstr "Reinicia a"
|
||||
|
||||
#. js-lingui-id: L+rMC9
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/fields/forms/address/components/SettingsDataModelFieldAddressForm.tsx
|
||||
#: src/modules/command-menu-item/edit/components/SidePanelCommandMenuItemEditPage.tsx
|
||||
msgid "Reset to default"
|
||||
@@ -12238,6 +12343,11 @@ msgstr "Executant {formattedName}"
|
||||
msgid "Running function"
|
||||
msgstr "Funció en execució"
|
||||
|
||||
#. js-lingui-id: SoR81K
|
||||
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
|
||||
msgid "Running workflows on all records is not yet supported. Please select records manually."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: LTC198
|
||||
#: src/modules/ai/components/CodeExecutionDisplay.tsx
|
||||
msgid "Running..."
|
||||
@@ -12316,17 +12426,11 @@ msgstr "SDK"
|
||||
#: src/modules/side-panel/hooks/useOpenRecordsSearchPageInSidePanel.ts
|
||||
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentWorkspaceMemberPickerDropdown.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/command-menu-item/engine-command/constants/EngineComponentKeyHeadlessComponentMap.tsx
|
||||
#: src/modules/command-menu-item/engine-command/constants/EngineComponentKeyHeadlessComponentMap.tsx
|
||||
msgid "Search"
|
||||
msgstr "Cerca"
|
||||
|
||||
#. js-lingui-id: aOQ/Fi
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Search ''{sidePanelSearch}'' with..."
|
||||
msgstr "Cerca ''{sidePanelSearch}'' amb..."
|
||||
|
||||
#. js-lingui-id: g2dQp/
|
||||
#: src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionMeValueSelect.tsx
|
||||
msgid "Search 1 {fieldTypeLabelLowercase} field"
|
||||
@@ -12449,6 +12553,16 @@ msgstr "Cerca qualsevol camp"
|
||||
msgid "Search API keys"
|
||||
msgstr "Cerca claus d'API"
|
||||
|
||||
#. js-lingui-id: iRegw9
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Search by name, email, or user ID..."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: KI1xjO
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Search by workspace name, subdomain, or ID..."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: yI4D/V
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/ChartColorSelectionDropdownContent.tsx
|
||||
msgid "Search colors"
|
||||
@@ -12937,7 +13051,7 @@ msgid "Set as default"
|
||||
msgstr "Estableix com a predeterminat"
|
||||
|
||||
#. js-lingui-id: 7f09hf
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
msgid "Set as pinned tab"
|
||||
msgstr "Defineix com a pestanya fixada"
|
||||
|
||||
@@ -13010,7 +13124,7 @@ msgstr "Configurant la teva base de dades..."
|
||||
#: src/pages/settings/ai/SettingsAgentForm.tsx
|
||||
#: src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownDefaultComponents.tsx
|
||||
#: src/modules/sign-in-background-mock/components/SignInAppNavigationDrawerMock.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dashboard/SidePanelDashboardRecordTableSettings.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsSection.tsx
|
||||
#: src/modules/settings/roles/role/components/SettingsRole.tsx
|
||||
@@ -13499,6 +13613,7 @@ msgstr "Estat"
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
@@ -14114,6 +14229,11 @@ msgstr "No hi ha cap activitat associada amb aquest registre."
|
||||
msgid "There was an error while updating password."
|
||||
msgstr "S'ha produït un error en actualitzar la contrasenya."
|
||||
|
||||
#. js-lingui-id: vg1S0X
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
|
||||
msgid "These apps are not vetted. Use at your own risk."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: AUV+TY
|
||||
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
|
||||
msgid "Thinking"
|
||||
@@ -14144,6 +14264,11 @@ msgstr "Aquest compte està connectat, però encara no tenim permís per redacta
|
||||
msgid "This action can return up to {maxRecordsFormatted} records."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 2xOCJW
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "This action cannot be undone."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Ox1hE7
|
||||
#: src/modules/settings/profile/components/DeleteAccount.tsx
|
||||
msgid ""
|
||||
@@ -14202,6 +14327,11 @@ msgstr "Aquesta aplicació figura al marketplace perquè està publicada a npm."
|
||||
msgid "This application is not listed on the marketplace. It was shared via a direct link."
|
||||
msgstr "Aquesta aplicació no està publicada al Marketplace. S'ha compartit mitjançant un enllaç directe."
|
||||
|
||||
#. js-lingui-id: D8qhoN
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
|
||||
msgid "This application is required for your workspace to function properly and cannot be uninstalled."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: SLIRqz
|
||||
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableHelpText.tsx
|
||||
msgid "This database value overrides environment settings. "
|
||||
@@ -14247,6 +14377,11 @@ msgstr "Aquesta clau s'hauria d'establir al cos de la sol·licitud"
|
||||
msgid "This model will be removed from the provider. You can re-add it later."
|
||||
msgstr "Aquest model s'eliminarà del proveïdor. El podreu tornar a afegir més endavant."
|
||||
|
||||
#. js-lingui-id: NCA55L
|
||||
#: src/modules/page-layout/widgets/components/StandaloneWidgetPlaceholder.tsx
|
||||
msgid "This page has no content"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: R/PuIn
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
msgid "This provider doesn't have a native SDK yet — it will use OpenAI-compatible mode. Need native support? Reach out to us."
|
||||
@@ -14316,7 +14451,8 @@ msgid "This week"
|
||||
msgstr "Aquesta setmana"
|
||||
|
||||
#. js-lingui-id: DF2voz
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "This will cancel all modifications done on the tab and its widgets. Edit mode will be canceled and the page will refresh. This action cannot be undone."
|
||||
msgstr ""
|
||||
|
||||
@@ -14439,6 +14575,11 @@ msgstr "Temps"
|
||||
msgid "title"
|
||||
msgstr "títol"
|
||||
|
||||
#. js-lingui-id: MHrjPM
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: /jQctM
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx
|
||||
#: src/modules/activities/emails/components/EmailComposerFields.tsx
|
||||
@@ -14502,6 +14643,12 @@ msgstr ""
|
||||
msgid "Too many records. Up to {maxRecordsString} allowed"
|
||||
msgstr "Massa registres. Se'n permeten fins a {maxRecordsString}"
|
||||
|
||||
#. js-lingui-id: tfaidv
|
||||
#. placeholder {0}: part.toolName
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminChatThreadMessageList.tsx
|
||||
msgid "Tool call: {0}"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: GnoLfm
|
||||
#: src/modules/ai/components/RoutingDebugDisplay.tsx
|
||||
msgid "Tool calls made"
|
||||
@@ -14533,6 +14680,16 @@ msgstr "Generació d'eines"
|
||||
msgid "Tools"
|
||||
msgstr "Eines"
|
||||
|
||||
#. js-lingui-id: nCq25C
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Top 10 workspaces by number of users"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: A4dnvW
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Top Workspaces"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 72c5Qo
|
||||
#: src/modules/page-layout/widgets/graph/graph-widget-pie-chart/hooks/usePieChartCenterMetricData.ts
|
||||
msgid "Total"
|
||||
@@ -14962,12 +15119,14 @@ msgid "Unordered list with bullets"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wja8aL
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/modules/ui/field/display/components/GlobalFilePreviewModal.tsx
|
||||
#: src/modules/ui/field/display/components/ArrayDisplay.tsx
|
||||
#: src/modules/ui/field/display/components/ActorDisplay.tsx
|
||||
#: src/modules/side-panel/components/SidePanelContextChip.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabsRenderer.tsx
|
||||
#: src/modules/page-layout/hooks/usePageLayoutAddTabStrategy.ts
|
||||
#: src/modules/object-record/record-title-cell/components/RecordTitleFullNameFieldDisplay.tsx
|
||||
#: src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx
|
||||
#: src/modules/object-record/components/RecordChip.tsx
|
||||
@@ -15062,6 +15221,7 @@ msgid "updated"
|
||||
msgstr "actualitzat"
|
||||
|
||||
#. js-lingui-id: +b7T3G
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/settings/components/SettingsDatabaseEventsForm.tsx
|
||||
msgid "Updated"
|
||||
msgstr "Actualitzat"
|
||||
@@ -15296,13 +15456,8 @@ msgstr "Usuari"
|
||||
msgid "User Context"
|
||||
msgstr "Context de l'usuari"
|
||||
|
||||
#. js-lingui-id: RNv3YS
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "User Impersonation"
|
||||
msgstr "Usurpació d'identitat d'usuari"
|
||||
|
||||
#. js-lingui-id: tNT8wT
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "User Info"
|
||||
msgstr "Informació de l'usuari"
|
||||
|
||||
@@ -15327,6 +15482,7 @@ msgstr "Ús de l'usuari"
|
||||
|
||||
#. js-lingui-id: Sxm8rQ
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Users"
|
||||
msgstr "Usuaris"
|
||||
|
||||
@@ -15628,6 +15784,11 @@ msgstr "Violeta"
|
||||
msgid "Visibility"
|
||||
msgstr "Visibilitat"
|
||||
|
||||
#. js-lingui-id: XQC+sL
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Visibility restriction"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: gkAApJ
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
msgid "Visibility Restriction"
|
||||
@@ -15980,6 +16141,7 @@ msgstr "Fluxos de treball"
|
||||
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
|
||||
#: src/pages/settings/ai/SettingsAIPrompts.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
|
||||
#: src/modules/sign-in-background-mock/components/SignInAppNavigationDrawerMock.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
@@ -15992,6 +16154,8 @@ msgstr "Fluxos de treball"
|
||||
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
|
||||
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
|
||||
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
|
||||
@@ -16041,6 +16205,11 @@ msgstr "Logotip de l'espai de treball"
|
||||
msgid "Workspace Member"
|
||||
msgstr "Membre de l'Espai de Treball"
|
||||
|
||||
#. js-lingui-id: wtxjAY
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Workspace members"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: CozWO1
|
||||
#: src/pages/onboarding/CreateWorkspace.tsx
|
||||
msgid "Workspace name"
|
||||
@@ -16052,7 +16221,7 @@ msgid "Workspace views require manage views permission"
|
||||
msgstr "Les vistes d'espai de treball requereixen permís per gestionar vistes"
|
||||
|
||||
#. js-lingui-id: pmt7u4
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Workspaces"
|
||||
msgstr "Espais de treball"
|
||||
|
||||
@@ -16288,10 +16457,10 @@ msgstr "Les vostres funcionalitats Enterprise es desactivaran"
|
||||
msgid "Your enterprise features will remain active until {cancelAtDate}."
|
||||
msgstr "Les vostres funcionalitats Enterprise romandran actives fins al {cancelAtDate}."
|
||||
|
||||
#. js-lingui-id: 69Siss
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
|
||||
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
|
||||
msgstr "El format de la vostra clau Enterprise és obsolet. Activeu una clau nova per mantenir les funcionalitats Enterprise."
|
||||
#. js-lingui-id: 5TsUUL
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
|
||||
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: NTpA4U
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
|
||||
@@ -438,10 +438,10 @@ msgstr "{totalCost} kreditů"
|
||||
msgid "{totalCount} selected"
|
||||
msgstr "{totalCount} vybráno"
|
||||
|
||||
#. js-lingui-id: WwbakM
|
||||
#. js-lingui-id: XdG+hI
|
||||
#: src/modules/side-panel/pages/page-layout/components/record-page/SidePanelRecordPageFieldsSettings.tsx
|
||||
msgid "{totalFieldsCount} fields"
|
||||
msgstr "{totalFieldsCount, plural, one {# pole} few {# pole} many {# polí} other {# polí}}"
|
||||
msgid "{totalFieldsCount} visible fields"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: ITVweg
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownDefaultView.tsx
|
||||
@@ -668,7 +668,7 @@ msgid "About my subscription"
|
||||
msgstr "O mém předplatném"
|
||||
|
||||
#. js-lingui-id: DhgC7B
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "About this user"
|
||||
msgstr "O tomto uživateli"
|
||||
|
||||
@@ -677,6 +677,11 @@ msgstr "O tomto uživateli"
|
||||
msgid "About this workspace"
|
||||
msgstr "O tomto pracovním prostoru"
|
||||
|
||||
#. js-lingui-id: LuXP9q
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
|
||||
msgid "Access"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: pNW+Rt
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
msgid "Access Key ID"
|
||||
@@ -756,6 +761,7 @@ msgid "Action on click"
|
||||
msgstr "Akce při kliknutí"
|
||||
|
||||
#. js-lingui-id: 7L01XJ
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPermissionsTab.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsToolSection.tsx
|
||||
@@ -784,7 +790,7 @@ msgstr "Akce, které uživatelé mohou provádět na tomto objektu"
|
||||
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
|
||||
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
|
||||
msgid "Activate"
|
||||
msgstr "Aktivovat"
|
||||
|
||||
@@ -1203,11 +1209,14 @@ msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: g1in8j
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminQueueDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
@@ -1215,6 +1224,11 @@ msgstr ""
|
||||
msgid "Admin Panel"
|
||||
msgstr "Administrační panel"
|
||||
|
||||
#. js-lingui-id: 6X68yA
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Admin Panel - General"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: sxkWRg
|
||||
#: src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx
|
||||
#: src/modules/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm.tsx
|
||||
@@ -1346,6 +1360,8 @@ msgstr ""
|
||||
#: src/pages/settings/ai/SettingsAIPrompts.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/utils/getActionHeaderTypeOrThrow.ts
|
||||
#: src/modules/side-panel/pages/workflow/action/components/SidePanelWorkflowSelectAction.tsx
|
||||
@@ -1361,6 +1377,11 @@ msgstr "AI"
|
||||
msgid "AI Chat"
|
||||
msgstr "AI chat"
|
||||
|
||||
#. js-lingui-id: qiD/6r
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "AI chat threads for this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: E/lGXl
|
||||
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
|
||||
msgid "AI consumption across all workspaces."
|
||||
@@ -1574,6 +1595,11 @@ msgstr "Všechny systémové objekty už jsou v postranním panelu"
|
||||
msgid "All tasks addressed. Maintain the momentum."
|
||||
msgstr "Všechny úkoly vyřízeny. Udržujte tempo."
|
||||
|
||||
#. js-lingui-id: 45Gm/K
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "All the applications currently installed on this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: XuuWVF
|
||||
#: src/modules/settings/roles/role-permissions/object-level-permissions/components/SettingsRolePermissionsObjectLevelObjectPicker.tsx
|
||||
msgid "All the standard objects"
|
||||
@@ -1585,7 +1611,7 @@ msgid "All workspace members already have this role"
|
||||
msgstr "Všichni členové pracovní skupiny již tuto roli mají"
|
||||
|
||||
#. js-lingui-id: MLmnB2
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "All workspaces this user is a member of"
|
||||
msgstr "Všechny pracovní prostory, kterých je tento uživatel členem"
|
||||
|
||||
@@ -1730,6 +1756,7 @@ msgstr "Při nahrávání obrázku došlo k chybě."
|
||||
#: src/modules/ui/feedback/snack-bar-manager/hooks/useSnackBar.ts
|
||||
#: src/modules/page-layout/hooks/useUpdatePageLayoutWithTabsAndWidgets.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutWidgetToDefault.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutToDefault.ts
|
||||
#: src/modules/page-layout/hooks/useResetPageLayoutTabToDefault.ts
|
||||
#: src/modules/object-metadata/hooks/useUpdateOneObjectMetadataItem.ts
|
||||
#: src/modules/object-metadata/hooks/useUpdateOneFieldMetadataItem.ts
|
||||
@@ -1760,7 +1787,6 @@ msgstr "Objekt s tímto názvem již existuje"
|
||||
|
||||
#. js-lingui-id: lxentK
|
||||
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
|
||||
#: src/modules/ai/utils/extractErrorMessage.ts
|
||||
msgid "An unexpected error occurred"
|
||||
msgstr "Došlo k neočekávané chybě"
|
||||
|
||||
@@ -1786,8 +1812,8 @@ msgid "Any {fieldLabel} field"
|
||||
msgstr "Libovolné pole {fieldLabel}"
|
||||
|
||||
#. js-lingui-id: COyjuu
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Any device"
|
||||
msgstr ""
|
||||
|
||||
@@ -1928,6 +1954,11 @@ msgstr "Aplikace"
|
||||
msgid "App installed on this workspace"
|
||||
msgstr "Aplikace nainstalovaná v tomto pracovním prostoru"
|
||||
|
||||
#. js-lingui-id: r5g1bX
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
msgid "App registrations"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: aAIQg2
|
||||
#: src/pages/settings/profile/appearance/components/SettingsExperience.tsx
|
||||
msgid "Appearance"
|
||||
@@ -2952,11 +2983,26 @@ msgstr "Graf"
|
||||
msgid "Chat"
|
||||
msgstr "Chat"
|
||||
|
||||
#. js-lingui-id: eKz2ln
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
msgid "Chat conversation"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: jTS+KY
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Chat Sessions"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: UxeiNP
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
|
||||
msgid "Chat with AI agents and use AI features"
|
||||
msgstr "Povídejte si s AI agenty a používejte AI funkce"
|
||||
|
||||
#. js-lingui-id: 8Q+lLG
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Chats"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: xK2nU3
|
||||
#: src/pages/settings/updates/SettingsUpdates.tsx
|
||||
msgid "Check out our latest releases"
|
||||
@@ -3153,7 +3199,6 @@ msgid "Close banner"
|
||||
msgstr "Zavřít banner"
|
||||
|
||||
#. js-lingui-id: saip/v
|
||||
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "Close side panel"
|
||||
msgstr "Zavřít postranní panel"
|
||||
@@ -3533,9 +3578,7 @@ msgid "Content"
|
||||
msgstr "Obsah"
|
||||
|
||||
#. js-lingui-id: M73whl
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
|
||||
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
|
||||
#: src/modules/ai/components/RoutingDebugDisplay.tsx
|
||||
msgid "Context"
|
||||
msgstr "Kontext"
|
||||
@@ -3968,7 +4011,9 @@ msgid "Create, edit, and delete workspace views"
|
||||
msgstr "Vytvářet, upravovat a mazat zobrazení pracoviště"
|
||||
|
||||
#. js-lingui-id: d+F6q9
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/components/SettingsDatabaseEventsForm.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/activities/calendar/components/CalendarEventDetails.tsx
|
||||
msgid "Created"
|
||||
msgstr "Vytvořeno"
|
||||
@@ -4615,7 +4660,8 @@ msgstr "smazat"
|
||||
#: src/modules/views/view-picker/components/ViewPickerOptionDropdown.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerEditButton.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerCreateButton.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
|
||||
#: src/modules/settings/logic-functions/components/tabs/SettingsLogicFunctionTabEnvironmentVariableTableRow.tsx
|
||||
#: src/modules/settings/emailing-domains/components/SettingsEmailingDomainRowDropdownMenu.tsx
|
||||
@@ -4868,8 +4914,8 @@ msgid "Description"
|
||||
msgstr "Popis"
|
||||
|
||||
#. js-lingui-id: BBqGS9
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Desktop"
|
||||
msgstr ""
|
||||
|
||||
@@ -4910,6 +4956,11 @@ msgstr "Vývojář"
|
||||
msgid "Developers links"
|
||||
msgstr "Odkazy pro vývojáře"
|
||||
|
||||
#. js-lingui-id: E/QGRL
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Xm/s+u
|
||||
#: src/modules/settings/accounts/components/SettingsAccountsCalendarChannelsGeneral.tsx
|
||||
msgid "Display"
|
||||
@@ -4946,8 +4997,8 @@ msgid "Display text on multiple lines"
|
||||
msgstr "Zobrazit text na více řádcích"
|
||||
|
||||
#. js-lingui-id: vU/Hht
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
msgid "Distribution"
|
||||
msgstr "Distribuce"
|
||||
|
||||
@@ -5092,7 +5143,7 @@ msgid "Drop file here..."
|
||||
msgstr "Přetáhněte soubor sem..."
|
||||
|
||||
#. js-lingui-id: euc6Ns
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
@@ -5355,6 +5406,8 @@ msgstr "jinak pokud"
|
||||
#: src/pages/settings/SettingsProfile.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx
|
||||
#: src/modules/settings/security/components/SettingsSecurityEditableProfileFields.tsx
|
||||
@@ -5550,6 +5603,11 @@ msgstr "Prázdná schránka"
|
||||
msgid "Empty Object"
|
||||
msgstr "Prázdný objekt"
|
||||
|
||||
#. js-lingui-id: 7A0K1Y
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "Empty tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: q11Dk2
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
msgid "Enable bypass options"
|
||||
@@ -5801,11 +5859,6 @@ msgstr "Zadejte systémovou výzvu, která definuje chování a schopnosti tohot
|
||||
msgid "Enter the workspace subdomain to transfer this app to. You will lose access to manage it."
|
||||
msgstr "Zadejte subdoménu pracovního prostoru, do kterého chcete tuto aplikaci převést. Ztratíte přístup k její správě."
|
||||
|
||||
#. js-lingui-id: rYIISB
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Enter user ID or email address"
|
||||
msgstr "Zadejte ID uživatele nebo e-mailovou adresu"
|
||||
|
||||
#. js-lingui-id: pubQie
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/code-action/components/WorkflowEditActionCodeFields.tsx
|
||||
@@ -6441,11 +6494,6 @@ msgstr ""
|
||||
msgid "Failed to get response"
|
||||
msgstr "Nepodařilo se získat odpověď"
|
||||
|
||||
#. js-lingui-id: CUzkVp
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Failed to impersonate user. {errorMessage}"
|
||||
msgstr "Nepodařilo se vydávat za uživatele. {errorMessage}"
|
||||
|
||||
#. js-lingui-id: qZwtAi
|
||||
#: src/modules/marketplace/hooks/useInstallApp.ts
|
||||
msgid "Failed to install the application."
|
||||
@@ -6533,11 +6581,6 @@ msgstr "Převod vlastnictví se nezdařil. Zkontrolujte, že je subdoména sprá
|
||||
msgid "Failed to update default model"
|
||||
msgstr "Nepodařilo se aktualizovat výchozí model"
|
||||
|
||||
#. js-lingui-id: P1NmNz
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Failed to update feature flag. {errorMessage}"
|
||||
msgstr "Nepodařilo se aktualizovat příznak funkce. {errorMessage}"
|
||||
|
||||
#. js-lingui-id: 1R13Ov
|
||||
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
|
||||
msgid "Failed to update model"
|
||||
@@ -6646,14 +6689,15 @@ msgid "Favorites"
|
||||
msgstr "Oblíbené"
|
||||
|
||||
#. js-lingui-id: YXjpZx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Feature Flag"
|
||||
msgstr "Příznak funkce"
|
||||
|
||||
#. js-lingui-id: kP/brT
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Feature Flags & Impersonation"
|
||||
msgstr "Příznaky funkcí a Impersonace"
|
||||
#. js-lingui-id: +ZqAYI
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Feature Flags"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: FkMol5
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
|
||||
@@ -7054,6 +7098,11 @@ msgstr "Frontendové komponenty"
|
||||
msgid "Full access"
|
||||
msgstr "Plný přístup"
|
||||
|
||||
#. js-lingui-id: Ld0Tt4
|
||||
#: src/modules/side-panel/components/hooks/usePageLayoutHeaderInfo.ts
|
||||
msgid "Full tab widget"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YMZBxa
|
||||
#: src/pages/settings/security/event-logs/utils/getColumnsForEventLogTable.ts
|
||||
msgid "Function"
|
||||
@@ -7078,13 +7127,11 @@ msgstr "Ukazatelový graf"
|
||||
#. js-lingui-id: Weq9zb
|
||||
#: src/pages/settings/SettingsWorkspace.tsx
|
||||
#: src/pages/settings/SettingsWorkspace.tsx
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroupsForDisplay.ts
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/keyboard-shortcut-menu/components/KeyboardShortcutMenuOpenContent.tsx
|
||||
msgid "General"
|
||||
msgstr "Obecné"
|
||||
@@ -7135,11 +7182,6 @@ msgstr "Získejte maximum ze svého pracovního prostoru tím, že pozvete svůj
|
||||
msgid "Get your subscription"
|
||||
msgstr "Získejte své předplatné"
|
||||
|
||||
#. js-lingui-id: 2GT3Hf
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Global"
|
||||
msgstr "Globální"
|
||||
|
||||
#. js-lingui-id: sr0UJD
|
||||
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
|
||||
msgid "Go Back"
|
||||
@@ -7515,8 +7557,8 @@ msgid "Icon and Name"
|
||||
msgstr "Ikona a název"
|
||||
|
||||
#. js-lingui-id: S0kLOH
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
@@ -7621,9 +7663,10 @@ msgid "imap.example.com"
|
||||
msgstr "imap.example.com"
|
||||
|
||||
#. js-lingui-id: tSVr6t
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
#: src/modules/settings/members/components/MemberInfosTab.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Impersonate"
|
||||
msgstr "Impersonovat"
|
||||
|
||||
@@ -7633,7 +7676,7 @@ msgid "Impersonate workspace users"
|
||||
msgstr "Napodobit uživatele pracovního prostoru"
|
||||
|
||||
#. js-lingui-id: yImXof
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Impersonation is disabled for this workspace"
|
||||
msgstr "Zastupování je pro tento pracovní prostor zakázáno"
|
||||
|
||||
@@ -7736,6 +7779,7 @@ msgid "Indexes"
|
||||
msgstr "Indexy"
|
||||
|
||||
#. js-lingui-id: CE+M2e
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
|
||||
msgid "Info"
|
||||
msgstr "Informace"
|
||||
@@ -7830,10 +7874,10 @@ msgstr "Instalace"
|
||||
msgid "Installed"
|
||||
msgstr "Nainstalováno"
|
||||
|
||||
#. js-lingui-id: N52taw
|
||||
#. js-lingui-id: OMxM9j
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "Installed applications"
|
||||
msgstr "Nainstalované aplikace"
|
||||
msgid "Installed apps"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wJJ+Wy
|
||||
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
|
||||
@@ -8289,6 +8333,16 @@ msgstr "Poslední 1 hodina"
|
||||
msgid "Last 1 Hour (oldest → newest)"
|
||||
msgstr "Poslední 1 hodina (od nejstarších → k nejnovějším)"
|
||||
|
||||
#. js-lingui-id: YoKFgq
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Last 10 users created. Click to impersonate."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: sgqwjE
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Last 10 users created. Click to manage feature flags or impersonate."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: XUlP/Y
|
||||
#: src/modules/settings/admin-panel/health-status/constants/WorkerQueueMetricsSelectOptions.ts
|
||||
msgid "Last 12 hours"
|
||||
@@ -8580,11 +8634,6 @@ msgstr "propojil(a) e-mail s"
|
||||
msgid "list"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 5Kn+XX
|
||||
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
|
||||
msgid "List installed applications. Use filter to search for a specific application"
|
||||
msgstr "Seznam nainstalovaných aplikací. Pomocí filtru vyhledejte konkrétní aplikaci"
|
||||
|
||||
#. js-lingui-id: Ap948/
|
||||
#: src/modules/settings/admin-panel/apps/components/SettingsAdminApps.tsx
|
||||
msgid "Listed"
|
||||
@@ -8769,16 +8818,6 @@ msgstr "Odhlásit"
|
||||
msgid "Logs"
|
||||
msgstr "Protokoly"
|
||||
|
||||
#. js-lingui-id: PTozs8
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Look up users and manage their workspace feature flags or impersonate them."
|
||||
msgstr "Vyhledejte uživatele a spravujte jejich funkce ve workspace nebo je impersonujte."
|
||||
|
||||
#. js-lingui-id: GPSwzy
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Look up users to impersonate them."
|
||||
msgstr "Vyhledejte uživatele pro impersonaci."
|
||||
|
||||
#. js-lingui-id: tL2lBI
|
||||
#: src/modules/workflow/workflow-diagram/utils/generateNodesAndEdgesForIteratorNode.ts
|
||||
msgid "loop"
|
||||
@@ -8806,6 +8845,7 @@ msgstr ""
|
||||
|
||||
#. js-lingui-id: wckWOP
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Manage"
|
||||
msgstr ""
|
||||
|
||||
@@ -8832,6 +8872,11 @@ msgstr "Správa fakturačních údajů"
|
||||
msgid "Manage favorite"
|
||||
msgstr "Spravovat oblíbené"
|
||||
|
||||
#. js-lingui-id: Dt05oz
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Manage feature flags for this workspace"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: T6YjCk
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
msgid "Manage Members"
|
||||
@@ -8996,6 +9041,8 @@ msgstr ""
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
|
||||
#: src/pages/settings/members/SettingsWorkspaceMember.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
@@ -9054,6 +9101,7 @@ msgstr "Synchronizace zpráv není dostupná, protože služba nefunguje"
|
||||
|
||||
#. js-lingui-id: t7TeQU
|
||||
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Messages"
|
||||
msgstr "Zprávy"
|
||||
|
||||
@@ -9130,8 +9178,8 @@ msgid "Mission accomplished!"
|
||||
msgstr "Mise splněna!"
|
||||
|
||||
#. js-lingui-id: dMsM20
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/WidgetVisibilityDropdownContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useVisibilityLabels.ts
|
||||
#: src/modules/side-panel/pages/page-layout/hooks/useTranslatedVisibilityLabel.ts
|
||||
msgid "Mobile"
|
||||
msgstr ""
|
||||
|
||||
@@ -9231,7 +9279,6 @@ msgstr ""
|
||||
#. js-lingui-id: 2FYpfJ
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "More"
|
||||
msgstr "Více"
|
||||
|
||||
@@ -9280,14 +9327,16 @@ msgid "Move Down"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: iSLA/r
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx
|
||||
#: src/modules/object-record/record-group/hooks/useRecordGroupActions.ts
|
||||
msgid "Move left"
|
||||
msgstr "Posunout doleva"
|
||||
|
||||
#. js-lingui-id: Ubl2by
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/object-record/record-table/record-table-header/components/RecordTableColumnHeadDropdownMenu.tsx
|
||||
#: src/modules/object-record/record-group/hooks/useRecordGroupActions.ts
|
||||
msgid "Move right"
|
||||
@@ -9366,6 +9415,8 @@ msgstr "mySkill"
|
||||
#: src/pages/settings/ai/constants/SettingsAiAgentTableMetadata.ts
|
||||
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
|
||||
#: src/pages/settings/ai/components/SettingsToolParameterTable.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/onboarding/CreateProfile.tsx
|
||||
#: src/modules/settings/workspace/components/NameField.tsx
|
||||
@@ -9612,6 +9663,20 @@ msgstr "Nová konfigurace SSO"
|
||||
msgid "New SSO provider"
|
||||
msgstr "Nový poskytovatel SSO"
|
||||
|
||||
#. js-lingui-id: 3YvS+c
|
||||
#: src/modules/page-layout/components/PageLayoutTabListNewTabDropdownContent.tsx
|
||||
msgid "New tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Db+TX4
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabList.tsx
|
||||
msgid "New Tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wl18ST
|
||||
#: src/modules/activities/tasks/components/TaskGroups.tsx
|
||||
msgid "New task"
|
||||
@@ -9766,6 +9831,11 @@ msgstr "Bez předvolby"
|
||||
msgid "No chat"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: NjIy4U
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "No chat threads found."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wgUPZ1
|
||||
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
|
||||
msgid "No comment"
|
||||
@@ -9997,6 +10067,11 @@ msgstr "Žádní členové neodpovídají vašemu vyhledávání"
|
||||
msgid "No messages found for this turn"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: IohPnt
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminChatThreadMessageList.tsx
|
||||
msgid "No messages found."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 0NudpV
|
||||
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminWorkerMetricsGraph.tsx
|
||||
msgid "No metrics data available"
|
||||
@@ -10048,6 +10123,11 @@ msgstr "Žádné parametry"
|
||||
msgid "No payment method found. Please update your billing details."
|
||||
msgstr "Nenalezen žádný platební prostředek. Prosím, aktualizujte své fakturační údaje."
|
||||
|
||||
#. js-lingui-id: orE/ux
|
||||
#: src/pages/settings/applications/SettingsApplicationDetails.tsx
|
||||
msgid "No permission defined for this application"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Od1X93
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationPermissionsTab.tsx
|
||||
msgid "No permissions configured for this application."
|
||||
@@ -10160,6 +10240,11 @@ msgstr "Žádná data o využití"
|
||||
msgid "No usage data yet"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: EsP4NW
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "No users found matching your search criteria."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wJwIUq
|
||||
#: src/modules/object-record/record-field/ui/form-types/components/FormSelectFieldInput.tsx
|
||||
msgid "No value"
|
||||
@@ -10196,6 +10281,11 @@ msgstr "Zatím žádné verze workflow"
|
||||
msgid "No workspace selected"
|
||||
msgstr "Není vybrán žádný pracovní prostor"
|
||||
|
||||
#. js-lingui-id: TiRphK
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "No workspaces found matching your search criteria."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Ah7JCB
|
||||
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
|
||||
msgid "Node"
|
||||
@@ -10281,6 +10371,11 @@ msgstr "Poznámka"
|
||||
msgid "Notes"
|
||||
msgstr "Poznámky"
|
||||
|
||||
#. js-lingui-id: DYCPYF
|
||||
#: src/modules/page-layout/widgets/components/StandaloneWidgetPlaceholder.tsx
|
||||
msgid "Nothing to see"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YwzE9K
|
||||
#: src/utils/date-utils.ts
|
||||
#: src/utils/date-utils.ts
|
||||
@@ -10346,7 +10441,7 @@ msgid "Numbered list"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: b/j06W
|
||||
#: src/pages/settings/applications/SettingsApplicationRegistrationDetails.tsx
|
||||
#: src/pages/settings/applications/components/SettingsApplicationRegistrationContent.tsx
|
||||
#: src/pages/settings/ai/components/SettingsAIMCP.tsx
|
||||
msgid "OAuth"
|
||||
msgstr "OAuth"
|
||||
@@ -10626,7 +10721,6 @@ msgid "Open Outlook"
|
||||
msgstr "Otevřít Outlook"
|
||||
|
||||
#. js-lingui-id: bY2Xkv
|
||||
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
|
||||
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
|
||||
msgid "Open side panel"
|
||||
msgstr "Otevřít postranní panel"
|
||||
@@ -10712,12 +10806,15 @@ msgstr "Uspořádat"
|
||||
#. js-lingui-id: /IX/7x
|
||||
#: src/pages/settings/updates/SettingsUpdates.tsx
|
||||
#: src/pages/settings/security/SettingsSecurity.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminApplicationRegistrationDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdmin.tsx
|
||||
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
|
||||
#: src/modules/page-layout/widgets/fields/hooks/useFieldsWidgetGroups.ts
|
||||
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
|
||||
#: src/modules/navigation/components/NavigationDrawerOtherSection.tsx
|
||||
#: src/modules/command-menu-item/edit/components/SidePanelCommandMenuItemEditPage.tsx
|
||||
@@ -11068,6 +11165,11 @@ msgstr "Obrázek"
|
||||
msgid "Pie Chart"
|
||||
msgstr "Koláčový graf"
|
||||
|
||||
#. js-lingui-id: 3pU8e+
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Pin tab"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 2FIjLb
|
||||
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
|
||||
msgid "Pink"
|
||||
@@ -11087,6 +11189,7 @@ msgstr "Zástupný text"
|
||||
|
||||
#. js-lingui-id: MFTZK8
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsPlacementSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Placement"
|
||||
msgstr ""
|
||||
|
||||
@@ -11138,11 +11241,6 @@ msgstr "Prosím, znovu připojte svou schránku {mailboxHandle}, abyste aktualiz
|
||||
msgid "Please refresh the page."
|
||||
msgstr "Prosím, obnovte stránku."
|
||||
|
||||
#. js-lingui-id: X5x85V
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
msgid "Please search for a user first"
|
||||
msgstr "Nejprve vyhledejte uživatele"
|
||||
|
||||
#. js-lingui-id: wCgL30
|
||||
#: src/pages/settings/data-model/new-field/SettingsObjectNewFieldConfigure.tsx
|
||||
msgid "Please select at least one destination object for this relation."
|
||||
@@ -11551,6 +11649,11 @@ msgstr "Obdržíte e-mail s odkazem na aktualizaci hesla"
|
||||
msgid "Recent Events (oldest → newest)"
|
||||
msgstr "Nedávné události (od nejstarších → k nejnovějším)"
|
||||
|
||||
#. js-lingui-id: EoiSFI
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Recent Users"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: yPrbsy
|
||||
#: src/modules/activities/emails/components/EmailComposerFields.tsx
|
||||
msgid "Recipients"
|
||||
@@ -11621,11 +11724,6 @@ msgstr "Záznamový popisek"
|
||||
msgid "Record Page"
|
||||
msgstr "Záznamová stránka"
|
||||
|
||||
#. js-lingui-id: dSCufP
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Record Selection"
|
||||
msgstr "Výběr záznamů"
|
||||
|
||||
#. js-lingui-id: NxW0+c
|
||||
#: src/modules/side-panel/pages/page-layout/utils/getPageLayoutPageTitle.ts
|
||||
msgid "Record Table Settings"
|
||||
@@ -11948,7 +12046,10 @@ msgstr "Znovu odeslat e-mail"
|
||||
#: src/pages/settings/admin-panel/SettingsAdminConfigVariableDetails.tsx
|
||||
#: src/modules/views/components/ViewBarDetails.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Obnovit"
|
||||
|
||||
@@ -11958,21 +12059,25 @@ msgstr "Obnovit"
|
||||
msgid "Reset 2FA"
|
||||
msgstr "Obnovit 2FA"
|
||||
|
||||
#. js-lingui-id: kw0Yv1
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "Reset all overrides on this layout to return it to the app default"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: YdI8A2
|
||||
#: src/modules/command-menu-item/edit/components/CommandMenuItemOptionsDropdown.tsx
|
||||
msgid "Reset label to default"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 1IWc1n
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
|
||||
msgid "Reset to"
|
||||
msgstr "Obnovit na"
|
||||
|
||||
#. js-lingui-id: L+rMC9
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
#: src/modules/settings/data-model/fields/forms/address/components/SettingsDataModelFieldAddressForm.tsx
|
||||
#: src/modules/command-menu-item/edit/components/SidePanelCommandMenuItemEditPage.tsx
|
||||
msgid "Reset to default"
|
||||
@@ -12238,6 +12343,11 @@ msgstr "Spouští se {formattedName}"
|
||||
msgid "Running function"
|
||||
msgstr "Spouští se funkce"
|
||||
|
||||
#. js-lingui-id: SoR81K
|
||||
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
|
||||
msgid "Running workflows on all records is not yet supported. Please select records manually."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: LTC198
|
||||
#: src/modules/ai/components/CodeExecutionDisplay.tsx
|
||||
msgid "Running..."
|
||||
@@ -12316,17 +12426,11 @@ msgstr "SDK"
|
||||
#: src/modules/side-panel/hooks/useOpenRecordsSearchPageInSidePanel.ts
|
||||
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentWorkspaceMemberPickerDropdown.tsx
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectSettings.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/command-menu-item/engine-command/constants/EngineComponentKeyHeadlessComponentMap.tsx
|
||||
#: src/modules/command-menu-item/engine-command/constants/EngineComponentKeyHeadlessComponentMap.tsx
|
||||
msgid "Search"
|
||||
msgstr "Hledat"
|
||||
|
||||
#. js-lingui-id: aOQ/Fi
|
||||
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
|
||||
msgid "Search ''{sidePanelSearch}'' with..."
|
||||
msgstr "Hledat ''{sidePanelSearch}'' s..."
|
||||
|
||||
#. js-lingui-id: g2dQp/
|
||||
#: src/modules/settings/roles/role-permissions/object-level-permissions/record-level-permissions/components/SettingsRolePermissionsObjectLevelRecordLevelPermissionMeValueSelect.tsx
|
||||
msgid "Search 1 {fieldTypeLabelLowercase} field"
|
||||
@@ -12449,6 +12553,16 @@ msgstr "Vyhledat v jakémkoli poli"
|
||||
msgid "Search API keys"
|
||||
msgstr "Hledat API klíče"
|
||||
|
||||
#. js-lingui-id: iRegw9
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Search by name, email, or user ID..."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: KI1xjO
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Search by workspace name, subdomain, or ID..."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: yI4D/V
|
||||
#: src/modules/side-panel/pages/page-layout/components/dropdown-content/ChartColorSelectionDropdownContent.tsx
|
||||
msgid "Search colors"
|
||||
@@ -12937,7 +13051,7 @@ msgid "Set as default"
|
||||
msgstr "Nastavit jako výchozí"
|
||||
|
||||
#. js-lingui-id: 7f09hf
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
msgid "Set as pinned tab"
|
||||
msgstr "Nastavit jako připnutou kartu"
|
||||
|
||||
@@ -13010,7 +13124,7 @@ msgstr "Nastavení vaší databáze..."
|
||||
#: src/pages/settings/ai/SettingsAgentForm.tsx
|
||||
#: src/modules/ui/navigation/navigation-drawer/components/MultiWorkspaceDropdown/internal/MultiWorkspaceDropdownDefaultComponents.tsx
|
||||
#: src/modules/sign-in-background-mock/components/SignInAppNavigationDrawerMock.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/dashboard/SidePanelDashboardRecordTableSettings.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsSection.tsx
|
||||
#: src/modules/settings/roles/role/components/SettingsRole.tsx
|
||||
@@ -13499,6 +13613,7 @@ msgstr "Stav"
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminIndicatorHealthStatus.tsx
|
||||
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
@@ -14114,6 +14229,11 @@ msgstr "S tímto záznamem není spojena žádná aktivita."
|
||||
msgid "There was an error while updating password."
|
||||
msgstr "Během aktualizace hesla došlo k chybě."
|
||||
|
||||
#. js-lingui-id: vg1S0X
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
|
||||
msgid "These apps are not vetted. Use at your own risk."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: AUV+TY
|
||||
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
|
||||
msgid "Thinking"
|
||||
@@ -14144,6 +14264,11 @@ msgstr "Tento účet je připojen, ale zatím nemáme oprávnění vytvářet ko
|
||||
msgid "This action can return up to {maxRecordsFormatted} records."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 2xOCJW
|
||||
#: src/modules/settings/data-model/object-details/components/tabs/ObjectLayout.tsx
|
||||
msgid "This action cannot be undone."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: Ox1hE7
|
||||
#: src/modules/settings/profile/components/DeleteAccount.tsx
|
||||
msgid ""
|
||||
@@ -14202,6 +14327,11 @@ msgstr "Tato aplikace je uvedena na marketplace, protože je publikována na npm
|
||||
msgid "This application is not listed on the marketplace. It was shared via a direct link."
|
||||
msgstr "Tato aplikace není uvedena na Marketplace. Byla sdílena prostřednictvím přímého odkazu."
|
||||
|
||||
#. js-lingui-id: D8qhoN
|
||||
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
|
||||
msgid "This application is required for your workspace to function properly and cannot be uninstalled."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: SLIRqz
|
||||
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableHelpText.tsx
|
||||
msgid "This database value overrides environment settings. "
|
||||
@@ -14247,6 +14377,11 @@ msgstr "Tento klíč by měl být nastaven přes tělo požadavku"
|
||||
msgid "This model will be removed from the provider. You can re-add it later."
|
||||
msgstr "Tento model bude od poskytovatele odebrán. Později jej můžete znovu přidat."
|
||||
|
||||
#. js-lingui-id: NCA55L
|
||||
#: src/modules/page-layout/widgets/components/StandaloneWidgetPlaceholder.tsx
|
||||
msgid "This page has no content"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: R/PuIn
|
||||
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
|
||||
msgid "This provider doesn't have a native SDK yet — it will use OpenAI-compatible mode. Need native support? Reach out to us."
|
||||
@@ -14316,7 +14451,8 @@ msgid "This week"
|
||||
msgstr "Tento týden"
|
||||
|
||||
#. js-lingui-id: DF2voz
|
||||
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/RegularTabSettingsContent.tsx
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "This will cancel all modifications done on the tab and its widgets. Edit mode will be canceled and the page will refresh. This action cannot be undone."
|
||||
msgstr ""
|
||||
|
||||
@@ -14439,6 +14575,11 @@ msgstr "Časování"
|
||||
msgid "title"
|
||||
msgstr "název"
|
||||
|
||||
#. js-lingui-id: MHrjPM
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: /jQctM
|
||||
#: src/modules/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionEmailBase.tsx
|
||||
#: src/modules/activities/emails/components/EmailComposerFields.tsx
|
||||
@@ -14502,6 +14643,12 @@ msgstr ""
|
||||
msgid "Too many records. Up to {maxRecordsString} allowed"
|
||||
msgstr "Příliš mnoho záznamů. Povolených je až {maxRecordsString}"
|
||||
|
||||
#. js-lingui-id: tfaidv
|
||||
#. placeholder {0}: part.toolName
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminChatThreadMessageList.tsx
|
||||
msgid "Tool call: {0}"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: GnoLfm
|
||||
#: src/modules/ai/components/RoutingDebugDisplay.tsx
|
||||
msgid "Tool calls made"
|
||||
@@ -14533,6 +14680,16 @@ msgstr "Generování nástrojů"
|
||||
msgid "Tools"
|
||||
msgstr "Nástroje"
|
||||
|
||||
#. js-lingui-id: nCq25C
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Top 10 workspaces by number of users"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: A4dnvW
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Top Workspaces"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 72c5Qo
|
||||
#: src/modules/page-layout/widgets/graph/graph-widget-pie-chart/hooks/usePieChartCenterMetricData.ts
|
||||
msgid "Total"
|
||||
@@ -14962,12 +15119,14 @@ msgid "Unordered list with bullets"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: wja8aL
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/modules/ui/field/display/components/GlobalFilePreviewModal.tsx
|
||||
#: src/modules/ui/field/display/components/ArrayDisplay.tsx
|
||||
#: src/modules/ui/field/display/components/ActorDisplay.tsx
|
||||
#: src/modules/side-panel/components/SidePanelContextChip.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminWorkspaceContent.tsx
|
||||
#: src/modules/page-layout/components/PageLayoutTabsRenderer.tsx
|
||||
#: src/modules/page-layout/hooks/usePageLayoutAddTabStrategy.ts
|
||||
#: src/modules/object-record/record-title-cell/components/RecordTitleFullNameFieldDisplay.tsx
|
||||
#: src/modules/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay.tsx
|
||||
#: src/modules/object-record/components/RecordChip.tsx
|
||||
@@ -15062,6 +15221,7 @@ msgid "updated"
|
||||
msgstr "aktualizováno"
|
||||
|
||||
#. js-lingui-id: +b7T3G
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
#: src/modules/settings/components/SettingsDatabaseEventsForm.tsx
|
||||
msgid "Updated"
|
||||
msgstr "Aktualizováno"
|
||||
@@ -15296,13 +15456,8 @@ msgstr "Uživatel"
|
||||
msgid "User Context"
|
||||
msgstr "Uživatelský kontext"
|
||||
|
||||
#. js-lingui-id: RNv3YS
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "User Impersonation"
|
||||
msgstr "Impersonace uživatele"
|
||||
|
||||
#. js-lingui-id: tNT8wT
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "User Info"
|
||||
msgstr "Informace o uživateli"
|
||||
|
||||
@@ -15327,6 +15482,7 @@ msgstr "Využití uživatele"
|
||||
|
||||
#. js-lingui-id: Sxm8rQ
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
msgid "Users"
|
||||
msgstr "Uživatelé"
|
||||
|
||||
@@ -15628,6 +15784,11 @@ msgstr "Fialková"
|
||||
msgid "Visibility"
|
||||
msgstr "Viditelnost"
|
||||
|
||||
#. js-lingui-id: XQC+sL
|
||||
#: src/modules/side-panel/pages/page-layout/components/CanvasTabSettingsContent.tsx
|
||||
msgid "Visibility restriction"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: gkAApJ
|
||||
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
|
||||
msgid "Visibility Restriction"
|
||||
@@ -15980,6 +16141,7 @@ msgstr "Pracovní postupy"
|
||||
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
|
||||
#: src/pages/settings/ai/SettingsAIPrompts.tsx
|
||||
#: src/pages/settings/ai/SettingsAI.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceChatThread.tsx
|
||||
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
|
||||
#: src/modules/sign-in-background-mock/components/SignInAppNavigationDrawerMock.tsx
|
||||
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
|
||||
@@ -15992,6 +16154,8 @@ msgstr "Pracovní postupy"
|
||||
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
|
||||
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
|
||||
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
|
||||
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
|
||||
@@ -16041,6 +16205,11 @@ msgstr "Logo pracovního prostoru"
|
||||
msgid "Workspace Member"
|
||||
msgstr "Člen pracovního prostoru"
|
||||
|
||||
#. js-lingui-id: wtxjAY
|
||||
#: src/pages/settings/admin-panel/SettingsAdminWorkspaceDetail.tsx
|
||||
msgid "Workspace members"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: CozWO1
|
||||
#: src/pages/onboarding/CreateWorkspace.tsx
|
||||
msgid "Workspace name"
|
||||
@@ -16052,7 +16221,7 @@ msgid "Workspace views require manage views permission"
|
||||
msgstr "Pro zobrazení pracovního prostoru je třeba povolení ke správě zobrazení"
|
||||
|
||||
#. js-lingui-id: pmt7u4
|
||||
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
|
||||
#: src/pages/settings/admin-panel/SettingsAdminUserDetail.tsx
|
||||
msgid "Workspaces"
|
||||
msgstr "Pracovní prostory"
|
||||
|
||||
@@ -16288,10 +16457,10 @@ msgstr "Vaše funkce Enterprise budou deaktivovány"
|
||||
msgid "Your enterprise features will remain active until {cancelAtDate}."
|
||||
msgstr "Vaše funkce Enterprise zůstanou aktivní do {cancelAtDate}."
|
||||
|
||||
#. js-lingui-id: 69Siss
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
|
||||
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
|
||||
msgstr "Formát vašeho klíče Enterprise je zastaralý. Aktivujte prosím nový klíč, abyste zachovali funkce Enterprise."
|
||||
#. js-lingui-id: 5TsUUL
|
||||
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
|
||||
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: NTpA4U
|
||||
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user