init the reference docs

This commit is contained in:
Copple
2022-07-31 15:39:17 +02:00
parent fef40ace54
commit be84fc8de4
94 changed files with 25752 additions and 1501 deletions
+20
View File
@@ -0,0 +1,20 @@
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
+41
View File
@@ -0,0 +1,41 @@
# Reference Docs
Supabase Reference Docs
## Maintainers
If you are a maintainer of any tools in the Supabase ecosystem, you can use this site to provide documentation for the tools & libraries that you maintain.
## Types of docs
There are many types of docs:
1. Guides: teach developers how to use a product. "I have XX problem, how do I solve it?"
2. Tutorials: walk-throughs, have a large outcome. "Build a React application with Supabase".
3. Explanations: teach developers about a broad topic. "What is a database?"
4. Reference: technical descriptions of tools and how to use them. "What errors does the API return?"
In these docs, you should focus only on the fourth type: "Reference Docs".
## Versioning
All tools have versioned docs, which are kept in separate folders. For example, the CLI has the following folders and files:
- `cli`: the "next" release.
- `cli_spec`: contains the DocSpec for the "next" release (see below).
- `cli_versioned_docs`: a version of the documentation for every release (including the most current version).
- `cli_versioned_sidebars`: a version of the sidebar for every release (including the most current version).
When you release a new version of a tool, you should also release a new version of the docs. You can do this via the command line. For example, if you just released the CLI version `1.0.1`:
```
npm run cli:version 1.0.1
```
## DocSpec
We use documentation specifications which can be used to generate human-readable docs.
- OpenAPI: for documenting API endpoints.
- SDKSpec (custom to Supabase): for SDKs and client libraries.
- ConfigSpec (custom to Supabase): for configuration options.
- CLISpec (custom to Supabase): for CLI commands and usage.
The benefit of using custom specifications is that we can generate many other types from a strict schema (eg, HTML and manpages).
It also means that we can switch any documentation system we want. On this site we use Docusaurus, but in Supabase's official website we use a custom React site and expose only a subset of the available API for each tool.
+9
View File
@@ -0,0 +1,9 @@
---
slug: /
sidebar_position: 1
sidebar_label: Introduction
---
# Supabase API
Some docs
+7
View File
@@ -0,0 +1,7 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
+63
View File
@@ -0,0 +1,63 @@
---
id: usage
title: Usage
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
An isomorphic Javascript library for GoTrue.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## New user signup
```js
const { user, session, error } = await gotrue.signUp({
email: 'example@email.com',
password: 'example-password',
})
```
### Attributes
- param-signup-options
- param-options
### Notes
- By default, the user will need to verify their email address before logging in. If you would like to change this, you can disable "Email Confirmations" by going to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If "Email Confirmations" is turned on, a `user` is returned but `session` will be null
- If "Email Confirmations" is turned off, both a `user` and a `session` will be returned
- When the user confirms their email address, they will be redirected to localhost:3000 by default. To change this, you can go to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If signUp() is called for an existing confirmed user:
- If "Enable email confirmations" is enabled on the "Authentication" -> "Settings" page, an obfuscated / fake user object will be returned.
- If "Enable email confirmations" is disabled, an error with a message "User already registered" will be returned.
- To check if a user already exists, refer to getUser().
### Examples
#### Sign up with email
```js
const { user, session, error } = await supabase.auth.signUp({
email: 'example@email.com',
password: 'example-password',
})
```
+1
View File
@@ -0,0 +1 @@
[]
+359
View File
@@ -0,0 +1,359 @@
---
id: config
title: Configuration
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
A `config.toml` file is generated after running `supabase init`.
This file is located in the `supabase` folder under `supabase/config.toml`.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## General
### `project_id`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `project_id` | `true` | `` |
A string used to distinguish different Supabase projects on the same host. Defaults to the working directory name when running `supabase init`.
See also:
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## API
### `api.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `api.port` | `true` | `54321` |
Port to use for the API URL.
See also:
- [PostgREST configuration](https://postgrest.org/en/stable/configuration.html)
### `api.extra_search_path`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `api.extra_search_path` | `true` | `["extensions"]` |
Extra schemas to add to the `search_path` of every request.
See also:
- [PostgREST configuration](https://postgrest.org/en/stable/configuration.html)
### `api.max_rows`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `api.max_rows` | `true` | `1000` |
The maximum number of rows returned from a view, table, or stored procedure. Limits payload size for accidental or malicious requests.
See also:
- [PostgREST configuration](https://postgrest.org/en/stable/configuration.html)
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Database
### `db.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `db.port` | `true` | `54322` |
Port to use for the local database URL.
See also:
- [PostgreSQL configuration](https://postgrest.org/en/stable/configuration.html)
### `db.major_version`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `db.major_version` | `true` | `14` |
The database major version to use. This has to be the same as your remote database's. Run `SHOW server_version;` on the remote database to check.
See also:
- [PostgreSQL configuration](https://postgrest.org/en/stable/configuration.html)
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Dashboard
### `studio.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `studio.port` | `true` | `54323` |
Port to use for Supabase Studio.
See also:
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Local Development
### `inbucket.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `inbucket.port` | `true` | `54324` |
Port to use for the email testing server web interface.
Emails sent with the local dev setup are not actually sent - rather, they are monitored, and you can view the emails that would have been sent from the web interface.
See also:
- [Inbucket documentation](https://www.inbucket.org)
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Auth
### `auth.site_url`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.site_url` | `true` | `"http://localhost:3000"` |
The base URL of your website. Used as an allow-list for redirects and for constructing URLs used in emails.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.additional_redirect_urls`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.additional_redirect_urls` | `true` | `["https://localhost:3000"]` |
A list of _exact_ URLs that auth providers are permitted to redirect to post authentication.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.jwt_expiry`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.jwt_expiry` | `true` | `3600` |
How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one week).
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.enable_signup`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.enable_signup` | `true` | `true` |
Allow/disallow new user signups to your project.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.email.enable_signup`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.email.enable_signup` | `true` | `true` |
Allow/disallow new user signups via email to your project.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.email.double_confirm_changes`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.email.double_confirm_changes` | `true` | `true` |
If enabled, a user will be required to confirm any email change on both the old, and new email addresses. If disabled, only the new email is required to confirm.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.email.enable_confirmations`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.email.enable_confirmations` | `true` | `true` |
If enabled, users need to confirm their email address before signing in.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.external.<provider>.enabled`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.external.<provider>.enabled` | `true` | `true` |
Use an external OAuth provider. The full list of providers are:
- `apple`
- `azure`
- `bitbucket`
- `discord`
- `facebook`
- `github`
- `gitlab`
- `google`
- `twitch`
- `twitter`
- `slack`
- `spotify`
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.external.<provider>.client_id`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.external.<provider>.client_id` | `true` | `""` |
Client ID for the external OAuth provider.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.external.<provider>.secret`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.external.<provider>.secret` | `true` | `""` |
Client secret for the external OAuth provider.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
+10
View File
@@ -0,0 +1,10 @@
---
id: intro
slug: /
sidebar_position: 1
sidebar_label: Introduction
---
# Supabase CLI
Manage your Supabase projects.
+7
View File
@@ -0,0 +1,7 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
+120
View File
@@ -0,0 +1,120 @@
---
id: usage
title: Usage
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
Supabase CLI.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Manage your Edge Functions
Manage your Edge Functions.
### Usage
```sh
supabase functions [command] [flags]
```
### Available Commands
- supabase-functions-new
- supabase-functions-deploy
- supabase-functions-delete
### Options
```
-h, --help help for functions
```
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Create an Edge Functions
Create an Edge Functions.
### Usage
```sh
supabase functions new <Function name>
```
### Options
```
-h, --help help for functions
```
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Deploy an Edge Functions
Deploy an Edge Functions.
### Usage
```sh
supabase functions deploy <Function name>
````
### Options
```
-h, --help help for functions
```
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Delete an Edge Functions
Delete an Edge Functions.
### Usage
```sh
supabase functions delete <Function name>
```
### Options
```
-h, --help help for functions
```
@@ -0,0 +1,359 @@
---
id: config
title: Configuration
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
A `config.toml` file is generated after running `supabase init`.
This file is located in the `supabase` folder under `supabase/config.toml`.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## General
### `project_id`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `project_id` | `true` | `` |
A string used to distinguish different Supabase projects on the same host. Defaults to the working directory name when running `supabase init`.
See also:
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## API
### `api.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `api.port` | `true` | `54321` |
Port to use for the API URL.
See also:
- [PostgREST configuration](https://postgrest.org/en/stable/configuration.html)
### `api.extra_search_path`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `api.extra_search_path` | `true` | `["extensions"]` |
Extra schemas to add to the `search_path` of every request.
See also:
- [PostgREST configuration](https://postgrest.org/en/stable/configuration.html)
### `api.max_rows`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `api.max_rows` | `true` | `1000` |
The maximum number of rows returned from a view, table, or stored procedure. Limits payload size for accidental or malicious requests.
See also:
- [PostgREST configuration](https://postgrest.org/en/stable/configuration.html)
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Database
### `db.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `db.port` | `true` | `54322` |
Port to use for the local database URL.
See also:
- [PostgreSQL configuration](https://postgrest.org/en/stable/configuration.html)
### `db.major_version`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `db.major_version` | `true` | `14` |
The database major version to use. This has to be the same as your remote database's. Run `SHOW server_version;` on the remote database to check.
See also:
- [PostgreSQL configuration](https://postgrest.org/en/stable/configuration.html)
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Dashboard
### `studio.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `studio.port` | `true` | `54323` |
Port to use for Supabase Studio.
See also:
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Local Development
### `inbucket.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `inbucket.port` | `true` | `54324` |
Port to use for the email testing server web interface.
Emails sent with the local dev setup are not actually sent - rather, they are monitored, and you can view the emails that would have been sent from the web interface.
See also:
- [Inbucket documentation](https://www.inbucket.org)
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Auth
### `auth.site_url`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.site_url` | `true` | `"http://localhost:3000"` |
The base URL of your website. Used as an allow-list for redirects and for constructing URLs used in emails.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.additional_redirect_urls`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.additional_redirect_urls` | `true` | `["https://localhost:3000"]` |
A list of _exact_ URLs that auth providers are permitted to redirect to post authentication.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.jwt_expiry`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.jwt_expiry` | `true` | `3600` |
How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one week).
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.enable_signup`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.enable_signup` | `true` | `true` |
Allow/disallow new user signups to your project.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.email.enable_signup`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.email.enable_signup` | `true` | `true` |
Allow/disallow new user signups via email to your project.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.email.double_confirm_changes`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.email.double_confirm_changes` | `true` | `true` |
If enabled, a user will be required to confirm any email change on both the old, and new email addresses. If disabled, only the new email is required to confirm.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.email.enable_confirmations`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.email.enable_confirmations` | `true` | `true` |
If enabled, users need to confirm their email address before signing in.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.external.<provider>.enabled`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.external.<provider>.enabled` | `true` | `true` |
Use an external OAuth provider. The full list of providers are:
- `apple`
- `azure`
- `bitbucket`
- `discord`
- `facebook`
- `github`
- `gitlab`
- `google`
- `twitch`
- `twitter`
- `slack`
- `spotify`
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.external.<provider>.client_id`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.external.<provider>.client_id` | `true` | `""` |
Client ID for the external OAuth provider.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.external.<provider>.secret`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.external.<provider>.secret` | `true` | `""` |
Client secret for the external OAuth provider.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
@@ -0,0 +1,9 @@
---
id: intro
slug: /
sidebar_position: 1
---
# Supabase CLI
Manage your Supabase projects.
@@ -0,0 +1,7 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
@@ -0,0 +1,120 @@
---
id: usage
title: Usage
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
Supabase CLI.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Manage your Edge Functions
Manage your Edge Functions.
### Usage
```sh
supabase functions [command] [flags]
```
### Available Commands
- supabase-functions-new
- supabase-functions-deploy
- supabase-functions-delete
### Options
```
-h, --help help for functions
```
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Create an Edge Functions
Create an Edge Functions.
### Usage
```sh
supabase functions new <Function name>
```
### Options
```
-h, --help help for functions
```
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Deploy an Edge Functions
Deploy an Edge Functions.
### Usage
```sh
supabase functions deploy <Function name>
````
### Options
```
-h, --help help for functions
```
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Delete an Edge Functions
Delete an Edge Functions.
### Usage
```sh
supabase functions delete <Function name>
```
### Options
```
-h, --help help for functions
```
@@ -0,0 +1,8 @@
{
"cliSidebar": [
"intro",
"usage",
"config",
"release-notes"
]
}
+3
View File
@@ -0,0 +1,3 @@
[
"0.0.1"
]
+12
View File
@@ -0,0 +1,12 @@
---
id: config
title: Configuration
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
A `config.toml` file is generated after running `supabase init`.
This file is located in the `supabase` folder under `supabase/config.toml`.
+9
View File
@@ -0,0 +1,9 @@
---
slug: /
sidebar_position: 1
sidebar_label: Introduction
---
# GoTrue - Supabase Auth
Some docs
+7
View File
@@ -0,0 +1,7 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
@@ -0,0 +1,12 @@
---
id: config
title: Configuration
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
A `config.toml` file is generated after running `supabase init`.
This file is located in the `supabase` folder under `supabase/config.toml`.
@@ -0,0 +1,8 @@
---
slug: /
sidebar_position: 1
---
# GoTrue - Supabase Auth
Some docs
@@ -0,0 +1,8 @@
---
slug: /
sidebar_position: 1
---
# GoTrue - Supabase Auth
Some docs
@@ -0,0 +1,7 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
@@ -0,0 +1,7 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
@@ -0,0 +1,7 @@
{
"goTrueSidebar": [
"intro",
"config",
"release-notes"
]
}
+3
View File
@@ -0,0 +1,3 @@
[
"0.0.1"
]
+28
View File
@@ -0,0 +1,28 @@
---
id: intro
slug: /
sidebar_label: Introduction
---
# Supabase Dart
Dart libraries are built and supported by the community.
```bash
dart pub add supabase
```
Find the source code on [GitHub](https://github.com/supabase/supabase-dart).
## Flutter
For Flutter project, you can use [supabase_flutter](https://github.com/supabase/supabase-flutter).
```bash
flutter pub add supabase_flutter
```
`supabase_flutter` plugin uses `supabase` plugin internally, and it adds some Flutter specific functionality such as handling deeplinks coming back from magic link verifications.
If you are creating a Flutter application, we recommend using `supabase_flutter` instead of `supabase`.
For the most part `supabase_flutter` shares the same API as `supabase` with few exceptions such as initialization or OAuth sign in.
@@ -0,0 +1,7 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
+115
View File
@@ -0,0 +1,115 @@
---
id: usage
title: Usage
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
Supabase Dart.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Initializing the client library
```dart
final supabase = SupabaseClient('<SUPABASE_URL>', '<SUPABASE_ANON_KEY>');
```
### Attributes
### Notes
## Dart
You can initialize a new Supabase client using the `SupabaseClient()` method.
The Supabase client is your entrypoint to the rest of the Supabase functionality
and is the easiest way to interact with everything we offer within the Supabase ecosystem.
## Flutter
For `supabase_flutter`, you will be using the static `initialize()` method on `Supabase` class.
### Examples
####
```dart
final supabase = SupabaseClient('https://xyzcompany.supabase.co', 'public-anon-key');
```
####
```dart title="main.dart"
Future<void> main() async {
await Supabase.initialize(url: 'https://xyzcompany.supabase.co', anonKey: 'public-anon-key');
runApp(MyApp());
}
```
## Create a new user.
```dart
final res = await supabase.auth.signUp('<USER_EMAIL>', '<USER_PASSWORD>');
```
### Attributes
### Notes
- By default, the user will need to verify their email address before logging in. If you would like to change this, you can disable "Email Confirmations" by going to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If "Email Confirmations" is turned on, a user is returned but session will be null
- If "Email Confirmations" is turned off, both a `user` and a `session` will be returned
- When the user confirms their email address, they will be redirected to localhost:3000 by default. To change this, you can go to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
### Examples
#### Sign up.
```dart
final res = await supabase.auth.signUp('example@email.com', 'example-password');
final user = res.data?.user;
final error = res.error;
```
#### Sign up with third-party providers.
```dart
// Use signInWithProvider()
```
@@ -0,0 +1,28 @@
---
id: intro
slug: /
sidebar_label: Introduction
---
# Supabase Dart
Dart libraries are built and supported by the community.
```bash
dart pub add supabase
```
Find the source code on [GitHub](https://github.com/supabase/supabase-dart).
## Flutter
For Flutter project, you can use [supabase_flutter](https://github.com/supabase/supabase-flutter).
```bash
flutter pub add supabase_flutter
```
`supabase_flutter` plugin uses `supabase` plugin internally, and it adds some Flutter specific functionality such as handling deeplinks coming back from magic link verifications.
If you are creating a Flutter application, we recommend using `supabase_flutter` instead of `supabase`.
For the most part `supabase_flutter` shares the same API as `supabase` with few exceptions such as initialization or OAuth sign in.
@@ -0,0 +1,7 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
@@ -0,0 +1,115 @@
---
id: usage
title: Usage
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
Supabase Dart.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Initializing the client library
```dart
final supabase = SupabaseClient('<SUPABASE_URL>', '<SUPABASE_ANON_KEY>');
```
### Attributes
### Notes
## Dart
You can initialize a new Supabase client using the `SupabaseClient()` method.
The Supabase client is your entrypoint to the rest of the Supabase functionality
and is the easiest way to interact with everything we offer within the Supabase ecosystem.
## Flutter
For `supabase_flutter`, you will be using the static `initialize()` method on `Supabase` class.
### Examples
####
```dart
final supabase = SupabaseClient('https://xyzcompany.supabase.co', 'public-anon-key');
```
####
```dart title="main.dart"
Future<void> main() async {
await Supabase.initialize(url: 'https://xyzcompany.supabase.co', anonKey: 'public-anon-key');
runApp(MyApp());
}
```
## Create a new user.
```dart
final res = await supabase.auth.signUp('<USER_EMAIL>', '<USER_PASSWORD>');
```
### Attributes
### Notes
- By default, the user will need to verify their email address before logging in. If you would like to change this, you can disable "Email Confirmations" by going to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If "Email Confirmations" is turned on, a user is returned but session will be null
- If "Email Confirmations" is turned off, both a `user` and a `session` will be returned
- When the user confirms their email address, they will be redirected to localhost:3000 by default. To change this, you can go to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
### Examples
#### Sign up.
```dart
final res = await supabase.auth.signUp('example@email.com', 'example-password');
final user = res.data?.user;
final error = res.error;
```
#### Sign up with third-party providers.
```dart
// Use signInWithProvider()
```
@@ -0,0 +1,7 @@
{
"goTrueSidebar": [
"intro",
"usage",
"release-notes"
]
}
@@ -0,0 +1,3 @@
[
"1.0"
]
+9
View File
@@ -0,0 +1,9 @@
---
slug: /
sidebar_position: 1
sidebar_label: Introduction
---
# Supabase JavaScript Client
Some docs
@@ -0,0 +1,7 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
+63
View File
@@ -0,0 +1,63 @@
---
id: usage
title: Usage
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
An isomorphic Javascript library for GoTrue.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## New user signup
```js
const { user, session, error } = await gotrue.signUp({
email: 'example@email.com',
password: 'example-password',
})
```
### Attributes
- param-signup-options
- param-options
### Notes
- By default, the user will need to verify their email address before logging in. If you would like to change this, you can disable "Email Confirmations" by going to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If "Email Confirmations" is turned on, a `user` is returned but `session` will be null
- If "Email Confirmations" is turned off, both a `user` and a `session` will be returned
- When the user confirms their email address, they will be redirected to localhost:3000 by default. To change this, you can go to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If signUp() is called for an existing confirmed user:
- If "Enable email confirmations" is enabled on the "Authentication" -> "Settings" page, an obfuscated / fake user object will be returned.
- If "Enable email confirmations" is disabled, an error with a message "User already registered" will be returned.
- To check if a user already exists, refer to getUser().
### Examples
#### Sign up with email
```js
const { user, session, error } = await supabase.auth.signUp({
email: 'example@email.com',
password: 'example-password',
})
```
@@ -0,0 +1 @@
[]
+3
View File
@@ -0,0 +1,3 @@
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
};
+477
View File
@@ -0,0 +1,477 @@
---
id: about
slug: /
sidebar_label: About
sidebar_position: 2
---
# Reference Documentation
This section of the docs provides technical descriptions of the products and how to use them.
There are two main sections:
- Supabase Reference Docs - describes to use the tools with integrated integrated libraries.
- Tools Reference Docs - describes to use the tools with modular libraries.
## Modularity
Supabase is modular. While it may seem like a single tool, it is actually a suite of tools that are composed on top of a PostgreSQL database. This offers several advantages:
- Each tool scales independently.
- Each tool can be self-hosted.
- Developers can disable tools which are not required.
- Each tool is focused on a single task to minimize complexity.
This is a similar approach to any Enterprise-grade system with an additional focus on modularity: while some companies might cut-corners, Supabase makes modularity a priority.
## Architecture
- `Database`
- [PostgreSQL](https://www.postgresql.org/) is an object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.
- Coonection Pooling: [PgBouncer](https://www.pgbouncer.org/) is a lightweight connection pooler for PostgreSQL.
- [postgres-meta](https://github.com/supabase/postgres-meta) is a RESTful API for managing your Postgres, allowing you to fetch tables, add roles, and run queries, etc.
- `Auth`
- Authentication: [GoTrue](https://github.com/supabase/gotrue) is an SWT based API for managing users and issuing SWT tokens.
- Authorization: using [PostgreSQL Row Level Security](/docs/guides/auth/row-level-security).
- `APIs`
- Websockets: [Realtime](https://github.com/supabase/realtime) is an Elixir server that allows you to listen to PostgreSQL inserts, updates, and deletes using websockets. Realtime polls Postgres' built-in replication functionality for database changes, converts changes to JSON, then broadcasts the JSON over websockets to authorized clients.
- REST: [PostgREST](http://postgrest.org/) is a web server that turns your PostgreSQL database directly into a RESTful API
- GraphQL: [pg_graphql](https://github.com/supabase/pg_graphql) adds GraphQL support to your PostgreSQL database.
- Edge Functions: [Deno](https://deno.land/) is a modern and secure runtime for JavaScript, TypeScript, and WebAssembly.
- Reverse Proxy: [Kong](https://github.com/Kong/kong) is a cloud-native API gateway.
- `File Storage`
- [Storage](https://github.com/supabase/storage-api) provides a RESTful interface for managing Files stored in S3, using Postgres to manage permissions.
## Open source
Each part of the Supabase ecosystem is open source. Wherever possible, we support existing tools rather than developing from scratch.
We choose tools which are [OSI Compliant](https://opensource.org/licenses), with a strong bias towards MIT, Apache 2.0, and PostgreSQL licenses.
Everything we open source is licensed with one of these 3 licenses:
- MIT for client libraries
- Apache 2.0 for API servers
- PostgreSQL for any Postgres-related tooling
## Client Libraries
Supabase provides client libraries for building your products. Our approach for client libraries is modular. Each sub-library is a standalone implementation for a single system.
For example, our `supabase-js` library is a wrapper around five smaller libraries:
- `postgrest-js` (REST API)
- `gotrue-js` (Authentication)
- `storage-js` (File Storage)
- `realtime-js` (Websockets)
- `functions-js` (Edge Functions)
## Community
Supabase officially supports the Javascript libraries, and all other libraries are community-maintained. This is one way that we try to support and foster an open source ecosystem.
<table style={{ tableLayout: 'fixed', whiteSpace: 'nowrap' }}>
<tr>
<th colspan="2" style={{textAlign: 'right'}}>Supabase Tool:</th>
<th>
<a href="https://github.com/postgrest/postgrest" target="_blank" rel="noopener noreferrer">
PostgREST
</a>
</th>
<th>
<a href="https://github.com/supabase/gotrue" target="_blank" rel="noopener noreferrer">
GoTrue
</a>
</th>
<th>
<a href="https://github.com/supabase/realtime" target="_blank" rel="noopener noreferrer">
Realtime
</a>
</th>
<th>
<a href="https://github.com/supabase/storage-api" target="_blank" rel="noopener noreferrer">
Storage
</a>
</th>
<th>
<a
href="https://github.com/supabase/functions"
target="_blank"
rel="noopener noreferrer"
>
Edge Functions
</a>
</th>
</tr>
<th colspan="7"></th>
<tr>
<td>JavaScript (TypeScript)</td>
<td>
<a href="https://github.com/supabase/supabase-js" target="_blank" rel="noopener noreferrer">
supabase-js
</a>
</td>
<td>
<a href="https://github.com/supabase/postgrest-js" target="_blank" rel="noopener noreferrer">
postgrest-js
</a>
</td>
<td>
<a href="https://github.com/supabase/gotrue-js" target="_blank" rel="noopener noreferrer">
gotrue-js
</a>
</td>
<td>
<a href="https://github.com/supabase/realtime-js" target="_blank" rel="noopener noreferrer">
realtime-js
</a>
</td>
<td>
<a href="https://github.com/supabase/storage-js" target="_blank" rel="noopener noreferrer">
storage-js
</a>
</td>
<td>
<a href="https://github.com/supabase/functions-js" target="_blank" rel="noopener noreferrer">
functions-js
</a>
</td>
</tr>
<tr>
<td>Dart</td>
<td>
<a
href="https://github.com/supabase-community/supabase-dart"
target="_blank"
rel="noopener noreferrer"
>
supabase-dart
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/postgrest-dart"
target="_blank"
rel="noopener noreferrer"
>
postgrest-dart
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/gotrue-dart"
target="_blank"
rel="noopener noreferrer"
>
gotrue-dart
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/realtime-dart"
target="_blank"
rel="noopener noreferrer"
>
realtime-dart
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/storage-dart"
target="_blank"
rel="noopener noreferrer"
>
storage-dart
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/functions-dart"
target="_blank"
rel="noopener noreferrer"
>
functions-dart
</a>
</td>
</tr>
<tr>
<td>Flutter</td>
<td>
<a
href="https://github.com/supabase-community/supabase-flutter"
target="_blank"
rel="noopener noreferrer"
>
supabase-flutter
</a>
</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<th colspan="7">Community</th>
<tr>
<td>C#</td>
<td>
<a
href="https://github.com/supabase-community/supabase-csharp"
target="_blank"
rel="noopener noreferrer"
>
supabase-csharp
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/postgrest-csharp"
target="_blank"
rel="noopener noreferrer"
>
postgrest-csharp
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/gotrue-csharp"
target="_blank"
rel="noopener noreferrer"
>
gotrue-csharp
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/realtime-csharp"
target="_blank"
rel="noopener noreferrer"
>
realtime-csharp
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/storage-csharp"
target="_blank"
rel="noopener noreferrer"
>
storage-csharp
</a>
</td>
<td>-</td>
</tr>
<tr>
<td>Go</td>
<td>-</td>
<td>
<a
href="https://github.com/supabase-community/postgrest-go"
target="_blank"
rel="noopener noreferrer"
>
postgrest-go
</a>
</td>
<td>-</td>
<td>-</td>
<td>
<a
href="https://github.com/supabase-community/storage-go"
target="_blank"
rel="noopener noreferrer"
>
storage-go
</a>
</td>
<td>-</td>
</tr>
<tr>
<td>Java</td>
<td>-</td>
<td>-</td>
<td>
<a
href="https://github.com/supabase-community/gotrue-java"
target="_blank"
rel="noopener noreferrer"
>
gotrue-java
</a>
</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>Kotlin</td>
<td>-</td>
<td>
<a
href="https://github.com/supabase-community/postgrest-kt"
target="_blank"
rel="noopener noreferrer"
>
postgrest-kt
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/gotrue-kt"
target="_blank"
rel="noopener noreferrer"
>
gotrue-kt
</a>
</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>Python</td>
<td>
<a
href="https://github.com/supabase-community/supabase-py"
target="_blank"
rel="noopener noreferrer"
>
supabase-py
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/postgrest-py"
target="_blank"
rel="noopener noreferrer"
>
postgrest-py
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/gotrue-py"
target="_blank"
rel="noopener noreferrer"
>
gotrue-py
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/realtime-py"
target="_blank"
rel="noopener noreferrer"
>
realtime-py
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/storage-py"
target="_blank"
rel="noopener noreferrer"
>
storage-py
</a>
</td>
<td>-</td>
</tr>
<tr>
<td>Ruby</td>
<td>
<a
href="https://github.com/supabase-community/supabase-rb"
target="_blank"
rel="noopener noreferrer"
>
supabase-rb
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/postgrest-rb"
target="_blank"
rel="noopener noreferrer"
>
postgrest-rb
</a>
</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>Rust</td>
<td>-</td>
<td>
<a
href="https://github.com/supabase-community/postgrest-rs"
target="_blank"
rel="noopener noreferrer"
>
postgrest-rs
</a>
</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>Swift</td>
<td>
<a
href="https://github.com/supabase-community/supabase-swift"
target="_blank"
rel="noopener noreferrer"
>
supabase-swift
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/postgrest-swift"
target="_blank"
rel="noopener noreferrer"
>
postgrest-swift
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/gotrue-swift"
target="_blank"
rel="noopener noreferrer"
>
gotrue-swift
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/realtime-swift"
target="_blank"
rel="noopener noreferrer"
>
realtime-swift
</a>
</td>
<td>
<a
href="https://github.com/supabase-community/storage-swift"
target="_blank"
rel="noopener noreferrer"
>
storage-swift
</a>
</td>
<td>-</td>
</tr>
</table>
@@ -0,0 +1,123 @@
---
id: http
title: 'http: RESTful Client'
description: An HTTP Client for PostgreSQL Functions.
---
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
The `http` extension allows you to call RESTful endpoints within Postgres.
## Quick demo
<iframe
className="w-full video-with-border"
width="640"
height="385"
src="https://www.youtube-nocookie.com/embed/rARgrELRCwY"
frameBorder="1"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
></iframe>
## Overview
Let's cover some basic concepts:
- REST: stands for REpresentational State Transfer. It's simply a way to request data from external services.
- RESTful APIs are servers which accept HTTP "calls". The calls are typically:
- `GET` Read only access to a resource.
- `POST` Creates a new resource.
- `DELETE` Removes a resource.
- `PUT` Updates an existing resource or creates a new resource.
You can use the `http` extension to make these network requests from Postgres.
## Usage
### Enabling
<Tabs
defaultValue="UI"
values={[
{label: 'UI', value: 'UI'},
{label: 'SQL', value: 'SQL'},
]}>
<TabItem value="UI">
```sh
1. Go to the Database page.
2. Click on "Extensions" in the sidebar.
3. Search for "http".
4. Click the toggle.
```
</TabItem>
<TabItem value="SQL">
```sql
-- Example: enable the "http" extension
create extension http with schema extensions;
-- Example: disable the "http" extension
drop extension if exists http;
```
Even though the SQL code is `create extension`, this is the equivalent of "enabling the extension".
To disable an extension you can call `drop extension`.
It's good practice to create the extension within a separate schema (like `extensions`) to keep your database clean.
</TabItem>
</Tabs>
### Available functions
While the main usage is simply `http('http_request')`, there are 5 wrapper functions for specific functionality:
- `http_get()`
- `http_post()`
- `http_put()`
- `http_delete()`
- `http_head()`
### Returned values
A successful call to a web URL from the `http` extension returns a record with the following fields:
- `status`: integer
- `content_type`: character varying
- `headers`: http_header[]
- `content`: character varying. Typically you would want to cast this to `jsonb` using the format `content::jsonb`
## Examples
### Simple `GET` example
```sql
select
"status", "content"::jsonb
from
http_get('https://jsonplaceholder.typicode.com/todos/1');
```
### Simple `POST` example
```sql
select
"status", "content"::jsonb
from
http_post(
'https://jsonplaceholder.typicode.com/posts',
'{ "title": "foo", "body": "bar", "userId": 1 }',
'application/json'
);
```
## Resources
- Official [`http` GitHub Repository](https://github.com/pramsey/pgsql-http).
@@ -0,0 +1,5 @@
---
id: intro
---
Some info about extensions.
@@ -0,0 +1,129 @@
---
id: pgtap
title: 'pgTAP: Unit Testing'
description: Unit testing in PostgreSQL.
---
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
`pgTAP` is a unit testing extension for PostgreSQL.
## Overview
Let's cover some basic concepts:
- Unit tests: allow you to test small parts of a system (like a database table!).
- TAP: stands for [Test Anything Protocol](http://testanything.org/). It is an framework which aims to simplify the error reporting during testing.
## Usage
### Enabling
<Tabs
defaultValue="UI"
values={[
{label: 'UI', value: 'UI'},
{label: 'SQL', value: 'SQL'},
]}>
<TabItem value="UI">
```sh
1. Go to the Database page.
2. Click on "Extensions" in the sidebar.
3. Search for "pgtap".
4. Click the toggle.
```
<video width="99%" muted playsInline controls={true}>
<source
src="/docs/videos/toggle-extensions.mp4"
type="video/mp4"
muted
playsInline
/>
</video>
</TabItem>
<TabItem value="SQL">
```sql
-- Enable the "pgtap" extension
create extension pgtap with schema extensions;
-- Disable the "pgtap" extension
drop extension if exists pgtap;
```
Even though the SQL code is `create extension`, this is the equivalent of "enabling the extension".
To disable an extension you can call `drop extension`.
It's good practice to create the extension within a separate schema (like `extensions`) to keep your database clean.
</TabItem>
</Tabs>
### Managing tests
It's a good practice to keep all your tests in a separate schema.
```sql
create schema tests;
```
### Creating a test
@TODO
- Create a plan
- We should come up with a recommendation on how to run the tests. Via a function? External scripts?
- Eventually this can be done via our CLI
### Running a test
@TODO
## Examples
Let's look at a few different tests which could be helpful in your project.
### Testing tables
```sql
begin;
select plan( 1 );
select has_table( 'profiles' );
select * from finish();
rollback;
```
API:
- [`has_table()`](https://pgtap.org/documentation.html#has_table)
### Testing columns
```sql
begin;
select plan( 1 );
select has_column( 'profiles', 'id' );
select col_is_pk( 'profiles', 'id' );
select * from finish();
rollback;
```
API:
- [`has_column()`](https://pgtap.org/documentation.html#has_column)
- [`col_is_pk()`](https://pgtap.org/documentation.html#col_is_pk)
## Resources
- Official [`pgTAP` documentation](https://pgtap.org/).
@@ -0,0 +1,149 @@
---
id: plv8
title: 'plv8: JavaScript Language'
description: JavaScript language for PostgreSQL.
---
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
The `plv8` extension allows you use JavaScript within Postgres.
## Overview
While Postgres natively runs SQL, it can also run other "procedural languages".
`plv8` allows you to run JavaScript code - specifically any code that runs on the [V8 JavaScript engine](https://v8.dev).
It can be used for database functions, triggers, queries and more.
## Usage
### Enabling
<Tabs
defaultValue="UI"
values={[
{label: 'UI', value: 'UI'},
{label: 'SQL', value: 'SQL'},
]}>
<TabItem value="UI">
```sh
1. Go to the Database page.
2. Click on "Extensions" in the sidebar.
3. Search for "plv8".
4. Click the toggle.
```
</TabItem>
<TabItem value="SQL">
```sql
-- Example: enable the "plv8" extension
create extension plv8;
-- Example: disable the "plv8" extension
drop extension if exists plv8;
```
Even though the SQL code is `create extension`, this is the equivalent of "enabling the extension".
To disable an extension you can call `drop extension`.
Procedural languages are automatically installed within `pg_catalog`, so you don't need to specify a schema.
</TabItem>
</Tabs>
### Creating `plv8` functions
Functions written in `plv8` are written just like any other PostgreSQL functions, only
with the `language` identifier set to `plv8`.
```sql
create or replace function function_name()
returns void as $$
// V8 JavaScript
// code
// here
$$ language plv8;
```
You can call `plv8` functions like any other Postgres function:
<Tabs
defaultValue="SQL"
values={[
{label: 'SQL', value: 'SQL'},
{label: 'JavaScript', value: 'JS'},
]}>
<TabItem value="SQL">
```sql
select function_name();
```
</TabItem>
<TabItem value="JS">
```js
const { data, error } = supabase.rpc('function_name')
```
</TabItem>
</Tabs>
## Examples
### Scalar Functions
A [scalar function](https://plv8.github.io/#scalar-function-calls) is anything that takes in some user input and returns a single result.
```sql
create or replace function hello_world(name text)
returns text as $$
let output = `Hello, ${name}!`;
return output;
$$ language plv8;
```
### Executing SQL
You can execute SQL within `plv8` code using the [`plv8.execute` function](https://plv8.github.io/#plv8-execute).
```sql
create or replace function update_user(id bigint, first_name text)
returns smallint as $$
var num_affected = plv8.execute(
'update profiles set first_name = $1 where id = $2',
[first_name, id]
);
return num_affected;
$$ language plv8;
```
### Set-returning Functions
A [set-returning function](https://plv8.github.io/#set-returning-function-calls) is anything that returns a full set of results - for example, rows in a table.
```sql
create or replace function get_messages()
returns setof messages as $$
var json_result = plv8.execute(
'select * from messages'
);
return json_result;
$$ language plv8;
```
## Resources
- Official [`plv8` documentation](https://plv8.github.io/).
- [plv8 GitHub Repository](https://github.com/plv8/plv8).
@@ -0,0 +1,94 @@
---
id: uuid-ossp
title: 'uuid-ossp: Unique Identifiers'
description: A UUID generator for PostgreSQL.
---
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
The `uuid-ossp` extension can be used to generate a `UUID`.
## Overview
A `UUID` is a "Universally Unique Identifer" and it is, for practical purposes, unique.
This makes them particularly well suited as Primary Keys. It is occasionally referred to as a `GUID`, which stands for "Globally Unique Identifer".
## Usage
### Enabling
<Tabs
defaultValue="UI"
values={[
{label: 'UI', value: 'UI'},
{label: 'SQL', value: 'SQL'},
]}>
<TabItem value="UI">
```sh
1. Go to the Database page.
2. Click on "Extensions" in the sidebar.
3. Search for "uuid-ossp".
4. Click the toggle.
```
</TabItem>
<TabItem value="SQL">
```sql
-- Example: enable the "uuid-ossp" extension
create extension "uuid-ossp" with schema extensions;
-- Example: disable the "uuid-ossp" extension
drop extension if exists "uuid-ossp";
```
Even though the SQL code is `create extension`, this is the equivalent of "enabling the extension".
To disable an extension you can call `drop extension`.
It's good practice to create the extension within a separate schema (like `extensions`) to keep your database clean.
</TabItem>
</Tabs>
### The `uuid` type
Once the extension is enabled, you now have access to a `uuid` type.
### `uuid_generate_v1()`
Creates a UUID value based on the combination of computers MAC address, current timestamp, and a random value.
### `uuid_generate_v4()`
Creates UUID values based solely on random numbers.
## Examples
### Within a query
```sql
select uuid_generate_v4();
```
### As a Primary Key
Automatically create a unique, random ID in a table:
```sql
create table contacts (
id uuid default uuid_generate_v4(),
first_name text,
last_name text,
primary key (id)
);
```
## Resources
- [The Basics Of PostgreSQL `UUID` Data Type](https://www.postgresqltutorial.com/postgresql-uuid/).
+178
View File
@@ -0,0 +1,178 @@
// @ts-nocheck
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require('prism-react-renderer/themes/github')
const darkCodeTheme = require('prism-react-renderer/themes/dracula')
const mainNavbar = require('./nav/_referenceNavbar')
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'Supabase Tools',
tagline: 'Documentation for the Supabase Ecosystem',
url: 'https://supabase.tools',
baseUrl: '/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
// GitHub pages deployment config.
// If you aren't using GitHub pages, you don't need these.
organizationName: 'supabase', // Usually your GitHub org/user name.
projectName: 'supabase.tools', // Usually your repo name.
// Even if you don't use internalization, you can use this field to set useful
// 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'],
},
plugins: [
[
'@docusaurus/plugin-content-docs',
{
id: '_api',
path: '_api',
routeBasePath: 'api',
sidebarPath: require.resolve('./nav/api_sidebars.js'),
breadcrumbs: false,
},
],
[
'@docusaurus/plugin-content-docs',
{
id: '_cli',
path: '_cli',
routeBasePath: 'cli',
sidebarPath: require.resolve('./nav/cli_sidebars.js'),
breadcrumbs: false,
},
],
[
'@docusaurus/plugin-content-docs',
{
id: '_gotrue',
path: '_gotrue',
routeBasePath: 'gotrue',
sidebarPath: require.resolve('./nav/gotrue_sidebars.js'),
breadcrumbs: false,
},
],
[
'@docusaurus/plugin-content-docs',
{
id: '_supabase_dart',
path: '_supabase_dart',
routeBasePath: 'supabase-dart',
sidebarPath: require.resolve('./nav/supabase_dart_sidebars.js'),
breadcrumbs: false,
},
],
[
'@docusaurus/plugin-content-docs',
{
id: '_supabase_js',
path: '_supabase_js',
routeBasePath: 'supabase-js',
sidebarPath: require.resolve('./nav/supabase_js_sidebars.js'),
breadcrumbs: false,
},
],
],
presets: [
[
'classic',
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: {
routeBasePath: '/', // Serve the docs at the site's root
sidebarPath: require.resolve('./nav/_referenceSidebars.js'),
breadcrumbs: false,
},
blog: false,
theme: {
customCss: require.resolve('./src/css/custom.css'),
},
}),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
navbar: {
// title: 'Supabase Tools',
logo: {
alt: 'Supabase Tools',
src: 'img/supabase-tools-light.svg',
srcDark: 'img/supabase-tools-dark.svg',
},
items: mainNavbar.navbar,
},
footer: {
links: [
{
title: 'Tools',
items: [
{
label: 'Supabase CLI',
to: '/cli',
},
{
label: 'GoTrue',
to: '/gotrue',
},
],
},
{
title: 'Community',
items: [
{
label: 'Stack Overflow',
href: 'https://stackoverflow.com/questions/tagged/supabase',
},
{
label: 'Discord',
href: 'https://discord.supabase.com',
},
{
label: 'Twitter',
href: 'https://twitter.com/supabase',
},
],
},
{
title: 'More',
items: [
{
label: 'Supabase Website',
href: 'https://supabase.com',
},
{
label: 'Supabase Docs',
href: 'https://supabase.com/docs',
},
{
label: 'Supabase GitHub',
href: 'https://github.com/supabase/supabase',
},
{
label: 'Supabase Community GitHub',
href: 'https://github.com/supabase-community/supabase',
},
],
},
],
copyright: `Copyright © ${new Date().getFullYear()} Supabase, Inc.`,
},
prism: {
additionalLanguages: ['dart'],
plugins: ['line-numbers', 'show-language'],
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
},
}),
}
module.exports = config
+111
View File
@@ -0,0 +1,111 @@
const navbar = [
{
href: '/docs/guides',
label: 'Guides',
position: 'left',
},
{
href: '/docs/guides',
label: 'Reference',
position: 'left',
},
{ href: 'https://app.supabase.com', label: 'Login', position: 'right' },
{
href: 'https://github.com/supabase/supabase',
className: 'navbar-item-github',
position: 'right',
},
{
href: 'https://discord.supabase.com',
className: 'navbar-item-discord',
position: 'right',
},
{
href: 'https://twitter.com/supabase',
className: 'navbar-item-twitter',
position: 'right',
},
/**
* OFFICIAL REFERENCE
*/
// API
{
to: 'api',
position: 'left',
label: 'API',
supabaseCustomNavBarRegex: '(^/api$|api/)',
},
{
type: 'docsVersionDropdown',
position: 'left',
docsPluginId: '_api',
supabaseCustomNavBarRegex: '(^/api$|api/)',
},
// CLI
{
to: 'cli',
position: 'left',
label: 'CLI',
supabaseCustomNavBarRegex: '(^/cli$|cli/)',
},
{
type: 'docsVersionDropdown',
position: 'left',
docsPluginId: '_cli',
supabaseCustomNavBarRegex: '(^/cli$|cli/)',
},
// supabase-js
{
to: 'supabase-js',
position: 'left',
label: 'JavaScript SDK',
supabaseCustomNavBarRegex: '(^/supabase-js$|supabase-js/)',
},
{
type: 'docsVersionDropdown',
position: 'left',
docsPluginId: '_supabase_js',
supabaseCustomNavBarRegex: '(^/supabase-js$|supabase-js/)',
},
/**
* TOOLS
*/
// GoTrue
{
to: 'gotrue',
position: 'left',
label: 'GoTrue Auth Server',
supabaseCustomNavBarRegex: '(^/gotrue$|gotrue/)',
},
{
type: 'docsVersionDropdown',
position: 'left',
docsPluginId: '_gotrue',
supabaseCustomNavBarRegex: '(^/gotrue$|gotrue/)',
},
/**
* COMMUNITY
*/
{
to: 'supabase-dart',
position: 'left',
label: 'Supabase Dart SDK',
supabaseCustomNavBarRegex: '(^/supabase-dart$|supabase-dart/)',
},
{
type: 'docsVersionDropdown',
position: 'left',
docsPluginId: '_supabase_dart',
supabaseCustomNavBarRegex: '(^/supabase-dart$|supabase-dart/)',
},
]
module.exports = { navbar }
+61
View File
@@ -0,0 +1,61 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
mainSidebar: [
{
type: 'category',
label: 'Reference',
link: { type: 'doc', id: 'about' },
collapsed: false,
items: [
{
type: 'link',
label: 'Supabase JavaScript Client',
href: '/supabase-js',
},
{ type: 'link', label: 'Supabase CLI', href: '/cli' },
{ type: 'link', label: 'Supabase API', href: '/api' },
],
},
{
type: 'category',
label: 'Community',
collapsed: false,
items: [
{ type: 'link', label: 'Supabase Dart Client', href: '/supabase-dart' },
],
},
{
type: 'category',
label: 'Tools',
collapsed: true,
items: [{ type: 'link', label: 'GoTrue Auth Server', href: '/gotrue' }],
},
{
type: 'category',
label: 'Postgres Extensions',
link: { type: 'doc', id: 'postgres/extensions/intro' },
collapsed: true,
items: [
'postgres/extensions/http',
'postgres/extensions/pgtap',
'postgres/extensions/plv8',
'postgres/extensions/uuid-ossp',
],
},
],
}
module.exports = sidebars
+40
View File
@@ -0,0 +1,40 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
// tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }],
apiSidebar: [
{
type: 'category',
label: 'Supabase API',
// collapsible: false,
// link: {
// type: 'doc',
// id: 'intro',
// },
items: ['intro', 'usage', 'release-notes'],
},
// 'intro',
// {
// type: "category",
// label: "Release Notes",
// items: ["release-notes"],
// },
],
}
module.exports = sidebars
+32
View File
@@ -0,0 +1,32 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
// tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }],
cliSidebar: [
'intro',
'usage',
'config',
'release-notes',
// {
// type: "category",
// label: "Release Notes",
// items: ["release-notes"],
// },
],
}
module.exports = sidebars
+31
View File
@@ -0,0 +1,31 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
// tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
goTrueSidebar: [
'intro',
'config',
'release-notes',
// {
// type: "category",
// label: "Release Notes",
// items: ["release-notes"],
// },
],
}
module.exports = sidebars
@@ -0,0 +1,31 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
// tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
goTrueSidebar: [
'intro',
'usage',
'release-notes',
// {
// type: "category",
// label: "Release Notes",
// items: ["release-notes"],
// },
],
}
module.exports = sidebars
@@ -0,0 +1,31 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
// tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
goTrueSidebar: [
'intro',
'usage',
'release-notes',
// {
// type: "category",
// label: "Release Notes",
// items: ["release-notes"],
// },
],
}
module.exports = sidebars
+63
View File
@@ -0,0 +1,63 @@
{
"name": "reference-docs",
"version": "0.0.0",
"private": true,
"scripts": {
"dev": "npm run docusaurus",
"start": "npm run docusaurus",
"docusaurus": "docusaurus start --port 3010",
"swizzle": "docusaurus swizzle",
"build": "npm run cli:gen && npm run gotrue:gen && npm run gotrue-js:gen && docusaurus build",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"cli:version": "docusaurus docs:version:cli",
"cli:gen": "npm run cli:gen:commands && npm run cli:gen:config",
"cli:gen:commands": "ts-node ./src/scripts/CliGenerator.ts -o cli/usage.mdx spec/cli_v1_commands.yaml",
"cli:gen:config": "ts-node ./src/scripts/ConfigGenerator.ts -o cli/config.mdx spec/cli_v1_config.yaml",
"gotrue:version": "docusaurus docs:version:gotrue",
"gotrue:gen": "npm run gotrue:gen:config",
"gotrue:gen:config": "ts-node ./src/scripts/ConfigGenerator.ts -o gotrue/config.mdx spec/gotrue_v1_config.yaml",
"supabase-js:version": "docusaurus docs:version:supabase-js",
"supabase-js:gen": "npm run supabase-js:gen:sdk",
"supabase-js:gen:sdk": "ts-node ./src/scripts/SdkGenerator.ts -o supabase-js/usage.mdx spec/supabase_js_sdk.yaml",
"supabase-dart:version": "docusaurus docs:version:_supabase_dart",
"supabase-dart:gen": "npm run supabase-dart:gen:sdk",
"supabase-dart:gen:sdk": "ts-node ./src/scripts/SdkGenerator.ts -o supabase-dart/usage.mdx spec/supabase_dart_sdk.yaml"
},
"dependencies": {
"@docusaurus/core": "2.0.0-rc.1",
"@docusaurus/preset-classic": "2.0.0-rc.1",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.2.1",
"prism-react-renderer": "^1.3.5",
"react": "^17.0.2",
"react-dom": "^17.0.2"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.0.0-rc.1",
"ejs": "^3.1.8",
"fs": "^0.0.1-security",
"js-yaml": "^4.1.0",
"ts-node": "^10.9.1"
},
"prettier": {
"semi": false,
"singleQuote": true
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"engines": {
"node": ">=16.14"
}
}
File diff suppressed because it is too large Load Diff
+98
View File
@@ -0,0 +1,98 @@
# The spec divided into 3 main sections:
# info: general information about the library
# functions: public functions which the user can access
# types: a list of custom types
clispec: '001'
# This section outlines the general information for the library.
info:
id: cli
version: 'next'
title: 'CLI'
language: 'sh'
source: 'https://github.com/supabase/cli'
bugs: 'https://github.com/supabase/cli/issues'
spec: 'https://github.com/supabase/supabase.tools/cli_spec/lib.yaml'
description: |
Supabase CLI.
options: | # Global options
```sh
-v --verbose verbose output
```
commands:
- id: 'supabase-functions'
title: 'supabase functions'
summary: 'Manage your Edge Functions'
source: 'https://github.com/supabase/cli'
description: |
Manage your Edge Functions.
tags: []
links: []
usage: |
```sh
supabase functions [command] [flags]
```
subcommands:
- 'supabase-functions-new'
- 'supabase-functions-deploy'
- 'supabase-functions-delete'
options: |
```
-h, --help help for functions
```
- id: 'supabase-functions-new'
title: 'supabase functions new'
summary: 'Create an Edge Functions'
source: 'https://github.com/supabase/cli'
description: |
Create an Edge Functions.
tags: []
links: []
usage: |
```sh
supabase functions new <Function name>
```
subcommands: []
options: |
```
-h, --help help for functions
```
- id: 'supabase-functions-deploy'
title: 'supabase functions deploy'
summary: 'Deploy an Edge Functions'
source: 'https://github.com/supabase/cli'
description: |
Deploy an Edge Functions.
tags: []
links: []
usage: |
```sh
supabase functions deploy <Function name>
````
subcommands: []
options: |
```
-h, --help help for functions
```
- id: 'supabase-functions-delete'
title: 'supabase functions delete'
summary: 'Delete an Edge Functions'
source: 'https://github.com/supabase/cli'
description: |
Delete an Edge Functions.
tags: []
links: []
usage: |
```sh
supabase functions delete <Function name>
```
subcommands: []
options: |
```
-h, --help help for functions
```
+228
View File
@@ -0,0 +1,228 @@
# The spec is divided into 2 main sections:
# info: general information about the tool
# functions: public functions which the user can access
configspec: '001'
# This section outlines the general information for the tool.
info:
id: 'cli' # {string} A unique ID for this tool.
version: 'next' # {string} The current version number of the tool.
title: 'CLI' # {string} A readable name.
source: 'https://github.com/supabase/cli' # {string} Where developers can find the source code.
bugs: 'https://github.com/supabase/cli/issues' # {string} Where developers can file bugs.
spec: 'https://github.com/supabase/supabase/blob/master/web/spec/cli_config_001.yml' # {string} Where developers can find this spec (to link directly in the docs).
description: |
A `config.toml` file is generated after running `supabase init`.
This file is located in the `supabase` folder under `supabase/config.toml`.
# This section is an array of public functions which a user might need to execute.
parameters:
- id: 'project_id' # {string} A unique identifier for this param.
title: 'project_id' # {string} Any a name.
tags: ['general'] # {string[]} These tags are useful for grouping parameters
required: true
# default: '5432'
description: |
A string used to distinguish different Supabase projects on the same host. Defaults to the working directory name when running `supabase init`.
- id: 'api.port'
title: 'api.port'
tags: ['api']
required: true
default: '54321'
description: |
Port to use for the API URL.
links:
- name: 'PostgREST configuration'
link: 'https://postgrest.org/en/stable/configuration.html'
- id: 'api.extra_search_path'
title: 'api.extra_search_path'
tags: ['api']
required: true
default: '["extensions"]'
description: |
Extra schemas to add to the `search_path` of every request.
links:
- name: 'PostgREST configuration'
link: 'https://postgrest.org/en/stable/configuration.html'
- id: 'api.max_rows'
title: 'api.max_rows'
tags: ['api']
required: true
default: '1000'
description: |
The maximum number of rows returned from a view, table, or stored procedure. Limits payload size for accidental or malicious requests.
links:
- name: 'PostgREST configuration'
link: 'https://postgrest.org/en/stable/configuration.html'
- id: 'db.port'
title: 'db.port'
tags: ['database']
required: true
default: '54322'
description: |
Port to use for the local database URL.
links:
- name: 'PostgreSQL configuration'
link: 'https://postgrest.org/en/stable/configuration.html'
- id: 'db.major_version'
title: 'db.major_version'
tags: ['database']
required: true
default: '14'
description: |
The database major version to use. This has to be the same as your remote database's. Run `SHOW server_version;` on the remote database to check.
links:
- name: 'PostgreSQL configuration'
link: 'https://postgrest.org/en/stable/configuration.html'
- id: 'studio.port'
title: 'studio.port'
tags: ['dashboard']
required: true
default: '54323'
description: |
Port to use for Supabase Studio.
links: []
- id: 'inbucket.port'
title: 'inbucket.port'
tags: ['local']
required: true
default: '54324'
description: |
Port to use for the email testing server web interface.
Emails sent with the local dev setup are not actually sent - rather, they are monitored, and you can view the emails that would have been sent from the web interface.
links:
- name: 'Inbucket documentation'
link: 'https://www.inbucket.org'
- id: 'auth.site_url'
title: 'auth.site_url'
tags: ['auth']
required: true
default: '"http://localhost:3000"'
description: |
The base URL of your website. Used as an allow-list for redirects and for constructing URLs used in emails.
links:
- name: 'Auth Server configuration'
link: 'https://supabase.com/docs/reference/tools/reference-auth'
- id: 'auth.additional_redirect_urls'
title: 'auth.additional_redirect_urls'
tags: ['auth']
required: true
default: '["https://localhost:3000"]'
description: |
A list of _exact_ URLs that auth providers are permitted to redirect to post authentication.
links:
- name: 'Auth Server configuration'
link: 'https://supabase.com/docs/reference/tools/reference-auth'
- id: 'auth.jwt_expiry'
title: 'auth.jwt_expiry'
tags: ['auth']
required: true
default: '3600'
description: |
How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one week).
links:
- name: 'Auth Server configuration'
link: 'https://supabase.com/docs/reference/tools/reference-auth'
- id: 'auth.enable_signup'
title: 'auth.enable_signup'
tags: ['auth']
required: true
default: 'true'
description: |
Allow/disallow new user signups to your project.
links:
- name: 'Auth Server configuration'
link: 'https://supabase.com/docs/reference/tools/reference-auth'
- id: 'auth.email.enable_signup'
title: 'auth.email.enable_signup'
tags: ['auth']
required: true
default: 'true'
description: |
Allow/disallow new user signups via email to your project.
links:
- name: 'Auth Server configuration'
link: 'https://supabase.com/docs/reference/tools/reference-auth'
- id: 'auth.email.double_confirm_changes'
title: 'auth.email.double_confirm_changes'
tags: ['auth']
required: true
default: 'true'
description: |
If enabled, a user will be required to confirm any email change on both the old, and new email addresses. If disabled, only the new email is required to confirm.
links:
- name: 'Auth Server configuration'
link: 'https://supabase.com/docs/reference/tools/reference-auth'
- id: 'auth.email.enable_confirmations'
title: 'auth.email.enable_confirmations'
tags: ['auth']
required: true
default: 'true'
description: |
If enabled, users need to confirm their email address before signing in.
links:
- name: 'Auth Server configuration'
link: 'https://supabase.com/docs/reference/tools/reference-auth'
- id: 'auth.external.<provider>.enabled'
title: 'auth.external.<provider>.enabled'
tags: ['auth']
required: true
default: 'true'
description: |
Use an external OAuth provider. The full list of providers are:
- `apple`
- `azure`
- `bitbucket`
- `discord`
- `facebook`
- `github`
- `gitlab`
- `google`
- `twitch`
- `twitter`
- `slack`
- `spotify`
links:
- name: 'Auth Server configuration'
link: 'https://supabase.com/docs/reference/tools/reference-auth'
- id: 'auth.external.<provider>.client_id'
title: 'auth.external.<provider>.client_id'
tags: ['auth']
required: true
default: '""'
description: |
Client ID for the external OAuth provider.
links:
- name: 'Auth Server configuration'
link: 'https://supabase.com/docs/reference/tools/reference-auth'
- id: 'auth.external.<provider>.secret'
title: 'auth.external.<provider>.secret'
tags: ['auth']
required: true
default: '""'
description: |
Client secret for the external OAuth provider.
links:
- name: 'Auth Server configuration'
link: 'https://supabase.com/docs/reference/tools/reference-auth'
+28
View File
@@ -0,0 +1,28 @@
# The spec is divided into 2 main sections:
# info: general information about the tool
# functions: public functions which the user can access
configspec: '001'
# This section outlines the general information for the tool.
info:
id: 'gotrue' # {string} A unique ID for this tool.
version: 'next' # {string} The current version number of the tool.
title: 'GoTrue' # {string} A readable name.
source: 'https://github.com/supabase/gotrue' # {string} Where developers can find the source code.
bugs: 'https://github.com/supabase/gotrue/issues' # {string} Where developers can file bugs.
spec: 'https://github.com/supabase/supabase/blob/master/web/spec/cli_config_001.yml' # {string} Where developers can find this spec (to link directly in the docs).
description: |
A `config.toml` file is generated after running `supabase init`.
This file is located in the `supabase` folder under `supabase/config.toml`.
# This section is an array of public functions which a user might need to execute.
parameters:
- id: 'project_id' # {string} A unique identifier for this param.
title: 'project_id' # {string} Any a name.
tags: ['general'] # {string[]} These tags are useful for grouping parameters
required: true
# default: '5432'
description: |
A string used to distinguish different Supabase projects on the same host. Defaults to the working directory name when running `supabase init`.
+107
View File
@@ -0,0 +1,107 @@
# The spec divided into 3 main sections:
# info: general information about the library
# types: a list of custom types
# functions: public functions which the user can access
sdkspec: '001'
# This section outlines the general information for the library.
info:
id: reference/dart
version: next
title: 'Supabase Dart Client'
language: 'dart' # {string} The language where this library is used.
source: 'https://github.com/supabase-community/supabase-dart' # {string} Where developers can find the source code.
bugs: 'https://github.com/supabase-community/supabase-dart/issues' # {string} Where developers can file bugs.
spec: '' # {string} Where developers can find this spec (to link directly in the docs).
description: |
Supabase Dart.
types:
- id: type-auth-success
title: AuthSuccess
source: 'https://github.com/gotrue-js/success/link/to/type'
value: |
```
{
message: string
details: string
hint: string
code: string
}
```
ref: ['AuthSuccess'] # OPTIONAL {string}. Pointer to some other type.
links: []
functions:
- id: 'function-init'
title: 'Initializing'
summary: 'Initializing the client library'
tags: []
links: []
description: |
## Dart
You can initialize a new Supabase client using the `SupabaseClient()` method.
The Supabase client is your entrypoint to the rest of the Supabase functionality
and is the easiest way to interact with everything we offer within the Supabase ecosystem.
## Flutter
For `supabase_flutter`, you will be using the static `initialize()` method on `Supabase` class.
attributes: []
usage: |
```dart
final supabase = SupabaseClient('<SUPABASE_URL>', '<SUPABASE_ANON_KEY>');
```
examples:
- id: 'example-init-dart'
name: Dart SupabaseClient()
code: |
```dart
final supabase = SupabaseClient('https://xyzcompany.supabase.co', 'public-anon-key');
```
- id: 'example-init-flutter'
name: Flutter initialize()
code: |
```dart title="main.dart"
Future<void> main() async {
await Supabase.initialize(url: 'https://xyzcompany.supabase.co', anonKey: 'public-anon-key');
runApp(MyApp());
}
```
- id: 'fucntion-signup'
title: 'auth.signUp()'
summary: 'Create a new user.'
tags: []
links: []
description: |
- By default, the user will need to verify their email address before logging in. If you would like to change this, you can disable "Email Confirmations" by going to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If "Email Confirmations" is turned on, a user is returned but session will be null
- If "Email Confirmations" is turned off, both a `user` and a `session` will be returned
- When the user confirms their email address, they will be redirected to localhost:3000 by default. To change this, you can go to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
attributes: []
usage: |
```dart
final res = await supabase.auth.signUp('<USER_EMAIL>', '<USER_PASSWORD>');
```
examples:
- id: 'example-signup'
title: 'Sign up.'
code: |
```dart
final res = await supabase.auth.signUp('example@email.com', 'example-password');
final user = res.data?.user;
final error = res.error;
```
- id: 'example-signup-with-third-party'
title: 'Sign up with third-party providers.'
description: |
If you are using Flutter, you can sign up with OAuth providers using the [`signInWithProvider()`](/docs/reference/dart/auth-signinwithprovider) method available on `supabase_flutter`.
code: |
```dart
// Use signInWithProvider()
```
+105
View File
@@ -0,0 +1,105 @@
# The spec divided into 3 main sections:
# info: general information about the library
# types: a list of custom types
# functions: public functions which the user can access
sdkspec: '001'
# This section outlines the general information for the library.
info:
id: 'supabase-js' # {string} A unique ID for this library.
version: 'next' # {string} The current version number of the library.
title: 'Supabase Javascript SDK' # {string} A readable name.
language: 'javascript' # {string} The language where this library is used.
source: 'https://github.com/supabase/supabase-js' # {string} Where developers can find the source code.
bugs: 'https://github.com/supabase/supabase-js/issues' # {string} Where developers can file bugs.
spec: 'https://github.com/supabase/supabase-js/spec/libspec-v001.yml' # {string} Where developers can find this spec (to link directly in the docs).
description:
| # {string} You can use multiline strings for descriptions and supply any markdown/text.
An isomorphic Javascript library for GoTrue.
types: []
# This section is an array of public functions which a user might need to execute.
functions:
- id: 'function-client-signup' # {string} A unique identifier for this function.
title: 'signUp()' # {string} Any function name.
summary: 'New user signup'
tags: ['client'] # {string[]} These tags are useful for grouping functions
description: |
- By default, the user will need to verify their email address before logging in. If you would like to change this, you can disable "Email Confirmations" by going to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If "Email Confirmations" is turned on, a `user` is returned but `session` will be null
- If "Email Confirmations" is turned off, both a `user` and a `session` will be returned
- When the user confirms their email address, they will be redirected to localhost:3000 by default. To change this, you can go to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If signUp() is called for an existing confirmed user:
- If "Enable email confirmations" is enabled on the "Authentication" -> "Settings" page, an obfuscated / fake user object will be returned.
- If "Enable email confirmations" is disabled, an error with a message "User already registered" will be returned.
- To check if a user already exists, refer to getUser().
usage: |
```js
const { user, session, error } = await gotrue.signUp({
email: 'example@email.com',
password: 'example-password',
})
```
links: []
attributes:
- id: 'param-signup-options'
title: 'signUpOptions'
required: true
description: 'Some description.'
type: ['number', 'other'] # {string[]} Any values you want to appear in the docs
- id: 'param-options'
title: 'options'
default: 'defaultValue' # OPTIONAL {string} a default value
required: false
description: 'Some description.'
ref: 'CustomType' # {string} If a "type" is not supplied, a "ref" must be. This is a pointer to the types below.
children:
- id: 'param-nested'
name: 'nestedOject'
required: false
description: 'Some description.'
type: ['string']
children:
- id: 'param-deep' # We can nest as many as required.
name: 'deepNesting'
description: 'Some description.'
required: false
type: ['string']
returns:
- id: 'returns-error'
title: 'Error'
value: |
```js
Promise<{ data: null, error: PostgrestError }
```
ref: ['PostgrestError'] # OPTIONAL {string}. This is a pointer to the types below.
- id: 'returns-success'
title: 'Success'
value: |
```js
Promise<{ data: PostgrestSuccess, error: null }
```
ref: ['PostgrestSuccess'] # OPTIONAL {string}. This is a pointer to the types below.
examples:
- id: 'example-signup-with-email'
title: 'Sign up with email'
description: |
Use an email and password for email sign up.
links: []
code: |
```js
const { user, session, error } = await supabase.auth.signUp({
email: 'example@email.com',
password: 'example-password',
})
```
returns:
- id: 'example-success'
title: 'Success'
value: |
```js
Promise<{ data: any, session: any, error: null }
```
ref: ['AuthSuccess']
+370
View File
@@ -0,0 +1,370 @@
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
:root,
:root[data-theme=''],
:root[data-theme='dark'],
:root[data-theme='light'] {
/* See theme-specific "--custom" vars below */
/*
Customisation here for both Light and Dark themes
*/
--custom-font-base: 'serif', BlinkMacSystemFont, -apple-system, 'Segoe UI',
'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans',
'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
--custom-font-code: 'office code pro', Menlo, monospace;
--custom-font-size-base: 1rem;
--custom-font-size-sm: 0.9rem;
--custom-border-radius: 3px;
--custom-border-radius-md: 6px;
--custom-primary-darkest: #10633e;
--custom-primary-darker: #1c8656;
--custom-primary-dark: #38bc81;
--custom-primary: #24b47e;
--custom-primary-light: #65d9a5;
--custom-primary-lighter: #9fe7c7;
--custom-primary-lightest: #c5f1dd;
--custom-primary-rgba: RGBA(36, 180, 126, 1);
--custom-primary-rgb: 36, 180, 126;
--custom-background-color: #1f1f1f;
--custom-background-color-highlight: #fff;
--custom-background-color-diff: #f5f6f7;
--custom-background-color-diff-1: #eee;
--custom-background-color-diff-2: #ccc;
--custom-content-color: #1f1f1f;
--custom-content-color-light: #484848;
--custom-content-color-lightest: #333;
--custom-content-color-emphasis: #000;
--custom-border-color: #e0e0e0;
--custom-color-subtle: #ccc;
--custom-color-orange-100: #fdf0ea;
--custom-color-orange-200: #fbe2d5;
--custom-color-orange-300: #f9d3c0;
--custom-color-orange-400: #f5b796;
--custom-color-orange-500: #f08b57;
--custom-color-orange-600: #ec6e2d;
--custom-color-orange-700: #d75614;
--custom-color-orange-800: #a93c04;
--custom-shadow-lw: 0 3px 5px 0px rgba(0, 0, 0, 0.1);
--custom-shadow-md: 0 3px 5px 0px rgba(0, 0, 0, 0.1);
--custom-shadow-tl: 0 12px 28px 0 rgba(0, 0, 0, 0.2),
0 2px 4px 0 rgba(0, 0, 0, 0.1);
--custom-shadow-xl: 0 30px 60px 0 rgba(0, 0, 0, 0.1);
/*
Infirma overrides with customisation
*/
/* Colors */
--ifm-color-content: var(--custom-content-color);
--ifm-heading-color: var(--custom-content-color);
--ifm-background-color: var(--custom-background-color);
--ifm-sidebar-background: var(--custom-background-color);
--ifm-color-content-secondary: var(--custom-content-color-light);
--ifm-code-background: var(--custom-background-color-diff);
--ifm-code-background-dark: #2a2a2a;
--ifm-code-color: var(--custom-content-color);
--ifm-color-warning: var(--custom-color-orange-600);
--ifm-color-info-contrast-background: var(--custom-background-color-diff);
--prism-background-color: var(--custom-background-color-diff) !important;
--ifm-pre-background: var(--custom-background-color-diff) !important;
/* Primary */
--ifm-color-primary-darkest: var(--custom-primary-darkest);
--ifm-color-primary-darker: var(--custom-primary-darker);
--ifm-color-primary-dark: var(--custom-primary-dark);
--ifm-color-primary: var(--custom-primary);
--ifm-color-primary-light: var(--custom-primary-light);
--ifm-color-primary-lighter: var(--custom-primary-lighter);
--ifm-color-primary-lightest: var(--custom-primary-lightest);
/* Info */
--ifm-color-info-darker: var(--custom-background-color-diff-2);
--ifm-color-info-dark: var(--custom-background-color-diff-1);
--ifm-color-info: var(--custom-background-color-diff);
/* Fonts */
--ifm-font-color-base: var(--custom-content-color);
--ifm-font-family-base: var(--custom-font-base);
--ifm-font-family-monospace: var(--custom-font-code);
--ifm-heading-font-family: var(--custom-font-base);
--ifm-font-size-base: var(--custom-font-size-base);
--ifm-heading-font-weight: 400;
--ifm-font-weight-bold: 500;
/* Globals */
--ifm-global-shadow-lw: var(--custom-shadow-lw);
--ifm-global-shadow-md: var(--custom-shadow-md);
--ifm-global-shadow-tl: var(--custom-shadow-tl);
--ifm-contents-border-color: var(--custom-border-color);
--ifm-hr-border-color: var(--custom-border-color);
--ifm-code-border-radius: var(--custom-border-radius);
--ifm-button-border-radius: var(--custom-border-radius);
--ifm-col-spacing-vertical: 0.5rem;
--ifm-link-hover-decoration: none;
/* Buttons */
--ifm-button-background-color: var(--custom-background-color);
/* --ifm-button-color: var(--custom-content-color); Not great - changes the green buttons to have black text */
/* Navbar */
--ifm-navbar-background-color: var(--custom-background-color);
/* Footer */
--ifm-footer-background-color: var(--custom-background-color);
--ifm-footer-color: var(--custom-content-color);
--ifm-footer-link-color: var(--custom-content-color);
--ifm-footer-title-color: var(--custom-content-color);
/* Hero */
--ifm-hero-background-color: var(--custom-background-color);
--ifm-hero-text-color: var(--custom-content-color);
/* Sidebar */
--ifm-sidebar-border-color: var(--custom-border-color);
--ifm-menu-color-active: var(--custom-primary);
--doc-sidebar-width: 250px;
--ifm-menu-link-padding-horizontal: 0rem;
/* Panel */
--ifm-panel-border-color: var(--custom-border-color);
--ifm-panel-border-color-active: var(--custom-primary);
--ifm-panel-background-solid: var(--custom-background-color);
/* Card */
--ifm-card-background-color: var(--custom-background-color);
--ifm-card-border-radius: var(--custom-border-radius-md);
/* Tables */
--ifm-table-border-color: var(--custom-border-color);
--ifm-table-stripe-background: var(--custom-background-color-diff);
/* Alerts */
--ifm-alert-color: var(--custom-color-orange-600);
--ifm-alert-background-color-highlight: var(--custom-background-color);
--ifm-alert-background-color: var(--custom-background-color);
/* Breadcrumbs */
--ifm-breadcrumb-border-radius: 0.3rem;
/* TOC */
--ifm-toc-border-color: var(--custom-border-color);
}
:root[data-theme='light'] {
--custom-background-color: #fdfdfd;
}
:root[data-theme='dark'] {
--custom-primary-darkest: #10633e;
--custom-primary-darker: #1c8656;
--custom-primary-dark: #38bc81;
--custom-primary: #3ecf8e;
--custom-primary-light: #65d9a5;
--custom-primary-lighter: #9fe7c7;
--custom-primary-lightest: #c5f1dd;
--custom-color-subtle: #484848;
--custom-background-color: #1f1f1f;
--custom-background-color-highlight: #2a2a2a;
--custom-background-color-diff: #2a2a2a;
--custom-background-color-diff-1: #484848;
--custom-background-color-diff-2: #666;
--custom-content-color: #ddd;
--custom-content-color-light: #aaa;
--custom-content-color-lightest: #fefefe;
--custom-content-color-emphasis: #fff;
--custom-border-color: #333333;
--custom-shadow-lw: 0 0 3px 3px rgba(0, 0, 0, 0.2);
--custom-shadow-md: 0 0 5px 5px rgba(0, 0, 0, 0.3);
--custom-shadow-tl: 0 12px 28px 0 rgba(0, 0, 0, 0.2),
0 2px 4px 0 rgba(0, 0, 0, 0.1);
--custom-shadow-xl: 0 30px 60px 0 rgba(0, 0, 0, 0.5);
--ifm-color-gray-100: rgba(224, 235, 247, 0.9);
--ifm-color-gray-150: rgba(224, 235, 247, 0.85);
--ifm-color-gray-200: rgba(224, 235, 247, 0.8);
--ifm-color-gray-300: rgba(224, 235, 247, 0.75);
--ifm-color-gray-400: rgba(224, 235, 247, 0.7);
--ifm-color-gray-500: rgba(224, 235, 247, 0.65);
--ifm-color-gray-600: rgba(224, 235, 247, 0.6);
--ifm-color-gray-700: rgba(224, 235, 247, 0.55);
--ifm-color-gray-800: rgba(224, 235, 247, 0.5);
--ifm-color-gray-900: rgba(224, 235, 247, 0.45);
--ifm-color-secondary-darker: #000;
--ifm-color-secondary-dark: #888888;
--ifm-color-secondary: #2a2a2a;
--ifm-color-secondary-light: #2f2f2f;
--ifm-color-secondary-lighter: #313131;
--ifm-color-secondary-lightest: #333333;
/* Button */
--ifm-button-background-color: var(--custom-background-color-highlight);
/* Card */
--ifm-card-background-color: var(--custom-background-color-highlight);
}
.custom--navbar__link--hidden .navbar__item,
.navbar-sidebar__item.menu
> .menu__list
> .custom--navbar__link--hidden
> .menu__list-item {
display: none;
}
.footer {
/* Footer */
--ifm-footer-background-color: var(--custom-background-color);
--ifm-footer-color: var(--custom-content-color);
--ifm-footer-link-color: var(--custom-content-color);
--ifm-footer-title-color: var(--custom-content-color);
border-top: 1px solid var(--custom-border-color);
}
:root[data-theme='dark'] .badge--secondary {
color: var(--custom-content-color);
}
.navbar__logo {
padding-top: 2px;
padding-bottom: 2px;
}
.navbar {
box-shadow: none;
border-bottom: 1px solid var(--custom-border-color);
}
.menu {
font-weight: var(--ifm-font-weight-regular);
}
.menu__link {
font-size: var(--custom-font-size-sm);
color: var(--custom-content-color-light);
padding-left: 10px;
padding-right: 10px;
}
.menu__link.menu__link--sublist {
font-weight: var(--ifm-font-weight-bold);
text-transform: uppercase;
font-size: smaller;
color: var(--custom-content-color-emphasis);
}
.menu__link.menu__link--active:not(.menu__link--sublist) {
/* background-color: transparent; */
color: var(--custom-content-color-emphasis);
}
.menu__link:hover:not(.menu__link--active),
.menu__caret:hover {
background-color: transparent;
color: var(--custom-content-color-emphasis);
}
.pagination-nav__link {
border-color: var(--custom-border-color);
}
pre {
background-color: var(--custom-background-color-diff);
}
#custom--main-menu-button {
display: flex;
padding: 1rem 0 0.5rem 0.5rem;
font-size: 0.9rem;
color: var(--custom-content-color-light);
}
#custom--main-menu-button svg {
padding: 2px;
margin-right: 10px;
color: var(--custom-content-color-light);
}
#custom--main-menu-button:hover,
#custom--main-menu-button:hover svg {
transition: all;
transition-duration: 0.5s;
color: var(--custom-content-color-emphasis);
}
@media screen and (max-width: 580px) {
.navbar__items .navbar-item-github {
display: none !important;
}
}
.navbar-item-github:hover {
opacity: 0.6;
}
.navbar-item-github:before {
margin-right: 0.5rem;
content: '';
width: 16px;
height: 16px;
display: flex;
align-items: center;
justify-items: center;
background-image: url("data:image/svg+xml,%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");
background-repeat: no-repeat;
background-position: center;
}
html[data-theme='dark'] .navbar-item-github: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;
background-repeat: no-repeat;
background-position: center;
}
@media screen and (max-width: 580px) {
.navbar__items .navbar-item-twitter {
display: none !important;
}
}
.navbar-item-twitter:hover {
opacity: 0.6;
}
.navbar-item-twitter:before {
margin-right: 0.5rem;
content: '';
width: 16px;
height: 16px;
display: flex;
align-items: center;
justify-items: center;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 335 276' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m302 70a195 195 0 0 1 -299 175 142 142 0 0 0 97 -30 70 70 0 0 1 -58 -47 70 70 0 0 0 31 -2 70 70 0 0 1 -57 -66 70 70 0 0 0 28 5 70 70 0 0 1 -18 -90 195 195 0 0 0 141 72 67 67 0 0 1 116 -62 117 117 0 0 0 43 -17 65 65 0 0 1 -31 38 117 117 0 0 0 39 -11 65 65 0 0 1 -32 35'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: center;
}
html[data-theme='dark'] .navbar-item-twitter:before {
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 335 276' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='m302 70a195 195 0 0 1 -299 175 142 142 0 0 0 97 -30 70 70 0 0 1 -58 -47 70 70 0 0 0 31 -2 70 70 0 0 1 -57 -66 70 70 0 0 0 28 5 70 70 0 0 1 -18 -90 195 195 0 0 0 141 72 67 67 0 0 1 116 -62 117 117 0 0 0 43 -17 65 65 0 0 1 -31 38 117 117 0 0 0 39 -11 65 65 0 0 1 -32 35'/%3E%3C/svg%3E")
no-repeat;
background-repeat: no-repeat;
background-position: center;
}
.navbar-item-discord:hover {
opacity: 0.6;
}
.navbar-item-discord:before {
margin-right: 0.5rem;
content: '';
width: 16px;
height: 16px;
display: flex;
align-items: center;
justify-items: center;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 71 55' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M60.1045 4.8978C55.5792 2.8214 50.7265 1.2916 45.6527 0.41542C45.5603 0.39851 45.468 0.440769 45.4204 0.525289C44.7963 1.6353 44.105 3.0834 43.6209 4.2216C38.1637 3.4046 32.7345 3.4046 27.3892 4.2216C26.905 3.0581 26.1886 1.6353 25.5617 0.525289C25.5141 0.443589 25.4218 0.40133 25.3294 0.41542C20.2584 1.2888 15.4057 2.8186 10.8776 4.8978C10.8384 4.9147 10.8048 4.9429 10.7825 4.9795C1.57795 18.7309 -0.943561 32.1443 0.293408 45.3914C0.299005 45.4562 0.335386 45.5182 0.385761 45.5576C6.45866 50.0174 12.3413 52.7249 18.1147 54.5195C18.2071 54.5477 18.305 54.5139 18.3638 54.4378C19.7295 52.5728 20.9469 50.6063 21.9907 48.5383C22.0523 48.4172 21.9935 48.2735 21.8676 48.2256C19.9366 47.4931 18.0979 46.6 16.3292 45.5858C16.1893 45.5041 16.1781 45.304 16.3068 45.2082C16.679 44.9293 17.0513 44.6391 17.4067 44.3461C17.471 44.2926 17.5606 44.2813 17.6362 44.3151C29.2558 49.6202 41.8354 49.6202 53.3179 44.3151C53.3935 44.2785 53.4831 44.2898 53.5502 44.3433C53.9057 44.6363 54.2779 44.9293 54.6529 45.2082C54.7816 45.304 54.7732 45.5041 54.6333 45.5858C52.8646 46.6197 51.0259 47.4931 49.0921 48.2228C48.9662 48.2707 48.9102 48.4172 48.9718 48.5383C50.038 50.6034 51.2554 52.5699 52.5959 54.435C52.6519 54.5139 52.7526 54.5477 52.845 54.5195C58.6464 52.7249 64.529 50.0174 70.6019 45.5576C70.6551 45.5182 70.6887 45.459 70.6943 45.3942C72.1747 30.0791 68.2147 16.7757 60.1968 4.9823C60.1772 4.9429 60.1437 4.9147 60.1045 4.8978ZM23.7259 37.3253C20.2276 37.3253 17.3451 34.1136 17.3451 30.1693C17.3451 26.225 20.1717 23.0133 23.7259 23.0133C27.308 23.0133 30.1626 26.2532 30.1066 30.1693C30.1066 34.1136 27.28 37.3253 23.7259 37.3253ZM47.3178 37.3253C43.8196 37.3253 40.9371 34.1136 40.9371 30.1693C40.9371 26.225 43.7636 23.0133 47.3178 23.0133C50.9 23.0133 53.7545 26.2532 53.6986 30.1693C53.6986 34.1136 50.9 37.3253 47.3178 37.3253Z' fill='%2323272A'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='71' height='55' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A");
background-repeat: no-repeat;
background-position: center;
}
html[data-theme='dark'] .navbar-item-discord:before {
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 71 55' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath d='M60.1045 4.8978C55.5792 2.8214 50.7265 1.2916 45.6527 0.41542C45.5603 0.39851 45.468 0.440769 45.4204 0.525289C44.7963 1.6353 44.105 3.0834 43.6209 4.2216C38.1637 3.4046 32.7345 3.4046 27.3892 4.2216C26.905 3.0581 26.1886 1.6353 25.5617 0.525289C25.5141 0.443589 25.4218 0.40133 25.3294 0.41542C20.2584 1.2888 15.4057 2.8186 10.8776 4.8978C10.8384 4.9147 10.8048 4.9429 10.7825 4.9795C1.57795 18.7309 -0.943561 32.1443 0.293408 45.3914C0.299005 45.4562 0.335386 45.5182 0.385761 45.5576C6.45866 50.0174 12.3413 52.7249 18.1147 54.5195C18.2071 54.5477 18.305 54.5139 18.3638 54.4378C19.7295 52.5728 20.9469 50.6063 21.9907 48.5383C22.0523 48.4172 21.9935 48.2735 21.8676 48.2256C19.9366 47.4931 18.0979 46.6 16.3292 45.5858C16.1893 45.5041 16.1781 45.304 16.3068 45.2082C16.679 44.9293 17.0513 44.6391 17.4067 44.3461C17.471 44.2926 17.5606 44.2813 17.6362 44.3151C29.2558 49.6202 41.8354 49.6202 53.3179 44.3151C53.3935 44.2785 53.4831 44.2898 53.5502 44.3433C53.9057 44.6363 54.2779 44.9293 54.6529 45.2082C54.7816 45.304 54.7732 45.5041 54.6333 45.5858C52.8646 46.6197 51.0259 47.4931 49.0921 48.2228C48.9662 48.2707 48.9102 48.4172 48.9718 48.5383C50.038 50.6034 51.2554 52.5699 52.5959 54.435C52.6519 54.5139 52.7526 54.5477 52.845 54.5195C58.6464 52.7249 64.529 50.0174 70.6019 45.5576C70.6551 45.5182 70.6887 45.459 70.6943 45.3942C72.1747 30.0791 68.2147 16.7757 60.1968 4.9823C60.1772 4.9429 60.1437 4.9147 60.1045 4.8978ZM23.7259 37.3253C20.2276 37.3253 17.3451 34.1136 17.3451 30.1693C17.3451 26.225 20.1717 23.0133 23.7259 23.0133C27.308 23.0133 30.1626 26.2532 30.1066 30.1693C30.1066 34.1136 27.28 37.3253 23.7259 37.3253ZM47.3178 37.3253C43.8196 37.3253 40.9371 34.1136 40.9371 30.1693C40.9371 26.225 43.7636 23.0133 47.3178 23.0133C50.9 23.0133 53.7545 26.2532 53.6986 30.1693C53.6986 34.1136 50.9 37.3253 47.3178 37.3253Z' fill='%23ffffff'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='71' height='55' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A")
no-repeat;
background-repeat: no-repeat;
background-position: center;
}
@@ -0,0 +1,7 @@
---
title: Markdown page example
---
# Markdown page example
You don't need React to write simple standalone pages.
@@ -0,0 +1,55 @@
import template from '../templates/CliTemplate'
import type { CliSpec } from '../types/CliSpec'
const yaml = require('js-yaml')
const fs = require('fs')
const ejs = require('ejs')
const Helpers = require('./Helpers')
const { writeToDisk } = Helpers
const main = (fileNames: string[], options: any) => {
try {
const outputDir = options.o || options.output || ''
fileNames.forEach((inputFileName) => {
gen(inputFileName, outputDir)
})
return
} catch (e) {
console.log(e)
}
}
async function gen(inputFileName: string, outputDir: string) {
const spec = yaml.load(fs.readFileSync(inputFileName, 'utf8'))
// console.log('spec', spec)
switch (spec.clispec) {
case '001':
await gen_v001(spec, outputDir)
break
default:
console.log('Unrecognized specification version:', spec.clispec)
break
}
}
// Run everything
const argv = require('minimist')(process.argv.slice(2))
main(argv['_'], argv)
/**
* Versioned Generator
*/
async function gen_v001(spec: CliSpec, dest: string) {
const commands = spec.commands
const content = ejs.render(template, {
info: spec.info,
commands,
})
// console.log(content)
// Write to disk
await writeToDisk(dest, content)
console.log('Saved: ', dest)
}
@@ -0,0 +1,76 @@
import template from '../templates/ConfigTemplate'
import type { ConfigSpec } from '../types/ConfigSpec'
const yaml = require('js-yaml')
const fs = require('fs')
const ejs = require('ejs')
const Helpers = require('./Helpers')
const { writeToDisk } = Helpers
type Section = {
id: string
title: string
}
type Layout = 'cli' | 'gotrue'
const layout: { cli: Section[]; gotrue: [] } = {
cli: [
{ id: 'general', title: 'General' },
{ id: 'api', title: 'API' },
{ id: 'database', title: 'Database' },
{ id: 'dashboard', title: 'Dashboard' },
{ id: 'local', title: 'Local Development' },
{ id: 'auth', title: 'Auth' },
],
gotrue: [],
}
const main = (fileNames: string[], options: any) => {
try {
const outputDir = options.o || options.output || ''
fileNames.forEach((inputFileName) => {
gen(inputFileName, outputDir)
})
return
} catch (e) {
console.log(e)
}
}
async function gen(inputFileName: string, outputDir: string) {
const spec = yaml.load(fs.readFileSync(inputFileName, 'utf8'))
// console.log('spec', spec)
switch (spec.configspec) {
case '001':
await gen_v001(spec, outputDir)
break
default:
console.log('Unrecognized specifcation version:', spec.configspec)
break
}
}
// Run everything
const argv = require('minimist')(process.argv.slice(2))
main(argv['_'], argv)
/**
* Versioned Generator
*/
async function gen_v001(spec: ConfigSpec, dest: string) {
const layoutId: Layout = spec.info.id as Layout
const specLayout = layout[layoutId]
const sections = specLayout.map((section: Section) => {
const parameters = spec.parameters.filter(
(parameter) => parameter.tags[0] === section.id
)
return { ...section, parameters }
})
const content = ejs.render(template, { info: spec.info, sections })
// console.log(content)
// Write to disk
await writeToDisk(dest, content)
console.log('Saved: ', dest)
}
+24
View File
@@ -0,0 +1,24 @@
import fs from 'fs'
export const slugify = (text: string) => {
return text
.toString()
.toLowerCase()
.replace(/[. )(]/g, '-') // Replace spaces and brackets -
.replace(/[^\w\-]+/g, '') // Remove all non-word chars
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
.replace(/-+$/, '') // Trim - from end of text
}
/**
* writeToDisk()
*/
export const writeToDisk = (fileName: string, content: any) => {
return new Promise((resolve, reject) => {
fs.writeFile(fileName, content, (err: any) => {
if (err) return reject(err)
else return resolve(true)
})
})
}
@@ -0,0 +1,57 @@
import template from '../templates/SdkTemplate'
import type { SdkSpec } from '../types/SdkSpec'
const yaml = require('js-yaml')
const fs = require('fs')
const ejs = require('ejs')
const Helpers = require('./Helpers')
const { writeToDisk } = Helpers
const main = (fileNames: string[], options: any) => {
try {
const outputDir = options.o || options.output || ''
fileNames.forEach((inputFileName) => {
gen(inputFileName, outputDir)
})
return
} catch (e) {
console.log(e)
}
}
async function gen(inputFileName: string, outputDir: string) {
const spec = yaml.load(fs.readFileSync(inputFileName, 'utf8'))
// console.log('spec', spec)
switch (spec.sdkspec) {
case '001':
await gen_v001(spec, outputDir)
break
default:
console.log('Unrecognized specification version:', spec.sdkspec)
break
}
}
// Run everything
const argv = require('minimist')(process.argv.slice(2))
main(argv['_'], argv)
/**
* Versioned Generator
*/
async function gen_v001(spec: SdkSpec, dest: string) {
const functions = spec.functions
const types = spec.types
const content = ejs.render(template, {
info: spec.info,
functions,
types,
})
// console.log(content)
// Write to disk
await writeToDisk(dest, content)
console.log('Saved: ', dest)
}
@@ -0,0 +1,38 @@
const template = `
---
id: usage
title: Usage
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
<%- info.description %>
<% commands.forEach(function(command){ %>
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## <%= command.summary %>
<%- command.description %>
### Usage
<%- command.usage %>
<% if(command.subcommands.length > 0){ %>
### Available Commands
<% command.subcommands.forEach(function(subcommand){ %>
- <%- subcommand %>
<% }); %>
<% } %>
### Options
<%- command.options %>
<% }); %>
`.trim()
export default template
@@ -0,0 +1,37 @@
const template = `
---
id: config
title: Configuration
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
<%= info.description %>
<% sections.forEach(function(section){ %>
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## <%= section.title %>
<% section.parameters.forEach(function(parameter){ %>
### \`<%- parameter.title %>\`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| \`<%- parameter.title %>\` | \`<%= parameter.required %>\` | \`<%- parameter?.default %>\` |
<%- parameter.description %>
See also:
<% parameter.links?.forEach(function(link){ %>
- [<%- link.name %>](<%- link.link %>)
<% }); %>
<% }); %>
<% }); %>
`.trim()
export default template
@@ -0,0 +1,47 @@
const template = `
---
id: usage
title: Usage
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
<%- info.description %>
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
<% functions.forEach(function(fn){ %>
## <%- fn.summary %>
<%- fn.usage %>
### Attributes
<% fn.attributes.forEach(function(attribute){ %>
- <%- attribute.id %>
<% }); %>
### Notes
<%- fn.description %>
### Examples
<% fn.examples.forEach(function(example){ %>
#### <%- example.title %>
<%- example.code %>
<% }); %>
<% }); %>
`.trim()
export default template
@@ -0,0 +1,44 @@
import React from 'react'
import Content from '@theme-original/DocSidebar/Desktop/Content'
import { useLocation } from '@docusaurus/router'
import Link from '@docusaurus/Link'
const subNavRoutes = [
// Add any routes which should have a subnav
'/api',
'/cli',
'/gotrue',
'/supabase-js',
'/supabase-dart',
]
const requiresSubNav = (pathname, routes) => {
return routes.some((route) => pathname.indexOf(route) == 0)
}
export default function ContentWrapper(props) {
const { pathname } = useLocation()
return (
<>
{pathname && requiresSubNav(pathname, subNavRoutes) && (
<Link to="/" id="custom--main-menu-button">
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M20.3284 11.0001V13.0001L7.50011 13.0001L10.7426 16.2426L9.32842 17.6568L3.67157 12L9.32842 6.34314L10.7426 7.75735L7.49988 11.0001L20.3284 11.0001Z"
fill="currentColor"
/>
</svg>
<span>All Reference Docs</span>
</Link>
)}
<Content {...props} />
</>
)
}
@@ -0,0 +1,16 @@
import React from 'react'
import { useLocation } from '@docusaurus/router'
import { isRegexpStringMatch } from '@docusaurus/theme-common'
import NavbarItem from '@theme-original/NavbarItem'
export default function NavbarItemWrapper(props) {
const { pathname } = useLocation()
if (
!props.supabaseCustomNavBarRegex ||
isRegexpStringMatch(props.supabaseCustomNavBarRegex, pathname)
) {
return <NavbarItem {...props} />
} else {
return null
}
}
+34
View File
@@ -0,0 +1,34 @@
import { SpecLink } from './Spec'
import { Url } from 'url'
export type CliInfo = {
id: string
version: string
title: string
language: string
source: Url
bugs: Url
spec: Url
description: string
options: string
}
export type CliCommand = {
id: string
title: string
summary: string
description: string
tags: string[]
links: SpecLink[]
usage: string
subcommands: string[]
options: string
}
export interface CliSpec {
clispec: '001'
info: CliInfo
commands: CliCommand[]
}
+29
View File
@@ -0,0 +1,29 @@
import { SpecLink } from './Spec'
import { Url } from 'url'
export type ConfigInfo = {
id: string
version: string
title: string
source: Url
bugs: Url
spec: Url
description: string
}
export type ConfigParameter = {
id: string
title: string
tags: string[]
required: boolean
description: string
links: SpecLink[]
}
export interface ConfigSpec {
configspec: '001'
info: ConfigInfo
parameters: ConfigParameter[]
}
+75
View File
@@ -0,0 +1,75 @@
import { SpecLink } from './Spec'
import { Url } from 'url'
export type SdkInfo = {
id: string
version: string
title: string
language: string
source: Url
bugs: Url
spec: Url
description: string
options: string
}
export type SdkType = {
id: string
title: string
summary: string
source: Url
value: string
ref?: SdkType
links: SpecLink[]
}
export type FunctionAttribute = {
id: string
title: string
required: boolean
description: string
type?: string[]
ref?: string // If a "type" is not supplied, a "ref" must be. This is a pointer to a type.
children: FunctionAttribute[]
}
export type FunctionReturn = {
id: string
title: string
value: string
description: string
ref?: string // This is a pointer to a type.
}
export type FunctionExample = {
id: string
title: string
description?: string
links: SpecLink[]
code: string
returns?: FunctionReturn
}
export type Function = {
id: string
title: string
summary: string
source: Url
description?: string
usage: string
tags: string[]
links: SpecLink[]
attributes?: FunctionAttribute[]
returns?: FunctionReturn[]
examples?: FunctionExample[]
}
export interface SdkSpec {
sdkspec: '001'
info: SdkInfo
functions: Function[]
types: SdkType[]
}
+6
View File
@@ -0,0 +1,6 @@
import { Url } from 'url'
export type SpecLink = {
name: string
url: Url
}
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 KiB

@@ -0,0 +1,25 @@
<svg width="841" height="112" viewBox="0 0 841 112" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="600" y="12" width="240.1" height="87.5904" rx="14.0145" fill="#3ECF8E" fill-opacity="0.2"/>
<path d="M661.22 46.0399V38.7443H632.472V46.0399H643.005V73H650.639V46.0399H661.22ZM674.177 55.848C674.177 48.6973 679.299 45.4601 684.082 45.4601C688.817 45.4601 693.938 48.6973 693.938 55.848C693.938 62.9987 688.817 66.1875 684.082 66.1875C679.299 66.1875 674.177 62.9987 674.177 55.848ZM666.254 55.8963C666.254 66.719 674.419 73.7247 684.082 73.7247C693.697 73.7247 701.862 66.719 701.862 55.8963C701.862 45.0253 693.697 38.0195 684.082 38.0195C674.419 38.0195 666.254 45.0253 666.254 55.8963ZM716.386 55.848C716.386 48.6973 721.507 45.4601 726.29 45.4601C731.025 45.4601 736.147 48.6973 736.147 55.848C736.147 62.9987 731.025 66.1875 726.29 66.1875C721.507 66.1875 716.386 62.9987 716.386 55.848ZM708.462 55.8963C708.462 66.719 716.627 73.7247 726.29 73.7247C735.905 73.7247 744.07 66.719 744.07 55.8963C744.07 45.0253 735.905 38.0195 726.29 38.0195C716.627 38.0195 708.462 45.0253 708.462 55.8963ZM775.069 73V65.7043H760.285V38.7443H752.651V73H775.069ZM806.972 47.1512C806.247 43.141 803.01 38.0195 794.458 38.0195C787.887 38.0195 782.186 42.5612 782.186 49.0355C782.186 54.1086 785.713 57.9739 791.511 59.0851L796.197 59.9548C798.468 60.3896 799.869 61.6458 799.869 63.3852C799.869 65.5111 798.033 66.9606 795.038 66.9606C790.351 66.9606 788.225 64.2066 787.935 61.0661L780.929 62.7571C781.413 67.5887 785.471 73.7247 794.941 73.7247C803.106 73.7247 807.6 68.2651 807.6 62.902C807.6 58.0222 804.218 53.8187 797.695 52.6108L793.105 51.7412C790.738 51.3063 789.723 50.0984 789.723 48.4557C789.723 46.5714 791.559 44.7837 794.41 44.7837C798.565 44.7837 799.869 47.4894 800.111 49.0838L806.972 47.1512Z" fill="#3ECF8E"/>
<path d="M135.372 66.5501C135.972 72.1514 141.067 81.7535 155.852 81.7535C168.74 81.7535 174.934 73.5517 174.934 65.55C174.934 58.3483 170.039 52.447 160.348 50.4465L153.355 48.9462C150.657 48.4461 148.859 46.9458 148.859 44.5452C148.859 41.7445 151.656 39.6442 155.153 39.6442C160.748 39.6442 162.846 43.3449 163.245 46.2457L174.335 43.7451C173.735 38.4439 169.04 29.542 155.053 29.542C144.463 29.542 136.671 36.8436 136.671 45.6454C136.671 52.5469 140.967 58.2484 150.458 60.3487L156.951 61.8491C160.748 62.6492 162.246 64.4498 162.246 66.6502C162.246 69.2508 160.148 71.5513 155.752 71.5513C149.958 71.5513 147.061 67.9504 146.761 64.0495L135.372 66.5501Z" fill="white"/>
<path d="M217.396 80.253H230.084C229.885 78.5525 229.584 75.1518 229.584 71.3509V31.042H216.296V59.6483C216.296 65.3497 212.9 69.3505 207.006 69.3505C200.812 69.3505 198.014 64.9495 198.014 59.4483V31.042H184.728V62.149C184.728 72.8513 191.52 81.5532 203.409 81.5532C208.604 81.5532 214.3 79.5528 216.997 74.9518C216.997 76.9522 217.196 79.2527 217.396 80.253Z" fill="white"/>
<path d="M257.051 99.2573V75.4521C259.448 78.7527 264.444 81.4534 271.238 81.4534C285.125 81.4534 294.414 70.4508 294.414 55.5475C294.414 40.9443 286.124 29.9419 271.738 29.9419C264.345 29.9419 258.85 33.2425 256.653 37.0435V31.0421H243.765V99.2573H257.051ZM281.328 55.6476C281.328 64.4496 275.933 69.5506 269.139 69.5506C262.347 69.5506 256.852 64.3495 256.852 55.6476C256.852 46.9457 262.347 41.8445 269.139 41.8445C275.933 41.8445 281.328 46.9457 281.328 55.6476Z" fill="white"/>
<path d="M301.939 66.8502C301.939 74.552 308.333 81.6536 318.823 81.6536C326.115 81.6536 330.81 78.2527 333.308 74.3518C333.308 76.2523 333.507 78.9528 333.808 80.2533H345.996C345.696 78.5528 345.398 75.052 345.398 72.4515V48.246C345.398 38.3438 339.603 29.542 324.018 29.542C310.831 29.542 303.736 38.0437 302.939 45.7455L314.726 48.246C315.127 43.9451 318.324 40.2443 324.117 40.2443C329.712 40.2443 332.41 43.1449 332.41 46.6457C332.41 48.3462 331.511 49.7465 328.713 50.1465L316.626 51.9469C308.434 53.1472 301.939 58.0482 301.939 66.8502ZM321.619 71.7514C317.325 71.7514 315.226 68.9507 315.226 66.0501C315.226 62.2492 317.923 60.3487 321.321 59.8487L332.41 58.1483V60.3487C332.41 69.0508 327.215 71.7514 321.619 71.7514Z" fill="white"/>
<path d="M371.678 80.2531V74.2518C374.275 78.4528 379.47 81.4534 386.264 81.4534C400.251 81.4534 409.442 70.3509 409.442 55.4476C409.442 40.8442 401.149 29.7419 386.763 29.7419C379.47 29.7419 374.075 32.9426 371.878 36.4432V7.83691H358.791V80.2531H371.678ZM396.154 55.5475C396.154 64.5495 390.76 69.5506 383.966 69.5506C377.272 69.5506 371.678 64.4496 371.678 55.5475C371.678 46.5455 377.272 41.6445 383.966 41.6445C390.76 41.6445 396.154 46.5455 396.154 55.5475Z" fill="white"/>
<path d="M416.965 66.8502C416.965 74.552 423.358 81.6536 433.849 81.6536C441.14 81.6536 445.838 78.2527 448.333 74.3518C448.333 76.2523 448.535 78.9528 448.833 80.2533H461.021C460.723 78.5528 460.423 75.052 460.423 72.4515V48.246C460.423 38.3438 454.628 29.542 439.043 29.542C425.856 29.542 418.764 38.0437 417.964 45.7455L429.752 48.246C430.152 43.9451 433.349 40.2443 439.142 40.2443C444.738 40.2443 447.435 43.1449 447.435 46.6457C447.435 48.3462 446.537 49.7465 443.739 50.1465L431.651 51.9469C423.459 53.1472 416.965 58.0482 416.965 66.8502ZM436.646 71.7514C432.35 71.7514 430.251 68.9507 430.251 66.0501C430.251 62.2492 432.948 60.3487 436.346 59.8487L447.435 58.1483V60.3487C447.435 69.0508 442.24 71.7514 436.646 71.7514Z" fill="white"/>
<path d="M469.62 66.5501C470.218 72.1514 475.315 81.7535 490.099 81.7535C502.987 81.7535 509.181 73.5517 509.181 65.55C509.181 58.3483 504.286 52.447 494.595 50.4465L487.602 48.9462C484.905 48.4461 483.108 46.9458 483.108 44.5452C483.108 41.7445 485.904 39.6442 489.4 39.6442C494.996 39.6442 497.093 43.3449 497.494 46.2457L508.583 43.7451C507.982 38.4439 503.287 29.542 489.302 29.542C478.711 29.542 470.919 36.8436 470.919 45.6454C470.919 52.5469 475.214 58.2484 484.705 60.3487L491.199 61.8491C494.996 62.6492 496.495 64.4498 496.495 66.6502C496.495 69.2508 494.396 71.5513 490.001 71.5513C484.206 71.5513 481.309 67.9504 481.009 64.0495L469.62 66.5501Z" fill="white"/>
<path d="M529.36 50.0464C529.66 45.5455 533.457 40.3442 540.35 40.3442C547.942 40.3442 551.141 45.1455 551.34 50.0464H529.36ZM552.639 62.8494C551.04 67.2502 547.644 70.351 541.45 70.351C534.855 70.351 529.36 65.6499 529.062 59.1486H564.227C564.227 58.9484 564.427 56.948 564.427 55.0475C564.427 39.244 555.336 29.542 540.151 29.542C527.563 29.542 515.973 39.7441 515.973 55.4477C515.973 72.0513 527.861 81.7535 541.349 81.7535C553.437 81.7535 561.23 74.6519 563.728 66.15L552.639 62.8494Z" fill="white"/>
<path d="M63.6827 110.073C60.8232 113.674 55.0253 111.701 54.9564 107.103L53.9489 39.8516L99.1686 39.8516C107.359 39.8516 111.928 49.3117 106.834 55.7263L63.6827 110.073Z" fill="url(#paint0_linear_2203_4864)"/>
<path d="M63.6827 110.073C60.8232 113.674 55.0253 111.701 54.9564 107.103L53.9489 39.8516L99.1686 39.8516C107.359 39.8516 111.928 49.3117 106.834 55.7263L63.6827 110.073Z" fill="url(#paint1_linear_2203_4864)" fill-opacity="0.2"/>
<path d="M45.2924 1.85984C48.1519 -1.74155 53.9498 0.231755 54.0187 4.82982L54.4603 72.081H9.80647C1.61572 72.081 -2.95241 62.6209 2.14084 56.2063L45.2924 1.85984Z" fill="#3ECF8E"/>
<defs>
<linearGradient id="paint0_linear_2203_4864" x1="53.9489" y1="54.7628" x2="94.1386" y2="71.6184" gradientUnits="userSpaceOnUse">
<stop stop-color="#249361"/>
<stop offset="1" stop-color="#3ECF8E"/>
</linearGradient>
<linearGradient id="paint1_linear_2203_4864" x1="36.1309" y1="30.3669" x2="54.4595" y2="64.8695" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.4 KiB

@@ -0,0 +1,25 @@
<svg width="841" height="112" viewBox="0 0 841 112" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M135.372 66.5501C135.972 72.1514 141.067 81.7535 155.852 81.7535C168.74 81.7535 174.934 73.5517 174.934 65.55C174.934 58.3483 170.039 52.447 160.348 50.4465L153.355 48.9462C150.657 48.4461 148.859 46.9458 148.859 44.5452C148.859 41.7445 151.656 39.6442 155.153 39.6442C160.748 39.6442 162.846 43.3449 163.245 46.2457L174.335 43.7451C173.735 38.4439 169.04 29.542 155.053 29.542C144.463 29.542 136.671 36.8436 136.671 45.6454C136.671 52.5469 140.967 58.2484 150.458 60.3487L156.951 61.8491C160.748 62.6492 162.246 64.4498 162.246 66.6502C162.246 69.2508 160.148 71.5513 155.752 71.5513C149.958 71.5513 147.061 67.9504 146.761 64.0495L135.372 66.5501Z" fill="#1F1F1F"/>
<path d="M217.396 80.253H230.084C229.885 78.5525 229.584 75.1518 229.584 71.3509V31.042H216.296V59.6483C216.296 65.3497 212.9 69.3505 207.006 69.3505C200.812 69.3505 198.014 64.9495 198.014 59.4483V31.042H184.728V62.149C184.728 72.8513 191.52 81.5532 203.409 81.5532C208.604 81.5532 214.3 79.5528 216.997 74.9518C216.997 76.9522 217.196 79.2527 217.396 80.253Z" fill="#1F1F1F"/>
<path d="M257.051 99.2573V75.4521C259.448 78.7527 264.444 81.4534 271.238 81.4534C285.125 81.4534 294.414 70.4508 294.414 55.5475C294.414 40.9443 286.124 29.9419 271.738 29.9419C264.345 29.9419 258.85 33.2425 256.653 37.0435V31.0421H243.765V99.2573H257.051ZM281.328 55.6476C281.328 64.4496 275.933 69.5506 269.139 69.5506C262.347 69.5506 256.852 64.3495 256.852 55.6476C256.852 46.9457 262.347 41.8445 269.139 41.8445C275.933 41.8445 281.328 46.9457 281.328 55.6476Z" fill="#1F1F1F"/>
<path d="M301.939 66.8502C301.939 74.552 308.333 81.6536 318.823 81.6536C326.115 81.6536 330.81 78.2527 333.308 74.3518C333.308 76.2523 333.507 78.9528 333.808 80.2533H345.996C345.696 78.5528 345.398 75.052 345.398 72.4515V48.246C345.398 38.3438 339.603 29.542 324.018 29.542C310.831 29.542 303.736 38.0437 302.939 45.7455L314.726 48.246C315.127 43.9451 318.324 40.2443 324.117 40.2443C329.712 40.2443 332.41 43.1449 332.41 46.6457C332.41 48.3462 331.511 49.7465 328.713 50.1465L316.626 51.9469C308.434 53.1472 301.939 58.0482 301.939 66.8502ZM321.619 71.7514C317.325 71.7514 315.226 68.9507 315.226 66.0501C315.226 62.2492 317.923 60.3487 321.321 59.8487L332.41 58.1483V60.3487C332.41 69.0508 327.215 71.7514 321.619 71.7514Z" fill="#1F1F1F"/>
<path d="M371.678 80.2531V74.2518C374.275 78.4528 379.47 81.4534 386.264 81.4534C400.251 81.4534 409.442 70.3509 409.442 55.4476C409.442 40.8442 401.149 29.7419 386.763 29.7419C379.47 29.7419 374.075 32.9426 371.878 36.4432V7.83691H358.791V80.2531H371.678ZM396.154 55.5475C396.154 64.5495 390.76 69.5506 383.966 69.5506C377.272 69.5506 371.678 64.4496 371.678 55.5475C371.678 46.5455 377.272 41.6445 383.966 41.6445C390.76 41.6445 396.154 46.5455 396.154 55.5475Z" fill="#1F1F1F"/>
<path d="M416.965 66.8502C416.965 74.552 423.358 81.6536 433.849 81.6536C441.14 81.6536 445.838 78.2527 448.333 74.3518C448.333 76.2523 448.535 78.9528 448.833 80.2533H461.021C460.723 78.5528 460.423 75.052 460.423 72.4515V48.246C460.423 38.3438 454.628 29.542 439.043 29.542C425.856 29.542 418.764 38.0437 417.964 45.7455L429.752 48.246C430.152 43.9451 433.349 40.2443 439.142 40.2443C444.738 40.2443 447.435 43.1449 447.435 46.6457C447.435 48.3462 446.537 49.7465 443.739 50.1465L431.651 51.9469C423.459 53.1472 416.965 58.0482 416.965 66.8502ZM436.646 71.7514C432.35 71.7514 430.251 68.9507 430.251 66.0501C430.251 62.2492 432.948 60.3487 436.346 59.8487L447.435 58.1483V60.3487C447.435 69.0508 442.24 71.7514 436.646 71.7514Z" fill="#1F1F1F"/>
<path d="M469.62 66.5501C470.218 72.1514 475.315 81.7535 490.099 81.7535C502.987 81.7535 509.181 73.5517 509.181 65.55C509.181 58.3483 504.286 52.447 494.595 50.4465L487.602 48.9462C484.905 48.4461 483.108 46.9458 483.108 44.5452C483.108 41.7445 485.904 39.6442 489.4 39.6442C494.996 39.6442 497.093 43.3449 497.494 46.2457L508.583 43.7451C507.982 38.4439 503.287 29.542 489.302 29.542C478.711 29.542 470.919 36.8436 470.919 45.6454C470.919 52.5469 475.214 58.2484 484.705 60.3487L491.199 61.8491C494.996 62.6492 496.495 64.4498 496.495 66.6502C496.495 69.2508 494.396 71.5513 490.001 71.5513C484.206 71.5513 481.309 67.9504 481.009 64.0495L469.62 66.5501Z" fill="#1F1F1F"/>
<path d="M529.36 50.0464C529.66 45.5455 533.457 40.3442 540.35 40.3442C547.942 40.3442 551.141 45.1455 551.34 50.0464H529.36ZM552.639 62.8494C551.04 67.2502 547.644 70.351 541.45 70.351C534.855 70.351 529.36 65.6499 529.062 59.1486H564.227C564.227 58.9484 564.427 56.948 564.427 55.0475C564.427 39.244 555.336 29.542 540.151 29.542C527.563 29.542 515.973 39.7441 515.973 55.4477C515.973 72.0513 527.861 81.7535 541.349 81.7535C553.437 81.7535 561.23 74.6519 563.728 66.15L552.639 62.8494Z" fill="#1F1F1F"/>
<path d="M63.6827 110.073C60.8232 113.674 55.0253 111.701 54.9564 107.103L53.9489 39.8516L99.1686 39.8516C107.359 39.8516 111.928 49.3117 106.834 55.7263L63.6827 110.073Z" fill="url(#paint0_linear_2203_4846)"/>
<path d="M63.6827 110.073C60.8232 113.674 55.0253 111.701 54.9564 107.103L53.9489 39.8516L99.1686 39.8516C107.359 39.8516 111.928 49.3117 106.834 55.7263L63.6827 110.073Z" fill="url(#paint1_linear_2203_4846)" fill-opacity="0.2"/>
<path d="M45.2924 1.85984C48.1519 -1.74155 53.9498 0.231755 54.0187 4.82982L54.4603 72.081H9.80647C1.61572 72.081 -2.95241 62.6209 2.14084 56.2063L45.2924 1.85984Z" fill="#3ECF8E"/>
<rect x="600" y="12" width="240.1" height="87.5904" rx="14.0145" fill="#3ECF8E" fill-opacity="0.2"/>
<path d="M661.22 46.0399V38.7443H632.472V46.0399H643.005V73H650.639V46.0399H661.22ZM674.177 55.848C674.177 48.6973 679.299 45.4601 684.082 45.4601C688.817 45.4601 693.938 48.6973 693.938 55.848C693.938 62.9987 688.817 66.1875 684.082 66.1875C679.299 66.1875 674.177 62.9987 674.177 55.848ZM666.254 55.8963C666.254 66.719 674.419 73.7247 684.082 73.7247C693.697 73.7247 701.862 66.719 701.862 55.8963C701.862 45.0253 693.697 38.0195 684.082 38.0195C674.419 38.0195 666.254 45.0253 666.254 55.8963ZM716.386 55.848C716.386 48.6973 721.507 45.4601 726.29 45.4601C731.025 45.4601 736.147 48.6973 736.147 55.848C736.147 62.9987 731.025 66.1875 726.29 66.1875C721.507 66.1875 716.386 62.9987 716.386 55.848ZM708.462 55.8963C708.462 66.719 716.627 73.7247 726.29 73.7247C735.905 73.7247 744.07 66.719 744.07 55.8963C744.07 45.0253 735.905 38.0195 726.29 38.0195C716.627 38.0195 708.462 45.0253 708.462 55.8963ZM775.069 73V65.7043H760.285V38.7443H752.651V73H775.069ZM806.972 47.1512C806.247 43.141 803.01 38.0195 794.458 38.0195C787.887 38.0195 782.186 42.5612 782.186 49.0355C782.186 54.1086 785.713 57.9739 791.511 59.0851L796.197 59.9548C798.468 60.3896 799.869 61.6458 799.869 63.3852C799.869 65.5111 798.033 66.9606 795.038 66.9606C790.351 66.9606 788.225 64.2066 787.935 61.0661L780.929 62.7571C781.413 67.5887 785.471 73.7247 794.941 73.7247C803.106 73.7247 807.6 68.2651 807.6 62.902C807.6 58.0222 804.218 53.8187 797.695 52.6108L793.105 51.7412C790.738 51.3063 789.723 50.0984 789.723 48.4557C789.723 46.5714 791.559 44.7837 794.41 44.7837C798.565 44.7837 799.869 47.4894 800.111 49.0838L806.972 47.1512Z" fill="#3ECF8E"/>
<defs>
<linearGradient id="paint0_linear_2203_4846" x1="53.9489" y1="54.7628" x2="94.1386" y2="71.6184" gradientUnits="userSpaceOnUse">
<stop stop-color="#249361"/>
<stop offset="1" stop-color="#3ECF8E"/>
</linearGradient>
<linearGradient id="paint1_linear_2203_4846" x1="36.1309" y1="30.3669" x2="54.4595" y2="64.8695" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.4 KiB

@@ -0,0 +1,171 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1088" height="687.962" viewBox="0 0 1088 687.962">
<title>Easy to Use</title>
<g id="Group_12" data-name="Group 12" transform="translate(-57 -56)">
<g id="Group_11" data-name="Group 11" transform="translate(57 56)">
<path id="Path_83" data-name="Path 83" d="M1017.81,560.461c-5.27,45.15-16.22,81.4-31.25,110.31-20,38.52-54.21,54.04-84.77,70.28a193.275,193.275,0,0,1-27.46,11.94c-55.61,19.3-117.85,14.18-166.74,3.99a657.282,657.282,0,0,0-104.09-13.16q-14.97-.675-29.97-.67c-15.42.02-293.07,5.29-360.67-131.57-16.69-33.76-28.13-75-32.24-125.27-11.63-142.12,52.29-235.46,134.74-296.47,155.97-115.41,369.76-110.57,523.43,7.88C941.15,276.621,1036.99,396.031,1017.81,560.461Z" transform="translate(-56 -106.019)" fill="#3f3d56"/>
<path id="Path_84" data-name="Path 84" d="M986.56,670.771c-20,38.52-47.21,64.04-77.77,80.28a193.272,193.272,0,0,1-27.46,11.94c-55.61,19.3-117.85,14.18-166.74,3.99a657.3,657.3,0,0,0-104.09-13.16q-14.97-.675-29.97-.67-23.13.03-46.25,1.72c-100.17,7.36-253.82-6.43-321.42-143.29L382,283.981,444.95,445.6l20.09,51.59,55.37-75.98L549,381.981l130.2,149.27,36.8-81.27L970.78,657.9l14.21,11.59Z" transform="translate(-56 -106.019)" fill="#f2f2f2"/>
<path id="Path_85" data-name="Path 85" d="M302,282.962l26-57,36,83-31-60Z" opacity="0.1"/>
<path id="Path_86" data-name="Path 86" d="M610.5,753.821q-14.97-.675-29.97-.67L465.04,497.191Z" transform="translate(-56 -106.019)" opacity="0.1"/>
<path id="Path_87" data-name="Path 87" d="M464.411,315.191,493,292.962l130,150-132-128Z" opacity="0.1"/>
<path id="Path_88" data-name="Path 88" d="M908.79,751.051a193.265,193.265,0,0,1-27.46,11.94L679.2,531.251Z" transform="translate(-56 -106.019)" opacity="0.1"/>
<circle id="Ellipse_11" data-name="Ellipse 11" cx="3" cy="3" r="3" transform="translate(479 98.962)" fill="#f2f2f2"/>
<circle id="Ellipse_12" data-name="Ellipse 12" cx="3" cy="3" r="3" transform="translate(396 201.962)" fill="#f2f2f2"/>
<circle id="Ellipse_13" data-name="Ellipse 13" cx="2" cy="2" r="2" transform="translate(600 220.962)" fill="#f2f2f2"/>
<circle id="Ellipse_14" data-name="Ellipse 14" cx="2" cy="2" r="2" transform="translate(180 265.962)" fill="#f2f2f2"/>
<circle id="Ellipse_15" data-name="Ellipse 15" cx="2" cy="2" r="2" transform="translate(612 96.962)" fill="#f2f2f2"/>
<circle id="Ellipse_16" data-name="Ellipse 16" cx="2" cy="2" r="2" transform="translate(736 192.962)" fill="#f2f2f2"/>
<circle id="Ellipse_17" data-name="Ellipse 17" cx="2" cy="2" r="2" transform="translate(858 344.962)" fill="#f2f2f2"/>
<path id="Path_89" data-name="Path 89" d="M306,121.222h-2.76v-2.76h-1.48v2.76H299V122.7h2.76v2.759h1.48V122.7H306Z" fill="#f2f2f2"/>
<path id="Path_90" data-name="Path 90" d="M848,424.222h-2.76v-2.76h-1.48v2.76H841V425.7h2.76v2.759h1.48V425.7H848Z" fill="#f2f2f2"/>
<path id="Path_91" data-name="Path 91" d="M1144,719.981c0,16.569-243.557,74-544,74s-544-57.431-544-74,243.557,14,544,14S1144,703.413,1144,719.981Z" transform="translate(-56 -106.019)" fill="#3f3d56"/>
<path id="Path_92" data-name="Path 92" d="M1144,719.981c0,16.569-243.557,74-544,74s-544-57.431-544-74,243.557,14,544,14S1144,703.413,1144,719.981Z" transform="translate(-56 -106.019)" opacity="0.1"/>
<ellipse id="Ellipse_18" data-name="Ellipse 18" cx="544" cy="30" rx="544" ry="30" transform="translate(0 583.962)" fill="#3f3d56"/>
<path id="Path_93" data-name="Path 93" d="M624,677.981c0,33.137-14.775,24-33,24s-33,9.137-33-24,33-96,33-96S624,644.844,624,677.981Z" transform="translate(-56 -106.019)" fill="#ff6584"/>
<path id="Path_94" data-name="Path 94" d="M606,690.66c0,15.062-6.716,10.909-15,10.909s-15,4.153-15-10.909,15-43.636,15-43.636S606,675.6,606,690.66Z" transform="translate(-56 -106.019)" opacity="0.1"/>
<rect id="Rectangle_97" data-name="Rectangle 97" width="92" height="18" rx="9" transform="translate(489 604.962)" fill="#2f2e41"/>
<rect id="Rectangle_98" data-name="Rectangle 98" width="92" height="18" rx="9" transform="translate(489 586.962)" fill="#2f2e41"/>
<path id="Path_95" data-name="Path 95" d="M193,596.547c0,55.343,34.719,100.126,77.626,100.126" transform="translate(-56 -106.019)" fill="#3f3d56"/>
<path id="Path_96" data-name="Path 96" d="M270.626,696.673c0-55.965,38.745-101.251,86.626-101.251" transform="translate(-56 -106.019)" fill="#6c63ff"/>
<path id="Path_97" data-name="Path 97" d="M221.125,601.564c0,52.57,22.14,95.109,49.5,95.109" transform="translate(-56 -106.019)" fill="#6c63ff"/>
<path id="Path_98" data-name="Path 98" d="M270.626,696.673c0-71.511,44.783-129.377,100.126-129.377" transform="translate(-56 -106.019)" fill="#3f3d56"/>
<path id="Path_99" data-name="Path 99" d="M254.3,697.379s11.009-.339,14.326-2.7,16.934-5.183,17.757-1.395,16.544,18.844,4.115,18.945-28.879-1.936-32.19-3.953S254.3,697.379,254.3,697.379Z" transform="translate(-56 -106.019)" fill="#a8a8a8"/>
<path id="Path_100" data-name="Path 100" d="M290.716,710.909c-12.429.1-28.879-1.936-32.19-3.953-2.522-1.536-3.527-7.048-3.863-9.591l-.368.014s.7,8.879,4.009,10.9,19.761,4.053,32.19,3.953c3.588-.029,4.827-1.305,4.759-3.2C294.755,710.174,293.386,710.887,290.716,710.909Z" transform="translate(-56 -106.019)" opacity="0.2"/>
<path id="Path_101" data-name="Path 101" d="M777.429,633.081c0,38.029,23.857,68.8,53.341,68.8" transform="translate(-56 -106.019)" fill="#3f3d56"/>
<path id="Path_102" data-name="Path 102" d="M830.769,701.882c0-38.456,26.623-69.575,59.525-69.575" transform="translate(-56 -106.019)" fill="#6c63ff"/>
<path id="Path_103" data-name="Path 103" d="M796.755,636.528c0,36.124,15.213,65.354,34.014,65.354" transform="translate(-56 -106.019)" fill="#6c63ff"/>
<path id="Path_104" data-name="Path 104" d="M830.769,701.882c0-49.139,30.773-88.9,68.8-88.9" transform="translate(-56 -106.019)" fill="#3f3d56"/>
<path id="Path_105" data-name="Path 105" d="M819.548,702.367s7.565-.233,9.844-1.856,11.636-3.562,12.2-.958,11.368,12.949,2.828,13.018-19.844-1.33-22.119-2.716S819.548,702.367,819.548,702.367Z" transform="translate(-56 -106.019)" fill="#a8a8a8"/>
<path id="Path_106" data-name="Path 106" d="M844.574,711.664c-8.54.069-19.844-1.33-22.119-2.716-1.733-1.056-2.423-4.843-2.654-6.59l-.253.01s.479,6.1,2.755,7.487,13.579,2.785,22.119,2.716c2.465-.02,3.317-.9,3.27-2.2C847.349,711.159,846.409,711.649,844.574,711.664Z" transform="translate(-56 -106.019)" opacity="0.2"/>
<path id="Path_107" data-name="Path 107" d="M949.813,724.718s11.36-1.729,14.5-4.591,16.89-7.488,18.217-3.667,19.494,17.447,6.633,19.107-30.153,1.609-33.835-.065S949.813,724.718,949.813,724.718Z" transform="translate(-56 -106.019)" fill="#a8a8a8"/>
<path id="Path_108" data-name="Path 108" d="M989.228,734.173c-12.86,1.659-30.153,1.609-33.835-.065-2.8-1.275-4.535-6.858-5.2-9.45l-.379.061s1.833,9.109,5.516,10.783,20.975,1.725,33.835.065c3.712-.479,4.836-1.956,4.529-3.906C993.319,732.907,991.991,733.817,989.228,734.173Z" transform="translate(-56 -106.019)" opacity="0.2"/>
<path id="Path_109" data-name="Path 109" d="M670.26,723.9s9.587-1.459,12.237-3.875,14.255-6.32,15.374-3.095,16.452,14.725,5.6,16.125-25.448,1.358-28.555-.055S670.26,723.9,670.26,723.9Z" transform="translate(-56 -106.019)" fill="#a8a8a8"/>
<path id="Path_110" data-name="Path 110" d="M703.524,731.875c-10.853,1.4-25.448,1.358-28.555-.055-2.367-1.076-3.827-5.788-4.39-7.976l-.32.051s1.547,7.687,4.655,9.1,17.7,1.456,28.555.055c3.133-.4,4.081-1.651,3.822-3.3C706.977,730.807,705.856,731.575,703.524,731.875Z" transform="translate(-56 -106.019)" opacity="0.2"/>
<path id="Path_111" data-name="Path 111" d="M178.389,719.109s7.463-1.136,9.527-3.016,11.1-4.92,11.969-2.409,12.808,11.463,4.358,12.553-19.811,1.057-22.23-.043S178.389,719.109,178.389,719.109Z" transform="translate(-56 -106.019)" fill="#a8a8a8"/>
<path id="Path_112" data-name="Path 112" d="M204.285,725.321c-8.449,1.09-19.811,1.057-22.23-.043-1.842-.838-2.979-4.506-3.417-6.209l-.249.04s1.2,5.984,3.624,7.085,13.781,1.133,22.23.043c2.439-.315,3.177-1.285,2.976-2.566C206.973,724.489,206.1,725.087,204.285,725.321Z" transform="translate(-56 -106.019)" opacity="0.2"/>
<path id="Path_113" data-name="Path 113" d="M439.7,707.337c0,30.22-42.124,20.873-93.7,20.873s-93.074,9.347-93.074-20.873,42.118-36.793,93.694-36.793S439.7,677.117,439.7,707.337Z" transform="translate(-56 -106.019)" opacity="0.1"/>
<path id="Path_114" data-name="Path 114" d="M439.7,699.9c0,30.22-42.124,20.873-93.7,20.873s-93.074,9.347-93.074-20.873S295.04,663.1,346.616,663.1,439.7,669.676,439.7,699.9Z" transform="translate(-56 -106.019)" fill="#3f3d56"/>
</g>
<g id="docusaurus_keytar" transform="translate(312.271 493.733)">
<path id="Path_40" data-name="Path 40" d="M99,52h91.791V89.153H99Z" transform="translate(5.904 -14.001)" fill="#fff" fill-rule="evenodd"/>
<path id="Path_41" data-name="Path 41" d="M24.855,163.927A21.828,21.828,0,0,1,5.947,153a21.829,21.829,0,0,0,18.908,32.782H46.71V163.927Z" transform="translate(-3 -4.634)" fill="#3ecc5f" fill-rule="evenodd"/>
<path id="Path_42" data-name="Path 42" d="M121.861,61.1l76.514-4.782V45.39A21.854,21.854,0,0,0,176.52,23.535H78.173L75.441,18.8a3.154,3.154,0,0,0-5.464,0l-2.732,4.732L64.513,18.8a3.154,3.154,0,0,0-5.464,0l-2.732,4.732L53.586,18.8a3.154,3.154,0,0,0-5.464,0L45.39,23.535c-.024,0-.046,0-.071,0l-4.526-4.525a3.153,3.153,0,0,0-5.276,1.414l-1.5,5.577-5.674-1.521a3.154,3.154,0,0,0-3.863,3.864L26,34.023l-5.575,1.494a3.155,3.155,0,0,0-1.416,5.278l4.526,4.526c0,.023,0,.046,0,.07L18.8,48.122a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,59.05a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,69.977a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,80.9a3.154,3.154,0,0,0,0,5.464L23.535,89.1,18.8,91.832a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,102.76a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,113.687a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,124.615a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,135.542a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,146.469a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,157.4a3.154,3.154,0,0,0,0,5.464l4.732,2.732L18.8,168.324a3.154,3.154,0,0,0,0,5.464l4.732,2.732A21.854,21.854,0,0,0,45.39,198.375H176.52a21.854,21.854,0,0,0,21.855-21.855V89.1l-76.514-4.782a11.632,11.632,0,0,1,0-23.219" transform="translate(-1.681 -17.226)" fill="#3ecc5f" fill-rule="evenodd"/>
<path id="Path_43" data-name="Path 43" d="M143,186.71h32.782V143H143Z" transform="translate(9.984 -5.561)" fill="#3ecc5f" fill-rule="evenodd"/>
<path id="Path_44" data-name="Path 44" d="M196.71,159.855a5.438,5.438,0,0,0-.7.07c-.042-.164-.081-.329-.127-.493a5.457,5.457,0,1,0-5.4-9.372q-.181-.185-.366-.367a5.454,5.454,0,1,0-9.384-5.4c-.162-.046-.325-.084-.486-.126a5.467,5.467,0,1,0-10.788,0c-.162.042-.325.08-.486.126a5.457,5.457,0,1,0-9.384,5.4,21.843,21.843,0,1,0,36.421,21.02,5.452,5.452,0,1,0,.7-10.858" transform="translate(10.912 -6.025)" fill="#44d860" fill-rule="evenodd"/>
<path id="Path_45" data-name="Path 45" d="M153,124.855h32.782V103H153Z" transform="translate(10.912 -9.271)" fill="#3ecc5f" fill-rule="evenodd"/>
<path id="Path_46" data-name="Path 46" d="M194.855,116.765a2.732,2.732,0,1,0,0-5.464,2.811,2.811,0,0,0-.349.035c-.022-.082-.04-.164-.063-.246a2.733,2.733,0,0,0-1.052-5.253,2.7,2.7,0,0,0-1.648.566q-.09-.093-.184-.184a2.7,2.7,0,0,0,.553-1.633,2.732,2.732,0,0,0-5.245-1.07,10.928,10.928,0,1,0,0,21.031,2.732,2.732,0,0,0,5.245-1.07,2.7,2.7,0,0,0-.553-1.633q.093-.09.184-.184a2.7,2.7,0,0,0,1.648.566,2.732,2.732,0,0,0,1.052-5.253c.023-.081.042-.164.063-.246a2.814,2.814,0,0,0,.349.035" transform="translate(12.767 -9.377)" fill="#44d860" fill-rule="evenodd"/>
<path id="Path_47" data-name="Path 47" d="M65.087,56.891a2.732,2.732,0,0,1-2.732-2.732,8.2,8.2,0,0,0-16.391,0,2.732,2.732,0,0,1-5.464,0,13.659,13.659,0,0,1,27.319,0,2.732,2.732,0,0,1-2.732,2.732" transform="translate(0.478 -15.068)" fill-rule="evenodd"/>
<path id="Path_48" data-name="Path 48" d="M103,191.347h65.565a21.854,21.854,0,0,0,21.855-21.855V93H124.855A21.854,21.854,0,0,0,103,114.855Z" transform="translate(6.275 -10.199)" fill="#ffff50" fill-rule="evenodd"/>
<path id="Path_49" data-name="Path 49" d="M173.216,129.787H118.535a1.093,1.093,0,1,1,0-2.185h54.681a1.093,1.093,0,0,1,0,2.185m0,21.855H118.535a1.093,1.093,0,1,1,0-2.186h54.681a1.093,1.093,0,0,1,0,2.186m0,21.855H118.535a1.093,1.093,0,1,1,0-2.185h54.681a1.093,1.093,0,0,1,0,2.185m0-54.434H118.535a1.093,1.093,0,1,1,0-2.185h54.681a1.093,1.093,0,0,1,0,2.185m0,21.652H118.535a1.093,1.093,0,1,1,0-2.186h54.681a1.093,1.093,0,0,1,0,2.186m0,21.855H118.535a1.093,1.093,0,1,1,0-2.186h54.681a1.093,1.093,0,0,1,0,2.186M189.585,61.611c-.013,0-.024-.007-.037-.005-3.377.115-4.974,3.492-6.384,6.472-1.471,3.114-2.608,5.139-4.473,5.078-2.064-.074-3.244-2.406-4.494-4.874-1.436-2.835-3.075-6.049-6.516-5.929-3.329.114-4.932,3.053-6.346,5.646-1.5,2.762-2.529,4.442-4.5,4.364-2.106-.076-3.225-1.972-4.52-4.167-1.444-2.443-3.112-5.191-6.487-5.1-3.272.113-4.879,2.606-6.3,4.808-1.5,2.328-2.552,3.746-4.551,3.662-2.156-.076-3.27-1.65-4.558-3.472-1.447-2.047-3.077-4.363-6.442-4.251-3.2.109-4.807,2.153-6.224,3.954-1.346,1.709-2.4,3.062-4.621,2.977a1.093,1.093,0,0,0-.079,2.186c3.3.11,4.967-1.967,6.417-3.81,1.286-1.635,2.4-3.045,4.582-3.12,2.1-.09,3.091,1.218,4.584,3.327,1.417,2,3.026,4.277,6.263,4.394,3.391.114,5.022-2.42,6.467-4.663,1.292-2,2.406-3.734,4.535-3.807,1.959-.073,3.026,1.475,4.529,4.022,1.417,2.4,3.023,5.121,6.324,5.241,3.415.118,5.064-2.863,6.5-5.5,1.245-2.282,2.419-4.437,4.5-4.509,1.959-.046,2.981,1.743,4.492,4.732,1.412,2.79,3.013,5.95,6.365,6.071l.185,0c3.348,0,4.937-3.36,6.343-6.331,1.245-2.634,2.423-5.114,4.444-5.216Z" transform="translate(7.109 -13.11)" fill-rule="evenodd"/>
<path id="Path_50" data-name="Path 50" d="M83,186.71h43.71V143H83Z" transform="translate(4.42 -5.561)" fill="#3ecc5f" fill-rule="evenodd"/>
<g id="Group_8" data-name="Group 8" transform="matrix(0.966, -0.259, 0.259, 0.966, 109.327, 91.085)">
<rect id="Rectangle_3" data-name="Rectangle 3" width="92.361" height="36.462" rx="2" transform="translate(0 0)" fill="#d8d8d8"/>
<g id="Group_2" data-name="Group 2" transform="translate(1.531 23.03)">
<rect id="Rectangle_4" data-name="Rectangle 4" width="5.336" height="5.336" rx="1" transform="translate(16.797 0)" fill="#4a4a4a"/>
<rect id="Rectangle_5" data-name="Rectangle 5" width="5.336" height="5.336" rx="1" transform="translate(23.12 0)" fill="#4a4a4a"/>
<rect id="Rectangle_6" data-name="Rectangle 6" width="5.336" height="5.336" rx="1" transform="translate(29.444 0)" fill="#4a4a4a"/>
<rect id="Rectangle_7" data-name="Rectangle 7" width="5.336" height="5.336" rx="1" transform="translate(35.768 0)" fill="#4a4a4a"/>
<rect id="Rectangle_8" data-name="Rectangle 8" width="5.336" height="5.336" rx="1" transform="translate(42.091 0)" fill="#4a4a4a"/>
<rect id="Rectangle_9" data-name="Rectangle 9" width="5.336" height="5.336" rx="1" transform="translate(48.415 0)" fill="#4a4a4a"/>
<rect id="Rectangle_10" data-name="Rectangle 10" width="5.336" height="5.336" rx="1" transform="translate(54.739 0)" fill="#4a4a4a"/>
<rect id="Rectangle_11" data-name="Rectangle 11" width="5.336" height="5.336" rx="1" transform="translate(61.063 0)" fill="#4a4a4a"/>
<rect id="Rectangle_12" data-name="Rectangle 12" width="5.336" height="5.336" rx="1" transform="translate(67.386 0)" fill="#4a4a4a"/>
<path id="Path_51" data-name="Path 51" d="M1.093,0H14.518a1.093,1.093,0,0,1,1.093,1.093V4.243a1.093,1.093,0,0,1-1.093,1.093H1.093A1.093,1.093,0,0,1,0,4.243V1.093A1.093,1.093,0,0,1,1.093,0ZM75,0H88.426a1.093,1.093,0,0,1,1.093,1.093V4.243a1.093,1.093,0,0,1-1.093,1.093H75a1.093,1.093,0,0,1-1.093-1.093V1.093A1.093,1.093,0,0,1,75,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
</g>
<g id="Group_3" data-name="Group 3" transform="translate(1.531 10.261)">
<path id="Path_52" data-name="Path 52" d="M1.093,0H6.218A1.093,1.093,0,0,1,7.31,1.093V4.242A1.093,1.093,0,0,1,6.218,5.335H1.093A1.093,1.093,0,0,1,0,4.242V1.093A1.093,1.093,0,0,1,1.093,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
<rect id="Rectangle_13" data-name="Rectangle 13" width="5.336" height="5.336" rx="1" transform="translate(8.299 0)" fill="#4a4a4a"/>
<rect id="Rectangle_14" data-name="Rectangle 14" width="5.336" height="5.336" rx="1" transform="translate(14.623 0)" fill="#4a4a4a"/>
<rect id="Rectangle_15" data-name="Rectangle 15" width="5.336" height="5.336" rx="1" transform="translate(20.947 0)" fill="#4a4a4a"/>
<rect id="Rectangle_16" data-name="Rectangle 16" width="5.336" height="5.336" rx="1" transform="translate(27.271 0)" fill="#4a4a4a"/>
<rect id="Rectangle_17" data-name="Rectangle 17" width="5.336" height="5.336" rx="1" transform="translate(33.594 0)" fill="#4a4a4a"/>
<rect id="Rectangle_18" data-name="Rectangle 18" width="5.336" height="5.336" rx="1" transform="translate(39.918 0)" fill="#4a4a4a"/>
<rect id="Rectangle_19" data-name="Rectangle 19" width="5.336" height="5.336" rx="1" transform="translate(46.242 0)" fill="#4a4a4a"/>
<rect id="Rectangle_20" data-name="Rectangle 20" width="5.336" height="5.336" rx="1" transform="translate(52.565 0)" fill="#4a4a4a"/>
<rect id="Rectangle_21" data-name="Rectangle 21" width="5.336" height="5.336" rx="1" transform="translate(58.888 0)" fill="#4a4a4a"/>
<rect id="Rectangle_22" data-name="Rectangle 22" width="5.336" height="5.336" rx="1" transform="translate(65.212 0)" fill="#4a4a4a"/>
<rect id="Rectangle_23" data-name="Rectangle 23" width="5.336" height="5.336" rx="1" transform="translate(71.536 0)" fill="#4a4a4a"/>
<rect id="Rectangle_24" data-name="Rectangle 24" width="5.336" height="5.336" rx="1" transform="translate(77.859 0)" fill="#4a4a4a"/>
<rect id="Rectangle_25" data-name="Rectangle 25" width="5.336" height="5.336" rx="1" transform="translate(84.183 0)" fill="#4a4a4a"/>
</g>
<g id="Group_4" data-name="Group 4" transform="translate(91.05 9.546) rotate(180)">
<path id="Path_53" data-name="Path 53" d="M1.093,0H6.219A1.093,1.093,0,0,1,7.312,1.093v3.15A1.093,1.093,0,0,1,6.219,5.336H1.093A1.093,1.093,0,0,1,0,4.243V1.093A1.093,1.093,0,0,1,1.093,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
<rect id="Rectangle_26" data-name="Rectangle 26" width="5.336" height="5.336" rx="1" transform="translate(8.299 0)" fill="#4a4a4a"/>
<rect id="Rectangle_27" data-name="Rectangle 27" width="5.336" height="5.336" rx="1" transform="translate(14.623 0)" fill="#4a4a4a"/>
<rect id="Rectangle_28" data-name="Rectangle 28" width="5.336" height="5.336" rx="1" transform="translate(20.947 0)" fill="#4a4a4a"/>
<rect id="Rectangle_29" data-name="Rectangle 29" width="5.336" height="5.336" rx="1" transform="translate(27.271 0)" fill="#4a4a4a"/>
<rect id="Rectangle_30" data-name="Rectangle 30" width="5.336" height="5.336" rx="1" transform="translate(33.594 0)" fill="#4a4a4a"/>
<rect id="Rectangle_31" data-name="Rectangle 31" width="5.336" height="5.336" rx="1" transform="translate(39.918 0)" fill="#4a4a4a"/>
<rect id="Rectangle_32" data-name="Rectangle 32" width="5.336" height="5.336" rx="1" transform="translate(46.242 0)" fill="#4a4a4a"/>
<rect id="Rectangle_33" data-name="Rectangle 33" width="5.336" height="5.336" rx="1" transform="translate(52.565 0)" fill="#4a4a4a"/>
<rect id="Rectangle_34" data-name="Rectangle 34" width="5.336" height="5.336" rx="1" transform="translate(58.889 0)" fill="#4a4a4a"/>
<rect id="Rectangle_35" data-name="Rectangle 35" width="5.336" height="5.336" rx="1" transform="translate(65.213 0)" fill="#4a4a4a"/>
<rect id="Rectangle_36" data-name="Rectangle 36" width="5.336" height="5.336" rx="1" transform="translate(71.537 0)" fill="#4a4a4a"/>
<rect id="Rectangle_37" data-name="Rectangle 37" width="5.336" height="5.336" rx="1" transform="translate(77.86 0)" fill="#4a4a4a"/>
<rect id="Rectangle_38" data-name="Rectangle 38" width="5.336" height="5.336" rx="1" transform="translate(84.183 0)" fill="#4a4a4a"/>
<rect id="Rectangle_39" data-name="Rectangle 39" width="5.336" height="5.336" rx="1" transform="translate(8.299 0)" fill="#4a4a4a"/>
<rect id="Rectangle_40" data-name="Rectangle 40" width="5.336" height="5.336" rx="1" transform="translate(14.623 0)" fill="#4a4a4a"/>
<rect id="Rectangle_41" data-name="Rectangle 41" width="5.336" height="5.336" rx="1" transform="translate(20.947 0)" fill="#4a4a4a"/>
<rect id="Rectangle_42" data-name="Rectangle 42" width="5.336" height="5.336" rx="1" transform="translate(27.271 0)" fill="#4a4a4a"/>
<rect id="Rectangle_43" data-name="Rectangle 43" width="5.336" height="5.336" rx="1" transform="translate(33.594 0)" fill="#4a4a4a"/>
<rect id="Rectangle_44" data-name="Rectangle 44" width="5.336" height="5.336" rx="1" transform="translate(39.918 0)" fill="#4a4a4a"/>
<rect id="Rectangle_45" data-name="Rectangle 45" width="5.336" height="5.336" rx="1" transform="translate(46.242 0)" fill="#4a4a4a"/>
<rect id="Rectangle_46" data-name="Rectangle 46" width="5.336" height="5.336" rx="1" transform="translate(52.565 0)" fill="#4a4a4a"/>
<rect id="Rectangle_47" data-name="Rectangle 47" width="5.336" height="5.336" rx="1" transform="translate(58.889 0)" fill="#4a4a4a"/>
<rect id="Rectangle_48" data-name="Rectangle 48" width="5.336" height="5.336" rx="1" transform="translate(65.213 0)" fill="#4a4a4a"/>
<rect id="Rectangle_49" data-name="Rectangle 49" width="5.336" height="5.336" rx="1" transform="translate(71.537 0)" fill="#4a4a4a"/>
<rect id="Rectangle_50" data-name="Rectangle 50" width="5.336" height="5.336" rx="1" transform="translate(77.86 0)" fill="#4a4a4a"/>
<rect id="Rectangle_51" data-name="Rectangle 51" width="5.336" height="5.336" rx="1" transform="translate(84.183 0)" fill="#4a4a4a"/>
</g>
<g id="Group_6" data-name="Group 6" transform="translate(1.531 16.584)">
<path id="Path_54" data-name="Path 54" d="M1.093,0h7.3A1.093,1.093,0,0,1,9.485,1.093v3.15A1.093,1.093,0,0,1,8.392,5.336h-7.3A1.093,1.093,0,0,1,0,4.243V1.094A1.093,1.093,0,0,1,1.093,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
<g id="Group_5" data-name="Group 5" transform="translate(10.671 0)">
<rect id="Rectangle_52" data-name="Rectangle 52" width="5.336" height="5.336" rx="1" fill="#4a4a4a"/>
<rect id="Rectangle_53" data-name="Rectangle 53" width="5.336" height="5.336" rx="1" transform="translate(6.324 0)" fill="#4a4a4a"/>
<rect id="Rectangle_54" data-name="Rectangle 54" width="5.336" height="5.336" rx="1" transform="translate(12.647 0)" fill="#4a4a4a"/>
<rect id="Rectangle_55" data-name="Rectangle 55" width="5.336" height="5.336" rx="1" transform="translate(18.971 0)" fill="#4a4a4a"/>
<rect id="Rectangle_56" data-name="Rectangle 56" width="5.336" height="5.336" rx="1" transform="translate(25.295 0)" fill="#4a4a4a"/>
<rect id="Rectangle_57" data-name="Rectangle 57" width="5.336" height="5.336" rx="1" transform="translate(31.619 0)" fill="#4a4a4a"/>
<rect id="Rectangle_58" data-name="Rectangle 58" width="5.336" height="5.336" rx="1" transform="translate(37.942 0)" fill="#4a4a4a"/>
<rect id="Rectangle_59" data-name="Rectangle 59" width="5.336" height="5.336" rx="1" transform="translate(44.265 0)" fill="#4a4a4a"/>
<rect id="Rectangle_60" data-name="Rectangle 60" width="5.336" height="5.336" rx="1" transform="translate(50.589 0)" fill="#4a4a4a"/>
<rect id="Rectangle_61" data-name="Rectangle 61" width="5.336" height="5.336" rx="1" transform="translate(56.912 0)" fill="#4a4a4a"/>
<rect id="Rectangle_62" data-name="Rectangle 62" width="5.336" height="5.336" rx="1" transform="translate(63.236 0)" fill="#4a4a4a"/>
</g>
<path id="Path_55" data-name="Path 55" d="M1.094,0H8A1.093,1.093,0,0,1,9.091,1.093v3.15A1.093,1.093,0,0,1,8,5.336H1.093A1.093,1.093,0,0,1,0,4.243V1.094A1.093,1.093,0,0,1,1.093,0Z" transform="translate(80.428 0)" fill="#4a4a4a" fill-rule="evenodd"/>
</g>
<g id="Group_7" data-name="Group 7" transform="translate(1.531 29.627)">
<rect id="Rectangle_63" data-name="Rectangle 63" width="5.336" height="5.336" rx="1" transform="translate(0 0)" fill="#4a4a4a"/>
<rect id="Rectangle_64" data-name="Rectangle 64" width="5.336" height="5.336" rx="1" transform="translate(6.324 0)" fill="#4a4a4a"/>
<rect id="Rectangle_65" data-name="Rectangle 65" width="5.336" height="5.336" rx="1" transform="translate(12.647 0)" fill="#4a4a4a"/>
<rect id="Rectangle_66" data-name="Rectangle 66" width="5.336" height="5.336" rx="1" transform="translate(18.971 0)" fill="#4a4a4a"/>
<path id="Path_56" data-name="Path 56" d="M1.093,0H31.515a1.093,1.093,0,0,1,1.093,1.093V4.244a1.093,1.093,0,0,1-1.093,1.093H1.093A1.093,1.093,0,0,1,0,4.244V1.093A1.093,1.093,0,0,1,1.093,0ZM34.687,0h3.942a1.093,1.093,0,0,1,1.093,1.093V4.244a1.093,1.093,0,0,1-1.093,1.093H34.687a1.093,1.093,0,0,1-1.093-1.093V1.093A1.093,1.093,0,0,1,34.687,0Z" transform="translate(25.294 0)" fill="#4a4a4a" fill-rule="evenodd"/>
<rect id="Rectangle_67" data-name="Rectangle 67" width="5.336" height="5.336" rx="1" transform="translate(66.003 0)" fill="#4a4a4a"/>
<rect id="Rectangle_68" data-name="Rectangle 68" width="5.336" height="5.336" rx="1" transform="translate(72.327 0)" fill="#4a4a4a"/>
<rect id="Rectangle_69" data-name="Rectangle 69" width="5.336" height="5.336" rx="1" transform="translate(84.183 0)" fill="#4a4a4a"/>
<path id="Path_57" data-name="Path 57" d="M5.336,0V1.18A1.093,1.093,0,0,1,4.243,2.273H1.093A1.093,1.093,0,0,1,0,1.18V0Z" transform="translate(83.59 2.273) rotate(180)" fill="#4a4a4a"/>
<path id="Path_58" data-name="Path 58" d="M5.336,0V1.18A1.093,1.093,0,0,1,4.243,2.273H1.093A1.093,1.093,0,0,1,0,1.18V0Z" transform="translate(78.255 3.063)" fill="#4a4a4a"/>
</g>
<rect id="Rectangle_70" data-name="Rectangle 70" width="88.927" height="2.371" rx="1.085" transform="translate(1.925 1.17)" fill="#4a4a4a"/>
<rect id="Rectangle_71" data-name="Rectangle 71" width="4.986" height="1.581" rx="0.723" transform="translate(4.1 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_72" data-name="Rectangle 72" width="4.986" height="1.581" rx="0.723" transform="translate(10.923 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_73" data-name="Rectangle 73" width="4.986" height="1.581" rx="0.723" transform="translate(16.173 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_74" data-name="Rectangle 74" width="4.986" height="1.581" rx="0.723" transform="translate(21.421 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_75" data-name="Rectangle 75" width="4.986" height="1.581" rx="0.723" transform="translate(26.671 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_76" data-name="Rectangle 76" width="4.986" height="1.581" rx="0.723" transform="translate(33.232 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_77" data-name="Rectangle 77" width="4.986" height="1.581" rx="0.723" transform="translate(38.48 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_78" data-name="Rectangle 78" width="4.986" height="1.581" rx="0.723" transform="translate(43.73 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_79" data-name="Rectangle 79" width="4.986" height="1.581" rx="0.723" transform="translate(48.978 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_80" data-name="Rectangle 80" width="4.986" height="1.581" rx="0.723" transform="translate(55.54 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_81" data-name="Rectangle 81" width="4.986" height="1.581" rx="0.723" transform="translate(60.788 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_82" data-name="Rectangle 82" width="4.986" height="1.581" rx="0.723" transform="translate(66.038 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_83" data-name="Rectangle 83" width="4.986" height="1.581" rx="0.723" transform="translate(72.599 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_84" data-name="Rectangle 84" width="4.986" height="1.581" rx="0.723" transform="translate(77.847 1.566)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_85" data-name="Rectangle 85" width="4.986" height="1.581" rx="0.723" transform="translate(83.097 1.566)" fill="#d8d8d8" opacity="0.136"/>
</g>
<path id="Path_59" data-name="Path 59" d="M146.71,159.855a5.439,5.439,0,0,0-.7.07c-.042-.164-.081-.329-.127-.493a5.457,5.457,0,1,0-5.4-9.372q-.181-.185-.366-.367a5.454,5.454,0,1,0-9.384-5.4c-.162-.046-.325-.084-.486-.126a5.467,5.467,0,1,0-10.788,0c-.162.042-.325.08-.486.126a5.457,5.457,0,1,0-9.384,5.4,21.843,21.843,0,1,0,36.421,21.02,5.452,5.452,0,1,0,.7-10.858" transform="translate(6.275 -6.025)" fill="#44d860" fill-rule="evenodd"/>
<path id="Path_60" data-name="Path 60" d="M83,124.855h43.71V103H83Z" transform="translate(4.42 -9.271)" fill="#3ecc5f" fill-rule="evenodd"/>
<path id="Path_61" data-name="Path 61" d="M134.855,116.765a2.732,2.732,0,1,0,0-5.464,2.811,2.811,0,0,0-.349.035c-.022-.082-.04-.164-.063-.246a2.733,2.733,0,0,0-1.052-5.253,2.7,2.7,0,0,0-1.648.566q-.09-.093-.184-.184a2.7,2.7,0,0,0,.553-1.633,2.732,2.732,0,0,0-5.245-1.07,10.928,10.928,0,1,0,0,21.031,2.732,2.732,0,0,0,5.245-1.07,2.7,2.7,0,0,0-.553-1.633q.093-.09.184-.184a2.7,2.7,0,0,0,1.648.566,2.732,2.732,0,0,0,1.052-5.253c.023-.081.042-.164.063-.246a2.811,2.811,0,0,0,.349.035" transform="translate(7.202 -9.377)" fill="#44d860" fill-rule="evenodd"/>
<path id="Path_62" data-name="Path 62" d="M143.232,42.33a2.967,2.967,0,0,1-.535-.055,2.754,2.754,0,0,1-.514-.153,2.838,2.838,0,0,1-.471-.251,4.139,4.139,0,0,1-.415-.339,3.2,3.2,0,0,1-.338-.415A2.7,2.7,0,0,1,140.5,39.6a2.968,2.968,0,0,1,.055-.535,3.152,3.152,0,0,1,.152-.514,2.874,2.874,0,0,1,.252-.47,2.633,2.633,0,0,1,.753-.754,2.837,2.837,0,0,1,.471-.251,2.753,2.753,0,0,1,.514-.153,2.527,2.527,0,0,1,1.071,0,2.654,2.654,0,0,1,.983.4,4.139,4.139,0,0,1,.415.339,4.019,4.019,0,0,1,.339.415,2.786,2.786,0,0,1,.251.47,2.864,2.864,0,0,1,.208,1.049,2.77,2.77,0,0,1-.8,1.934,4.139,4.139,0,0,1-.415.339,2.722,2.722,0,0,1-1.519.459m21.855-1.366a2.789,2.789,0,0,1-1.935-.8,4.162,4.162,0,0,1-.338-.415,2.7,2.7,0,0,1-.459-1.519,2.789,2.789,0,0,1,.8-1.934,4.139,4.139,0,0,1,.415-.339,2.838,2.838,0,0,1,.471-.251,2.752,2.752,0,0,1,.514-.153,2.527,2.527,0,0,1,1.071,0,2.654,2.654,0,0,1,.983.4,4.139,4.139,0,0,1,.415.339,2.79,2.79,0,0,1,.8,1.934,3.069,3.069,0,0,1-.055.535,2.779,2.779,0,0,1-.153.514,3.885,3.885,0,0,1-.251.47,4.02,4.02,0,0,1-.339.415,4.138,4.138,0,0,1-.415.339,2.722,2.722,0,0,1-1.519.459" transform="translate(9.753 -15.532)" fill-rule="evenodd"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 31 KiB

@@ -0,0 +1,170 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1041.277" height="554.141" viewBox="0 0 1041.277 554.141">
<title>Powered by React</title>
<g id="Group_24" data-name="Group 24" transform="translate(-440 -263)">
<g id="Group_23" data-name="Group 23" transform="translate(439.989 262.965)">
<path id="Path_299" data-name="Path 299" d="M1040.82,611.12q-1.74,3.75-3.47,7.4-2.7,5.67-5.33,11.12c-.78,1.61-1.56,3.19-2.32,4.77-8.6,17.57-16.63,33.11-23.45,45.89A73.21,73.21,0,0,1,942.44,719l-151.65,1.65h-1.6l-13,.14-11.12.12-34.1.37h-1.38l-17.36.19h-.53l-107,1.16-95.51,1-11.11.12-69,.75H429l-44.75.48h-.48l-141.5,1.53-42.33.46a87.991,87.991,0,0,1-10.79-.54h0c-1.22-.14-2.44-.3-3.65-.49a87.38,87.38,0,0,1-51.29-27.54C116,678.37,102.75,655,93.85,629.64q-1.93-5.49-3.6-11.12C59.44,514.37,97,380,164.6,290.08q4.25-5.64,8.64-11l.07-.08c20.79-25.52,44.1-46.84,68.93-62,44-26.91,92.75-34.49,140.7-11.9,40.57,19.12,78.45,28.11,115.17,30.55,3.71.24,7.42.42,11.11.53,84.23,2.65,163.17-27.7,255.87-47.29,3.69-.78,7.39-1.55,11.12-2.28,66.13-13.16,139.49-20.1,226.73-5.51a189.089,189.089,0,0,1,26.76,6.4q5.77,1.86,11.12,4c41.64,16.94,64.35,48.24,74,87.46q1.37,5.46,2.37,11.11C1134.3,384.41,1084.19,518.23,1040.82,611.12Z" transform="translate(-79.34 -172.91)" fill="#f2f2f2"/>
<path id="Path_300" data-name="Path 300" d="M576.36,618.52a95.21,95.21,0,0,1-1.87,11.12h93.7V618.52Zm-78.25,62.81,11.11-.09V653.77c-3.81-.17-7.52-.34-11.11-.52ZM265.19,618.52v11.12h198.5V618.52ZM1114.87,279h-74V191.51q-5.35-2.17-11.12-4V279H776.21V186.58c-3.73.73-7.43,1.5-11.12,2.28V279H509.22V236.15c-3.69-.11-7.4-.29-11.11-.53V279H242.24V217c-24.83,15.16-48.14,36.48-68.93,62h-.07v.08q-4.4,5.4-8.64,11h8.64V618.52h-83q1.66,5.63,3.6,11.12h79.39v93.62a87,87,0,0,0,12.2,2.79c1.21.19,2.43.35,3.65.49h0a87.991,87.991,0,0,0,10.79.54l42.33-.46v-97H498.11v94.21l11.11-.12V629.64H765.09V721l11.12-.12V629.64H1029.7v4.77c.76-1.58,1.54-3.16,2.32-4.77q2.63-5.45,5.33-11.12,1.73-3.64,3.47-7.4v-321h76.42Q1116.23,284.43,1114.87,279ZM242.24,618.52V290.08H498.11V618.52Zm267,0V290.08H765.09V618.52Zm520.48,0H776.21V290.08H1029.7Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
<path id="Path_301" data-name="Path 301" d="M863.09,533.65v13l-151.92,1.4-1.62.03-57.74.53-1.38.02-17.55.15h-.52l-106.98.99L349.77,551.4h-.15l-44.65.42-.48.01-198.4,1.82v-15l46.65-28,93.6-.78,2-.01.66-.01,2-.03,44.94-.37,2.01-.01.64-.01,2-.01L315,509.3l.38-.01,35.55-.3h.29l277.4-2.34,6.79-.05h.68l5.18-.05,37.65-.31,2-.03,1.85-.02h.96l11.71-.09,2.32-.03,3.11-.02,9.75-.09,15.47-.13,2-.02,3.48-.02h.65l74.71-.64Z" fill="#65617d"/>
<path id="Path_302" data-name="Path 302" d="M863.09,533.65v13l-151.92,1.4-1.62.03-57.74.53-1.38.02-17.55.15h-.52l-106.98.99L349.77,551.4h-.15l-44.65.42-.48.01-198.4,1.82v-15l46.65-28,93.6-.78,2-.01.66-.01,2-.03,44.94-.37,2.01-.01.64-.01,2-.01L315,509.3l.38-.01,35.55-.3h.29l277.4-2.34,6.79-.05h.68l5.18-.05,37.65-.31,2-.03,1.85-.02h.96l11.71-.09,2.32-.03,3.11-.02,9.75-.09,15.47-.13,2-.02,3.48-.02h.65l74.71-.64Z" opacity="0.2"/>
<path id="Path_303" data-name="Path 303" d="M375.44,656.57v24.49a6.13,6.13,0,0,1-3.5,5.54,6,6,0,0,1-2.5.6l-34.9.74a6,6,0,0,1-2.7-.57,6.12,6.12,0,0,1-3.57-5.57V656.57Z" transform="translate(-79.34 -172.91)" fill="#3f3d56"/>
<path id="Path_304" data-name="Path 304" d="M375.44,656.57v24.49a6.13,6.13,0,0,1-3.5,5.54,6,6,0,0,1-2.5.6l-34.9.74a6,6,0,0,1-2.7-.57,6.12,6.12,0,0,1-3.57-5.57V656.57Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
<path id="Path_305" data-name="Path 305" d="M377.44,656.57v24.49a6.13,6.13,0,0,1-3.5,5.54,6,6,0,0,1-2.5.6l-34.9.74a6,6,0,0,1-2.7-.57,6.12,6.12,0,0,1-3.57-5.57V656.57Z" transform="translate(-79.34 -172.91)" fill="#3f3d56"/>
<rect id="Rectangle_137" data-name="Rectangle 137" width="47.17" height="31.5" transform="translate(680.92 483.65)" fill="#3f3d56"/>
<rect id="Rectangle_138" data-name="Rectangle 138" width="47.17" height="31.5" transform="translate(680.92 483.65)" opacity="0.1"/>
<rect id="Rectangle_139" data-name="Rectangle 139" width="47.17" height="31.5" transform="translate(678.92 483.65)" fill="#3f3d56"/>
<path id="Path_306" data-name="Path 306" d="M298.09,483.65v4.97l-47.17,1.26v-6.23Z" opacity="0.1"/>
<path id="Path_307" data-name="Path 307" d="M460.69,485.27v168.2a4,4,0,0,1-3.85,3.95l-191.65,5.1h-.05a4,4,0,0,1-3.95-3.95V485.27a4,4,0,0,1,3.95-3.95h191.6a4,4,0,0,1,3.95,3.95Z" transform="translate(-79.34 -172.91)" fill="#65617d"/>
<path id="Path_308" data-name="Path 308" d="M265.19,481.32v181.2h-.05a4,4,0,0,1-3.95-3.95V485.27a4,4,0,0,1,3.95-3.95Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
<path id="Path_309" data-name="Path 309" d="M194.59,319.15h177.5V467.4l-177.5,4Z" fill="#39374d"/>
<path id="Path_310" data-name="Path 310" d="M726.09,483.65v6.41l-47.17-1.26v-5.15Z" opacity="0.1"/>
<path id="Path_311" data-name="Path 311" d="M867.69,485.27v173.3a4,4,0,0,1-4,3.95h0L672,657.42a4,4,0,0,1-3.85-3.95V485.27a4,4,0,0,1,3.95-3.95H863.7a4,4,0,0,1,3.99,3.95Z" transform="translate(-79.34 -172.91)" fill="#65617d"/>
<path id="Path_312" data-name="Path 312" d="M867.69,485.27v173.3a4,4,0,0,1-4,3.95h0V481.32h0a4,4,0,0,1,4,3.95Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
<path id="Path_313" data-name="Path 313" d="M775.59,319.15H598.09V467.4l177.5,4Z" fill="#39374d"/>
<path id="Path_314" data-name="Path 314" d="M663.19,485.27v168.2a4,4,0,0,1-3.85,3.95l-191.65,5.1h0a4,4,0,0,1-4-3.95V485.27a4,4,0,0,1,3.95-3.95h191.6A4,4,0,0,1,663.19,485.27Z" transform="translate(-79.34 -172.91)" fill="#65617d"/>
<path id="Path_315" data-name="Path 315" d="M397.09,319.15h177.5V467.4l-177.5,4Z" fill="#4267b2"/>
<path id="Path_316" data-name="Path 316" d="M863.09,533.65v13l-151.92,1.4-1.62.03-57.74.53-1.38.02-17.55.15h-.52l-106.98.99L349.77,551.4h-.15l-44.65.42-.48.01-198.4,1.82v-15l202.51-1.33h.48l40.99-.28h.19l283.08-1.87h.29l.17-.01h.47l4.79-.03h1.46l74.49-.5,4.4-.02.98-.01Z" opacity="0.1"/>
<circle id="Ellipse_111" data-name="Ellipse 111" cx="51.33" cy="51.33" r="51.33" transform="translate(435.93 246.82)" fill="#fbbebe"/>
<path id="Path_317" data-name="Path 317" d="M617.94,550.07s-99.5,12-90,0c3.44-4.34,4.39-17.2,4.2-31.85-.06-4.45-.22-9.06-.45-13.65-1.1-22-3.75-43.5-3.75-43.5s87-41,77-8.5c-4,13.13-2.69,31.57.35,48.88.89,5.05,1.92,10,3,14.7a344.66,344.66,0,0,0,9.65,33.92Z" transform="translate(-79.34 -172.91)" fill="#fbbebe"/>
<path id="Path_318" data-name="Path 318" d="M585.47,546c11.51-2.13,23.7-6,34.53-1.54,2.85,1.17,5.47,2.88,8.39,3.86s6.12,1.22,9.16,1.91c10.68,2.42,19.34,10.55,24.9,20s8.44,20.14,11.26,30.72l6.9,25.83c6,22.45,12,45.09,13.39,68.3a2437.506,2437.506,0,0,1-250.84,1.43c5.44-10.34,11-21.31,10.54-33s-7.19-23.22-4.76-34.74c1.55-7.34,6.57-13.39,9.64-20.22,8.75-19.52,1.94-45.79,17.32-60.65,6.92-6.68,17-9.21,26.63-8.89,12.28.41,24.85,4.24,37,6.11C555.09,547.48,569.79,548.88,585.47,546Z" transform="translate(-79.34 -172.91)" fill="#ff6584"/>
<path id="Path_319" data-name="Path 319" d="M716.37,657.17l-.1,1.43v.1l-.17,2.3-1.33,18.51-1.61,22.3-.46,6.28-1,13.44v.17l-107,1-175.59,1.9v.84h-.14v-1.12l.45-14.36.86-28.06.74-23.79.07-2.37a10.53,10.53,0,0,1,11.42-10.17c4.72.4,10.85.89,18.18,1.41l3,.22c42.33,2.94,120.56,6.74,199.5,2,1.66-.09,3.33-.19,5-.31,12.24-.77,24.47-1.76,36.58-3a10.53,10.53,0,0,1,11.6,11.23Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
<path id="Path_320" data-name="Path 320" d="M429.08,725.44v-.84l175.62-1.91,107-1h.3v-.17l1-13.44.43-6,1.64-22.61,1.29-17.9v-.44a10.617,10.617,0,0,0-.11-2.47.3.3,0,0,0,0-.1,10.391,10.391,0,0,0-2-4.64,10.54,10.54,0,0,0-9.42-4c-12.11,1.24-24.34,2.23-36.58,3-1.67.12-3.34.22-5,.31-78.94,4.69-157.17.89-199.5-2l-3-.22c-7.33-.52-13.46-1-18.18-1.41a10.54,10.54,0,0,0-11.24,8.53,11,11,0,0,0-.18,1.64l-.68,22.16L429.54,710l-.44,14.36v1.12Z" transform="translate(-79.34 -172.91)" fill="#3f3d56"/>
<path id="Path_321" data-name="Path 321" d="M716.67,664.18l-1.23,15.33-1.83,22.85-.46,5.72-1,12.81-.06.64v.17h0l-.15,1.48.11-1.48h-.29l-107,1-175.65,1.9v-.28l.49-14.36,1-28.06.64-18.65A6.36,6.36,0,0,1,434.3,658a6.25,6.25,0,0,1,3.78-.9c2.1.17,4.68.37,7.69.59,4.89.36,10.92.78,17.94,1.22,13,.82,29.31,1.7,48,2.42,52,2,122.2,2.67,188.88-3.17,3-.26,6.1-.55,9.13-.84a6.26,6.26,0,0,1,3.48.66,5.159,5.159,0,0,1,.86.54,6.14,6.14,0,0,1,2,2.46,3.564,3.564,0,0,1,.25.61A6.279,6.279,0,0,1,716.67,664.18Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
<path id="Path_322" data-name="Path 322" d="M377.44,677.87v3.19a6.13,6.13,0,0,1-3.5,5.54l-40.1.77a6.12,6.12,0,0,1-3.57-5.57v-3Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
<path id="Path_323" data-name="Path 323" d="M298.59,515.57l-52.25,1V507.9l52.25-1Z" fill="#3f3d56"/>
<path id="Path_324" data-name="Path 324" d="M298.59,515.57l-52.25,1V507.9l52.25-1Z" opacity="0.1"/>
<path id="Path_325" data-name="Path 325" d="M300.59,515.57l-52.25,1V507.9l52.25-1Z" fill="#3f3d56"/>
<path id="Path_326" data-name="Path 326" d="M758.56,679.87v3.19a6.13,6.13,0,0,0,3.5,5.54l40.1.77a6.12,6.12,0,0,0,3.57-5.57v-3Z" transform="translate(-79.34 -172.91)" opacity="0.1"/>
<path id="Path_327" data-name="Path 327" d="M678.72,517.57l52.25,1V509.9l-52.25-1Z" opacity="0.1"/>
<path id="Path_328" data-name="Path 328" d="M676.72,517.57l52.25,1V509.9l-52.25-1Z" fill="#3f3d56"/>
<path id="Path_329" data-name="Path 329" d="M534.13,486.79c.08,7-3.16,13.6-5.91,20.07a163.491,163.491,0,0,0-12.66,74.71c.73,11,2.58,22,.73,32.9s-8.43,21.77-19,24.9c17.53,10.45,41.26,9.35,57.76-2.66,8.79-6.4,15.34-15.33,21.75-24.11a97.86,97.86,0,0,1-13.31,44.75A103.43,103.43,0,0,0,637,616.53c4.31-5.81,8.06-12.19,9.72-19.23,3.09-13-1.22-26.51-4.51-39.5a266.055,266.055,0,0,1-6.17-33c-.43-3.56-.78-7.22.1-10.7,1-4.07,3.67-7.51,5.64-11.22,5.6-10.54,5.73-23.3,2.86-34.88s-8.49-22.26-14.06-32.81c-4.46-8.46-9.3-17.31-17.46-22.28-5.1-3.1-11-4.39-16.88-5.64l-25.37-5.43c-5.55-1.19-11.26-2.38-16.87-1.51-9.47,1.48-16.14,8.32-22,15.34-4.59,5.46-15.81,15.71-16.6,22.86-.72,6.59,5.1,17.63,6.09,24.58,1.3,9,2.22,6,7.3,11.52C532,478.05,534.07,482,534.13,486.79Z" transform="translate(-79.34 -172.91)" fill="#3f3d56"/>
</g>
<g id="docusaurus_keytar" transform="translate(670.271 615.768)">
<path id="Path_40" data-name="Path 40" d="M99,52h43.635V69.662H99Z" transform="translate(-49.132 -33.936)" fill="#fff" fill-rule="evenodd"/>
<path id="Path_41" data-name="Path 41" d="M13.389,158.195A10.377,10.377,0,0,1,4.4,153a10.377,10.377,0,0,0,8.988,15.584H23.779V158.195Z" transform="translate(-3 -82.47)" fill="#3ecc5f" fill-rule="evenodd"/>
<path id="Path_42" data-name="Path 42" d="M66.967,38.083l36.373-2.273V30.615A10.389,10.389,0,0,0,92.95,20.226H46.2l-1.3-2.249a1.5,1.5,0,0,0-2.6,0L41,20.226l-1.3-2.249a1.5,1.5,0,0,0-2.6,0l-1.3,2.249-1.3-2.249a1.5,1.5,0,0,0-2.6,0l-1.3,2.249-.034,0-2.152-2.151a1.5,1.5,0,0,0-2.508.672L25.21,21.4l-2.7-.723a1.5,1.5,0,0,0-1.836,1.837l.722,2.7-2.65.71a1.5,1.5,0,0,0-.673,2.509l2.152,2.152c0,.011,0,.022,0,.033l-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6L20.226,41l-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3-2.249,1.3a1.5,1.5,0,0,0,0,2.6l2.249,1.3A10.389,10.389,0,0,0,30.615,103.34H92.95A10.389,10.389,0,0,0,103.34,92.95V51.393L66.967,49.12a5.53,5.53,0,0,1,0-11.038" transform="translate(-9.836 -17.226)" fill="#3ecc5f" fill-rule="evenodd"/>
<path id="Path_43" data-name="Path 43" d="M143,163.779h15.584V143H143Z" transform="translate(-70.275 -77.665)" fill="#3ecc5f" fill-rule="evenodd"/>
<path id="Path_44" data-name="Path 44" d="M173.779,148.389a2.582,2.582,0,0,0-.332.033c-.02-.078-.038-.156-.06-.234a2.594,2.594,0,1,0-2.567-4.455q-.086-.088-.174-.175a2.593,2.593,0,1,0-4.461-2.569c-.077-.022-.154-.04-.231-.06a2.6,2.6,0,1,0-5.128,0c-.077.02-.154.038-.231.06a2.594,2.594,0,1,0-4.461,2.569,10.384,10.384,0,1,0,17.314,9.992,2.592,2.592,0,1,0,.332-5.161" transform="translate(-75.08 -75.262)" fill="#44d860" fill-rule="evenodd"/>
<path id="Path_45" data-name="Path 45" d="M153,113.389h15.584V103H153Z" transform="translate(-75.08 -58.444)" fill="#3ecc5f" fill-rule="evenodd"/>
<path id="Path_46" data-name="Path 46" d="M183.389,108.944a1.3,1.3,0,1,0,0-2.6,1.336,1.336,0,0,0-.166.017c-.01-.039-.019-.078-.03-.117a1.3,1.3,0,0,0-.5-2.5,1.285,1.285,0,0,0-.783.269q-.043-.044-.087-.087a1.285,1.285,0,0,0,.263-.776,1.3,1.3,0,0,0-2.493-.509,5.195,5.195,0,1,0,0,10,1.3,1.3,0,0,0,2.493-.509,1.285,1.285,0,0,0-.263-.776q.044-.043.087-.087a1.285,1.285,0,0,0,.783.269,1.3,1.3,0,0,0,.5-2.5c.011-.038.02-.078.03-.117a1.337,1.337,0,0,0,.166.017" transform="translate(-84.691 -57.894)" fill="#44d860" fill-rule="evenodd"/>
<path id="Path_47" data-name="Path 47" d="M52.188,48.292a1.3,1.3,0,0,1-1.3-1.3,3.9,3.9,0,0,0-7.792,0,1.3,1.3,0,1,1-2.6,0,6.493,6.493,0,0,1,12.987,0,1.3,1.3,0,0,1-1.3,1.3" transform="translate(-21.02 -28.41)" fill-rule="evenodd"/>
<path id="Path_48" data-name="Path 48" d="M103,139.752h31.168a10.389,10.389,0,0,0,10.389-10.389V93H113.389A10.389,10.389,0,0,0,103,103.389Z" transform="translate(-51.054 -53.638)" fill="#ffff50" fill-rule="evenodd"/>
<path id="Path_49" data-name="Path 49" d="M141.1,94.017H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m0,10.389H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m0,10.389H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m0-25.877H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m0,10.293H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m0,10.389H115.106a.519.519,0,1,1,0-1.039H141.1a.519.519,0,0,1,0,1.039m7.782-47.993c-.006,0-.011,0-.018,0-1.605.055-2.365,1.66-3.035,3.077-.7,1.48-1.24,2.443-2.126,2.414-.981-.035-1.542-1.144-2.137-2.317-.683-1.347-1.462-2.876-3.1-2.819-1.582.054-2.344,1.451-3.017,2.684-.715,1.313-1.2,2.112-2.141,2.075-1-.036-1.533-.938-2.149-1.981-.686-1.162-1.479-2.467-3.084-2.423-1.555.053-2.319,1.239-2.994,2.286-.713,1.106-1.213,1.781-2.164,1.741-1.025-.036-1.554-.784-2.167-1.65-.688-.973-1.463-2.074-3.062-2.021a3.815,3.815,0,0,0-2.959,1.879c-.64.812-1.14,1.456-2.2,1.415a.52.52,0,0,0-.037,1.039,3.588,3.588,0,0,0,3.05-1.811c.611-.777,1.139-1.448,2.178-1.483,1-.043,1.47.579,2.179,1.582.674.953,1.438,2.033,2.977,2.089,1.612.054,2.387-1.151,3.074-2.217.614-.953,1.144-1.775,2.156-1.81.931-.035,1.438.7,2.153,1.912.674,1.141,1.437,2.434,3.006,2.491,1.623.056,2.407-1.361,3.09-2.616.592-1.085,1.15-2.109,2.14-2.143.931-.022,1.417.829,2.135,2.249.671,1.326,1.432,2.828,3.026,2.886l.088,0c1.592,0,2.347-1.6,3.015-3.01.592-1.252,1.152-2.431,2.113-2.479Z" transform="translate(-55.378 -38.552)" fill-rule="evenodd"/>
<path id="Path_50" data-name="Path 50" d="M83,163.779h20.779V143H83Z" transform="translate(-41.443 -77.665)" fill="#3ecc5f" fill-rule="evenodd"/>
<g id="Group_8" data-name="Group 8" transform="matrix(0.966, -0.259, 0.259, 0.966, 51.971, 43.3)">
<rect id="Rectangle_3" data-name="Rectangle 3" width="43.906" height="17.333" rx="2" transform="translate(0 0)" fill="#d8d8d8"/>
<g id="Group_2" data-name="Group 2" transform="translate(0.728 10.948)">
<rect id="Rectangle_4" data-name="Rectangle 4" width="2.537" height="2.537" rx="1" transform="translate(7.985 0)" fill="#4a4a4a"/>
<rect id="Rectangle_5" data-name="Rectangle 5" width="2.537" height="2.537" rx="1" transform="translate(10.991 0)" fill="#4a4a4a"/>
<rect id="Rectangle_6" data-name="Rectangle 6" width="2.537" height="2.537" rx="1" transform="translate(13.997 0)" fill="#4a4a4a"/>
<rect id="Rectangle_7" data-name="Rectangle 7" width="2.537" height="2.537" rx="1" transform="translate(17.003 0)" fill="#4a4a4a"/>
<rect id="Rectangle_8" data-name="Rectangle 8" width="2.537" height="2.537" rx="1" transform="translate(20.009 0)" fill="#4a4a4a"/>
<rect id="Rectangle_9" data-name="Rectangle 9" width="2.537" height="2.537" rx="1" transform="translate(23.015 0)" fill="#4a4a4a"/>
<rect id="Rectangle_10" data-name="Rectangle 10" width="2.537" height="2.537" rx="1" transform="translate(26.021 0)" fill="#4a4a4a"/>
<rect id="Rectangle_11" data-name="Rectangle 11" width="2.537" height="2.537" rx="1" transform="translate(29.028 0)" fill="#4a4a4a"/>
<rect id="Rectangle_12" data-name="Rectangle 12" width="2.537" height="2.537" rx="1" transform="translate(32.034 0)" fill="#4a4a4a"/>
<path id="Path_51" data-name="Path 51" d="M.519,0H6.9A.519.519,0,0,1,7.421.52v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.017V.519A.519.519,0,0,1,.519,0ZM35.653,0h6.383a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H35.652a.519.519,0,0,1-.519-.519V.519A.519.519,0,0,1,35.652,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
</g>
<g id="Group_3" data-name="Group 3" transform="translate(0.728 4.878)">
<path id="Path_52" data-name="Path 52" d="M.519,0H2.956a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.017V.519A.519.519,0,0,1,.519,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
<rect id="Rectangle_13" data-name="Rectangle 13" width="2.537" height="2.537" rx="1" transform="translate(3.945 0)" fill="#4a4a4a"/>
<rect id="Rectangle_14" data-name="Rectangle 14" width="2.537" height="2.537" rx="1" transform="translate(6.951 0)" fill="#4a4a4a"/>
<rect id="Rectangle_15" data-name="Rectangle 15" width="2.537" height="2.537" rx="1" transform="translate(9.958 0)" fill="#4a4a4a"/>
<rect id="Rectangle_16" data-name="Rectangle 16" width="2.537" height="2.537" rx="1" transform="translate(12.964 0)" fill="#4a4a4a"/>
<rect id="Rectangle_17" data-name="Rectangle 17" width="2.537" height="2.537" rx="1" transform="translate(15.97 0)" fill="#4a4a4a"/>
<rect id="Rectangle_18" data-name="Rectangle 18" width="2.537" height="2.537" rx="1" transform="translate(18.976 0)" fill="#4a4a4a"/>
<rect id="Rectangle_19" data-name="Rectangle 19" width="2.537" height="2.537" rx="1" transform="translate(21.982 0)" fill="#4a4a4a"/>
<rect id="Rectangle_20" data-name="Rectangle 20" width="2.537" height="2.537" rx="1" transform="translate(24.988 0)" fill="#4a4a4a"/>
<rect id="Rectangle_21" data-name="Rectangle 21" width="2.537" height="2.537" rx="1" transform="translate(27.994 0)" fill="#4a4a4a"/>
<rect id="Rectangle_22" data-name="Rectangle 22" width="2.537" height="2.537" rx="1" transform="translate(31 0)" fill="#4a4a4a"/>
<rect id="Rectangle_23" data-name="Rectangle 23" width="2.537" height="2.537" rx="1" transform="translate(34.006 0)" fill="#4a4a4a"/>
<rect id="Rectangle_24" data-name="Rectangle 24" width="2.537" height="2.537" rx="1" transform="translate(37.012 0)" fill="#4a4a4a"/>
<rect id="Rectangle_25" data-name="Rectangle 25" width="2.537" height="2.537" rx="1" transform="translate(40.018 0)" fill="#4a4a4a"/>
</g>
<g id="Group_4" data-name="Group 4" transform="translate(43.283 4.538) rotate(180)">
<path id="Path_53" data-name="Path 53" d="M.519,0H2.956a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.017V.519A.519.519,0,0,1,.519,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
<rect id="Rectangle_26" data-name="Rectangle 26" width="2.537" height="2.537" rx="1" transform="translate(3.945 0)" fill="#4a4a4a"/>
<rect id="Rectangle_27" data-name="Rectangle 27" width="2.537" height="2.537" rx="1" transform="translate(6.951 0)" fill="#4a4a4a"/>
<rect id="Rectangle_28" data-name="Rectangle 28" width="2.537" height="2.537" rx="1" transform="translate(9.958 0)" fill="#4a4a4a"/>
<rect id="Rectangle_29" data-name="Rectangle 29" width="2.537" height="2.537" rx="1" transform="translate(12.964 0)" fill="#4a4a4a"/>
<rect id="Rectangle_30" data-name="Rectangle 30" width="2.537" height="2.537" rx="1" transform="translate(15.97 0)" fill="#4a4a4a"/>
<rect id="Rectangle_31" data-name="Rectangle 31" width="2.537" height="2.537" rx="1" transform="translate(18.976 0)" fill="#4a4a4a"/>
<rect id="Rectangle_32" data-name="Rectangle 32" width="2.537" height="2.537" rx="1" transform="translate(21.982 0)" fill="#4a4a4a"/>
<rect id="Rectangle_33" data-name="Rectangle 33" width="2.537" height="2.537" rx="1" transform="translate(24.988 0)" fill="#4a4a4a"/>
<rect id="Rectangle_34" data-name="Rectangle 34" width="2.537" height="2.537" rx="1" transform="translate(27.994 0)" fill="#4a4a4a"/>
<rect id="Rectangle_35" data-name="Rectangle 35" width="2.537" height="2.537" rx="1" transform="translate(31.001 0)" fill="#4a4a4a"/>
<rect id="Rectangle_36" data-name="Rectangle 36" width="2.537" height="2.537" rx="1" transform="translate(34.007 0)" fill="#4a4a4a"/>
<rect id="Rectangle_37" data-name="Rectangle 37" width="2.537" height="2.537" rx="1" transform="translate(37.013 0)" fill="#4a4a4a"/>
<rect id="Rectangle_38" data-name="Rectangle 38" width="2.537" height="2.537" rx="1" transform="translate(40.018 0)" fill="#4a4a4a"/>
<rect id="Rectangle_39" data-name="Rectangle 39" width="2.537" height="2.537" rx="1" transform="translate(3.945 0)" fill="#4a4a4a"/>
<rect id="Rectangle_40" data-name="Rectangle 40" width="2.537" height="2.537" rx="1" transform="translate(6.951 0)" fill="#4a4a4a"/>
<rect id="Rectangle_41" data-name="Rectangle 41" width="2.537" height="2.537" rx="1" transform="translate(9.958 0)" fill="#4a4a4a"/>
<rect id="Rectangle_42" data-name="Rectangle 42" width="2.537" height="2.537" rx="1" transform="translate(12.964 0)" fill="#4a4a4a"/>
<rect id="Rectangle_43" data-name="Rectangle 43" width="2.537" height="2.537" rx="1" transform="translate(15.97 0)" fill="#4a4a4a"/>
<rect id="Rectangle_44" data-name="Rectangle 44" width="2.537" height="2.537" rx="1" transform="translate(18.976 0)" fill="#4a4a4a"/>
<rect id="Rectangle_45" data-name="Rectangle 45" width="2.537" height="2.537" rx="1" transform="translate(21.982 0)" fill="#4a4a4a"/>
<rect id="Rectangle_46" data-name="Rectangle 46" width="2.537" height="2.537" rx="1" transform="translate(24.988 0)" fill="#4a4a4a"/>
<rect id="Rectangle_47" data-name="Rectangle 47" width="2.537" height="2.537" rx="1" transform="translate(27.994 0)" fill="#4a4a4a"/>
<rect id="Rectangle_48" data-name="Rectangle 48" width="2.537" height="2.537" rx="1" transform="translate(31.001 0)" fill="#4a4a4a"/>
<rect id="Rectangle_49" data-name="Rectangle 49" width="2.537" height="2.537" rx="1" transform="translate(34.007 0)" fill="#4a4a4a"/>
<rect id="Rectangle_50" data-name="Rectangle 50" width="2.537" height="2.537" rx="1" transform="translate(37.013 0)" fill="#4a4a4a"/>
<rect id="Rectangle_51" data-name="Rectangle 51" width="2.537" height="2.537" rx="1" transform="translate(40.018 0)" fill="#4a4a4a"/>
</g>
<g id="Group_6" data-name="Group 6" transform="translate(0.728 7.883)">
<path id="Path_54" data-name="Path 54" d="M.519,0h3.47a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.017V.52A.519.519,0,0,1,.519,0Z" transform="translate(0 0)" fill="#4a4a4a" fill-rule="evenodd"/>
<g id="Group_5" data-name="Group 5" transform="translate(5.073 0)">
<rect id="Rectangle_52" data-name="Rectangle 52" width="2.537" height="2.537" rx="1" transform="translate(0 0)" fill="#4a4a4a"/>
<rect id="Rectangle_53" data-name="Rectangle 53" width="2.537" height="2.537" rx="1" transform="translate(3.006 0)" fill="#4a4a4a"/>
<rect id="Rectangle_54" data-name="Rectangle 54" width="2.537" height="2.537" rx="1" transform="translate(6.012 0)" fill="#4a4a4a"/>
<rect id="Rectangle_55" data-name="Rectangle 55" width="2.537" height="2.537" rx="1" transform="translate(9.018 0)" fill="#4a4a4a"/>
<rect id="Rectangle_56" data-name="Rectangle 56" width="2.537" height="2.537" rx="1" transform="translate(12.025 0)" fill="#4a4a4a"/>
<rect id="Rectangle_57" data-name="Rectangle 57" width="2.537" height="2.537" rx="1" transform="translate(15.031 0)" fill="#4a4a4a"/>
<rect id="Rectangle_58" data-name="Rectangle 58" width="2.537" height="2.537" rx="1" transform="translate(18.037 0)" fill="#4a4a4a"/>
<rect id="Rectangle_59" data-name="Rectangle 59" width="2.537" height="2.537" rx="1" transform="translate(21.042 0)" fill="#4a4a4a"/>
<rect id="Rectangle_60" data-name="Rectangle 60" width="2.537" height="2.537" rx="1" transform="translate(24.049 0)" fill="#4a4a4a"/>
<rect id="Rectangle_61" data-name="Rectangle 61" width="2.537" height="2.537" rx="1" transform="translate(27.055 0)" fill="#4a4a4a"/>
<rect id="Rectangle_62" data-name="Rectangle 62" width="2.537" height="2.537" rx="1" transform="translate(30.061 0)" fill="#4a4a4a"/>
</g>
<path id="Path_55" data-name="Path 55" d="M.52,0H3.8a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.017V.52A.519.519,0,0,1,.519,0Z" transform="translate(38.234 0)" fill="#4a4a4a" fill-rule="evenodd"/>
</g>
<g id="Group_7" data-name="Group 7" transform="translate(0.728 14.084)">
<rect id="Rectangle_63" data-name="Rectangle 63" width="2.537" height="2.537" rx="1" transform="translate(0 0)" fill="#4a4a4a"/>
<rect id="Rectangle_64" data-name="Rectangle 64" width="2.537" height="2.537" rx="1" transform="translate(3.006 0)" fill="#4a4a4a"/>
<rect id="Rectangle_65" data-name="Rectangle 65" width="2.537" height="2.537" rx="1" transform="translate(6.012 0)" fill="#4a4a4a"/>
<rect id="Rectangle_66" data-name="Rectangle 66" width="2.537" height="2.537" rx="1" transform="translate(9.018 0)" fill="#4a4a4a"/>
<path id="Path_56" data-name="Path 56" d="M.519,0H14.981A.519.519,0,0,1,15.5.519v1.5a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,2.018V.519A.519.519,0,0,1,.519,0Zm15.97,0h1.874a.519.519,0,0,1,.519.519v1.5a.519.519,0,0,1-.519.519H16.489a.519.519,0,0,1-.519-.519V.519A.519.519,0,0,1,16.489,0Z" transform="translate(12.024 0)" fill="#4a4a4a" fill-rule="evenodd"/>
<rect id="Rectangle_67" data-name="Rectangle 67" width="2.537" height="2.537" rx="1" transform="translate(31.376 0)" fill="#4a4a4a"/>
<rect id="Rectangle_68" data-name="Rectangle 68" width="2.537" height="2.537" rx="1" transform="translate(34.382 0)" fill="#4a4a4a"/>
<rect id="Rectangle_69" data-name="Rectangle 69" width="2.537" height="2.537" rx="1" transform="translate(40.018 0)" fill="#4a4a4a"/>
<path id="Path_57" data-name="Path 57" d="M2.537,0V.561a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,.561V0Z" transform="translate(39.736 1.08) rotate(180)" fill="#4a4a4a"/>
<path id="Path_58" data-name="Path 58" d="M2.537,0V.561a.519.519,0,0,1-.519.519H.519A.519.519,0,0,1,0,.561V0Z" transform="translate(37.2 1.456)" fill="#4a4a4a"/>
</g>
<rect id="Rectangle_70" data-name="Rectangle 70" width="42.273" height="1.127" rx="0.564" transform="translate(0.915 0.556)" fill="#4a4a4a"/>
<rect id="Rectangle_71" data-name="Rectangle 71" width="2.37" height="0.752" rx="0.376" transform="translate(1.949 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_72" data-name="Rectangle 72" width="2.37" height="0.752" rx="0.376" transform="translate(5.193 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_73" data-name="Rectangle 73" width="2.37" height="0.752" rx="0.376" transform="translate(7.688 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_74" data-name="Rectangle 74" width="2.37" height="0.752" rx="0.376" transform="translate(10.183 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_75" data-name="Rectangle 75" width="2.37" height="0.752" rx="0.376" transform="translate(12.679 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_76" data-name="Rectangle 76" width="2.37" height="0.752" rx="0.376" transform="translate(15.797 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_77" data-name="Rectangle 77" width="2.37" height="0.752" rx="0.376" transform="translate(18.292 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_78" data-name="Rectangle 78" width="2.37" height="0.752" rx="0.376" transform="translate(20.788 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_79" data-name="Rectangle 79" width="2.37" height="0.752" rx="0.376" transform="translate(23.283 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_80" data-name="Rectangle 80" width="2.37" height="0.752" rx="0.376" transform="translate(26.402 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_81" data-name="Rectangle 81" width="2.37" height="0.752" rx="0.376" transform="translate(28.897 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_82" data-name="Rectangle 82" width="2.37" height="0.752" rx="0.376" transform="translate(31.393 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_83" data-name="Rectangle 83" width="2.37" height="0.752" rx="0.376" transform="translate(34.512 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_84" data-name="Rectangle 84" width="2.37" height="0.752" rx="0.376" transform="translate(37.007 0.744)" fill="#d8d8d8" opacity="0.136"/>
<rect id="Rectangle_85" data-name="Rectangle 85" width="2.37" height="0.752" rx="0.376" transform="translate(39.502 0.744)" fill="#d8d8d8" opacity="0.136"/>
</g>
<path id="Path_59" data-name="Path 59" d="M123.779,148.389a2.583,2.583,0,0,0-.332.033c-.02-.078-.038-.156-.06-.234a2.594,2.594,0,1,0-2.567-4.455q-.086-.088-.174-.175a2.593,2.593,0,1,0-4.461-2.569c-.077-.022-.154-.04-.231-.06a2.6,2.6,0,1,0-5.128,0c-.077.02-.154.038-.231.06a2.594,2.594,0,1,0-4.461,2.569,10.384,10.384,0,1,0,17.314,9.992,2.592,2.592,0,1,0,.332-5.161" transform="translate(-51.054 -75.262)" fill="#44d860" fill-rule="evenodd"/>
<path id="Path_60" data-name="Path 60" d="M83,113.389h20.779V103H83Z" transform="translate(-41.443 -58.444)" fill="#3ecc5f" fill-rule="evenodd"/>
<path id="Path_61" data-name="Path 61" d="M123.389,108.944a1.3,1.3,0,1,0,0-2.6,1.338,1.338,0,0,0-.166.017c-.01-.039-.019-.078-.03-.117a1.3,1.3,0,0,0-.5-2.5,1.285,1.285,0,0,0-.783.269q-.043-.044-.087-.087a1.285,1.285,0,0,0,.263-.776,1.3,1.3,0,0,0-2.493-.509,5.195,5.195,0,1,0,0,10,1.3,1.3,0,0,0,2.493-.509,1.285,1.285,0,0,0-.263-.776q.044-.043.087-.087a1.285,1.285,0,0,0,.783.269,1.3,1.3,0,0,0,.5-2.5c.011-.038.02-.078.03-.117a1.335,1.335,0,0,0,.166.017" transform="translate(-55.859 -57.894)" fill="#44d860" fill-rule="evenodd"/>
<path id="Path_62" data-name="Path 62" d="M141.8,38.745a1.41,1.41,0,0,1-.255-.026,1.309,1.309,0,0,1-.244-.073,1.349,1.349,0,0,1-.224-.119,1.967,1.967,0,0,1-.2-.161,1.52,1.52,0,0,1-.161-.2,1.282,1.282,0,0,1-.218-.722,1.41,1.41,0,0,1,.026-.255,1.5,1.5,0,0,1,.072-.244,1.364,1.364,0,0,1,.12-.223,1.252,1.252,0,0,1,.358-.358,1.349,1.349,0,0,1,.224-.119,1.309,1.309,0,0,1,.244-.073,1.2,1.2,0,0,1,.509,0,1.262,1.262,0,0,1,.468.192,1.968,1.968,0,0,1,.2.161,1.908,1.908,0,0,1,.161.2,1.322,1.322,0,0,1,.12.223,1.361,1.361,0,0,1,.1.5,1.317,1.317,0,0,1-.379.919,1.968,1.968,0,0,1-.2.161,1.346,1.346,0,0,1-.223.119,1.332,1.332,0,0,1-.5.1m10.389-.649a1.326,1.326,0,0,1-.92-.379,1.979,1.979,0,0,1-.161-.2,1.282,1.282,0,0,1-.218-.722,1.326,1.326,0,0,1,.379-.919,1.967,1.967,0,0,1,.2-.161,1.351,1.351,0,0,1,.224-.119,1.308,1.308,0,0,1,.244-.073,1.2,1.2,0,0,1,.509,0,1.262,1.262,0,0,1,.468.192,1.967,1.967,0,0,1,.2.161,1.326,1.326,0,0,1,.379.919,1.461,1.461,0,0,1-.026.255,1.323,1.323,0,0,1-.073.244,1.847,1.847,0,0,1-.119.223,1.911,1.911,0,0,1-.161.2,1.967,1.967,0,0,1-.2.161,1.294,1.294,0,0,1-.722.218" transform="translate(-69.074 -26.006)" fill-rule="evenodd"/>
</g>
<g id="React-icon" transform="translate(906.3 541.56)">
<path id="Path_330" data-name="Path 330" d="M263.668,117.179c0-5.827-7.3-11.35-18.487-14.775,2.582-11.4,1.434-20.477-3.622-23.382a7.861,7.861,0,0,0-4.016-1v4a4.152,4.152,0,0,1,2.044.466c2.439,1.4,3.5,6.724,2.672,13.574-.2,1.685-.52,3.461-.914,5.272a86.9,86.9,0,0,0-11.386-1.954,87.469,87.469,0,0,0-7.459-8.965c5.845-5.433,11.332-8.41,15.062-8.41V78h0c-4.931,0-11.386,3.514-17.913,9.611-6.527-6.061-12.982-9.539-17.913-9.539v4c3.712,0,9.216,2.959,15.062,8.356a84.687,84.687,0,0,0-7.405,8.947,83.732,83.732,0,0,0-11.4,1.972c-.412-1.793-.717-3.532-.932-5.2-.843-6.85.2-12.175,2.618-13.592a3.991,3.991,0,0,1,2.062-.466v-4h0a8,8,0,0,0-4.052,1c-5.039,2.9-6.168,11.96-3.568,23.328-11.153,3.443-18.415,8.947-18.415,14.757,0,5.828,7.3,11.35,18.487,14.775-2.582,11.4-1.434,20.477,3.622,23.382a7.882,7.882,0,0,0,4.034,1c4.931,0,11.386-3.514,17.913-9.611,6.527,6.061,12.982,9.539,17.913,9.539a8,8,0,0,0,4.052-1c5.039-2.9,6.168-11.96,3.568-23.328C256.406,128.511,263.668,122.988,263.668,117.179Zm-23.346-11.96c-.663,2.313-1.488,4.7-2.421,7.083-.735-1.434-1.506-2.869-2.349-4.3-.825-1.434-1.7-2.833-2.582-4.2C235.517,104.179,237.974,104.645,240.323,105.219Zm-8.212,19.1c-1.4,2.421-2.833,4.716-4.321,6.85-2.672.233-5.379.359-8.1.359-2.708,0-5.415-.126-8.069-.341q-2.232-3.2-4.339-6.814-2.044-3.523-3.73-7.136c1.112-2.4,2.367-4.805,3.712-7.154,1.4-2.421,2.833-4.716,4.321-6.85,2.672-.233,5.379-.359,8.1-.359,2.708,0,5.415.126,8.069.341q2.232,3.2,4.339,6.814,2.044,3.523,3.73,7.136C234.692,119.564,233.455,121.966,232.11,124.315Zm5.792-2.331c.968,2.4,1.793,4.805,2.474,7.136-2.349.574-4.823,1.058-7.387,1.434.879-1.381,1.757-2.8,2.582-4.25C236.4,124.871,237.167,123.419,237.9,121.984ZM219.72,141.116a73.921,73.921,0,0,1-4.985-5.738c1.614.072,3.263.126,4.931.126,1.685,0,3.353-.036,4.985-.126A69.993,69.993,0,0,1,219.72,141.116ZM206.38,130.555c-2.546-.377-5-.843-7.352-1.417.663-2.313,1.488-4.7,2.421-7.083.735,1.434,1.506,2.869,2.349,4.3S205.5,129.192,206.38,130.555ZM219.63,93.241a73.924,73.924,0,0,1,4.985,5.738c-1.614-.072-3.263-.126-4.931-.126-1.686,0-3.353.036-4.985.126A69.993,69.993,0,0,1,219.63,93.241ZM206.362,103.8c-.879,1.381-1.757,2.8-2.582,4.25-.825,1.434-1.6,2.869-2.331,4.3-.968-2.4-1.793-4.805-2.474-7.136C201.323,104.663,203.8,104.179,206.362,103.8Zm-16.227,22.449c-6.348-2.708-10.454-6.258-10.454-9.073s4.106-6.383,10.454-9.073c1.542-.663,3.228-1.255,4.967-1.811a86.122,86.122,0,0,0,4.034,10.92,84.9,84.9,0,0,0-3.981,10.866C193.38,127.525,191.694,126.915,190.134,126.252Zm9.647,25.623c-2.439-1.4-3.5-6.724-2.672-13.574.2-1.686.52-3.461.914-5.272a86.9,86.9,0,0,0,11.386,1.954,87.465,87.465,0,0,0,7.459,8.965c-5.845,5.433-11.332,8.41-15.062,8.41A4.279,4.279,0,0,1,199.781,151.875Zm42.532-13.663c.843,6.85-.2,12.175-2.618,13.592a3.99,3.99,0,0,1-2.062.466c-3.712,0-9.216-2.959-15.062-8.356a84.689,84.689,0,0,0,7.405-8.947,83.731,83.731,0,0,0,11.4-1.972A50.194,50.194,0,0,1,242.313,138.212Zm6.9-11.96c-1.542.663-3.228,1.255-4.967,1.811a86.12,86.12,0,0,0-4.034-10.92,84.9,84.9,0,0,0,3.981-10.866c1.775.556,3.461,1.165,5.039,1.829,6.348,2.708,10.454,6.258,10.454,9.073C259.67,119.994,255.564,123.562,249.216,126.252Z" fill="#61dafb"/>
<path id="Path_331" data-name="Path 331" d="M320.8,78.4Z" transform="translate(-119.082 -0.328)" fill="#61dafb"/>
<circle id="Ellipse_112" data-name="Ellipse 112" cx="8.194" cy="8.194" r="8.194" transform="translate(211.472 108.984)" fill="#61dafb"/>
<path id="Path_332" data-name="Path 332" d="M520.5,78.1Z" transform="translate(-282.975 -0.082)" fill="#61dafb"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 35 KiB

@@ -0,0 +1,40 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1129" height="663" viewBox="0 0 1129 663">
<title>Focus on What Matters</title>
<circle cx="321" cy="321" r="321" fill="#f2f2f2" />
<ellipse cx="559" cy="635.49998" rx="514" ry="27.50002" fill="#3f3d56" />
<ellipse cx="558" cy="627" rx="460" ry="22" opacity="0.2" />
<rect x="131" y="152.5" width="840" height="50" fill="#3f3d56" />
<path d="M166.5,727.3299A21.67009,21.67009,0,0,0,188.1701,749H984.8299A21.67009,21.67009,0,0,0,1006.5,727.3299V296h-840Z" transform="translate(-35.5 -118.5)" fill="#3f3d56" />
<path d="M984.8299,236H188.1701A21.67009,21.67009,0,0,0,166.5,257.6701V296h840V257.6701A21.67009,21.67009,0,0,0,984.8299,236Z" transform="translate(-35.5 -118.5)" fill="#3f3d56" />
<path d="M984.8299,236H188.1701A21.67009,21.67009,0,0,0,166.5,257.6701V296h840V257.6701A21.67009,21.67009,0,0,0,984.8299,236Z" transform="translate(-35.5 -118.5)" opacity="0.2" />
<circle cx="181" cy="147.5" r="13" fill="#3f3d56" />
<circle cx="217" cy="147.5" r="13" fill="#3f3d56" />
<circle cx="253" cy="147.5" r="13" fill="#3f3d56" />
<rect x="168" y="213.5" width="337" height="386" rx="5.33505" fill="#606060" />
<rect x="603" y="272.5" width="284" height="22" rx="5.47638" fill="#2e8555" />
<rect x="537" y="352.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
<rect x="537" y="396.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
<rect x="537" y="440.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
<rect x="537" y="484.5" width="416" height="15" rx="5.47638" fill="#2e8555" />
<rect x="865" y="552.5" width="88" height="26" rx="7.02756" fill="#3ecc5f" />
<path d="M1088.60287,624.61594a30.11371,30.11371,0,0,0,3.98291-15.266c0-13.79652-8.54358-24.98081-19.08256-24.98081s-19.08256,11.18429-19.08256,24.98081a30.11411,30.11411,0,0,0,3.98291,15.266,31.248,31.248,0,0,0,0,30.53213,31.248,31.248,0,0,0,0,30.53208,31.248,31.248,0,0,0,0,30.53208,30.11408,30.11408,0,0,0-3.98291,15.266c0,13.79652,8.54353,24.98081,19.08256,24.98081s19.08256-11.18429,19.08256-24.98081a30.11368,30.11368,0,0,0-3.98291-15.266,31.248,31.248,0,0,0,0-30.53208,31.248,31.248,0,0,0,0-30.53208,31.248,31.248,0,0,0,0-30.53213Z" transform="translate(-35.5 -118.5)" fill="#3f3d56" />
<ellipse cx="1038.00321" cy="460.31783" rx="19.08256" ry="24.9808" fill="#3f3d56" />
<ellipse cx="1038.00321" cy="429.78574" rx="19.08256" ry="24.9808" fill="#3f3d56" />
<path d="M1144.93871,339.34489a91.61081,91.61081,0,0,0,7.10658-10.46092l-50.141-8.23491,54.22885.4033a91.566,91.566,0,0,0,1.74556-72.42605l-72.75449,37.74139,67.09658-49.32086a91.41255,91.41255,0,1,0-150.971,102.29805,91.45842,91.45842,0,0,0-10.42451,16.66946l65.0866,33.81447-69.40046-23.292a91.46011,91.46011,0,0,0,14.73837,85.83669,91.40575,91.40575,0,1,0,143.68892,0,91.41808,91.41808,0,0,0,0-113.02862Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
<path d="M981.6885,395.8592a91.01343,91.01343,0,0,0,19.56129,56.51431,91.40575,91.40575,0,1,0,143.68892,0C1157.18982,436.82067,981.6885,385.60008,981.6885,395.8592Z" transform="translate(-35.5 -118.5)" opacity="0.1" />
<path d="M365.62,461.43628H477.094v45.12043H365.62Z" transform="translate(-35.5 -118.5)" fill="#fff" fill-rule="evenodd" />
<path d="M264.76252,608.74122a26.50931,26.50931,0,0,1-22.96231-13.27072,26.50976,26.50976,0,0,0,22.96231,39.81215H291.304V608.74122Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
<path d="M384.17242,468.57061l92.92155-5.80726V449.49263a26.54091,26.54091,0,0,0-26.54143-26.54143H331.1161l-3.31768-5.74622a3.83043,3.83043,0,0,0-6.63536,0l-3.31768,5.74622-3.31767-5.74622a3.83043,3.83043,0,0,0-6.63536,0l-3.31768,5.74622L301.257,417.205a3.83043,3.83043,0,0,0-6.63536,0L291.304,422.9512c-.02919,0-.05573.004-.08625.004l-5.49674-5.49541a3.8293,3.8293,0,0,0-6.4071,1.71723l-1.81676,6.77338L270.607,424.1031a3.82993,3.82993,0,0,0-4.6912,4.69253l1.84463,6.89148-6.77072,1.81411a3.8315,3.8315,0,0,0-1.71988,6.40975l5.49673,5.49673c0,.02787-.004.05574-.004.08493l-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74621,3.31768L259.0163,466.081a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31767a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31767a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768L259.0163,558.976a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768-5.74622,3.31768a3.83042,3.83042,0,0,0,0,6.63535l5.74622,3.31768-5.74622,3.31768a3.83043,3.83043,0,0,0,0,6.63536l5.74622,3.31768A26.54091,26.54091,0,0,0,291.304,635.28265H450.55254A26.5409,26.5409,0,0,0,477.094,608.74122V502.5755l-92.92155-5.80727a14.12639,14.12639,0,0,1,0-28.19762" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
<path d="M424.01111,635.28265h39.81214V582.19979H424.01111Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
<path d="M490.36468,602.10586a6.60242,6.60242,0,0,0-.848.08493c-.05042-.19906-.09821-.39945-.15393-.59852A6.62668,6.62668,0,1,0,482.80568,590.21q-.2203-.22491-.44457-.44589a6.62391,6.62391,0,1,0-11.39689-6.56369c-.1964-.05575-.39414-.10218-.59056-.15262a6.63957,6.63957,0,1,0-13.10086,0c-.1964.05042-.39414.09687-.59056.15262a6.62767,6.62767,0,1,0-11.39688,6.56369,26.52754,26.52754,0,1,0,44.23127,25.52756,6.6211,6.6211,0,1,0,.848-13.18579" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
<path d="M437.28182,555.65836H477.094V529.11693H437.28182Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
<path d="M490.36468,545.70532a3.31768,3.31768,0,0,0,0-6.63536,3.41133,3.41133,0,0,0-.42333.04247c-.02655-.09953-.04911-.19907-.077-.29859a3.319,3.319,0,0,0-1.278-6.37923,3.28174,3.28174,0,0,0-2.00122.68742q-.10947-.11346-.22294-.22295a3.282,3.282,0,0,0,.67149-1.98265,3.31768,3.31768,0,0,0-6.37-1.2992,13.27078,13.27078,0,1,0,0,25.54082,3.31768,3.31768,0,0,0,6.37-1.2992,3.282,3.282,0,0,0-.67149-1.98265q.11347-.10947.22294-.22294a3.28174,3.28174,0,0,0,2.00122.68742,3.31768,3.31768,0,0,0,1.278-6.37923c.02786-.0982.05042-.19907.077-.29859a3.41325,3.41325,0,0,0,.42333.04246" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
<path d="M317.84538,466.081a3.31768,3.31768,0,0,1-3.31767-3.31768,9.953,9.953,0,1,0-19.90608,0,3.31768,3.31768,0,1,1-6.63535,0,16.58839,16.58839,0,1,1,33.17678,0,3.31768,3.31768,0,0,1-3.31768,3.31768" transform="translate(-35.5 -118.5)" fill-rule="evenodd" />
<path d="M370.92825,635.28265h79.62429A26.5409,26.5409,0,0,0,477.094,608.74122v-92.895H397.46968a26.54091,26.54091,0,0,0-26.54143,26.54143Z" transform="translate(-35.5 -118.5)" fill="#ffff50" fill-rule="evenodd" />
<path d="M457.21444,556.98543H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,1,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,1,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0-66.10674H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.29459H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414m0,26.54143H390.80778a1.32707,1.32707,0,0,1,0-2.65414h66.40666a1.32707,1.32707,0,0,1,0,2.65414M477.094,474.19076c-.01592,0-.0292-.008-.04512-.00663-4.10064.13934-6.04083,4.24132-7.75274,7.86024-1.78623,3.78215-3.16771,6.24122-5.43171,6.16691-2.50685-.09024-3.94007-2.92222-5.45825-5.91874-1.74377-3.44243-3.73438-7.34667-7.91333-7.20069-4.04227.138-5.98907,3.70784-7.70631,6.857-1.82738,3.35484-3.07084,5.39455-5.46887,5.30033-2.55727-.09289-3.91619-2.39536-5.48877-5.06013-1.75306-2.96733-3.77951-6.30359-7.8775-6.18946-3.97326.13669-5.92537,3.16507-7.64791,5.83912-1.82207,2.82666-3.09872,4.5492-5.52725,4.447-2.61832-.09289-3.9706-2.00388-5.53522-4.21611-1.757-2.4856-3.737-5.299-7.82308-5.16231-3.88567.13271-5.83779,2.61434-7.559,4.80135-1.635,2.07555-2.9116,3.71846-5.61218,3.615a1.32793,1.32793,0,1,0-.09555,2.65414c4.00377.134,6.03154-2.38873,7.79257-4.6275,1.562-1.9853,2.91027-3.69855,5.56441-3.78879,2.55594-.10882,3.75429,1.47968,5.56707,4.04093,1.7212,2.43385,3.67465,5.19416,7.60545,5.33616,4.11789.138,6.09921-2.93946,7.8536-5.66261,1.56861-2.43385,2.92221-4.53461,5.50734-4.62352,2.37944-.08892,3.67466,1.79154,5.50072,4.885,1.72121,2.91557,3.67069,6.21865,7.67977,6.36463,4.14709.14332,6.14965-3.47693,7.89475-6.68181,1.51155-2.77092,2.93814-5.38791,5.46621-5.4755,2.37944-.05573,3.62025,2.11668,5.45558,5.74622,1.71459,3.388,3.65875,7.22591,7.73019,7.37321l.22429.004c4.06614,0,5.99571-4.08074,7.70364-7.68905,1.51154-3.19825,2.94211-6.21069,5.3972-6.33411Z" transform="translate(-35.5 -118.5)" fill-rule="evenodd" />
<path d="M344.38682,635.28265h53.08286V582.19979H344.38682Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
<path d="M424.01111,602.10586a6.60242,6.60242,0,0,0-.848.08493c-.05042-.19906-.09821-.39945-.15394-.59852A6.62667,6.62667,0,1,0,416.45211,590.21q-.2203-.22491-.44458-.44589a6.62391,6.62391,0,1,0-11.39689-6.56369c-.1964-.05575-.39413-.10218-.59054-.15262a6.63957,6.63957,0,1,0-13.10084,0c-.19641.05042-.39414.09687-.59055.15262a6.62767,6.62767,0,1,0-11.39689,6.56369,26.52755,26.52755,0,1,0,44.2313,25.52756,6.6211,6.6211,0,1,0,.848-13.18579" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
<path d="M344.38682,555.65836h53.08286V529.11693H344.38682Z" transform="translate(-35.5 -118.5)" fill="#3ecc5f" fill-rule="evenodd" />
<path d="M410.74039,545.70532a3.31768,3.31768,0,1,0,0-6.63536,3.41133,3.41133,0,0,0-.42333.04247c-.02655-.09953-.04911-.19907-.077-.29859a3.319,3.319,0,0,0-1.278-6.37923,3.28174,3.28174,0,0,0-2.00122.68742q-.10947-.11346-.22294-.22295a3.282,3.282,0,0,0,.67149-1.98265,3.31768,3.31768,0,0,0-6.37-1.2992,13.27078,13.27078,0,1,0,0,25.54082,3.31768,3.31768,0,0,0,6.37-1.2992,3.282,3.282,0,0,0-.67149-1.98265q.11347-.10947.22294-.22294a3.28174,3.28174,0,0,0,2.00122.68742,3.31768,3.31768,0,0,0,1.278-6.37923c.02786-.0982.05042-.19907.077-.29859a3.41325,3.41325,0,0,0,.42333.04246" transform="translate(-35.5 -118.5)" fill="#44d860" fill-rule="evenodd" />
<path d="M424.01111,447.8338a3.60349,3.60349,0,0,1-.65028-.06636,3.34415,3.34415,0,0,1-.62372-.18579,3.44679,3.44679,0,0,1-.572-.30522,5.02708,5.02708,0,0,1-.50429-.4114,3.88726,3.88726,0,0,1-.41007-.50428,3.27532,3.27532,0,0,1-.55737-1.84463,3.60248,3.60248,0,0,1,.06636-.65027,3.82638,3.82638,0,0,1,.18447-.62373,3.48858,3.48858,0,0,1,.30656-.57064,3.197,3.197,0,0,1,.91436-.91568,3.44685,3.44685,0,0,1,.572-.30523,3.344,3.344,0,0,1,.62372-.18578,3.06907,3.06907,0,0,1,1.30053,0,3.22332,3.22332,0,0,1,1.19436.491,5.02835,5.02835,0,0,1,.50429.41139,4.8801,4.8801,0,0,1,.41139.50429,3.38246,3.38246,0,0,1,.30522.57064,3.47806,3.47806,0,0,1,.25215,1.274A3.36394,3.36394,0,0,1,426.36,446.865a5.02708,5.02708,0,0,1-.50429.4114,3.3057,3.3057,0,0,1-1.84463.55737m26.54143-1.65884a3.38754,3.38754,0,0,1-2.35024-.96877,5.04185,5.04185,0,0,1-.41007-.50428,3.27532,3.27532,0,0,1-.55737-1.84463,3.38659,3.38659,0,0,1,.96744-2.34892,5.02559,5.02559,0,0,1,.50429-.41139,3.44685,3.44685,0,0,1,.572-.30523,3.3432,3.3432,0,0,1,.62373-.18579,3.06952,3.06952,0,0,1,1.30052,0,3.22356,3.22356,0,0,1,1.19436.491,5.02559,5.02559,0,0,1,.50429.41139,3.38792,3.38792,0,0,1,.96876,2.34892,3.72635,3.72635,0,0,1-.06636.65026,3.37387,3.37387,0,0,1-.18579.62373,4.71469,4.71469,0,0,1-.30522.57064,4.8801,4.8801,0,0,1-.41139.50429,5.02559,5.02559,0,0,1-.50429.41139,3.30547,3.30547,0,0,1-1.84463.55737" transform="translate(-35.5 -118.5)" fill-rule="evenodd" />
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

+14120 -1501
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -12,6 +12,7 @@
"scripts": {
"build": "turbo run build",
"dev": "turbo run dev --parallel",
"dev:reference": "turbo run dev --filter=reference --parallel",
"lint": "turbo run lint",
"format": "prettier --write \"apps/**/*.{js,jsx,ts,tsx,css,md,json}\"",
"docker:dev": "cd docker && docker-compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml up --renew-anon-volumes",