i18n - translations (#15799)

Created by Github action

---------

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: github-actions <github-actions@twenty.com>
This commit is contained in:
github-actions[bot]
2025-11-13 16:34:00 +01:00
committed by GitHub
parent cd5d0f9eac
commit 8cadd00d34
2720 changed files with 261074 additions and 1179 deletions
@@ -0,0 +1,56 @@
---
title: crwdns59724:0crwdne59724:0
image: crwdns59726:0crwdne59726:0
info: crwdns59728:0crwdne59728:0
---
<Frame>
<img src="/images/docs/getting-started/api.png" alt="Header" />
</Frame>
## crwdns59730:0crwdne59730:0
crwdns59732:0crwdne59732:0 crwdns59734:0crwdne59734:0 crwdns59736:0crwdne59736:0
crwdns59738:0crwdne59738:0 crwdns59740:0crwdne59740:0 crwdns59742:0crwdne59742:0
crwdns59744:0https://app.twenty.com/settingscrwdne59744:0
## crwdns59746:0crwdne59746:0
crwdns59748:0crwdne59748:0 crwdns59750:0crwdne59750:0
- crwdns59752:0crwdne59752:0 crwdns59754:0crwdne59754:0 crwdns59756:0crwdne59756:0
- crwdns59758:0crwdne59758:0 crwdns59760:0crwdne59760:0 crwdns59762:0crwdne59762:0
```
Authorization: Bearer YOUR_API_KEY
```
crwdns59764:0crwdne59764:0 crwdns59766:0crwdne59766:0 crwdns59768:0crwdne59768:0
## crwdns59770:0crwdne59770:0
crwdns59772:0crwdne59772:0
- crwdns59774:0crwdne59774:0
- crwdns64012:0{your-domain}crwdne64012:0
crwdns59778:0crwdne59778:0 crwdns59780:0crwdne59780:0 crwdns59782:0crwdne59782:0
### crwdns59784:0crwdne59784:0
crwdns59786:0crwdne59786:0
crwdns59788:0crwdne59788:0
### crwdns59790:0crwdne59790:0
crwdns59792:0crwdne59792:0
crwdns59794:0crwdne59794:0 crwdns59796:0crwdne59796:0
- crwdns59798:0crwdne59798:0
- crwdns59800:0crwdne59800:0
- crwdns59802:0{objectName}crwdne59802:0
- crwdns59804:0crwdne59804:0
crwdns59806:0crwdne59806:0 crwdns59808:0crwdne59808:0 crwdns59810:0crwdne59810:0
@@ -0,0 +1,87 @@
---
title: crwdns59378:0crwdne59378:0
image: crwdns59380:0crwdne59380:0
info: crwdns59382:0crwdne59382:0
---
<Frame>
<img src="/images/docs/getting-started/webhooks.png" alt="Header" />
</Frame>
## crwdns59384:0crwdne59384:0
crwdns59386:0crwdne59386:0 crwdns59388:0crwdne59388:0 crwdns59390:0crwdne59390:0
crwdns59392:0crwdne59392:0 crwdns59394:0crwdne59394:0
## crwdns59396:0crwdne59396:0
crwdns59398:0crwdne59398:0
1. crwdns59400:0crwdne59400:0
2. crwdns59402:0crwdne59402:0
3. crwdns59404:0crwdne59404:0 crwdns59406:0crwdne59406:0
4. crwdns59408:0crwdne59408:0 crwdns59410:0crwdne59410:0
crwdns59412:0crwdne59412:0 crwdns59414:0crwdne59414:0 crwdns59416:0crwdne59416:0
## crwdns59418:0crwdne59418:0
crwdns59420:0crwdne59420:0 crwdns59422:0crwdne59422:0
- crwdns59424:0crwdne59424:0
- crwdns59426:0crwdne59426:0
- crwdns59428:0crwdne59428:0
- crwdns59430:0crwdne59430:0
crwdns59432:0crwdne59432:0 crwdns59434:0crwdne59434:0 crwdns59436:0crwdne59436:0
```
{
"event": "person.created",
"data": {
"id": "abc12345",
"firstName": "Alice",
"lastName": "Doe",
"email": "alice@example.com",
"createdAt": "2025-02-10T15:30:45Z",
"createdBy": "user_123"
},
"timestamp": "2025-02-10T15:30:50Z"
}
```
crwdns59438:0crwdne59438:0
- crwdns59440:0crwdne59440:0
- crwdns59442:0crwdne59442:0
- crwdns59444:0crwdne59444:0
crwdns59446:0crwdne59446:0 crwdns59448:0crwdne59448:0
crwdns59450:0crwdne59450:0 crwdns59452:0crwdne59452:0 crwdns59454:0crwdne59454:0
## crwdns59456:0crwdne59456:0
crwdns59458:0crwdne59458:0
crwdns59460:0crwdne59460:0
crwdns59462:0crwdne59462:0
1. crwdns59464:0crwdne59464:0
2. crwdns59466:0crwdne59466:0
3. crwdns59468:0crwdne59468:0
crwdns59470:0crwdne59470:0
```javascript
const crypto = require("crypto");
const timestamp = "1735066639761";
const payload = JSON.stringify({...});
const secret = "your-secret";
const stringToSign = `${timestamp}:${JSON.stringify(payload)}`;
const signature = crypto.createHmac("sha256", secret)
.update(stringToSign)
.digest("hex");
```
@@ -0,0 +1,27 @@
---
title: crwdns60594:0crwdne60594:0
image: crwdns60596:0crwdne60596:0
---
<Frame>
<img src="/images/user-guide/tips/light-bulb.png" alt="Header" />
</Frame>
crwdns60598:0crwdne60598:0
## crwdns60600:0crwdne60600:0
crwdns60602:0crwdne60602:0 crwdns60604:0crwdne60604:0
crwdns60606:0crwdne60606:0 crwdns60608:0crwdne60608:0
## crwdns60610:0crwdne60610:0
crwdns60612:0crwdne60612:0 crwdns60614:0crwdne60614:0
crwdns60616:0crwdne60616:0 crwdns60618:0crwdne60618:0
## crwdns60620:0crwdne60620:0
crwdns60622:0crwdne60622:0 crwdns60624:0crwdne60624:0 crwdns60626:0crwdne60626:0 crwdns60628:0crwdne60628:0
crwdns60630:0crwdne60630:0 crwdns60632:0crwdne60632:0
@@ -0,0 +1,45 @@
---
title: crwdns60094:0crwdne60094:0
image: crwdns60096:0crwdne60096:0
---
<Frame>
<img src="/images/user-guide/objects/objects.png" alt="Header" />
</Frame>
crwdns60098:0crwdne60098:0 crwdns60100:0crwdne60100:0
crwdns60102:0crwdne60102:0 crwdns60104:0crwdne60104:0 crwdns60106:0crwdne60106:0
crwdns60108:0crwdne60108:0 crwdns60110:0crwdne60110:0
## crwdns60112:0crwdne60112:0
<div style={{textAlign: 'center'}}>
<img src="/images/docs/server/custom-object-schema.png" alt="High level schema" />
</div>
crwdns60114:0crwdne60114:0
## crwdns60116:0crwdne60116:0
crwdns60118:0crwdne60118:0 crwdns60120:0crwdne60120:0
- crwdns60122:0crwdne60122:0
- crwdns60124:0crwdne60124:0
- crwdns60126:0crwdne60126:0
crwdns60128:0crwdne60128:0 crwdns60130:0crwdne60130:0
<div style={{textAlign: 'center'}}>
<img src="/images/docs/server/add-custom-objects.jpeg" alt="Query the /metadata API to add custom objects" />
</div>
crwdns60132:0crwdne60132:0
crwdns60134:0crwdne60134:0
<div style={{textAlign: 'center'}}>
<img src="/images/docs/server/custom-object-schema.png" alt="Query the /graphql endpoint to fetch data" />
</div>
@@ -0,0 +1,51 @@
---
title: crwdns60350:0crwdne60350:0
image: crwdns60352:0crwdne60352:0
---
<Frame>
<img src="/images/user-guide/table-views/table.png" alt="Header" />
</Frame>
crwdns60354:0crwdne60354:0 crwdns60356:0crwdne60356:0
## crwdns60358:0crwdne60358:0
crwdns60360:0crwdne60360:0
```ts
type FeatureFlagKey =
| 'IS_FEATURENAME_ENABLED'
| ...;
```
crwdns60362:0crwdne60362:0
```ts
enum FeatureFlagKeys {
IsFeatureNameEnabled = 'IS_FEATURENAME_ENABLED',
...
}
```
crwdns60364:0crwdne60364:0
```ts
@Gate({
featureFlag: 'IS_FEATURENAME_ENABLED',
})
```
crwdns60366:0crwdne60366:0
```ts
const isFeatureNameEnabled = useIsFeatureEnabled('IS_FEATURENAME_ENABLED');
```
## crwdns60368:0crwdne60368:0
crwdns60370:0crwdne60370:0
| crwdns60372:0crwdne60372:0 | crwdns60374:0crwdne60374:0 | crwdns60376:0crwdne60376:0 | crwdns60378:0crwdne60378:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns60380:0crwdne60380:0 | crwdns60382:0crwdne60382:0 | crwdns60384:0crwdne60384:0 | crwdns60386:0crwdne60386:0 |
@@ -0,0 +1,130 @@
---
title: crwdns59472:0crwdne59472:0
info: crwdns59474:0crwdne59474:0
image: crwdns59476:0crwdne59476:0
---
<Frame>
<img src="/images/user-guide/fields/field.png" alt="Header" />
</Frame>
crwdns59478:0crwdne59478:0
```
server
└───ability
└───constants
└───core
└───database
└───decorators
└───filters
└───guards
└───health
└───integrations
└───metadata
└───workspace
└───utils
```
## crwdns59480:0crwdne59480:0
crwdns59482:0crwdne59482:0
## crwdns59484:0crwdne59484:0
crwdns59486:0crwdne59486:0
crwdns59488:0https://docs.nestjs.com/custom-decoratorscrwdne59488:0
## crwdns59490:0crwdne59490:0
crwdns59492:0crwdne59492:0
## crwdns59494:0crwdne59494:0
crwdns59496:0https://docs.nestjs.com/guardscrwdne59496:0
## crwdns59498:0crwdne59498:0
crwdns59500:0crwdne59500:0
## crwdns59502:0crwdne59502:0
crwdns59504:0crwdne59504:0
## crwdns59506:0crwdne59506:0
crwdns59508:0crwdne59508:0
### crwdns59510:0crwdne59510:0
```
workspace
└───workspace-schema-builder
└───factories
└───graphql-types
└───database
└───interfaces
└───object-definitions
└───services
└───storage
└───utils
└───workspace-resolver-builder
└───factories
└───interfaces
└───workspace-query-builder
└───factories
└───interfaces
└───workspace-query-runner
└───interfaces
└───utils
└───workspace-datasource
└───workspace-manager
└───workspace-migration-runner
└───utils
└───workspace.module.ts
└───workspace.factory.spec.ts
└───workspace.factory.ts
```
crwdns59512:0crwdne59512:0 crwdns59514:0crwdne59514:0 crwdns59516:0crwdne59516:0
crwdns59518:0crwdne59518:0
### crwdns59520:0crwdne59520:0
crwdns59522:0crwdne59522:0
#### crwdns59524:0crwdne59524:0
crwdns59526:0crwdne59526:0
- crwdns59528:0crwdne59528:0
- crwdns59530:0crwdne59530:0
#### crwdns59532:0crwdne59532:0
crwdns59534:0crwdne59534:0
#### crwdns59536:0crwdne59536:0
crwdns59538:0crwdne59538:0
#### crwdns59540:0crwdne59540:0
crwdns59542:0crwdne59542:0
#### crwdns59544:0crwdne59544:0
crwdns59546:0crwdne59546:0
### crwdns59548:0crwdne59548:0
crwdns59550:0crwdne59550:0
crwdns59552:0crwdne59552:0
### crwdns59554:0crwdne59554:0
crwdns59556:0crwdne59556:0
@@ -0,0 +1,47 @@
---
title: crwdns60634:0crwdne60634:0
image: crwdns60636:0crwdne60636:0
---
<Frame>
<img src="/images/user-guide/emails/emails_header.png" alt="Header" />
</Frame>
crwdns60638:0crwdne60638:0 crwdns60640:0crwdne60640:0
crwdns60642:0crwdne60642:0
crwdns60644:0https://bullmq.io/crwdne60644:0
## crwdns60646:0crwdne60646:0
1. crwdns60648:0crwdne60648:0
2. crwdns60650:0crwdne60650:0
3. crwdns60652:0crwdne60652:0
4. crwdns60654:0crwdne60654:0
### crwdns60656:0crwdne60656:0
```ts
class Resolver {
constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {}
async onSomeAction() {
//business logic
await this.queue.add(someData);
}
}
//async worker
class CustomWorker {
constructor(@Inject(MESSAGE_QUEUES.custom) private queue: MessageQueueService) {
this.initWorker();
}
async initWorker() {
await this.queue.work(async ({ id, data }) => {
//worker logic
});
}
}
```
@@ -0,0 +1,108 @@
---
title: crwdns60016:0crwdne60016:0
image: crwdns60018:0crwdne60018:0
---
<Frame>
<img src="/images/user-guide/kanban-views/kanban.png" alt="Header" />
</Frame>
## crwdns60020:0crwdne60020:0
crwdns60022:0crwdne60022:0
crwdns64014:0{command}crwdnd64014:0{command}crwdne64014:0
### crwdns60026:0crwdne60026:0
```
npx nx database:reset twenty-server # setup the database with dev seeds
```
### crwdns60028:0crwdne60028:0
```
npx nx run twenty-server:start
```
### crwdns60030:0crwdne60030:0
```
npx nx run twenty-server:lint # pass --fix to fix lint errors
```
### crwdns60032:0crwdne60032:0
```
npx nx run twenty-server:test:unit # run unit tests
npx nx run twenty-server:test:integration # run integration tests
```
crwdns60034:0crwdne60034:0
### crwdns60036:0crwdne60036:0
crwdns60038:0crwdne60038:0
```bash
npx nx run twenty-server:database:reset
```
### crwdns60040:0crwdne60040:0
#### crwdns60042:0crwdne60042:0
```bash
npx nx run twenty-server:typeorm migration:generate src/database/typeorm/core/migrations/nameOfYourMigration -d src/database/typeorm/core/core.datasource.ts
```
#### crwdns60044:0crwdne60044:0
crwdns60046:0crwdne60046:0
```bash
npx nx run twenty-server:command workspace:sync-metadata -f
```
<Warning>
crwdns60048:0crwdne60048:0
crwdns60050:0crwdne60050:0
</Warning>
## crwdns60052:0crwdne60052:0
crwdns60054:0crwdne60054:0
crwdns60056:0crwdne60056:0 crwdns60058:0crwdne60058:0 crwdns60060:0crwdne60060:0
crwdns60062:0crwdne60062:0
crwdns60064:0crwdne60064:0
- crwdns60066:0https://nestjs.com/crwdne60066:0
- crwdns60068:0https://typeorm.io/crwdne60068:0
- crwdns60070:0https://the-guild.dev/graphql/yoga-servercrwdne60070:0
crwdns60072:0crwdne60072:0
- crwdns60074:0https://www.postgresql.org/crwdne60074:0
crwdns60076:0crwdne60076:0
- crwdns60078:0https://sentry.io/welcome/crwdne60078:0
crwdns60080:0crwdne60080:0
- crwdns60082:0https://jestjs.io/crwdne60082:0
crwdns60084:0crwdne60084:0
- crwdns60086:0https://yarnpkg.com/crwdne60086:0
- crwdns60088:0https://eslint.org/crwdne60088:0
crwdns60090:0crwdne60090:0
- crwdns60092:0https://aws.amazon.com/eks/crwdne60092:0
@@ -0,0 +1,91 @@
---
title: crwdns60302:0crwdne60302:0
image: crwdns60304:0crwdne60304:0
---
<Frame>
<img src="/images/user-guide/integrations/plug.png" alt="Header" />
</Frame>
crwdns60306:0https://zapier.com/crwdne60306:0 crwdns60308:0crwdne60308:0
## crwdns60310:0crwdne60310:0
crwdns60312:0crwdne60312:0 crwdns60314:0crwdne60314:0
crwdns60316:0https://zapier.com/how-it-workscrwdne60316:0
## crwdns60318:0crwdne60318:0
### crwdns60320:0crwdne60320:0
```bash
cd packages/twenty-zapier
yarn
```
### crwdns60322:0crwdne60322:0
crwdns60324:0crwdne60324:0
```bash
zapier login
```
### crwdns60326:0crwdne60326:0
crwdns60328:0crwdne60328:0
```bash
cp .env.example .env
```
crwdns60330:0http://localhost:3000/settings/api-webhookscrwdne60330:0
crwdns60332:0crwdne60332:0
## crwdns60334:0crwdne60334:0
<Warning>
crwdns60336:0crwdne60336:0
</Warning>
### crwdns60338:0crwdne60338:0
```bash
yarn test
```
### crwdns60340:0crwdne60340:0
```bash
yarn format
```
### crwdns60342:0crwdne60342:0
```bash
yarn watch
```
### crwdns60344:0crwdne60344:0
```bash
yarn validate
```
### crwdns60346:0crwdne60346:0
```bash
yarn deploy
```
### crwdns60348:0crwdne60348:0
```bash
zapier
```
@@ -0,0 +1,19 @@
---
title: crwdns59078:0crwdne59078:0
image: crwdns59080:0crwdne59080:0
info: crwdns59082:0crwdne59082:0
---
<Frame>
<img src="/images/user-guide/api/api.png" alt="Header" />
</Frame>
## crwdns59084:0crwdne59084:0
crwdns59086:0https://github.com/twentyhq/twenty/issues/newcrwdne59086:0
crwdns59088:0https://discord.gg/cx5n4Jzs57crwdne59088:0
## crwdns59090:0crwdne59090:0
crwdns59092:0https://github.com/twentyhq/twenty/discussions/newcrwdne59092:0
@@ -0,0 +1,333 @@
---
title: crwdns60144:0crwdne60144:0
image: crwdns60146:0crwdne60146:0
---
<Frame>
<img src="/images/user-guide/tips/light-bulb.png" alt="Header" />
</Frame>
crwdns60148:0crwdne60148:0
## crwdns60150:0crwdne60150:0
crwdns60152:0crwdne60152:0
### crwdns60154:0crwdne60154:0
crwdns60156:0crwdne60156:0
<Warning>
crwdns60158:0crwdne60158:0
</Warning>
```tsx
export const myAtomState = atom({
key: 'myAtomState',
default: 'default value',
});
export const MyComponent = () => {
const [myAtom, setMyAtom] = useRecoilState(myAtomState);
return (
<div>
<input
value={myAtom}
onChange={(e) => setMyAtom(e.target.value)}
/>
</div>
);
}
```
### crwdns60160:0crwdne60160:0
crwdns60162:0crwdne60162:0
crwdns60164:0crwdne60164:0
crwdns60166:0#managing-re-renderscrwdne60166:0
## crwdns60168:0crwdne60168:0
crwdns60170:0crwdne60170:0
crwdns60172:0crwdne60172:0
crwdns60174:0crwdne60174:0
### crwdns60176:0crwdne60176:0
crwdns60178:0crwdne60178:0
crwdns60180:0crwdne60180:0
crwdns60182:0crwdne60182:0
### crwdns60184:0crwdne60184:0
crwdns60186:0crwdne60186:0
crwdns60188:0crwdne60188:0
crwdns60190:0crwdne60190:0
crwdns60192:0crwdne60192:0
### crwdns60194:0crwdne60194:0
crwdns60196:0crwdne60196:0
crwdns60198:0crwdne60198:0
```tsx
// ❌ Bad, will cause re-renders even if data is not changing,
// because useEffect needs to be re-evaluated
export const PageComponent = () => {
const [data, setData] = useRecoilState(dataState);
const [someDependency] = useRecoilState(someDependencyState);
useEffect(() => {
if(someDependency !== data) {
setData(someDependency);
}
}, [someDependency]);
return <div>{data}</div>;
};
export const App = () => (
<RecoilRoot>
<PageComponent />
</RecoilRoot>
);
```
```tsx
// ✅ Good, will not cause re-renders if data is not changing,
// because useEffect is re-evaluated in another sibling component
export const PageComponent = () => {
const [data, setData] = useRecoilState(dataState);
return <div>{data}</div>;
};
export const PageData = () => {
const [data, setData] = useRecoilState(dataState);
const [someDependency] = useRecoilState(someDependencyState);
useEffect(() => {
if(someDependency !== data) {
setData(someDependency);
}
}, [someDependency]);
return <></>;
};
export const App = () => (
<RecoilRoot>
<PageData />
<PageComponent />
</RecoilRoot>
);
```
### crwdns60200:0crwdne60200:0
crwdns60202:0crwdne60202:0
crwdns60204:0crwdne60204:0
### crwdns60206:0crwdne60206:0
crwdns60208:0crwdne60208:0
### crwdns60210:0crwdne60210:0
crwdns60212:0crwdne60212:0
## crwdns60214:0crwdne60214:0
crwdns60216:0crwdne60216:0 crwdns60218:0crwdne60218:0
1. crwdns60220:0crwdne60220:0
2. crwdns60222:0crwdne60222:0
3. crwdns60224:0crwdne60224:0
4. crwdns60226:0crwdne60226:0
crwdns60228:0crwdne60228:0
## crwdns60230:0crwdne60230:0
### crwdns60232:0crwdne60232:0
crwdns60234:0crwdne60234:0
#### crwdns60236:0crwdne60236:0
crwdns60238:0crwdne60238:0 crwdns60240:0crwdne60240:0 crwdns60242:0crwdne60242:0 crwdns60244:0crwdne60244:0
```tsx
// ❌ Bad, uses a generic name that doesn't communicate its
// purpose or content clearly
const [value, setValue] = useState('');
```
```tsx
// ✅ Good, uses a descriptive name
const [email, setEmail] = useState('');
```
#### crwdns60246:0crwdne60246:0
- crwdns60248:0crwdne60248:0
### crwdns60250:0crwdne60250:0
crwdns60252:0crwdne60252:0
```tsx
// ❌ Bad
const onEmailChange = (val: string) => {
// ...
};
```
```tsx
// ✅ Good
const handleEmailChange = (val: string) => {
// ...
};
```
## crwdns60254:0crwdne60254:0
crwdns60256:0crwdne60256:0
crwdns60258:0crwdne60258:0
crwdns60260:0crwdne60260:0
```tsx
type EmailFieldProps = {
value: string;
disabled?: boolean;
};
const EmailField = ({ value, disabled = false }: EmailFieldProps) => (
<TextInput value={value} disabled={disabled} fullWidth />
);
```
crwdns60262:0crwdne60262:0
```tsx
// ❌ Bad, passing in the same value as the default value adds no value
const Form = () => <EmailField value="username@email.com" disabled={false} />;
```
```tsx
// ✅ Good, assumes the default value
const Form = () => <EmailField value="username@email.com" />;
```
## crwdns60264:0crwdne60264:0
crwdns60266:0crwdne60266:0
crwdns60268:0crwdne60268:0
```tsx
const SomeParentComponent = () => <MyComponent Icon={MyIcon} />;
// In MyComponent
const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => {
const theme = useTheme();
return (
<div>
<MyIcon size={theme.icon.size.md}>
</div>
)
};
```
crwdns60270:0crwdne60270:0
## crwdns60272:0crwdne60272:0
crwdns60274:0crwdne60274:0 crwdns60276:0crwdne60276:0
1. crwdns60278:0crwdne60278:0
2. crwdns60280:0crwdne60280:0
3. crwdns60282:0crwdne60282:0
crwdns60284:0#state-managementcrwdne60284:0
## crwdns60286:0crwdne60286:0
crwdns60288:0crwdne60288:0
crwdns60290:0crwdne60290:0
```js
{
alias: {
"~": path.resolve(__dirname, "src"),
"@": path.resolve(__dirname, "src/modules"),
"@testing": path.resolve(__dirname, "src/testing"),
},
}
```
crwdns60292:0crwdne60292:0
```tsx
// ❌ Bad, specifies the entire relative path
import {
CatalogDecorator
} from '../../../../../testing/decorators/CatalogDecorator';
import {
ComponentDecorator
} from '../../../../../testing/decorators/ComponentDecorator';
```
```tsx
// ✅ Good, utilises the designated aliases
import { CatalogDecorator } from '~/testing/decorators/CatalogDecorator';
import { ComponentDecorator } from 'twenty-ui/testing';
```
## crwdns60294:0crwdne60294:0
crwdns60296:0https://github.com/colinhacks/zodcrwdne60296:0
```js
const validationSchema = z
.object({
exist: z.boolean(),
email: z
.string()
.email('Email must be a valid email'),
password: z
.string()
.regex(PASSWORD_REGEX, 'Password must contain at least 8 characters'),
})
.required();
type Form = z.infer<typeof validationSchema>;
```
## crwdns60298:0crwdne60298:0
crwdns60300:0crwdne60300:0
@@ -0,0 +1,114 @@
---
title: crwdns59812:0crwdne59812:0
info: crwdns59814:0crwdne59814:0
image: crwdns59816:0crwdne59816:0
---
<Frame>
<img src="/images/user-guide/fields/field.png" alt="Header" />
</Frame>
crwdns59818:0crwdne59818:0
crwdns59820:0crwdne59820:0
```
front
└───modules
│ └───module1
│ │ └───submodule1
│ └───module2
│ └───ui
│ │ └───display
│ │ └───inputs
│ │ │ └───buttons
│ │ └───...
└───pages
└───...
```
## crwdns59822:0crwdne59822:0
crwdns59824:0crwdne59824:0 crwdns59826:0crwdne59826:0
## crwdns59828:0crwdne59828:0
crwdns59830:0crwdne59830:0
crwdns59832:0crwdne59832:0 crwdns59834:0crwdne59834:0
```
module1
└───components
│ └───component1
│ └───component2
└───constants
└───contexts
└───graphql
│ └───fragments
│ └───queries
│ └───mutations
└───hooks
│ └───internal
└───states
│ └───selectors
└───types
└───utils
```
### crwdns59836:0crwdne59836:0
crwdns59838:0crwdne59838:0
crwdns59840:0https://react.dev/reference/react#context-hookscrwdne59840:0
### crwdns59842:0crwdne59842:0
crwdns59844:0crwdne59844:0
crwdns59846:0https://graphql.org/learn/crwdne59846:0
- crwdns59848:0crwdne59848:0
crwdns59850:0crwdne59850:0 crwdns59852:0crwdne59852:0
crwdns59854:0https://graphql.org/learn/queries/#fragmentscrwdne59854:0
- crwdns59856:0crwdne59856:0
crwdns59858:0https://graphql.org/learn/queries/crwdne59858:0
- crwdns59860:0crwdne59860:0
crwdns59862:0https://graphql.org/learn/queries/#mutationscrwdne59862:0
### crwdns59864:0crwdne59864:0
crwdns59866:0https://react.dev/learn/reusing-logic-with-custom-hookscrwdne59866:0
### crwdns59868:0crwdne59868:0
crwdns59870:0crwdne59870:0 crwdns59872:0https://recoiljs.orgcrwdne59872:0
- crwdns59874:0https://recoiljs.org/docs/basic-tutorial/selectorscrwdne59874:0
crwdns59876:0crwdne59876:0
### crwdns59878:0crwdne59878:0
crwdns59880:0crwdne59880:0 crwdns59882:0crwdne59882:0
## crwdns59884:0crwdne59884:0
crwdns59886:0crwdne59886:0
crwdns59888:0crwdne59888:0 crwdns59890:0crwdne59890:0
crwdns59892:0crwdne59892:0
## crwdns59894:0crwdne59894:0
crwdns59896:0crwdne59896:0 crwdns59898:0crwdne59898:0
### crwdns59900:0crwdne59900:0
crwdns59902:0crwdne59902:0 crwdns59904:0crwdne59904:0
@@ -0,0 +1,96 @@
---
title: crwdns60700:0crwdne60700:0
image: crwdns60702:0crwdne60702:0
---
<Frame>
<img src="/images/user-guide/create-workspace/workspace-cover.png" alt="Header" />
</Frame>
## crwdns60704:0crwdne60704:0
### crwdns60706:0crwdne60706:0
```bash
npx nx start twenty-front
```
### crwdns60708:0crwdne60708:0
```bash
npx nx run twenty-front:graphql:generate --configuration=metadata
```
crwdns60710:0crwdne60710:0
```bash
npx nx run twenty-front:graphql:generate
```
### crwdns60712:0crwdne60712:0
```bash
npx nx run twenty-front:lint # pass --fix to fix lint errors
```
## crwdns60714:0crwdne60714:0
```bash
npx nx run twenty-front:lingui:extract
npx nx run twenty-front:lingui:compile
```
### crwdns60716:0crwdne60716:0
```bash
npx nx run twenty-front:test # run jest tests
npx nx run twenty-front:storybook:serve:dev # run storybook
npx nx run twenty-front:storybook:test # run tests # (needs yarn storybook:serve:dev to be running)
npx nx run twenty-front:storybook:coverage # (needs yarn storybook:serve:dev to be running)
```
## crwdns60718:0crwdne60718:0
crwdns60720:0crwdne60720:0
crwdns60722:0crwdne60722:0
- crwdns60724:0https://react.dev/crwdne60724:0
- crwdns60726:0https://www.apollographql.com/docs/crwdne60726:0
- crwdns60728:0https://the-guild.dev/graphql/codegencrwdne60728:0
- crwdns60730:0https://recoiljs.org/docs/introduction/core-conceptscrwdne60730:0
- crwdns60732:0https://www.typescriptlang.org/crwdne60732:0
crwdns60734:0crwdne60734:0
- crwdns60736:0https://jestjs.io/crwdne60736:0
- crwdns60738:0https://storybook.js.org/crwdne60738:0
crwdns60740:0crwdne60740:0
- crwdns60742:0https://yarnpkg.com/crwdne60742:0
- crwdns60744:0https://craco.js.org/docs/crwdne60744:0
- crwdns60746:0https://eslint.org/crwdne60746:0
## crwdns60748:0crwdne60748:0
### crwdns60750:0crwdne60750:0
crwdns60752:0https://reactrouter.com/crwdne60752:0
crwdns60754:0/developers/frontend-development/best-practices-front#managing-re-renderscrwdne60754:0
### crwdns60756:0crwdne60756:0
crwdns60758:0https://recoiljs.org/docs/introduction/core-conceptscrwdne60758:0
crwdns60760:0/developers/frontend-development/best-practices-front#state-managementcrwdne60760:0
## crwdns60762:0crwdne60762:0
crwdns60764:0https://jestjs.io/crwdnd60764:0https://storybook.js.org/crwdne60764:0
crwdns60766:0crwdne60766:0
crwdns60768:0crwdne60768:0
@@ -0,0 +1,183 @@
---
title: crwdns60516:0crwdne60516:0
image: crwdns60518:0crwdne60518:0
---
<Frame>
<img src="/images/user-guide/table-views/table.png" alt="Header" />
</Frame>
## crwdns60520:0crwdne60520:0
crwdns60522:0crwdne60522:0
crwdns60524:0crwdne60524:0
crwdns60526:0crwdne60526:0
## crwdns60528:0crwdne60528:0
crwdns60530:0crwdne60530:0
crwdns60532:0crwdne60532:0
## crwdns60534:0crwdne60534:0
crwdns60536:0crwdne60536:0
1. crwdns60538:0#what-is-a-hotkey-scope-crwdne60538:0
2. crwdns60540:0crwdne60540:0
crwdns60542:0crwdne60542:0
## crwdns60544:0crwdne60544:0
crwdns60546:0crwdne60546:0
1. crwdns60548:0crwdne60548:0
2. crwdns60550:0crwdne60550:0
crwdns60552:0crwdne60552:0
### crwdns60554:0crwdne60554:0
crwdns60556:0crwdne60556:0
```tsx
const PageListeningEnter = () => {
const {
setHotkeyScopeAndMemorizePreviousScope,
goBackToPreviousHotkeyScope,
} = usePreviousHotkeyScope();
// 1. Set the hotkey scope in a useEffect
useEffect(() => {
setHotkeyScopeAndMemorizePreviousScope(
ExampleHotkeyScopes.ExampleEnterPage,
);
// Revert to the previous hotkey scope when the component is unmounted
return () => {
goBackToPreviousHotkeyScope();
};
}, [goBackToPreviousHotkeyScope, setHotkeyScopeAndMemorizePreviousScope]);
// 2. Use the useScopedHotkeys hook
useScopedHotkeys(
Key.Enter,
() => {
// Some logic executed on this page when the user presses Enter
// ...
},
ExampleHotkeyScopes.ExampleEnterPage,
);
return <div>My page that listens for Enter</div>;
};
```
### crwdns60558:0crwdne60558:0
crwdns60560:0crwdne60560:0
crwdns60562:0crwdne60562:0
```tsx
const ExamplePageWithModal = () => {
const [showModal, setShowModal] = useState(false);
const {
setHotkeyScopeAndMemorizePreviousScope,
goBackToPreviousHotkeyScope,
} = usePreviousHotkeyScope();
const handleOpenModalClick = () => {
// 1. Set the hotkey scope when user opens the modal
setShowModal(true);
setHotkeyScopeAndMemorizePreviousScope(
ExampleHotkeyScopes.ExampleModal,
);
};
const handleModalClose = () => {
// 1. Revert to the previous hotkey scope when the modal is closed
setShowModal(false);
goBackToPreviousHotkeyScope();
};
return <div>
<h1>My page with a modal</h1>
<button onClick={handleOpenModalClick}>Open modal</button>
{showModal && <MyModalComponent onClose={handleModalClose} />}
</div>;
};
```
crwdns60564:0crwdne60564:0
```tsx
const MyDropdownComponent = ({ onClose }: { onClose: () => void }) => {
// 2. Use the useScopedHotkeys hook to listen for Escape.
// Note that escape is a common hotkey that could be used by many other components
// So it's important to use a hotkey scope to avoid conflicts
useScopedHotkeys(
Key.Escape,
() => {
onClose()
},
ExampleHotkeyScopes.ExampleModal,
);
return <div>My modal component</div>;
};
```
crwdns60566:0crwdne60566:0
crwdns60568:0crwdne60568:0
## crwdns60570:0crwdne60570:0
crwdns60572:0crwdne60572:0 crwdns60574:0crwdne60574:0
crwdns60576:0crwdne60576:0
crwdns60578:0crwdne60578:0
crwdns60580:0crwdne60580:0
```tsx
export enum PageHotkeyScope {
Settings = 'settings',
CreateWorkspace = 'create-workspace',
SignInUp = 'sign-in-up',
CreateProfile = 'create-profile',
PlanRequired = 'plan-required',
ShowPage = 'show-page',
PersonShowPage = 'person-show-page',
CompanyShowPage = 'company-show-page',
CompaniesPage = 'companies-page',
PeoplePage = 'people-page',
OpportunitiesPage = 'opportunities-page',
ProfilePage = 'profile-page',
WorkspaceMemberPage = 'workspace-member-page',
TaskPage = 'task-page',
}
```
crwdns60582:0crwdne60582:0
```tsx
export const currentHotkeyScopeState = createState<HotkeyScope>({
key: 'currentHotkeyScopeState',
defaultValue: INITIAL_HOTKEYS_SCOPE,
});
```
crwdns60584:0crwdne60584:0 crwdns60586:0crwdne60586:0
## crwdns60588:0crwdne60588:0
crwdns60590:0https://react-hotkeys-hook.vercel.app/docs/introcrwdne60590:0
crwdns60592:0crwdne60592:0
@@ -0,0 +1,8 @@
---
title: crwdns60136:0crwdne60136:0
description: crwdns60138:0crwdne60138:0
---
crwdns60140:0crwdne60140:0
crwdns60142:0https://storybook.twenty.comcrwdne60142:0
@@ -0,0 +1,295 @@
---
title: crwdns60388:0crwdne60388:0
image: crwdns60390:0crwdne60390:0
---
<Frame>
<img src="/images/user-guide/notes/notes_header.png" alt="Header" />
</Frame>
crwdns60392:0crwdne60392:0
crwdns60394:0crwdne60394:0
crwdns60396:0crwdne60396:0
crwdns60398:0crwdne60398:0
crwdns60400:0crwdne60400:0
## crwdns60402:0crwdne60402:0
### crwdns60404:0crwdne60404:0
crwdns60406:0crwdne60406:0
crwdns60408:0crwdne60408:0
```tsx
// ❌ Bad, harder to read, harder to import with code completion
const MyComponent = () => {
return <div>Hello World</div>;
};
export default MyComponent;
// ✅ Good, easy to read, easy to import with code completion
export function MyComponent() {
return <div>Hello World</div>;
};
```
### crwdns60410:0crwdne60410:0
crwdns60412:0crwdne60412:0
crwdns60414:0crwdne60414:0
```tsx
// ❌ Bad, no type
export const MyComponent = (props) => <div>Hello {props.name}</div>;
// ✅ Good, type
type MyComponentProps = {
name: string;
};
export const MyComponent = ({ name }: MyComponentProps) => <div>Hello {name}</div>;
```
#### crwdns60416:0crwdne60416:0
```tsx
/* ❌ - Bad, defines the component type annotations with `FC`
* - With `React.FC`, the component implicitly accepts a `children` prop
* even if it's not defined in the prop type. This might not always be
* desirable, especially if the component doesn't intend to render
* children.
*/
const EmailField: React.FC<{
value: string;
}> = ({ value }) => <TextInput value={value} disabled fullWidth />;
```
```tsx
/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the
* component's props
* - This method doesn't automatically include the children prop. If
* you want to include it, you have to specify it in OwnProps.
*/
type EmailFieldProps = {
value: string;
};
const EmailField = ({ value }: EmailFieldProps) => (
<TextInput value={value} disabled fullWidth />
);
```
#### crwdns60418:0crwdne60418:0
crwdns60420:0{...props}crwdne60420:0 crwdns60422:0crwdne60422:0
```tsx
/* ❌ - Bad, spreads a single variable prop into the underlying component
*/
const MyComponent = (props: OwnProps) => {
return <OtherComponent {...props} />;
}
```
```tsx
/* ✅ - Good, Explicitly lists all props
* - Enhances readability and maintainability
*/
const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
return <OtherComponent {...{ prop1, prop2, prop3 }} />;
};
```
crwdns60424:0crwdne60424:0
- crwdns60426:0crwdne60426:0
- crwdns60428:0crwdne60428:0
- crwdns60430:0crwdne60430:0
## crwdns60432:0crwdne60432:0
### crwdns60434:0crwdne60434:0
```tsx
// ❌ Bad, can return 'default' even if value is 0 or ''
const value = process.env.MY_VALUE || 'default';
// ✅ Good, will return 'default' only if value is null or undefined
const value = process.env.MY_VALUE ?? 'default';
```
### crwdns60436:0crwdne60436:0
```tsx
// ❌ Bad
onClick && onClick();
// ✅ Good
onClick?.();
```
## crwdns60438:0crwdne60438:0
### crwdns60440:0crwdne60440:0
crwdns60442:0crwdne60442:0
```tsx
// ❌ Bad
interface MyInterface {
name: string;
}
// ✅ Good
type MyType = {
name: string;
};
```
### crwdns60444:0crwdne60444:0
crwdns60446:0https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#literal-typescrwdne60446:0 crwdns60448:0crwdne60448:0
crwdns60450:0https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enumscrwdne60450:0
```tsx
// ❌ Bad, utilizes an enum
enum Color {
Red = "red",
Green = "green",
Blue = "blue",
}
let color = Color.Red;
```
```tsx
// ✅ Good, utilizes a string literal
let color: "red" | "green" | "blue" = "red";
```
#### crwdns60452:0crwdne60452:0
crwdns60454:0crwdne60454:0
crwdns60456:0crwdne60456:0
crwdns60458:0crwdne60458:0
```TSX
const {
setHotkeyScopeAndMemorizePreviousScope,
goBackToPreviousHotkeyScope,
} = usePreviousHotkeyScope();
setHotkeyScopeAndMemorizePreviousScope(
RelationPickerHotkeyScope.RelationPicker,
);
```
## crwdns60460:0crwdne60460:0
### crwdns60462:0crwdne60462:0
crwdns60464:0https://emotion.sh/docs/styledcrwdne60464:0
```tsx
// ❌ Bad
<div className="my-class">Hello World</div>
```
```tsx
// ✅ Good
const StyledTitle = styled.div`
color: red;
`;
```
crwdns60466:0crwdne60466:0
```tsx
// ❌ Bad
const Title = styled.div`
color: red;
`;
```
```tsx
// ✅ Good
const StyledTitle = styled.div`
color: red;
`;
```
### crwdns60468:0crwdne60468:0
crwdns60470:0crwdne60470:0
#### crwdns60472:0crwdne60472:0
crwdns60474:0crwdne60474:0 crwdns60476:0crwdne60476:0
#### crwdns60478:0crwdne60478:0
crwdns60480:0crwdne60480:0 crwdns60482:0crwdne60482:0
```tsx
// ❌ Bad, directly specifies style values without utilizing the theme
const StyledButton = styled.button`
color: #333333;
font-size: 1rem;
font-weight: 400;
margin-left: 4px;
border-radius: 50px;
`;
```
```tsx
// ✅ Good, utilizes the theme
const StyledButton = styled.button`
color: ${({ theme }) => theme.font.color.primary};
font-size: ${({ theme }) => theme.font.size.md};
font-weight: ${({ theme }) => theme.font.weight.regular};
margin-left: ${({ theme }) => theme.spacing(1)};
border-radius: ${({ theme }) => theme.border.rounded};
`;
```
## crwdns60484:0crwdne60484:0
crwdns60486:0crwdne60486:0 crwdns60488:0crwdne60488:0 crwdns60490:0crwdne60490:0
```tsx
// ❌ Bad
import { type Meta, type StoryObj } from '@storybook/react';
// ❌ Bad
import type { Meta, StoryObj } from '@storybook/react';
// ✅ Good
import { Meta, StoryObj } from '@storybook/react';
```
### crwdns60492:0crwdne60492:0
- crwdns60494:0crwdne60494:0
- crwdns60496:0crwdne60496:0 crwdns60498:0crwdne60498:0
- crwdns60500:0crwdne60500:0
### crwdns60502:0crwdne60502:0
crwdns60504:0crwdne60504:0 crwdns60506:0crwdne60506:0
crwdns60508:0crwdne60508:0 crwdns60510:0https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.htmlcrwdne60510:0 crwdns60512:0crwdne60512:0
crwdns60514:0crwdne60514:0
@@ -0,0 +1,65 @@
---
title: crwdns59906:0crwdne59906:0
info: crwdns59908:0crwdne59908:0
image: crwdns59910:0crwdne59910:0
---
<Frame>
<img src="/images/user-guide/objects/objects.png" alt="Header" />
</Frame>
crwdns59912:0crwdne59912:0
crwdns59914:0crwdne59914:0
## crwdns59916:0crwdne59916:0
1. crwdns59918:0https://www.figma.com/file/xt8O9mFeLl46C5InWwoMrN/Twentycrwdne59918:0
2. crwdns59920:0crwdne59920:0
crwdns59922:0crwdne59922:0
<Warning>
crwdns59924:0crwdne59924:0
</Warning>
## crwdns59926:0crwdne59926:0
crwdns59928:0crwdne59928:0 crwdns59930:0crwdne59930:0
- crwdns59932:0crwdne59932:0 crwdns59934:0crwdne59934:0 crwdns59936:0crwdne59936:0 crwdns59938:0crwdne59938:0
- crwdns59940:0crwdne59940:0 crwdns59942:0crwdne59942:0
- crwdns59944:0crwdne59944:0 crwdns59946:0crwdne59946:0 crwdns59948:0crwdne59948:0
## crwdns59950:0crwdne59950:0
crwdns59952:0crwdne59952:0
### crwdns59954:0crwdne59954:0
crwdns59956:0crwdne59956:0 crwdns59958:0https://www.figma.com/dev-mode/crwdne59958:0
crwdns59960:0crwdne59960:0
### crwdns59962:0crwdne59962:0
crwdns59964:0crwdne59964:0 crwdns59966:0crwdne59966:0 crwdns59968:0crwdne59968:0
1. crwdns59970:0crwdne59970:0
2. crwdns59972:0crwdne59972:0 crwdns59974:0crwdne59974:0
crwdns59976:0https://help.figma.com/hc/en-uscrwdne59976:0
### crwdns59978:0crwdne59978:0
crwdns59980:0crwdne59980:0
### crwdns59982:0crwdne59982:0
crwdns59984:0https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extensioncrwdne59984:0
crwdns59986:0crwdne59986:0
## crwdns59988:0crwdne59988:0
1. crwdns59990:0crwdne59990:0
2. crwdns59992:0crwdne59992:0 crwdns59994:0crwdne59994:0
@@ -0,0 +1,32 @@
---
title: crwdns59996:0crwdne59996:0
description: crwdns59998:0crwdne59998:0
---
crwdns64224:0{ CardTitle }crwdne64224:0
## crwdns60000:0crwdne60000:0
<CardGroup cols={2}>
<Card href="/developers/local-setup" img="/images/user-guide/fields/field.png">
<CardTitle>crwdns64226:0crwdne64226:0</CardTitle>crwdns60002:0crwdne60002:0</Card>
<Card href="/developers/self-hosting/docker-compose" img="/images/user-guide/integrations/plug.png">
<CardTitle>crwdns64228:0crwdne64228:0</CardTitle>crwdns60004:0crwdne60004:0</Card>
<Card href="/developers/api-and-webhooks/api" img="/images/user-guide/api/api.png">
<CardTitle>crwdns64230:0crwdne64230:0</CardTitle>crwdns60006:0crwdne60006:0</Card>
</CardGroup>
## crwdns60008:0crwdne60008:0
<CardGroup cols={2}>
<Card href="/developers/bug-and-requests" img="/images/user-guide/api/api.png">
<CardTitle>crwdns64232:0crwdne64232:0</CardTitle>crwdns60010:0crwdne60010:0</Card>
<Card href="/developers/frontend-development/frontend-commands" img="/images/user-guide/create-workspace/workspace-cover.png">
<CardTitle>crwdns64234:0crwdne64234:0</CardTitle>crwdns60012:0crwdne60012:0</Card>
<Card href="/developers/backend-development/server-commands" img="/images/user-guide/kanban-views/kanban.png">
<CardTitle>crwdns64236:0crwdne64236:0</CardTitle>crwdns60014:0crwdne60014:0</Card>
</CardGroup>
@@ -0,0 +1,306 @@
---
title: crwdns60770:0crwdne60770:0
description: "crwdns60772:0crwdne60772:0"
image: crwdns60774:0crwdne60774:0
---
<Frame>
<img src="/images/user-guide/fields/field.png" alt="Header" />
</Frame>
## crwdns60776:0crwdne60776:0
<Tabs>
<Tab title="Linux and MacOS">
crwdns60778:0crwdne60778:0
- crwdns60780:0https://git-scm.com/book/en/v2/Getting-Started-Installing-Gitcrwdne60780:0
- crwdns60782:0https://nodejs.org/en/downloadcrwdne60782:0
- crwdns60784:0https://yarnpkg.com/getting-started/installcrwdne60784:0
- crwdns60786:0https://github.com/nvm-sh/nvm/blob/master/README.mdcrwdne60786:0
<Warning>
crwdns60788:0crwdne60788:0 crwdns60790:0crwdne60790:0
crwdns60792:0crwdne60792:0
</Warning>
</Tab>
<Tab title="Windows (WSL)">
1. crwdns60794:0crwdne60794:0
```powershell
wsl --install
```
crwdns60796:0crwdne60796:0 crwdns60798:0crwdne60798:0
crwdns60800:0crwdne60800:0 crwdns60802:0crwdne60802:0
crwdns60804:0crwdne60804:0
2. crwdns60806:0crwdne60806:0
```bash
sudo apt-get install git
git config --global user.name "Your Name"
git config --global user.email "youremail@domain.com"
```
3. crwdns60808:0crwdne60808:0
<Warning>
crwdns64054:0crwdne64054:0 crwdns64056:0crwdne64056:0
</Warning>
```bash
sudo apt-get install curl
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
```
crwdns64058:0crwdne64058:0 crwdns64060:0crwdne64060:0
```bash
nvm install # installs recommended node version
nvm use # use recommended node version
corepack enable
```
</Tab>
</Tabs>
---
## crwdns64062:0crwdne64062:0
crwdns64064:0crwdne64064:0
<Tabs>
<Tab title="SSH (Recommended)">
crwdns64066:0https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-sshcrwdne64066:0
crwdns64068:0crwdne64068:0
</Tab>
<Tab title="HTTPS">
```bash
git clone https://github.com/twentyhq/twenty.git
```
</Tab>
</Tabs>
## crwdns64070:0crwdne64070:0
```bash
cd twenty
```
crwdns64072:0crwdne64072:0
## crwdns64074:0crwdne64074:0
<Tabs>
<Tab title="Linux">crwdns64076:0https://www.postgresql.org/download/linux/crwdne64076:0
````
**Option 2:** If you have docker installed:
```bash
make postgres-on-docker
```
````
</Tab>
<Tab title="Mac OS">crwdns64080:0crwdne64080:0
````
```bash
brew install postgresql@16
export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
brew services start postgresql@16
psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
```
You can verify if the PostgreSQL server is running by executing:
```bash
brew services list
```
The installer might not create the `postgres` user by default when installing
via Homebrew on MacOS. Instead, it creates a PostgreSQL role that matches your macOS
username (e.g., "john").
To check and create the `postgres` user if necessary, follow these steps:
```bash
# Connect to PostgreSQL
psql postgres
or
psql -U $(whoami) -d postgres
```
Once at the psql prompt (postgres=#), run:
```bash
# List existing PostgreSQL roles
\du
```
You'll see output similar to:
```bash
Role name | Attributes | Member of
-----------+-------------+-----------
john | Superuser | {}
```
If you do not see a `postgres` role listed, proceed to the next step.
Create the `postgres` role manually:
```bash
CREATE ROLE postgres WITH SUPERUSER LOGIN;
```
This creates a superuser role named `postgres` with login access.
**Option 2:** If you have docker installed:
```bash
make postgres-on-docker
```
````
</Tab>
<Tab title="Windows (WSL)">crwdns64084:0crwdne64084:0
````
**Option 1:** To provision your Postgresql locally:
Use the following link to install Postgresql on your Linux virtual machine: [Postgresql Installation](https://www.postgresql.org/download/linux/)
```bash
psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;"
```
Note: You might need to add `sudo -u postgres` to the command before `psql` to avoid permission errors.
**Option 2:** If you have docker installed:
Running Docker on WSL adds an extra layer of complexity.
Only use this option if you are comfortable with the extra steps involved, including turning on [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl).
```bash
make postgres-on-docker
```
````
</Tab>
</Tabs>
crwdns64088:0localhost:5432crwdne64088:0
## crwdns64090:0crwdne64090:0
crwdns64092:0crwdne64092:0
<Tabs>
<Tab title="Linux">crwdns64094:0https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/crwdne64094:0
````
**Option 2:** If you have docker installed:
```bash
make redis-on-docker
```
````
</Tab>
<Tab title="Mac OS">crwdns64098:0crwdne64098:0
````
**Option 2:** If you have docker installed:
```bash
make redis-on-docker
```
````
</Tab>
<Tab title="Windows (WSL)">crwdns64102:0https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/crwdne64102:0
````
**Option 2:** If you have docker installed:
```bash
make redis-on-docker
```
````
</Tab>
</Tabs>
crwdns64106:0https://redis.io/insight/crwdne64106:0
## crwdns64108:0crwdne64108:0
crwdns64110:0crwdne64110:0 crwdns64112:0https://docs.twenty.com/developers/self-hosting/setupcrwdne64112:0
crwdns64114:0crwdne64114:0
```bash
cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
```
## crwdns64116:0crwdne64116:0
crwdns64118:0crwdne64118:0
```bash
yarn
```
crwdns64120:0crwdne64120:0
## crwdns64122:0crwdne64122:0
<Tabs>
<Tab title="Linux">
crwdns64124:0crwdne64124:0
crwdns64126:0https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/crwdne64126:0
</Tab>
<Tab title="Mac OS">
crwdns64128:0crwdne64128:0 crwdns64130:0crwdne64130:0
</Tab>
<Tab title="Windows (WSL)">
crwdns64132:0crwdne64132:0
crwdns64134:0https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/crwdne64134:0
</Tab>
</Tabs>
crwdns64136:0crwdne64136:0
```bash
npx nx database:reset twenty-server
```
crwdns64138:0crwdne64138:0
```bash
npx nx start twenty-server
npx nx worker twenty-server
npx nx start twenty-front
```
crwdns64140:0crwdne64140:0
```bash
npx nx start
```
## crwdns64142:0crwdne64142:0
crwdns64144:0crwdne64144:0
crwdns64146:0http://localhost:3001crwdne64146:0
crwdns64148:0crwdne64148:0
crwdns64150:0crwdne64150:0
- crwdns64152:0http://localhost:3000crwdne64152:0
- crwdns64154:0http://localhost:3000/graphqlcrwdne64154:0
- crwdns64156:0http://localhost:3000/restcrwdne64156:0
## crwdns64158:0crwdne64158:0
crwdns64160:0https://docs.twenty.com/developers/self-hosting/troubleshootingcrwdne64160:0
@@ -0,0 +1,45 @@
---
title: crwdns60658:0crwdne60658:0
image: crwdns60660:0crwdne60660:0
---
<Frame>
<img src="/images/user-guide/notes/notes_header.png" alt="Header" />
</Frame>
<Warning>
crwdns60662:0crwdne60662:0 crwdns60664:0crwdne60664:0
</Warning>
## crwdns60666:0crwdne60666:0
crwdns60668:0https://github.com/twentyhq/twenty/tree/main/packages/twenty-docker/k8scrwdne60668:0
### crwdns60670:0crwdne60670:0
crwdns60672:0crwdne60672:0 crwdns60674:0crwdne60674:0
crwdns60676:0https://coolify.io/docs/get-started/introductioncrwdne60676:0
### crwdns60678:0crwdne60678:0
crwdns60680:0crwdne60680:0
crwdns60682:0https://easypanel.io/docs/templates/twentycrwdne60682:0
### crwdns60684:0crwdne60684:0
crwdns60686:0crwdne60686:0
crwdns60688:0https://elest.io/open-source/twentycrwdne60688:0
### crwdns60690:0crwdne60690:0
crwdns60692:0crwdne60692:0
crwdns60694:0https://railway.com/button.svgcrwdnd60694:0https://railway.com/deploy/nAL3hAcrwdne60694:0
## crwdns60696:0crwdne60696:0
crwdns60698:0crwdne60698:0
@@ -0,0 +1,212 @@
---
title: crwdns59558:0crwdne59558:0
image: crwdns59560:0crwdne59560:0
---
<Frame>
<img src="/images/user-guide/objects/objects.png" alt="Header" />
</Frame>
<Warning>crwdns59562:0https://docs.twenty.com/developers/local-setupcrwdne59562:0</Warning>
## crwdns59564:0crwdne59564:0
crwdns59566:0crwdne59566:0 crwdns59568:0crwdne59568:0
crwdns59570:0crwdne59570:0 crwdns59572:0crwdne59572:0
crwdns59574:0https://docs.twenty.com/developers/self-hosting/setupcrwdne59574:0 crwdns59576:0crwdne59576:0
## crwdns59578:0crwdne59578:0
- crwdns59580:0crwdne59580:0 crwdns59582:0crwdne59582:0
- crwdns59584:0crwdne59584:0
## crwdns59586:0crwdne59586:0
crwdns59588:0crwdne59588:0
```bash
bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
crwdns59590:0crwdne59590:0
```bash
VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
- crwdns59592:0crwdne59592:0
- crwdns59594:0crwdne59594:0
## crwdns59596:0crwdne59596:0
crwdns59598:0crwdne59598:0
### crwdns59600:0crwdne59600:0
1. crwdns59602:0crwdne59602:0
crwdns59604:0crwdne59604:0
```bash
curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
```
2. crwdns59606:0crwdne59606:0
crwdns59608:0crwdne59608:0
```bash
openssl rand -base64 32
```
crwdns59610:0crwdne59610:0
3. crwdns59612:0crwdne59612:0
crwdns59614:0crwdne59614:0
```ini
APP_SECRET=first_random_string
```
4. crwdns59616:0crwdne59616:0
crwdns59618:0crwdne59618:0
```ini
PG_DATABASE_PASSWORD=my_strong_password
```
### crwdns59620:0crwdne59620:0
crwdns59622:0crwdne59622:0
```bash
curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
```
### crwdns59624:0crwdne59624:0
crwdns59626:0crwdne59626:0
```bash
docker compose up -d
```
### crwdns59628:0crwdne59628:0
crwdns59630:0http://localhost:3000crwdne59630:0
crwdns59632:0crwdne59632:0
```bash
curl http://localhost:3000
```
## crwdns59634:0crwdne59634:0
### crwdns59636:0crwdne59636:0
crwdns59638:0crwdne59638:0 crwdns59640:0crwdne59640:0
#### crwdns59642:0crwdne59642:0
- crwdns59644:0crwdne59644:0
- crwdns59646:0crwdne59646:0
- crwdns59648:0crwdne59648:0
- crwdns59650:0crwdne59650:0
- crwdns59652:0crwdne59652:0
### crwdns59654:0crwdne59654:0
crwdns59656:0crwdne59656:0 crwdns59658:0crwdne59658:0
crwdns59660:0crwdne59660:0
crwdns59662:0crwdne59662:0
#### crwdns59664:0crwdne59664:0
1. crwdns59666:0crwdne59666:0
- crwdns59668:0crwdne59668:0
crwdns59670:0crwdne59670:0
```ini
SERVER_URL=http://your-domain-or-ip:3000
```
- crwdns59672:0crwdne59672:0
crwdns59674:0crwdne59674:0
```ini
SERVER_URL=https://your-domain-or-ip
```
- crwdns59676:0crwdne59676:0
crwdns59678:0crwdne59678:0
```ini
SERVER_URL=https://your-domain-or-ip:custom-port
```
2. crwdns59680:0crwdne59680:0
crwdns59682:0crwdne59682:0
```ini
SERVER_URL=http(s)://your-domain-or-ip:your-port
```
crwdns59684:0crwdne59684:0
- crwdns59686:0crwdne59686:0
```ini
SERVER_URL=http://123.45.67.89:3000
```
- crwdns59688:0crwdne59688:0
```ini
SERVER_URL=https://mytwentyapp.com
```
3. crwdns59690:0crwdne59690:0
crwdns59692:0crwdne59692:0
```bash
docker compose down
docker compose up -d
```
#### crwdns59694:0crwdne59694:0
- crwdns59696:0crwdne59696:0
crwdns59698:0crwdne59698:0 crwdns59700:0crwdne59700:0
- crwdns59702:0crwdne59702:0
crwdns59704:0crwdne59704:0
- crwdns59706:0crwdne59706:0
crwdns59708:0crwdne59708:0
#### crwdns59710:0crwdne59710:0
- crwdns59712:0crwdne59712:0
crwdns59714:0crwdne59714:0
- crwdns59716:0crwdne59716:0
crwdns59718:0crwdne59718:0
## crwdns59720:0crwdne59720:0
crwdns59722:0https://docs.twenty.com/developers/self-hosting/troubleshootingcrwdne59722:0
@@ -0,0 +1,242 @@
---
title: crwdns61106:0crwdne61106:0
image: crwdns61108:0crwdne61108:0
---
<Frame>
<img src="/images/user-guide/table-views/table.png" alt="Header" />
</Frame>
crwdns61110:0crwdne61110:0
# crwdns61112:0crwdne61112:0
<Warning>crwdns61114:0https://docs.twenty.com/developers/self-hosting/docker-composecrwdne61114:0</Warning>
crwdns61116:0crwdne61116:0
crwdns61118:0crwdne61118:0
## crwdns61120:0crwdne61120:0 crwdns61122:0crwdne61122:0
```bash
IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # default
```
crwdns61124:0crwdne61124:0
1. crwdns61126:0crwdne61126:0
2. crwdns61128:0crwdne61128:0
3. crwdns61130:0crwdne61130:0
4. crwdns61132:0crwdne61132:0
<Warning>
crwdns61134:0crwdne61134:0 crwdns61136:0crwdne61136:0
</Warning>
crwdns61138:0crwdne61138:0
- crwdns61140:0crwdne61140:0
- crwdns61142:0crwdne61142:0
- crwdns61144:0crwdne61144:0
- crwdns61146:0crwdne61146:0
- crwdns61148:0crwdne61148:0
- crwdns61150:0crwdne61150:0
crwdns61152:0/images/user-guide/setup/admin-panel-config-variables.pngcrwdne61152:0
<Warning>
crwdns61154:0crwdne61154:0
crwdns61156:0crwdne61156:0
crwdns61158:0https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.tscrwdne61158:0
## crwdns61160:0crwdne61160:0 crwdns61162:0crwdne61162:0
```bash
IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
```
crwdns61164:0crwdne61164:0
1. crwdns61166:0crwdne61166:0
2. crwdns61168:0crwdne61168:0
3. crwdns61170:0crwdne61170:0
4. crwdns61172:0crwdne61172:0
## crwdns61174:0crwdne61174:0
### crwdns61176:0crwdne61176:0
1. crwdns61178:0https://console.cloud.google.com/crwdne61178:0
2. crwdns61180:0crwdne61180:0
3. crwdns61182:0crwdne61182:0
- crwdns61184:0https://console.cloud.google.com/apis/library/gmail.googleapis.comcrwdne61184:0
- crwdns61186:0https://console.cloud.google.com/apis/library/calendar-json.googleapis.comcrwdne61186:0
- crwdns61188:0https://console.cloud.google.com/apis/library/people.googleapis.comcrwdne61188:0
### crwdns61190:0crwdne61190:0
1. crwdns61192:0https://console.cloud.google.com/apis/credentialscrwdne61192:0
2. crwdns61194:0crwdne61194:0
3. crwdns61196:0crwdne61196:0
- crwdns64016:0{your-domain}crwdne64016:0
- crwdns64018:0{your-domain}crwdne64018:0
### crwdns61202:0crwdne61202:0
1. crwdns61204:0crwdne61204:0
2. crwdns61206:0crwdne61206:0
3. crwdns61208:0crwdne61208:0
- crwdns61210:0crwdne61210:0
- crwdns61212:0crwdne61212:0
- crwdns64020:0{client-id}crwdne64020:0
- crwdns64022:0{client-secret}crwdne64022:0
- crwdns64024:0{your-domain}crwdne64024:0
- crwdns64026:0{your-domain}crwdne64026:0
<Warning>crwdns61222:0crwdne61222:0</Warning>
crwdns61224:0https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10crwdne61224:0
- crwdns61226:0crwdne61226:0
- crwdns61228:0crwdne61228:0
- crwdns61230:0crwdne61230:0
### crwdns61232:0crwdne61232:0
crwdns61234:0crwdne61234:0
crwdns61236:0https://console.cloud.google.com/apis/credentials/consentcrwdne61236:0
## crwdns61238:0crwdne61238:0
<Warning>
crwdns61240:0https://admin.microsoft.com/Adminportal/Homecrwdne61240:0 crwdns61242:0crwdne61242:0
</Warning>
### crwdns61244:0crwdne61244:0
crwdns61246:0https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2crwdne61246:0
### crwdns61248:0crwdne61248:0
crwdns61250:0crwdne61250:0
- crwdns61252:0crwdne61252:0
- crwdns61254:0crwdne61254:0
- crwdns61256:0crwdne61256:0
- crwdns61258:0crwdne61258:0
- crwdns61260:0crwdne61260:0
- crwdns61262:0crwdne61262:0
- crwdns61264:0crwdne61264:0
- crwdns61266:0crwdne61266:0
crwdns61268:0crwdne61268:0 crwdns61270:0crwdne61270:0
### crwdns61272:0crwdne61272:0
crwdns61274:0crwdne61274:0
- crwdns64028:0{your-domain}crwdne64028:0
- crwdns64030:0{your-domain}crwdne64030:0
### crwdns61280:0crwdne61280:0
1. crwdns61282:0crwdne61282:0
2. crwdns61284:0crwdne61284:0
3. crwdns61286:0crwdne61286:0
- crwdns61288:0crwdne61288:0
- crwdns61290:0crwdne61290:0
- crwdns61292:0crwdne61292:0
- crwdns64032:0{client-id}crwdne64032:0
- crwdns64034:0{client-secret}crwdne64034:0
- crwdns64036:0{your-domain}crwdne64036:0
- crwdns64038:0{your-domain}crwdne64038:0
<Warning>crwdns61302:0crwdne61302:0</Warning>
### crwdns61304:0crwdne61304:0
crwdns61306:0https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9crwdne61306:0
- crwdns61308:0crwdne61308:0
- crwdns61310:0crwdne61310:0
- crwdns61312:0crwdne61312:0
- crwdns61314:0crwdne61314:0
- crwdns61316:0crwdne61316:0
- crwdns61318:0crwdne61318:0
- crwdns61320:0crwdne61320:0
### crwdns61322:0crwdne61322:0
crwdns61324:0crwdne61324:0
crwdns61326:0crwdne61326:0
## crwdns61328:0crwdne61328:0
crwdns61330:0crwdne61330:0
crwdns61332:0crwdne61332:0
```bash
# from your worker container
yarn command:prod cron:messaging:messages-import
yarn command:prod cron:messaging:message-list-fetch
yarn command:prod cron:calendar:calendar-event-list-fetch
yarn command:prod cron:calendar:calendar-events-import
yarn command:prod cron:messaging:ongoing-stale
yarn command:prod cron:calendar:ongoing-stale
yarn command:prod cron:workflow:automated-cron-trigger
```
## crwdns61334:0crwdne61334:0
1. crwdns61336:0crwdne61336:0
2. crwdns61338:0crwdne61338:0
3. crwdns61340:0crwdne61340:0
<ArticleTabs label1="Gmail" label2="Office365" label3="Smtp4dev">
<ArticleTab>
crwdns61342:0https://support.google.com/accounts/answer/185833crwdne61342:0
- crwdns61344:0crwdne61344:0
- crwdns61346:0crwdne61346:0
- crwdns61348:0crwdne61348:0
- crwdns61350:0crwdne61350:0
- crwdns61352:0crwdne61352:0
</ArticleTab>
<ArticleTab>
crwdns61354:0https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9crwdne61354:0
- crwdns61356:0crwdne61356:0
- crwdns61358:0crwdne61358:0
- crwdns61360:0crwdne61360:0
- crwdns61362:0crwdne61362:0
- crwdns61364:0crwdne61364:0
</ArticleTab>
<ArticleTab>
crwdns61366:0crwdne61366:0
- crwdns61368:0crwdne61368:0
- crwdns61370:0http://localhost:8090crwdne61370:0
- crwdns61372:0crwdne61372:0
- crwdns61374:0crwdne61374:0
- crwdns61376:0crwdne61376:0
- crwdns61378:0crwdne61378:0
</ArticleTab>
</ArticleTabs>
<Warning>crwdns61380:0crwdne61380:0</Warning>
@@ -0,0 +1,220 @@
---
title: crwdns60918:0crwdne60918:0
image: crwdns60920:0crwdne60920:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/20.png" alt="Header" />
</Frame>
## crwdns60922:0crwdne60922:0
crwdns60924:0crwdne60924:0
### crwdns60926:0crwdne60926:0
#### crwdns60928:0crwdne60928:0
crwdns60930:0crwdne60930:0
crwdns60932:0crwdne60932:0
crwdns60934:0crwdne60934:0 crwdns60936:0crwdne60936:0
crwdns60938:0crwdne60938:0 crwdns60940:0crwdne60940:0
crwdns60942:0crwdne60942:0
```sh
# Update the PG_DATABASE_PASSWORD in .env
docker compose down --volumes
docker compose up -d
```
#### crwdns60944:0crwdne60944:0
crwdns60946:0crwdne60946:0 crwdns60948:0crwdne60948:0
```
git config --global core.autocrlf false
```
crwdns60950:0crwdne60950:0
#### crwdns60952:0crwdne60952:0
crwdns60954:0crwdne60954:0
crwdns60956:0crwdne60956:0
crwdns60958:0crwdne60958:0
#### crwdns60960:0crwdne60960:0
crwdns60962:0crwdne60962:0
#### crwdns60964:0crwdne60964:0
crwdns60966:0crwdne60966:0 crwdns60968:0crwdne60968:0
#### crwdns60970:0crwdne60970:0
crwdns60972:0crwdne60972:0 crwdns60974:0crwdne60974:0
```
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
```
#### crwdns60976:0crwdne60976:0
crwdns60978:0crwdne60978:0
crwdns60980:0crwdne60980:0 crwdns60982:0crwdne60982:0
crwdns60984:0crwdne60984:0
crwdns60986:0crwdne60986:0
crwdns60988:0crwdne60988:0
crwdns60990:0crwdne60990:0
crwdns60992:0crwdne60992:0
crwdns60994:0crwdne60994:0
crwdns60996:0crwdne60996:0 crwdns60998:0crwdne60998:0
crwdns61000:0crwdne61000:0
#### crwdns61002:0crwdne61002:0
crwdns61004:0crwdne61004:0
#### crwdns61006:0crwdne61006:0
crwdns61008:0crwdne61008:0 crwdns61010:0crwdne61010:0
```
npx nx worker twenty-server
```
#### crwdns61012:0crwdne61012:0
crwdns61014:0crwdne61014:0 crwdns61016:0https://admin.microsoft.com/Adminportal/Homecrwdne61016:0
crwdns61018:0crwdne61018:0 crwdns61020:0crwdne61020:0 crwdns61022:0https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-existcrwdne61022:0
#### crwdns61024:0crwdne61024:0
crwdns61026:0crwdne61026:0
#### crwdns61028:0crwdne61028:0
crwdns61030:0crwdne61030:0
#### crwdns61032:0crwdne61032:0
- crwdns61034:0https://webhook-test.com/crwdne61034:0
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/self-hosting/webhook-test.jpg" alt="Webhook test" />
</div>
crwdns61036:0crwdne61036:0
crwdns61038:0crwdne61038:0
crwdns61040:0crwdne61040:0 crwdns61042:0crwdne61042:0
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/self-hosting/webhook-settings.jpg" alt="Webhook settings" />
</div>
crwdns61044:0crwdne61044:0
crwdns61046:0https://webhook-test.com/crwdne61046:0
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/self-hosting/webhook-test-result.jpg" alt="Webhook test result" />
</div>
crwdns61048:0crwdne61048:0 crwdns61050:0crwdne61050:0
#### crwdns61052:0crwdne61052:0
crwdns61054:0crwdne61054:0
```
plugins: [
react({ jsxImportSource: '@emotion/react' }),
tsconfigPaths(),
svgr(),
dts(dtsConfig),
// checker(checkersConfig),
wyw({
include: [
'**/OverflowingTextWithTooltip.tsx',
'**/Chip.tsx',
'**/Tag.tsx',
'**/Avatar.tsx',
'**/AvatarChip.tsx',
],
babelOptions: {
presets: ['@babel/preset-typescript', '@babel/preset-react'],
},
}),
],
```
#### crwdns61056:0crwdne61056:0
crwdns61058:0crwdne61058:0
### crwdns61060:0crwdne61060:0
#### crwdns61062:0crwdne61062:0
crwdns61064:0crwdne61064:0
1. crwdns61066:0crwdne61066:0
```bash
docker exec -it twenty-server-1 yarn
docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed
```
2. crwdns61068:0crwdne61068:0
```bash
docker compose down
docker compose up -d
```
crwdns61070:0crwdne61070:0
#### crwdns61072:0crwdne61072:0
crwdns61074:0crwdne61074:0
1. crwdns61076:0crwdne61076:0
crwdns61078:0crwdne61078:0
2. crwdns61080:0crwdne61080:0
- crwdns61082:0crwdne61082:0
- crwdns61084:0crwdne61084:0
3. crwdns61086:0crwdne61086:0
crwdns61088:0crwdne61088:0
#### crwdns61090:0crwdne61090:0
crwdns61092:0crwdne61092:0
## crwdns61094:0crwdne61094:0
crwdns61096:0crwdne61096:0
- crwdns61098:0crwdne61098:0
crwdns61100:0crwdne61100:0
```bash
docker compose logs
```
- crwdns61102:0crwdne61102:0
crwdns61104:0https://github.com/twentyhq/twenty/issuescrwdnd61104:0https://discord.gg/cx5n4Jzs57crwdne61104:0
@@ -0,0 +1,382 @@
---
title: crwdns59094:0crwdne59094:0
image: crwdns59096:0crwdne59096:0
---
<Frame>
<img src="/images/user-guide/notes/notes_header.png" alt="Header" />
</Frame>
## crwdns59098:0crwdne59098:0
crwdns64006:0{db_container_name_or_id}crwdnd64006:0{postgres_user}crwdne64006:0
crwdns64008:0{db_container_name_or_id}crwdnd64008:0{postgres_user}crwdne64008:0
crwdns59104:0crwdne59104:0
1. crwdns59106:0crwdne59106:0
2. crwdns59108:0crwdne59108:0 crwdns59110:0crwdne59110:0
3. crwdns59112:0crwdne59112:0
crwdns59114:0crwdne59114:0
crwdns59116:0crwdne59116:0
## crwdns59118:0crwdne59118:0
## crwdns59120:0crwdne59120:0
crwdns59122:0crwdne59122:0 crwdns59124:0crwdne59124:0
## crwdns59126:0crwdne59126:0
### crwdns59128:0crwdne59128:0
crwdns59130:0crwdne59130:0
crwdns59132:0crwdne59132:0
crwdns59134:0crwdne59134:0 crwdns59136:0crwdne59136:0
```bash
yarn command:prod cache:flush
```
### crwdns59138:0crwdne59138:0
crwdns59140:0crwdne59140:0
crwdns59142:0crwdne59142:0
### crwdns59144:0crwdne59144:0
crwdns59146:0crwdne59146:0
crwdns59148:0crwdne59148:0
```bash
yarn command:prod cache:flush
```
crwdns59150:0crwdne59150:0
### crwdns59152:0crwdne59152:0
crwdns59154:0crwdne59154:0
#### crwdns59156:0crwdne59156:0
crwdns59158:0crwdne59158:0
crwdns59160:0crwdne59160:0 crwdns59162:0crwdne59162:0
### crwdns59164:0crwdne59164:0
crwdns59166:0crwdne59166:0
crwdns59168:0crwdne59168:0
crwdns59170:0crwdne59170:0
crwdns59172:0$APP_VERSIONcrwdne59172:0
crwdns59174:0crwdne59174:0
#### crwdns59176:0crwdne59176:0
crwdns59178:0crwdne59178:0
### crwdns59180:0crwdne59180:0
crwdns59182:0crwdne59182:0
```
yarn database:migrate:prod
yarn command:prod upgrade
```
#### crwdns59184:0crwdne59184:0
crwdns59186:0crwdne59186:0
crwdns59188:0crwdne59188:0
### crwdns59190:0crwdne59190:0
crwdns59192:0crwdne59192:0
```
yarn database:migrate:prod
yarn command:prod upgrade
```
### crwdns59194:0crwdne59194:0
crwdns59196:0crwdne59196:0
```
yarn database:migrate:prod
yarn command:prod upgrade
```
#### crwdns59198:0crwdne59198:0
crwdns59200:0crwdne59200:0
crwdns59202:0https://github.com/twentyhq/twenty/blob/v0.50.0/packages/twenty-docker/docker-compose.ymlcrwdne59202:0
### crwdns59204:0crwdne59204:0
crwdns59206:0crwdne59206:0
```
yarn database:migrate:prod
yarn command:prod upgrade
```
### crwdns59208:0crwdne59208:0
crwdns59210:0crwdne59210:0
```
yarn database:migrate:prod
yarn command:prod upgrade
```
crwdns59212:0crwdne59212:0
#### crwdns59214:0crwdne59214:0
crwdns59216:0crwdne59216:0
#### crwdns59218:0crwdne59218:0
crwdns59220:0crwdne59220:0
1. crwdns59222:0crwdne59222:0
```
docker exec -it twenty-db-1 sh
pg_dump -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} > databases_backup.sql
exit
docker cp twenty-db-1:/home/postgres/databases_backup.sql .
```
crwdns59224:0crwdne59224:0
2. crwdns59226:0https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.ymlcrwdne59226:0
3. crwdns59228:0crwdne59228:0
```
docker cp databases_backup.sql twenty-db-1:/databases_backup.sql
docker exec -it twenty-db-1 sh
psql -U {YOUR_POSTGRES_USER} -d {YOUR_POSTGRES_DB} -f databases_backup.sql
exit
```
### crwdns59230:0crwdne59230:0
crwdns59232:0crwdne59232:0
```
yarn database:migrate:prod
yarn command:prod upgrade-0.42
```
crwdns59234:0crwdne59234:0
- crwdns59236:0crwdne59236:0
- crwdns59238:0crwdne59238:0
### crwdns59240:0crwdne59240:0
crwdns59242:0crwdne59242:0
```
yarn database:migrate:prod
yarn command:prod upgrade-0.41
```
crwdns59244:0crwdne59244:0
- crwdns59246:0crwdne59246:0
### crwdns59248:0crwdne59248:0
crwdns59250:0crwdne59250:0
```
yarn database:migrate:prod
yarn command:prod upgrade-0.40
```
crwdns59252:0crwdne59252:0
- crwdns59254:0crwdne59254:0
### crwdns59256:0crwdne59256:0
crwdns59258:0crwdne59258:0
```
yarn database:migrate:prod
yarn command:prod upgrade-0.35
```
crwdns59260:0crwdne59260:0
crwdns59262:0crwdne59262:0
- crwdns59264:0crwdne59264:0
### crwdns59266:0crwdne59266:0
crwdns59268:0crwdne59268:0
```
yarn database:migrate:prod
yarn command:prod upgrade-0.34
```
crwdns59270:0crwdne59270:0
crwdns59272:0crwdne59272:0
- crwdns59274:0crwdne59274:0
- crwdns59276:0crwdne59276:0
crwdns59278:0crwdne59278:0
crwdns59280:0crwdne59280:0
crwdns59282:0crwdne59282:0
### crwdns59284:0crwdne59284:0
crwdns59286:0crwdne59286:0
```
yarn command:prod cache:flush
yarn database:migrate:prod
yarn command:prod upgrade-0.33
```
crwdns59288:0crwdne59288:0
crwdns59290:0crwdne59290:0
crwdns59292:0crwdne59292:0
crwdns59294:0${TAG}crwdne59294:0
### crwdns59296:0crwdne59296:0
crwdns59298:0crwdne59298:0
crwdns59300:0crwdne59300:0
```
yarn database:migrate:prod
yarn command:prod upgrade-0.32
```
crwdns59302:0crwdne59302:0
crwdns59304:0crwdne59304:0
crwdns59306:0crwdne59306:0
- crwdns59308:0crwdne59308:0
- crwdns59310:0crwdne59310:0
crwdns59312:0crwdne59312:0
crwdns59314:0crwdne59314:0
- crwdns59316:0crwdne59316:0
- crwdns59318:0crwdne59318:0
crwdns59320:0crwdne59320:0
crwdns59322:0crwdne59322:0
crwdns59324:0https://developers.google.com/peoplecrwdne59324:0
### crwdns59326:0crwdne59326:0
crwdns59328:0crwdne59328:0
crwdns59330:0crwdne59330:0
```
yarn database:migrate:prod
yarn command:prod upgrade-0.31
```
crwdns59332:0crwdne59332:0
### crwdns59334:0crwdne59334:0
crwdns59336:0crwdne59336:0
crwdns64010:0crwdne64010:0 crwdns59340:0https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.ymlcrwdne59340:0
crwdns59342:0crwdne59342:0
```
REDIS_HOST={your-redis-host}
REDIS_PORT={your-redis-port}
CACHE_STORAGE_TYPE=redis
```
crwdns59344:0crwdne59344:0
```
yarn database:migrate:prod
yarn command:prod upgrade-0.30
```
crwdns59346:0crwdne59346:0
### crwdns59348:0crwdne59348:0
crwdns59350:0crwdne59350:0
crwdns59352:0crwdne59352:0
```
yarn database:migrate:prod
yarn command:prod upgrade-0.24
```
crwdns59354:0crwdne59354:0
### crwdns59356:0crwdne59356:0
crwdns59358:0crwdne59358:0
crwdns59360:0crwdne59360:0
```
yarn database:migrate:prod
yarn command:prod upgrade-0.23
```
crwdns59362:0crwdne59362:0
crwdns59364:0crwdne59364:0
### crwdns59366:0crwdne59366:0
crwdns59368:0crwdne59368:0
crwdns59370:0crwdne59370:0
```
yarn database:migrate:prod
yarn command:prod workspace:sync-metadata -f
yarn command:prod upgrade-0.22
```
crwdns59372:0crwdne59372:0
crwdns59374:0crwdne59374:0
crwdns59376:0crwdne59376:0
@@ -0,0 +1,88 @@
---
title: crwdns61986:0crwdne61986:0
image: crwdns61988:0crwdne61988:0
---
<Frame>
<img src="/images/user-guide/tips/light-bulb.png" alt="Header" />
</Frame>
crwdns61990:0crwdne61990:0
<Tabs>
<Tab title="Usage">
```jsx
import { AppTooltip } from "@/ui/display/tooltip/AppTooltip";
export const MyComponent = () => {
return (
<>
<p id="hoverText" style={{ display: "inline-block" }}>
Customer Insights
</p>
<AppTooltip
className
anchorSelect="#hoverText"
content="Explore customer behavior and preferences"
delayHide={0}
offset={6}
noArrow={false}
isOpen={true}
place="bottom"
positionStrategy="absolute"
/>
</>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61992:0crwdne61992:0 | crwdns61994:0crwdne61994:0 | crwdns61996:0crwdne61996:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns61998:0crwdne61998:0 | crwdns62000:0crwdne62000:0 | crwdns62002:0crwdne62002:0 |
| crwdns62004:0crwdne62004:0 | crwdns62006:0crwdne62006:0 | crwdns62008:0crwdne62008:0 |
| crwdns62010:0crwdne62010:0 | crwdns62012:0crwdne62012:0 | crwdns62014:0crwdne62014:0 |
| crwdns62016:0crwdne62016:0 | crwdns62018:0crwdne62018:0 | crwdns62020:0crwdne62020:0 |
| crwdns62022:0crwdne62022:0 | crwdns62024:0crwdne62024:0 | crwdns62026:0crwdne62026:0 |
| crwdns62028:0crwdne62028:0 | crwdns62030:0crwdne62030:0 | crwdns62032:0crwdne62032:0 |
| crwdns62034:0crwdne62034:0 | crwdns62036:0crwdne62036:0 | crwdns62038:0crwdne62038:0 |
| crwdns62040:0crwdne62040:0 | crwdns62042:0crwdne62042:0 | crwdns62044:0crwdne62044:0 crwdns62046:0crwdne62046:0 |
| crwdns62048:0crwdne62048:0 | crwdns62050:0crwdne62050:0 | crwdns62052:0crwdne62052:0 crwdns62054:0crwdne62054:0 |
</Tab>
</Tabs>
## crwdns62056:0crwdne62056:0
crwdns62058:0crwdne62058:0
<Tabs>
<Tab title="Usage">
```jsx
import { OverflowingTextWithTooltip } from 'twenty-ui/display';
export const MyComponent = () => {
const crmTaskDescription =
'Follow up with client regarding their recent product inquiry. Discuss pricing options, address any concerns, and provide additional product information. Record the details of the conversation in the CRM for future reference.';
return <OverflowingTextWithTooltip text={crmTaskDescription} />;
};
```
</Tab>
<Tab title="Props">
| crwdns62060:0crwdne62060:0 | crwdns62062:0crwdne62062:0 | crwdns62064:0crwdne62064:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62066:0crwdne62066:0 | crwdns62068:0crwdne62068:0 | crwdns62070:0crwdne62070:0 |
</Tab>
</Tabs>
@@ -0,0 +1,69 @@
---
title: crwdns63532:0crwdne63532:0
image: crwdns63534:0crwdne63534:0
---
<Frame>
<img src="/images/user-guide/tasks/tasks_header.png" alt="Header" />
</Frame>
crwdns63536:0crwdne63536:0
<Tabs>
<Tab title="Usage">
```jsx
import { Checkmark } from 'twenty-ui/display';
export const MyComponent = () => {
return <Checkmark />;
};
```
</Tab>
<Tab title="Props">
crwdns63538:0crwdne63538:0
</Tab>
</Tabs>
## crwdns63540:0crwdne63540:0
crwdns63542:0crwdne63542:0
<Tabs>
<Tab title="Usage">
```jsx
import { AnimatedCheckmark } from 'twenty-ui/display';
export const MyComponent = () => {
return (
<AnimatedCheckmark
isAnimating={true}
color="green"
duration={0.5}
size={30}
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns63544:0crwdne63544:0 | crwdns63546:0crwdne63546:0 | crwdns63548:0crwdne63548:0 | crwdns63550:0crwdne63550:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns63552:0crwdne63552:0 | crwdns63554:0crwdne63554:0 | crwdns63556:0crwdne63556:0 | crwdns63558:0crwdne63558:0 |
| crwdns63560:0crwdne63560:0 | crwdns63562:0crwdne63562:0 | crwdns63564:0crwdne63564:0 | |
| crwdns63566:0crwdne63566:0 | crwdns63568:0crwdne63568:0 | crwdns63570:0crwdne63570:0 | crwdns63572:0crwdne63572:0 |
| crwdns63574:0crwdne63574:0 | crwdns63576:0crwdne63576:0 | crwdns63578:0crwdne63578:0 | crwdns63580:0crwdne63580:0 |
</Tab>
</Tabs>
@@ -0,0 +1,148 @@
---
title: crwdns61724:0crwdne61724:0
image: crwdns61732:0crwdne61732:0
---
<Frame>
<img src="/images/user-guide/github/github-header.png" alt="Header" />
</Frame>
crwdns61736:0crwdne61736:0
<Tabs>
<Tab title="Usage">
```jsx
import { Chip } from 'twenty-ui/components';
export const MyComponent = () => {
return (
<Chip
size="large"
label="Clickable Chip"
clickable={true}
variant="highlighted"
accent="text-primary"
leftComponent
rightComponent
maxWidth="200px"
className
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61740:0crwdne61740:0 | crwdns61744:0crwdne61744:0 | crwdns61748:0crwdne61748:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns61752:0crwdne61752:0 | crwdns61754:0crwdne61754:0 | crwdns61756:0crwdne61756:0 |
| crwdns61758:0crwdne61758:0 | crwdns61760:0crwdne61760:0 | crwdns61762:0crwdne61762:0 |
| crwdns61764:0crwdne61764:0 | crwdns61766:0crwdne61766:0 | crwdns61768:0crwdne61768:0 |
| crwdns61770:0crwdne61770:0 | crwdns61772:0crwdne61772:0 | crwdns61774:0crwdne61774:0 |
| crwdns61776:0crwdne61776:0 | crwdns61778:0crwdne61778:0 | crwdns61780:0crwdne61780:0 crwdns61782:0crwdne61782:0 |
| crwdns61784:0crwdne61784:0 | crwdns61786:0crwdne61786:0 | crwdns61788:0crwdne61788:0 crwdns61790:0crwdne61790:0 |
| crwdns61792:0crwdne61792:0 | crwdns61794:0crwdne61794:0 | crwdns61796:0crwdne61796:0 crwdns61798:0crwdne61798:0 |
</Tab>
</Tabs>
## crwdns61800:0crwdne61800:0
### crwdns61802:0crwdne61802:0
```jsx
import { Chip } from 'twenty-ui/components';
export const MyComponent = () => {
return (
<Chip
size="large"
label="Transparent Disabled Chip"
clickable={false}
variant="rounded"
accent="text-secondary"
leftComponent
rightComponent
maxWidth="200px"
className
/>
);
};
```
crwdns61804:0crwdne61804:0
### crwdns61806:0crwdne61806:0
```jsx
import { Chip } from "twenty-ui/components";
export const MyComponent = () => {
return (
<Chip
size="large"
label="Disabled chip that triggers a tooltip when overflowing."
clickable={false}
variant="regular"
accent="text-primary"
leftComponent
rightComponent
maxWidth="200px"
className
/>
);
};
```
## crwdns61808:0crwdne61808:0
crwdns61810:0crwdne61810:0
<Tabs>
<Tab title="Usage">
```jsx
import { BrowserRouter as Router } from 'react-router-dom';
import { IconTwentyStar } from 'twenty-ui/display';
import { Chip } from 'twenty-ui/components';
export const MyComponent = () => {
return (
<Router>
<Chip
linkToEntity="/entity-link"
entityId="entityTest"
name="Entity name"
pictureUrl=""
avatarType="rounded"
variant="regular"
LeftIcon={IconTwentyStar}
/>
</Router>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61812:0crwdne61812:0 | crwdns61814:0crwdne61814:0 | crwdns61816:0crwdne61816:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns61818:0crwdne61818:0 | crwdns61820:0crwdne61820:0 | crwdns61822:0crwdne61822:0 |
| crwdns61824:0crwdne61824:0 | crwdns61826:0crwdne61826:0 | crwdns61828:0crwdne61828:0 |
| crwdns61830:0crwdne61830:0 | crwdns61832:0crwdne61832:0 | crwdns61834:0crwdne61834:0 |
| crwdns61836:0crwdne61836:0 | crwdns61838:0crwdne61838:0 | crwdns61840:0crwdne61840:0 |
| crwdns61842:0crwdne61842:0 | crwdns61844:0crwdne61844:0 | crwdns61846:0crwdne61846:0 crwdns61848:0crwdne61848:0 |
| crwdns61850:0crwdne61850:0 | crwdns61852:0crwdne61852:0 | crwdns61854:0crwdne61854:0 crwdns61856:0crwdne61856:0 |
| crwdns61858:0crwdne61858:0 | crwdns61860:0crwdne61860:0 | crwdns61862:0crwdne61862:0 crwdns61864:0crwdne61864:0 |
</Tab>
</Tabs>
@@ -0,0 +1,83 @@
---
title: crwdns63624:0crwdne63624:0
image: crwdns63626:0crwdne63626:0
---
<Frame>
<img src="/images/user-guide/objects/objects.png" alt="Header" />
</Frame>
crwdns63628:0crwdne63628:0
## crwdns63630:0crwdne63630:0
crwdns63632:0crwdne63632:0
<Tabs>
<Tab title="Installation">crwdns63634:0crwdne63634:0
```
yarn add @tabler/icons-react
```
</Tab>
<Tab title="Props">
crwdns63636:0crwdne63636:0 crwdns63638:0crwdne63638:0
```jsx
import { IconArrowLeft } from "@tabler/icons-react";
export const MyComponent = () => {
return <IconArrowLeft color="red" size={48} />;
};
```
</Tab>
<Tab title="Props">
| crwdns63640:0crwdne63640:0 | crwdns63642:0crwdne63642:0 | crwdns63644:0crwdne63644:0 | crwdns63646:0crwdne63646:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns63648:0crwdne63648:0 | crwdns63650:0crwdne63650:0 | crwdns63652:0crwdne63652:0 | crwdns63654:0crwdne63654:0 |
| crwdns63656:0crwdne63656:0 | crwdns63658:0crwdne63658:0 | crwdns63660:0crwdne63660:0 | crwdns63662:0crwdne63662:0 |
| crwdns63664:0crwdne63664:0 | crwdns63666:0crwdne63666:0 | crwdns63668:0crwdne63668:0 | crwdns63670:0crwdne63670:0 |
</Tab>
</Tabs>
## crwdns63672:0crwdne63672:0
crwdns63674:0crwdne63674:0
### crwdns63676:0crwdne63676:0
crwdns63678:0crwdne63678:0
<Tabs>
<Tab title="Usage">
```jsx
import { IconAddressBook } from 'twenty-ui/display';
export const MyComponent = () => {
return <IconAddressBook size={24} stroke={2} />;
};
```
</Tab>
<Tab title="Props">
| crwdns63680:0crwdne63680:0 | crwdns63682:0crwdne63682:0 | crwdns63684:0crwdne63684:0 | crwdns63686:0crwdne63686:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns63688:0crwdne63688:0 | crwdns63690:0crwdne63690:0 | crwdns63692:0crwdne63692:0 | crwdns63694:0crwdne63694:0 |
| crwdns63696:0crwdne63696:0 | crwdns63698:0crwdne63698:0 | crwdns63700:0crwdne63700:0 | crwdns63702:0crwdne63702:0 |
</Tab>
</Tabs>
@@ -0,0 +1,18 @@
---
title: crwdns62972:0crwdne62972:0
image: crwdns62974:0crwdne62974:0
---
<Frame>
<img src="/images/user-guide/kanban-views/kanban.png" alt="Header" />
</Frame>
crwdns62976:0crwdne62976:0
```jsx
import { SoonPill } from "@/ui/display/pill/components/SoonPill";
export const MyComponent = () => {
return <SoonPill />;
};
```
@@ -0,0 +1,44 @@
---
title: crwdns63586:0crwdne63586:0
image: crwdns63588:0crwdne63588:0
---
<Frame>
<img src="/images/user-guide/table-views/table.png" alt="Header" />
</Frame>
crwdns63590:0crwdne63590:0
<Tabs>
<Tab title="Usage">
```jsx
import { Tag } from "@/ui/display/tag/components/Tag";
export const MyComponent = () => {
return (
<Tag
className
color="red"
text="Urgent"
onClick={() => console.log("click")}
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns63592:0crwdne63592:0 | crwdns63594:0crwdne63594:0 | crwdns63596:0crwdne63596:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns63598:0crwdne63598:0 | crwdns63600:0crwdne63600:0 | crwdns63602:0crwdne63602:0 |
| crwdns63604:0crwdne63604:0 | crwdns63606:0crwdne63606:0 | crwdns63608:0crwdne63608:0 crwdns63610:0crwdne63610:0 |
| crwdns63612:0crwdne63612:0 | crwdns63614:0crwdne63614:0 | crwdns63616:0crwdne63616:0 |
| crwdns63618:0crwdne63618:0 | crwdns63620:0crwdne63620:0 | crwdns63622:0crwdne63622:0 |
</Tab>
</Tabs>
@@ -0,0 +1,8 @@
---
title: crwdns63582:0crwdne63582:0
image: crwdns63584:0crwdne63584:0
---
<Frame>
<img src="/images/user-guide/tips/light-bulb.png" alt="Header" />
</Frame>
@@ -0,0 +1,34 @@
---
title: crwdns62852:0crwdne62852:0
image: crwdns62854:0crwdne62854:0
---
<Frame>
<img src="/images/user-guide/api/api.png" alt="Header" />
</Frame>
crwdns62856:0https://www.blocknotejs.org/crwdne62856:0
<Tabs>
<Tab title="Usage">
```jsx
import { useBlockNote } from "@blocknote/react";
import { BlockEditor } from "@/ui/input/editor/components/BlockEditor";
export const MyComponent = () => {
const BlockNoteEditor = useBlockNote();
return <BlockEditor editor={BlockNoteEditor} />;
};
```
</Tab>
<Tab title="Props">
| crwdns62858:0crwdne62858:0 | crwdns62860:0crwdne62860:0 | crwdns62862:0crwdne62862:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62864:0crwdne62864:0 | crwdns62866:0crwdne62866:0 | crwdns62868:0crwdne62868:0 |
</Tab>
</Tabs>
@@ -0,0 +1,440 @@
---
title: crwdns62996:0crwdne62996:0
image: crwdns62998:0crwdne62998:0
---
<Frame>
<img src="/images/user-guide/views/filter.png" alt="Header" />
</Frame>
crwdns63000:0crwdne63000:0
## crwdns63002:0crwdne63002:0
<Tabs>
<Tab title="Usage">
```jsx
import { Button } from "@/ui/input/button/components/Button";
export const MyComponent = () => {
return (
<Button
className
Icon={null}
title="Title"
fullWidth={false}
variant="primary"
size="medium"
position="standalone"
accent="default"
soon={false}
disabled={false}
focus={true}
onClick={() => console.log("click")}
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns63004:0crwdne63004:0 | crwdns63006:0crwdne63006:0 | crwdns63008:0crwdne63008:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns63010:0crwdne63010:0 | crwdns63012:0crwdne63012:0 | crwdns63014:0crwdne63014:0 |
| crwdns63016:0crwdne63016:0 | crwdns63018:0crwdne63018:0 | crwdns63020:0crwdne63020:0 |
| crwdns63022:0crwdne63022:0 | crwdns63024:0crwdne63024:0 | crwdns63026:0crwdne63026:0 |
| crwdns63028:0crwdne63028:0 | crwdns63030:0crwdne63030:0 | crwdns63032:0crwdne63032:0 |
| crwdns63034:0crwdne63034:0 | crwdns63036:0crwdne63036:0 | crwdns63038:0crwdne63038:0 crwdns63040:0crwdne63040:0 |
| crwdns63042:0crwdne63042:0 | crwdns63044:0crwdne63044:0 | crwdns63046:0crwdne63046:0 crwdns63048:0crwdne63048:0 |
| crwdns63050:0crwdne63050:0 | crwdns63052:0crwdne63052:0 | crwdns63054:0crwdne63054:0 crwdns63056:0crwdne63056:0 |
| crwdns63058:0crwdne63058:0 | crwdns63060:0crwdne63060:0 | crwdns63062:0crwdne63062:0 crwdns63064:0crwdne63064:0 |
| crwdns63066:0crwdne63066:0 | crwdns63068:0crwdne63068:0 | crwdns63070:0crwdne63070:0 |
| crwdns63072:0crwdne63072:0 | crwdns63074:0crwdne63074:0 | crwdns63076:0crwdne63076:0 |
| crwdns63078:0crwdne63078:0 | crwdns63080:0crwdne63080:0 | crwdns63082:0crwdne63082:0 |
| crwdns63084:0crwdne63084:0 | crwdns63086:0crwdne63086:0 | crwdns63088:0crwdne63088:0 |
</Tab>
</Tabs>
## crwdns63090:0crwdne63090:0
<Tabs>
<Tab title="Usage">crwdns63092:0{ Button }crwdnd63092:0{ ButtonGroup }crwdne63092:0
crwdns63094:0{null}crwdnd63094:0{false}crwdnd63094:0{false}crwdnd63094:0{false}crwdnd63094:0{false}crwdnd63094:0{null}crwdnd63094:0{false}crwdnd63094:0{false}crwdnd63094:0{false}crwdnd63094:0{false}crwdnd63094:0{null}crwdnd63094:0{false}crwdnd63094:0{false}crwdnd63094:0{false}crwdnd63094:0{false}crwdne63094:0
````
</Tab>
<Tab title="Props">
| Props | Type | Description |
|-------|------|-------------|
| variant | string | The visual style variant of the buttons within the group. Options include `primary`, `secondary`, and `tertiary` |
| size | string | The size of the buttons within the group. Has two options: `medium` and `small` |
| accent | string | The accent color of the buttons within the group. Options include `default`, `blue` and `danger` |
| className | string | Optional class name for additional styling |
| children | ReactNode | An array of React elements representing the individual buttons within the group |
</Tab>
</Tabs>
## Floating Button
<Tabs>
<Tab title="Usage">
```jsx
import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
import { IconSearch } from "@tabler/icons-react";
export const MyComponent = () => {
return (
<FloatingButton
className
Icon={IconSearch}
title="Title"
size="medium"
position="standalone"
applyShadow={true}
applyBlur={true}
disabled={false}
focus={true}
/>
);
};
````
</Tab>
<Tab title="Props">
| crwdns63096:0crwdne63096:0 | crwdns63098:0crwdne63098:0 | crwdns63100:0crwdne63100:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns63102:0crwdne63102:0 | crwdns63104:0crwdne63104:0 | crwdns63106:0crwdne63106:0 |
| crwdns63108:0crwdne63108:0 | crwdns63110:0crwdne63110:0 | crwdns63112:0crwdne63112:0 |
| crwdns63114:0crwdne63114:0 | crwdns63116:0crwdne63116:0 | crwdns63118:0crwdne63118:0 |
| crwdns63120:0crwdne63120:0 | crwdns63122:0crwdne63122:0 | crwdns63124:0crwdne63124:0 crwdns63126:0crwdne63126:0 |
| crwdns63128:0crwdne63128:0 | crwdns63130:0crwdne63130:0 | crwdns63132:0crwdne63132:0 crwdns63134:0crwdne63134:0 |
| crwdns63136:0crwdne63136:0 | crwdns63138:0crwdne63138:0 | crwdns63140:0crwdne63140:0 |
| crwdns63142:0crwdne63142:0 | crwdns63144:0crwdne63144:0 | crwdns63146:0crwdne63146:0 |
| crwdns63148:0crwdne63148:0 | crwdns63150:0crwdne63150:0 | crwdns63152:0crwdne63152:0 |
| crwdns63154:0crwdne63154:0 | crwdns63156:0crwdne63156:0 | crwdns63158:0crwdne63158:0 |
</Tab>
</Tabs>
## crwdns63160:0crwdne63160:0
<Tabs>
<Tab title="Usage">
```jsx
import { FloatingButton } from "@/ui/input/button/components/FloatingButton";
import { FloatingButtonGroup } from "@/ui/input/button/components/FloatingButtonGroup";
import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
export const MyComponent = () => {
return (
<FloatingButtonGroup size="small">
<FloatingButton
className
Icon={IconClipboardText}
title
size="small"
position="standalone"
applyShadow={true}
applyBlur={true}
disabled={false}
focus={true}
/>
<FloatingButton
className
Icon={IconCheckbox}
title
size="small"
position="standalone"
applyShadow={true}
applyBlur={true}
disabled={false}
/>
</FloatingButtonGroup>
);
};
```
</Tab>
<Tab title="Props">
| crwdns63162:0crwdne63162:0 | crwdns63164:0crwdne63164:0 | crwdns63166:0crwdne63166:0 | crwdns63168:0crwdne63168:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns63170:0crwdne63170:0 | crwdns63172:0crwdne63172:0 | crwdns63174:0crwdne63174:0 crwdns63176:0crwdne63176:0 | crwdns63178:0crwdne63178:0 |
| crwdns63180:0crwdne63180:0 | crwdns63182:0crwdne63182:0 | crwdns63184:0crwdne63184:0 | |
</Tab>
</Tabs>
## crwdns63186:0crwdne63186:0
<Tabs>
<Tab title="Usage">
```jsx
import { FloatingIconButton } from "@/ui/input/button/components/FloatingIconButton";
import { IconSearch } from "@tabler/icons-react";
export const MyComponent = () => {
return (
<FloatingIconButton
className
Icon={IconSearch}
size="small"
position="standalone"
applyShadow={true}
applyBlur={true}
disabled={false}
focus={false}
onClick={() => console.log("click")}
isActive={true}
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns63188:0crwdne63188:0 | crwdns63190:0crwdne63190:0 | crwdns63192:0crwdne63192:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns63194:0crwdne63194:0 | crwdns63196:0crwdne63196:0 | crwdns63198:0crwdne63198:0 |
| crwdns63200:0crwdne63200:0 | crwdns63202:0crwdne63202:0 | crwdns63204:0crwdne63204:0 |
| crwdns63206:0crwdne63206:0 | crwdns63208:0crwdne63208:0 | crwdns63210:0crwdne63210:0 crwdns63212:0crwdne63212:0 |
| crwdns63214:0crwdne63214:0 | crwdns63216:0crwdne63216:0 | crwdns63218:0crwdne63218:0 crwdns63220:0crwdne63220:0 |
| crwdns63222:0crwdne63222:0 | crwdns63224:0crwdne63224:0 | crwdns63226:0crwdne63226:0 |
| crwdns63228:0crwdne63228:0 | crwdns63230:0crwdne63230:0 | crwdns63232:0crwdne63232:0 |
| crwdns63234:0crwdne63234:0 | crwdns63236:0crwdne63236:0 | crwdns63238:0crwdne63238:0 |
| crwdns63240:0crwdne63240:0 | crwdns63242:0crwdne63242:0 | crwdns63244:0crwdne63244:0 |
| crwdns63246:0crwdne63246:0 | crwdns63248:0crwdne63248:0 | crwdns63250:0crwdne63250:0 |
| crwdns63252:0crwdne63252:0 | crwdns63254:0crwdne63254:0 | crwdns63256:0crwdne63256:0 |
</Tab>
</Tabs>
## crwdns63258:0crwdne63258:0
<Tabs>
<Tab title="Usage">
```jsx
import { FloatingIconButtonGroup } from "@/ui/input/button/components/FloatingIconButtonGroup";
import { IconClipboardText, IconCheckbox } from "@tabler/icons-react";
export const MyComponent = () => {
const iconButtons = [
{
Icon: IconClipboardText,
onClick: () => console.log("Button 1 clicked"),
isActive: true,
},
{
Icon: IconCheckbox,
onClick: () => console.log("Button 2 clicked"),
isActive: true,
},
];
return (
<FloatingIconButtonGroup
className
size="small"
iconButtons={iconButtons} />
);
};
```
</Tab>
<Tab title="Props">
| crwdns63262:0crwdne63262:0 | crwdns63264:0crwdne63264:0 | crwdns63266:0crwdne63266:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns63268:0crwdne63268:0 | crwdns63270:0crwdne63270:0 | crwdns63272:0crwdne63272:0 |
| crwdns63274:0crwdne63274:0 | crwdns63276:0crwdne63276:0 | crwdns63278:0crwdne63278:0 crwdns63280:0crwdne63280:0 |
| crwdns63284:0crwdne63284:0 | crwdns63286:0crwdne63286:0 | crwdns63288:0crwdne63288:0 crwdns63292:0crwdne63292:0 |
</Tab>
</Tabs>
## crwdns63294:0crwdne63294:0
<Tabs>
<Tab title="Usage">
```jsx
import { LightButton } from "@/ui/input/button/components/LightButton";
export const MyComponent = () => {
return <LightButton
className
icon={null}
title="Title"
accent="secondary"
active={false}
disabled={false}
focus={true}
onClick={()=>console.log('click')}
/>;
};
```
</Tab>
<Tab title="Props">
| crwdns63298:0crwdne63298:0 | crwdns63300:0crwdne63300:0 | crwdns63304:0crwdne63304:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns63306:0crwdne63306:0 | crwdns63310:0crwdne63310:0 | crwdns63312:0crwdne63312:0 |
| crwdns63316:0crwdne63316:0 | crwdns63318:0crwdne63318:0 | crwdns63322:0crwdne63322:0 |
| crwdns63326:0crwdne63326:0 | crwdns63328:0crwdne63328:0 | crwdns63332:0crwdne63332:0 |
| crwdns63334:0crwdne63334:0 | crwdns63336:0crwdne63336:0 | crwdns63340:0crwdne63340:0 crwdns63342:0crwdne63342:0 |
| crwdns63346:0crwdne63346:0 | crwdns63348:0crwdne63348:0 | crwdns63350:0crwdne63350:0 |
| crwdns63354:0crwdne63354:0 | crwdns63356:0crwdne63356:0 | crwdns63358:0crwdne63358:0 |
| crwdns63360:0crwdne63360:0 | crwdns63362:0crwdne63362:0 | crwdns63364:0crwdne63364:0 |
| crwdns63366:0crwdne63366:0 | crwdns63368:0crwdne63368:0 | crwdns63370:0crwdne63370:0 |
</Tab>
</Tabs>
## crwdns63372:0crwdne63372:0
<Tabs>
<Tab title="Usage">
```jsx
import { LightIconButton } from "@/ui/input/button/components/LightIconButton";
import { IconSearch } from "@tabler/icons-react";
export const MyComponent = () => {
return (
<LightIconButton
className
testId="test1"
Icon={IconSearch}
title="Title"
size="small"
accent="secondary"
active={true}
disabled={false}
focus={true}
onClick={() => console.log("click")}
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns63374:0crwdne63374:0 | crwdns63376:0crwdne63376:0 | crwdns63378:0crwdne63378:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns63380:0crwdne63380:0 | crwdns63382:0crwdne63382:0 | crwdns63384:0crwdne63384:0 |
| crwdns63386:0crwdne63386:0 | crwdns63388:0crwdne63388:0 | crwdns63390:0crwdne63390:0 |
| crwdns63392:0crwdne63392:0 | crwdns63394:0crwdne63394:0 | crwdns63396:0crwdne63396:0 |
| crwdns63398:0crwdne63398:0 | crwdns63400:0crwdne63400:0 | crwdns63402:0crwdne63402:0 |
| crwdns63404:0crwdne63404:0 | crwdns63406:0crwdne63406:0 | crwdns63408:0crwdne63408:0 crwdns63410:0crwdne63410:0 |
| crwdns63412:0crwdne63412:0 | crwdns63414:0crwdne63414:0 | crwdns63416:0crwdne63416:0 crwdns63418:0crwdne63418:0 |
| crwdns63420:0crwdne63420:0 | crwdns63422:0crwdne63422:0 | crwdns63424:0crwdne63424:0 |
| crwdns63426:0crwdne63426:0 | crwdns63428:0crwdne63428:0 | crwdns63430:0crwdne63430:0 |
| crwdns63432:0crwdne63432:0 | crwdns63434:0crwdne63434:0 | crwdns63436:0crwdne63436:0 |
| crwdns63438:0crwdne63438:0 | crwdns63440:0crwdne63440:0 | crwdns63442:0crwdne63442:0 |
</Tab>
</Tabs>
## crwdns63444:0crwdne63444:0
<Tabs>
<Tab title="Usage">
```jsx
import { MainButton } from "@/ui/input/button/components/MainButton";
import { IconCheckbox } from "@tabler/icons-react";
export const MyComponent = () => {
return (
<MainButton
title="Checkbox"
fullWidth={false}
variant="primary"
soon={false}
Icon={IconCheckbox}
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns63446:0crwdne63446:0 | crwdns63448:0crwdne63448:0 | crwdns63450:0crwdne63450:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns63452:0crwdne63452:0 | crwdns63454:0crwdne63454:0 | crwdns63456:0crwdne63456:0 |
| crwdns63458:0crwdne63458:0 | crwdns63460:0crwdne63460:0 | crwdns63462:0crwdne63462:0 |
| crwdns63464:0crwdne63464:0 | crwdns63466:0crwdne63466:0 | crwdns63468:0crwdne63468:0 crwdns63470:0crwdne63470:0 |
| crwdns63472:0crwdne63472:0 | crwdns63474:0crwdne63474:0 | crwdns63476:0crwdne63476:0 |
| crwdns63478:0crwdne63478:0 | crwdns63480:0crwdne63480:0 | crwdns63482:0crwdne63482:0 |
| crwdns63484:0crwdne63484:0 | crwdns63486:0crwdne63486:0 | crwdns63488:0crwdne63488:0 |
</Tab>
</Tabs>
## crwdns63490:0crwdne63490:0
<Tabs>
<Tab title="Usage">
```jsx
import { RoundedIconButton } from "@/ui/input/button/components/RoundedIconButton";
import { IconSearch } from "@tabler/icons-react";
export const MyComponent = () => {
return (
<RoundedIconButton
Icon={IconSearch}
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns63492:0crwdne63492:0 | crwdns63494:0crwdne63494:0 | crwdns63496:0crwdne63496:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns63498:0crwdne63498:0 | crwdns63500:0crwdne63500:0 | |
| crwdns63502:0crwdne63502:0 | crwdns63504:0crwdne63504:0 | |
</Tab>
</Tabs>
@@ -0,0 +1,47 @@
---
title: crwdns61680:0crwdne61680:0
image: crwdns61682:0crwdne61682:0
---
<Frame>
<img src="/images/user-guide/tasks/tasks_header.png" alt="Header" />
</Frame>
crwdns61684:0crwdne61684:0
<Tabs>
<Tab title="Usage">
```jsx
import { Checkbox } from "twenty-ui/display";
export const MyComponent = () => {
return (
<Checkbox
checked={true}
indeterminate={false}
onChange={() => console.log("onChange function fired")}
onCheckedChange={() => console.log("onCheckedChange function fired")}
variant="primary"
size="small"
shape="squared"
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61686:0crwdne61686:0 | crwdns61688:0crwdne61688:0 | crwdns61690:0crwdne61690:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns61692:0crwdne61692:0 | crwdns61694:0crwdne61694:0 | crwdns61696:0crwdne61696:0 |
| crwdns61698:0crwdne61698:0 | crwdns61700:0crwdne61700:0 | crwdns61702:0crwdne61702:0 |
| crwdns61704:0crwdne61704:0 | crwdns61706:0crwdne61706:0 | crwdns61708:0crwdne61708:0 |
| crwdns61710:0crwdne61710:0 | crwdns61712:0crwdne61712:0 | crwdns61714:0crwdne61714:0 |
| crwdns61716:0crwdne61716:0 | crwdns61718:0crwdne61718:0 | crwdns61720:0crwdne61720:0 crwdns61722:0crwdne61722:0 |
| crwdns61726:0crwdne61726:0 | crwdns61728:0crwdne61728:0 | crwdns61730:0crwdne61730:0 crwdns61734:0crwdne61734:0 |
| crwdns61738:0crwdne61738:0 | crwdns61742:0crwdne61742:0 | crwdns61746:0crwdne61746:0 crwdns61750:0crwdne61750:0 |
</Tab>
</Tabs>
@@ -0,0 +1,73 @@
---
title: crwdns62072:0crwdne62072:0
image: crwdns62074:0crwdne62074:0
---
<Frame>
<img src="/images/user-guide/fields/field.png" alt="Header" />
</Frame>
## crwdns62076:0crwdne62076:0
crwdns62078:0crwdne62078:0
<Tabs>
<Tab title="Usage">
```jsx
import { ColorSchemeCard } from "twenty-ui/display";
export const MyComponent = () => {
return (
<ColorSchemeCard
variant="Dark"
selected={true}
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62080:0crwdne62080:0 | crwdns62082:0crwdne62082:0 | crwdns62084:0crwdne62084:0 | crwdns62086:0crwdne62086:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62088:0crwdne62088:0 | crwdns62090:0crwdne62090:0 | crwdns62092:0crwdne62092:0 crwdns62094:0crwdne62094:0 | crwdns62096:0crwdne62096:0 |
| crwdns62098:0crwdne62098:0 | crwdns62100:0crwdne62100:0 | crwdns62102:0crwdne62102:0 | |
| crwdns62104:0crwdne62104:0 | crwdns62106:0crwdne62106:0 | crwdns62108:0crwdne62108:0 | |
</Tab>
</Tabs>
## crwdns62110:0crwdne62110:0
crwdns62112:0crwdne62112:0
<Tabs>
<Tab title="Usage">
```jsx
import { ColorSchemePicker } from "twenty-ui/display";
export const MyComponent = () => {
return <ColorSchemePicker
value="Dark"
onChange
/>;
};
```
</Tab>
<Tab title="Props">
| crwdns62114:0crwdne62114:0 | crwdns62116:0crwdne62116:0 | crwdns62118:0crwdne62118:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62120:0crwdne62120:0 | crwdns62122:0crwdne62122:0 | crwdns62124:0crwdne62124:0 |
| crwdns62126:0crwdne62126:0 | crwdns62128:0crwdne62128:0 | crwdns62130:0crwdne62130:0 |
</Tab>
</Tabs>
@@ -0,0 +1,56 @@
---
title: crwdns62150:0crwdne62150:0
image: crwdns62162:0crwdne62162:0
---
<Frame>
<img src="/images/user-guide/github/github-header.png" alt="Header" />
</Frame>
crwdns62166:0crwdne62166:0
<Tabs>
<Tab title="Usage">
```jsx
import { RecoilRoot } from "recoil";
import React, { useState } from "react";
import { IconPicker } from "@/ui/input/components/IconPicker";
export const MyComponent = () => {
const [selectedIcon, setSelectedIcon] = useState("");
const handleIconChange = ({ iconKey, Icon }) => {
console.log("Selected Icon:", iconKey);
setSelectedIcon(iconKey);
};
return (
<RecoilRoot>
<IconPicker
disabled={false}
onChange={handleIconChange}
selectedIconKey={selectedIcon}
variant="primary"
/>
</RecoilRoot>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62170:0crwdne62170:0 | crwdns62174:0crwdne62174:0 | crwdns62180:0crwdne62180:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns62184:0crwdne62184:0 | crwdns62188:0crwdne62188:0 | crwdns62192:0crwdne62192:0 |
| crwdns62196:0crwdne62196:0 | crwdns62200:0crwdne62200:0 | crwdns62204:0crwdne62204:0 crwdns62208:0crwdne62208:0 |
| crwdns62212:0crwdne62212:0 | crwdns62216:0crwdne62216:0 | crwdns62220:0crwdne62220:0 |
| crwdns62224:0crwdne62224:0 | crwdns62228:0crwdne62228:0 | crwdns62232:0crwdne62232:0 |
| crwdns62238:0crwdne62238:0 | crwdns62242:0crwdne62242:0 | crwdns62246:0crwdne62246:0 |
| crwdns62250:0crwdne62250:0 | crwdns62254:0crwdne62254:0 | crwdns62258:0crwdne62258:0 |
| crwdns62262:0crwdne62262:0 | crwdns62266:0crwdne62266:0 | crwdns62270:0crwdne62270:0 crwdns62274:0crwdne62274:0 |
</Tab>
</Tabs>
@@ -0,0 +1,39 @@
---
title: crwdns62914:0crwdne62914:0
image: crwdns62916:0crwdne62916:0
---
<Frame>
<img src="/images/user-guide/objects/objects.png" alt="Header" />
</Frame>
crwdns62918:0{ SandpackEditor}crwdne62918:0
crwdns62920:0crwdne62920:0
<Tabs>
<Tab title="Usage">
```jsx
import { ImageInput } from "@/ui/input/components/ImageInput";
export const MyComponent = () => {
return <ImageInput/>;
};
```
</Tab>
<Tab title="Props">
| crwdns62922:0crwdne62922:0 | crwdns62924:0crwdne62924:0 | crwdns62926:0crwdne62926:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns62928:0crwdne62928:0 | crwdns62930:0crwdne62930:0 | crwdns62932:0crwdne62932:0 |
| crwdns62934:0crwdne62934:0 | crwdns62936:0crwdne62936:0 | crwdns62938:0crwdne62938:0 crwdns62940:0crwdne62940:0 |
| crwdns62942:0crwdne62942:0 | crwdns62944:0crwdne62944:0 | crwdns62946:0crwdne62946:0 |
| crwdns62948:0crwdne62948:0 | crwdns62950:0crwdne62950:0 | crwdns62952:0crwdne62952:0 |
| crwdns62954:0crwdne62954:0 | crwdns62956:0crwdne62956:0 | crwdns62958:0crwdne62958:0 |
| crwdns62960:0crwdne62960:0 | crwdns62962:0crwdne62962:0 | crwdns62964:0crwdne62964:0 |
| crwdns62966:0crwdne62966:0 | crwdns62968:0crwdne62968:0 | crwdns62970:0crwdne62970:0 |
</Tab>
</Tabs>
@@ -0,0 +1,104 @@
---
title: crwdns62132:0crwdne62132:0
image: crwdns62134:0crwdne62134:0
---
<Frame>
<img src="/images/user-guide/create-workspace/workspace-cover.png" alt="Header" />
</Frame>
crwdns62136:0crwdne62136:0
<Tabs>
<Tab title="Usage">
```jsx
import { Radio } from "twenty-ui/display";
export const MyComponent = () => {
const handleRadioChange = (event) => {
console.log("Radio button changed:", event.target.checked);
};
const handleCheckedChange = (checked) => {
console.log("Checked state changed:", checked);
};
return (
<Radio
checked={true}
value="Option 1"
onChange={handleRadioChange}
onCheckedChange={handleCheckedChange}
size="large"
disabled={false}
labelPosition="right"
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62138:0crwdne62138:0 | crwdns62140:0crwdne62140:0 | crwdns62142:0crwdne62142:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns62144:0crwdne62144:0 | crwdns62146:0crwdne62146:0 | crwdns62148:0crwdne62148:0 |
| crwdns62152:0crwdne62152:0 | crwdns62154:0crwdne62154:0 | crwdns62156:0crwdne62156:0 |
| crwdns62158:0crwdne62158:0 | crwdns62160:0crwdne62160:0 | crwdns62164:0crwdne62164:0 |
| crwdns62168:0crwdne62168:0 | crwdns62172:0crwdne62172:0 | crwdns62176:0crwdne62176:0 |
| crwdns62178:0crwdne62178:0 | crwdns62182:0crwdne62182:0 | crwdns62186:0crwdne62186:0 |
| crwdns62190:0crwdne62190:0 | crwdns62194:0crwdne62194:0 | crwdns62198:0crwdne62198:0 |
| crwdns62202:0crwdne62202:0 | crwdns62206:0crwdne62206:0 | crwdns62210:0crwdne62210:0 crwdns62214:0crwdne62214:0 |
| crwdns62218:0crwdne62218:0 | crwdns62222:0crwdne62222:0 | crwdns62226:0crwdne62226:0 |
| crwdns62230:0crwdne62230:0 | crwdns62234:0crwdne62234:0 | crwdns62236:0crwdne62236:0 crwdns62240:0crwdne62240:0 |
</Tab>
</Tabs>
## crwdns62244:0crwdne62244:0
crwdns62248:0crwdne62248:0
<Tabs>
<Tab title="Usage">
```jsx
import React, { useState } from "react";
import { Radio, RadioGroup } from "twenty-ui/display";
export const MyComponent = () => {
const [selectedValue, setSelectedValue] = useState("Option 1");
const handleChange = (event) => {
setSelectedValue(event.target.value);
};
return (
<RadioGroup value={selectedValue} onChange={handleChange}>
<Radio value="Option 1" />
<Radio value="Option 2" />
<Radio value="Option 3" />
</RadioGroup>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62252:0crwdne62252:0 | crwdns62256:0crwdne62256:0 | crwdns62260:0crwdne62260:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62264:0crwdne62264:0 | crwdns62268:0crwdne62268:0 | crwdns62272:0crwdne62272:0 |
| crwdns62276:0crwdne62276:0 | crwdns62278:0crwdne62278:0 | crwdns62280:0crwdne62280:0 |
| crwdns62282:0crwdne62282:0 | crwdns62284:0crwdne62284:0 | crwdns62286:0crwdne62286:0 |
| crwdns62288:0crwdne62288:0 | crwdns62290:0crwdne62290:0 | crwdns62292:0crwdne62292:0 |
</Tab>
</Tabs>
@@ -0,0 +1,54 @@
---
title: crwdns62294:0crwdne62294:0
image: crwdns62296:0crwdne62296:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/20.png" alt="Header" />
</Frame>
crwdns62298:0crwdne62298:0
<Tabs>
<Tab title="Usage">
```jsx
import { RecoilRoot } from 'recoil';
import { IconTwentyStar } from 'twenty-ui/display';
import { Select } from '@/ui/input/components/Select';
export const MyComponent = () => {
return (
<RecoilRoot>
<Select
className
disabled={false}
label="Select an option"
options={[
{ value: 'option1', label: 'Option A', Icon: IconTwentyStar },
{ value: 'option2', label: 'Option B', Icon: IconTwentyStar },
]}
value="option1"
/>
</RecoilRoot>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62300:0crwdne62300:0 | crwdns62302:0crwdne62302:0 | crwdns62304:0crwdne62304:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns62306:0crwdne62306:0 | crwdns62308:0crwdne62308:0 | crwdns62310:0crwdne62310:0 |
| crwdns62312:0crwdne62312:0 | crwdns62314:0crwdne62314:0 | crwdns62316:0crwdne62316:0 |
| crwdns62318:0crwdne62318:0 | crwdns62320:0crwdne62320:0 | crwdns62322:0crwdne62322:0 |
| crwdns62324:0crwdne62324:0 | crwdns62326:0crwdne62326:0 | crwdns62328:0crwdne62328:0 |
| crwdns62330:0crwdne62330:0 | crwdns62332:0crwdne62332:0 | crwdns62334:0crwdne62334:0 crwdns62336:0crwdne62336:0 |
| crwdns62338:0crwdne62338:0 | crwdns62340:0crwdne62340:0 | crwdns62342:0crwdne62342:0 crwdns62344:0crwdne62344:0 |
</Tab>
</Tabs>
@@ -0,0 +1,153 @@
---
title: crwdns61402:0crwdne61402:0
image: crwdns61412:0crwdne61412:0
---
<Frame>
<img src="/images/user-guide/notes/notes_header.png" alt="Header" />
</Frame>
## crwdns61416:0crwdne61416:0
crwdns61420:0crwdne61420:0
<Tabs>
<Tab title="Usage">
```jsx
import { RecoilRoot } from "recoil";
import { TextInput } from "@/ui/input/components/TextInput";
export const MyComponent = () => {
const handleChange = (text) => {
console.log("Input changed:", text);
};
const handleKeyDown = (event) => {
console.log("Key pressed:", event.key);
};
return (
<RecoilRoot>
<TextInput
className
label="Username"
onChange={handleChange}
fullWidth={false}
disableHotkeys={false}
error="Invalid username"
onKeyDown={handleKeyDown}
RightIcon={null}
/>
</RecoilRoot>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61424:0crwdne61424:0 | crwdns61428:0crwdne61428:0 | crwdns61432:0crwdne61432:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns61434:0crwdne61434:0 | crwdns61438:0crwdne61438:0 | crwdns61442:0crwdne61442:0 |
| crwdns61446:0crwdne61446:0 | crwdns61450:0crwdne61450:0 | crwdns61454:0crwdne61454:0 |
| crwdns61458:0crwdne61458:0 | crwdns61460:0crwdne61460:0 | crwdns61464:0crwdne61464:0 |
| crwdns61468:0crwdne61468:0 | crwdns61472:0crwdne61472:0 | crwdns61476:0crwdne61476:0 |
| crwdns61480:0crwdne61480:0 | crwdns61484:0crwdne61484:0 | crwdns61486:0crwdne61486:0 |
| crwdns61490:0crwdne61490:0 | crwdns61494:0crwdne61494:0 | crwdns61498:0crwdne61498:0 crwdns61502:0crwdne61502:0 |
| crwdns61506:0crwdne61506:0 | crwdns61508:0crwdne61508:0 | crwdns61512:0crwdne61512:0 crwdns61516:0crwdne61516:0 |
| crwdns61520:0crwdne61520:0 | crwdns61524:0crwdne61524:0 | crwdns61528:0crwdne61528:0 |
crwdns61530:0crwdne61530:0
</Tab>
</Tabs>
## crwdns61534:0crwdne61534:0
crwdns61538:0crwdne61538:0
<Tabs>
<Tab title="Usage">
```jsx
import { RecoilRoot } from "recoil";
import { AutosizeTextInput } from "@/ui/input/components/AutosizeTextInput";
export const MyComponent = () => {
return (
<RecoilRoot>
<AutosizeTextInput
onValidate={() => console.log("onValidate function fired")}
minRows={1}
placeholder="Write a comment"
onFocus={() => console.log("onFocus function fired")}
variant="icon"
buttonTitle
value="Task: "
/>
</RecoilRoot>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61542:0crwdne61542:0 | crwdns61546:0crwdne61546:0 | crwdns61550:0crwdne61550:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns61554:0crwdne61554:0 | crwdns61558:0crwdne61558:0 | crwdns61560:0crwdne61560:0 |
| crwdns61564:0crwdne61564:0 | crwdns61568:0crwdne61568:0 | crwdns61572:0crwdne61572:0 |
| crwdns61576:0crwdne61576:0 | crwdns61578:0crwdne61578:0 | crwdns61582:0crwdne61582:0 |
| crwdns61586:0crwdne61586:0 | crwdns61590:0crwdne61590:0 | crwdns61592:0crwdne61592:0 |
| crwdns61596:0crwdne61596:0 | crwdns61600:0crwdne61600:0 | crwdns61604:0crwdne61604:0 crwdns61608:0crwdne61608:0 |
| crwdns61612:0crwdne61612:0 | crwdns61616:0crwdne61616:0 | crwdns61618:0crwdne61618:0 |
| crwdns61622:0crwdne61622:0 | crwdns61626:0crwdne61626:0 | crwdns61630:0crwdne61630:0 |
</Tab>
</Tabs>
## crwdns61634:0crwdne61634:0
crwdns61638:0crwdne61638:0
<Tabs>
<Tab title="Usage">
```jsx
import { TextArea } from "@/ui/input/components/TextArea";
export const MyComponent = () => {
return (
<TextArea
disabled={false}
minRows={4}
onChange={()=>console.log('On change function fired')}
placeholder="Enter text here"
value=""
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61642:0crwdne61642:0 | crwdns61646:0crwdne61646:0 | crwdns61648:0crwdne61648:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns61650:0crwdne61650:0 | crwdns61652:0crwdne61652:0 | crwdns61654:0crwdne61654:0 |
| crwdns61656:0crwdne61656:0 | crwdns61658:0crwdne61658:0 | crwdns61660:0crwdne61660:0 |
| crwdns61662:0crwdne61662:0 | crwdns61664:0crwdne61664:0 | crwdns61666:0crwdne61666:0 |
| crwdns61668:0crwdne61668:0 | crwdns61670:0crwdne61670:0 | crwdns61672:0crwdne61672:0 |
| crwdns61674:0crwdne61674:0 | crwdns61676:0crwdne61676:0 | crwdns61678:0crwdne61678:0 |
</Tab>
</Tabs>
@@ -0,0 +1,39 @@
---
title: crwdns62870:0crwdne62870:0
image: crwdns62872:0crwdne62872:0
---
<Frame>
<img src="/images/user-guide/table-views/table.png" alt="Header" />
</Frame>
<Tabs>
<Tab title="Usage">
```jsx
import { Toggle } from "twenty-ui/input";
export const MyComponent = () => {
return (
<Toggle
value = {true}
onChange = {()=>console.log('On Change event')}
color="green"
toggleSize = "medium"
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62874:0crwdne62874:0 | crwdns62876:0crwdne62876:0 | crwdns62878:0crwdne62878:0 | crwdns62880:0crwdne62880:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62882:0crwdne62882:0 | crwdns62884:0crwdne62884:0 | crwdns62886:0crwdne62886:0 | crwdns62888:0crwdne62888:0 |
| crwdns62890:0crwdne62890:0 | crwdns62892:0crwdne62892:0 | crwdns62894:0crwdne62894:0 | |
| crwdns62896:0crwdne62896:0 | crwdns62898:0crwdne62898:0 | crwdns62900:0crwdne62900:0 | crwdns62902:0crwdne62902:0 |
| crwdns62904:0crwdne62904:0 | crwdns62906:0crwdne62906:0 | crwdns62908:0crwdne62908:0 crwdns62910:0crwdne62910:0 | crwdns62912:0crwdne62912:0 |
</Tab>
</Tabs>
@@ -0,0 +1,22 @@
---
title: crwdns62978:0crwdne62978:0
description: crwdns62980:0crwdne62980:0
---
crwdns64238:0{ CardTitle }crwdne64238:0
## crwdns62982:0crwdne62982:0
<CardGroup cols={2}>
<Card href="/twenty-ui/display" img="/images/user-guide/views/filter.png">
<CardTitle>crwdns64240:0crwdne64240:0</CardTitle>crwdns62984:0crwdne62984:0</Card>
<Card href="/twenty-ui/progress-bar" img="/images/user-guide/fields/field.png">
<CardTitle>crwdns64242:0crwdne64242:0</CardTitle>crwdns62986:0crwdne62986:0</Card>
<Card href="/twenty-ui/input" img="/images/user-guide/tips/light-bulb.png">
<CardTitle>crwdns64244:0crwdne64244:0</CardTitle>crwdns62988:0crwdne62988:0</Card>
<Card href="/twenty-ui/navigation" img="/images/user-guide/tasks/tasks_header.png">
<CardTitle>crwdns64246:0crwdne64246:0</CardTitle>crwdns62990:0crwdne62990:0</Card>
</CardGroup>
@@ -0,0 +1,8 @@
---
title: crwdns62992:0crwdne62992:0
image: crwdns62994:0crwdne62994:0
---
<Frame>
<img src="/images/user-guide/tasks/tasks_header.png" alt="Header" />
</Frame>
@@ -0,0 +1,44 @@
---
title: crwdns63260:0crwdne63260:0
image: crwdns63282:0crwdne63282:0
---
<Frame>
<img src="/images/user-guide/fields/field.png" alt="Header" />
</Frame>
crwdns63290:0crwdne63290:0
<Tabs>
<Tab title="Usage">
```jsx
import { BrowserRouter } from "react-router-dom";
import { Breadcrumb } from "@/ui/navigation/bread-crumb/components/Breadcrumb";
export const MyComponent = () => {
const breadcrumbLinks = [
{ children: "Home", href: "/" },
{ children: "Category", href: "/category" },
{ children: "Subcategory", href: "/category/subcategory" },
{ children: "Current Page" },
];
return (
<BrowserRouter>
<Breadcrumb className links={breadcrumbLinks} />
</BrowserRouter>
)
};
```
</Tab>
<Tab title="Props">
| crwdns63296:0crwdne63296:0 | crwdns63302:0crwdne63302:0 | crwdns63308:0crwdne63308:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns63314:0crwdne63314:0 | crwdns63320:0crwdne63320:0 | crwdns63324:0crwdne63324:0 |
| crwdns63330:0crwdne63330:0 | crwdns63338:0crwdne63338:0 | crwdns63344:0crwdne63344:0 crwdns63352:0crwdne63352:0 |
</Tab>
</Tabs>
@@ -0,0 +1,168 @@
---
title: crwdns61382:0crwdne61382:0
image: crwdns61384:0crwdne61384:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/20.png" alt="Header" />
</Frame>
## crwdns61386:0crwdne61386:0
crwdns61388:0crwdne61388:0
<Tabs>
<Tab title="Usage">
```jsx
import { BrowserRouter as Router } from 'react-router-dom';
import { ContactLink } from 'twenty-ui/navigation';
export const MyComponent = () => {
const handleLinkClick = (event) => {
console.log('Contact link clicked!', event);
};
return (
<Router>
<ContactLink
className
href="mailto:example@example.com"
onClick={handleLinkClick}
>
example@example.com
</ContactLink>
</Router>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61390:0crwdne61390:0 | crwdns61392:0crwdne61392:0 | crwdns61394:0crwdne61394:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns61396:0crwdne61396:0 | crwdns61398:0crwdne61398:0 | crwdns61400:0crwdne61400:0 |
| crwdns61404:0crwdne61404:0 | crwdns61406:0crwdne61406:0 | crwdns61408:0crwdne61408:0 |
| crwdns61410:0crwdne61410:0 | crwdns61414:0crwdne61414:0 | crwdns61418:0crwdne61418:0 |
| crwdns61422:0crwdne61422:0 | crwdns61426:0crwdne61426:0 | crwdns61430:0crwdne61430:0 |
</Tab>
</Tabs>
## crwdns61436:0crwdne61436:0
crwdns61440:0crwdne61440:0
<Tabs>
<Tab title="Usage">
```jsx
import { RawLink } from "/navigation";
import { BrowserRouter as Router } from "react-router-dom";
export const MyComponent = () => {
const handleLinkClick = (event) => {
console.log("Contact link clicked!", event);
};
return (
<Router>
<RawLink className href="/contact" onClick={handleLinkClick}>
Contact Us
</RawLink>
</Router>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61444:0crwdne61444:0 | crwdns61448:0crwdne61448:0 | crwdns61452:0crwdne61452:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns61456:0crwdne61456:0 | crwdns61462:0crwdne61462:0 | crwdns61466:0crwdne61466:0 |
| crwdns61470:0crwdne61470:0 | crwdns61474:0crwdne61474:0 | crwdns61478:0crwdne61478:0 |
| crwdns61482:0crwdne61482:0 | crwdns61488:0crwdne61488:0 | crwdns61492:0crwdne61492:0 |
| crwdns61496:0crwdne61496:0 | crwdns61500:0crwdne61500:0 | crwdns61504:0crwdne61504:0 |
</Tab>
</Tabs>
## crwdns61510:0crwdne61510:0
crwdns61514:0crwdne61514:0
<Tabs>
<Tab title="Usage">
```jsx
import { RoundedLink } from "/navigation";
import { BrowserRouter as Router } from "react-router-dom";
export const MyComponent = () => {
const handleLinkClick = (event) => {
console.log("Contact link clicked!", event);
};
return (
<Router>
<RoundedLink href="/contact" onClick={handleLinkClick}>
Contact Us
</RoundedLink>
</Router>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61518:0crwdne61518:0 | crwdns61522:0crwdne61522:0 | crwdns61526:0crwdne61526:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns61532:0crwdne61532:0 | crwdns61536:0crwdne61536:0 | crwdns61540:0crwdne61540:0 |
| crwdns61544:0crwdne61544:0 | crwdns61548:0crwdne61548:0 | crwdns61552:0crwdne61552:0 |
| crwdns61556:0crwdne61556:0 | crwdns61562:0crwdne61562:0 | crwdns61566:0crwdne61566:0 |
</Tab>
</Tabs>
## crwdns61570:0crwdne61570:0
crwdns61574:0crwdne61574:0
<Tabs>
<Tab title="Usage">
```jsx
import { SocialLink } from "twenty-ui/navigation";
import { BrowserRouter as Router } from "react-router-dom";
export const MyComponent = () => {
return (
<Router>
<SocialLink
type="twitter"
href="https://twitter.com/twentycrm"
></SocialLink>
</Router>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61580:0crwdne61580:0 | crwdns61584:0crwdne61584:0 | crwdns61588:0crwdne61588:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns61594:0crwdne61594:0 | crwdns61598:0crwdne61598:0 | crwdns61602:0crwdne61602:0 |
| crwdns61606:0crwdne61606:0 | crwdns61610:0crwdne61610:0 | crwdns61614:0crwdne61614:0 |
| crwdns61620:0crwdne61620:0 | crwdns61624:0crwdne61624:0 | crwdns61628:0crwdne61628:0 crwdns61632:0crwdne61632:0 |
| crwdns61636:0crwdne61636:0 | crwdns61640:0crwdne61640:0 | crwdns61644:0crwdne61644:0 |
</Tab>
</Tabs>
@@ -0,0 +1,458 @@
---
title: crwdns62346:0crwdne62346:0
image: crwdns62348:0crwdne62348:0
---
<Frame>
<img src="/images/user-guide/kanban-views/kanban.png" alt="Header" />
</Frame>
crwdns62350:0crwdne62350:0
<Tabs>
<Tab title="Usage">
```jsx
import { IconBell } from "@tabler/icons-react";
import { IconAlertCircle } from "@tabler/icons-react";
import { MenuItem } from "twenty-ui/display";
export const MyComponent = () => {
const handleMenuItemClick = (event) => {
console.log("Menu item clicked!", event);
};
const handleButtonClick = (event) => {
console.log("Icon button clicked!", event);
};
return (
<MenuItem
LeftIcon={IconBell}
accent="default"
text="Menu item text"
iconButtons={[{ Icon: IconAlertCircle, onClick: handleButtonClick }]}
isTooltipOpen={true}
testId="menu-item-1"
onClick={handleMenuItemClick}
className
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62352:0crwdne62352:0 | crwdns62354:0crwdne62354:0 | crwdns62356:0crwdne62356:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns62358:0crwdne62358:0 | crwdns62360:0crwdne62360:0 | crwdns62362:0crwdne62362:0 |
| crwdns62364:0crwdne62364:0 | crwdns62366:0crwdne62366:0 | crwdns62368:0crwdne62368:0 crwdns62370:0crwdne62370:0 |
| crwdns62372:0crwdne62372:0 | crwdns62374:0crwdne62374:0 | crwdns62376:0crwdne62376:0 |
| crwdns62378:0crwdne62378:0 | crwdns62380:0crwdne62380:0 | crwdns62382:0crwdne62382:0 |
| crwdns62384:0crwdne62384:0 | crwdns62386:0crwdne62386:0 | crwdns62388:0crwdne62388:0 |
| crwdns62390:0crwdne62390:0 | crwdns62392:0crwdne62392:0 | crwdns62394:0crwdne62394:0 |
| crwdns62396:0crwdne62396:0 | crwdns62398:0crwdne62398:0 | crwdns62400:0crwdne62400:0 |
| crwdns62402:0crwdne62402:0 | crwdns62404:0crwdne62404:0 | crwdns62406:0crwdne62406:0 |
</Tab>
</Tabs>
## crwdns62408:0crwdne62408:0
crwdns62410:0crwdne62410:0
### crwdns62412:0crwdne62412:0
crwdns62414:0crwdne62414:0
<Tabs>
<Tab title="Usage">
```jsx
import { IconBell } from "@tabler/icons-react";
import { MenuItemCommand } from "twenty-ui/display";
export const MyComponent = () => {
const handleCommandClick = () => {
console.log("Command clicked!");
};
return (
<MenuItemCommand
LeftIcon={IconBell}
text="First Option"
firstHotKey="⌘"
secondHotKey="1"
isSelected={true}
onClick={handleCommandClick}
className
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62416:0crwdne62416:0 | crwdns62418:0crwdne62418:0 | crwdns62420:0crwdne62420:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62422:0crwdne62422:0 | crwdns62424:0crwdne62424:0 | crwdns62426:0crwdne62426:0 |
| crwdns62428:0crwdne62428:0 | crwdns62430:0crwdne62430:0 | crwdns62432:0crwdne62432:0 |
| crwdns62434:0crwdne62434:0 | crwdns62436:0crwdne62436:0 | crwdns62438:0crwdne62438:0 |
| crwdns62440:0crwdne62440:0 | crwdns62442:0crwdne62442:0 | crwdns62444:0crwdne62444:0 |
| crwdns62446:0crwdne62446:0 | crwdns62448:0crwdne62448:0 | crwdns62450:0crwdne62450:0 |
| crwdns62452:0crwdne62452:0 | crwdns62454:0crwdne62454:0 | crwdns62456:0crwdne62456:0 |
| crwdns62458:0crwdne62458:0 | crwdns62460:0crwdne62460:0 | crwdns62462:0crwdne62462:0 |
</Tab>
</Tabs>
### crwdns62464:0crwdne62464:0
crwdns62466:0crwdne62466:0
<Tabs>
<Tab title="Usage">
```jsx
import { IconBell } from "@tabler/icons-react";
import { IconAlertCircle } from "@tabler/icons-react";
import { MenuItemDraggable } from "twenty-ui/display";
export const MyComponent = () => {
const handleMenuItemClick = (event) => {
console.log("Menu item clicked!", event);
};
return (
<MenuItemDraggable
LeftIcon={IconBell}
accent="default"
iconButtons={[{ Icon: IconAlertCircle, onClick: handleButtonClick }]}
isTooltipOpen={false}
onClick={handleMenuItemClick}
text="Menu item draggable"
isDragDisabled={false}
className
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62468:0crwdne62468:0 | crwdns62470:0crwdne62470:0 | crwdns62472:0crwdne62472:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns62474:0crwdne62474:0 | crwdns62476:0crwdne62476:0 | crwdns62478:0crwdne62478:0 |
| crwdns62480:0crwdne62480:0 | crwdns62482:0crwdne62482:0 | crwdns62484:0crwdne62484:0 crwdns62486:0crwdne62486:0 |
| crwdns62488:0crwdne62488:0 | crwdns62490:0crwdne62490:0 | crwdns62492:0crwdne62492:0 |
| crwdns62494:0crwdne62494:0 | crwdns62496:0crwdne62496:0 | crwdns62498:0crwdne62498:0 |
| crwdns62500:0crwdne62500:0 | crwdns62502:0crwdne62502:0 | crwdns62504:0crwdne62504:0 |
| crwdns62506:0crwdne62506:0 | crwdns62508:0crwdne62508:0 | crwdns62510:0crwdne62510:0 |
| crwdns62512:0crwdne62512:0 | crwdns62514:0crwdne62514:0 | crwdns62516:0crwdne62516:0 |
| crwdns62518:0crwdne62518:0 | crwdns62520:0crwdne62520:0 | crwdns62522:0crwdne62522:0 |
</Tab>
</Tabs>
### crwdns62524:0crwdne62524:0
crwdns62526:0crwdne62526:0
<Tabs>
<Tab title="Usage">
```jsx
import { IconBell } from "@tabler/icons-react";
import { MenuItemMultiSelect } from "twenty-ui/display";
export const MyComponent = () => {
return (
<MenuItemMultiSelect
LeftIcon={IconBell}
text="First Option"
selected={false}
className
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62528:0crwdne62528:0 | crwdns62530:0crwdne62530:0 | crwdns62532:0crwdne62532:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62534:0crwdne62534:0 | crwdns62536:0crwdne62536:0 | crwdns62538:0crwdne62538:0 |
| crwdns62540:0crwdne62540:0 | crwdns62542:0crwdne62542:0 | crwdns62544:0crwdne62544:0 |
| crwdns62546:0crwdne62546:0 | crwdns62548:0crwdne62548:0 | crwdns62550:0crwdne62550:0 |
| crwdns62552:0crwdne62552:0 | crwdns62554:0crwdne62554:0 | crwdns62556:0crwdne62556:0 |
| crwdns62558:0crwdne62558:0 | crwdns62560:0crwdne62560:0 | crwdns62562:0crwdne62562:0 |
</Tab>
</Tabs>
### crwdns62564:0crwdne62564:0
crwdns62566:0crwdne62566:0
<Tabs>
<Tab title="Usage">
```jsx
import { MenuItemMultiSelectAvatar } from "twenty-ui/display";
export const MyComponent = () => {
const imageUrl =
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
return (
<MenuItemMultiSelectAvatar
avatar={<img src={imageUrl} alt="Avatar" />}
text="First Option"
selected={false}
className
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62568:0crwdne62568:0 | crwdns62570:0crwdne62570:0 | crwdns62572:0crwdne62572:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62574:0crwdne62574:0 | crwdns62576:0crwdne62576:0 | crwdns62578:0crwdne62578:0 |
| crwdns62580:0crwdne62580:0 | crwdns62582:0crwdne62582:0 | crwdns62584:0crwdne62584:0 |
| crwdns62586:0crwdne62586:0 | crwdns62588:0crwdne62588:0 | crwdns62590:0crwdne62590:0 |
| crwdns62592:0crwdne62592:0 | crwdns62594:0crwdne62594:0 | crwdns62596:0crwdne62596:0 |
| crwdns62598:0crwdne62598:0 | crwdns62600:0crwdne62600:0 | crwdns62602:0crwdne62602:0 |
</Tab>
</Tabs>
### crwdns62604:0crwdne62604:0
crwdns62606:0crwdne62606:0
<Tabs>
<Tab title="Usage">
```jsx
import { IconBell } from "@tabler/icons-react";
import { MenuItemNavigate } from "twenty-ui/display";
export const MyComponent = () => {
const handleNavigation = () => {
console.log("Navigate to another page");
};
return (
<MenuItemNavigate
LeftIcon={IconBell}
text="First Option"
onClick={handleNavigation}
className
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62608:0crwdne62608:0 | crwdns62610:0crwdne62610:0 | crwdns62612:0crwdne62612:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62614:0crwdne62614:0 | crwdns62616:0crwdne62616:0 | crwdns62618:0crwdne62618:0 |
| crwdns62620:0crwdne62620:0 | crwdns62622:0crwdne62622:0 | crwdns62624:0crwdne62624:0 |
| crwdns62626:0crwdne62626:0 | crwdns62628:0crwdne62628:0 | crwdns62630:0crwdne62630:0 |
| crwdns62632:0crwdne62632:0 | crwdns62634:0crwdne62634:0 | crwdns62636:0crwdne62636:0 |
</Tab>
</Tabs>
### crwdns62638:0crwdne62638:0
crwdns62640:0crwdne62640:0
<Tabs>
<Tab title="Usage">
```jsx
import { IconBell } from "@tabler/icons-react";
import { MenuItemSelect } from "twenty-ui/display";
export const MyComponent = () => {
const handleSelection = () => {
console.log("Menu item selected");
};
return (
<MenuItemSelect
LeftIcon={IconBell}
text="First Option"
selected={true}
disabled={false}
hovered={false}
onClick={handleSelection}
className
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62642:0crwdne62642:0 | crwdns62644:0crwdne62644:0 | crwdns62646:0crwdne62646:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62648:0crwdne62648:0 | crwdns62650:0crwdne62650:0 | crwdns62652:0crwdne62652:0 |
| crwdns62654:0crwdne62654:0 | crwdns62656:0crwdne62656:0 | crwdns62658:0crwdne62658:0 |
| crwdns62660:0crwdne62660:0 | crwdns62662:0crwdne62662:0 | crwdns62664:0crwdne62664:0 |
| crwdns62666:0crwdne62666:0 | crwdns62668:0crwdne62668:0 | crwdns62670:0crwdne62670:0 |
| crwdns62672:0crwdne62672:0 | crwdns62674:0crwdne62674:0 | crwdns62676:0crwdne62676:0 |
| crwdns62678:0crwdne62678:0 | crwdns62680:0crwdne62680:0 | crwdns62682:0crwdne62682:0 |
| crwdns62684:0crwdne62684:0 | crwdns62686:0crwdne62686:0 | crwdns62688:0crwdne62688:0 |
</Tab>
</Tabs>
### crwdns62690:0crwdne62690:0
crwdns62692:0crwdne62692:0
<Tabs>
<Tab title="Usage">
```jsx
import { MenuItemSelectAvatar } from "twenty-ui/display";
export const MyComponent = () => {
const imageUrl =
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAYABgAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAABgAAAAAQAAAGAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABSgAwAEAAAAAQAAABQAAAAA/8AAEQgAFAAUAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACwgICggHCwoJCg0MCw0RHBIRDw8RIhkaFBwpJCsqKCQnJy0yQDctMD0wJyc4TDk9Q0VISUgrNk9VTkZUQEdIRf/bAEMBDA0NEQ8RIRISIUUuJy5FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRf/dAAQAAv/aAAwDAQACEQMRAD8Ava1q728otYY98joSCTgZrnbXWdTtrhrfVZXWLafmcAEkdgR/hVltQku9Q8+OIEBcGOT+ID0PY1ka1KH2u8ToqnPLbmIqG7u6LtbQ7RXBRec4Uck9eKXcPWsKDWVnhWSL5kYcFelSf2m3901POh8jP//QoyIAnTuKpXsY82NsksUyWPU5q/L9z8RVK++/F/uCsVsaEURwgA4HtT9x9TUcf3KfUGh//9k=";
const handleSelection = () => {
console.log("Menu item selected");
};
return (
<MenuItemSelectAvatar
avatar={<img src={imageUrl} alt="Avatar" />}
text="First Option"
selected={true}
disabled={false}
hovered={false}
testId="menu-item-test"
onClick={handleSelection}
className
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62694:0crwdne62694:0 | crwdns62696:0crwdne62696:0 | crwdns62698:0crwdne62698:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns62700:0crwdne62700:0 | crwdns62702:0crwdne62702:0 | crwdns62704:0crwdne62704:0 |
| crwdns62706:0crwdne62706:0 | crwdns62708:0crwdne62708:0 | crwdns62710:0crwdne62710:0 |
| crwdns62712:0crwdne62712:0 | crwdns62714:0crwdne62714:0 | crwdns62716:0crwdne62716:0 |
| crwdns62718:0crwdne62718:0 | crwdns62720:0crwdne62720:0 | crwdns62722:0crwdne62722:0 |
| crwdns62724:0crwdne62724:0 | crwdns62726:0crwdne62726:0 | crwdns62728:0crwdne62728:0 |
| crwdns62730:0crwdne62730:0 | crwdns62732:0crwdne62732:0 | crwdns62734:0crwdne62734:0 |
| crwdns62736:0crwdne62736:0 | crwdns62738:0crwdne62738:0 | crwdns62740:0crwdne62740:0 |
| crwdns62742:0crwdne62742:0 | crwdns62744:0crwdne62744:0 | crwdns62746:0crwdne62746:0 |
</Tab>
</Tabs>
### crwdns62748:0crwdne62748:0
crwdns62750:0crwdne62750:0
<Tabs>
<Tab title="Usage">
```jsx
import { MenuItemSelectColor } from "twenty-ui/display";
export const MyComponent = () => {
const handleSelection = () => {
console.log("Menu item selected");
};
return (
<MenuItemSelectColor
color="green"
selected={true}
disabled={false}
hovered={true}
variant="default"
onClick={handleSelection}
className
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62752:0crwdne62752:0 | crwdns62754:0crwdne62754:0 | crwdns62756:0crwdne62756:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns62758:0crwdne62758:0 | crwdns62760:0crwdne62760:0 | crwdns62762:0crwdne62762:0 crwdns62764:0crwdne62764:0 |
| crwdns62766:0crwdne62766:0 | crwdns62768:0crwdne62768:0 | crwdns62770:0crwdne62770:0 |
| crwdns62772:0crwdne62772:0 | crwdns62774:0crwdne62774:0 | crwdns62776:0crwdne62776:0 |
| crwdns62778:0crwdne62778:0 | crwdns62780:0crwdne62780:0 | crwdns62782:0crwdne62782:0 |
| crwdns62784:0crwdne62784:0 | crwdns62786:0crwdne62786:0 | crwdns62788:0crwdne62788:0 crwdns62790:0crwdne62790:0 |
| crwdns62792:0crwdne62792:0 | crwdns62794:0crwdne62794:0 | crwdns62796:0crwdne62796:0 |
| crwdns62798:0crwdne62798:0 | crwdns62800:0crwdne62800:0 | crwdns62802:0crwdne62802:0 |
</Tab>
</Tabs>
### crwdns62804:0crwdne62804:0
crwdns62806:0crwdne62806:0
<Tabs>
<Tab title="Usage">
```jsx
import { IconBell } from '@tabler/icons-react';
import { MenuItemToggle } from 'twenty-ui/display';
export const MyComponent = () => {
return (
<MenuItemToggle
LeftIcon={IconBell}
text="First Option"
toggled={true}
toggleSize="small"
className
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns62808:0crwdne62808:0 | crwdns62810:0crwdne62810:0 | crwdns62812:0crwdne62812:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns62814:0crwdne62814:0 | crwdns62816:0crwdne62816:0 | crwdns62818:0crwdne62818:0 |
| crwdns62820:0crwdne62820:0 | crwdns62822:0crwdne62822:0 | crwdns62824:0crwdne62824:0 |
| crwdns62826:0crwdne62826:0 | crwdns62828:0crwdne62828:0 | crwdns62830:0crwdne62830:0 |
| crwdns62832:0crwdne62832:0 | crwdns62834:0crwdne62834:0 | crwdns62836:0crwdne62836:0 |
| crwdns62838:0crwdne62838:0 | crwdns62840:0crwdne62840:0 | crwdns62842:0crwdne62842:0 crwdns62844:0crwdne62844:0 |
| crwdns62846:0crwdne62846:0 | crwdns62848:0crwdne62848:0 | crwdns62850:0crwdne62850:0 |
</Tab>
</Tabs>
@@ -0,0 +1,52 @@
---
title: crwdns63506:0crwdne63506:0
image: crwdns63508:0crwdne63508:0
---
<Frame>
<img src="/images/user-guide/table-views/table.png" alt="Header" />
</Frame>
crwdns63510:0crwdne63510:0
<Tabs>
<Tab title="Usage">
```jsx
import { IconHome, IconUser, IconSettings } from '@tabler/icons-react';
import { NavigationBar } from "@/ui/navigation/navigation-bar/components/NavigationBar";
export const MyComponent = () => {
const navigationItems = [
{
name: "Home",
Icon: IconHome,
onClick: () => console.log("Home clicked"),
},
{
name: "Profile",
Icon: IconUser,
onClick: () => console.log("Profile clicked"),
},
{
name: "Settings",
Icon: IconSettings,
onClick: () => console.log("Settings clicked"),
},
];
return <NavigationBar activeItemName="Home" items={navigationItems}/>;
};
```
</Tab>
<Tab title="Props">
| crwdns63512:0crwdne63512:0 | crwdns63514:0crwdne63514:0 | crwdns63516:0crwdne63516:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns63518:0crwdne63518:0 | crwdns63520:0crwdne63520:0 | crwdns63522:0crwdne63522:0 |
| crwdns63524:0crwdne63524:0 | crwdns63526:0crwdne63526:0 | crwdns63528:0crwdne63528:0 crwdns63530:0crwdne63530:0 |
</Tab>
</Tabs>
@@ -0,0 +1,38 @@
---
title: crwdns61964:0crwdne61964:0
image: crwdns61966:0crwdne61966:0
---
<Frame>
<img src="/images/user-guide/api/api.png" alt="Header" />
</Frame>
crwdns61968:0crwdne61968:0 crwdns61970:0crwdne61970:0
<Tabs>
<Tab title="Usage">
```jsx
import { StepBar } from "@/ui/navigation/step-bar/components/StepBar";
export const MyComponent = () => {
return (
<StepBar activeStep={2}>
<StepBar.Step>Step 1</StepBar.Step>
<StepBar.Step>Step 2</StepBar.Step>
<StepBar.Step>Step 3</StepBar.Step>
</StepBar>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61972:0crwdne61972:0 | crwdns61974:0crwdne61974:0 | crwdns61976:0crwdne61976:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| crwdns61978:0crwdne61978:0 | crwdns61980:0crwdne61980:0 | crwdns61982:0crwdne61982:0 crwdns61984:0crwdne61984:0 |
</Tab>
</Tabs>
@@ -0,0 +1,77 @@
---
title: crwdns61866:0crwdne61866:0
image: crwdns61868:0crwdne61868:0
---
<Frame>
<img src="/images/user-guide/emails/emails_header.png" alt="Header" />
</Frame>
crwdns61870:0crwdne61870:0
<Tabs>
<Tab title="Usage">
```jsx
import { ProgressBar } from "twenty-ui/feedback";
export const MyComponent = () => {
return (
<ProgressBar
duration={6000}
delay={0}
easing="easeInOut"
barHeight={10}
barColor="#4bb543"
autoStart={true}
/>
);
};
```
</Tab>
<Tab title="Props">
| crwdns61872:0crwdne61872:0 | crwdns61874:0crwdne61874:0 | crwdns61876:0crwdne61876:0 | crwdns61878:0crwdne61878:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns61880:0crwdne61880:0 | crwdns61882:0crwdne61882:0 | crwdns61884:0crwdne61884:0 | crwdns61886:0crwdne61886:0 |
| crwdns61888:0crwdne61888:0 | crwdns61890:0crwdne61890:0 | crwdns61892:0crwdne61892:0 | crwdns61894:0crwdne61894:0 |
| crwdns61896:0crwdne61896:0 | crwdns61898:0crwdne61898:0 | crwdns61900:0crwdne61900:0 | crwdns61902:0crwdne61902:0 |
| crwdns61904:0crwdne61904:0 | crwdns61906:0crwdne61906:0 | crwdns61908:0crwdne61908:0 | crwdns61910:0crwdne61910:0 |
| crwdns61912:0crwdne61912:0 | crwdns61914:0crwdne61914:0 | crwdns61916:0crwdne61916:0 | crwdns61918:0crwdne61918:0 |
| crwdns61920:0crwdne61920:0 | crwdns61922:0crwdne61922:0 | crwdns61924:0crwdne61924:0 | crwdns61926:0crwdne61926:0 |
</Tab>
</Tabs>
## crwdns61928:0crwdne61928:0
crwdns61930:0crwdne61930:0
<Tabs>
<Tab title="Usage">
```jsx
import { CircularProgressBar } from "@/ui/feedback/progress-bar/components/CircularProgressBar";
export const MyComponent = () => {
return <CircularProgressBar size={80} barWidth={6} barColor="green" />;
};
```
</Tab>
<Tab title="Props">
| crwdns61932:0crwdne61932:0 | crwdns61934:0crwdne61934:0 | crwdns61936:0crwdne61936:0 | crwdns61938:0crwdne61938:0 |
| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
| crwdns61940:0crwdne61940:0 | crwdns61942:0crwdne61942:0 | crwdns61944:0crwdne61944:0 | crwdns61946:0crwdne61946:0 |
| crwdns61948:0crwdne61948:0 | crwdns61950:0crwdne61950:0 | crwdns61952:0crwdne61952:0 | crwdns61954:0crwdne61954:0 |
| crwdns61956:0crwdne61956:0 | crwdns61958:0crwdne61958:0 | crwdns61960:0crwdne61960:0 | crwdns61962:0crwdne61962:0 |
</Tab>
</Tabs>
@@ -0,0 +1,114 @@
---
title: crwdns55596:0crwdne55596:0
info: "crwdns55598:0crwdne55598:0"
image: crwdns55600:0crwdne55600:0
sectionInfo: crwdns55602:0crwdne55602:0
---
<Frame>
<img src="/images/user-guide/emails/emails_header.png" alt="Header" />
</Frame>
crwdns55604:0/user-guide/settings/email-calendar-setupcrwdne55604:0
## crwdns55606:0crwdne55606:0
crwdns55608:0crwdne55608:0
### crwdns55610:0crwdne55610:0
crwdns55612:0crwdne55612:0
- crwdns55614:0crwdne55614:0
- crwdns55616:0crwdne55616:0
- crwdns55618:0crwdne55618:0 crwdns55620:0crwdne55620:0
### crwdns55622:0crwdne55622:0
1. crwdns55624:0crwdne55624:0
2. crwdns55626:0crwdne55626:0
3. crwdns55628:0crwdne55628:0
4. crwdns55630:0crwdne55630:0
crwdns55632:0crwdne55632:0
## crwdns55634:0crwdne55634:0
### crwdns55636:0crwdne55636:0
crwdns55638:0crwdne55638:0
- crwdns55640:0crwdne55640:0
- crwdns55642:0crwdne55642:0
- crwdns55644:0crwdne55644:0
- crwdns55646:0crwdne55646:0
### crwdns55648:0crwdne55648:0
crwdns55650:0crwdne55650:0
- crwdns55652:0crwdne55652:0
- crwdns55654:0crwdne55654:0
- crwdns55656:0crwdne55656:0
## crwdns55658:0crwdne55658:0
### crwdns55660:0crwdne55660:0
- crwdns55662:0crwdne55662:0
- crwdns55664:0crwdne55664:0
- crwdns55666:0crwdne55666:0
- crwdns55668:0crwdne55668:0
### crwdns55670:0crwdne55670:0
- crwdns55672:0crwdne55672:0
- crwdns55674:0crwdne55674:0
- crwdns55676:0crwdne55676:0
### crwdns55678:0crwdne55678:0
crwdns55680:0crwdne55680:0
1. crwdns55682:0crwdne55682:0
2. crwdns55684:0crwdne55684:0
3. crwdns55686:0crwdne55686:0
## crwdns55688:0crwdne55688:0
### crwdns55690:0crwdne55690:0
- crwdns55692:0crwdne55692:0
- crwdns55694:0crwdne55694:0
- crwdns55696:0crwdne55696:0
- crwdns55698:0crwdne55698:0
- crwdns55700:0crwdne55700:0
- crwdns55702:0crwdne55702:0
### crwdns55704:0crwdne55704:0
- crwdns55706:0crwdne55706:0
- crwdns55708:0crwdne55708:0
## crwdns55710:0crwdne55710:0
### crwdns55712:0crwdne55712:0
crwdns55714:0crwdne55714:0
crwdns55716:0crwdne55716:0
- crwdns55718:0crwdne55718:0
- crwdns55720:0crwdne55720:0
- crwdns55722:0crwdne55722:0
crwdns55724:0crwdne55724:0
### crwdns55726:0crwdne55726:0
1. crwdns55728:0crwdne55728:0
2. crwdns55730:0crwdne55730:0
3. crwdns55732:0crwdne55732:0
4. crwdns55734:0crwdne55734:0
@@ -0,0 +1,99 @@
---
title: crwdns58806:0crwdne58806:0
info: crwdns58808:0crwdne58808:0
image: crwdns58810:0crwdne58810:0
sectionInfo: crwdns58812:0crwdne58812:0
---
crwdns63944:0{ VimeoEmbed }crwdne63944:0
<Frame>
<img src="/images/user-guide/notes/notes_header.png" alt="Header" />
</Frame>
crwdns58814:0crwdne58814:0 crwdns58816:0crwdne58816:0
## crwdns58818:0crwdne58818:0
### crwdns58820:0crwdne58820:0
- crwdns58822:0crwdne58822:0
- crwdns58824:0crwdne58824:0
- crwdns58826:0crwdne58826:0
### crwdns58828:0crwdne58828:0
- crwdns58830:0crwdne58830:0
- crwdns58832:0crwdne58832:0
- crwdns58834:0crwdne58834:0
### crwdns58836:0crwdne58836:0
- crwdns58838:0crwdne58838:0
- crwdns58840:0crwdne58840:0
- crwdns58842:0crwdne58842:0
### crwdns58844:0crwdne58844:0
crwdns58846:0/user-guide/workflows/getting-started-workflowscrwdne58846:0
- crwdns58848:0crwdne58848:0
- crwdns58850:0crwdne58850:0
## crwdns58852:0crwdne58852:0
### crwdns58854:0crwdne58854:0
crwdns58856:0crwdne58856:0 crwdns58858:0crwdne58858:0
- crwdns58860:0crwdne58860:0
- crwdns58862:0crwdne58862:0
- crwdns58864:0crwdne58864:0
- crwdns58866:0crwdne58866:0
crwdns58868:0crwdne58868:0
### crwdns58870:0crwdne58870:0
crwdns58872:0crwdne58872:0 crwdns58874:0crwdne58874:0
## crwdns58876:0crwdne58876:0
crwdns58878:0crwdne58878:0 crwdns58880:0crwdne58880:0
- crwdns58882:0crwdne58882:0
- crwdns58884:0crwdne58884:0
crwdns58886:0crwdne58886:0
### crwdns58888:0crwdne58888:0
crwdns58890:0crwdne58890:0
### crwdns58892:0crwdne58892:0
crwdns58894:0crwdne58894:0 crwdns58896:0crwdne58896:0 crwdns58898:0crwdne58898:0
crwdns58900:0crwdne58900:0
crwdns58902:0crwdne58902:0 crwdns58904:0crwdne58904:0 crwdns58906:0crwdne58906:0
<VimeoEmbed videoId="927896302" title="Format note content" />
## crwdns58908:0crwdne58908:0
crwdns58910:0crwdne58910:0
## crwdns58912:0crwdne58912:0
crwdns58914:0crwdne58914:0
crwdns58916:0crwdne58916:0
1. crwdns58918:0crwdne58918:0
2. crwdns58920:0crwdne58920:0
3. crwdns58922:0crwdne58922:0
4. crwdns58924:0crwdne58924:0
crwdns58926:0crwdne58926:0 crwdns58928:0crwdne58928:0
@@ -0,0 +1,118 @@
---
title: crwdns57150:0crwdne57150:0
info: crwdns57152:0crwdne57152:0
image: crwdns57154:0crwdne57154:0
sectionInfo: crwdns57156:0crwdne57156:0
---
crwdns63930:0{ VimeoEmbed }crwdne63930:0
<Frame>
<img src="/images/user-guide/tasks/tasks_header.png" alt="Header" />
</Frame>
crwdns57158:0crwdne57158:0 crwdns57160:0crwdne57160:0
## crwdns57162:0crwdne57162:0
### crwdns57164:0crwdne57164:0
- crwdns57166:0crwdne57166:0
- crwdns57168:0crwdne57168:0
- crwdns57170:0crwdne57170:0
### crwdns57172:0crwdne57172:0
- crwdns57174:0crwdne57174:0
- crwdns57176:0crwdne57176:0
- crwdns57178:0crwdne57178:0
### crwdns57180:0crwdne57180:0
crwdns57182:0crwdne57182:0
- crwdns57184:0crwdne57184:0
- crwdns57186:0crwdne57186:0
- crwdns57188:0crwdne57188:0
- crwdns57190:0crwdne57190:0
- crwdns57192:0crwdne57192:0
### crwdns57194:0crwdne57194:0
crwdns57196:0/user-guide/workflows/getting-started-workflowscrwdne57196:0
- crwdns57198:0crwdne57198:0
- crwdns57200:0crwdne57200:0
- crwdns57202:0crwdne57202:0
- crwdns57204:0crwdne57204:0
## crwdns57206:0crwdne57206:0
### crwdns57208:0crwdne57208:0
crwdns57210:0crwdne57210:0 crwdns57212:0crwdne57212:0
- crwdns57214:0crwdne57214:0
- crwdns57216:0crwdne57216:0
- crwdns57218:0crwdne57218:0
- crwdns57220:0crwdne57220:0
crwdns57222:0crwdne57222:0
### crwdns57224:0crwdne57224:0
crwdns57226:0crwdne57226:0 crwdns57228:0crwdne57228:0
## crwdns57230:0crwdne57230:0
crwdns57232:0crwdne57232:0 crwdns57234:0crwdne57234:0
- crwdns57236:0crwdne57236:0
- crwdns57238:0crwdne57238:0
- crwdns57240:0crwdne57240:0
<VimeoEmbed videoId="928786754" title="Creating tasks" />
### crwdns57242:0crwdne57242:0
crwdns57244:0crwdne57244:0 crwdns57246:0crwdne57246:0
## crwdns57248:0crwdne57248:0
crwdns57250:0crwdne57250:0 crwdns57252:0crwdne57252:0
- crwdns57254:0crwdne57254:0
- crwdns57256:0crwdne57256:0
crwdns57258:0crwdne57258:0
<VimeoEmbed videoId="927908280" title="Viewing tasks" />
## crwdns57260:0crwdne57260:0
crwdns57262:0crwdne57262:0 crwdns57264:0crwdne57264:0
- crwdns57266:0crwdne57266:0
- crwdns57268:0crwdne57268:0
- crwdns57270:0crwdne57270:0
## crwdns57272:0crwdne57272:0
crwdns57274:0crwdne57274:0
1. crwdns57276:0crwdne57276:0
2. crwdns57278:0crwdne57278:0
3. crwdns57280:0crwdne57280:0
crwdns57282:0crwdne57282:0
<VimeoEmbed videoId="927910083" title="Marking tasks as complete" />
## crwdns57284:0crwdne57284:0
crwdns57286:0crwdne57286:0
1. crwdns57288:0crwdne57288:0
2. crwdns57290:0crwdne57290:0
crwdns57292:0crwdne57292:0 crwdns57294:0crwdne57294:0
@@ -0,0 +1,95 @@
---
title: crwdns58528:0crwdne58528:0
info: "crwdns58530:0crwdne58530:0"
image: crwdns58532:0crwdne58532:0
sectionInfo: "crwdns58534:0crwdne58534:0"
---
<Frame>
<img src="/images/user-guide/home/contact-and-account-management.png" alt="Header" />
</Frame>
## crwdns58536:0crwdne58536:0
crwdns58538:0crwdne58538:0 crwdns58540:0crwdne58540:0
### crwdns58542:0crwdne58542:0
crwdns58544:0crwdne58544:0 crwdns58546:0crwdne58546:0 crwdns58548:0crwdne58548:0 crwdns58550:0crwdne58550:0
crwdns58552:0crwdne58552:0
### crwdns58554:0crwdne58554:0
crwdns58556:0crwdne58556:0 crwdns58558:0crwdne58558:0 crwdns58560:0crwdne58560:0 crwdns58562:0/user-guide/getting-started/import-export-datacrwdne58562:0
### crwdns58564:0crwdne58564:0
crwdns58566:0crwdne58566:0
crwdns58568:0crwdne58568:0 crwdns58570:0crwdne58570:0
crwdns58572:0crwdne58572:0 crwdns58574:0crwdne58574:0
crwdns58576:0/user-guide/workflows/getting-started-workflowscrwdne58576:0
### crwdns58578:0crwdne58578:0
crwdns58580:0crwdne58580:0 crwdns58582:0crwdne58582:0 crwdns58584:0crwdne58584:0
crwdns58586:0crwdne58586:0 crwdns58588:0crwdne58588:0 crwdns58590:0/user-guide/collaboration/emails-and-calendarscrwdne58590:0
### crwdns58592:0crwdne58592:0
crwdns58594:0crwdne58594:0 crwdns58596:0crwdne58596:0
## crwdns58598:0crwdne58598:0
### crwdns58600:0crwdne58600:0
crwdns58602:0crwdne58602:0 crwdns58604:0crwdne58604:0 crwdns58606:0crwdne58606:0
crwdns58608:0crwdne58608:0 crwdns58610:0/user-guide/data-model/customize-your-data-modelcrwdne58610:0
### crwdns58612:0crwdne58612:0
crwdns58614:0crwdne58614:0 crwdns58616:0crwdne58616:0
crwdns58618:0crwdne58618:0
### crwdns58620:0crwdne58620:0
crwdns58622:0crwdne58622:0 crwdns58624:0crwdne58624:0 crwdns58626:0crwdne58626:0
### crwdns58628:0crwdne58628:0
crwdns58630:0crwdne58630:0 crwdns58632:0crwdne58632:0 crwdns58634:0/user-guide/crm-essentials/view-managementcrwdne58634:0
## crwdns58636:0crwdne58636:0
### crwdns58638:0crwdne58638:0
crwdns58640:0crwdne58640:0
- crwdns58642:0crwdne58642:0
- crwdns58644:0crwdne58644:0
- crwdns58646:0crwdne58646:0
- crwdns58648:0crwdne58648:0
- crwdns58650:0crwdne58650:0
- crwdns58652:0crwdne58652:0
- crwdns58654:0crwdne58654:0
- crwdns58656:0crwdne58656:0
crwdns58658:0crwdne58658:0 crwdns58660:0/user-guide/collaboration/emails-and-calendarscrwdne58660:0
### crwdns58662:0crwdne58662:0
crwdns58664:0crwdne58664:0 crwdns58666:0crwdne58666:0 crwdns58668:0/user-guide/data-model/customize-your-data-modelcrwdne58668:0
## crwdns58670:0crwdne58670:0
crwdns58672:0crwdne58672:0 crwdns58674:0crwdne58674:0
crwdns58676:0crwdne58676:0 crwdns58678:0crwdne58678:0
crwdns58680:0crwdne58680:0
@@ -0,0 +1,73 @@
---
title: crwdns57884:0crwdne57884:0
info: "crwdns57886:0crwdne57886:0"
image: crwdns57888:0crwdne57888:0
sectionInfo: "crwdns57890:0crwdne57890:0"
---
crwdns63940:0{ VimeoEmbed }crwdne63940:0
<Frame>
<img src="/images/user-guide/kanban-views/kanban.png" alt="Header" />
</Frame>
## crwdns57892:0crwdne57892:0
crwdns57894:0crwdne57894:0 crwdns57896:0crwdne57896:0
crwdns57898:0crwdne57898:0 crwdns57900:0crwdne57900:0
## crwdns57902:0crwdne57902:0
crwdns57904:0crwdne57904:0 crwdns57906:0crwdne57906:0 crwdns57908:0crwdne57908:0
### crwdns57910:0crwdne57910:0
crwdns57912:0crwdne57912:0 crwdns57914:0crwdne57914:0
<VimeoEmbed videoId="927888627" title="Video demonstration" />
### crwdns57916:0crwdne57916:0
crwdns57918:0crwdne57918:0 crwdns57920:0crwdne57920:0
#### crwdns57922:0crwdne57922:0
crwdns57924:0crwdne57924:0
<VimeoEmbed videoId="927890428" title="Video demonstration" />
#### crwdns57926:0crwdne57926:0
crwdns57928:0crwdne57928:0
crwdns57930:0crwdne57930:0
### crwdns57932:0crwdne57932:0
crwdns57934:0crwdne57934:0 crwdns57936:0crwdne57936:0 crwdns57938:0crwdne57938:0 crwdns57940:0crwdne57940:0
crwdns57942:0crwdne57942:0
crwdns57944:0crwdne57944:0
### crwdns57946:0crwdne57946:0
crwdns57948:0crwdne57948:0 crwdns57950:0crwdne57950:0
crwdns57952:0crwdne57952:0
## crwdns57954:0crwdne57954:0
### crwdns57956:0crwdne57956:0
crwdns57958:0/user-guide/workflows/getting-started-workflowscrwdne57958:0
- crwdns57960:0crwdne57960:0
- crwdns57962:0crwdne57962:0
- crwdns57964:0crwdne57964:0
### crwdns57966:0crwdne57966:0
crwdns57968:0crwdne57968:0 crwdns57970:0crwdne57970:0 crwdns57972:0/user-guide/crm-essentials/view-managementcrwdne57972:0
@@ -0,0 +1,16 @@
---
title: crwdns54764:0crwdne54764:0
info: "crwdns54766:0crwdne54766:0"
image: crwdns54768:0crwdne54768:0
sectionInfo: "crwdns54770:0crwdne54770:0"
---
<Frame>
<img src="/images/user-guide/workflows/sales-use-cases.png" alt="Header" />
</Frame>
## crwdns54772:0crwdne54772:0
crwdns54774:0crwdne54774:0 crwdns54776:0crwdne54776:0
crwdns54778:0/user-guide/workflows/getting-started-workflowscrwdne54778:0 crwdns54780:0/user-guide/workflows/internal-automationscrwdnd54780:0/user-guide/workflows/external-tool-integrationcrwdne54780:0
@@ -0,0 +1,120 @@
---
title: crwdns56542:0crwdne56542:0
info: "crwdns56544:0crwdne56544:0"
image: crwdns56546:0crwdne56546:0
sectionInfo: "crwdns56548:0crwdne56548:0"
---
crwdns63926:0{ VimeoEmbed }crwdne63926:0
<Frame>
<img src="/images/user-guide/table-views/table.png" alt="Header" />
</Frame>
## crwdns56550:0crwdne56550:0
crwdns56552:0crwdne56552:0 crwdns56554:0crwdne56554:0
### crwdns56556:0crwdne56556:0
crwdns56558:0crwdne56558:0 crwdns56560:0crwdne56560:0
crwdns56562:0crwdne56562:0
### crwdns56564:0crwdne56564:0
crwdns56566:0crwdne56566:0 crwdns56568:0crwdne56568:0
### crwdns56570:0crwdne56570:0
crwdns56572:0crwdne56572:0 crwdns56574:0crwdne56574:0 crwdns56576:0crwdne56576:0
### crwdns56578:0crwdne56578:0
crwdns56580:0crwdne56580:0 crwdns56582:0crwdne56582:0 crwdns56584:0/user-guide/crm-essentials/pipelinecrwdne56584:0
<VimeoEmbed videoId="927888627" title="Video demonstration" />
## crwdns56586:0crwdne56586:0
crwdns56588:0crwdne56588:0
### crwdns56590:0crwdne56590:0
crwdns56592:0crwdne56592:0
### crwdns56594:0crwdne56594:0
crwdns56596:0crwdne56596:0 crwdns56598:0crwdne56598:0
- crwdns56600:0crwdne56600:0
- crwdns56602:0crwdne56602:0
<Warning>
crwdns56604:0crwdne56604:0 crwdns56606:0crwdne56606:0
</Warning>crwdns56608:0crwdne56608:0
<VimeoEmbed videoId="927639721" title="Video demonstration" />
### crwdns56610:0crwdne56610:0
crwdns56612:0crwdne56612:0 crwdns56614:0crwdne56614:0
<VimeoEmbed videoId="927643495" title="Video demonstration" />
## crwdns56616:0crwdne56616:0
crwdns56618:0crwdne56618:0 crwdns56620:0crwdne56620:0
## crwdns56622:0crwdne56622:0
crwdns56624:0crwdne56624:0 crwdns56626:0crwdne56626:0
### crwdns56628:0crwdne56628:0
crwdns56630:0crwdne56630:0
crwdns56632:0crwdne56632:0 crwdns56634:0crwdne56634:0
- crwdns56636:0crwdne56636:0
- crwdns56638:0crwdne56638:0
- crwdns56640:0crwdne56640:0
### crwdns56642:0crwdne56642:0
crwdns56644:0crwdne56644:0 crwdns56646:0crwdne56646:0 crwdns56648:0crwdne56648:0
<VimeoEmbed videoId="926282262" title="Video demonstration" />
### crwdns56650:0crwdne56650:0
crwdns56652:0crwdne56652:0 crwdns56654:0crwdne56654:0 crwdns56656:0crwdne56656:0
<VimeoEmbed videoId="927885588" title="Video demonstration" />
### crwdns56658:0crwdne56658:0
crwdns56660:0crwdne56660:0 crwdns56662:0crwdne56662:0 crwdns56664:0crwdne56664:0
- crwdns56666:0crwdne56666:0
- crwdns56668:0crwdne56668:0
- crwdns56670:0crwdne56670:0
## crwdns56672:0crwdne56672:0
### crwdns56674:0crwdne56674:0
crwdns56676:0crwdne56676:0 crwdns56678:0crwdne56678:0
- crwdns56680:0crwdne56680:0
- crwdns56682:0crwdne56682:0
- crwdns56684:0crwdne56684:0
### crwdns56686:0crwdne56686:0
crwdns56688:0crwdne56688:0 crwdns56690:0crwdne56690:0
### crwdns56692:0crwdne56692:0
crwdns56694:0crwdne56694:0 crwdns56696:0crwdne56696:0
crwdns56698:0/user-guide/data-model/customize-your-data-modelcrwdne56698:0
@@ -0,0 +1,40 @@
---
title: crwdns58078:0crwdne58078:0
info: "crwdns58080:0crwdne58080:0"
image: crwdns58082:0crwdne58082:0
sectionInfo: crwdns58084:0crwdne58084:0
---
crwdns63942:0{ VimeoEmbed }crwdne63942:0
<Frame>
<img src="/images/user-guide/table-views/table.png" alt="Header" />
</Frame>
## crwdns58086:0crwdne58086:0
crwdns58088:0crwdne58088:0
## crwdns58090:0crwdne58090:0
crwdns58092:0crwdne58092:0 crwdns58094:0crwdne58094:0
crwdns58096:0crwdne58096:0 crwdns58098:0crwdne58098:0
<VimeoEmbed videoId="927071691" title="Video demonstration" />
## crwdns58100:0crwdne58100:0
crwdns58102:0crwdne58102:0
crwdns58104:0crwdne58104:0
<VimeoEmbed videoId="927073570" title="Video demonstration" />
## crwdns58106:0crwdne58106:0
crwdns58108:0crwdne58108:0
crwdns58110:0crwdne58110:0
crwdns58112:0crwdne58112:0 crwdns58114:0crwdne58114:0 crwdns58116:0crwdne58116:0 crwdns58118:0crwdne58118:0
@@ -0,0 +1,64 @@
---
title: crwdns55916:0crwdne55916:0
info: "crwdns55918:0crwdne55918:0"
image: crwdns55920:0crwdne55920:0
sectionInfo: crwdns55922:0crwdne55922:0
---
<Frame>
<img src="/images/user-guide/fields/custom_data_model.png" alt="Header" />
</Frame>
## crwdns55924:0crwdne55924:0
crwdns55926:0crwdne55926:0 crwdns55928:0crwdne55928:0 crwdns55930:0crwdne55930:0
## crwdns55932:0crwdne55932:0
crwdns55934:0crwdne55934:0 crwdns55936:0crwdne55936:0
crwdns55938:0crwdne55938:0 crwdns55940:0crwdne55940:0
## crwdns55942:0crwdne55942:0
crwdns55944:0crwdne55944:0 crwdns55946:0crwdne55946:0
crwdns55948:0crwdne55948:0 crwdns55950:0crwdne55950:0 crwdns55952:0crwdne55952:0 crwdns55954:0crwdne55954:0
crwdns55956:0crwdne55956:0
crwdns55958:0crwdne55958:0 crwdns55960:0crwdne55960:0 crwdns55962:0crwdne55962:0
crwdns55964:0crwdne55964:0 crwdns55966:0crwdne55966:0 crwdns55968:0crwdne55968:0
- crwdns55970:0crwdne55970:0
- crwdns55972:0crwdne55972:0
- crwdns55974:0crwdne55974:0
crwdns55976:0crwdne55976:0
crwdns55978:0crwdne55978:0 crwdns55980:0crwdne55980:0 crwdns55982:0crwdne55982:0 crwdns55984:0crwdne55984:0
crwdns55986:0crwdne55986:0 crwdns55988:0crwdne55988:0 crwdns55990:0crwdne55990:0
### crwdns55992:0crwdne55992:0
- crwdns55994:0crwdne55994:0 crwdns55996:0crwdne55996:0
crwdns55998:0crwdne55998:0 crwdns56000:0crwdne56000:0 crwdns56002:0crwdne56002:0
- crwdns56004:0crwdne56004:0 crwdns56006:0crwdne56006:0 crwdns56008:0crwdne56008:0
### crwdns56010:0crwdne56010:0
crwdns56012:0crwdne56012:0
- crwdns56014:0crwdne56014:0
- crwdns56016:0crwdne56016:0
- crwdns56018:0crwdne56018:0
- crwdns56020:0crwdne56020:0
crwdns56022:0crwdne56022:0
## crwdns56024:0crwdne56024:0
crwdns56026:0crwdne56026:0 crwdns56028:0https://twenty.com/onboarding-packagescrwdne56028:0
@@ -0,0 +1,82 @@
---
title: crwdns54580:0crwdne54580:0
info: "crwdns54582:0crwdne54582:0"
image: crwdns54584:0crwdne54584:0
sectionInfo: crwdns54586:0crwdne54586:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/faq.png" alt="Header" />
</Frame>
## crwdns54588:0crwdne54588:0
<AccordionGroup>
<Accordion title="Can I reorder objects in the left navigation bar?">
crwdns54590:0crwdne54590:0 crwdns54592:0crwdne54592:0
</Accordion>
<Accordion title="Can I hide objects from the left navigation bar?">
crwdns54594:0crwdne54594:0 crwdns54596:0crwdne54596:0
</Accordion>
<Accordion title="Can I delete standard objects (People, Companies, etc.)?">crwdns54598:0crwdne54598:0</Accordion>
</AccordionGroup>
## crwdns54600:0crwdne54600:0
<AccordionGroup>
<Accordion title="Can I create formula fields?">
crwdns54602:0crwdne54602:0 crwdns54604:0crwdne54604:0
</Accordion>
<Accordion title="Can I have nested fields in my objects?">
crwdns54606:0crwdne54606:0 crwdns54608:0crwdne54608:0 crwdns54610:0crwdne54610:0
</Accordion>
<Accordion title="Why can't I update relation field names?">
crwdns54612:0crwdne54612:0 crwdns54614:0crwdne54614:0
</Accordion>
<Accordion title="Why do I need different singular and plural names?">crwdns54616:0crwdne54616:0
crwdns54618:0crwdne54618:0
crwdns54620:0crwdne54620:0
<Accordion title="Why are some field names protected?">
crwdns54622:0crwdne54622:0 crwdns54624:0crwdne54624:0
</Accordion>
</AccordionGroup>
## crwdns54626:0crwdne54626:0
<AccordionGroup>
<Accordion title="Can I create many-to-many relationships?">
crwdns54628:0crwdne54628:0 crwdns54630:0crwdne54630:0
</Accordion>
<Accordion title="What are Morph Many relationships?">
crwdns54632:0crwdne54632:0 crwdns54634:0crwdne54634:0
</Accordion>
<Accordion title="Can I reorder fields in objects?">
crwdns54636:0crwdne54636:0 crwdns54638:0crwdne54638:0
</Accordion>
</AccordionGroup>
## crwdns54640:0crwdne54640:0
<AccordionGroup>
<Accordion title="Where can I see and edit my data model?">crwdns54642:0crwdne54642:0</Accordion>
<Accordion title="Why can't I see the Data Model under Settings?">
crwdns54644:0crwdne54644:0 crwdns54646:0crwdne54646:0
</Accordion>
<Accordion title="How many custom objects or fields can I create?">crwdns54648:0crwdne54648:0</Accordion>
</AccordionGroup>
## crwdns54650:0crwdne54650:0
crwdns54652:0/user-guide/getting-started/implementation-servicescrwdne54652:0
@@ -0,0 +1,107 @@
---
title: crwdns57524:0crwdne57524:0
info: "crwdns57526:0crwdne57526:0"
image: crwdns57528:0crwdne57528:0
sectionInfo: crwdns57530:0crwdne57530:0
---
crwdns63934:0{ VimeoEmbed }crwdne63934:0
<Frame>
<img src="/images/user-guide/fields/field.png" alt="Header" />
</Frame>
## crwdns57532:0crwdne57532:0
crwdns57534:0crwdne57534:0 crwdns57536:0crwdne57536:0 crwdns57538:0crwdne57538:0
### crwdns57540:0crwdne57540:0
crwdns57542:0crwdne57542:0
crwdns57544:0crwdne57544:0 crwdns57546:0crwdne57546:0
crwdns57548:0crwdne57548:0
crwdns57550:0crwdne57550:0
crwdns57552:0crwdne57552:0
### crwdns57554:0crwdne57554:0
crwdns57556:0crwdne57556:0 crwdns57558:0crwdne57558:0 crwdns57560:0crwdne57560:0
crwdns57562:0crwdne57562:0
crwdns57564:0crwdne57564:0
## crwdns57566:0crwdne57566:0
crwdns57568:0crwdne57568:0 crwdns57570:0crwdne57570:0
crwdns57572:0crwdne57572:0 crwdns57574:0crwdne57574:0
crwdns57576:0crwdne57576:0 crwdns57578:0crwdne57578:0
crwdns57580:0crwdne57580:0 crwdns57582:0crwdne57582:0 crwdns57584:0crwdne57584:0
crwdns57586:0crwdne57586:0 crwdns57588:0crwdne57588:0
<VimeoEmbed videoId="927628219" title="Video demonstration" />
crwdns57590:0crwdne57590:0 crwdns57592:0crwdne57592:0
crwdns57594:0crwdne57594:0
## crwdns57596:0crwdne57596:0
crwdns57598:0crwdne57598:0 crwdns57600:0crwdne57600:0
crwdns57602:0crwdne57602:0
1. crwdns57604:0crwdne57604:0
2. crwdns57606:0crwdne57606:0
3. crwdns57608:0crwdne57608:0
crwdns57610:0crwdne57610:0
crwdns57612:0crwdne57612:0
1. crwdns57614:0crwdne57614:0
2. crwdns57616:0crwdne57616:0
3. crwdns57618:0crwdne57618:0
crwdns57620:0crwdne57620:0
## crwdns57622:0crwdne57622:0
crwdns57624:0crwdne57624:0 crwdns57626:0crwdne57626:0
crwdns57628:0crwdne57628:0
## crwdns57630:0crwdne57630:0
### crwdns57632:0crwdne57632:0
- crwdns57634:0crwdne57634:0
- crwdns57636:0crwdne57636:0
- crwdns57638:0crwdne57638:0
### crwdns57640:0crwdne57640:0
- crwdns57642:0crwdne57642:0
- crwdns57644:0crwdne57644:0
### crwdns57646:0crwdne57646:0
- crwdns57648:0crwdne57648:0
### crwdns57650:0crwdne57650:0
- crwdns57652:0crwdne57652:0 crwdns57654:0crwdne57654:0 crwdns57656:0crwdne57656:0
### crwdns57658:0crwdne57658:0
- crwdns57660:0crwdne57660:0 crwdns57662:0/user-guide/data-model/relation-fieldscrwdne57662:0
@@ -0,0 +1,60 @@
---
title: crwdns57974:0crwdne57974:0
info: "crwdns57976:0crwdne57976:0"
image: crwdns57978:0crwdne57978:0
sectionInfo: crwdns57980:0crwdne57980:0
---
crwdns63938:0{ VimeoEmbed }crwdne63938:0
<Frame>
<img src="/images/user-guide/objects/objects_orange.png" alt="Header" />
</Frame>
## crwdns57982:0crwdne57982:0
crwdns57984:0crwdne57984:0 crwdns57986:0crwdne57986:0 crwdns57988:0crwdne57988:0
crwdns57990:0crwdne57990:0
### crwdns57992:0crwdne57992:0
crwdns57994:0crwdne57994:0 crwdns57996:0crwdne57996:0
### crwdns57998:0crwdne57998:0
crwdns58000:0crwdne58000:0 crwdns58002:0crwdne58002:0 crwdns58004:0crwdne58004:0
### crwdns58006:0crwdne58006:0
crwdns58008:0crwdne58008:0 crwdns58010:0crwdne58010:0 crwdns58012:0crwdne58012:0
## crwdns58014:0crwdne58014:0
crwdns58016:0crwdne58016:0 crwdns58018:0crwdne58018:0
crwdns58020:0crwdne58020:0
### crwdns58022:0crwdne58022:0
crwdns58024:0crwdne58024:0
1. crwdns58026:0crwdne58026:0
2. crwdns58028:0crwdne58028:0 crwdns58030:0crwdne58030:0
<VimeoEmbed videoId="926288174" title="Video demonstration" />
3. crwdns58032:0crwdne58032:0 crwdns58034:0crwdne58034:0 crwdns58036:0crwdne58036:0
<Warning>
crwdns58038:0crwdne58038:0 crwdns58040:0crwdne58040:0
</Warning>
<VimeoEmbed videoId="926293493" title="Video demonstration" />
4. crwdns58042:0crwdne58042:0 crwdns58044:0crwdne58044:0
crwdns58046:0crwdne58046:0
crwdns58048:0/user-guide/data-model/customize-your-data-modelcrwdne58048:0
@@ -0,0 +1,62 @@
---
title: crwdns56360:0crwdne56360:0
info: crwdns56362:0crwdne56362:0
image: crwdns56364:0crwdne56364:0
sectionInfo: crwdns56366:0crwdne56366:0
---
<Frame>
<img src="/images/user-guide/fields/relations_field.png" alt="Header" />
</Frame>
## crwdns56368:0crwdne56368:0
crwdns56370:0crwdne56370:0 crwdns56372:0crwdne56372:0
- crwdns56374:0crwdne56374:0
- crwdns56376:0crwdne56376:0
- crwdns56378:0crwdne56378:0
## crwdns56380:0crwdne56380:0
### crwdns56382:0crwdne56382:0 crwdns56384:0crwdne56384:0
crwdns56386:0crwdne56386:0
### crwdns56388:0crwdne56388:0 crwdns56390:0crwdne56390:0
- crwdns56392:0crwdne56392:0
- crwdns56394:0crwdne56394:0
- crwdns56396:0crwdne56396:0 crwdns56398:0crwdne56398:0
### crwdns56400:0crwdne56400:0 crwdns56402:0crwdne56402:0
crwdns56404:0crwdne56404:0
- crwdns56406:0crwdne56406:0
- crwdns56408:0crwdne56408:0
<Warning>
crwdns56410:0crwdne56410:0 crwdns56412:0crwdne56412:0
</Warning>
## crwdns56414:0crwdne56414:0
crwdns56416:0crwdne56416:0 crwdns56418:0crwdne56418:0
- crwdns56420:0crwdne56420:0
- crwdns56422:0crwdne56422:0
crwdns56424:0crwdne56424:0
## crwdns56426:0crwdne56426:0
- crwdns56428:0crwdne56428:0
- crwdns56430:0crwdne56430:0
- crwdns56432:0crwdne56432:0
## crwdns56434:0crwdne56434:0
- crwdns56436:0crwdne56436:0
- crwdns56438:0crwdne56438:0
@@ -0,0 +1,79 @@
---
title: crwdns58682:0crwdne58682:0
info: "crwdns58684:0crwdne58684:0"
image: crwdns58686:0crwdne58686:0
sectionInfo: crwdns58688:0crwdne58688:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/getting_started.png" alt="Header" />
</Frame>
crwdns58690:0crwdne58690:0 crwdns58692:0crwdne58692:0
crwdns58694:0crwdne58694:0
crwdns58696:0crwdne58696:0 crwdns58698:0crwdne58698:0 crwdns58700:0crwdne58700:0
## crwdns58702:0crwdne58702:0 crwdns58704:0crwdne58704:0
crwdns58706:0crwdne58706:0
crwdns58708:0crwdne58708:0 crwdns58710:0crwdne58710:0
crwdns58712:0crwdne58712:0
- crwdns58714:0crwdne58714:0 crwdns58716:0crwdne58716:0
- crwdns58718:0crwdne58718:0 crwdns58720:0crwdne58720:0 crwdns58722:0crwdne58722:0
- crwdns58724:0crwdne58724:0 crwdns58726:0crwdne58726:0
- crwdns58728:0crwdne58728:0
- crwdns58730:0crwdne58730:0 crwdns58732:0crwdne58732:0
- crwdns58734:0crwdne58734:0
- crwdns58736:0crwdne58736:0
crwdns58738:0https://docs.twenty.com/user-guide/data-model/customize-your-data-modelcrwdne58738:0
## crwdns58740:0crwdne58740:0 crwdns58742:0crwdne58742:0
crwdns58744:0crwdne58744:0
### crwdns58746:0crwdne58746:0
crwdns58748:0crwdne58748:0 crwdns58750:0crwdne58750:0
- crwdns58752:0crwdne58752:0
- crwdns58754:0crwdne58754:0
- crwdns58756:0crwdne58756:0
crwdns58758:0crwdne58758:0 crwdns58760:0crwdne58760:0
### crwdns58762:0crwdne58762:0
crwdns58764:0crwdne58764:0
crwdns58766:0crwdne58766:0
- crwdns58768:0crwdne58768:0
- crwdns58770:0crwdne58770:0
- crwdns58772:0crwdne58772:0
- crwdns58774:0crwdne58774:0
crwdns58776:0/user-guide/getting-started/import-export-datacrwdne58776:0
## crwdns58778:0crwdne58778:0 crwdns58780:0crwdne58780:0
crwdns58782:0crwdne58782:0
crwdns58784:0crwdne58784:0
- crwdns58786:0crwdne58786:0 crwdns58788:0crwdne58788:0
- crwdns58790:0crwdne58790:0 crwdns58792:0crwdne58792:0
- crwdns58794:0crwdne58794:0
- crwdns58796:0crwdne58796:0
- crwdns58798:0crwdne58798:0
- crwdns58800:0crwdne58800:0
## crwdns58802:0crwdne58802:0
crwdns58804:0https://docs.twenty.com/user-guide/workflows/getting-started-workflowscrwdne58804:0
@@ -0,0 +1,53 @@
---
title: crwdns57826:0crwdne57826:0
info: "crwdns57828:0crwdne57828:0"
image: crwdns57830:0crwdne57830:0
sectionInfo: crwdns57832:0crwdne57832:0
---
crwdns63936:0{ VimeoEmbed }crwdne63936:0
<Frame>
<img src="/images/user-guide/create-workspace/workspace-cover.png" alt="Header" />
</Frame>
## crwdns57834:0crwdne57834:0
1. crwdns57836:0https://app.twenty.comcrwdne57836:0
2. crwdns57838:0crwdne57838:0
- crwdns57840:0crwdne57840:0
- crwdns57842:0crwdne57842:0
- crwdns57844:0crwdne57844:0
<VimeoEmbed videoId="927066829" title="Video demonstration" />crwdns57846:0crwdne57846:0
crwdns57848:0crwdne57848:0
### crwdns57850:0crwdne57850:0
crwdns57852:0crwdne57852:0
### crwdns57854:0crwdne57854:0
crwdns57856:0crwdne57856:0
crwdns57858:0crwdne57858:0
- crwdns57860:0crwdne57860:0
- crwdns57862:0crwdne57862:0
- crwdns57864:0crwdne57864:0
- crwdns57866:0crwdne57866:0
- crwdns57868:0crwdne57868:0
crwdns57870:0crwdne57870:0
crwdns57872:0crwdne57872:0
## crwdns57874:0crwdne57874:0
crwdns57876:0crwdne57876:0 crwdns57878:0crwdne57878:0
## crwdns57880:0crwdne57880:0
crwdns57882:0mailto:contact@twenty.comcrwdnd57882:0https://discord.gg/cx5n4Jzs57crwdne57882:0
@@ -0,0 +1,80 @@
---
title: crwdns56114:0crwdne56114:0
info: "crwdns56116:0crwdne56116:0"
image: crwdns56118:0crwdne56118:0
sectionInfo: crwdns56120:0crwdne56120:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/getting_around.png" alt="Header" />
</Frame>
crwdns56122:0crwdne56122:0 crwdns56124:0crwdne56124:0
## crwdns56126:0crwdne56126:0
crwdns56128:0crwdne56128:0 crwdns56130:0crwdne56130:0
crwdns56132:0crwdne56132:0
## crwdns56134:0crwdne56134:0
crwdns56136:0crwdne56136:0
- crwdns56138:0crwdne56138:0
- crwdns56140:0crwdne56140:0
- crwdns56142:0crwdne56142:0
- crwdns56144:0crwdne56144:0
<Warning>crwdns56146:0crwdne56146:0</Warning>
- crwdns64040:0crwdne64040:0 crwdns64042:0crwdne64042:0
- crwdns64044:0crwdne64044:0
- crwdns64046:0crwdne64046:0
- crwdns64048:0crwdne64048:0
## crwdns56154:0crwdne56154:0
crwdns56156:0crwdne56156:0 crwdns56158:0crwdne56158:0
- crwdns56160:0crwdne56160:0
- crwdns56162:0crwdne56162:0
crwdns56164:0crwdne56164:0
crwdns56166:0crwdne56166:0
- crwdns56168:0crwdne56168:0
- crwdns56170:0crwdne56170:0
- crwdns56172:0crwdne56172:0
- crwdns56174:0crwdne56174:0
- crwdns56176:0crwdne56176:0
## crwdns56178:0crwdne56178:0
crwdns56180:0crwdne56180:0 crwdns56182:0crwdne56182:0
crwdns56184:0crwdne56184:0 crwdns56186:0crwdne56186:0
- crwdns56188:0crwdne56188:0
- crwdns56190:0crwdne56190:0
- crwdns56192:0crwdne56192:0
- crwdns56194:0crwdne56194:0
- crwdns56196:0crwdne56196:0
crwdns56198:0/user-guide/crm-essentials/view-managementcrwdne56198:0
## crwdns56200:0crwdne56200:0
crwdns56202:0crwdne56202:0
- crwdns56204:0crwdne56204:0
- crwdns56206:0crwdne56206:0
- crwdns56208:0crwdne56208:0
- crwdns56210:0crwdne56210:0
- crwdns56212:0crwdne56212:0
- crwdns56214:0crwdne56214:0
- crwdns56216:0crwdne56216:0
- crwdns56218:0crwdne56218:0
crwdns56220:0crwdne56220:0
@@ -0,0 +1,28 @@
---
title: crwdns58050:0crwdne58050:0
info: "crwdns58052:0crwdne58052:0"
image: crwdns58054:0crwdne58054:0
sectionInfo: crwdns58056:0crwdne58056:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/implementation_services.png" alt="Header" />
</Frame>
## crwdns58058:0crwdne58058:0
crwdns58060:0crwdne58060:0
### crwdns58062:0crwdne58062:0
crwdns58064:0https://twenty.com/onboarding-packagescrwdne58064:0
- crwdns58066:0crwdne58066:0
- crwdns58068:0crwdne58068:0
- crwdns58070:0crwdne58070:0
### crwdns58072:0crwdne58072:0
crwdns58074:0crwdne58074:0 crwdns58076:0https://twenty.com/implementation-servicescrwdne58076:0
@@ -0,0 +1,103 @@
---
title: crwdns56802:0crwdne56802:0
info: "crwdns56804:0crwdne56804:0"
image: crwdns56806:0crwdne56806:0
sectionInfo: crwdns56808:0crwdne56808:0
---
crwdns63928:0{ VimeoEmbed }crwdne63928:0
<Frame>
<img src="/images/user-guide/import-export-data/cloud.png" alt="Header" />
</Frame>
## crwdns56810:0crwdne56810:0
- crwdns56812:0crwdne56812:0
- crwdns56814:0crwdne56814:0
- crwdns56816:0crwdne56816:0
### crwdns56818:0crwdne56818:0
1. crwdns56820:0crwdne56820:0
2. crwdns56822:0crwdne56822:0
3. crwdns56824:0crwdne56824:0
### crwdns56826:0crwdne56826:0
crwdns56828:0crwdne56828:0
- crwdns56830:0crwdne56830:0
- crwdns56832:0crwdne56832:0
- crwdns56834:0crwdne56834:0 crwdns56836:0crwdne56836:0
- crwdns56838:0crwdne56838:0 crwdns56840:0crwdne56840:0
- crwdns56842:0crwdne56842:0 crwdns56844:0crwdne56844:0
- crwdns56846:0crwdne56846:0
- crwdns56848:0crwdne56848:0
- crwdns56850:0crwdne56850:0 crwdns56852:0crwdne56852:0 crwdns56854:0crwdne56854:0
<Warning>
crwdns56856:0crwdne56856:0
- crwdns56858:0crwdne56858:0 crwdns56860:0crwdne56860:0 crwdns56862:0crwdne56862:0
- crwdns56864:0crwdne56864:0
crwdns56866:0crwdne56866:0 crwdns56868:0crwdne56868:0
</Warning>
### crwdns56870:0crwdne56870:0
1. crwdns56872:0crwdne56872:0
2. crwdns56874:0crwdne56874:0
3. crwdns56876:0crwdne56876:0
4. crwdns56878:0crwdne56878:0
- crwdns56880:0crwdne56880:0
- crwdns56882:0crwdne56882:0
- crwdns56884:0crwdne56884:0
5. crwdns56886:0crwdne56886:0 crwdns56888:0crwdne56888:0 crwdns56890:0crwdne56890:0
6. crwdns56892:0crwdne56892:0
crwdns56894:0crwdne56894:0
### crwdns56896:0crwdne56896:0
<details>crwdns56898:0crwdne56898:0
crwdns56900:0crwdne56900:0
</details>
<details>crwdns56902:0crwdne56902:0
crwdns56904:0crwdne56904:0
</details>
<details>crwdns56906:0crwdne56906:0
crwdns56908:0crwdne56908:0 crwdns56910:0crwdne56910:0
</details>
<details>crwdns56912:0crwdne56912:0
crwdns56914:0crwdne56914:0 crwdns56916:0crwdne56916:0 crwdns56918:0crwdne56918:0
crwdns56920:0crwdne56920:0 crwdns56922:0crwdne56922:0
</details>
## crwdns56924:0crwdne56924:0
crwdns56926:0crwdne56926:0
crwdns56928:0crwdne56928:0
1. crwdns56930:0crwdne56930:0
2. crwdns56932:0crwdne56932:0 crwdns56934:0crwdne56934:0
3. crwdns56936:0crwdne56936:0
4. crwdns56938:0crwdne56938:0
5. crwdns56940:0crwdne56940:0 crwdns56942:0crwdne56942:0
<VimeoEmbed videoId="926226303" title="Video demonstration" />
@@ -0,0 +1,89 @@
---
title: crwdns57664:0crwdne57664:0
info: crwdns57666:0crwdne57666:0
image: crwdns57668:0crwdne57668:0
sectionInfo: crwdns57670:0crwdne57670:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/migrating_crm.png" alt="Header" />
</Frame>
## crwdns57672:0crwdne57672:0
### crwdns57674:0crwdne57674:0 crwdns57676:0crwdne57676:0
- crwdns57678:0crwdne57678:0
- crwdns57680:0crwdne57680:0
- crwdns57682:0crwdne57682:0
- crwdns57684:0crwdne57684:0
### crwdns57686:0crwdne57686:0 crwdns57688:0crwdne57688:0
crwdns57690:0/user-guide/data-model/customize-your-data-modelcrwdne57690:0
- crwdns57692:0crwdne57692:0
- crwdns57694:0crwdne57694:0
- crwdns57696:0crwdne57696:0
- crwdns57698:0crwdne57698:0
## crwdns57700:0crwdne57700:0
### crwdns57702:0crwdne57702:0 crwdns57704:0crwdne57704:0
crwdns57706:0crwdne57706:0
1. crwdns57708:0crwdne57708:0
2. crwdns57710:0crwdne57710:0
3. crwdns57712:0crwdne57712:0
crwdns57714:0crwdne57714:0 crwdns57716:0/user-guide/getting-started/import-export-datacrwdne57716:0
### crwdns57718:0crwdne57718:0 crwdns57720:0crwdne57720:0
- crwdns57722:0crwdne57722:0
- crwdns57724:0crwdne57724:0
## crwdns57726:0crwdne57726:0
### crwdns57728:0crwdne57728:0
- crwdns57730:0crwdne57730:0
- crwdns57732:0crwdne57732:0
<Warning>crwdns64050:0crwdne64050:0</Warning>
- crwdns57736:0crwdne57736:0
- crwdns57738:0crwdne57738:0
### crwdns57740:0crwdne57740:0
crwdns57742:0crwdne57742:0
- crwdns57744:0crwdne57744:0
- crwdns57746:0crwdne57746:0
- crwdns57748:0crwdne57748:0
- crwdns57750:0crwdne57750:0
crwdns57752:0/user-guide/getting-started/import-export-datacrwdne57752:0
## crwdns57754:0crwdne57754:0
### crwdns57756:0crwdne57756:0
- crwdns57758:0crwdne57758:0
- crwdns57760:0crwdne57760:0
crwdns57762:0/user-guide/getting-started/implementation-servicescrwdne57762:0
## crwdns57764:0crwdne57764:0
crwdns57766:0crwdne57766:0
1. crwdns57768:0crwdne57768:0
2. crwdns57770:0crwdne57770:0
3. crwdns57772:0crwdne57772:0
## crwdns57774:0crwdne57774:0
crwdns64052:0crwdne64052:0
@@ -0,0 +1,62 @@
---
title: crwdns56030:0crwdne56030:0
info: "crwdns56032:0crwdne56032:0"
image: crwdns56034:0crwdne56034:0
sectionInfo: crwdns56036:0crwdne56036:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/20.png" alt="Header" />
</Frame>
crwdns56038:0crwdne56038:0
## crwdns56040:0crwdne56040:0
crwdns56042:0crwdne56042:0
crwdns56044:0crwdne56044:0
crwdns56046:0crwdne56046:0
crwdns56048:0crwdne56048:0
crwdns56050:0crwdne56050:0 crwdns56052:0crwdne56052:0
crwdns56054:0crwdne56054:0
crwdns56056:0crwdne56056:0
crwdns56058:0crwdne56058:0
## crwdns56060:0crwdne56060:0
crwdns56062:0crwdne56062:0
crwdns56064:0crwdne56064:0
crwdns56066:0crwdne56066:0
## crwdns56068:0crwdne56068:0
crwdns56070:0crwdne56070:0 crwdns56072:0/user-guide/crm-essentials/contact-and-account-managementcrwdne56072:0
crwdns56074:0crwdne56074:0 crwdns56076:0/user-guide/data-model/objectscrwdne56076:0
crwdns56078:0crwdne56078:0 crwdns56080:0/user-guide/data-model/fieldscrwdne56080:0
crwdns56082:0/user-guide/crm-essentials/pipelinecrwdne56082:0
crwdns56084:0/user-guide/crm-essentials/view-managementcrwdne56084:0
crwdns56086:0crwdne56086:0 crwdns56088:0/user-guide/workflows/getting-started-workflowscrwdne56088:0
crwdns56090:0crwdne56090:0 crwdns56092:0/user-guide/collaboration/emails-and-calendarscrwdne56092:0
crwdns56094:0crwdne56094:0 crwdns56096:0/user-guide/collaboration/notescrwdne56096:0
crwdns56098:0crwdne56098:0 crwdns56100:0/user-guide/collaboration/taskscrwdne56100:0
crwdns56102:0crwdne56102:0 crwdns56104:0/user-guide/settings/permissionscrwdne56104:0
crwdns56106:0crwdne56106:0 crwdns56108:0/user-guide/integrations-api/api-webhookscrwdne56108:0
## crwdns56110:0crwdne56110:0
crwdns56112:0https://app.twenty.comcrwdnd56112:0https://github.com/twentyhq/twentycrwdne56112:0
@@ -0,0 +1,83 @@
---
title: crwdns54308:0crwdne54308:0
info: "crwdns54310:0crwdne54310:0"
image: crwdns54312:0crwdne54312:0
sectionInfo: crwdns54314:0crwdne54314:0
---
crwdns63922:0{ VimeoEmbed }crwdne63922:0
<Frame>
<img src="/images/user-guide/api/api.png" alt="Header" />
</Frame>
## crwdns54316:0crwdne54316:0
crwdns54318:0crwdne54318:0
### crwdns54320:0crwdne54320:0
1. crwdns54322:0crwdne54322:0
2. crwdns54324:0crwdne54324:0
3. crwdns54326:0crwdne54326:0
- crwdns54328:0crwdne54328:0
- crwdns54330:0crwdne54330:0
4. crwdns54332:0crwdne54332:0
5. crwdns54334:0crwdne54334:0
crwdns54336:0crwdne54336:0
<Warning>
crwdns54338:0crwdne54338:0 crwdns54340:0crwdne54340:0 crwdns54342:0crwdne54342:0
</Warning>
<VimeoEmbed videoId="928786722" title="Creating API key" />
### crwdns54344:0crwdne54344:0
crwdns54346:0crwdne54346:0
1. crwdns54348:0crwdne54348:0
2. crwdns54350:0crwdne54350:0
3. crwdns54352:0crwdne54352:0
4. crwdns54354:0crwdne54354:0
crwdns54356:0crwdne54356:0
1. crwdns54358:0crwdne54358:0
2. crwdns54360:0crwdne54360:0
3. crwdns54362:0crwdne54362:0
## crwdns54364:0crwdne54364:0
crwdns54366:0crwdne54366:0
crwdns54368:0crwdne54368:0 crwdns54370:0/user-guide/workflows/getting-started-workflowscrwdne54370:0
crwdns54372:0crwdne54372:0
### crwdns54374:0crwdne54374:0
1. crwdns54376:0crwdne54376:0
2. crwdns54378:0crwdne54378:0
3. crwdns54380:0crwdne54380:0
4. crwdns54382:0crwdne54382:0
crwdns54384:0crwdne54384:0
<VimeoEmbed videoId="928786708" title="Video demonstration" />
### crwdns54386:0crwdne54386:0
crwdns54388:0crwdne54388:0
1. crwdns54390:0crwdne54390:0
2. crwdns54392:0crwdne54392:0
3. crwdns54394:0crwdne54394:0
4. crwdns54396:0crwdne54396:0
crwdns54398:0crwdne54398:0
1. crwdns54400:0crwdne54400:0
2. crwdns54402:0crwdne54402:0
3. crwdns54404:0crwdne54404:0
@@ -0,0 +1,130 @@
---
title: crwdns55736:0crwdne55736:0
info: crwdns55738:0crwdne55738:0
image: crwdns55740:0crwdne55740:0
sectionInfo: crwdns55742:0crwdne55742:0
---
<Frame>
<img src="/images/user-guide/api/api-overview.png" alt="Header" />
</Frame>
crwdns55744:0crwdne55744:0 crwdns55746:0crwdne55746:0
## crwdns55748:0crwdne55748:0
crwdns55750:0crwdne55750:0
- crwdns55752:0crwdne55752:0
- crwdns55754:0crwdne55754:0
- crwdns55756:0crwdne55756:0
- crwdns55758:0crwdne55758:0
<Warning>
crwdns55760:0crwdne55760:0 crwdns55762:0crwdne55762:0
</Warning>
## crwdns55764:0crwdne55764:0
crwdns55766:0crwdne55766:0
### crwdns55768:0crwdne55768:0
#### crwdns55770:0crwdne55770:0 crwdns55772:0crwdne55772:0
- crwdns55774:0crwdne55774:0
- crwdns55776:0crwdne55776:0
- crwdns55778:0crwdne55778:0
- crwdns55780:0crwdne55780:0
- crwdns55782:0crwdne55782:0
- crwdns55784:0crwdne55784:0
#### crwdns55786:0crwdne55786:0 crwdns55788:0crwdne55788:0
- crwdns55790:0crwdne55790:0
- crwdns55792:0crwdne55792:0
- crwdns55794:0crwdne55794:0
- crwdns55796:0crwdne55796:0
- crwdns55798:0crwdne55798:0
- crwdns55800:0crwdne55800:0
### crwdns55802:0crwdne55802:0
#### crwdns55804:0crwdne55804:0 crwdns55806:0crwdne55806:0
- crwdns55808:0crwdne55808:0
- crwdns55810:0crwdne55810:0
- crwdns55812:0crwdne55812:0
- crwdns55814:0crwdne55814:0
- crwdns55816:0crwdne55816:0
- crwdns55818:0crwdne55818:0
#### crwdns55820:0crwdne55820:0 crwdns55822:0crwdne55822:0
- crwdns55824:0crwdne55824:0
- crwdns55826:0crwdne55826:0
- crwdns55828:0crwdne55828:0
- crwdns55830:0crwdne55830:0
- crwdns55832:0crwdne55832:0
- crwdns55834:0crwdne55834:0
- crwdns55836:0crwdne55836:0
## crwdns55838:0crwdne55838:0
### crwdns55840:0crwdne55840:0
crwdns55842:0crwdne55842:0
- crwdns55844:0crwdne55844:0
- crwdns55846:0crwdne55846:0
- crwdns55848:0crwdne55848:0
### crwdns55850:0crwdne55850:0
- crwdns55852:0crwdne55852:0
- crwdns55854:0crwdne55854:0
- crwdns55856:0crwdne55856:0
## crwdns55858:0crwdne55858:0
1. crwdns55860:0crwdne55860:0
2. crwdns55862:0crwdne55862:0
3. crwdns55864:0crwdne55864:0
4. crwdns55866:0crwdne55866:0
crwdns55868:0crwdne55868:0
## crwdns55870:0crwdne55870:0
### crwdns55872:0crwdne55872:0
- crwdns55874:0crwdne55874:0
- crwdns55876:0crwdne55876:0
- crwdns55878:0crwdne55878:0
### crwdns55880:0crwdne55880:0
- crwdns55882:0crwdne55882:0
- crwdns55884:0crwdne55884:0
- crwdns55886:0crwdne55886:0
- crwdns55888:0crwdne55888:0
### crwdns55890:0crwdne55890:0
- crwdns55892:0crwdne55892:0
- crwdns55894:0crwdne55894:0
- crwdns55896:0crwdne55896:0
- crwdns55898:0crwdne55898:0
### crwdns55900:0crwdne55900:0
- crwdns55902:0crwdne55902:0
- crwdns55904:0crwdne55904:0
- crwdns55906:0crwdne55906:0
- crwdns55908:0crwdne55908:0
## crwdns55910:0crwdne55910:0
- crwdns55912:0/user-guide/integrations-api/api-webhookscrwdne55912:0
- crwdns55914:0crwdne55914:0
@@ -0,0 +1,62 @@
---
title: crwdns57052:0crwdne57052:0
info: "crwdns57054:0crwdne57054:0"
image: crwdns57056:0crwdne57056:0
sectionInfo: crwdns57058:0crwdne57058:0
---
<Frame>
<img src="/images/user-guide/integrations/plug.png" alt="Header" />
</Frame>
## crwdns57060:0crwdne57060:0
### crwdns57062:0crwdne57062:0
crwdns57064:0crwdne57064:0
- crwdns57066:0crwdne57066:0
- crwdns57068:0crwdne57068:0
crwdns57070:0/user-guide/settings/email-calendar-setupcrwdne57070:0
### crwdns57072:0crwdne57072:0
crwdns57074:0crwdne57074:0
- crwdns57076:0crwdne57076:0
- crwdns57078:0crwdne57078:0
- crwdns57080:0crwdne57080:0
- crwdns57082:0crwdne57082:0
crwdns57084:0/user-guide/workflows/getting-started-workflowscrwdne57084:0
### crwdns57086:0crwdne57086:0
crwdns57088:0crwdne57088:0
1. crwdns57090:0https://zapier.com/apps/twenty/integrationscrwdne57090:0
2. crwdns57092:0crwdne57092:0
3. crwdns57094:0crwdne57094:0
4. crwdns57096:0crwdne57096:0
## crwdns57098:0crwdne57098:0
### crwdns57100:0crwdne57100:0
crwdns57102:0crwdne57102:0 crwdns57104:0crwdne57104:0
- crwdns57106:0crwdne57106:0
- crwdns57108:0crwdne57108:0
- crwdns57110:0crwdne57110:0
### crwdns57112:0crwdne57112:0
crwdns57114:0crwdne57114:0
- crwdns57116:0crwdne57116:0
- crwdns57118:0crwdne57118:0
- crwdns57120:0crwdne57120:0
crwdns57122:0crwdne57122:0
@@ -0,0 +1,40 @@
---
title: crwdns57498:0crwdne57498:0
description: crwdns57500:0crwdne57500:0
---
crwdns64202:0{ CardTitle }crwdne64202:0
<CardGroup cols={2}>
<Card href="/user-guide/getting-started/what-is-twenty" img="/images/user-guide/what-is-twenty/20.png">
<CardTitle>crwdns64204:0crwdne64204:0</CardTitle>crwdns57502:0crwdne57502:0</Card>
<Card href="/user-guide/data-model/customize-your-data-model" img="/images/user-guide/fields/data_model.png">
<CardTitle>crwdns64206:0crwdne64206:0</CardTitle>crwdns57504:0crwdne57504:0</Card>
<Card href="/user-guide/crm-essentials/contact-and-account-management" img="/images/user-guide/home/contact-and-account-management.png">
<CardTitle>crwdns64208:0crwdne64208:0</CardTitle>crwdns57506:0crwdne57506:0</Card>
<Card href="/user-guide/workflows/getting-started-workflows" img="/images/user-guide/workflows/workflow.png">
<CardTitle>crwdns64210:0crwdne64210:0</CardTitle>crwdns57508:0crwdne57508:0</Card>
<Card href="/user-guide/collaboration/emails-and-calendars" img="/images/user-guide/emails/emails_header.png">
<CardTitle>crwdns64212:0crwdne64212:0</CardTitle>crwdns57510:0crwdne57510:0</Card>
<Card href="/user-guide/integrations-api/apis-overview" img="/images/user-guide/integrations/plug.png">
<CardTitle>crwdns64214:0crwdne64214:0</CardTitle>crwdns57512:0crwdne57512:0</Card>
<Card href="/user-guide/reporting/reporting-overview" img="/images/user-guide/reporting/reporting.png">
<CardTitle>crwdns64216:0crwdne64216:0</CardTitle>
crwdns57514:0crwdne57514:0 crwdns57516:0crwdne57516:0
</Card>
<Card href="/user-guide/settings/workspace-settings" img="/images/user-guide/setup/settings.png">
<CardTitle>crwdns64218:0crwdne64218:0</CardTitle>crwdns57518:0crwdne57518:0</Card>
<Card href="/user-guide/pricing/billing-and-pricing-faq" img="/images/user-guide/setup/pricing.png">
<CardTitle>crwdns64220:0crwdne64220:0</CardTitle>crwdns57520:0crwdne57520:0</Card>
<Card href="/user-guide/resources/glossary" img="/images/user-guide/glossary/glossary.png">
<CardTitle>crwdns64222:0crwdne64222:0</CardTitle>crwdns57522:0crwdne57522:0</Card>
</CardGroup>
@@ -0,0 +1,68 @@
---
title: crwdns56976:0crwdne56976:0
info: "crwdns56978:0crwdne56978:0"
image: crwdns56980:0crwdne56980:0
sectionInfo: crwdns56982:0crwdne56982:0
---
<Frame>
<img src="/images/user-guide/setup/pricing.png" alt="Header" />
</Frame>
## crwdns56984:0crwdne56984:0
<AccordionGroup>
<Accordion title="Can I use Twenty for free while self-hosting?">
crwdns56986:0crwdne56986:0 crwdns56988:0crwdne56988:0 crwdns56990:0crwdne56990:0
crwdns56992:0crwdne56992:0
crwdns56994:0crwdne56994:0
<Accordion title="Do you offer free seats for view-only users?">
crwdns56996:0crwdne56996:0 crwdns56998:0crwdne56998:0
</Accordion>
<Accordion title="Where can I switch my subscription to the Organization plan?">
crwdns57000:0crwdne57000:0 crwdns57002:0crwdne57002:0
</Accordion>
<Accordion title="Where can I switch my subscription to the Pro plan?">crwdns57004:0crwdne57004:0</Accordion>
<Accordion title="Where can I switch my subscription to Yearly?">
crwdns57006:0crwdne57006:0 crwdns57008:0crwdne57008:0
</Accordion>
<Accordion title="Where can I switch my subscription to Monthly?">crwdns57010:0crwdne57010:0</Accordion>
<Accordion title="Where can I see my credit usage?">crwdns57012:0crwdne57012:0</Accordion>
<Accordion title="How many workflow credits do we have?">
crwdns57014:0crwdne57014:0 crwdns57016:0crwdne57016:0
</Accordion>
<Accordion title="How does workflow credit consumption work?">
crwdns57018:0crwdne57018:0 crwdns57020:0crwdne57020:0
crwdns57022:0crwdne57022:0 crwdns57024:0crwdne57024:0
crwdns57026:0crwdne57026:0
<Accordion title="Can I buy more workflow credits?">crwdns57028:0crwdne57028:0</Accordion>
</AccordionGroup>
## crwdns57030:0crwdne57030:0
<AccordionGroup>
<Accordion title="Where can I manage the Billing details?">crwdns57032:0crwdne57032:0</Accordion>
<Accordion title="Where can I update my payment method?">
crwdns57034:0crwdne57034:0 crwdns57036:0crwdne57036:0 crwdns57038:0crwdne57038:0
</Accordion>
<Accordion title="Where can I update my billing information?">
crwdns57040:0crwdne57040:0 crwdns57042:0crwdne57042:0 crwdns57044:0crwdne57044:0
</Accordion>
<Accordion title="Where can I access my invoices?">
crwdns57046:0crwdne57046:0 crwdns57048:0crwdne57048:0 crwdns57050:0crwdne57050:0
</Accordion>
</AccordionGroup>
@@ -0,0 +1,29 @@
---
title: crwdns57124:0crwdne57124:0
info: crwdns57126:0crwdne57126:0
image: crwdns57128:0crwdne57128:0
sectionInfo: crwdns57130:0crwdne57130:0
---
<Frame>
<img src="/images/user-guide/reporting/reporting.png" alt="Header" />
</Frame>
## crwdns57132:0crwdne57132:0
### crwdns57134:0crwdne57134:0
crwdns57136:0crwdne57136:0
### crwdns57138:0crwdne57138:0
crwdns57140:0crwdne57140:0
### crwdns57142:0crwdne57142:0
crwdns57144:0crwdne57144:0
## crwdns57146:0crwdne57146:0
crwdns57148:0https://github.com/twentyhq/twentycrwdne57148:0
@@ -0,0 +1,56 @@
---
title: crwdns55532:0crwdne55532:0
info: "crwdns55534:0crwdne55534:0"
image: crwdns55536:0crwdne55536:0
sectionInfo: crwdns55538:0crwdne55538:0
---
<Frame>
<img src="/images/user-guide/github/github-header.png" alt="Header" />
</Frame>
## crwdns55540:0crwdne55540:0
crwdns55542:0crwdne55542:0 crwdns55544:0crwdne55544:0
crwdns55546:0https://github.com/twentyhq/twentycrwdne55546:0
## crwdns55548:0crwdne55548:0
crwdns55550:0crwdne55550:0 crwdns55552:0crwdne55552:0
### crwdns55554:0crwdne55554:0
crwdns55556:0crwdne55556:0 crwdns55558:0https://github.com/twentyhq/twenty/issues/newcrwdne55558:0
crwdns55560:0crwdne55560:0
### crwdns55562:0crwdne55562:0
crwdns55564:0crwdne55564:0 crwdns55566:0https://github.com/twentyhq/twenty/discussionscrwdne55566:0
crwdns55568:0crwdne55568:0
### crwdns55570:0crwdne55570:0
crwdns55572:0crwdne55572:0
1. crwdns55574:0https://github.com/twentyhq/twenty/issuescrwdne55574:0
2. crwdns55576:0https://github.com/twentyhq/twenty/labels/good%20first%20issuecrwdne55576:0
3. crwdns55578:0crwdne55578:0
crwdns55580:0crwdne55580:0
crwdns55582:0crwdne55582:0
### crwdns55584:0crwdne55584:0
crwdns55586:0https://github.com/twentyhq/twenty/blob/main/.github/CODE_OF_CONDUCT.mdcrwdne55586:0
## crwdns55588:0crwdne55588:0
crwdns55590:0https://discord.gg/cx5n4Jzs57crwdne55590:0
crwdns55592:0crwdne55592:0
crwdns55594:0crwdne55594:0
@@ -0,0 +1,95 @@
---
title: crwdns56700:0crwdne56700:0
info: "crwdns56702:0crwdne56702:0"
image: crwdns56704:0crwdne56704:0
sectionInfo: crwdns56706:0crwdne56706:0
---
<Frame>
<img src="/images/user-guide/glossary/glossary.png" alt="Header" />
</Frame>
## crwdns56708:0crwdne56708:0
crwdns56710:0crwdne56710:0
## crwdns56712:0crwdne56712:0
crwdns56714:0crwdne56714:0
## crwdns56716:0crwdne56716:0
crwdns56718:0crwdne56718:0
- crwdns56720:0crwdne56720:0
- crwdns56722:0crwdne56722:0
## crwdns56724:0crwdne56724:0
crwdns56726:0crwdne56726:0
## crwdns56728:0crwdne56728:0
crwdns56730:0crwdne56730:0
## crwdns56732:0crwdne56732:0
crwdns56734:0crwdne56734:0
## crwdns56736:0crwdne56736:0
crwdns56738:0crwdne56738:0
## crwdns56740:0crwdne56740:0
crwdns56742:0crwdne56742:0
## crwdns56744:0crwdne56744:0
crwdns56746:0crwdne56746:0 crwdns56748:0crwdne56748:0
## crwdns56750:0crwdne56750:0
crwdns56752:0crwdne56752:0 crwdns56754:0crwdne56754:0
## crwdns56756:0crwdne56756:0
crwdns56758:0crwdne56758:0
## crwdns56760:0crwdne56760:0
crwdns56762:0crwdne56762:0
## crwdns56764:0crwdne56764:0
crwdns56766:0crwdne56766:0
## crwdns56768:0crwdne56768:0
crwdns56770:0crwdne56770:0
## crwdns56772:0crwdne56772:0
crwdns56774:0crwdne56774:0
## crwdns56776:0crwdne56776:0
crwdns56778:0crwdne56778:0
## crwdns56780:0crwdne56780:0
crwdns56782:0crwdne56782:0
## crwdns56784:0crwdne56784:0
crwdns56786:0crwdne56786:0
## crwdns56788:0crwdne56788:0
crwdns56790:0crwdne56790:0 crwdns56792:0crwdne56792:0
crwdns56794:0crwdne56794:0
## crwdns56796:0crwdne56796:0
crwdns56798:0crwdne56798:0 crwdns56800:0crwdne56800:0
@@ -0,0 +1,42 @@
---
title: crwdns57296:0crwdne57296:0
info: "crwdns57298:0crwdne57298:0"
image: crwdns57300:0crwdne57300:0
sectionInfo: crwdns57302:0crwdne57302:0
---
<Frame>
<img src="/images/user-guide/setup/domains-settings.png" alt="Header" />
</Frame>
## crwdns57304:0crwdne57304:0
crwdns57306:0crwdne57306:0
- crwdns57308:0crwdne57308:0
- crwdns57310:0crwdne57310:0
## crwdns57312:0crwdne57312:0
crwdns57314:0crwdne57314:0
### crwdns57316:0crwdne57316:0
- crwdns57318:0crwdne57318:0
- crwdns57320:0crwdne57320:0
- crwdns57322:0crwdne57322:0
### crwdns57324:0crwdne57324:0
- crwdns57326:0crwdne57326:0
- crwdns57328:0crwdne57328:0
- crwdns57330:0crwdne57330:0
## crwdns57332:0crwdne57332:0
1. crwdns57334:0crwdne57334:0
2. crwdns57336:0crwdne57336:0
3. crwdns57338:0crwdne57338:0
crwdns57340:0crwdne57340:0
@@ -0,0 +1,118 @@
---
title: crwdns58930:0crwdne58930:0
info: "crwdns58932:0crwdne58932:0"
image: crwdns58934:0crwdne58934:0
sectionInfo: crwdns58936:0crwdne58936:0
---
<Frame>
<img src="/images/user-guide/emails/emails_header.png" alt="Header" />
</Frame>
## crwdns58938:0crwdne58938:0
### crwdns58940:0crwdne58940:0
1. crwdns58942:0crwdne58942:0
2. crwdns58944:0crwdne58944:0
3. crwdns58946:0crwdne58946:0
4. crwdns58948:0crwdne58948:0
5. crwdns58950:0crwdne58950:0
### crwdns58952:0crwdne58952:0
1. crwdns58954:0crwdne58954:0
2. crwdns58956:0crwdne58956:0
3. crwdns58958:0crwdne58958:0
4. crwdns58960:0crwdne58960:0
5. crwdns58962:0crwdne58962:0
### crwdns58964:0crwdne58964:0
crwdns58966:0crwdne58966:0
1. crwdns58968:0crwdne58968:0
2. crwdns58970:0crwdne58970:0
3. crwdns58972:0crwdne58972:0
4. crwdns58974:0crwdne58974:0
5. crwdns58976:0crwdne58976:0
### crwdns58978:0crwdne58978:0
- crwdns58980:0crwdne58980:0
- crwdns58982:0crwdne58982:0
- crwdns58984:0crwdne58984:0
<Warning>
crwdns58986:0crwdne58986:0 crwdns58988:0crwdne58988:0
</Warning>
## crwdns58990:0crwdne58990:0
### crwdns58992:0crwdne58992:0
crwdns58994:0crwdne58994:0
- crwdns58996:0crwdne58996:0
- crwdns58998:0crwdne58998:0
- crwdns59000:0crwdne59000:0
### crwdns59002:0crwdne59002:0
- crwdns59004:0crwdne59004:0
- crwdns59006:0crwdne59006:0
- crwdns59008:0crwdne59008:0
- crwdns59010:0crwdne59010:0
### crwdns59012:0crwdne59012:0
crwdns59014:0crwdne59014:0
1. crwdns59016:0crwdne59016:0
2. crwdns59018:0crwdne59018:0
3. crwdns59020:0crwdne59020:0
- crwdns59022:0crwdne59022:0
- crwdns59024:0crwdne59024:0
- crwdns59026:0crwdne59026:0
- crwdns59028:0crwdne59028:0
crwdns59030:0crwdne59030:0
crwdns59032:0crwdne59032:0
- crwdns59034:0crwdne59034:0
- crwdns59036:0crwdne59036:0
- crwdns59038:0crwdne59038:0
crwdns59040:0crwdne59040:0 crwdns59042:0crwdne59042:0
## crwdns59044:0crwdne59044:0
### crwdns59046:0crwdne59046:0
crwdns59048:0crwdne59048:0
- crwdns59050:0crwdne59050:0
- crwdns59052:0crwdne59052:0
### crwdns59054:0crwdne59054:0
- crwdns59056:0crwdne59056:0
- crwdns59058:0crwdne59058:0
### crwdns59060:0crwdne59060:0
- crwdns59062:0crwdne59062:0
- crwdns59064:0crwdne59064:0
crwdns59066:0crwdne59066:0
- crwdns59068:0crwdne59068:0
- crwdns59070:0crwdne59070:0
- crwdns59072:0crwdne59072:0
## crwdns59074:0crwdne59074:0
crwdns59076:0crwdne59076:0
@@ -0,0 +1,68 @@
---
title: crwdns54502:0crwdne54502:0
info: "crwdns54504:0crwdne54504:0"
image: crwdns54506:0crwdne54506:0
sectionInfo: crwdns54508:0crwdne54508:0
---
<Frame>
<img src="/images/user-guide/setup/experience.png" alt="Header" />
</Frame>
## crwdns54510:0crwdne54510:0
### crwdns54512:0crwdne54512:0
crwdns54514:0crwdne54514:0
- crwdns54516:0crwdne54516:0
- crwdns54518:0crwdne54518:0
- crwdns54520:0crwdne54520:0
## crwdns54522:0crwdne54522:0
### crwdns54524:0crwdne54524:0
crwdns54526:0crwdne54526:0
- crwdns54528:0crwdne54528:0
- crwdns54530:0crwdne54530:0
### crwdns54532:0crwdne54532:0
crwdns54534:0crwdne54534:0
- crwdns54536:0crwdne54536:0
- crwdns54538:0crwdne54538:0
### crwdns54540:0crwdne54540:0
crwdns54542:0crwdne54542:0
- crwdns54544:0crwdne54544:0
- crwdns54546:0crwdne54546:0
- crwdns54548:0crwdne54548:0
### crwdns54550:0crwdne54550:0
crwdns54552:0crwdne54552:0
- crwdns54554:0crwdne54554:0
- crwdns54556:0crwdne54556:0
- crwdns54558:0crwdne54558:0
### crwdns54560:0crwdne54560:0
crwdns54562:0crwdne54562:0
- crwdns54564:0crwdne54564:0
- crwdns54566:0crwdne54566:0
- crwdns54568:0crwdne54568:0
## crwdns54570:0crwdne54570:0
1. crwdns54572:0crwdne54572:0
2. crwdns54574:0crwdne54574:0
3. crwdns54576:0crwdne54576:0
4. crwdns54578:0crwdne54578:0
@@ -0,0 +1,42 @@
---
title: crwdns57778:0crwdne57778:0
info: "crwdns57780:0crwdne57780:0"
image: crwdns57782:0crwdne57782:0
sectionInfo: crwdns57784:0crwdne57784:0
---
<Frame>
<img src="/images/user-guide/setup/members.png" alt="Header" />
</Frame>
## crwdns57786:0crwdne57786:0
### crwdns57788:0crwdne57788:0
1. crwdns57790:0crwdne57790:0
2. crwdns57792:0crwdne57792:0
3. crwdns57794:0crwdne57794:0
4. crwdns57796:0crwdne57796:0
### crwdns57798:0crwdne57798:0
1. crwdns57800:0crwdne57800:0
2. crwdns57802:0crwdne57802:0
3. crwdns57804:0crwdne57804:0
4. crwdns57806:0crwdne57806:0
## crwdns57808:0crwdne57808:0
### crwdns57810:0crwdne57810:0
1. crwdns57812:0crwdne57812:0
2. crwdns57814:0crwdne57814:0
3. crwdns57816:0crwdne57816:0
4. crwdns57818:0crwdne57818:0
crwdns57820:0crwdne57820:0
## crwdns57822:0crwdne57822:0
crwdns57824:0/user-guide/settings/permissionscrwdne57824:0
@@ -0,0 +1,106 @@
---
title: crwdns56222:0crwdne56222:0
info: "crwdns56224:0crwdne56224:0"
image: crwdns56226:0crwdne56226:0
sectionInfo: crwdns56228:0crwdne56228:0
---
<Frame>
<img src="/images/user-guide/permissions/permissions.png" alt="Header" />
</Frame>
crwdns56230:0crwdne56230:0
- crwdns56232:0crwdne56232:0
- crwdns56234:0crwdne56234:0
- crwdns56236:0crwdne56236:0
## crwdns56238:0crwdne56238:0
crwdns56240:0crwdne56240:0
1. crwdns56242:0crwdne56242:0
2. crwdns56244:0crwdne56244:0
3. crwdns56246:0crwdne56246:0
4. crwdns56248:0crwdne56248:0
5. crwdns56250:0crwdne56250:0
## crwdns56252:0crwdne56252:0
crwdns56254:0crwdne56254:0
1. crwdns56256:0crwdne56256:0
2. crwdns56258:0crwdne56258:0
3. crwdns56260:0crwdne56260:0
4. crwdns56262:0crwdne56262:0
crwdns56264:0crwdne56264:0 crwdns56266:0crwdne56266:0 crwdns56268:0crwdne56268:0
## crwdns56270:0crwdne56270:0
### crwdns56272:0crwdne56272:0
- crwdns56274:0crwdne56274:0
- crwdns56276:0crwdne56276:0
- crwdns56278:0crwdne56278:0
### crwdns56280:0crwdne56280:0
1. crwdns56282:0crwdne56282:0
2. crwdns56284:0crwdne56284:0
3. crwdns56286:0crwdne56286:0
4. crwdns56288:0crwdne56288:0
5. crwdns56290:0crwdne56290:0
6. crwdns56292:0crwdne56292:0
### crwdns56294:0crwdne56294:0
1. crwdns56296:0crwdne56296:0
2. crwdns56298:0crwdne56298:0
3. crwdns56300:0crwdne56300:0
4. crwdns56302:0crwdne56302:0
crwdns56304:0crwdne56304:0 crwdns56306:0/user-guide/settings/member-managementcrwdne56306:0
## crwdns56308:0crwdne56308:0
crwdns56310:0crwdne56310:0
### crwdns56312:0crwdne56312:0
crwdns56314:0crwdne56314:0
#### crwdns56316:0crwdne56316:0
- crwdns56318:0crwdne56318:0
- crwdns56320:0crwdne56320:0 crwdns56322:0crwdne56322:0
#### crwdns56324:0crwdne56324:0
- crwdns56326:0crwdne56326:0
- crwdns56328:0crwdne56328:0
- crwdns56330:0crwdne56330:0
#### crwdns56332:0crwdne56332:0
crwdns56334:0crwdne56334:0
- crwdns56336:0crwdne56336:0
- crwdns56338:0crwdne56338:0
- crwdns56340:0crwdne56340:0
crwdns56342:0crwdne56342:0
### crwdns56344:0crwdne56344:0
crwdns56346:0crwdne56346:0
- crwdns56348:0crwdne56348:0
- crwdns56350:0crwdne56350:0
### crwdns56352:0crwdne56352:0
crwdns56354:0crwdne56354:0
- crwdns56356:0crwdne56356:0
- crwdns56358:0crwdne56358:0
@@ -0,0 +1,50 @@
---
title: crwdns54654:0crwdne54654:0
info: "crwdns54656:0crwdne54656:0"
image: crwdns54658:0crwdne54658:0
sectionInfo: crwdns54660:0crwdne54660:0
---
<Frame>
<img src="/images/user-guide/setup/profile.png" alt="Header" />
</Frame>
## crwdns54662:0crwdne54662:0
### crwdns54664:0crwdne54664:0
- crwdns54666:0crwdne54666:0
- crwdns54668:0crwdne54668:0
- crwdns54670:0crwdne54670:0
## crwdns54672:0crwdne54672:0
### crwdns54674:0crwdne54674:0
crwdns54678:0crwdne54678:0
1. crwdns54680:0crwdne54680:0
2. crwdns54682:0crwdne54682:0
3. crwdns54684:0crwdne54684:0
4. crwdns54688:0crwdne54688:0
### crwdns54692:0crwdne54692:0
- crwdns54696:0crwdne54696:0
- crwdns54702:0crwdne54702:0
## crwdns54706:0crwdne54706:0
### crwdns54710:0crwdne54710:0
<Warning>
crwdns54716:0crwdne54716:0 crwdns54726:0crwdne54726:0
</Warning>
crwdns54732:0crwdne54732:0
1. crwdns54736:0crwdne54736:0
2. crwdns54740:0crwdne54740:0
3. crwdns54744:0crwdne54744:0
4. crwdns54748:0crwdne54748:0
@@ -0,0 +1,33 @@
---
title: crwdns56944:0crwdne56944:0
info: "crwdns56946:0crwdne56946:0"
image: crwdns56948:0crwdne56948:0
sectionInfo: crwdns56950:0crwdne56950:0
---
<Frame>
<img src="/images/user-guide/setup/releases.png" alt="Header" />
</Frame>
## crwdns56952:0crwdne56952:0
crwdns56954:0crwdne56954:0
- crwdns56956:0crwdne56956:0
- crwdns56958:0crwdne56958:0
## crwdns56960:0crwdne56960:0
crwdns56962:0crwdne56962:0
- crwdns56964:0crwdne56964:0
- crwdns56966:0crwdne56966:0
## crwdns56968:0crwdne56968:0
1. crwdns56970:0crwdne56970:0
2. crwdns56972:0crwdne56972:0
crwdns56974:0/user-guide/resources/glossarycrwdne56974:0
@@ -0,0 +1,58 @@
---
title: crwdns54406:0crwdne54406:0
info: "crwdns54408:0crwdne54408:0"
image: crwdns54410:0crwdne54410:0
sectionInfo: crwdns54412:0crwdne54412:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/faq.png" alt="Header" />
</Frame>
## crwdns54414:0crwdne54414:0
<AccordionGroup>
<Accordion title="Can I have several workspaces?">
crwdns54416:0crwdne54416:0 crwdns54418:0crwdne54418:0
</Accordion>
<Accordion title="I accidentally created multiple workspaces but only need one. What should I do?">crwdns54420:0crwdne54420:0
<Warning>crwdns54422:0crwdne54422:0</Warning>
</Accordion>
<Accordion title="How can I disable my workspace?">crwdns54424:0crwdne54424:0</Accordion>
<Accordion title="How can I delete my workspace?">
crwdns54426:0crwdne54426:0 crwdns54428:0crwdne54428:0
</Accordion>
<Accordion title="Can I limit which emails get synced to Twenty?">
crwdns54430:0crwdne54430:0 crwdns54432:0crwdne54432:0
</Accordion>
<Accordion title="How do I decide which emails to import into Twenty?">crwdns54434:0crwdne54434:0</Accordion>
<Accordion title="Do you provide an email address to CC for selective email syncing?">
crwdns54436:0crwdne54436:0 crwdns54438:0crwdne54438:0 crwdns54440:0crwdne54440:0
</Accordion>
<Accordion title="Can I connect multiple email accounts to Twenty?">
crwdns54442:0crwdne54442:0 crwdns54444:0crwdne54444:0 crwdns54446:0crwdne54446:0 crwdns54448:0crwdne54448:0
</Accordion>
<Accordion title="How do I control who can see what in my workspace?">
crwdns54450:0crwdne54450:0 crwdns54452:0crwdne54452:0
</Accordion>
<Accordion title="Can I customize my workspace domain?">
crwdns54454:0crwdne54454:0 crwdns54456:0crwdne54456:0
</Accordion>
<Accordion title="What are Lab features and should I enable them?">
crwdns54458:0crwdne54458:0 crwdns54460:0crwdne54460:0 crwdns54462:0crwdne54462:0
</Accordion>
<Accordion title="How do I change my workspace appearance and regional settings?">crwdns54464:0crwdne54464:0</Accordion>
</AccordionGroup>
@@ -0,0 +1,34 @@
---
title: crwdns54466:0crwdne54466:0
info: "crwdns54468:0crwdne54468:0"
image: crwdns54470:0crwdne54470:0
sectionInfo: crwdns54472:0crwdne54472:0
---
<Frame>
<img src="/images/user-guide/setup/settings.png" alt="Header" />
</Frame>
## crwdns54474:0crwdne54474:0
- crwdns54476:0crwdne54476:0
- crwdns54478:0crwdne54478:0
- crwdns54480:0crwdne54480:0
## crwdns54482:0crwdne54482:0
- crwdns54484:0crwdne54484:0
- crwdns54486:0crwdne54486:0
## crwdns54488:0crwdne54488:0
<Warning>
crwdns54490:0crwdne54490:0 crwdns54492:0crwdne54492:0
</Warning>
crwdns54494:0crwdne54494:0
1. crwdns54496:0crwdne54496:0
2. crwdns54498:0crwdne54498:0
crwdns54500:0crwdne54500:0
@@ -0,0 +1,52 @@
---
title: crwdns54676:0crwdne54676:0
info: "crwdns54686:0crwdne54686:0"
image: crwdns54690:0crwdne54690:0
sectionInfo: crwdns54694:0crwdne54694:0
---
crwdns63924:0{ VimeoEmbed }crwdne63924:0
<Frame>
<img src="/images/user-guide/kanban-views/kanban.png" alt="Header" />
</Frame>
## crwdns54698:0crwdne54698:0
crwdns54700:0crwdne54700:0
## crwdns54704:0crwdne54704:0
crwdns54708:0crwdne54708:0 crwdns54712:0crwdne54712:0
<VimeoEmbed videoId="927888627" title="Video demonstration" />
## crwdns54714:0crwdne54714:0
crwdns54718:0crwdne54718:0
### crwdns54720:0crwdne54720:0
crwdns54722:0crwdne54722:0
<VimeoEmbed videoId="927890428" title="Video demonstration" />
### crwdns54724:0crwdne54724:0
crwdns54728:0crwdne54728:0
crwdns54730:0crwdne54730:0
## crwdns54734:0crwdne54734:0
crwdns54738:0crwdne54738:0 crwdns54742:0crwdne54742:0 crwdns54746:0crwdne54746:0 crwdns54750:0crwdne54750:0
crwdns54752:0crwdne54752:0
crwdns54754:0crwdne54754:0
## crwdns54756:0crwdne54756:0
crwdns54758:0crwdne54758:0 crwdns54760:0crwdne54760:0
crwdns54762:0crwdne54762:0
@@ -0,0 +1,98 @@
---
title: crwdns57360:0crwdne57360:0
info: "crwdns57370:0crwdne57370:0"
image: crwdns57374:0crwdne57374:0
sectionInfo: crwdns57378:0crwdne57378:0
---
crwdns63932:0{ VimeoEmbed }crwdne63932:0
<Frame>
<img src="/images/user-guide/views/filter.png" alt="Header" />
</Frame>
## crwdns57382:0crwdne57382:0
crwdns57386:0crwdne57386:0 crwdns57390:0crwdne57390:0 crwdns57394:0crwdne57394:0
### crwdns57398:0crwdne57398:0
crwdns57402:0crwdne57402:0 crwdns57404:0crwdne57404:0
crwdns57406:0crwdne57406:0
## crwdns57408:0crwdne57408:0
crwdns57410:0crwdne57410:0
### crwdns57412:0crwdne57412:0
crwdns57414:0crwdne57414:0 crwdns57416:0crwdne57416:0
#### crwdns57418:0crwdne57418:0
1. crwdns57420:0crwdne57420:0
2. crwdns57422:0crwdne57422:0
3. crwdns57424:0crwdne57424:0
4. crwdns57426:0crwdne57426:0
5. crwdns57428:0crwdne57428:0 crwdns57430:0crwdne57430:0
6. crwdns57432:0crwdne57432:0
crwdns57434:0crwdne57434:0
<VimeoEmbed videoId="927639721" title="Video demonstration" />
#### crwdns57436:0crwdne57436:0
crwdns57438:0crwdne57438:0 crwdns57440:0crwdne57440:0
<VimeoEmbed videoId="927643495" title="Video demonstration" />
### crwdns57442:0crwdne57442:0
crwdns57444:0crwdne57444:0
1. crwdns57446:0crwdne57446:0
2. crwdns57448:0crwdne57448:0
3. crwdns57450:0crwdne57450:0
crwdns57452:0crwdne57452:0
<VimeoEmbed videoId="927645774" title="Video demonstration" />
## crwdns57454:0crwdne57454:0
crwdns57456:0crwdne57456:0
## crwdns57458:0crwdne57458:0
crwdns57460:0crwdne57460:0 crwdns57462:0crwdne57462:0 crwdns57464:0crwdne57464:0
### crwdns57466:0crwdne57466:0
crwdns57468:0crwdne57468:0
- crwdns57470:0crwdne57470:0
- crwdns57472:0crwdne57472:0
- crwdns57474:0crwdne57474:0
<VimeoEmbed videoId="926282262" title="Video demonstration" />
### crwdns57476:0crwdne57476:0
crwdns57478:0crwdne57478:0
- crwdns57480:0crwdne57480:0
- crwdns57482:0crwdne57482:0
<VimeoEmbed videoId="927885588" title="Video demonstration" />
### crwdns57484:0crwdne57484:0
crwdns57486:0crwdne57486:0 crwdns57488:0crwdne57488:0
crwdns57490:0crwdne57490:0
### crwdns57492:0crwdne57492:0
crwdns57494:0crwdne57494:0 crwdns57496:0crwdne57496:0
@@ -0,0 +1,220 @@
---
title: crwdns54908:0crwdne54908:0
info: crwdns54910:0crwdne54910:0
image: crwdns54912:0crwdne54912:0
sectionInfo: crwdns54914:0crwdne54914:0
---
<Frame>
<img src="/images/user-guide/integrations/plug.png" alt="Header" />
</Frame>
crwdns54916:0crwdne54916:0
## crwdns54918:0crwdne54918:0
### crwdns54920:0crwdne54920:0
crwdns54922:0crwdne54922:0
crwdns54924:0crwdne54924:0
crwdns54926:0crwdne54926:0
- crwdns54928:0crwdne54928:0
- crwdns54930:0crwdne54930:0
- crwdns54932:0crwdne54932:0
- crwdns54934:0crwdne54934:0
crwdns54936:0crwdne54936:0
crwdns54938:0crwdne54938:0
- crwdns54940:0crwdne54940:0
- crwdns54942:0crwdne54942:0
- crwdns54944:0crwdne54944:0
- crwdns54946:0crwdne54946:0
### crwdns54948:0crwdne54948:0
crwdns54950:0crwdne54950:0
crwdns54952:0crwdne54952:0
crwdns54954:0crwdne54954:0
crwdns54956:0crwdne54956:0
- crwdns54958:0crwdne54958:0
- crwdns54960:0crwdne54960:0
- crwdns54962:0crwdne54962:0
- crwdns54964:0crwdne54964:0
- crwdns54966:0crwdne54966:0
- crwdns54968:0crwdne54968:0
### crwdns54970:0crwdne54970:0
crwdns54972:0crwdne54972:0
crwdns54974:0crwdne54974:0
crwdns54976:0crwdne54976:0
crwdns54978:0crwdne54978:0
- crwdns54980:0crwdne54980:0
- crwdns54982:0crwdne54982:0
- crwdns54984:0crwdne54984:0
- crwdns54986:0crwdne54986:0
- crwdns54988:0crwdne54988:0
### crwdns54990:0crwdne54990:0
crwdns54992:0crwdne54992:0
crwdns54994:0crwdne54994:0
crwdns54996:0crwdne54996:0
crwdns54998:0crwdne54998:0
- crwdns55000:0crwdne55000:0
- crwdns55002:0crwdne55002:0
- crwdns55004:0crwdne55004:0
- crwdns55006:0crwdne55006:0
- crwdns55008:0crwdne55008:0
- crwdns55010:0crwdne55010:0
## crwdns55012:0crwdne55012:0
### crwdns55014:0crwdne55014:0
crwdns55016:0crwdne55016:0
crwdns55018:0crwdne55018:0
crwdns55020:0crwdne55020:0
crwdns55022:0crwdne55022:0
crwdns55024:0crwdne55024:0
- crwdns55026:0crwdne55026:0
- crwdns55028:0crwdne55028:0
- crwdns55030:0crwdne55030:0
- crwdns55032:0crwdne55032:0
- crwdns55034:0crwdne55034:0
### crwdns55036:0crwdne55036:0
crwdns55038:0crwdne55038:0
crwdns55040:0crwdne55040:0
crwdns55042:0crwdne55042:0
crwdns55044:0crwdne55044:0
- crwdns55046:0crwdne55046:0
- crwdns55048:0crwdne55048:0
- crwdns55050:0crwdne55050:0
- crwdns55052:0crwdne55052:0
### crwdns55054:0crwdne55054:0
crwdns55056:0crwdne55056:0
crwdns55058:0crwdne55058:0
crwdns55060:0crwdne55060:0
crwdns55062:0crwdne55062:0
crwdns55064:0crwdne55064:0
- crwdns55066:0crwdne55066:0
- crwdns55068:0crwdne55068:0
- crwdns55070:0crwdne55070:0
- crwdns55072:0crwdne55072:0
crwdns55074:0crwdne55074:0
crwdns55076:0crwdne55076:0
crwdns55078:0crwdne55078:0
- crwdns55080:0crwdne55080:0
- crwdns55082:0crwdne55082:0
- crwdns55084:0crwdne55084:0
### crwdns55086:0crwdne55086:0
crwdns55088:0crwdne55088:0
crwdns55090:0crwdne55090:0
crwdns55092:0crwdne55092:0
crwdns55094:0crwdne55094:0
- crwdns55096:0crwdne55096:0
- crwdns55098:0crwdne55098:0
- crwdns55100:0crwdne55100:0
- crwdns55102:0crwdne55102:0
- crwdns55104:0crwdne55104:0
- crwdns55106:0crwdne55106:0
## crwdns55108:0crwdne55108:0
### crwdns55110:0crwdne55110:0
crwdns55112:0crwdne55112:0
crwdns55114:0crwdne55114:0
crwdns55116:0crwdne55116:0
crwdns55118:0crwdne55118:0
crwdns55120:0crwdne55120:0
- crwdns55122:0crwdne55122:0
- crwdns55124:0crwdne55124:0
crwdns55126:0crwdne55126:0
crwdns55128:0crwdne55128:0
crwdns55130:0crwdne55130:0
- crwdns55132:0crwdne55132:0
- crwdns55134:0crwdne55134:0
- crwdns55136:0crwdne55136:0
### crwdns55138:0crwdne55138:0
crwdns55140:0crwdne55140:0
crwdns55142:0crwdne55142:0
crwdns55144:0crwdne55144:0
crwdns55146:0crwdne55146:0
- crwdns55148:0crwdne55148:0
- crwdns55150:0crwdne55150:0
- crwdns55152:0crwdne55152:0
- crwdns55154:0crwdne55154:0
- crwdns55156:0crwdne55156:0
- crwdns55158:0crwdne55158:0
## crwdns55160:0crwdne55160:0
- crwdns55162:0crwdne55162:0
- crwdns55164:0crwdne55164:0
- crwdns55166:0crwdne55166:0
- crwdns55168:0crwdne55168:0
- crwdns55170:0/user-guide/workflows/workflow-featurescrwdne55170:0
- crwdns55172:0crwdne55172:0
crwdns55174:0/user-guide/workflows/workflow-troubleshootingcrwdne55174:0 crwdns55176:0/user-guide/workflows/professional-servicescrwdne55176:0
@@ -0,0 +1,77 @@
---
title: crwdns56440:0crwdne56440:0
info: "crwdns56442:0crwdne56442:0"
image: crwdns56444:0crwdne56444:0
sectionInfo: crwdns56446:0crwdne56446:0
---
<Frame>
<img src="/images/user-guide/workflows/workflow.png" alt="Header" />
</Frame>
## crwdns56448:0crwdne56448:0
crwdns56450:0crwdne56450:0 crwdns56452:0crwdne56452:0
crwdns56454:0crwdne56454:0 crwdns56456:0crwdne56456:0
## crwdns56458:0crwdne56458:0
crwdns56460:0crwdne56460:0
1. crwdns56462:0crwdne56462:0
2. crwdns56464:0crwdne56464:0
crwdns56466:0crwdne56466:0
## crwdns56468:0crwdne56468:0 crwdns56470:0crwdne56470:0
crwdns56472:0crwdne56472:0 crwdns56474:0crwdne56474:0
crwdns56476:0crwdne56476:0
- crwdns56478:0crwdne56478:0
- crwdns56480:0crwdne56480:0
- crwdns56482:0crwdne56482:0
crwdns56484:0/user-guide/workflows/internal-automationscrwdne56484:0
## crwdns56486:0crwdne56486:0 crwdns56488:0crwdne56488:0
crwdns56490:0crwdne56490:0 crwdns56492:0crwdne56492:0 crwdns56494:0crwdne56494:0
crwdns56496:0crwdne56496:0
- crwdns56498:0crwdne56498:0
- crwdns56500:0crwdne56500:0
crwdns56502:0/user-guide/workflows/external-tool-integrationcrwdne56502:0
### crwdns56504:0crwdne56504:0
crwdns56506:0/user-guide/workflows/professional-servicescrwdne56506:0
crwdns56508:0https://twenty.com/onboarding-packagescrwdne56508:0 crwdns56510:0crwdne56510:0
### crwdns56512:0crwdne56512:0
crwdns56514:0crwdne56514:0
## crwdns56516:0crwdne56516:0
crwdns56518:0crwdne56518:0
- crwdns56520:0crwdne56520:0 crwdns56522:0crwdne56522:0
- crwdns56524:0crwdne56524:0
- crwdns56526:0crwdne56526:0
- crwdns56528:0crwdne56528:0
- crwdns56530:0crwdne56530:0
## crwdns56532:0crwdne56532:0
crwdns56534:0crwdne56534:0
- crwdns56536:0crwdne56536:0
- crwdns56538:0crwdne56538:0
- crwdns56540:0crwdne56540:0
@@ -0,0 +1,170 @@
---
title: crwdns55338:0crwdne55338:0
info: "crwdns55340:0crwdne55340:0"
image: crwdns55342:0crwdne55342:0
sectionInfo: crwdns55344:0crwdne55344:0
---
<Frame>
<img src="/images/user-guide/workflows/internal-automations.png" alt="Header" />
</Frame>
crwdns55346:0crwdne55346:0
## crwdns55348:0crwdne55348:0
### crwdns55350:0crwdne55350:0
crwdns55352:0crwdne55352:0
crwdns55354:0crwdne55354:0
crwdns55356:0crwdne55356:0
crwdns55358:0crwdne55358:0
- crwdns55360:0crwdne55360:0
- crwdns55362:0crwdne55362:0
### crwdns55364:0crwdne55364:0
crwdns55366:0crwdne55366:0
crwdns55368:0crwdne55368:0
crwdns55370:0crwdne55370:0
crwdns55372:0crwdne55372:0
- crwdns55374:0crwdne55374:0
- crwdns55376:0crwdne55376:0
- crwdns55378:0crwdne55378:0
- crwdns55380:0crwdne55380:0
### crwdns55382:0crwdne55382:0
crwdns55384:0crwdne55384:0
crwdns55386:0crwdne55386:0
crwdns55388:0crwdne55388:0
crwdns55390:0crwdne55390:0
- crwdns55392:0crwdne55392:0
- crwdns55394:0crwdne55394:0
- crwdns55396:0crwdne55396:0
- crwdns55398:0crwdne55398:0
## crwdns55400:0crwdne55400:0
### crwdns55402:0crwdne55402:0
crwdns55404:0crwdne55404:0
crwdns55406:0crwdne55406:0
crwdns55408:0crwdne55408:0
crwdns55410:0crwdne55410:0
- crwdns55412:0crwdne55412:0
- crwdns55414:0crwdne55414:0
- crwdns55416:0crwdne55416:0
- crwdns55418:0crwdne55418:0
### crwdns55420:0crwdne55420:0
crwdns55422:0crwdne55422:0
crwdns55424:0crwdne55424:0
crwdns55426:0crwdne55426:0
crwdns55428:0crwdne55428:0
- crwdns55430:0crwdne55430:0
- crwdns55432:0crwdne55432:0
- crwdns55434:0crwdne55434:0
- crwdns55436:0crwdne55436:0
### crwdns55438:0crwdne55438:0
crwdns55440:0crwdne55440:0
crwdns55442:0crwdne55442:0
crwdns55444:0crwdne55444:0
crwdns55446:0crwdne55446:0
- crwdns55448:0crwdne55448:0
- crwdns55450:0crwdne55450:0
- crwdns55452:0crwdne55452:0
- crwdns55454:0crwdne55454:0
## crwdns55456:0crwdne55456:0
### crwdns55458:0crwdne55458:0
crwdns55460:0crwdne55460:0
crwdns55462:0crwdne55462:0
crwdns55464:0crwdne55464:0
crwdns55466:0crwdne55466:0
- crwdns55468:0crwdne55468:0
- crwdns55470:0crwdne55470:0
- crwdns55472:0crwdne55472:0
- crwdns55474:0crwdne55474:0
### crwdns55476:0crwdne55476:0
crwdns55478:0crwdne55478:0
crwdns55480:0crwdne55480:0
crwdns55482:0crwdne55482:0
crwdns55484:0crwdne55484:0
- crwdns55486:0crwdne55486:0
- crwdns55488:0crwdne55488:0
- crwdns55490:0crwdne55490:0
- crwdns55492:0crwdne55492:0
### crwdns55494:0crwdne55494:0
crwdns55496:0crwdne55496:0
crwdns55498:0crwdne55498:0
crwdns55500:0crwdne55500:0
crwdns55502:0crwdne55502:0
- crwdns55504:0crwdne55504:0
- crwdns55506:0crwdne55506:0
- crwdns55508:0crwdne55508:0
- crwdns55510:0crwdne55510:0
## crwdns55512:0crwdne55512:0
### crwdns55514:0crwdne55514:0
crwdns55516:0crwdne55516:0
crwdns55518:0crwdne55518:0
crwdns55520:0crwdne55520:0
crwdns55522:0crwdne55522:0
- crwdns55524:0crwdne55524:0
- crwdns55526:0crwdne55526:0
- crwdns55528:0crwdne55528:0
crwdns55530:0/user-guide/workflows/professional-servicescrwdnd55530:0/user-guide/workflows/external-tool-integrationcrwdne55530:0
@@ -0,0 +1,37 @@
---
title: crwdns57342:0crwdne57342:0
info: crwdns57344:0crwdne57344:0
image: crwdns57346:0crwdne57346:0
sectionInfo: crwdns57348:0crwdne57348:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/implementation_services.png" alt="Header" />
</Frame>
## crwdns57350:0crwdne57350:0
crwdns57352:0crwdne57352:0
- crwdns57354:0crwdne57354:0
- crwdns57356:0crwdne57356:0
- crwdns57358:0crwdne57358:0
- crwdns57362:0crwdne57362:0
- crwdns57364:0crwdne57364:0
- crwdns57366:0crwdne57366:0
## crwdns57368:0crwdne57368:0
### crwdns57372:0crwdne57372:0
crwdns57376:0https://twenty.com/onboarding-packagescrwdne57376:0
- crwdns57380:0crwdne57380:0
- crwdns57384:0crwdne57384:0
- crwdns57388:0crwdne57388:0
### crwdns57392:0crwdne57392:0
crwdns57396:0crwdne57396:0 crwdns57400:0https://twenty.com/implementation-servicescrwdne57400:0
@@ -0,0 +1,93 @@
---
title: crwdns54782:0crwdne54782:0
info: crwdns54784:0crwdne54784:0
image: crwdns54786:0crwdne54786:0
sectionInfo: crwdns54788:0crwdne54788:0
---
<Frame>
<img src="/images/user-guide/workflows/workflow-credits.png" alt="Header" />
</Frame>
crwdns54790:0crwdne54790:0 crwdns54792:0crwdne54792:0
## crwdns54794:0crwdne54794:0
crwdns54796:0crwdne54796:0
- crwdns54798:0crwdne54798:0
- crwdns54800:0crwdne54800:0
- crwdns54802:0crwdne54802:0
## crwdns54804:0crwdne54804:0
crwdns54806:0crwdne54806:0 crwdns54808:0crwdne54808:0
### crwdns54810:0crwdne54810:0
- crwdns54812:0crwdne54812:0
- crwdns54814:0crwdne54814:0
- crwdns54816:0crwdne54816:0
- crwdns54818:0crwdne54818:0
- crwdns54820:0crwdne54820:0
- crwdns54822:0crwdne54822:0
- crwdns54824:0crwdne54824:0
- crwdns54826:0crwdne54826:0
- crwdns54828:0crwdne54828:0
- crwdns54830:0crwdne54830:0
- crwdns54832:0crwdne54832:0
### crwdns54834:0crwdne54834:0
crwdns54836:0crwdne54836:0 crwdns54838:0crwdne54838:0
- crwdns54840:0crwdne54840:0
- crwdns54842:0crwdne54842:0
- crwdns54844:0crwdne54844:0
## crwdns54846:0crwdne54846:0
### crwdns54848:0crwdne54848:0
1. crwdns54850:0crwdne54850:0
2. crwdns54852:0crwdne54852:0
3. crwdns54854:0crwdne54854:0
### crwdns54856:0crwdne54856:0
crwdns54858:0crwdne54858:0
1. crwdns54860:0crwdne54860:0
2. crwdns54862:0crwdne54862:0 crwdns54864:0crwdne54864:0
3. crwdns54866:0crwdne54866:0
## crwdns54868:0crwdne54868:0
### crwdns54870:0crwdne54870:0
- crwdns54872:0crwdne54872:0
- crwdns54874:0crwdne54874:0
- crwdns54876:0crwdne54876:0
- crwdns54878:0crwdne54878:0
- crwdns54880:0crwdne54880:0
- crwdns54882:0/user-guide/workflows/workflow-featurescrwdne54882:0
### crwdns54884:0crwdne54884:0
- crwdns54886:0crwdne54886:0
- crwdns54888:0crwdne54888:0
- crwdns54890:0crwdne54890:0
- crwdns54892:0crwdne54892:0
### crwdns54894:0crwdne54894:0
- crwdns54896:0crwdne54896:0
- crwdns54898:0crwdne54898:0
- crwdns54900:0crwdne54900:0
- crwdns54902:0crwdne54902:0
- crwdns54904:0crwdne54904:0
crwdns54906:0crwdne54906:0
@@ -0,0 +1,317 @@
---
title: crwdns58120:0crwdne58120:0
info: crwdns58122:0crwdne58122:0
image: crwdns58124:0crwdne58124:0
sectionInfo: crwdns58126:0crwdne58126:0
---
<Frame>
<img src="/images/user-guide/workflows/robot.png" alt="Header" />
</Frame>
## crwdns58128:0crwdne58128:0
crwdns58130:0crwdne58130:0
### crwdns58132:0crwdne58132:0
crwdns58134:0crwdne58134:0
crwdns58136:0crwdne58136:0
### crwdns58138:0crwdne58138:0
crwdns58140:0crwdne58140:0
crwdns58142:0crwdne58142:0
- crwdns58144:0crwdne58144:0
- crwdns58146:0crwdne58146:0
### crwdns58148:0crwdne58148:0
crwdns58150:0crwdne58150:0
crwdns58152:0crwdne58152:0
- crwdns58154:0crwdne58154:0
- crwdns58156:0crwdne58156:0
crwdns58158:0crwdne58158:0
- crwdns58160:0crwdne58160:0
- crwdns58162:0crwdne58162:0
- crwdns58164:0crwdne58164:0
### crwdns58166:0crwdne58166:0
crwdns58168:0crwdne58168:0
crwdns58170:0crwdne58170:0
### crwdns58172:0crwdne58172:0
crwdns58174:0crwdne58174:0 crwdns58176:0crwdne58176:0
crwdns58178:0crwdne58178:0
- crwdns58180:0crwdne58180:0 crwdns58182:0crwdne58182:0
- crwdns58184:0crwdne58184:0 crwdns58186:0crwdne58186:0 crwdns58188:0crwdne58188:0 crwdns58190:0crwdne58190:0
<Warning>crwdns58192:0crwdne58192:0</Warning>
- crwdns58194:0crwdne58194:0 crwdns58196:0crwdne58196:0 crwdns58198:0crwdne58198:0 crwdns58200:0crwdne58200:0 crwdns58202:0crwdne58202:0 crwdns58204:0crwdne58204:0
crwdns58206:0crwdne58206:0
- crwdns58208:0crwdne58208:0
- crwdns58210:0crwdne58210:0
- crwdns58212:0crwdne58212:0
crwdns58214:0crwdne58214:0
- crwdns58216:0crwdne58216:0
- crwdns58218:0crwdne58218:0
### crwdns58220:0crwdne58220:0
crwdns58222:0crwdne58222:0
crwdns58224:0crwdne58224:0
- crwdns58226:0crwdne58226:0
- crwdns58228:0crwdne58228:0
### crwdns58230:0crwdne58230:0
crwdns58232:0crwdne58232:0
crwdns58234:0crwdne58234:0
- crwdns58236:0crwdne58236:0
- crwdns58238:0crwdne58238:0
- crwdns58240:0crwdne58240:0
## crwdns58242:0crwdne58242:0
crwdns58244:0crwdne58244:0 crwdns58246:0crwdne58246:0
### crwdns58248:0crwdne58248:0
crwdns58250:0crwdne58250:0
crwdns58252:0crwdne58252:0
- crwdns58254:0crwdne58254:0
- crwdns58256:0crwdne58256:0
- crwdns58258:0crwdne58258:0
crwdns58260:0crwdne58260:0
### crwdns58262:0crwdne58262:0
crwdns58264:0crwdne58264:0
crwdns58266:0crwdne58266:0
- crwdns58268:0crwdne58268:0
- crwdns58270:0crwdne58270:0
- crwdns58272:0crwdne58272:0
crwdns58274:0crwdne58274:0
### crwdns58276:0crwdne58276:0
crwdns58278:0crwdne58278:0
crwdns58280:0crwdne58280:0
- crwdns58282:0crwdne58282:0
- crwdns58284:0crwdne58284:0
crwdns58286:0crwdne58286:0
### crwdns58288:0crwdne58288:0
crwdns58290:0crwdne58290:0
crwdns58292:0crwdne58292:0
- crwdns58294:0crwdne58294:0
- crwdns58296:0crwdne58296:0
- crwdns58298:0crwdne58298:0
crwdns58300:0crwdne58300:0
crwdns58302:0crwdne58302:0
### crwdns58304:0crwdne58304:0
crwdns58306:0crwdne58306:0
crwdns58308:0crwdne58308:0
- crwdns58310:0crwdne58310:0
- crwdns58312:0crwdne58312:0
- crwdns58314:0crwdne58314:0
crwdns58316:0crwdne58316:0
crwdns58318:0crwdne58318:0 crwdns58320:0crwdne58320:0
### crwdns58322:0crwdne58322:0
crwdns58324:0crwdne58324:0
crwdns58326:0crwdne58326:0
- crwdns58328:0crwdne58328:0
- crwdns58330:0crwdne58330:0
- crwdns58332:0crwdne58332:0
crwdns58334:0crwdne58334:0
### crwdns58336:0crwdne58336:0
crwdns58338:0crwdne58338:0
crwdns58340:0crwdne58340:0
crwdns58342:0crwdne58342:0
- crwdns58344:0crwdne58344:0
- crwdns58346:0crwdne58346:0
- crwdns58348:0crwdne58348:0
- crwdns58350:0crwdne58350:0
crwdns58352:0crwdne58352:0
### crwdns58354:0crwdne58354:0
crwdns58356:0crwdne58356:0
crwdns58358:0crwdne58358:0
- crwdns58360:0crwdne58360:0
- crwdns58362:0crwdne58362:0
- crwdns58364:0crwdne58364:0
- crwdns58366:0crwdne58366:0
crwdns58368:0crwdne58368:0
### crwdns58370:0crwdne58370:0
crwdns58372:0crwdne58372:0
crwdns58374:0crwdne58374:0
- crwdns58376:0crwdne58376:0
- crwdns58378:0crwdne58378:0
- crwdns58380:0crwdne58380:0
crwdns58382:0crwdne58382:0
<Warning>
crwdns58384:0crwdne58384:0 crwdns58386:0crwdne58386:0 crwdns58388:0crwdne58388:0
</Warning>
### crwdns58390:0crwdne58390:0
crwdns58392:0crwdne58392:0
crwdns58394:0crwdne58394:0
- crwdns58396:0crwdne58396:0
- crwdns58398:0crwdne58398:0
- crwdns58400:0crwdne58400:0
- crwdns58402:0crwdne58402:0
- crwdns58404:0crwdne58404:0
## crwdns58406:0crwdne58406:0
### crwdns58408:0crwdne58408:0
1. crwdns58410:0crwdne58410:0
2. crwdns58412:0crwdne58412:0
3. crwdns58414:0crwdne58414:0
4. crwdns58416:0crwdne58416:0
5. crwdns58418:0crwdne58418:0
6. crwdns58420:0crwdne58420:0
crwdns58422:0crwdne58422:0 crwdns58424:0crwdne58424:0
### crwdns58426:0crwdne58426:0
- crwdns58428:0crwdne58428:0
- crwdns58430:0crwdne58430:0
- crwdns58432:0crwdne58432:0
- crwdns58434:0crwdne58434:0
### crwdns58436:0crwdne58436:0
crwdns58438:0crwdne58438:0 crwdns58440:0crwdne58440:0
### crwdns58442:0crwdne58442:0
crwdns58444:0crwdne58444:0
- crwdns58446:0crwdne58446:0
- crwdns58448:0crwdne58448:0
- crwdns58450:0crwdne58450:0
### crwdns58452:0crwdne58452:0
crwdns58454:0crwdne58454:0
- crwdns58456:0crwdne58456:0
- crwdns58458:0crwdne58458:0
- crwdns58460:0crwdne58460:0
- crwdns58462:0crwdne58462:0
crwdns58464:0crwdne58464:0
- crwdns58466:0crwdne58466:0
- crwdns58468:0crwdne58468:0
crwdns58470:0crwdne58470:0
### crwdns58472:0crwdne58472:0
- crwdns58474:0crwdne58474:0
- crwdns58476:0crwdne58476:0
- crwdns58478:0crwdne58478:0
- crwdns58480:0crwdne58480:0
## crwdns58482:0crwdne58482:0
### crwdns58484:0crwdne58484:0
- crwdns58486:0crwdne58486:0
- crwdns58488:0crwdne58488:0
- crwdns58490:0crwdne58490:0
- crwdns58492:0crwdne58492:0
- crwdns58494:0crwdne58494:0
### crwdns58496:0crwdne58496:0
- crwdns58498:0crwdne58498:0
- crwdns58500:0crwdne58500:0
- crwdns58502:0crwdne58502:0
- crwdns58504:0crwdne58504:0
### crwdns58506:0crwdne58506:0
- crwdns58508:0crwdne58508:0
- crwdns58510:0crwdne58510:0
- crwdns58512:0crwdne58512:0
- crwdns58514:0crwdne58514:0
### crwdns58516:0crwdne58516:0
- crwdns58518:0crwdne58518:0
- crwdns58520:0crwdne58520:0
- crwdns58522:0crwdne58522:0
- crwdns58524:0crwdne58524:0
crwdns58526:0/user-guide/workflows/internal-automationscrwdnd58526:0/user-guide/workflows/external-tool-integrationcrwdne58526:0
@@ -0,0 +1,129 @@
---
title: crwdns55178:0crwdne55178:0
info: crwdns55180:0crwdne55180:0
image: crwdns55182:0crwdne55182:0
sectionInfo: crwdns55184:0crwdne55184:0
---
<Frame>
<img src="/images/user-guide/what-is-twenty/20.png" alt="Header" />
</Frame>
## crwdns55186:0crwdne55186:0
crwdns55188:0crwdne55188:0
- crwdns55190:0crwdne55190:0
- crwdns55192:0crwdne55192:0
- crwdns55194:0crwdne55194:0
## crwdns55196:0crwdne55196:0
### crwdns55198:0crwdne55198:0
crwdns55200:0crwdne55200:0
crwdns55202:0crwdne55202:0
- crwdns55204:0crwdne55204:0
- crwdns55206:0crwdne55206:0
- crwdns55208:0crwdne55208:0
- crwdns55210:0crwdne55210:0
- crwdns55212:0crwdne55212:0
### crwdns55214:0crwdne55214:0
crwdns55216:0crwdne55216:0
<Warning>
crwdns55218:0crwdne55218:0 crwdns55220:0crwdne55220:0 crwdns55222:0crwdne55222:0
</Warning>
crwdns55224:0crwdne55224:0
### crwdns55226:0crwdne55226:0
crwdns55228:0crwdne55228:0
crwdns55230:0crwdne55230:0
- crwdns55232:0crwdne55232:0
- crwdns55234:0crwdne55234:0
- crwdns55236:0crwdne55236:0
- crwdns55238:0crwdne55238:0
- crwdns55240:0crwdne55240:0
### crwdns55242:0crwdne55242:0
crwdns55244:0crwdne55244:0
<Warning>crwdns55246:0crwdne55246:0</Warning>
crwdns55248:0crwdne55248:0
- crwdns55250:0crwdne55250:0
- crwdns55252:0crwdne55252:0
- crwdns55254:0crwdne55254:0
- crwdns55256:0crwdne55256:0
### crwdns55258:0crwdne55258:0
crwdns55260:0crwdne55260:0
crwdns55262:0crwdne55262:0
- crwdns55264:0crwdne55264:0
- crwdns55266:0crwdne55266:0
- crwdns55268:0crwdne55268:0
- crwdns55270:0crwdne55270:0
### crwdns55272:0crwdne55272:0
crwdns55274:0crwdne55274:0
crwdns55276:0crwdne55276:0
- crwdns55278:0crwdne55278:0 crwdns55280:0crwdne55280:0
- crwdns55282:0crwdne55282:0
- crwdns55284:0crwdne55284:0
- crwdns55286:0crwdne55286:0
### crwdns55288:0crwdne55288:0
crwdns55290:0crwdne55290:0
<Warning>
crwdns55292:0crwdne55292:0 crwdns55294:0crwdne55294:0
</Warning>
## crwdns55296:0crwdne55296:0
### crwdns55298:0crwdne55298:0
- crwdns55300:0crwdne55300:0
- crwdns55302:0crwdne55302:0
- crwdns55304:0crwdne55304:0
- crwdns55306:0crwdne55306:0
- crwdns55308:0crwdne55308:0
- crwdns55310:0crwdne55310:0
### crwdns55312:0crwdne55312:0
- crwdns55314:0crwdne55314:0
- crwdns55316:0crwdne55316:0
- crwdns55318:0crwdne55318:0
- crwdns55320:0crwdne55320:0
## crwdns55322:0crwdne55322:0
### crwdns55324:0crwdne55324:0
- crwdns55326:0/user-guide/workflows/workflow-featurescrwdne55326:0
- crwdns55328:0/user-guide/workflows/workflow-creditscrwdne55328:0
- crwdns55330:0/user-guide/workflows/internal-automationscrwdnd55330:0/user-guide/workflows/external-tool-integrationcrwdne55330:0
### crwdns55332:0crwdne55332:0
- crwdns55334:0/user-guide/workflows/professional-servicescrwdne55334:0
- crwdns55336:0crwdne55336:0
@@ -0,0 +1,56 @@
---
title: API
image: /images/docs/getting-started/api.png
info: Ontdek hoe om ons API's te gebruik.
---
<Frame>
<img src="/images/docs/getting-started/api.png" alt="Header" />
</Frame>
## Oorsig
Die Twenty API stel ontwikkelaars in staat om programmaties met die Twenty CRM-platform te kommunikeer. Met behulp van die API kan jy Twenty integreer met ander stelsels, data-sinchronisasie outomatiseer en pasgemaakte oplossings om jou kliëntedata bou. Die API voorsien eindpunte om **te skep, lees, opdateer, en uitvee** kern CRM voorwerpe (soos mense en maatskappye) asook toegang tot metadata-konfigurasie.
**API Speelgrond:** Jy kan nou toegang tot die API Speelgrond binne die toep-instellings verkry. Om API-oproepe in reële tyd te toets, teken in by jou Twenty-werksruimte en navigeer na **Instellings → API's & Webhooks**. Dit open die in-app API Speelgrond en die instellings vir API-sleutels.
**[Gaan na API Instellings](https://app.twenty.com/settings)**
## Magtiging
Twenty se API gebruik API-sleutels vir verifikasie. Elke versoek aan beskermde eindpunte moet 'n API-sleutel in die kopstuk insluit.
- **API-sleutels:** Jy kan 'n nuwe API-sleutel genereer vanaf jou Twenty-toep se **API-instellings** bladsy. Elke API-sleutel is 'n geheime teken wat toegang tot jou CRM-data verleen, dus hou dit veilig. As 'n sleutel gekompromitteer is, herroep dit vanaf die instellings en genereer 'n nuwe een.
- **Verifikasie-opskrif:** Sodra jy 'n API-sleutel het, sluit dit in die `Verifikasie` opskrif van jou HTTP-versoeke in. Gebruik die Bearer token-skema. Byvoorbeeld:
```
Authorization: Bearer YOUR_API_KEY
```
Vervang `JOU_API_SLEUTEL` met die sleutel wat jy verkry het. Hierdie opskrif moet op **alle API-versoeke** teenwoordig wees. As die teken ontbreek of ongeldig is, sal die API met 'n verifikasiefout (HTTP 401 Ongemagtig) antwoord.
## API Eindpunte
Alle hulpbronne kan verkry word en via REST of GraphQL.
- **Wolk:** `https://api.twenty.com/` of jou pasgemaakte domein/sub-domein
- **Self-Hosted Instances:** If you are running Twenty on your own server, use your own domain in place of `api.twenty.com` (for example, `https://{your-domain}/rest/`).
Eindpunte is in twee kategorieë gegroepeer: **Kern API** en **Metadata API**. Die **Kern API** hanteer primêre CRM-data (bv. mense, maatskappye, notas, take), terwyl die **Metadata API** konfigurasiedata dek (soos pasgemaakte velde of voorwerpedefinisies). Die meeste integrasies sal hoofsaaklik die Kern API gebruik.
### Kern API
Toeganklik op `/rest/` of `/graphql/`.
Die **Kern API** dien as 'n verenigde koppelvlak vir die bestuur van kern CRM-entiteite (mense, maatskappye, notas, take) en hul verhoudings, en bied **sowel REST as GraphQL** interaksie modelle aan.
### Metadata API
Toeganklik op `/rest/metadata/` of `/metadata/`.
Die Metadata API-eindpunte laat jou toe om inligting oor jou skema en instellings te kry. Byvoorbeeld, jy kan definisies van pasgemaakte velde, voorwerpeskemas, ensovoorts opsoek.
- **Voorbeeld Eindpunte:**
- `GET /rest/metadata/objects` Lys al die voorwerptipes en hul metadata (velde, verhoudings).
- `GET /rest/metadata/objects/{objectNaam}` Verkry metadata vir 'n spesifieke voorwerp (bv. `mense`, `maatskappye`).
- `GET /rest/metadata/picklists` Verkry keuselys (afrol) velde-opsies wat in die CRM gedefinieer is.
Tipies word die metadata-eindpunte gebruik om die struktuur van data (vir dinamiese integrasies of vormbou) te verstaan eerder as om werklike rekords te bestuur. Hulle is in die meeste gevalle lees-alleen. Verifikasie is ook vir hierdie vereis (gebruik jou API-sleutel).
@@ -0,0 +1,87 @@
---
title: Webhake
image: /images/docs/getting-started/webhooks.png
info: Ontdek hoe om ons Webhooks te gebruik.
---
<Frame>
<img src="/images/docs/getting-started/webhooks.png" alt="Header" />
</Frame>
## Oorsig
Webhooks in Twenty vul die API aan deur **intydse kennisgewings** aan jou eie toepassings te aktiveer wanneer sekere gebeurtenisse in jou CRM plaasvind. In plaas daarvan om die API voortdurend vir veranderinge te pols, kan jy webhooks opstel om Twenty toe te laat om data **te stuur** na jou stelsel wanneer spesifieke gebeurtenisse voorkom (byvoorbeeld, wanneer 'n nuwe rekord geskep word of 'n bestaande rekord opgedateer word). Dit help om eksterne stelsels onmiddellik en doeltreffend met Twenty gesinkroniseer te hou.
Met webhooks sal Twenty 'n HTTP POST-versoek stuur na 'n URL wat jy spesifiseer, wat besonderhede oor die gebeurtenis bevat. You can then handle that data in your application (e.g., to update your external database, trigger workflows, or send alerts).
## Stel 'n Webhook Op
Om 'n webhook in Twenty te skep, gebruik die **API's & Webhooks**-instellings in jou Twenty-app:
1. **Gaan na Instellings:** Gaan in jou Twenty-toepassing na **Instellings → API's & Webhooks**.
2. **Skep 'n Webhook:** Klik onder **Webhooks** op **+ Skep webhook**.
3. **Voer URL in:** Verskaf die eindpunt-URL op jou bediener waar jy wil hê Twenty moet webhook-versoeke stuur. Dit moet 'n publiek toeganklike URL wees wat POST-versoeke kan hanteer.
4. **Stoor:** Klik **Stoor** om die webhook te skep. Die nuwe webhook sal onmiddellik geaktiveer word.
Jy kan verskeie webhooks skep as jy verskillende gebeurtenisse na verskillende eindpunte moet stuur. Elke webhook is in wese 'n inskrywing vir alle relevante gebeurtenisse (op hierdie stadium stuur Twenty alle gebeurtenissoorte na die gegewe URL; filter spesifieke gebeurtenissoorte mag in die UI konfigureerbaar wees). If you ever need to remove a webhook, you can delete it from the same settings page (select the webhook and choose delete).
## Gebeurtenisse en Laaie
Sodra 'n webhook ingestel is, sal Twenty 'n HTTP POST-versoek stuur na jou gespesifiseerde URL wanneer 'n sneller-gebeurtenis in jou CRM-data plaasvind. Algemene gebeurtenisse wat webhooks sneller insluit:
- **Rekord Geskep:** bv. 'n nuwe persoon word bygevoeg (`person.created`), 'n nuwe maatskappy word geskep (`company.created`), 'n nota word geskep (`note.created`), ens.
- **Rekord Opgedateer:** bv. 'n bestaande persoon se inligting word opgedateer (`person.updated`), 'n maatskappyrekord word gewysig (`company.updated`), ens.
- **Record Deleted:** e.g. a person or company is deleted (`person.deleted`, `company.deleted`).
- **Ander Gebeurtenisse:** Indien van toepassing, ander objekgebeurtenisse of pasgemaakte snelringe (byvoorbeeld, indien take of ander voorwerpe opgedateer word, sal soortgelyke gebeurtenistipes gebruik word soos `task.created`, `note.updated`, ens.).
Die webhook POST-versoek bevat 'n JSON-laai in sy liggaam. Die laai sal gewoonlik ten minste twee dinge insluit: die tipe gebeurtenis, en die data wat met daardie gebeurtenis verband hou (dikwels die rekord wat geskep/opgedateer is). Byvoorbeeld, 'n webhook vir 'n nuutgeskepde persoon sal dalk 'n laai stuur soos:
```
{
"event": "person.created",
"data": {
"id": "abc12345",
"firstName": "Alice",
"lastName": "Doe",
"email": "alice@example.com",
"createdAt": "2025-02-10T15:30:45Z",
"createdBy": "user_123"
},
"timestamp": "2025-02-10T15:30:50Z"
}
```
In hierdie voorbeeld:
- `"event"` spesifiseer wat gebeur het (`person.created`).
- `"data"` bevat die besonderhede van die nuwe rekord (dieselfde inligting wat jy sou kry as jy daardie persoon via die API versoek het).
- `"timestamp"` is wanneer die gebeurtenis plaasgevind het (in UTC).
Jou eindpunt moet voorbereid wees om sulke JSON-data via POST te ontvang. Gewoonlik sal jy die JSON ontleed, kyk na die `"event"`-tipe om te verstaan wat gebeur het, en dan die `"data"` toepaslik gebruik (bv. 'n nuwe kontak in jou stelsel skep, of 'n bestaande een opdateer).
**Nota:** Dit is belangrik om te reageer met 'n **2xx HTTP-status** van jou webhook-eindpunt om suksesvolle ontvangs te erken. As die Twenty webhooksender nie 'n 2xx-antwoord kry nie, mag dit oorweeg dat die aflewering misluk het. (In die toekoms mag herpoging logika mislukte webhooks probeer herstuur, so streef altyd om so gou as moontlik 'n 200 OK terug te gee na verwerking van die data.)
## Webhook Validasie
Om die sekerheid van jou webhook-eindpunte te verseker, sluit Twenty 'n handtekening in die `X-Twenty-Webhook-Signature`-kop in.
Hierdie handtekening is 'n HMAC SHA256 hash van die versoeklaai, bereken met behulp van jou webhook-geheim.
Om die handtekening te valideer, moet jy:
1. Koppel die timestamp (van `X-Twenty-Webhook-Timestamp`-kop), 'n dubbelpunt, en die JSON-string van die laai.
2. Bereken die HMAC SHA256 hash met behulp van jou webhook-geheim as die sleutel.
3. Vergelyk die resulterende heksadecimale verteer met die handtekening-kop.
Hier is 'n voorbeeld in Node.js:
```javascript
const crypto = require("crypto");
const timestamp = "1735066639761";
const payload = JSON.stringify({...});
const secret = "your-secret";
const stringToSign = `${timestamp}:${JSON.stringify(payload)}`;
const signature = crypto.createHmac("sha256", secret)
.update(stringToSign)
.digest("hex");
```
@@ -0,0 +1,27 @@
---
title: Beste Praktyke
image: /images/user-guide/tips/light-bulb.png
---
<Frame>
<img src="/images/user-guide/tips/light-bulb.png" alt="Header" />
</Frame>
Hierdie dokument skets die beste praktyke wat u moet volg wanneer u aan die agterkant werk.
## Volg 'n modulêre benadering
Die agterkant volg 'n modulêre benadering, wat 'n fundamentele beginsel is wanneer met NestJS gewerk word. Maak seker jy verdeel jou kode in herbruikbare modules om 'n skoon en georganiseerde kodebasis te handhaaf.
Elke module moet 'n spesifieke kenmerk of funksionaliteit inkapsuleer en 'n duidelik gedefinieerde omvang hê. Hierdie modulêre benadering stel duidelike skeiding van bekommernisse moontlik en verwyder onnodige kompleksiteite.
## Expose services to use in modules
Skep altyd dienste met 'n duidelike en enkele verantwoordelikheid, wat die leesbaarheid en onderhoudbaarheid van die kode verbeter. Gee dienste beskrywende en konsekwente name.
U moet ook dienste blootstel wat u in ander modules wil gebruik. Die blootstelling van dienste aan ander modules is moontlik deur NestJS se kragtige afhanklikheidsinspuitingstelsel, en bevorder los koppeling tussen komponente.
## Avoid using `any` type
Wanneer u `enige` verklaar, voer TypeScript se tipe-inspekteerder geen tipekyk uit nie, waardeur dit moontlik is om enige tipe waardes aan die veranderlike toe te ken. TypeScript gebruik tipe-afleiding om die tipe van 'n veranderlike te bepaal op grond van die waarde. Deur dit as `enige` te verklaar, kan TypeScript nie meer die tipe aflei nie. Dit maak dit moeilik om tipe-verwante foute tydens ontwikkeling vas te vang, wat tot runtime-foute lei en maak die kode minder onderhoudbaar, minder betroubaar en moeiliker om te verstaan vir ander.
Dit is hoekom alles 'n tipe moet hê. As u dus 'n nuwe objek met 'n voornaam en van skep, moet u 'n koppelvlak of tipe skep wat 'n eerste naam en van bevat wat die vorm van die objek wat u manipuleer definieer.
@@ -0,0 +1,45 @@
---
title: Pasgemaakte voorwerpe
image: /images/user-guide/objects/objects.png
---
<Frame>
<img src="/images/user-guide/objects/objects.png" alt="Header" />
</Frame>
Objekte is strukture wat jou toelaat om data (rekords, eienskappe en waardes) wat spesifiek aan 'n organisasie is, op te slaan. Twenty provides both standard and custom objects.
Standaard voorwerpe is ingeboude voorwerpe met 'n stel eienskappe beskikbaar vir alle gebruikers. Voorbeelde van standaard voorwerpe in Twenty sluit in Maatskappy en Persoon. Standard objects have standard fields that are also available for all Twenty users, like Company.displayName.
Aangepaste voorwerpe is voorwerpe wat jy kan skep om inligting wat uniek is aan jou organisasie te stoor. Hulle is nie ingebou nie; lede van jou werkruimte kan aangepaste voorwerpe skep en aanpas om inligting te hou waarvoor standaard voorwerpe nie geskik is nie.
## Hoë-vlak skema
<div style={{textAlign: 'center'}}>
<img src="/images/docs/server/custom-object-schema.png" alt="High level schema" />
</div>
<br/>
## Hoe dit werk
Aangepaste voorwerpe kom van metadata tabelle wat die vorm, naam en tipe van die voorwerpe bepaal. Al hierdie inligting is teenwoordig in die metadata skema databasis wat bestaan uit tabelle:
- **DataBron**: Beskryf waar die data teenwoordig is.
- **Voorwerp**: Beskryf die voorwerp en koppel aan 'n DataBron.
- **Veld**: Lys 'n voorwerp se velde en koppel aan die voorwerp.
Om 'n aangepaste voorwerp by te voeg, sal die werkspasielid die /metadata API navraag doen. Dit werk die metadata dienooreenkomstig op en bereken 'n GraphQL skema gebaseer op die metadata en berg dit in 'n GQL kas vir later gebruik.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/server/add-custom-objects.jpeg" alt="Query the /metadata API to add custom objects" />
</div>
<br/>
Om data te haal, behels die proses die maak van navrae deur die /graphql eindpunt en dit deur die Navraag Oplosser.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/server/custom-object-schema.png" alt="Query the /graphql endpoint to fetch data" />
</div>
@@ -0,0 +1,51 @@
---
title: Kenmerkvlae
image: /images/user-guide/table-views/table.png
---
<Frame>
<img src="/images/user-guide/table-views/table.png" alt="Header" />
</Frame>
Kenmerkvlae word gebruik om eksperimentele kenmerke te verberg. Vir Twenty is hulle op die werksvlak gestel en nie op 'n gebruiker se vlak nie.
## Voeg 'n nuwe kenmerkvlag toe
Voeg die kenmerkvlag by in `FeatureFlagKey.ts`:
```ts
type FeatureFlagKey =
| 'IS_FEATURENAME_ENABLED'
| ...;
```
Voeg dit ook by die enum in `feature-flag.entity.ts`:
```ts
enum FeatureFlagKeys {
IsFeatureNameEnabled = 'IS_FEATURENAME_ENABLED',
...
}
```
Om 'n kenmerkvlag op 'n **backend** kenmerk toe te pas, gebruik:
```ts
@Gate({
featureFlag: 'IS_FEATURENAME_ENABLED',
})
```
Om 'n kenmerkvlag op 'n **frontend** kenmerk toe te pas, gebruik:
```ts
const isFeatureNameEnabled = useIsFeatureEnabled('IS_FEATURENAME_ENABLED');
```
## Stel kenmerkvlae op vir die implementering
Verander die ooreenstemmende rekord in die Tabel `core.featureFlag`
| id | sleutel | werkspasieId | waarde |
| ------- | ------------------------ | ------------ | ------ |
| Lukraak | `IS_FEATURENAME_ENABLED` | WerkspasieID | `waar` |

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