mirror of
https://github.com/twentyhq/twenty.git
synced 2024-08-17 18:00:29 +03:00
Improve Documentation (#3795)
* Begin docs improvement * Keep improving documentation * Upgrade Docusarus * Fix broken links
This commit is contained in:
parent
6748dfebc4
commit
a5989a470c
@ -26,7 +26,7 @@
|
||||
|
||||
We’ve spent thousands of hours grappling with traditional CRMs like Pipedrive and Salesforce to align them with our business needs, only to end up frustrated — customizations are complex and the closed ecosystems of these platforms can feel restrictive.
|
||||
|
||||
We felt the need for a CRM platform that empowers rather than constrains. We believe the next great CRM will come from the open source community. And we’ve packed Twenty with powerful features to give you full control and help you win more deals.
|
||||
We felt the need for a CRM platform that empowers rather than constrains. We believe the next great CRM will come from the open source community. And we’ve packed Twenty with powerful features to give you full control and help you run your business efficiently.
|
||||
|
||||
<br>
|
||||
|
||||
|
@ -10,8 +10,8 @@
|
||||
"@chakra-ui/accordion": "^2.3.0",
|
||||
"@chakra-ui/system": "^2.6.0",
|
||||
"@codesandbox/sandpack-react": "^2.11.3",
|
||||
"@docusaurus/core": "^3.0.0",
|
||||
"@docusaurus/preset-classic": "^3.0.0",
|
||||
"@docusaurus/core": "^3.1.0",
|
||||
"@docusaurus/preset-classic": "^3.1.0",
|
||||
"@emotion/react": "^11.11.1",
|
||||
"@emotion/styled": "^11.11.0",
|
||||
"@floating-ui/react": "^0.24.3",
|
||||
@ -157,8 +157,8 @@
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.14.5",
|
||||
"@babel/preset-react": "^7.14.5",
|
||||
"@docusaurus/module-type-aliases": "^3.0.0",
|
||||
"@docusaurus/tsconfig": "3.0.0",
|
||||
"@docusaurus/module-type-aliases": "^3.1.0",
|
||||
"@docusaurus/tsconfig": "3.1.0",
|
||||
"@graphql-codegen/cli": "^3.3.1",
|
||||
"@graphql-codegen/client-preset": "^4.1.0",
|
||||
"@graphql-codegen/typescript": "^3.0.4",
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"label": "Contributor guide",
|
||||
"position": 2
|
||||
"label": "Contributing",
|
||||
"position": 3
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Bugs & Requests
|
||||
title: Bugs and Requests
|
||||
sidebar_position: 3
|
||||
sidebar_custom_props:
|
||||
icon: TbBug
|
@ -1,3 +1,5 @@
|
||||
{
|
||||
"position": 3
|
||||
"position": 3,
|
||||
"collapsible": true,
|
||||
"collapsed": true
|
||||
}
|
||||
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"label": "Advanced",
|
||||
"position": 3
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"label": "Basics",
|
||||
"position": 1
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
---
|
||||
title: Basics
|
||||
sidebar_position: 0
|
||||
---
|
||||
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
<DocCardList />
|
||||
|
||||
## Tech Stack
|
||||
|
||||
The project has a clean and simple stack, with minimal boilerplate code.
|
||||
|
||||
**App**
|
||||
|
||||
- [React](https://react.dev/)
|
||||
- [Apollo](https://www.apollographql.com/docs/)
|
||||
- [GraphQL Codegen](https://the-guild.dev/graphql/codegen)
|
||||
- [Recoil](https://recoiljs.org/docs/introduction/core-concepts)
|
||||
- [TypeScript](https://www.typescriptlang.org/)
|
||||
|
||||
**Testing**
|
||||
|
||||
- [Jest](https://jestjs.io/)
|
||||
- [Storybook](https://storybook.js.org/)
|
||||
|
||||
**Tooling**
|
||||
|
||||
- [Yarn](https://yarnpkg.com/)
|
||||
- [Craco](https://craco.js.org/docs/)
|
||||
- [ESLint](https://eslint.org/)
|
||||
|
||||
## Architecture
|
||||
|
||||
### Routing
|
||||
|
||||
[React Router](https://reactrouter.com/) handles the routing.
|
||||
|
||||
To avoid unnecessary [re-renders](/contributor/frontend/advanced/best-practices#managing-re-renders) all the routing logic is in a `useEffect` in `PageChangeEffect`.
|
||||
|
||||
### State Management
|
||||
|
||||
[Recoil](https://recoiljs.org/docs/introduction/core-concepts) handles state management.
|
||||
|
||||
See [best practices](/contributor/frontend/advanced/best-practices#state-management) for more information on state management.
|
||||
|
||||
## Testing
|
||||
|
||||
[Jest](https://jestjs.io/) serves as the tool for unit testing while [Storybook](https://storybook.js.org/) is for component testing.
|
||||
|
||||
Jest is mainly for testing utility functions, and not components themselves.
|
||||
|
||||
Storybook is for testing the behavior of isolated components, as well as displaying the [design system](/contributor/frontend/basics/design-system).
|
@ -1,44 +0,0 @@
|
||||
---
|
||||
title: Contributing
|
||||
sidebar_position: 1
|
||||
description: Learn how you can contribute to the project
|
||||
sidebar_custom_props:
|
||||
icon: TbTopologyStar
|
||||
---
|
||||
|
||||
## Pre-requisites
|
||||
|
||||
Make sure that your [IDE is correctly setup](/contributor/local-setup/ide-setup) and that your backend is running on `localhost:3000`.
|
||||
|
||||
|
||||
## Starting a new feature
|
||||
|
||||
Make sure your database is running on the URL provided in your `server/.env` file.
|
||||
|
||||
```bash
|
||||
cd front
|
||||
yarn
|
||||
|
||||
yarn start
|
||||
```
|
||||
|
||||
## Regenerate graphql schema based on API graphql schema
|
||||
|
||||
```bash
|
||||
yarn graphql:generate
|
||||
```
|
||||
|
||||
## Lint
|
||||
|
||||
```bash
|
||||
yarn lint
|
||||
```
|
||||
|
||||
## Test
|
||||
|
||||
```bash
|
||||
yarn test # run jest tests
|
||||
yarn storybook:dev # run storybook
|
||||
yarn storybook:test # run tests (needs yarn storybook:dev to be running)
|
||||
yarn storybook:coverage # run tests (needs yarn storybook:dev to be running)
|
||||
```
|
@ -1,10 +0,0 @@
|
||||
---
|
||||
title: Design System
|
||||
description: What our design system looks like
|
||||
sidebar_position: 7
|
||||
sidebar_custom_props:
|
||||
icon: TbPaint
|
||||
---
|
||||
|
||||
The CRM depends on its internal and custom design system, constructed on top of styled-components.
|
||||
|
@ -268,7 +268,7 @@ Prop drilling, in the React context, refers to the practice of passing state var
|
||||
|
||||
3. **Reduced Component Reusability**: A component receiving a lot of props solely for passing them down becomes less general-purpose and harder to reuse in different contexts.
|
||||
|
||||
If you feel that you are using excessive prop drilling, see [state management best practices](/contributor/frontend/advanced/best-practices#state-management).
|
||||
If you feel that you are using excessive prop drilling, see [state management best practices](#state-management).
|
||||
|
||||
## Imports
|
||||
|
@ -1,14 +1,86 @@
|
||||
---
|
||||
id: frontend
|
||||
title: Frontend Development
|
||||
displayed_sidebar: frontendSidebar
|
||||
sidebar_position: 0
|
||||
sidebar_custom_props:
|
||||
icon: TbTerminal2
|
||||
isSidebarRoot: true
|
||||
---
|
||||
|
||||
Welcome to the Frontend Development section of the documentation.
|
||||
Here you will find information about the frontend development process, the recommended tools, and the best practices you should follow.
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
|
||||
<DocCardList />
|
||||
|
||||
## Useful commands
|
||||
|
||||
### Starting the app
|
||||
|
||||
```bash
|
||||
nx start twenty-front
|
||||
```
|
||||
|
||||
### Regenerate graphql schema based on API graphql schema
|
||||
|
||||
```bash
|
||||
nx graphql:generate twenty-front
|
||||
```
|
||||
|
||||
### Lint
|
||||
|
||||
```bash
|
||||
nx lint twenty-front
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```bash
|
||||
nx test twenty-front# run jest tests
|
||||
nx storybook:dev twenty-front# run storybook
|
||||
nx storybook:test twenty-front# run tests # (needs yarn storybook:dev to be running)
|
||||
nx storybook:coverage twenty-front # (needs yarn storybook:dev to be running)
|
||||
```
|
||||
|
||||
## Tech Stack
|
||||
|
||||
The project has a clean and simple stack, with minimal boilerplate code.
|
||||
|
||||
**App**
|
||||
|
||||
- [React](https://react.dev/)
|
||||
- [Apollo](https://www.apollographql.com/docs/)
|
||||
- [GraphQL Codegen](https://the-guild.dev/graphql/codegen)
|
||||
- [Recoil](https://recoiljs.org/docs/introduction/core-concepts)
|
||||
- [TypeScript](https://www.typescriptlang.org/)
|
||||
|
||||
**Testing**
|
||||
|
||||
- [Jest](https://jestjs.io/)
|
||||
- [Storybook](https://storybook.js.org/)
|
||||
|
||||
**Tooling**
|
||||
|
||||
- [Yarn](https://yarnpkg.com/)
|
||||
- [Craco](https://craco.js.org/docs/)
|
||||
- [ESLint](https://eslint.org/)
|
||||
|
||||
## Architecture
|
||||
|
||||
### Routing
|
||||
|
||||
[React Router](https://reactrouter.com/) handles the routing.
|
||||
|
||||
To avoid unnecessary [re-renders](/contributor/frontend/best-practices#managing-re-renders) all the routing logic is in a `useEffect` in `PageChangeEffect`.
|
||||
|
||||
### State Management
|
||||
|
||||
[Recoil](https://recoiljs.org/docs/introduction/core-concepts) handles state management.
|
||||
|
||||
See [best practices](/contributor/frontend/best-practices#state-management) for more information on state management.
|
||||
|
||||
## Testing
|
||||
|
||||
[Jest](https://jestjs.io/) serves as the tool for unit testing while [Storybook](https://storybook.js.org/) is for component testing.
|
||||
|
||||
Jest is mainly for testing utility functions, and not components themselves.
|
||||
|
||||
Storybook is for testing the behavior of isolated components, as well as displaying the design system.
|
||||
|
@ -1,3 +1,5 @@
|
||||
{
|
||||
"position": 4
|
||||
"position": 4,
|
||||
"collapsible": true,
|
||||
"collapsed": true
|
||||
}
|
||||
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"label": "Basics",
|
||||
"position": 1
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
---
|
||||
title: Overview
|
||||
sidebar_position: 0
|
||||
sidebar_custom_props:
|
||||
icon: TbEyeglass
|
||||
---
|
||||
|
||||
Twenty primarily uses NestJS for the backend.
|
||||
|
||||
Prisma was the first choice as the ORM with a lot of auto-generated code under the hood. But to offer users flexibility and allow them to create custom fields and custom objects, something more low-level than Prisma made more sense to have more fine-grained control. This is why the project now uses TypeORM.
|
||||
|
||||
Here's what the tech stack now looks like.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
**Core**
|
||||
- [NestJS](https://nestjs.com/)
|
||||
- [TypeORM](https://typeorm.io/)
|
||||
- [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
|
||||
|
||||
**Database**
|
||||
- [Postgres](https://www.postgresql.org/)
|
||||
|
||||
**Third-party integrations**
|
||||
- [Sentry](https://sentry.io/welcome/) for tracking bugs
|
||||
|
||||
**Testing**
|
||||
- [Jest](https://jestjs.io/)
|
||||
|
||||
**Tooling**
|
||||
- [Yarn](https://yarnpkg.com/)
|
||||
- [ESLint](https://eslint.org/)
|
||||
|
||||
**Development**
|
||||
- [AWS EKS](https://aws.amazon.com/eks/)
|
@ -1,61 +0,0 @@
|
||||
---
|
||||
title: Development workflow
|
||||
sidebar_position: 3
|
||||
sidebar_custom_props:
|
||||
icon: TbTopologyStar
|
||||
---
|
||||
|
||||
## First time setup
|
||||
|
||||
```
|
||||
cd server
|
||||
yarn # install dependencies
|
||||
|
||||
yarn prisma:migrate # run migrations
|
||||
yarn prisma:generate # generate prisma and nestjs-graphql schemas
|
||||
yarn prisma:seed # provision database with seeds
|
||||
|
||||
# alternatively, you can run
|
||||
yarn prisma:reset # all-in-one command to reset, migrate, seed and generate schemas
|
||||
```
|
||||
|
||||
## Starting a new feature
|
||||
|
||||
Make sure your database is running on the URL provided in your `server/.env` file.
|
||||
|
||||
```
|
||||
cd server
|
||||
yarn
|
||||
yarn prisma:migrate && yarn prisma:generate
|
||||
|
||||
yarn start:dev
|
||||
```
|
||||
|
||||
## Lint
|
||||
|
||||
```
|
||||
yarn lint
|
||||
```
|
||||
|
||||
## Test
|
||||
|
||||
```
|
||||
yarn test
|
||||
```
|
||||
|
||||
## Resetting the database
|
||||
|
||||
If you want to reset the database, you can run the following command:
|
||||
|
||||
```bash
|
||||
cd server
|
||||
yarn database:reset
|
||||
```
|
||||
|
||||
:::warning
|
||||
|
||||
This will drop the database and re-run the migrations and seed.
|
||||
|
||||
Make sure to back up any data you want to keep before running this command.
|
||||
|
||||
:::
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"label": "Others",
|
||||
"position": 2
|
||||
}
|
@ -1,12 +1,91 @@
|
||||
---
|
||||
title: Backend Development
|
||||
displayed_sidebar: backendSidebar
|
||||
sidebar_position: 0
|
||||
sidebar_custom_props:
|
||||
icon: TbTerminal
|
||||
isSidebarRoot: true
|
||||
---
|
||||
|
||||
Welcome to the Backend Development section of the documentation.
|
||||
|
||||
Here you will find information about the development process, the recommended tools, and the best practices you should follow.
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
|
||||
<DocCardList />
|
||||
|
||||
## Useful commands
|
||||
|
||||
### First time setup
|
||||
|
||||
```
|
||||
yarn prisma:migrate # run migrations
|
||||
yarn prisma:generate # generate prisma and nestjs-graphql schemas
|
||||
yarn prisma:seed # provision database with seeds
|
||||
|
||||
# alternatively, you can run
|
||||
yarn prisma:reset # all-in-one command to reset, migrate, seed and generate schemas
|
||||
```
|
||||
|
||||
### Starting the app
|
||||
|
||||
```
|
||||
nx prisma:migrate twenty-server
|
||||
nx prisma:generate twenty-server
|
||||
nx start:dev twenty-server
|
||||
```
|
||||
|
||||
### Lint
|
||||
|
||||
```
|
||||
nx lint twenty-server
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```
|
||||
nx test twenty-server
|
||||
```
|
||||
|
||||
### Resetting the database
|
||||
|
||||
If you want to reset the database, you can run the following command:
|
||||
|
||||
```bash
|
||||
nx database:reset twenty-server
|
||||
```
|
||||
|
||||
:::warning
|
||||
|
||||
This will drop the database and re-run the migrations and seed.
|
||||
|
||||
Make sure to back up any data you want to keep before running this command.
|
||||
|
||||
:::
|
||||
|
||||
## Tech Stack
|
||||
|
||||
Twenty primarily uses NestJS for the backend.
|
||||
|
||||
Prisma was the first ORM we used. But in order to allow users to create custom fields and custom objects, a lower-level made more sense as we need to have fine-grained control. The project now uses TypeORM.
|
||||
|
||||
Here's what the tech stack now looks like.
|
||||
|
||||
|
||||
**Core**
|
||||
- [NestJS](https://nestjs.com/)
|
||||
- [TypeORM](https://typeorm.io/)
|
||||
- [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server)
|
||||
|
||||
**Database**
|
||||
- [Postgres](https://www.postgresql.org/)
|
||||
|
||||
**Third-party integrations**
|
||||
- [Sentry](https://sentry.io/welcome/) for tracking bugs
|
||||
|
||||
**Testing**
|
||||
- [Jest](https://jestjs.io/)
|
||||
|
||||
**Tooling**
|
||||
- [Yarn](https://yarnpkg.com/)
|
||||
- [ESLint](https://eslint.org/)
|
||||
|
||||
**Development**
|
||||
- [AWS EKS](https://aws.amazon.com/eks/)
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"label": "Developer guide",
|
||||
"position": 3
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
---
|
||||
title: GraphQL API
|
||||
sidebar_position: 2
|
||||
sidebar_custom_props:
|
||||
icon: TbBrandGraphql
|
||||
---
|
||||
|
||||
Use the [in-browser GraphiQL app](https://docs.twenty.com/graphql/) to browse, query, and mutate the introspection query.
|
||||
|
||||
## What is GraphQL?
|
||||
|
||||
GraphQL is a query language for APIs that enables declarative data fetching that allows a client to specify the exact data it needs from the API.
|
||||
|
||||
Instead of exposing various endpoints that return fixed data structures, GraphQL exposes only a single endpoint that precisely returns the data that the client asked for. This makes GraphQL more flexible and efficient than other kinds of APIs, like REST APIs.
|
||||
|
||||
You can learn more about GraphQL by going through this [Introduction](https://www.howtographql.com/basics/0-introduction/).
|
||||
|
||||
## About GraphQL Introspection
|
||||
|
||||
GraphQL query language is strongly typed, which makes it possible for you to query and understand the underlying schema.
|
||||
|
||||
With the Introspection feature, you can query the schema and discover the queries (to request data), mutations (to update data), types, and fields available in a particular GraphQL API.
|
||||
|
||||
## Try the GraphQL Playground
|
||||
You can use the browser-based, interactive [GraphQL playground](https://docs.twenty.com/graphql/) to run mutations and queries to discover valid fields and where you can use them.
|
@ -1,29 +0,0 @@
|
||||
---
|
||||
title: REST API
|
||||
sidebar_position: 3
|
||||
sidebar_custom_props:
|
||||
icon: TbApi
|
||||
---
|
||||
|
||||
To use the REST API, you will need an API key.
|
||||
Connect to your Twenty account ang do to Setting > Developers to generate one.
|
||||
|
||||
## Using Postman?
|
||||
|
||||
You can use [Postman](https://www.postman.com/) to interact with your Twenty objects using the API.
|
||||
You will need to provide your API key as a Bearer token,
|
||||
see [Bearer Token Postman Doc](https://learning.postman.com/docs/sending-requests/authorization/authorization-types/#bearer-token)
|
||||
if needed.
|
||||
|
||||
## Programmatic use?
|
||||
|
||||
You can call the REST API in your application using this endpoint
|
||||
[https://api.twenty.com/rest](https://api.twenty.com/rest).
|
||||
You will need to provide your API key as a Bearer token in
|
||||
your `headers.Authorization = 'Bearer <YOUR_API_KEY>'`.
|
||||
|
||||
## Try the REST API Playground
|
||||
|
||||
You can use the browser-based, interactive
|
||||
[REST API playground documentation](https://docs.twenty.com/rest-api)
|
||||
to Create, Read, Update or Delete your workspace objects.
|
@ -3,36 +3,24 @@ id: homepage
|
||||
sidebar_position: 0
|
||||
sidebar_class_name: display-none
|
||||
title: Welcome
|
||||
hide_title: true
|
||||
hide_table_of_contents: true
|
||||
custom_edit_url: null
|
||||
pagination_next: null
|
||||
---
|
||||
import ThemedImage from '@theme/ThemedImage';
|
||||
import Footer from '@theme/Footer'
|
||||
|
||||
Twenty is an Open Source CRM that provides flexibility, tailored to your business needs. It helps you break free from vendor lock-in and limitations, and provides the tools you need to harness the full potential of your data while ensuring a sleek and effortlessly intuitive design that teams will love to use.
|
||||
<ThemedImage sources={{light: "../img/light-doc-preview.png", dark:"../img/dark-doc-preview.png"}} style={{width:'100%', maxWidth:'800px'}}/>
|
||||
|
||||
|
||||
## Idea Behind Twenty
|
||||
We’ve spent thousands of hours grappling with traditional CRMs like Pipedrive and Salesforce to align them with our business needs, only to end up frustrated—customizations are complex and the closed ecosystems of these platforms can feel restrictive.
|
||||
Twenty is a CRM designed to fit your unique business needs.
|
||||
It was brought to life by a passionate community that cares about quality and precision in engineering.
|
||||
|
||||
The need for a CRM solution that empowers rather than constrains was clear, which inspired us to create Twenty. It's a next-generation open-source CRM that offers you the flexibility to shape it according to your business objectives and meet your team’s unique needs. Twenty is full of powerful features to give you full control and help you win more deals.
|
||||
|
||||
## Getting started
|
||||
|
||||
There are three ways for you to get started with Twenty:
|
||||
- **Cloud:** The fastest and easiest way to try the app (it's free)
|
||||
- **Local:** If you're a developer and would like to experiment or contribute to the app
|
||||
- **Self-hosting:** If you want greater control over your data and want to run the app on your own server
|
||||
|
||||
See the [Getting Started](./start/getting-started/) guide to learn more.
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are what makes the open source community such a great place.
|
||||
|
||||
Code contributions through pull request are most welcome. See the [local setup guide](../contributor/local-setup) to get started.
|
||||
|
||||
You can also contribute by creating an issue to report a bug you've spotted, joining discussions or writing documentation.
|
||||
There are three different ways to get started:
|
||||
- **Managed Cloud:** The fastest and easiest way to try the app
|
||||
- **Loca Setup:** If you're a developer and would like to contribute to the app
|
||||
- **Self-hosting:** If you know how to run a server and want to host the app yourself
|
||||
|
||||
|
||||
<Footer/>
|
||||
Once you're setup, you can check the "Extending" or "Contributing" section to start building.
|
||||
|
||||
<ThemedImage sources={{light: "../img/light-doc-preview.png", dark:"../img/dark-doc-preview.png"}} style={{width:'100%', maxWidth:'700px'}}/>
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{
|
||||
"label": "Start",
|
||||
"label": "Getting Started",
|
||||
"position": 1
|
||||
}
|
||||
|
21
packages/twenty-docs/docs/start/cloud.mdx
Normal file
21
packages/twenty-docs/docs/start/cloud.mdx
Normal file
@ -0,0 +1,21 @@
|
||||
---
|
||||
title: Managed Cloud
|
||||
sidebar_position: 1
|
||||
sidebar_custom_props:
|
||||
icon: TbRocket
|
||||
---
|
||||
import ThemedImage from '@theme/ThemedImage';
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
|
||||
The easiest way to try the app is to sign up on [app.twenty.com](https://app.twenty.com).
|
||||
|
||||
We offer a free trial but require a credit-card to signup.
|
||||
|
||||
If you just want to play around with a test instance you can use these credentials:
|
||||
|
||||
```
|
||||
email: noah@demo.dev
|
||||
password: Applecar2025
|
||||
```
|
@ -1,29 +0,0 @@
|
||||
---
|
||||
title: Getting Started
|
||||
sidebar_position: 1
|
||||
sidebar_custom_props:
|
||||
icon: TbRocket
|
||||
---
|
||||
import ThemedImage from '@theme/ThemedImage';
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
There are three ways for you to get started with Twenty:
|
||||
### 1. Cloud
|
||||
|
||||
The easiest way to try the app is to sign up on [app.twenty.com](https://app.twenty.com).
|
||||
|
||||
The sign-up is free.
|
||||
|
||||
<ThemedImage sources={{light: "/img/light-sign-in.png", dark:"/img/dark-sign-in.png"}} style={{width:'100%', maxWidth:'800px'}}/>
|
||||
|
||||
### 2. Local
|
||||
If you're a developer and would like to experiment or contribute to the app, you can install Twenty on your local environment. Follow the [local setup](/contributor/local-setup) guide to get started.
|
||||
|
||||
### 3. Self-hosting
|
||||
You can also find [self-hosting options](/start/self-hosting) if you want greater control over your data and want to run the app on your own server. Right now, Docker containers are the only hosting option available, with more simple options to self-host Twenty coming soon.
|
||||
|
||||
|
||||
___
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"label": "Local setup",
|
||||
"position": 1,
|
||||
"position": 3,
|
||||
"collapsible": true,
|
||||
"collapsed": true,
|
||||
"customProps": {
|
@ -16,7 +16,7 @@ This guide will walk you through provisioning the project with Docker. This come
|
||||
|
||||
:::info
|
||||
Avoid setting up the project with Docker if you are a Windows (WSL) user, unless you have experience with it, as it will make troubleshooting harder.
|
||||
If you are a Windows user, it's better to use the [yarn installation](/contributor/local-setup/yarn-setup).
|
||||
If you are a Windows user, it's better to use the [yarn installation](/start/local-setup/yarn-setup).
|
||||
:::
|
||||
|
||||
## Prerequisites
|
||||
@ -121,7 +121,7 @@ Sign in using a seeded demo account `tim@apple.dev` (password: `Applecar2025`) t
|
||||
## Step 6: Configure your IDE
|
||||
|
||||
As you are executing the project inside a Docker container, you need to configure your IDE to use the same environment.
|
||||
You can find the instructions for your IDE in our [IDE setup](/contributor/local-setup/ide-setup) guide.
|
||||
You can find the instructions for your IDE in our [IDE setup](/start/local-setup/ide-setup) guide.
|
||||
|
||||
### Troubleshooting
|
||||
|
@ -6,7 +6,7 @@ sidebar_custom_props:
|
||||
icon: TbBrandVscode
|
||||
---
|
||||
|
||||
This section will help you set up your IDE for the project. If you haven't set up your development environment, please refer to the [local setup](/contributor/local-setup) section.
|
||||
This section will help you set up your IDE for the project. If you haven't set up your development environment, please refer to the [local setup](/start/local-setup) section.
|
||||
|
||||
|
||||
## Visual Studio Code
|
||||
@ -37,7 +37,7 @@ You can use the recommended extensions for the project. You will find them in `.
|
||||
|
||||
### Step 4: (Docker only) Run VSCode in container
|
||||
|
||||
If you are using a [Docker setup](/contributor/local-setup/docker-setup), you will need to run VSCode in the container. You can do that by opening the project, clicking on the `Remote Explorer` icon on the left sidebar and then clicking on `Attach in New window` on `dev-twenty-dev` container.
|
||||
If you are using a [Docker setup](/start/local-setup/docker-setup), you will need to run VSCode in the container. You can do that by opening the project, clicking on the `Remote Explorer` icon on the left sidebar and then clicking on `Attach in New window` on `dev-twenty-dev` container.
|
||||
|
||||
<div style={{textAlign: 'center'}}>
|
||||
<img src="/img/contributor/ide-start-dev-container.png" alt="Visual Studio Code: Open in container" width="90%" />
|
@ -4,9 +4,6 @@ sidebar_position: 0
|
||||
sidebar_custom_props:
|
||||
icon: TbDeviceDesktop
|
||||
---
|
||||
import ThemedImage from '@theme/ThemedImage';
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
|
||||
@ -21,12 +18,12 @@ If you have any questions or need help, you can join Twenty's [Discord](https://
|
||||
|
||||
## MacOS and Linux users
|
||||
|
||||
It's better to use [yarn installation](/contributor/local-setup/yarn-setup) as this is the easiest way to get started.
|
||||
But there's also an easy way to run the project with [Docker](/contributor/local-setup/docker-setup) that you can use if you are familiar with containerized environments.
|
||||
It's better to use [yarn installation](/start/local-setup/yarn-setup) as this is the easiest way to get started.
|
||||
But there's also an easy way to run the project with [Docker](/start/local-setup/docker-setup) that you can use if you are familiar with containerized environments.
|
||||
|
||||
## Windows users
|
||||
|
||||
Windows users can install the project through WSL2. [This guide](/contributor/local-setup/yarn-setup) can help you get started.
|
||||
Windows users can install the project through WSL2. [This guide](/start/local-setup/yarn-setup) can help you get started.
|
||||
|
||||
## Project structure
|
||||
|
||||
@ -43,6 +40,6 @@ twenty
|
||||
## IDE Setup
|
||||
|
||||
Once Twenty is running on your computer, you will get the best experience by using an IDE that supports TypeScript and ESLint.
|
||||
You will find a guide for [VSCode](/contributor/local-setup/ide-setup) further in the documentation.
|
||||
You will find a guide for [VSCode](/start/local-setup/ide-setup) further in the documentation.
|
||||
___
|
||||
|
@ -24,7 +24,7 @@ Try installing [yarn classic](https://classic.yarnpkg.com/lang/en/)!
|
||||
## Missing metadata schema
|
||||
|
||||
During Twenty installation, you need to provision your postgres database with the right schemas, extensions, and users.
|
||||
This documentation includes [different ways](/contributor/local-setup/yarn-setup#step-2-set-up-postgresql-database) to set up your postgres instance.
|
||||
This documentation includes [different ways](/start/local-setup/yarn-setup#step-2-set-up-postgresql-database) to set up your postgres instance.
|
||||
|
||||
If you're successful in running this provisioning, you should have `default` and `metadata` schemas in your database.
|
||||
If you don't, make sure you don't have more than one postgres instance running on your computer.
|
@ -9,7 +9,7 @@ sidebar_custom_props:
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
In this document, you'll learn how to install the project using yarn. You should use this method since it's the easiest way to get started but you can also run the project with [Docker](/contributor/local-setup/docker-setup).
|
||||
In this document, you'll learn how to install the project using yarn. You should use this method since it's the easiest way to get started but you can also run the project with [Docker](/start/local-setup/docker-setup).
|
||||
|
||||
:::info
|
||||
`npm` does not support local packages well, opt for `yarn` instead.
|
@ -0,0 +1,20 @@
|
||||
---
|
||||
title: 1-Click Deploy
|
||||
sidebar_position: 2
|
||||
sidebar_custom_props:
|
||||
icon: TbBolt
|
||||
---
|
||||
|
||||
|
||||
|
||||
## Render
|
||||
|
||||
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/twentyhq/twenty)
|
||||
|
||||
## Digital Ocean
|
||||
|
||||
Community contribution are welcome!
|
||||
|
||||
## Other
|
||||
|
||||
Please feel free to Open a PR to add more 1-Click Deploy options.
|
@ -0,0 +1,62 @@
|
||||
---
|
||||
title: Docker Compose
|
||||
sidebar_position: 1
|
||||
sidebar_custom_props:
|
||||
icon: TbBrandDocker
|
||||
---
|
||||
|
||||
## Production docker containers
|
||||
|
||||
Prebuilt images for both Postgres, frontend, and back-end can be found on [docker hub](https://hub.docker.com/r/twentycrm/).
|
||||
|
||||
You will need to set environment variables, a example configuration can be found [here](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/.env.example).
|
||||
|
||||
## Docker Compose file
|
||||
|
||||
We will soon update the documentation with an up-to-date docker compose file.
|
||||
Here is one that was proposed on Discord by a community member:
|
||||
|
||||
|
||||
```yaml
|
||||
version: "3.9"
|
||||
services:
|
||||
|
||||
twenty:
|
||||
image: twentycrm/twenty-front:${TAG}
|
||||
ports:
|
||||
- 3001:3000
|
||||
environment:
|
||||
- SIGN_IN_PREFILLED=${SIGN_IN_PREFILLED}
|
||||
- REACT_APP_SERVER_BASE_URL=${LOCAL_SERVER_URL}
|
||||
- REACT_APP_SERVER_AUTH_URL=${LOCAL_SERVER_URL}/auth
|
||||
- REACT_APP_SERVER_FILES_URL ${LOCAL_SERVER_URL}/files
|
||||
depends_on:
|
||||
- backend
|
||||
|
||||
backend:
|
||||
image: twentycrm/twenty-server:${TAG}
|
||||
ports:
|
||||
- 3000:3000
|
||||
environment:
|
||||
- SIGN_IN_PREFILLED=${SIGN_IN_PREFILLED}
|
||||
- PG_DATABASE_URL=${PG_DATABASE_URL}
|
||||
- FRONT_BASE_URL=${FRONT_BASE_URL}
|
||||
- PORT=3000
|
||||
- STORAGE_TYPE=local
|
||||
- STORAGE_LOCAL_PATH=.local-storage
|
||||
- ACCESS_TOKEN_SECRET=${ACCESS_TOKEN_SECRET}
|
||||
- LOGIN_TOKEN_SECRET=${LOGIN_TOKEN_SECRET}
|
||||
- REFRESH_TOKEN_SECRET=${REFRESH_TOKEN_SECRET}
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
db:
|
||||
image: twentycrm/twenty-postgres:${TAG}
|
||||
volumes:
|
||||
- twenty-db-data:/var/lib/postgresql/data
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=${POSTGRES_ADMIN_PASSWORD}
|
||||
|
||||
volumes:
|
||||
twenty-db-data:
|
||||
```
|
@ -1,173 +0,0 @@
|
||||
---
|
||||
title: Environment Variables
|
||||
sidebar_position: 1
|
||||
sidebar_custom_props:
|
||||
icon: TbVariable
|
||||
---
|
||||
|
||||
import OptionTable from '@site/src/theme/OptionTable'
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
## Frontend
|
||||
|
||||
<OptionTable options={[
|
||||
['REACT_APP_SERVER_BASE_URL', 'http://localhost:3000', 'Url of backend server'],
|
||||
['REACT_APP_SERVER_AUTH_URL', 'http://localhost:3000/auth', 'Auth Url of backend server'],
|
||||
['REACT_APP_SERVER_FILES_URL', 'http://localhost:3000/files', 'Files Url of backend server'],
|
||||
['GENERATE_SOURCEMAP', 'false', 'Generate source maps for debugging'],
|
||||
['CHROMATIC_PROJECT_TOKEN', '', 'Chromatic token used for CI'],
|
||||
]}></OptionTable>
|
||||
|
||||
|
||||
## Backend
|
||||
|
||||
### Config
|
||||
|
||||
<OptionTable options={[
|
||||
['PG_DATABASE_URL', 'postgres://user:pw@localhost:5432/default?connection_limit=1', 'Database connection'],
|
||||
['REDIS_HOST', '127.0.0.1', 'Redis connection host'],
|
||||
['REDIS_PORT', '6379', 'Redis connection port'],
|
||||
['FRONT_BASE_URL', 'http://localhost:3001', 'Url to the hosted frontend'],
|
||||
['SERVER_URL', 'http://localhost:3000', 'Url to the hosted server'],
|
||||
['PORT', '3000', 'Port'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Tokens
|
||||
|
||||
<OptionTable options={[
|
||||
['ACCESS_TOKEN_SECRET', '<random>', 'Secret used for the access tokens'],
|
||||
['ACCESS_TOKEN_EXPIRES_IN', '30m', 'Access token expiration time'],
|
||||
['LOGIN_TOKEN_SECRET', '<random>', 'Secret used for the login tokens'],
|
||||
['LOGIN_TOKEN_EXPIRES_IN', '15m', 'Login token expiration time'],
|
||||
['REFRESH_TOKEN_SECRET', '<random>', 'Secret used for the refresh tokens'],
|
||||
['REFRESH_TOKEN_EXPIRES_IN', '90d', 'Refresh token expiration time'],
|
||||
['REFRESH_TOKEN_COOL_DOWN', '1m', 'Refresh token cooldown'],
|
||||
['API_TOKEN_EXPIRES_IN', '1000y', 'Api token expiration time'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Auth
|
||||
|
||||
<OptionTable options={[
|
||||
['MESSAGING_PROVIDER_GMAIL_ENABLED', 'false', 'Enable Gmail API connection'],
|
||||
['MESSAGING_PROVIDER_GMAIL_CALLBACK_URL', '', 'Gmail auth callback'],
|
||||
['AUTH_GOOGLE_ENABLED', 'false', 'Enable Goole SSO login'],
|
||||
['AUTH_GOOGLE_CLIENT_ID', '', 'Google client ID'],
|
||||
['AUTH_GOOGLE_CLIENT_SECRET', '', 'Google client secret'],
|
||||
['AUTH_GOOGLE_CALLBACK_URL', '', 'Google auth callback'],
|
||||
['FRONT_AUTH_CALLBACK_URL', 'http://localhost:3001/verify ', 'Callback used for Login page'],
|
||||
['IS_SIGN_UP_DISABLED', 'false', 'Disable sign-up'],
|
||||
['PASSWORD_RESET_TOKEN_EXPIRES_IN', '5m', 'Password reset token expiration time'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Email
|
||||
|
||||
<OptionTable options={[
|
||||
['EMAIL_FROM_ADDRESS', 'contact@yourdomain.com', 'Global email From: header used to send emails'],
|
||||
['EMAIL_FROM_NAME', 'John from YourDomain', 'Global name From: header used to send emails'],
|
||||
['EMAIL_SYSTEM_ADDRESS', 'system@yourdomain.com', 'Email address used as a destination to send internal system notification'],
|
||||
['EMAIL_DRIVER', 'logger', "Email driver: 'logger' (to log emails in console) or 'smtp'"],
|
||||
['EMAIL_SMTP_HOST', '', 'Email Smtp Host'],
|
||||
['EMAIL_SMTP_PORT', '', 'Email Smtp Port'],
|
||||
['EMAIL_SMTP_USER', '', 'Email Smtp User'],
|
||||
['EMAIL_SMTP_PASSWORD', '', 'Email Smtp Password'],
|
||||
]}></OptionTable>
|
||||
|
||||
#### Email SMTP Server configuration examples
|
||||
|
||||
<Tabs>
|
||||
|
||||
<TabItem value="Gmail" label="Gmail" default>
|
||||
|
||||
You will need to provision an [App Password](https://support.google.com/accounts/answer/185833).
|
||||
- EMAIL_SMTP_HOST=smtp.gmail.com
|
||||
- EMAIL_SERVER_PORT=465
|
||||
- EMAIL_SERVER_USER=gmail_email_address
|
||||
- EMAIL_SERVER_PASSWORD='gmail_app_password'
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="Office365" label="Office365">
|
||||
|
||||
Keep in mind that if you have 2FA enabled, you will need to provision an [App Password](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9).
|
||||
- EMAIL_SMTP_HOST=smtp.office365.com
|
||||
- EMAIL_SERVER_PORT=587
|
||||
- EMAIL_SERVER_USER=office365_email_address
|
||||
- EMAIL_SERVER_PASSWORD='office365_password'
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="Smtp4dev" label="Smtp4dev">
|
||||
|
||||
**smtp4dev** is a fake SMTP email server for development and testing.
|
||||
- Run the smtp4dev image: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
|
||||
- Access the smtp4dev ui here: [http://localhost:8090](http://localhost:8090)
|
||||
- Set the following env variables:
|
||||
- EMAIL_SERVER_HOST=localhost
|
||||
- EMAIL_SERVER_PORT=2525
|
||||
|
||||
</TabItem>
|
||||
|
||||
</Tabs>
|
||||
|
||||
### Storage
|
||||
|
||||
<OptionTable options={[
|
||||
['STORAGE_TYPE', 'local', "Storage driver: 'local' or 's3'"],
|
||||
['STORAGE_S3_REGION', '', 'Storage Region'],
|
||||
['STORAGE_S3_NAME', '', 'Bucket Name'],
|
||||
['STORAGE_S3_ENDPOINT', '', 'Use if a different Endpoint is needed (for example Google)'],
|
||||
['STORAGE_LOCAL_PATH', '.local-storage', 'data path (local storage)'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Message Queue
|
||||
|
||||
<OptionTable options={[
|
||||
['MESSAGE_QUEUE_TYPE', 'pg-boss', "Queue driver: 'pg-boss' or 'bull-mq'"],
|
||||
]}></OptionTable>
|
||||
|
||||
### Logging
|
||||
|
||||
<OptionTable options={[
|
||||
['LOGGER_DRIVER', 'console', "The logging driver can be: 'console' or 'sentry'"],
|
||||
['LOG_LEVELS', 'error,warn', "The loglevels which are logged to the logging driver. Can include: 'log', 'warn', 'error'"],
|
||||
['EXCEPTION_HANDLER_DRIVER', 'sentry', "The exception handler driver can be: 'console' or 'sentry'"],
|
||||
['SENTRY_DSN', 'https://xxx@xxx.ingest.sentry.io/xxx', 'The sentry logging endpoint used if sentry logging driver is selected'],
|
||||
]}></OptionTable>
|
||||
|
||||
|
||||
### Data enrichment and AI
|
||||
|
||||
<OptionTable options={[
|
||||
['OPENROUTER_API_KEY', '', "The API key for openrouter.ai, an abstraction layer over models from Mistral, OpenAI and more"]
|
||||
]}></OptionTable>
|
||||
|
||||
|
||||
### Support Chat
|
||||
|
||||
<OptionTable options={[
|
||||
['SUPPORT_DRIVER', 'front', "Support driver ('front' or 'none')"],
|
||||
['SUPPORT_FRONT_HMAC_KEY', '<secret>', 'Suport chat key'],
|
||||
['SUPPORT_FRONT_CHAT_ID', '<id>', 'Support chat id'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Telemetry
|
||||
|
||||
<OptionTable options={[
|
||||
['TELEMETRY_ENABLED', 'true', 'Change this if you want to disable telemetry'],
|
||||
['TELEMETRY_ANONYMIZATION_ENABLED', 'true', 'Telemetry is anonymized by default, you probably don\'t want to change this'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Debug / Development
|
||||
|
||||
<OptionTable options={[
|
||||
['DEBUG_MODE', 'true', 'Activate debug mode'],
|
||||
['SIGN_IN_PREFILLED', 'true', 'Prefill the Signin form for usage in a demo or dev environment'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Workspace Cleaning
|
||||
|
||||
<OptionTable options={[
|
||||
['WORKSPACE_INACTIVE_DAYS_BEFORE_NOTIFICATION', '', 'Number of inactive days before sending workspace deleting warning email'],
|
||||
['WORKSPACE_INACTIVE_DAYS_BEFORE_DELETION', '', 'Number of inactive days before deleting workspace'],
|
||||
]}></OptionTable>
|
@ -4,29 +4,180 @@ sidebar_position: 1
|
||||
sidebar_custom_props:
|
||||
icon: TbServer
|
||||
---
|
||||
Right now, Docker containers are the only hosting option available, with more simple options to self-host Twenty coming soon.
|
||||
Feel free to open issues on [GitHub](https://github.com/twentyhq/twenty/issues/new) if you want support for a specific cloud provider.
|
||||
|
||||
## Production docker containers
|
||||
|
||||
Prebuilt images for both front and back-end can be found on [docker hub](https://hub.docker.com/r/twentycrm/).
|
||||
|
||||
For correct operation your will need to set [environment variables](environment-variables), a example configuration can be found [here](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/.env.example).
|
||||
|
||||
|
||||
## Render
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
|
||||
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/twentyhq/twenty)
|
||||
import OptionTable from '@site/src/theme/OptionTable'
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
|
||||
## AWS Elastic Beanstalk (Coming soon)
|
||||
# Setup Server
|
||||
|
||||
A joint Docker image - containing both the frontend and server - that you can deploy using [AWS Elastic Beanstalk](https://aws.amazon.com/elasticbeanstalk/) is in the works.
|
||||
<DocCardList/>
|
||||
|
||||
# Setup Environment Variables
|
||||
|
||||
## Frontend
|
||||
|
||||
<OptionTable options={[
|
||||
['REACT_APP_SERVER_BASE_URL', 'http://localhost:3000', 'Url of backend server'],
|
||||
['REACT_APP_SERVER_AUTH_URL', 'http://localhost:3000/auth', 'Auth Url of backend server'],
|
||||
['REACT_APP_SERVER_FILES_URL', 'http://localhost:3000/files', 'Files Url of backend server'],
|
||||
['GENERATE_SOURCEMAP', 'false', 'Generate source maps for debugging'],
|
||||
['CHROMATIC_PROJECT_TOKEN', '', 'Chromatic token used for CI'],
|
||||
]}></OptionTable>
|
||||
|
||||
|
||||
<!--
|
||||
## Backend
|
||||
|
||||
## Railway
|
||||
[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/YWGqza?referralCode=3CLObs)
|
||||
### Config
|
||||
|
||||
-->
|
||||
<OptionTable options={[
|
||||
['PG_DATABASE_URL', 'postgres://user:pw@localhost:5432/default?connection_limit=1', 'Database connection'],
|
||||
['REDIS_HOST', '127.0.0.1', 'Redis connection host'],
|
||||
['REDIS_PORT', '6379', 'Redis connection port'],
|
||||
['FRONT_BASE_URL', 'http://localhost:3001', 'Url to the hosted frontend'],
|
||||
['SERVER_URL', 'http://localhost:3000', 'Url to the hosted server'],
|
||||
['PORT', '3000', 'Port'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Tokens
|
||||
|
||||
<OptionTable options={[
|
||||
['ACCESS_TOKEN_SECRET', '<random>', 'Secret used for the access tokens'],
|
||||
['ACCESS_TOKEN_EXPIRES_IN', '30m', 'Access token expiration time'],
|
||||
['LOGIN_TOKEN_SECRET', '<random>', 'Secret used for the login tokens'],
|
||||
['LOGIN_TOKEN_EXPIRES_IN', '15m', 'Login token expiration time'],
|
||||
['REFRESH_TOKEN_SECRET', '<random>', 'Secret used for the refresh tokens'],
|
||||
['REFRESH_TOKEN_EXPIRES_IN', '90d', 'Refresh token expiration time'],
|
||||
['REFRESH_TOKEN_COOL_DOWN', '1m', 'Refresh token cooldown'],
|
||||
['API_TOKEN_EXPIRES_IN', '1000y', 'Api token expiration time'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Auth
|
||||
|
||||
<OptionTable options={[
|
||||
['MESSAGING_PROVIDER_GMAIL_ENABLED', 'false', 'Enable Gmail API connection'],
|
||||
['MESSAGING_PROVIDER_GMAIL_CALLBACK_URL', '', 'Gmail auth callback'],
|
||||
['AUTH_GOOGLE_ENABLED', 'false', 'Enable Goole SSO login'],
|
||||
['AUTH_GOOGLE_CLIENT_ID', '', 'Google client ID'],
|
||||
['AUTH_GOOGLE_CLIENT_SECRET', '', 'Google client secret'],
|
||||
['AUTH_GOOGLE_CALLBACK_URL', '', 'Google auth callback'],
|
||||
['FRONT_AUTH_CALLBACK_URL', 'http://localhost:3001/verify ', 'Callback used for Login page'],
|
||||
['IS_SIGN_UP_DISABLED', 'false', 'Disable sign-up'],
|
||||
['PASSWORD_RESET_TOKEN_EXPIRES_IN', '5m', 'Password reset token expiration time'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Email
|
||||
|
||||
<OptionTable options={[
|
||||
['EMAIL_FROM_ADDRESS', 'contact@yourdomain.com', 'Global email From: header used to send emails'],
|
||||
['EMAIL_FROM_NAME', 'John from YourDomain', 'Global name From: header used to send emails'],
|
||||
['EMAIL_SYSTEM_ADDRESS', 'system@yourdomain.com', 'Email address used as a destination to send internal system notification'],
|
||||
['EMAIL_DRIVER', 'logger', "Email driver: 'logger' (to log emails in console) or 'smtp'"],
|
||||
['EMAIL_SMTP_HOST', '', 'Email Smtp Host'],
|
||||
['EMAIL_SMTP_PORT', '', 'Email Smtp Port'],
|
||||
['EMAIL_SMTP_USER', '', 'Email Smtp User'],
|
||||
['EMAIL_SMTP_PASSWORD', '', 'Email Smtp Password'],
|
||||
]}></OptionTable>
|
||||
|
||||
#### Email SMTP Server configuration examples
|
||||
|
||||
<Tabs>
|
||||
|
||||
<TabItem value="Gmail" label="Gmail" default>
|
||||
|
||||
You will need to provision an [App Password](https://support.google.com/accounts/answer/185833).
|
||||
- EMAIL_SMTP_HOST=smtp.gmail.com
|
||||
- EMAIL_SERVER_PORT=465
|
||||
- EMAIL_SERVER_USER=gmail_email_address
|
||||
- EMAIL_SERVER_PASSWORD='gmail_app_password'
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="Office365" label="Office365">
|
||||
|
||||
Keep in mind that if you have 2FA enabled, you will need to provision an [App Password](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9).
|
||||
- EMAIL_SMTP_HOST=smtp.office365.com
|
||||
- EMAIL_SERVER_PORT=587
|
||||
- EMAIL_SERVER_USER=office365_email_address
|
||||
- EMAIL_SERVER_PASSWORD='office365_password'
|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="Smtp4dev" label="Smtp4dev">
|
||||
|
||||
**smtp4dev** is a fake SMTP email server for development and testing.
|
||||
- Run the smtp4dev image: `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
|
||||
- Access the smtp4dev ui here: [http://localhost:8090](http://localhost:8090)
|
||||
- Set the following env variables:
|
||||
- EMAIL_SERVER_HOST=localhost
|
||||
- EMAIL_SERVER_PORT=2525
|
||||
|
||||
</TabItem>
|
||||
|
||||
</Tabs>
|
||||
|
||||
### Storage
|
||||
|
||||
<OptionTable options={[
|
||||
['STORAGE_TYPE', 'local', "Storage driver: 'local' or 's3'"],
|
||||
['STORAGE_S3_REGION', '', 'Storage Region'],
|
||||
['STORAGE_S3_NAME', '', 'Bucket Name'],
|
||||
['STORAGE_S3_ENDPOINT', '', 'Use if a different Endpoint is needed (for example Google)'],
|
||||
['STORAGE_LOCAL_PATH', '.local-storage', 'data path (local storage)'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Message Queue
|
||||
|
||||
<OptionTable options={[
|
||||
['MESSAGE_QUEUE_TYPE', 'pg-boss', "Queue driver: 'pg-boss' or 'bull-mq'"],
|
||||
]}></OptionTable>
|
||||
|
||||
### Logging
|
||||
|
||||
<OptionTable options={[
|
||||
['LOGGER_DRIVER', 'console', "The logging driver can be: 'console' or 'sentry'"],
|
||||
['LOG_LEVELS', 'error,warn', "The loglevels which are logged to the logging driver. Can include: 'log', 'warn', 'error'"],
|
||||
['EXCEPTION_HANDLER_DRIVER', 'sentry', "The exception handler driver can be: 'console' or 'sentry'"],
|
||||
['SENTRY_DSN', 'https://xxx@xxx.ingest.sentry.io/xxx', 'The sentry logging endpoint used if sentry logging driver is selected'],
|
||||
]}></OptionTable>
|
||||
|
||||
|
||||
### Data enrichment and AI
|
||||
|
||||
<OptionTable options={[
|
||||
['OPENROUTER_API_KEY', '', "The API key for openrouter.ai, an abstraction layer over models from Mistral, OpenAI and more"]
|
||||
]}></OptionTable>
|
||||
|
||||
|
||||
### Support Chat
|
||||
|
||||
<OptionTable options={[
|
||||
['SUPPORT_DRIVER', 'front', "Support driver ('front' or 'none')"],
|
||||
['SUPPORT_FRONT_HMAC_KEY', '<secret>', 'Suport chat key'],
|
||||
['SUPPORT_FRONT_CHAT_ID', '<id>', 'Support chat id'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Telemetry
|
||||
|
||||
<OptionTable options={[
|
||||
['TELEMETRY_ENABLED', 'true', 'Change this if you want to disable telemetry'],
|
||||
['TELEMETRY_ANONYMIZATION_ENABLED', 'true', 'Telemetry is anonymized by default, you probably don\'t want to change this'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Debug / Development
|
||||
|
||||
<OptionTable options={[
|
||||
['DEBUG_MODE', 'true', 'Activate debug mode'],
|
||||
['SIGN_IN_PREFILLED', 'true', 'Prefill the Signin form for usage in a demo or dev environment'],
|
||||
]}></OptionTable>
|
||||
|
||||
### Workspace Cleaning
|
||||
|
||||
<OptionTable options={[
|
||||
['WORKSPACE_INACTIVE_DAYS_BEFORE_NOTIFICATION', '', 'Number of inactive days before sending workspace deleting warning email'],
|
||||
['WORKSPACE_INACTIVE_DAYS_BEFORE_DELETION', '', 'Number of inactive days before deleting workspace'],
|
||||
]}></OptionTable>
|
||||
|
@ -0,0 +1,8 @@
|
||||
---
|
||||
title: Upgrade guide
|
||||
sidebar_position: 3
|
||||
sidebar_class_name: coming-soon
|
||||
sidebar_custom_props:
|
||||
icon: TbServer
|
||||
---
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
// @ts-check
|
||||
// Note: type annotations allow type checking and IDEs autocompletion
|
||||
|
||||
@ -7,22 +6,40 @@ import { themes } from 'prism-react-renderer';
|
||||
const lightCodeTheme = themes.github;
|
||||
const darkCodeTheme = themes.dracula;
|
||||
|
||||
const filterOutCategory = (items, categoryNameToExclude) => {
|
||||
return items.reduce((filteredItems, item) => {
|
||||
if (item.type === 'category' && item.label === categoryNameToExclude) {
|
||||
// Skip adding the item if the category should be excluded
|
||||
return filteredItems;
|
||||
} else if (item.type === 'category') {
|
||||
// Recursively filter sub-categories
|
||||
return filteredItems.concat({
|
||||
...item,
|
||||
items: filterOutCategory(item.items, categoryNameToExclude),
|
||||
});
|
||||
} else {
|
||||
// Include the item if it's not a category to be excluded
|
||||
return filteredItems.concat(item);
|
||||
}
|
||||
}, []);
|
||||
};
|
||||
|
||||
/** @type {import('@docusaurus/types').Config} */
|
||||
const config = {
|
||||
title: "Twenty - Documentation",
|
||||
tagline: "Twenty is cool",
|
||||
favicon: "img/logo-square-dark.ico",
|
||||
title: 'Twenty - Documentation',
|
||||
tagline: 'Twenty is cool',
|
||||
favicon: 'img/logo-square-dark.ico',
|
||||
|
||||
// Prevent search engines from indexing the doc for selected environments
|
||||
noIndex: process.env.SHOULD_INDEX_DOC === "false",
|
||||
noIndex: process.env.SHOULD_INDEX_DOC === 'false',
|
||||
|
||||
// Set the production url of your site here
|
||||
url: "https://docs.twenty.com",
|
||||
url: 'https://docs.twenty.com',
|
||||
// Set the /<baseUrl>/ pathname under which your site is served
|
||||
// For GitHub pages deployment, it is often '/<projectName>/'
|
||||
baseUrl: "/",
|
||||
onBrokenLinks: "throw",
|
||||
onBrokenMarkdownLinks: "warn",
|
||||
baseUrl: '/',
|
||||
onBrokenLinks: 'throw',
|
||||
onBrokenMarkdownLinks: 'warn',
|
||||
|
||||
headTags: [],
|
||||
|
||||
@ -30,25 +47,34 @@ const config = {
|
||||
// metadata like html lang. For example, if your site is Chinese, you may want
|
||||
// to replace "en" with "zh-Hans".
|
||||
i18n: {
|
||||
defaultLocale: "en",
|
||||
locales: ["en"],
|
||||
defaultLocale: 'en',
|
||||
locales: ['en'],
|
||||
},
|
||||
plugins: ['docusaurus-node-polyfills'],
|
||||
presets: [
|
||||
[
|
||||
"classic",
|
||||
'classic',
|
||||
/** @type {import('@docusaurus/preset-classic').Options} */
|
||||
({
|
||||
docs: {
|
||||
breadcrumbs: false,
|
||||
sidebarPath: require.resolve("./sidebars.js"),
|
||||
sidebarPath: require.resolve('./sidebars.js'),
|
||||
sidebarCollapsible: false,
|
||||
routeBasePath: "/",
|
||||
editUrl: "https://github.com/twentyhq/twenty/tree/main/packages/twenty-docs"
|
||||
routeBasePath: '/',
|
||||
editUrl:
|
||||
'https://github.com/twentyhq/twenty/tree/main/packages/twenty-docs',
|
||||
sidebarItemsGenerator: async ({
|
||||
defaultSidebarItemsGenerator,
|
||||
...args
|
||||
}) => {
|
||||
const sidebarItems = await defaultSidebarItemsGenerator(args);
|
||||
|
||||
return filterOutCategory(sidebarItems, 'UI Components');
|
||||
},
|
||||
},
|
||||
blog: false,
|
||||
theme: {
|
||||
customCss: require.resolve("./src/css/custom.css"),
|
||||
customCss: require.resolve('./src/css/custom.css'),
|
||||
},
|
||||
}),
|
||||
],
|
||||
@ -58,40 +84,39 @@ const config = {
|
||||
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
||||
({
|
||||
// Replace with your project's social card
|
||||
image: "img/social-card.png",
|
||||
image: 'img/social-card.png',
|
||||
colorMode: {
|
||||
defaultMode: "light",
|
||||
defaultMode: 'light',
|
||||
respectPrefersColorScheme: false,
|
||||
},
|
||||
docs: {
|
||||
sidebar: {
|
||||
autoCollapseCategories: true,
|
||||
},
|
||||
},
|
||||
navbar: {
|
||||
/*title: 'Twenty',*/
|
||||
title: 'for Developers',
|
||||
logo: {
|
||||
alt: "Twenty",
|
||||
src: "img/logo-square-dark.svg",
|
||||
srcDark: "img/logo-square-light.svg",
|
||||
alt: 'Twenty',
|
||||
src: 'img/logo-square-dark.svg',
|
||||
srcDark: 'img/logo-square-light.svg',
|
||||
},
|
||||
items: [
|
||||
/*{
|
||||
to: 'https://github.com/twentyhq/twenty/releases',
|
||||
label: 'Releases',
|
||||
position: 'right',
|
||||
},*/
|
||||
{
|
||||
type: "search",
|
||||
position: "left",
|
||||
},
|
||||
{
|
||||
to: "https://github.com/twentyhq/twenty/releases",
|
||||
label: "Releases",
|
||||
position: "right",
|
||||
},
|
||||
{
|
||||
href: "https://github.com/twentyhq/twenty",
|
||||
position: "right",
|
||||
className: "header-github-link",
|
||||
"aria-label": "GitHub repository",
|
||||
type: 'custom-github-link',
|
||||
position: 'right',
|
||||
},
|
||||
],
|
||||
},
|
||||
algolia: {
|
||||
appId: "J2OX2P2QAO",
|
||||
apiKey: "e0a7a59c7862598a0cf87307c8ea97f2",
|
||||
indexName: "twenty",
|
||||
appId: 'J2OX2P2QAO',
|
||||
apiKey: 'e0a7a59c7862598a0cf87307c8ea97f2',
|
||||
indexName: 'twenty',
|
||||
|
||||
// Optional: see doc section below
|
||||
contextualSearch: true,
|
||||
@ -105,7 +130,7 @@ const config = {
|
||||
// Optional: Algolia search parameters
|
||||
searchParameters: {},
|
||||
// Optional: path for search page that enabled by default (`false` to disable it)
|
||||
searchPagePath: "search",
|
||||
searchPagePath: 'search',
|
||||
},
|
||||
/* footer: {
|
||||
copyright: `© ${new Date().getFullYear()} Twenty. Docs generated with Docusaurus.`,
|
||||
|
@ -13,33 +13,101 @@
|
||||
|
||||
const backToHomeLink = {
|
||||
/** @type {"ref"} */
|
||||
type: "ref",
|
||||
id: "homepage",
|
||||
label: "Back to home",
|
||||
className: "menu__list-item--home",
|
||||
type: 'ref',
|
||||
id: 'homepage',
|
||||
label: 'Back to home',
|
||||
className: 'menu__list-item--home',
|
||||
customProps: {
|
||||
icon: "TbArrowBackUp",
|
||||
icon: 'TbArrowBackUp',
|
||||
iconSize: 20,
|
||||
},
|
||||
};
|
||||
|
||||
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
|
||||
const sidebars = {
|
||||
docsSidebar: [{ type: "autogenerated", dirName: "." }],
|
||||
frontendSidebar: [
|
||||
backToHomeLink,
|
||||
{ type: "autogenerated", dirName: "contributor/frontend" },
|
||||
],
|
||||
backendSidebar: [
|
||||
backToHomeLink,
|
||||
{ type: "autogenerated", dirName: "contributor/server" },
|
||||
],
|
||||
userSidebar: [
|
||||
{ type: "autogenerated", dirName: "user-guide" },
|
||||
],
|
||||
uiDocsSidebar: [
|
||||
{ type: "autogenerated", dirName: "contributor/frontend/ui-components" },
|
||||
docsSidebar: [
|
||||
{
|
||||
type: 'doc',
|
||||
id: 'homepage',
|
||||
customProps: {
|
||||
type: 'search-bar',
|
||||
props: { name: 'Hello World', age: 42 },
|
||||
},
|
||||
},
|
||||
{ type: 'autogenerated', dirName: '.' },
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Extending',
|
||||
items: [
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Rest APIs',
|
||||
collapsible: true,
|
||||
collapsed: true,
|
||||
customProps: {
|
||||
icon: 'TbApi',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
type: 'link',
|
||||
label: 'Core API',
|
||||
href: '/rest-api/',
|
||||
},
|
||||
{
|
||||
type: 'link',
|
||||
label: 'Metadata API',
|
||||
href: '#',
|
||||
className: 'coming-soon',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'category',
|
||||
label: 'GraphQL APIs',
|
||||
collapsible: true,
|
||||
collapsed: true,
|
||||
customProps: {
|
||||
icon: 'TbBrandGraphql',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
type: 'link',
|
||||
label: 'Core API',
|
||||
href: '/graphql/',
|
||||
},
|
||||
{
|
||||
type: 'link',
|
||||
label: 'Metadata API',
|
||||
href: '#',
|
||||
className: 'coming-soon',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'category',
|
||||
label: 'UI Kit',
|
||||
collapsible: true,
|
||||
collapsed: true,
|
||||
customProps: {
|
||||
icon: 'TbComponents',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
type: 'link',
|
||||
label: 'Storybook',
|
||||
href: 'https://storybook.twenty.com',
|
||||
},
|
||||
{
|
||||
type: 'link',
|
||||
label: 'Components',
|
||||
href: '/ui-components/',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
uiDocsSidebar: [{ type: 'autogenerated', dirName: 'ui-components' }],
|
||||
};
|
||||
|
||||
module.exports = sidebars;
|
||||
|
@ -88,29 +88,46 @@ html {
|
||||
}
|
||||
|
||||
.DocSearch-Button {
|
||||
margin: inherit !important;
|
||||
height: 32px !important;
|
||||
border-radius: 8px !important;
|
||||
border-radius: 0 !important;
|
||||
margin-top: 12px !important;
|
||||
background: inherit !important;
|
||||
color: var(--ifm-navbar-link-color) !important;
|
||||
|
||||
:hover {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
.DocSearch-Button-Placeholder {
|
||||
padding: 0 100px 0 6px !important;
|
||||
}
|
||||
|
||||
.DocSearch-Button .DocSearch-Search-Icon {
|
||||
color: inherit !important;
|
||||
width: 13px;
|
||||
.DocSearch-Button {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
|
||||
.DocSearch-Button-Key {
|
||||
height: 14px !important;
|
||||
width: 14px !important;
|
||||
font-size: 9px !important;
|
||||
padding: none !important;
|
||||
top: inherit !important;
|
||||
}
|
||||
|
||||
.DocSearch-Button-Keys {
|
||||
min-width: inherit !important;
|
||||
}
|
||||
|
||||
.search-menu-item {
|
||||
padding-top: 12px;
|
||||
}
|
||||
.menu__link:hover > .DocSearch-Button-Keys {
|
||||
display: flex !important;
|
||||
}
|
||||
|
||||
.theme-edit-this-page {
|
||||
font-size: 70%;
|
||||
}
|
||||
@ -272,21 +289,22 @@ a.table-of-contents__link:hover{
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.header-github-link:before {
|
||||
background: url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")
|
||||
no-repeat;
|
||||
content: "";
|
||||
display: flex;
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
}
|
||||
|
||||
[data-theme='dark'] .header-github-link::before {
|
||||
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")
|
||||
no-repeat;
|
||||
}
|
||||
|
||||
|
||||
.hidden {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.navbar__title {
|
||||
color: var(--ifm-link-color);
|
||||
font-family: 'IBM Plex Mono', 'Courier New', Courier, monospace;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.navbar__brand {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.navbar__link {
|
||||
color: var(--ifm-link-color);
|
||||
}
|
||||
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono&display=swap');
|
||||
|
@ -1,37 +1,39 @@
|
||||
import React from 'react';
|
||||
import clsx from 'clsx';
|
||||
import isInternalUrl from '@docusaurus/isInternalUrl';
|
||||
import Link from '@docusaurus/Link';
|
||||
import {
|
||||
findFirstCategoryLink,
|
||||
useDocById,
|
||||
} from '@docusaurus/theme-common/internal';
|
||||
import isInternalUrl from '@docusaurus/isInternalUrl';
|
||||
import {translate} from '@docusaurus/Translate';
|
||||
import { translate } from '@docusaurus/Translate';
|
||||
import clsx from 'clsx';
|
||||
|
||||
import * as icons from '../icons';
|
||||
|
||||
import styles from './styles.module.css';
|
||||
import * as icons from "../icons";
|
||||
|
||||
|
||||
function CardContainer({href, children}) {
|
||||
function CardContainer({ href, children }) {
|
||||
return (
|
||||
<Link
|
||||
href={href}
|
||||
className={clsx('card padding--lg', styles.cardContainer)}>
|
||||
className={clsx('card padding--lg', styles.cardContainer)}
|
||||
>
|
||||
{children}
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
function CardLayout({href, icon, title, description}) {
|
||||
function CardLayout({ href, icon, title, description }) {
|
||||
return (
|
||||
<CardContainer href={href}>
|
||||
<h2 className={clsx("text--truncate", styles.cardTitle)} title={title}>
|
||||
<h2 className={clsx('text--truncate', styles.cardTitle)} title={title}>
|
||||
<span className={styles.icon}>
|
||||
{typeof icon === "function" ? icon() : icon}
|
||||
</span>{" "}
|
||||
{typeof icon === 'function' ? icon() : icon}
|
||||
</span>{' '}
|
||||
{title}
|
||||
</h2>
|
||||
{description && (
|
||||
<p
|
||||
className={clsx("text--truncate", styles.cardDescription)}
|
||||
className={clsx('text--truncate', styles.cardDescription)}
|
||||
title={description}
|
||||
>
|
||||
{description}
|
||||
@ -41,7 +43,7 @@ function CardLayout({href, icon, title, description}) {
|
||||
);
|
||||
}
|
||||
|
||||
function CardCategory({item}) {
|
||||
function CardCategory({ item }) {
|
||||
const href = findFirstCategoryLink(item);
|
||||
// Unexpected: categories that don't have a link have been filtered upfront
|
||||
if (!href) {
|
||||
@ -61,17 +63,16 @@ function CardCategory({item}) {
|
||||
description:
|
||||
'The default description for a category card in the generated index about how many items this category includes',
|
||||
},
|
||||
{count: item.items.length},
|
||||
{ count: item.items.length },
|
||||
)
|
||||
}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function CardLink({ item }) {
|
||||
const customIcon = item.customProps.icon;
|
||||
const icon = icons[customIcon] || (isInternalUrl(item.href) ? "📄️" : "🔗");
|
||||
const icon = icons[customIcon] || (isInternalUrl(item.href) ? '📄️' : '🔗');
|
||||
const doc = useDocById(item.docId ?? undefined);
|
||||
|
||||
return (
|
||||
@ -84,8 +85,7 @@ function CardLink({ item }) {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
export default function DocCard({item}) {
|
||||
export default function DocCard({ item }) {
|
||||
switch (item.type) {
|
||||
case 'link':
|
||||
return <CardLink item={item} />;
|
||||
|
67
packages/twenty-docs/src/theme/DocSidebarItem/index.js
Normal file
67
packages/twenty-docs/src/theme/DocSidebarItem/index.js
Normal file
@ -0,0 +1,67 @@
|
||||
import React from 'react';
|
||||
import { TbSearch } from 'react-icons/tb';
|
||||
import DocSidebarItem from '@theme-original/DocSidebarItem';
|
||||
import SearchBar from '@theme-original/SearchBar';
|
||||
|
||||
const CustomComponents = {
|
||||
'search-bar': () => {
|
||||
const openSearchModal = () => {
|
||||
console.log('yo');
|
||||
|
||||
const searchInput = document.querySelector('#search-bar');
|
||||
if (searchInput) {
|
||||
searchInput.focus();
|
||||
}
|
||||
|
||||
const event = new KeyboardEvent('keydown', {
|
||||
key: 'k',
|
||||
code: 'KeyK',
|
||||
keyCode: 75,
|
||||
which: 75,
|
||||
// If the shortcut is Cmd+K on Mac or Ctrl+K on Windows/Linux, set the respective key to true:
|
||||
metaKey: true, // for Cmd+K (Mac)
|
||||
// ctrlKey: true, // for Ctrl+K (Windows/Linux)
|
||||
bubbles: true,
|
||||
});
|
||||
|
||||
// Dispatch the event
|
||||
window.dispatchEvent(event);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<li className="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--level2 search-menu-item">
|
||||
<SearchBar style={{ display: 'none' }} />
|
||||
<a className="menu__link" onClick={openSearchModal}>
|
||||
<span className="icon-and-text">
|
||||
<i className="sidebar-item-icon">
|
||||
<TbSearch />
|
||||
</i>
|
||||
Search
|
||||
</span>
|
||||
<span
|
||||
className="DocSearch-Button-Keys"
|
||||
style={{ paddingLeft: '10px', display: 'none' }}
|
||||
>
|
||||
<kbd className="DocSearch-Button-Key">⌘</kbd>
|
||||
<kbd className="DocSearch-Button-Key">K</kbd>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</>
|
||||
);
|
||||
},
|
||||
};
|
||||
|
||||
export default function DocSidebarItemWrapper(props) {
|
||||
const CustomComponent = CustomComponents[props.item?.customProps?.type];
|
||||
if (CustomComponent) {
|
||||
return <CustomComponent {...props.item?.customProps?.props} />;
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<DocSidebarItem {...props} />
|
||||
</>
|
||||
);
|
||||
}
|
@ -1,11 +1,10 @@
|
||||
import React from 'react';
|
||||
import { TbMoon } from 'react-icons/tb';
|
||||
import {useColorMode} from '@docusaurus/theme-common';
|
||||
|
||||
import { useColorMode } from '@docusaurus/theme-common';
|
||||
|
||||
const IconDarkMode = (props) => {
|
||||
const { colorMode } = useColorMode();
|
||||
return colorMode === 'dark' ? <TbMoon /> : <></>;
|
||||
}
|
||||
return colorMode === 'dark' ? <TbMoon className="navbar__link" /> : <></>;
|
||||
};
|
||||
|
||||
export default IconDarkMode
|
||||
export default IconDarkMode;
|
||||
|
@ -1,11 +1,10 @@
|
||||
import React from 'react';
|
||||
import { TbSun } from 'react-icons/tb';
|
||||
import {useColorMode} from '@docusaurus/theme-common';
|
||||
import { useColorMode } from '@docusaurus/theme-common';
|
||||
|
||||
|
||||
const IconLightMode = (props) => {
|
||||
const IconLightMode = (props) => {
|
||||
const { colorMode } = useColorMode();
|
||||
return colorMode === 'light' ? <TbSun /> : <></>;
|
||||
}
|
||||
return colorMode === 'light' ? <TbSun className="navbar__link" /> : <></>;
|
||||
};
|
||||
|
||||
export default IconLightMode;
|
||||
|
5
packages/twenty-docs/src/theme/Navbar/Search/index.js
Normal file
5
packages/twenty-docs/src/theme/Navbar/Search/index.js
Normal file
@ -0,0 +1,5 @@
|
||||
import React from 'react';
|
||||
|
||||
export default function SearchWrapper(props) {
|
||||
return <></>;
|
||||
}
|
24
packages/twenty-docs/src/theme/NavbarItem/ComponentTypes.js
Normal file
24
packages/twenty-docs/src/theme/NavbarItem/ComponentTypes.js
Normal file
@ -0,0 +1,24 @@
|
||||
import GithubLink from '@site/src/theme/NavbarItem/GithubLink';
|
||||
import DefaultNavbarItem from '@theme/NavbarItem/DefaultNavbarItem';
|
||||
import DocNavbarItem from '@theme/NavbarItem/DocNavbarItem';
|
||||
import DocSidebarNavbarItem from '@theme/NavbarItem/DocSidebarNavbarItem';
|
||||
import DocsVersionDropdownNavbarItem from '@theme/NavbarItem/DocsVersionDropdownNavbarItem';
|
||||
import DocsVersionNavbarItem from '@theme/NavbarItem/DocsVersionNavbarItem';
|
||||
import DropdownNavbarItem from '@theme/NavbarItem/DropdownNavbarItem';
|
||||
import HtmlNavbarItem from '@theme/NavbarItem/HtmlNavbarItem';
|
||||
import LocaleDropdownNavbarItem from '@theme/NavbarItem/LocaleDropdownNavbarItem';
|
||||
import SearchNavbarItem from '@theme/NavbarItem/SearchNavbarItem';
|
||||
|
||||
const ComponentTypes = {
|
||||
default: DefaultNavbarItem,
|
||||
localeDropdown: LocaleDropdownNavbarItem,
|
||||
search: SearchNavbarItem,
|
||||
dropdown: DropdownNavbarItem,
|
||||
html: HtmlNavbarItem,
|
||||
doc: DocNavbarItem,
|
||||
docSidebar: DocSidebarNavbarItem,
|
||||
docsVersion: DocsVersionNavbarItem,
|
||||
docsVersionDropdown: DocsVersionDropdownNavbarItem,
|
||||
'custom-github-link': GithubLink,
|
||||
};
|
||||
export default ComponentTypes;
|
21
packages/twenty-docs/src/theme/NavbarItem/GithubLink.tsx
Normal file
21
packages/twenty-docs/src/theme/NavbarItem/GithubLink.tsx
Normal file
@ -0,0 +1,21 @@
|
||||
import React from 'react';
|
||||
import { TbBrandGithub } from 'react-icons/tb';
|
||||
|
||||
const GithubLink = () => {
|
||||
return (
|
||||
<a
|
||||
className="navbar__item navbar__link"
|
||||
href="https://github.com/twentyhq/twenty"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
style={{
|
||||
display: 'flex',
|
||||
verticalAlign: 'middle',
|
||||
}}
|
||||
>
|
||||
<TbBrandGithub />
|
||||
</a>
|
||||
);
|
||||
};
|
||||
|
||||
export default GithubLink;
|
@ -1,76 +1,78 @@
|
||||
export {
|
||||
TbAddressBook,
|
||||
TbApi,
|
||||
TbApps,
|
||||
TbAppWindow,
|
||||
TbArrowBackUp,
|
||||
TbArrowBigRight,
|
||||
TbArticle,
|
||||
TbAugmentedReality,
|
||||
TbBolt,
|
||||
TbBrandDocker,
|
||||
TbBrandFigma,
|
||||
TbBrandGithub,
|
||||
TbBrandGraphql,
|
||||
TbBrandVscode,
|
||||
TbBrandWindows,
|
||||
TbBrandZapier,
|
||||
TbBug,
|
||||
TbBugOff,
|
||||
TbChartDots,
|
||||
TbCheck,
|
||||
TbCheckbox,
|
||||
TbChecklist,
|
||||
TbCircleCheckFilled,
|
||||
TbCircleDot,
|
||||
TbCloud,
|
||||
TbScript,
|
||||
TbForms,
|
||||
TbTable,
|
||||
TbSlideshow,
|
||||
TbBrandDocker,
|
||||
TbColorFilter,
|
||||
TbColorPicker,
|
||||
TbComponents,
|
||||
TbDeviceDesktop,
|
||||
TbExclamationCircle,
|
||||
TbEyeglass,
|
||||
TbFaceIdError,
|
||||
TbFlag,
|
||||
TbFolder,
|
||||
TbForms,
|
||||
TbIcons,
|
||||
TbInfoCircle,
|
||||
TbInputSearch,
|
||||
TbKeyboard,
|
||||
TbLayoutGrid,
|
||||
TbLayoutList,
|
||||
TbLink,
|
||||
TbLoader2,
|
||||
TbMenu,
|
||||
TbNavigation,
|
||||
TbNote,
|
||||
TbNotebook,
|
||||
TbPaint,
|
||||
TbPencil,
|
||||
TbPill,
|
||||
TbPlus,
|
||||
TbRectangle,
|
||||
TbRocket,
|
||||
TbSchema,
|
||||
TbScript,
|
||||
TbSelect,
|
||||
TbServer,
|
||||
TbSlideshow,
|
||||
TbSquareChevronsRight,
|
||||
TbSquareRoundedPlusFilled,
|
||||
TbTable,
|
||||
TbTag,
|
||||
TbTargetArrow,
|
||||
TbTemplate,
|
||||
TbTerminal,
|
||||
TbTerminal2,
|
||||
TbTextPlus,
|
||||
TbTextSize,
|
||||
TbToggleRight,
|
||||
TbTooltip,
|
||||
TbTopologyStar,
|
||||
TbUpload,
|
||||
TbUsers,
|
||||
TbVariable,
|
||||
TbVocabulary,
|
||||
TbZoomQuestion,
|
||||
TbRocket,
|
||||
TbAugmentedReality,
|
||||
TbTerminal,
|
||||
TbBrandGraphql,
|
||||
TbApi,
|
||||
TbUsers,
|
||||
TbCheck,
|
||||
TbPill,
|
||||
TbAppWindow,
|
||||
TbTooltip,
|
||||
TbTag,
|
||||
TbLayoutList,
|
||||
TbAddressBook,
|
||||
TbLoader2,
|
||||
TbInputSearch,
|
||||
TbIcons,
|
||||
TbSquareRoundedPlusFilled,
|
||||
TbLayoutGrid,
|
||||
TbColorFilter,
|
||||
TbTextSize,
|
||||
TbComponents,
|
||||
TbCheckbox,
|
||||
TbColorPicker,
|
||||
TbCircleDot,
|
||||
TbUpload,
|
||||
TbVariable,
|
||||
TbSchema,
|
||||
TbSelect,
|
||||
TbToggleRight,
|
||||
TbTextPlus,
|
||||
TbTargetArrow,
|
||||
TbNote,
|
||||
TbInfoCircle,
|
||||
TbLink,
|
||||
TbNavigation,
|
||||
TbMenu,
|
||||
TbSquareChevronsRight,
|
||||
TbTemplate,
|
||||
TbRectangle,
|
||||
TbCircleCheckFilled,
|
||||
TbFlag
|
||||
} from "react-icons/tb";
|
||||
} from 'react-icons/tb';
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 290 KiB After Width: | Height: | Size: 375 KiB |
Binary file not shown.
Before Width: | Height: | Size: 359 KiB After Width: | Height: | Size: 333 KiB |
@ -60,4 +60,4 @@
|
||||
"msw": {
|
||||
"workerDirectory": "public"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -123,4 +123,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,9 +22,7 @@ if (packageChanged && !lockfileChanged) {
|
||||
const envChanged =
|
||||
danger.git.modified_files.find((x) => x.includes('.env.example')) ||
|
||||
danger.git.modified_files.find((x) => x.includes('environment.service.ts'));
|
||||
const envDocsChanged = danger.git.modified_files.includes(
|
||||
'environment-variables.mdx',
|
||||
);
|
||||
const envDocsChanged = danger.git.modified_files.includes('self-hosting.mdx');
|
||||
if (envChanged && !envDocsChanged) {
|
||||
const message =
|
||||
'Changes were made to the environment variables, but not to the documentation';
|
||||
|
371
yarn.lock
371
yarn.lock
@ -3918,9 +3918,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/core@npm:3.0.1, @docusaurus/core@npm:^3.0.0":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/core@npm:3.0.1"
|
||||
"@docusaurus/core@npm:3.1.1, @docusaurus/core@npm:^3.1.0":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/core@npm:3.1.1"
|
||||
dependencies:
|
||||
"@babel/core": "npm:^7.23.3"
|
||||
"@babel/generator": "npm:^7.23.3"
|
||||
@ -3932,13 +3932,13 @@ __metadata:
|
||||
"@babel/runtime": "npm:^7.22.6"
|
||||
"@babel/runtime-corejs3": "npm:^7.22.6"
|
||||
"@babel/traverse": "npm:^7.22.8"
|
||||
"@docusaurus/cssnano-preset": "npm:3.0.1"
|
||||
"@docusaurus/logger": "npm:3.0.1"
|
||||
"@docusaurus/mdx-loader": "npm:3.0.1"
|
||||
"@docusaurus/cssnano-preset": "npm:3.1.1"
|
||||
"@docusaurus/logger": "npm:3.1.1"
|
||||
"@docusaurus/mdx-loader": "npm:3.1.1"
|
||||
"@docusaurus/react-loadable": "npm:5.5.2"
|
||||
"@docusaurus/utils": "npm:3.0.1"
|
||||
"@docusaurus/utils-common": "npm:3.0.1"
|
||||
"@docusaurus/utils-validation": "npm:3.0.1"
|
||||
"@docusaurus/utils": "npm:3.1.1"
|
||||
"@docusaurus/utils-common": "npm:3.1.1"
|
||||
"@docusaurus/utils-validation": "npm:3.1.1"
|
||||
"@slorber/static-site-generator-webpack-plugin": "npm:^4.0.7"
|
||||
"@svgr/webpack": "npm:^6.5.1"
|
||||
autoprefixer: "npm:^10.4.14"
|
||||
@ -3996,41 +3996,41 @@ __metadata:
|
||||
react-dom: ^18.0.0
|
||||
bin:
|
||||
docusaurus: bin/docusaurus.mjs
|
||||
checksum: 3897f4cf1f71bd1dea58525548a9547a699e0514d29ed7637aba5eb36f584361dc81ec8f916eafe450402b4850bee0bea1e6dd25c9dc3d7244ac519029818296
|
||||
checksum: 7e7310258fd60bde11eb94a6240c469ddeaf7e55ec35e2f23878a201f25971b016cfd334c2bf0a7a6aa9340bbfedf781b4d875905519597439b88b2b32a54d73
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/cssnano-preset@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/cssnano-preset@npm:3.0.1"
|
||||
"@docusaurus/cssnano-preset@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/cssnano-preset@npm:3.1.1"
|
||||
dependencies:
|
||||
cssnano-preset-advanced: "npm:^5.3.10"
|
||||
postcss: "npm:^8.4.26"
|
||||
postcss-sort-media-queries: "npm:^4.4.1"
|
||||
tslib: "npm:^2.6.0"
|
||||
checksum: 21f1d87a6f42450e70c379c3795a4e2951ccbdae480bf4c1f7de53e83747cdf11f1031511eaa7cd0fecc52bb425dc66f4fe6c624f33c13d1f0d84235663ab360
|
||||
checksum: 8f3e2f495cb5420437478b6c6b9d83f509f8f17ab06db124ee751749d35f56408d2bad48b56439bc42c02e7faf49b12920bc1e078bbe28143e423ac10d421478
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/logger@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/logger@npm:3.0.1"
|
||||
"@docusaurus/logger@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/logger@npm:3.1.1"
|
||||
dependencies:
|
||||
chalk: "npm:^4.1.2"
|
||||
tslib: "npm:^2.6.0"
|
||||
checksum: 803c6db9646c111ac8e45d38a9b79b96503042838447e6fa250165fabff88ed94f5964d5be08d7c448ad2b8035255fd34c26a4ccf2082548b33a753e2f0a23fb
|
||||
checksum: a70814e8a54b800aadd2c76f34411c9ab4b0907287ae3cee775c7ebb15c797f5807d3a25bd30519361654e667a81c496c8e0229cce989ba92028f76fde73f9e4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/mdx-loader@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/mdx-loader@npm:3.0.1"
|
||||
"@docusaurus/mdx-loader@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/mdx-loader@npm:3.1.1"
|
||||
dependencies:
|
||||
"@babel/parser": "npm:^7.22.7"
|
||||
"@babel/traverse": "npm:^7.22.8"
|
||||
"@docusaurus/logger": "npm:3.0.1"
|
||||
"@docusaurus/utils": "npm:3.0.1"
|
||||
"@docusaurus/utils-validation": "npm:3.0.1"
|
||||
"@docusaurus/logger": "npm:3.1.1"
|
||||
"@docusaurus/utils": "npm:3.1.1"
|
||||
"@docusaurus/utils-validation": "npm:3.1.1"
|
||||
"@mdx-js/mdx": "npm:^3.0.0"
|
||||
"@slorber/remark-comment": "npm:^1.0.0"
|
||||
escape-html: "npm:^1.0.3"
|
||||
@ -4055,16 +4055,16 @@ __metadata:
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 2892440de8a0606e893236eaf4f9c873091199481815139fe5f120ba2e5bd7fef062b63db7431027a73ee4d240bc785095374cddfd55313de35b8a5c62c53e9f
|
||||
checksum: b73185dd2a77edfc2a0e840ac339ed90cf66a359861b1e79cfdf678737c26d20a96a186511cf8eac2c17bdb336bec7fa2028341c8c28d862410778ef855c433e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/module-type-aliases@npm:3.0.1, @docusaurus/module-type-aliases@npm:^3.0.0":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/module-type-aliases@npm:3.0.1"
|
||||
"@docusaurus/module-type-aliases@npm:3.1.1, @docusaurus/module-type-aliases@npm:^3.1.0":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/module-type-aliases@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/react-loadable": "npm:5.5.2"
|
||||
"@docusaurus/types": "npm:3.0.1"
|
||||
"@docusaurus/types": "npm:3.1.1"
|
||||
"@types/history": "npm:^4.7.11"
|
||||
"@types/react": "npm:*"
|
||||
"@types/react-router-config": "npm:*"
|
||||
@ -4074,21 +4074,21 @@ __metadata:
|
||||
peerDependencies:
|
||||
react: "*"
|
||||
react-dom: "*"
|
||||
checksum: 6a01235908bd17d94188f6ff749c3358eaf0e1edd4224d0e2f43c234fa68f17cd098fd26389c40457ab69b420869381ee46706c355b704d4a8f80892c23d8a74
|
||||
checksum: d3b79548b995b99db19cbff69b9b83493d901c080582e76a44237336e8409177cb2628f9e0eaa4c6cc336278e52c89e89aca84e41c1870b96c0d642868570d96
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/plugin-content-blog@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/plugin-content-blog@npm:3.0.1"
|
||||
"@docusaurus/plugin-content-blog@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/plugin-content-blog@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/core": "npm:3.0.1"
|
||||
"@docusaurus/logger": "npm:3.0.1"
|
||||
"@docusaurus/mdx-loader": "npm:3.0.1"
|
||||
"@docusaurus/types": "npm:3.0.1"
|
||||
"@docusaurus/utils": "npm:3.0.1"
|
||||
"@docusaurus/utils-common": "npm:3.0.1"
|
||||
"@docusaurus/utils-validation": "npm:3.0.1"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/logger": "npm:3.1.1"
|
||||
"@docusaurus/mdx-loader": "npm:3.1.1"
|
||||
"@docusaurus/types": "npm:3.1.1"
|
||||
"@docusaurus/utils": "npm:3.1.1"
|
||||
"@docusaurus/utils-common": "npm:3.1.1"
|
||||
"@docusaurus/utils-validation": "npm:3.1.1"
|
||||
cheerio: "npm:^1.0.0-rc.12"
|
||||
feed: "npm:^4.2.2"
|
||||
fs-extra: "npm:^11.1.1"
|
||||
@ -4102,21 +4102,21 @@ __metadata:
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 39e44ce1af5cf411e0b7d9ac4069df75a79f4ee1faaa980c22667896bb6925c87aaec0e7e0198575ba329df4652b8fd674bba9162bbd71247599358cb5ea5495
|
||||
checksum: 43e21c9f307fa5f93a2ae39db2b2cbe4f6a6397159984dc8a55eca6820bf6c0d8149dc10fc6b047cb14c19e28b4fa3dbe3231f353c617e76d5d06b3e9d882a4a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/plugin-content-docs@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/plugin-content-docs@npm:3.0.1"
|
||||
"@docusaurus/plugin-content-docs@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/plugin-content-docs@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/core": "npm:3.0.1"
|
||||
"@docusaurus/logger": "npm:3.0.1"
|
||||
"@docusaurus/mdx-loader": "npm:3.0.1"
|
||||
"@docusaurus/module-type-aliases": "npm:3.0.1"
|
||||
"@docusaurus/types": "npm:3.0.1"
|
||||
"@docusaurus/utils": "npm:3.0.1"
|
||||
"@docusaurus/utils-validation": "npm:3.0.1"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/logger": "npm:3.1.1"
|
||||
"@docusaurus/mdx-loader": "npm:3.1.1"
|
||||
"@docusaurus/module-type-aliases": "npm:3.1.1"
|
||||
"@docusaurus/types": "npm:3.1.1"
|
||||
"@docusaurus/utils": "npm:3.1.1"
|
||||
"@docusaurus/utils-validation": "npm:3.1.1"
|
||||
"@types/react-router-config": "npm:^5.0.7"
|
||||
combine-promises: "npm:^1.1.0"
|
||||
fs-extra: "npm:^11.1.1"
|
||||
@ -4128,133 +4128,133 @@ __metadata:
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 97ab50410e38beb7db7e2e110d35dab63e51621a116587ea7d8e334135e7df0b7173590daca9f97bcc8238ba51b495cab6eb88e90be5390560e7d9172a011238
|
||||
checksum: affb37111782ad3f79ce1e8964cf57c1b4d44bb5525d37d06a188a7615a0d94af5140e93f6d65b8f1365e8b6347a9dd0436f510083bd97a5f4b7a3df799d3b9c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/plugin-content-pages@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/plugin-content-pages@npm:3.0.1"
|
||||
"@docusaurus/plugin-content-pages@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/plugin-content-pages@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/core": "npm:3.0.1"
|
||||
"@docusaurus/mdx-loader": "npm:3.0.1"
|
||||
"@docusaurus/types": "npm:3.0.1"
|
||||
"@docusaurus/utils": "npm:3.0.1"
|
||||
"@docusaurus/utils-validation": "npm:3.0.1"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/mdx-loader": "npm:3.1.1"
|
||||
"@docusaurus/types": "npm:3.1.1"
|
||||
"@docusaurus/utils": "npm:3.1.1"
|
||||
"@docusaurus/utils-validation": "npm:3.1.1"
|
||||
fs-extra: "npm:^11.1.1"
|
||||
tslib: "npm:^2.6.0"
|
||||
webpack: "npm:^5.88.1"
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 3752f6acd85b1799cfa0f4306dfc2eb198101dfbc5f2d238702839b02197f1623ac60e231f5b8c80e0bac92ce5ac02461a9a4fa2161551c40606451a5986f0d6
|
||||
checksum: ce5bb432429449c4abe5a33fdb69e5e3435587f40f9981c42ef8888eb2c99a78879e45eca4155acfc3ba91eaa3f5e7ebdfff5bba2f59cb1755feaff6ff64dad5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/plugin-debug@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/plugin-debug@npm:3.0.1"
|
||||
"@docusaurus/plugin-debug@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/plugin-debug@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/core": "npm:3.0.1"
|
||||
"@docusaurus/types": "npm:3.0.1"
|
||||
"@docusaurus/utils": "npm:3.0.1"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/types": "npm:3.1.1"
|
||||
"@docusaurus/utils": "npm:3.1.1"
|
||||
fs-extra: "npm:^11.1.1"
|
||||
react-json-view-lite: "npm:^1.2.0"
|
||||
tslib: "npm:^2.6.0"
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 09e99640390b87b155befa7be5cdd3f0c638acbe8d2a44d947410be3b61e7d74adb923eff88cb4cd8abf00ad4212a651641ebf240155cf3714ecf40d09fd0e1c
|
||||
checksum: c863b2f22c8dc49ef36f981700734145d9430e36ecdf15f871cbdbd5a725284c26fe3b320a040440649f0e11bed1a2a78fd115103caea2c8e75bbff4079d8cee
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/plugin-google-analytics@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/plugin-google-analytics@npm:3.0.1"
|
||||
"@docusaurus/plugin-google-analytics@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/plugin-google-analytics@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/core": "npm:3.0.1"
|
||||
"@docusaurus/types": "npm:3.0.1"
|
||||
"@docusaurus/utils-validation": "npm:3.0.1"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/types": "npm:3.1.1"
|
||||
"@docusaurus/utils-validation": "npm:3.1.1"
|
||||
tslib: "npm:^2.6.0"
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 6afdbec2e8b3a6fe991dc54f2eb957200a5db1acd04f35ffd15fe2f72125786ad4e2961687f4182cab486aab2d6845db040634545455089496f1cfd630313d03
|
||||
checksum: 66574bc551b45bb26bd390caeb25b7d0839717080e3b14779827fd25c789a12bb97503f47d613c368bf66aaf579600bf047075548a76c590d56dade56d58f19a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/plugin-google-gtag@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/plugin-google-gtag@npm:3.0.1"
|
||||
"@docusaurus/plugin-google-gtag@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/plugin-google-gtag@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/core": "npm:3.0.1"
|
||||
"@docusaurus/types": "npm:3.0.1"
|
||||
"@docusaurus/utils-validation": "npm:3.0.1"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/types": "npm:3.1.1"
|
||||
"@docusaurus/utils-validation": "npm:3.1.1"
|
||||
"@types/gtag.js": "npm:^0.0.12"
|
||||
tslib: "npm:^2.6.0"
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 21e9a775c05ebc1654718a1e5e2e095201bb70946fa6e3419b4f668ec9f37fa56d1675de7011ecd91cfc5204dd48c6764e4419fd92c67aa0e55448014594af9d
|
||||
checksum: e91ea0e47efcb2ebffd8947afd6e8ff862141c8ef5228a8124ff2f22d0a171b7b3968c54789cc8b4460fe7eab07af1451f23b1f07182cb29ae13e1c2d6dd2f86
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/plugin-google-tag-manager@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/plugin-google-tag-manager@npm:3.0.1"
|
||||
"@docusaurus/plugin-google-tag-manager@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/plugin-google-tag-manager@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/core": "npm:3.0.1"
|
||||
"@docusaurus/types": "npm:3.0.1"
|
||||
"@docusaurus/utils-validation": "npm:3.0.1"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/types": "npm:3.1.1"
|
||||
"@docusaurus/utils-validation": "npm:3.1.1"
|
||||
tslib: "npm:^2.6.0"
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 8ec2c46adbf8b67b5cc7736741486320608ae89c7e6f706e3df54afb6d8097b28f9dc0eb43edd92d9aab7e5fd823ceebe8aa4debd80c95ad98517a3a43015693
|
||||
checksum: 23277cfc15e4c8fe1551982b5fd82c522f3bbffb8bc74ca015ec63c2eadebbe8d2287cbe792e5458029109bbb6d58aa1c4aeabdd7d501257c771607676465465
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/plugin-sitemap@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/plugin-sitemap@npm:3.0.1"
|
||||
"@docusaurus/plugin-sitemap@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/plugin-sitemap@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/core": "npm:3.0.1"
|
||||
"@docusaurus/logger": "npm:3.0.1"
|
||||
"@docusaurus/types": "npm:3.0.1"
|
||||
"@docusaurus/utils": "npm:3.0.1"
|
||||
"@docusaurus/utils-common": "npm:3.0.1"
|
||||
"@docusaurus/utils-validation": "npm:3.0.1"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/logger": "npm:3.1.1"
|
||||
"@docusaurus/types": "npm:3.1.1"
|
||||
"@docusaurus/utils": "npm:3.1.1"
|
||||
"@docusaurus/utils-common": "npm:3.1.1"
|
||||
"@docusaurus/utils-validation": "npm:3.1.1"
|
||||
fs-extra: "npm:^11.1.1"
|
||||
sitemap: "npm:^7.1.1"
|
||||
tslib: "npm:^2.6.0"
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: e6f63826f22139f9bf87fe9aec1229dffef115f4f5880ad77653f5ca826dc7bb01bd1f8a90741105a0524465dff8afde95f2c8b443de5cc50d3bbd1f0a16247a
|
||||
checksum: 3e9557d9824c30e321a831aecb897429112e5857f5659a933aa6389259d22d7574e31a54eb93cd89250672c1605115397332e333e6aae663df47dd98c5234f8d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/preset-classic@npm:^3.0.0":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/preset-classic@npm:3.0.1"
|
||||
"@docusaurus/preset-classic@npm:^3.1.0":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/preset-classic@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/core": "npm:3.0.1"
|
||||
"@docusaurus/plugin-content-blog": "npm:3.0.1"
|
||||
"@docusaurus/plugin-content-docs": "npm:3.0.1"
|
||||
"@docusaurus/plugin-content-pages": "npm:3.0.1"
|
||||
"@docusaurus/plugin-debug": "npm:3.0.1"
|
||||
"@docusaurus/plugin-google-analytics": "npm:3.0.1"
|
||||
"@docusaurus/plugin-google-gtag": "npm:3.0.1"
|
||||
"@docusaurus/plugin-google-tag-manager": "npm:3.0.1"
|
||||
"@docusaurus/plugin-sitemap": "npm:3.0.1"
|
||||
"@docusaurus/theme-classic": "npm:3.0.1"
|
||||
"@docusaurus/theme-common": "npm:3.0.1"
|
||||
"@docusaurus/theme-search-algolia": "npm:3.0.1"
|
||||
"@docusaurus/types": "npm:3.0.1"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/plugin-content-blog": "npm:3.1.1"
|
||||
"@docusaurus/plugin-content-docs": "npm:3.1.1"
|
||||
"@docusaurus/plugin-content-pages": "npm:3.1.1"
|
||||
"@docusaurus/plugin-debug": "npm:3.1.1"
|
||||
"@docusaurus/plugin-google-analytics": "npm:3.1.1"
|
||||
"@docusaurus/plugin-google-gtag": "npm:3.1.1"
|
||||
"@docusaurus/plugin-google-tag-manager": "npm:3.1.1"
|
||||
"@docusaurus/plugin-sitemap": "npm:3.1.1"
|
||||
"@docusaurus/theme-classic": "npm:3.1.1"
|
||||
"@docusaurus/theme-common": "npm:3.1.1"
|
||||
"@docusaurus/theme-search-algolia": "npm:3.1.1"
|
||||
"@docusaurus/types": "npm:3.1.1"
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 31ebcdb4f319c556d51b54618137da82789ae0bcea9ada80c0e13bc515fb0d0ee118ffdb0740fe615199d1cc2f80399004c320477aa8dcdf7ec8b56382dd29f8
|
||||
checksum: 94de4669c7563db801f45f0ae4eba7db047f94533ff44663e8b54a47745309a0a838bc9823a69ac07ba41150436d85c8b4f5b0370344fe86c501866d61b30fb1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@ -4270,22 +4270,22 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/theme-classic@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/theme-classic@npm:3.0.1"
|
||||
"@docusaurus/theme-classic@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/theme-classic@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/core": "npm:3.0.1"
|
||||
"@docusaurus/mdx-loader": "npm:3.0.1"
|
||||
"@docusaurus/module-type-aliases": "npm:3.0.1"
|
||||
"@docusaurus/plugin-content-blog": "npm:3.0.1"
|
||||
"@docusaurus/plugin-content-docs": "npm:3.0.1"
|
||||
"@docusaurus/plugin-content-pages": "npm:3.0.1"
|
||||
"@docusaurus/theme-common": "npm:3.0.1"
|
||||
"@docusaurus/theme-translations": "npm:3.0.1"
|
||||
"@docusaurus/types": "npm:3.0.1"
|
||||
"@docusaurus/utils": "npm:3.0.1"
|
||||
"@docusaurus/utils-common": "npm:3.0.1"
|
||||
"@docusaurus/utils-validation": "npm:3.0.1"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/mdx-loader": "npm:3.1.1"
|
||||
"@docusaurus/module-type-aliases": "npm:3.1.1"
|
||||
"@docusaurus/plugin-content-blog": "npm:3.1.1"
|
||||
"@docusaurus/plugin-content-docs": "npm:3.1.1"
|
||||
"@docusaurus/plugin-content-pages": "npm:3.1.1"
|
||||
"@docusaurus/theme-common": "npm:3.1.1"
|
||||
"@docusaurus/theme-translations": "npm:3.1.1"
|
||||
"@docusaurus/types": "npm:3.1.1"
|
||||
"@docusaurus/utils": "npm:3.1.1"
|
||||
"@docusaurus/utils-common": "npm:3.1.1"
|
||||
"@docusaurus/utils-validation": "npm:3.1.1"
|
||||
"@mdx-js/react": "npm:^3.0.0"
|
||||
clsx: "npm:^2.0.0"
|
||||
copy-text-to-clipboard: "npm:^3.2.0"
|
||||
@ -4302,21 +4302,21 @@ __metadata:
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 24292dea657579523f458b4b61d5e52391e2ec9539b291b97aff62c4529cba1672e4a01d8328aac7362841e4299444e631c8feb452556ef76802a1810cc81e43
|
||||
checksum: 6c55ead986d092ccbf1109560596367951466965d9334a06326dbc589fd5013b2e8743ee47a0763dd5517011a4367be10413f2808cf5bf8ce2f21a20ffc56e3c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/theme-common@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/theme-common@npm:3.0.1"
|
||||
"@docusaurus/theme-common@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/theme-common@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/mdx-loader": "npm:3.0.1"
|
||||
"@docusaurus/module-type-aliases": "npm:3.0.1"
|
||||
"@docusaurus/plugin-content-blog": "npm:3.0.1"
|
||||
"@docusaurus/plugin-content-docs": "npm:3.0.1"
|
||||
"@docusaurus/plugin-content-pages": "npm:3.0.1"
|
||||
"@docusaurus/utils": "npm:3.0.1"
|
||||
"@docusaurus/utils-common": "npm:3.0.1"
|
||||
"@docusaurus/mdx-loader": "npm:3.1.1"
|
||||
"@docusaurus/module-type-aliases": "npm:3.1.1"
|
||||
"@docusaurus/plugin-content-blog": "npm:3.1.1"
|
||||
"@docusaurus/plugin-content-docs": "npm:3.1.1"
|
||||
"@docusaurus/plugin-content-pages": "npm:3.1.1"
|
||||
"@docusaurus/utils": "npm:3.1.1"
|
||||
"@docusaurus/utils-common": "npm:3.1.1"
|
||||
"@types/history": "npm:^4.7.11"
|
||||
"@types/react": "npm:*"
|
||||
"@types/react-router-config": "npm:*"
|
||||
@ -4328,22 +4328,22 @@ __metadata:
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 9d67dfc9ba4241414a94762a4f5ad62fa57db2be335ade0d44f9a27843b863c9be576052e70ba599b3d7439b98d19dac43c9788d0962d15d7517a739bd39eaaa
|
||||
checksum: 13fb9d9fc4e68e7ead1da92d1f3949b8f0b3a108430a37f895ab98f0ba199f606697d4a7c37d6649acd9391bd834a7658546c2505972185f76ff1f10b9cda9f8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/theme-search-algolia@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/theme-search-algolia@npm:3.0.1"
|
||||
"@docusaurus/theme-search-algolia@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/theme-search-algolia@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docsearch/react": "npm:^3.5.2"
|
||||
"@docusaurus/core": "npm:3.0.1"
|
||||
"@docusaurus/logger": "npm:3.0.1"
|
||||
"@docusaurus/plugin-content-docs": "npm:3.0.1"
|
||||
"@docusaurus/theme-common": "npm:3.0.1"
|
||||
"@docusaurus/theme-translations": "npm:3.0.1"
|
||||
"@docusaurus/utils": "npm:3.0.1"
|
||||
"@docusaurus/utils-validation": "npm:3.0.1"
|
||||
"@docusaurus/core": "npm:3.1.1"
|
||||
"@docusaurus/logger": "npm:3.1.1"
|
||||
"@docusaurus/plugin-content-docs": "npm:3.1.1"
|
||||
"@docusaurus/theme-common": "npm:3.1.1"
|
||||
"@docusaurus/theme-translations": "npm:3.1.1"
|
||||
"@docusaurus/utils": "npm:3.1.1"
|
||||
"@docusaurus/utils-validation": "npm:3.1.1"
|
||||
algoliasearch: "npm:^4.18.0"
|
||||
algoliasearch-helper: "npm:^3.13.3"
|
||||
clsx: "npm:^2.0.0"
|
||||
@ -4355,31 +4355,32 @@ __metadata:
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: c5b5dc54a010cef66a6a6e616a5f0c65b443c0f87156c1fea4ee58bc834e1eb2eacc0a00e1e3c15ca030567055071a9d4ee882681093c8c37d478cfc13fc26df
|
||||
checksum: 195454130d69c171cd138e1a2aaaf9fdb5caa8192b5c50b3ea6b5f600e7297df6e9e9fd25ceb8f9a06d90476c9d61be58d0603693493c2f413b215f50827d9c6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/theme-translations@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/theme-translations@npm:3.0.1"
|
||||
"@docusaurus/theme-translations@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/theme-translations@npm:3.1.1"
|
||||
dependencies:
|
||||
fs-extra: "npm:^11.1.1"
|
||||
tslib: "npm:^2.6.0"
|
||||
checksum: 1f75dbff7c7835870d857f4f0a9c159d84678f13f31ed76cdade451aa08ab2db53bed983ee1e441e3c308387c63d56fb65ae32ef328cdae04f790e0166d72c2c
|
||||
checksum: 8f118d6c8b1db719cd62bef0aceec6b1ebd1b0d00960a99360a0b7e337fddb689ca0f1a0f580b25fa4bbfce83966b6f9ddb6b607a105337f1d6388b4a1522e5f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/tsconfig@npm:3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "@docusaurus/tsconfig@npm:3.0.0"
|
||||
checksum: 429db512db045cd3708d794eca3c51b97cf756e36bc16ebcc92144bdbcf2bf5e960600871121a8c177a0520c548e60bdfed5eba551c7ae13aafa409d493855ae
|
||||
"@docusaurus/tsconfig@npm:3.1.0":
|
||||
version: 3.1.0
|
||||
resolution: "@docusaurus/tsconfig@npm:3.1.0"
|
||||
checksum: bb2bfdc16aaa37a92a13ecb00d3e041e578c906618c563955b174e7a4ef602863e8d13debf0e2b60db6de118ad684275be5e73c036e695a3027fab0d16800f85
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/types@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/types@npm:3.0.1"
|
||||
"@docusaurus/types@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/types@npm:3.1.1"
|
||||
dependencies:
|
||||
"@mdx-js/mdx": "npm:^3.0.0"
|
||||
"@types/history": "npm:^4.7.11"
|
||||
"@types/react": "npm:*"
|
||||
commander: "npm:^5.1.0"
|
||||
@ -4391,13 +4392,13 @@ __metadata:
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
checksum: 6ec48cb08f9b40a675816ceafc3a53c6dfdb61b8eea2cc289963c9dc5a5b57fa2e5b9e34e7c7d40c8c198260fe2c175c97ccd7bf1addd4adecea83a8becd303e
|
||||
checksum: 7322d1f1c19f4c869fe29af58cb8d1fc59b6a7173fc9a019ed75c70a850a89701a0ec77cd3e12c0979f86c18078430f62f72f30cbebad1e19802c5c7f2bed079
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/utils-common@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/utils-common@npm:3.0.1"
|
||||
"@docusaurus/utils-common@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/utils-common@npm:3.1.1"
|
||||
dependencies:
|
||||
tslib: "npm:^2.6.0"
|
||||
peerDependencies:
|
||||
@ -4405,28 +4406,28 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
"@docusaurus/types":
|
||||
optional: true
|
||||
checksum: 3c446655ddbda2052c08c46e6c06e68dab9d4203704aa5c81f29b38a57a636852a8e794dc4cbe4d11bf176e99d50a4db91ec8b650fc8ff55673d63066d246d97
|
||||
checksum: b483b4626c521e01a4b8ef1e65636e3a99eedae29177f9ee1052268bd5f5f56e12e9a89563792719f3493909e2afc91a1f36532e3e7e290fc933be1e5fed7d01
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/utils-validation@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/utils-validation@npm:3.0.1"
|
||||
"@docusaurus/utils-validation@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/utils-validation@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/logger": "npm:3.0.1"
|
||||
"@docusaurus/utils": "npm:3.0.1"
|
||||
"@docusaurus/logger": "npm:3.1.1"
|
||||
"@docusaurus/utils": "npm:3.1.1"
|
||||
joi: "npm:^17.9.2"
|
||||
js-yaml: "npm:^4.1.0"
|
||||
tslib: "npm:^2.6.0"
|
||||
checksum: 874b761f4f59cbcc64f3b33a9e0cecdf0221686263237add53ac6cbf73db03b28252af86154f5546b3a2db1718a4287f2ed5eb9b4390da0a410778cadbf445ae
|
||||
checksum: 7075de973c06b0a87ba6ec73ce4f3e79cd1d572823b65f6ebb974459b34353e72a085feaf1358c4841e9ccebc1426c5489dc28e694a47fe177f6270e6979d563
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@docusaurus/utils@npm:3.0.1":
|
||||
version: 3.0.1
|
||||
resolution: "@docusaurus/utils@npm:3.0.1"
|
||||
"@docusaurus/utils@npm:3.1.1":
|
||||
version: 3.1.1
|
||||
resolution: "@docusaurus/utils@npm:3.1.1"
|
||||
dependencies:
|
||||
"@docusaurus/logger": "npm:3.0.1"
|
||||
"@docusaurus/logger": "npm:3.1.1"
|
||||
"@svgr/webpack": "npm:^6.5.1"
|
||||
escape-string-regexp: "npm:^4.0.0"
|
||||
file-loader: "npm:^6.2.0"
|
||||
@ -4448,7 +4449,7 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
"@docusaurus/types":
|
||||
optional: true
|
||||
checksum: b15ff773b41a27dadd68a8d10476e77270de1133da0d102b536aa4a8ba758379aa77686002f283d7126365a39487bedafdc11f2c5cbfa088bb9061f4b0c05d99
|
||||
checksum: 063219351c630be7f16b51aa989f4dd479bb3f941ff44f7b857d4713d954e4c64626e17404eb11b3bd6ef218bd5a4a1412b9c42a30c53fd9748bb04a0aa31faf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@ -43290,10 +43291,10 @@ __metadata:
|
||||
"@chakra-ui/accordion": "npm:^2.3.0"
|
||||
"@chakra-ui/system": "npm:^2.6.0"
|
||||
"@codesandbox/sandpack-react": "npm:^2.11.3"
|
||||
"@docusaurus/core": "npm:^3.0.0"
|
||||
"@docusaurus/module-type-aliases": "npm:^3.0.0"
|
||||
"@docusaurus/preset-classic": "npm:^3.0.0"
|
||||
"@docusaurus/tsconfig": "npm:3.0.0"
|
||||
"@docusaurus/core": "npm:^3.1.0"
|
||||
"@docusaurus/module-type-aliases": "npm:^3.1.0"
|
||||
"@docusaurus/preset-classic": "npm:^3.1.0"
|
||||
"@docusaurus/tsconfig": "npm:3.1.0"
|
||||
"@emotion/react": "npm:^11.11.1"
|
||||
"@emotion/styled": "npm:^11.11.0"
|
||||
"@floating-ui/react": "npm:^0.24.3"
|
||||
|
Loading…
Reference in New Issue
Block a user