1
0
mirror of https://github.com/mathuo/dockview synced 2025-03-09 15:32:03 +00:00

chore: docs

This commit is contained in:
mathuo 2024-02-01 22:01:14 +00:00
parent 8b1499e89a
commit 861d13c4ad
No known key found for this signature in database
GPG Key ID: C6EEDEFD6CA07281
42 changed files with 17695 additions and 2911 deletions

View File

@ -170,10 +170,10 @@ type AddPanelPositionUnion = {
type AddPanelOptionsUnion = AddPanelFloatingGroupUnion | AddPanelPositionUnion;
export type AddPanelOptions<P extends object = Parameters> = Omit<
PanelOptions<P>,
'component' | 'tabComponent'
> & {
export type AddPanelOptions<P extends object = Parameters> = {
params?: P;
id: string;
title?: string;
component: string;
tabComponent?: string;
renderer?: DockviewPanelRenderer;

View File

@ -15,10 +15,11 @@ export * from './panel/types';
export * from './panel/componentFactory';
export * from './splitview/splitview';
export * from './splitview/options';
export { SplitviewComponentOptions } from './splitview/options';
export * from './paneview/paneview';
export * from './gridview/gridview';
export { GridviewComponentOptions } from './gridview/options';
export * from './dockview/dockviewGroupPanelModel';
export * from './gridview/baseComponentGridview';

View File

@ -15,10 +15,6 @@ export interface PanelViewInitParameters extends PanelInitParameters {
accessor: SplitviewComponent;
}
export interface ISerializableView extends IView, IPanel {
init: (params: PanelViewInitParameters) => void;
}
export interface SplitviewComponentOptions extends SplitViewOptions {
disableAutoResizing?: boolean;
components?: {

View File

@ -1,4 +1,4 @@
import { ISerializableView, PanelViewInitParameters } from './options';
import { PanelViewInitParameters } from './options';
import {
BasePanelView,
BasePanelViewExported,
@ -19,7 +19,7 @@ export interface ISplitviewPanel
export abstract class SplitviewPanel
extends BasePanelView<SplitviewPanelApiImpl>
implements ISerializableView, ISplitviewPanel
implements ISplitviewPanel
{
private _evaluatedMinimumSize = 0;
private _evaluatedMaximumSize = Number.POSITIVE_INFINITY;

View File

@ -0,0 +1,14 @@
---
title: Group API
sidebar_position: 3
---
:::info
Use the group API sparingly. As you move panels, groups change and if you don't track this correctly you may encounter unexpected
behaviours. You should be able to achieve most things directly through the panel API.
:::
import { DocRef } from '@site/src/components/ui/reference/docRef';
<DocRef declaration="DockviewGroupPanelApi" />

View File

@ -0,0 +1,18 @@
---
title: Options
sidebar_position: 0
---
import { DocRef } from '@site/src/components/ui/reference/docRef';
<FrameworkSpecific framework="JavaScript">
<DocRef declaration="DockviewComponentOptions" />
</FrameworkSpecific>
<FrameworkSpecific framework="React">
<DocRef declaration="IDockviewReactProps" />
</FrameworkSpecific>

View File

@ -1,6 +1,6 @@
---
title: Overview
sidebar_position: 0
title: API
sidebar_position: 1
---
import { DocRef } from '@site/src/components/ui/reference/docRef';

View File

@ -1,6 +1,7 @@
---
description: API
title: Panel API
sidebar_position: 2
---
import { DocRef } from '@site/src/components/ui/reference/docRef';

View File

@ -1,9 +0,0 @@
---
description: API
title: React Props
---
import { DocRef } from '@site/src/components/ui/reference/docRef';
<DocRef declaration="IDockviewReactProps" />

View File

@ -1,6 +1,7 @@
---
description: API
title: "API"
sidebar_position: 1
---
import { DocRef } from '@site/src/components/ui/reference/docRef';

View File

@ -0,0 +1,18 @@
---
title: Options
sidebar_position: 0
---
import { DocRef } from '@site/src/components/ui/reference/docRef';
<FrameworkSpecific framework="JavaScript">
<DocRef declaration="GridviewComponentOptions" />
</FrameworkSpecific>
<FrameworkSpecific framework="React">
<DocRef declaration="IGridviewReactProps" />
</FrameworkSpecific>

View File

@ -1,6 +1,7 @@
---
description: API
title: Panel API
sidebar_position: 2
---
import { DocRef } from '@site/src/components/ui/reference/docRef';

View File

@ -1,9 +0,0 @@
---
description: API
title: React Props
---
import { DocRef } from '@site/src/components/ui/reference/docRef';
<DocRef declaration="IGridviewReactProps" />

View File

@ -1,6 +1,7 @@
---
description: API
title: "API"
sidebar_position: 1
---
import { DocRef } from '@site/src/components/ui/reference/docRef';

View File

@ -0,0 +1,18 @@
---
title: Options
sidebar_position: 0
---
import { DocRef } from '@site/src/components/ui/reference/docRef';
<FrameworkSpecific framework="JavaScript">
<DocRef declaration="PaneviewComponentOptions" />
</FrameworkSpecific>
<FrameworkSpecific framework="React">
<DocRef declaration="IPaneviewReactProps" />
</FrameworkSpecific>

View File

@ -1,6 +1,7 @@
---
description: API
title: Panel API
sidebar_position: 2
---
import { DocRef } from '@site/src/components/ui/reference/docRef';

View File

@ -1,9 +0,0 @@
---
description: API
title: React Props
---
import { DocRef } from '@site/src/components/ui/reference/docRef';
<DocRef declaration="IPaneviewReactProps" />

View File

@ -1,6 +1,7 @@
---
description: API
title: "API"
sidebar_position: 1
---
import { DocRef } from '@site/src/components/ui/reference/docRef';

View File

@ -0,0 +1,18 @@
---
title: Options
sidebar_position: 0
---
import { DocRef } from '@site/src/components/ui/reference/docRef';
<FrameworkSpecific framework="JavaScript">
<DocRef declaration="SplitviewComponentOptions" />
</FrameworkSpecific>
<FrameworkSpecific framework="React">
<DocRef declaration="ISplitviewReactProps" />
</FrameworkSpecific>

View File

@ -1,6 +1,7 @@
---
description: API
title: Panel API
sidebar_position: 2
---
import { DocRef } from '@site/src/components/ui/reference/docRef';

View File

@ -1,9 +0,0 @@
---
description: API
title: React Props
---
import { DocRef } from '@site/src/components/ui/reference/docRef';
<DocRef declaration="ISplitviewReactProps" />

View File

@ -0,0 +1,24 @@
---
title: Move Group
sidebar_position: 5
---
import { DocRef } from '@site/src/components/ui/reference/docRef';
This section describes how you can move a group.
## Methods
<DocRef declaration="DockviewGroupPanelApi" methods={["moveTo"]}/>
## Move a Group
You can move a group through the [Group API](/docs/api/dockview/groupApi) and you can find out how to move a Panel [here](/docs/core/panels/move).
```ts
panel.group.api.moveTo({ group, position, index });
```
## Live Example
To Be Completed...

View File

@ -5,7 +5,10 @@ sidebar_position: 0
This section provided a core overview.
Once you have created an dock you will want to store a reference to the [API](/docs/api/dockview/overview).
The component takes a collection of [Options](/docs/api/dockview/options) as inputs and
once you have created a dock you can store a reference to the [API](/docs/api/dockview/overview) that is created.
<FrameworkSpecific framework='React'>
```tsx
@ -21,3 +24,12 @@ function onReady(event: DockviewReadyEvent) {
```
</FrameworkSpecific>
<FrameworkSpecific framework='JavaScript'>
```tsx
const component = new DockviewComponent({
/** options */
});
```
</FrameworkSpecific>

View File

@ -9,95 +9,128 @@ This section describes how to add a new panel.
## API
The API associated with opening a panel
<DocRef declaration="DockviewApi" methods={['addPanel']} />
## Open a panel
## Opening a Simple Panel
Using the dockview API you can access the `addPanel` method which returns an instance of the created panel.
The minimum method signature is:
The minimum options required to open a panel a unique `id` for the panel and the name of the `component` you want to render.
```ts
const panel = api.addPanel({
const panel: IDockviewPanel = api.addPanel({
id: 'my_unique_panel_id',
component: 'my_component',
});
```
where `id` is the unique id of the panel and `component` is the implenentation which
will be used to render the panel. You will have registered this using the `components` prop of the `DockviewReactComponent` component.
> See [Overview](/docs/core/overview) to learn how to register components.
You can optionally provide a `tabComponent` parameters to the `addPanel` method which will render the tab using a custom renderer.
You will have registered this using the `tabComponents` prop of the `DockviewReactComponent` component.
## Provide a custom Tab renderer
:::info
You can override the default tab renderer through the [Options](/docs/api/dockview/options).
:::
To render a custom tab component you should specify the `tabComponent`.
```ts
const panel = api.addPanel({
const panel: IDockviewPanel = api.addPanel({
id: 'my_unique_panel_id',
component: 'my_component',
tabComponent: 'my_tab_component',
});
```
You can pass properties to the panel using the `params` key.
You can update these properties through the panels `api` object and its `updateParameters` method.
> See [Overview](/docs/core/overview) to learn how to register tab components.
## Provide custom Parameters
Using the `params` option you can specific a simple object that is accessible in both the panel and tab renderer.
To update these parameters after the panel has been created see [Update Panel](/docs/core/panels/update).
```ts
const panel = api.addPanel({
const panel: IDockviewPanel = api.addPanel({
id: 'my_unique_panel_id',
component: 'my_component',
params: {
myCustomKey: 'my_custom_value',
},
});
panel.api.updateParameters({
myCustomKey: 'my_custom_value',
myOtherCustomKey: 'my_other_custom_key',
});
```
> Note `updateParameters` does not accept partial parameter updates, you should call it with the entire set of parameters
> you want the panel to receive.
## Rendering
Finally `addPanel` accepts a `position` object which tells dockview where to place the panel.
Rendering is worthy of it's own page which can be found [here](/docs/core/panels/rendering).
- This object optionally accepts either a `referencePanel` or `referenceGroup` which can be the associated id as a string
or the panel/group object reference.
- This object accepts a `direction` property which dictates where,
relative to the provided reference the new panel will be placed.
## Positioning the Panel
> If neither a `referencePanel` or `referenceGroup` is provided then the `direction` will be treated as absolute.
> If no `direction` is provided the library will place the new panel in a pre-determined position.
### Relative to another Panel
```ts
const panel = api.addPanel({
id: 'panel_1',
component: 'default',
});
const panel2 = api.addPanel({
const panel2: IDockviewPanel = api.addPanel({
id: 'panel_2',
component: 'default',
position: {
referencePanel: panel1,
direction: 'right',
},
referencePanel: 'panel_1',
direction: 'above'
}
});
api.addPanel({
id: 'panel_3',
component: 'default',
position: {
referencePanel: panel2,
direction: 'above'
}
});
```
To add a floating panel you should include the `floating` variable which can be either a `boolean` or an object defining it's bounds.
These bounds are relative to the dockview component.
### Relative to another Group
```ts
const panel1 = api.addPanel({
const panel2: IDockviewPanel = api.addPanel({
id: 'panel_2',
component: 'default',
position: {
referenceGroup: 'panel_1',
direction: 'left'
}
});
const panel = api.addPanel({
id: 'panel_2',
component: 'default',
position: {
referenceGroup: panel2.group,
direction: 'left'
}
});
```
### Relative to the container
```ts
const panel = api.addPanel({
id: 'panel_2',
component: 'default',
position: {
direction: 'right'
}
});
```
### Floating
You should specific the `floating` option which can be either `true` or an object describing the position of the floating group.
```ts
api.addPanel({
id: 'panel_1',
component: 'default',
floating: true,
});
const panel2 = api.addPanel({
api.addPanel({
id: 'panel_2',
component: 'default',
floating: { x: 10, y: 10, width: 300, height: 300 },

View File

@ -3,9 +3,17 @@ title: Move Panel
sidebar_position: 3
---
## Move panel
import { DocRef } from '@site/src/components/ui/reference/docRef';
You can programatically move a panel using the panel `api`.
This section describes how you can move a panel to another panel or group.
## Methods
<DocRef declaration="DockviewPanelApi" methods={["moveTo"]}/>
## Move a Panel
You can move a panel through the [Panel API](/docs/api/dockview/panelApi) and you can find out how to move a Group [here](/docs/core/groups/move).
```ts
panel.api.moveTo({ group, position, index });
@ -17,3 +25,7 @@ An equivalent method for moving groups is avaliable on the group `api`.
const group = panel.api.group;
group.api.moveTo({ group, position });
```
## Live Example
To Be Completed...

View File

@ -3,17 +3,27 @@ title: Remove Panel
sidebar_position: 4
---
## Remove panel
import { DocRef } from '@site/src/components/ui/reference/docRef';
You can programatically remove a panel using the panel `api`.
This section describes multiple ways to remove a panel.
## Remove a Panel using the Panel API
<DocRef declaration="DockviewPanelApi" methods={["close"]}/>
Calling `close` on the panel API is the easiest way to close a panel through code.
```ts
panel.api.close();
```
Given a reference to the panel you can also use the component `api` to remove it.
## Remove a Panel using the API
<DocRef declaration="DockviewApi" methods={["removePanel"]}/>
Firstly, you can retrieve a reference to the panel given it's id and then you can
pass that reference into `removePanel` to remove the panel.
```ts
const panel = api.getPanel('myPanel');
const panel: IDockviewPanel = api.getPanel('myPanel');
api.removePanel(panel);
```

View File

@ -7,18 +7,66 @@ import { MultiFrameworkContainer } from '@site/src/components/ui/container';
import DockviewRenderMode from '@site/sandboxes/rendermode-dockview/src/app';
import RenderingDockview from '@site/sandboxes/rendering-dockview/src/app';
## Panel Rendering
Rendering type is an important consideration when creating your application and whether your panels should be destroyed when hidden.
## Render Mode
:::info
If you are looking for information on how to render **iframes** in Dockview please go the the [iframes](/docs/advanced/iframe) section.
:::
Dockview has two rendering modes `onlyWhenVisible` (default) and `always`. A rendering mode can be defined through the `renderer` prop to `DockviewReact` or at an individual panel level when added where
the panel declaration takes precedence if both are defined. Rendering modes defined at the panel level are persisted, those defined at the `DockviewReact` level are not persisted.
When a panel is selected all other panels in that group are not visible. The API does expose methods to determine whether your panel is visible or not
and the panel instance only ever destroyed when removed however the question still remains, what to do with the partial DOM tree that makes up your panel and there are two options the dock can take:
- `onlyWhenVisible` mode is the default mode. In this mode when a panel is no longer visible through either it's visiblity being hidden or it not being the active panel within a group the panels HTMLElement is removed
from the DOM and any DOM state such as scrollbar positions will be lost. If you are using any ResizeObservers to measure size this will result both zero height and width as the HTMLElement no longer belongs to the DOM.
This design allows for maximum performance at some cost.
- `always` mode. In this mode when panels become hidden the HTMLElement is not destroyed so all DOM state such as scrollbar positions will be maintained. This is implemented by rendering each panel as an absolutely positioned
HTMLElement and hidden the HTMLElement with `display: none` when it should be hidden.
1. (*onlyWhenVisible*) Remove the element from the DOM tree to make space for the new panel.
This will cause the element to loss any DOM-specific state such as scrollbar position and if you measure the size of any elements during this time you will mostly like see both a width and height of 0px,
this is also true for any active ResizeObservers.
```ts
api.addPanel({
id: 'my_unique_panel_id',
component: 'my_component',
renderer: 'always'
});
```
2. (*always*) Keep the DOM tree alive but hide it in order to allow the select panels content to show.
This approach will maintain any DOM-sepcific state you had and is essential if you require the native scrollbar position to be preserved.
```ts
api.addPanel({
id: 'my_unique_panel_id',
component: 'my_component',
renderer: 'onlyWhenVisible'
});
```
Both are valid use-cases therefore the dock allows you to choose your rendering mode, the default however is the first option since this is the most memory efficient solution.
> You can change the `defaultRenderer` in the Dock [Options](/docs/api/dockview/options).
:::info
The panel instance is only ever destroyed when it is removed from the dock allowing you to still run code associated with the panel when it is not visible.
The renderer only affects what happens to the DOM element.
:::
## Choose a Render Mode
```ts
api.addPanel({
id: 'my_unique_panel_id',
component: 'my_component',
renderer: 'always'
});
api.addPanel({
id: 'my_unique_panel_id',
component: 'my_component',
renderer: 'onlyWhenVisible'
});
```
## Live Example
<MultiFrameworkContainer
height={500}

View File

@ -4,49 +4,43 @@ sidebar_position: 2
---
import { DocRef } from '@site/src/components/ui/reference/docRef';
import LiveExample from '@site/src/components/ui/exampleFrame';
This section describes how to update the parameters of a panel.
:::warning
**Use this feature sparingly**: Anything you assign to the `params` options of a panel will be persisted.
**Use this feature sparingly**: Anything you assign to the `params` options of a panel will be saved when calling `api.toJSON()`.
Only use this to store small amounts of static view data.
**Do not** use this to pass application state.
**Do not** use this to store application state or dynamic panel state.
:::
## Panel API
## Methods
<DocRef declaration="DockviewPanelApi" methods={['updateParameters']} />
## Update Panel
## Updating parameters
You can programatically update the `params` passed through to the panel through the panal api using `api.updateParameters`.
:::info
If you want to set initial parameters when adding a panel see the [Add Panel](/docs/core/panels/add) section.
:::
You can update a panel through the [Panel API](/docs/api/dockview/panelApi).
```ts
const panel = api.addPanel({
id: 'panel_1',
component: 'default',
params: {
keyA: 'valueA',
},
});
// ...
panel.api.updateParameters({
keyB: 'valueB',
});
// ...
panel.api.updateParameters({
keyA: 'anotherValueA',
keyB: 'valueB',
});
```
To delete a parameter you should pass a value of `undefined` for the key.
To delete a parameter you should pass a value of `undefined`.
```ts
panel.api.updateParameters({
keyA: undefined, // this will delete 'keyA'.
keyA: undefined,
});
```
## Live Example
<LiveExample framework="react" id="dockview/update-parameters"/>

View File

@ -260,6 +260,9 @@ const config = {
id: 'announcementBar', // Increment on change
content: `⭐️ If you like Dockview, give it a star on <a target="_blank" rel="noopener noreferrer" href="https://github.com/mathuo/dockview">GitHub</a>`,
},
tableOfContents: {
maxHeadingLevel: 5,
},
}),
};

View File

@ -23,9 +23,9 @@
]
},
"dependencies": {
"@docusaurus/core": "^3.1.0",
"@docusaurus/module-type-aliases": "^3.1.0",
"@docusaurus/preset-classic": "^3.1.0",
"@docusaurus/core": "^3.1.1",
"@docusaurus/module-type-aliases": "^3.1.1",
"@docusaurus/preset-classic": "^3.1.1",
"@mdx-js/react": "^3.0.0",
"@minoru/react-dnd-treeview": "^3.4.4",
"@radix-ui/react-icons": "^1.3.0",

View File

@ -5,6 +5,7 @@ import {
IDockviewPanelHeaderProps,
IDockviewPanelProps,
IDockviewHeaderActionsProps,
DockviewApi,
} from 'dockview';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
@ -38,6 +39,17 @@ const components = {
</div>
);
},
iframe: () => {
return (
<iframe
style={{
width: '100%',
height: '100%',
}}
src="https://dockview.dev"
/>
);
},
};
const headerComponents = {
@ -114,7 +126,7 @@ const RightControls = (props: IDockviewHeaderActionsProps) => {
};
const onClick2 = () => {
if (props.api.location !== 'popout') {
if (props.api.location.type !== 'popout') {
props.containerApi.addPopoutGroup(props.group);
} else {
props.api.moveTo({ position: 'right' });
@ -198,10 +210,21 @@ const PrefixHeaderControls = (props: IDockviewHeaderActionsProps) => {
};
const DockviewDemo = (props: { theme?: string }) => {
const [api, setApi] = React.useState<DockviewApi>();
const onReady = (event: DockviewReadyEvent) => {
setApi(event.api);
const value = localStorage.getItem('dv-demo-app');
if (typeof value === 'string') {
event.api.fromJSON(JSON.parse(value));
return;
}
const panel1 = event.api.addPanel({
id: 'panel_1',
component: 'default',
component: 'iframe',
renderer: 'always',
title: 'Panel 1',
});
@ -258,15 +281,64 @@ const DockviewDemo = (props: { theme?: string }) => {
};
return (
<DockviewReact
components={components}
defaultTabComponent={headerComponents.default}
rightHeaderActionsComponent={RightControls}
leftHeaderActionsComponent={LeftControls}
prefixHeaderActionsComponent={PrefixHeaderControls}
onReady={onReady}
className={props.theme || 'dockview-theme-abyss'}
/>
<div
style={{ height: '100%', display: 'flex', flexDirection: 'column' }}
>
<div>
<button
onClick={() => {
if (!api) {
return;
}
const value = localStorage.getItem('dv-demo-app');
if (typeof value === 'string') {
api.fromJSON(JSON.parse(value));
}
}}
>
{'Load'}
</button>
<button
onClick={() => {
if (!api) {
return;
}
localStorage.setItem(
'dv-demo-app',
JSON.stringify(api.toJSON())
);
}}
>
{'Save'}
</button>
<button
onClick={() => {
api?.clear();
}}
>
{'Clear'}
</button>
<button
onClick={() => {
localStorage.removeItem('dv-demo-app');
}}
>
{'Reset'}
</button>
</div>
<div style={{ flexGrow: 1 }}>
<DockviewReact
components={components}
defaultTabComponent={headerComponents.default}
rightHeaderActionsComponent={RightControls}
leftHeaderActionsComponent={LeftControls}
prefixHeaderActionsComponent={PrefixHeaderControls}
onReady={onReady}
className={props.theme || 'dockview-theme-abyss'}
/>
</div>
</div>
);
};

View File

@ -0,0 +1,32 @@
{
"name": "dockview.update-parameters",
"description": "",
"keywords": [
"dockview"
],
"version": "1.0.0",
"main": "src/index.tsx",
"dependencies": {
"dockview": "*",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@types/react": "^18.0.28",
"@types/react-dom": "^18.0.11",
"typescript": "^4.9.5",
"react-scripts": "*"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
]
}

View File

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000">
<!--
manifest.json provides metadata used when your web app is added to the
homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
</head>
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>

View File

@ -0,0 +1,85 @@
import {
DockviewReact,
DockviewReadyEvent,
IDockviewPanelHeaderProps,
IDockviewPanelProps,
} from 'dockview';
import * as React from 'react';
interface CustomParams {
myValue: number;
}
const components = {
default: (props: IDockviewPanelProps<CustomParams>) => {
const [running, setRunning] = React.useState<boolean>(false);
React.useEffect(() => {
if (!running) {
return;
}
const interval = setInterval(() => {
props.api.updateParameters({ myValue: Date.now() });
}, 1000);
props.api.updateParameters({ myValue: Date.now() });
return () => {
clearInterval(interval);
};
}, [running]);
return (
<div style={{ padding: '20px', color: 'white' }}>
<div>{props.api.title}</div>
<button onClick={() => setRunning(!running)}>
{running ? 'Stop' : 'Start'}
</button>
<span>{`value: ${props.params.myValue}`}</span>
</div>
);
},
};
const tabComponents = {
default: (props: IDockviewPanelHeaderProps<CustomParams>) => {
return (
<div>
<div>{`custom tab: ${props.api.title}`}</div>
<span>{`value: ${props.params.myValue}`}</span>
</div>
);
},
};
export const App: React.FC = (props: { theme?: string }) => {
const onReady = (event: DockviewReadyEvent) => {
event.api.addPanel({
id: 'panel_1',
component: 'default',
tabComponent: 'default',
params: {
myValue: Date.now(),
},
});
event.api.addPanel({
id: 'panel_2',
component: 'default',
tabComponent: 'default',
params: {
myValue: Date.now(),
},
});
};
return (
<DockviewReact
components={components}
tabComponents={tabComponents}
onReady={onReady}
className={props.theme || 'dockview-theme-abyss'}
/>
);
};
export default App;

View File

@ -0,0 +1,20 @@
import { StrictMode } from 'react';
import * as ReactDOMClient from 'react-dom/client';
import './styles.css';
import 'dockview/dist/styles/dockview.css';
import App from './app';
const rootElement = document.getElementById('root');
if (rootElement) {
const root = ReactDOMClient.createRoot(rootElement);
root.render(
<StrictMode>
<div className="app">
<App />
</div>
</StrictMode>
);
}

View File

@ -0,0 +1,16 @@
body {
margin: 0px;
color: white;
font-family: sans-serif;
text-align: center;
}
#root {
height: 100vh;
width: 100vw;
}
.app {
height: 100%;
}

View File

@ -0,0 +1,18 @@
{
"compilerOptions": {
"outDir": "build/dist",
"module": "esnext",
"target": "es5",
"lib": ["es6", "dom"],
"sourceMap": true,
"allowJs": true,
"jsx": "react-jsx",
"moduleResolution": "node",
"rootDir": "src",
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": true,
"strictNullChecks": true
}
}

View File

@ -0,0 +1,28 @@
import * as React from 'react';
const ExampleFrame = (props: {
framework: string;
id: string;
height?: string;
}) => {
const Component = React.useMemo(
() =>
React.lazy(
() =>
import(
`../../../sandboxes/${props.framework}/${props.id}/src/app`
)
),
[props.framework, props.id]
);
return (
<React.Suspense>
<div style={{ height: props.height ?? '500px' }}>
<Component />
</div>
</React.Suspense>
);
};
export default ExampleFrame;

View File

@ -7,7 +7,8 @@ export interface DocRefProps {
methods?: string[];
}
import docsJson from '../../../generated/api.output.json';
import docsJson_ from '../../../generated/api.output.json';
const docsJson = docsJson_ as any as DocsJson;
type DocsContent = { kind: string; text: string; tag?: string };
type DocsTag = { tag: string; content: DocsContent[] };
@ -15,13 +16,19 @@ type DocsComment = {
summary?: DocsContent[];
blockTags?: DocsTag[];
};
type Doc = {
name: string;
code: string;
comment?: DocsComment;
kind: 'accessor' | 'property' | 'method';
pieces: string[];
};
type DocsJson = {
[index: string]: Array<{
name: string;
code: string;
comment?: DocsComment;
kind: 'accessor' | 'property' | 'method';
}>;
[index: string]: {
kind: string;
metadata?: Doc;
children: Doc[];
};
};
export const Text = (props: { content: DocsContent[] }) => {
@ -74,87 +81,125 @@ export const Markdown = (props: { children: string }) => {
return <span>{props.children}</span>;
};
const Piece = (props: { piece: string }) => {
const item = docsJson[props.piece];
if (!item) {
return;
}
if (item.kind === 'interface') {
return;
}
if (!item.metadata?.code) {
return;
}
return <CodeBlock language="tsx">{item.metadata.code}</CodeBlock>;
};
const Row = (props: { doc: Doc }) => {
return (
<tr>
<th
style={{
width: '40%',
display: 'flex',
}}
>
<div
style={{
// maxWidth: '30%',
display: 'flex',
flexDirection: 'column',
alignItems: 'start',
}}
>
<h6
style={{
fontFamily: 'monospace',
fontSize: '1.2em',
}}
>
{props.doc.name}
</h6>
<div
style={{
display: 'flex',
flexDirection: 'column',
alignItems: 'start',
}}
>
{/* <span
style={{
fontSize: '0.75em',
color: 'var(--ifm-color-content-secondary)',
}}
>
{'Type'}
</span>
<span
style={{
color: 'var(--ifm-color-primary)',
}}
>
{doc.type}
</span> */}
</div>
</div>
</th>
<th style={{ width: '60%' }}>
{/* <div>{'-'}</div> */}
<div>
<div>
{props.doc.comment && (
<Summary summary={props.doc.comment} />
)}
</div>
<CodeBlock language="tsx">{props.doc.code}</CodeBlock>
</div>
</th>
</tr>
);
};
export const DocRef = (props: DocRefProps) => {
const docs = React.useMemo(
() => (docsJson as DocsJson)[props.declaration],
[props.declaration]
);
const filteredDocs = React.useMemo(
() =>
docs?.children?.filter((child) => {
if (props.methods && !props.methods.includes(child.name)) {
return false;
}
return true;
}),
[docs]
);
if (!docs) {
return null;
return <span>{`Failed to find docs for '${props.declaration}'`}</span>;
}
return (
<table className="doc-ref-table">
<tbody>
{docs.map((doc) => {
if (props.methods && !props.methods.includes(doc.name)) {
return null;
}
{filteredDocs.map((doc, i) => {
return (
<tr>
<th
style={{
width: '40%',
display: 'flex',
}}
>
<div
style={{
// maxWidth: '30%',
display: 'flex',
flexDirection: 'column',
alignItems: 'start',
}}
>
<h6
style={{
fontFamily: 'monospace',
fontSize: '1.2em',
}}
>
{doc.name}
</h6>
<div
style={{
display: 'flex',
flexDirection: 'column',
alignItems: 'start',
}}
>
{/* <span
style={{
fontSize: '0.75em',
color: 'var(--ifm-color-content-secondary)',
}}
>
{'Type'}
</span>
<span
style={{
color: 'var(--ifm-color-primary)',
}}
>
{doc.type}
</span> */}
</div>
</div>
</th>
<th style={{ width: '60%' }}>
{/* <div>{'-'}</div> */}
<div>
<div>
{doc.comment && (
<Summary summary={doc.comment} />
)}
</div>
<CodeBlock language="tsx">
{doc.code}
</CodeBlock>
</div>
</th>
</tr>
<>
<Row key={i} doc={doc} />
{/* {doc.pieces?.map((piece) => (
<tr>
<th colSpan={2}>
<Piece piece={piece} />
</th>
</tr>
))} */}
</>
);
})}
</tbody>

File diff suppressed because it is too large Load Diff

View File

@ -67,8 +67,9 @@ const dockviewCore = content.children.find(
const dockview = content.children.find((child) => child.name === 'dockview');
const declarations = [dockviewCore, dockview]
.flatMap((item) =>
item.children.filter((child) => DOCUMENT_LIST.includes(child.name))
.flatMap(
(item) => item.children
// .filter((child) => DOCUMENT_LIST.includes(child.name))
)
.filter(Boolean);
@ -93,44 +94,77 @@ function parseType(obj) {
return `${obj.qualifiedName ?? obj.name}${parseTypeArguments(obj)}`;
case 'array':
return `${parseType(obj.elementType)}[]`;
case 'intersection':
return obj.types.map(parseType).reverse().join(' & ');
case 'predicate':
return `${obj.name} is ${parseType(obj.targetType)}`;
case 'tuple':
return `[${obj.elements.map(parseType)}]`;
default:
throw new Error(`unhandled type ${obj.type}`);
}
}
function extractPiecesFromType(obj) {
if (obj.type === 'reference' && obj.package?.startsWith('dockview-')) {
return obj.name;
}
return null;
}
function parse(data) {
const { name, comment, flags } = data;
let code = '';
const pieces = [];
switch (data.kind) {
case ReflectionKind.Accessor: // 262144
if (!data.getSignature) {
return null;
}
const getSignature = parse(data.getSignature);
code += getSignature.code;
pieces.push(...getSignature.pieces);
return {
name,
code,
kind: 'accessor',
comment: getSignature.comment,
pieces,
};
case ReflectionKind.Method: // 2048
if (data.signatures.length > 1) {
throw new Error('unhandled');
}
const methodSignature = data.signatures.map((signature) =>
parse(signature)
);
pieces.push(...methodSignature.flatMap((_) => _.pieces));
const signature = parse(data.signatures[0]);
code += methodSignature
.map((signature) => signature.code)
.join('\n');
code += signature.code;
return { name, code, kind: 'method', comment: signature.comment };
return {
name,
code,
kind: 'method',
comment: data.signatures[0].comment,
pieces,
};
case ReflectionKind.Property: // 1024
code += parseType(data.type);
pieces.push(extractPiecesFromType(data.type));
return {
name,
code,
kind: 'property',
flags,
comment,
pieces,
};
return { name, code, kind: 'property', flags, comment };
case ReflectionKind.Constructor: // 512
// don't care for constrcutors
return null;
case ReflectionKind.Parameter: // 32768
code += `${name}`;
@ -140,10 +174,12 @@ function parse(data) {
code += ': ';
code += parseType(data.type);
pieces.push(extractPiecesFromType(data.type));
return {
name,
code,
pieces,
};
case ReflectionKind.TypeLiteral: // 65536
if (Array.isArray(data.children)) {
@ -155,7 +191,10 @@ function parse(data) {
if (child.flags.isOptional) {
code += '?';
}
code += `: ${parse(child).code}`;
const childData = parse(child);
pieces.push(...childData.pieces);
code += `: ${childData.code}`;
return code;
})
.join(', ');
@ -163,23 +202,34 @@ function parse(data) {
}
if (Array.isArray(data.signatures)) {
code += data.signatures
.map((signature) => parse(signature).code)
const signatures = data.signatures.map((signature) =>
parse(signature)
);
code += signatures
.map((signature) => signature.code)
.join(', ');
pieces.push(...signatures.flatMap((_) => _.pieces));
}
return { name, code };
return { name, code, pieces };
case ReflectionKind.CallSignature: // 4096
// don't care for constrcutors
if (Array.isArray(data.typeParameter)) {
code += `<${data.typeParameter.map((typeParameter) => {
let type = `${typeParameter.name} extends ${parseType(
typeParameter.type
)}`;
let type = `${typeParameter.name}`;
if (typeParameter.type) {
type += ` extends ${parseType(typeParameter.type)}`;
pieces.push(extractPiecesFromType(typeParameter.type));
}
if (typeParameter.default) {
type += ` = ${typeParameter.default.name}`;
pieces.push(
extractPiecesFromType(typeParameter.default)
);
}
return type;
@ -189,57 +239,191 @@ function parse(data) {
code += '(';
if (Array.isArray(data.parameters)) {
code += `${data.parameters
.map((parameter) => parse(parameter).code)
const parameters = data.parameters.map((parameter) =>
parse(parameter)
);
code += `${parameters
.map((parameter) => parameter.code)
.join(', ')}`;
pieces.push(...parameters.flatMap((_) => _.pieces));
}
code += '): ';
code += parseType(data.type);
pieces.push(extractPiecesFromType(data.type));
return {
name,
comment,
code,
pieces,
};
case ReflectionKind.GetSignature: // 524288
code += parseType(data.type);
pieces.push(extractPiecesFromType(data.type));
return {
name,
comment,
code,
pieces,
};
case ReflectionKind.Function: // 64
if (data.signatures.length > 1) {
throw new Error('unhandled');
}
const functionSignature = parse(data.signatures[0]);
pieces.push(...functionSignature.pieces);
code += functionSignature.code;
return {
name,
comment,
code,
pieces,
};
case ReflectionKind.Variable: // 32
return {
name,
comment,
code,
pieces,
};
case ReflectionKind.EnumMember: // 16
return {
name,
comment,
code,
pieces,
};
case ReflectionKind.Interface: // 16
return {
name,
comment,
code,
pieces,
};
case ReflectionKind.ConstructorSignature: // 16384
return {
name,
comment,
code,
pieces,
};
case ReflectionKind.Constructor: // 512
// don't care for constrcutors
return {
name,
comment,
code,
pieces,
};
case ReflectionKind.TypeAlias: // 2097152
if (Array.isArray(data.typeParameter)) {
code += `<${data.typeParameter.map((typeParameter) => {
let type = `${typeParameter.name}`;
if (typeParameter.type) {
type += ` extends ${parseType(typeParameter.type)}`;
pieces.push(extractPiecesFromType(typeParameter.type));
}
if (typeParameter.default) {
type += ` = ${typeParameter.default.name}`;
pieces.push(
extractPiecesFromType(typeParameter.default)
);
}
return type;
})}>`;
}
code += parseType(data.type);
pieces.push(extractPiecesFromType(data.type));
return {
name,
comment,
code,
pieces,
};
default:
throw new Error(`unhandled kind ${data.kind}`);
}
}
function parseDeclarationMetadata(declaration) {
switch (declaration.kind) {
case ReflectionKind.Namespace:
return { kind: 'namespace' };
case ReflectionKind.Variable:
return { kind: 'variable' };
case ReflectionKind.Enum:
return { kind: 'enum' };
case ReflectionKind.Function:
return { kind: 'function' };
case ReflectionKind.Class:
return { kind: 'class' };
case ReflectionKind.Interface:
return { kind: 'interface' };
case ReflectionKind.TypeAlias:
return { kind: 'typeAlias' };
default:
throw new Error(`unhandled declaration kind ${declaration.kind}`);
}
}
function createDocument(declarations) {
const documentation = {};
for (const declaration of declarations) {
const { children, name } = declaration;
documentation[name] = [];
/**
* 4: Namespace
* 8: Enum
* 64: Function
* 128: Class
* 256: Interface
* 2097152: TypeAlias
*/
for (const child of children) {
try {
const { flags } = child;
const metadata = parseDeclarationMetadata(declaration);
if (flags.isPrivate) {
continue;
documentation[name] = {
...metadata,
children: [],
};
if (!children) {
documentation[name].metadata = parse(declaration);
}
if (children) {
for (const child of children) {
try {
const { flags } = child;
if (flags.isPrivate) {
continue;
}
const output = parse(child);
if (output) {
output.pieces = Array.from(new Set(output.pieces))
.filter(Boolean)
.sort();
documentation[name].children.push(output);
}
} catch (err) {
console.error('error', err, JSON.stringify(child, null, 4));
process.exit(-1);
}
const output = parse(child);
if (output) {
documentation[name].push(output);
}
} catch (err) {
console.error('error', err, JSON.stringify(child, null, 4));
process.exit(-1);
}
}
}

354
yarn.lock
View File

@ -2059,10 +2059,10 @@
"@docsearch/css" "3.5.2"
algoliasearch "^4.19.1"
"@docusaurus/core@3.1.0", "@docusaurus/core@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.1.0.tgz#b66e7eaf867c1f44738d725d217a1c0e879629d7"
integrity sha512-GWudMGYA9v26ssbAWJNfgeDZk+lrudUTclLPRsmxiknEBk7UMp7Rglonhqbsf3IKHOyHkMU4Fr5jFyg5SBx9jQ==
"@docusaurus/core@3.1.1", "@docusaurus/core@^3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.1.1.tgz#29ce8df7a3d3d12ee8962d6d86133b87235ff17b"
integrity sha512-2nQfKFcf+MLEM7JXsXwQxPOmQAR6ytKMZVSx7tVi9HEm9WtfwBH1fp6bn8Gj4zLUhjWKCLoysQ9/Wm+EZCQ4yQ==
dependencies:
"@babel/core" "^7.23.3"
"@babel/generator" "^7.23.3"
@ -2074,13 +2074,13 @@
"@babel/runtime" "^7.22.6"
"@babel/runtime-corejs3" "^7.22.6"
"@babel/traverse" "^7.22.8"
"@docusaurus/cssnano-preset" "3.1.0"
"@docusaurus/logger" "3.1.0"
"@docusaurus/mdx-loader" "3.1.0"
"@docusaurus/cssnano-preset" "3.1.1"
"@docusaurus/logger" "3.1.1"
"@docusaurus/mdx-loader" "3.1.1"
"@docusaurus/react-loadable" "5.5.2"
"@docusaurus/utils" "3.1.0"
"@docusaurus/utils-common" "3.1.0"
"@docusaurus/utils-validation" "3.1.0"
"@docusaurus/utils" "3.1.1"
"@docusaurus/utils-common" "3.1.1"
"@docusaurus/utils-validation" "3.1.1"
"@slorber/static-site-generator-webpack-plugin" "^4.0.7"
"@svgr/webpack" "^6.5.1"
autoprefixer "^10.4.14"
@ -2134,34 +2134,34 @@
webpack-merge "^5.9.0"
webpackbar "^5.0.2"
"@docusaurus/cssnano-preset@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.1.0.tgz#b3fe7134cc4d0c1950eeb1c940089a190591ad4e"
integrity sha512-ned7qsgCqSv/e7KyugFNroAfiszuxLwnvMW7gmT2Ywxb/Nyt61yIw7KHyAZCMKglOalrqnYA4gMhLUCK/mVePA==
"@docusaurus/cssnano-preset@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.1.1.tgz#03a4cb8e6d41654d7ff5ed79fddd73fd224feea4"
integrity sha512-LnoIDjJWbirdbVZDMq+4hwmrTl2yHDnBf9MLG9qyExeAE3ac35s4yUhJI8yyTCdixzNfKit4cbXblzzqMu4+8g==
dependencies:
cssnano-preset-advanced "^5.3.10"
postcss "^8.4.26"
postcss-sort-media-queries "^4.4.1"
tslib "^2.6.0"
"@docusaurus/logger@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.1.0.tgz#eef6475c2d59a3ae7e138ac1f60007d6fafd76b0"
integrity sha512-p740M+HCst1VnKKzL60Hru9xfG4EUYJDarjlEC4hHeBy9+afPmY3BNPoSHx9/8zxuYfUlv/psf7I9NvRVdmdvg==
"@docusaurus/logger@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.1.1.tgz#423e8270c00a57b1b3a0cc8a3ee0a4c522a68387"
integrity sha512-BjkNDpQzewcTnST8trx4idSoAla6zZ3w22NqM/UMcFtvYJgmoE4layuTzlfql3VFPNuivvj7BOExa/+21y4X2Q==
dependencies:
chalk "^4.1.2"
tslib "^2.6.0"
"@docusaurus/mdx-loader@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.1.0.tgz#61d562ff442f62ef04cc31d3f0d5865a8dd390e4"
integrity sha512-D7onDz/3mgBonexWoQXPw3V2E5Bc4+jYRf9gGUUK+KoQwU8xMDaDkUUfsr7t6UBa/xox9p5+/3zwLuXOYMzGSg==
"@docusaurus/mdx-loader@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.1.1.tgz#f79290abc5044bef1d7ecac4eccec887058b8e03"
integrity sha512-xN2IccH9+sv7TmxwsDJNS97BHdmlqWwho+kIVY4tcCXkp+k4QuzvWBeunIMzeayY4Fu13A6sAjHGv5qm72KyGA==
dependencies:
"@babel/parser" "^7.22.7"
"@babel/traverse" "^7.22.8"
"@docusaurus/logger" "3.1.0"
"@docusaurus/utils" "3.1.0"
"@docusaurus/utils-validation" "3.1.0"
"@docusaurus/logger" "3.1.1"
"@docusaurus/utils" "3.1.1"
"@docusaurus/utils-validation" "3.1.1"
"@mdx-js/mdx" "^3.0.0"
"@slorber/remark-comment" "^1.0.0"
escape-html "^1.0.3"
@ -2184,13 +2184,13 @@
vfile "^6.0.1"
webpack "^5.88.1"
"@docusaurus/module-type-aliases@3.1.0", "@docusaurus/module-type-aliases@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.0.tgz#f3451702f143557bfde0502287713a08086a0415"
integrity sha512-XUl7Z4PWlKg4l6KF05JQ3iDHQxnPxbQUqTNKvviHyuHdlalOFv6qeDAm7IbzyQPJD5VA6y4dpRbTWSqP9ClwPg==
"@docusaurus/module-type-aliases@3.1.1", "@docusaurus/module-type-aliases@^3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.1.tgz#b304402b0535a13ebd4c0db1c368d2604d54d02f"
integrity sha512-xBJyx0TMfAfVZ9ZeIOb1awdXgR4YJMocIEzTps91rq+hJDFJgJaylDtmoRhUxkwuYmNK1GJpW95b7DLztSBJ3A==
dependencies:
"@docusaurus/react-loadable" "5.5.2"
"@docusaurus/types" "3.1.0"
"@docusaurus/types" "3.1.1"
"@types/history" "^4.7.11"
"@types/react" "*"
"@types/react-router-config" "*"
@ -2198,18 +2198,18 @@
react-helmet-async "*"
react-loadable "npm:@docusaurus/react-loadable@5.5.2"
"@docusaurus/plugin-content-blog@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.1.0.tgz#d2102e9286486e526dbc0dfc741e53dc5cee0ff0"
integrity sha512-iMa6WBaaEdYuxckvJtLcq/HQdlA4oEbCXf/OFfsYJCCULcDX7GDZpKxLF3X1fLsax3sSm5bmsU+CA0WD+R1g3A==
"@docusaurus/plugin-content-blog@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.1.1.tgz#16f4fd723227b2158461bba6b9bcc18c1926f7ea"
integrity sha512-ew/3VtVoG3emoAKmoZl7oKe1zdFOsI0NbcHS26kIxt2Z8vcXKCUgK9jJJrz0TbOipyETPhqwq4nbitrY3baibg==
dependencies:
"@docusaurus/core" "3.1.0"
"@docusaurus/logger" "3.1.0"
"@docusaurus/mdx-loader" "3.1.0"
"@docusaurus/types" "3.1.0"
"@docusaurus/utils" "3.1.0"
"@docusaurus/utils-common" "3.1.0"
"@docusaurus/utils-validation" "3.1.0"
"@docusaurus/core" "3.1.1"
"@docusaurus/logger" "3.1.1"
"@docusaurus/mdx-loader" "3.1.1"
"@docusaurus/types" "3.1.1"
"@docusaurus/utils" "3.1.1"
"@docusaurus/utils-common" "3.1.1"
"@docusaurus/utils-validation" "3.1.1"
cheerio "^1.0.0-rc.12"
feed "^4.2.2"
fs-extra "^11.1.1"
@ -2221,18 +2221,18 @@
utility-types "^3.10.0"
webpack "^5.88.1"
"@docusaurus/plugin-content-docs@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.1.0.tgz#55d7bdb8e14f854ea6c6e256f1b51b8c17963c19"
integrity sha512-el5GxhT8BLrsWD0qGa8Rq+Ttb/Ni6V3DGT2oAPio0qcs/mUAxeyXEAmihkvmLCnAgp6xD27Ce7dISZ5c6BXeqA==
"@docusaurus/plugin-content-docs@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.1.1.tgz#f2eddebf351dd8dd504a2c26061165c519e1f964"
integrity sha512-lhFq4E874zw0UOH7ujzxnCayOyAt0f9YPVYSb9ohxrdCM8B4szxitUw9rIX4V9JLLHVoqIJb6k+lJJ1jrcGJ0A==
dependencies:
"@docusaurus/core" "3.1.0"
"@docusaurus/logger" "3.1.0"
"@docusaurus/mdx-loader" "3.1.0"
"@docusaurus/module-type-aliases" "3.1.0"
"@docusaurus/types" "3.1.0"
"@docusaurus/utils" "3.1.0"
"@docusaurus/utils-validation" "3.1.0"
"@docusaurus/core" "3.1.1"
"@docusaurus/logger" "3.1.1"
"@docusaurus/mdx-loader" "3.1.1"
"@docusaurus/module-type-aliases" "3.1.1"
"@docusaurus/types" "3.1.1"
"@docusaurus/utils" "3.1.1"
"@docusaurus/utils-validation" "3.1.1"
"@types/react-router-config" "^5.0.7"
combine-promises "^1.1.0"
fs-extra "^11.1.1"
@ -2242,96 +2242,96 @@
utility-types "^3.10.0"
webpack "^5.88.1"
"@docusaurus/plugin-content-pages@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.1.0.tgz#cdb73c804ded307e81ceea39874dc0bb540c2dc4"
integrity sha512-9gntYQFpk+93+Xl7gYczJu8I9uWoyRLnRwS0+NUFcs9iZtHKsdqKWPRrONC9elfN3wJ9ORwTbcVzsTiB8jvYlg==
"@docusaurus/plugin-content-pages@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.1.1.tgz#05aec68c2abeac2140c7a16d4c5b506bf4d19fb2"
integrity sha512-NQHncNRAJbyLtgTim9GlEnNYsFhuCxaCNkMwikuxLTiGIPH7r/jpb7O3f3jUMYMebZZZrDq5S7om9a6rvB/YCA==
dependencies:
"@docusaurus/core" "3.1.0"
"@docusaurus/mdx-loader" "3.1.0"
"@docusaurus/types" "3.1.0"
"@docusaurus/utils" "3.1.0"
"@docusaurus/utils-validation" "3.1.0"
"@docusaurus/core" "3.1.1"
"@docusaurus/mdx-loader" "3.1.1"
"@docusaurus/types" "3.1.1"
"@docusaurus/utils" "3.1.1"
"@docusaurus/utils-validation" "3.1.1"
fs-extra "^11.1.1"
tslib "^2.6.0"
webpack "^5.88.1"
"@docusaurus/plugin-debug@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.1.0.tgz#545872bc8f9cd697d9f1d6c695f8a1674bfc149c"
integrity sha512-AbvJwCVRbmQ8w9d8QXbF4Iq/ui0bjPZNYFIhtducGFnm2YQRN1mraK8mCEQb0Aq0T8SqRRvSfC/far4n/s531w==
"@docusaurus/plugin-debug@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.1.1.tgz#cee5aae1fef288fb93f68894db79a2612e313d3f"
integrity sha512-xWeMkueM9wE/8LVvl4+Qf1WqwXmreMjI5Kgr7GYCDoJ8zu4kD+KaMhrh7py7MNM38IFvU1RfrGKacCEe2DRRfQ==
dependencies:
"@docusaurus/core" "3.1.0"
"@docusaurus/types" "3.1.0"
"@docusaurus/utils" "3.1.0"
"@docusaurus/core" "3.1.1"
"@docusaurus/types" "3.1.1"
"@docusaurus/utils" "3.1.1"
fs-extra "^11.1.1"
react-json-view-lite "^1.2.0"
tslib "^2.6.0"
"@docusaurus/plugin-google-analytics@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.1.0.tgz#3035eace3121db16aec7c10852ebb4cd860f4434"
integrity sha512-zvUOMzu9Uhz0ciqnSbtnp/5i1zEYlzarQrOXG90P3Is3efQI43p2YLW/rzSGdLb5MfQo2HvKT6Q5+tioMO045Q==
"@docusaurus/plugin-google-analytics@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.1.1.tgz#bfc58205b4fcaf3222e04f9c3542f3bef9804887"
integrity sha512-+q2UpWTqVi8GdlLoSlD5bS/YpxW+QMoBwrPrUH/NpvpuOi0Of7MTotsQf9JWd3hymZxl2uu1o3PIrbpxfeDFDQ==
dependencies:
"@docusaurus/core" "3.1.0"
"@docusaurus/types" "3.1.0"
"@docusaurus/utils-validation" "3.1.0"
"@docusaurus/core" "3.1.1"
"@docusaurus/types" "3.1.1"
"@docusaurus/utils-validation" "3.1.1"
tslib "^2.6.0"
"@docusaurus/plugin-google-gtag@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.1.0.tgz#2f4040da81d36bfc6324abc1a12b258e6c7f202a"
integrity sha512-0txshvaY8qIBdkk2UATdVcfiCLGq3KAUfuRQD2cRNgO39iIf4/ihQxH9NXcRTwKs4Q5d9yYHoix3xT6pFuEYOg==
"@docusaurus/plugin-google-gtag@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.1.1.tgz#7e8b5aa6847a12461c104a65a335f4a45dae2f28"
integrity sha512-0mMPiBBlQ5LFHTtjxuvt/6yzh8v7OxLi3CbeEsxXZpUzcKO/GC7UA1VOWUoBeQzQL508J12HTAlR3IBU9OofSw==
dependencies:
"@docusaurus/core" "3.1.0"
"@docusaurus/types" "3.1.0"
"@docusaurus/utils-validation" "3.1.0"
"@docusaurus/core" "3.1.1"
"@docusaurus/types" "3.1.1"
"@docusaurus/utils-validation" "3.1.1"
"@types/gtag.js" "^0.0.12"
tslib "^2.6.0"
"@docusaurus/plugin-google-tag-manager@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.1.0.tgz#4c026e9f65468a332326770f95ccd9c6e12d564b"
integrity sha512-zOWPEi8kMyyPtwG0vhyXrdbLs8fIZmY5vlbi9lUU+v8VsroO5iHmfR2V3SMsrsfOanw5oV/ciWqbxezY00qEZg==
"@docusaurus/plugin-google-tag-manager@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.1.1.tgz#e1aae4d821e786d133386b4ae6e6fe66a4bc0089"
integrity sha512-d07bsrMLdDIryDtY17DgqYUbjkswZQr8cLWl4tzXrt5OR/T/zxC1SYKajzB3fd87zTu5W5klV5GmUwcNSMXQXA==
dependencies:
"@docusaurus/core" "3.1.0"
"@docusaurus/types" "3.1.0"
"@docusaurus/utils-validation" "3.1.0"
"@docusaurus/core" "3.1.1"
"@docusaurus/types" "3.1.1"
"@docusaurus/utils-validation" "3.1.1"
tslib "^2.6.0"
"@docusaurus/plugin-sitemap@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.1.0.tgz#9d9dbb4d87e6dc46ae9321badf6ac7cd9aa96b23"
integrity sha512-TkR5vGBpUooEB9SoW42thahqqwKzfHrQQhkB+JrEGERsl4bKODSuJNle4aA4h6LSkg4IyfXOW8XOI0NIPWb9Cg==
"@docusaurus/plugin-sitemap@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.1.1.tgz#8828bf5e2922273aad207a35189f22913e6a0dfd"
integrity sha512-iJ4hCaMmDaUqRv131XJdt/C/jJQx8UreDWTRqZKtNydvZVh/o4yXGRRFOplea1D9b/zpwL1Y+ZDwX7xMhIOTmg==
dependencies:
"@docusaurus/core" "3.1.0"
"@docusaurus/logger" "3.1.0"
"@docusaurus/types" "3.1.0"
"@docusaurus/utils" "3.1.0"
"@docusaurus/utils-common" "3.1.0"
"@docusaurus/utils-validation" "3.1.0"
"@docusaurus/core" "3.1.1"
"@docusaurus/logger" "3.1.1"
"@docusaurus/types" "3.1.1"
"@docusaurus/utils" "3.1.1"
"@docusaurus/utils-common" "3.1.1"
"@docusaurus/utils-validation" "3.1.1"
fs-extra "^11.1.1"
sitemap "^7.1.1"
tslib "^2.6.0"
"@docusaurus/preset-classic@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.1.0.tgz#ca67d5e416c211b4c23f0fb01f0e3e36b759dfa0"
integrity sha512-xGLQRFmmT9IinAGUDVRYZ54Ys28USNbA3OTXQXnSJLPr1rCY7CYnHI4XoOnKWrNnDiAI4ruMzunXWyaElUYCKQ==
"@docusaurus/preset-classic@^3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.1.1.tgz#15fd80012529dafd7e01cc0bce59d39ee6ad6bf5"
integrity sha512-jG4ys/hWYf69iaN/xOmF+3kjs4Nnz1Ay3CjFLDtYa8KdxbmUhArA9HmP26ru5N0wbVWhY+6kmpYhTJpez5wTyg==
dependencies:
"@docusaurus/core" "3.1.0"
"@docusaurus/plugin-content-blog" "3.1.0"
"@docusaurus/plugin-content-docs" "3.1.0"
"@docusaurus/plugin-content-pages" "3.1.0"
"@docusaurus/plugin-debug" "3.1.0"
"@docusaurus/plugin-google-analytics" "3.1.0"
"@docusaurus/plugin-google-gtag" "3.1.0"
"@docusaurus/plugin-google-tag-manager" "3.1.0"
"@docusaurus/plugin-sitemap" "3.1.0"
"@docusaurus/theme-classic" "3.1.0"
"@docusaurus/theme-common" "3.1.0"
"@docusaurus/theme-search-algolia" "3.1.0"
"@docusaurus/types" "3.1.0"
"@docusaurus/core" "3.1.1"
"@docusaurus/plugin-content-blog" "3.1.1"
"@docusaurus/plugin-content-docs" "3.1.1"
"@docusaurus/plugin-content-pages" "3.1.1"
"@docusaurus/plugin-debug" "3.1.1"
"@docusaurus/plugin-google-analytics" "3.1.1"
"@docusaurus/plugin-google-gtag" "3.1.1"
"@docusaurus/plugin-google-tag-manager" "3.1.1"
"@docusaurus/plugin-sitemap" "3.1.1"
"@docusaurus/theme-classic" "3.1.1"
"@docusaurus/theme-common" "3.1.1"
"@docusaurus/theme-search-algolia" "3.1.1"
"@docusaurus/types" "3.1.1"
"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2":
version "5.5.2"
@ -2341,23 +2341,23 @@
"@types/react" "*"
prop-types "^15.6.2"
"@docusaurus/theme-classic@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.1.0.tgz#6ee68bf4d4db53c8d9b18d4866512abadb00a802"
integrity sha512-/+jMl2Z9O8QQxves5AtHdt91gWsEZFgOV3La/6eyKEd7QLqQUtM5fxEJ40rq9NKYjqCd1HzZ9egIMeJoWwillw==
"@docusaurus/theme-classic@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.1.1.tgz#0a188c787fc4bf2bb525cc30c7aa34e555ee96b8"
integrity sha512-GiPE/jbWM8Qv1A14lk6s9fhc0LhPEQ00eIczRO4QL2nAQJZXkjPG6zaVx+1cZxPFWbAsqSjKe2lqkwF3fGkQ7Q==
dependencies:
"@docusaurus/core" "3.1.0"
"@docusaurus/mdx-loader" "3.1.0"
"@docusaurus/module-type-aliases" "3.1.0"
"@docusaurus/plugin-content-blog" "3.1.0"
"@docusaurus/plugin-content-docs" "3.1.0"
"@docusaurus/plugin-content-pages" "3.1.0"
"@docusaurus/theme-common" "3.1.0"
"@docusaurus/theme-translations" "3.1.0"
"@docusaurus/types" "3.1.0"
"@docusaurus/utils" "3.1.0"
"@docusaurus/utils-common" "3.1.0"
"@docusaurus/utils-validation" "3.1.0"
"@docusaurus/core" "3.1.1"
"@docusaurus/mdx-loader" "3.1.1"
"@docusaurus/module-type-aliases" "3.1.1"
"@docusaurus/plugin-content-blog" "3.1.1"
"@docusaurus/plugin-content-docs" "3.1.1"
"@docusaurus/plugin-content-pages" "3.1.1"
"@docusaurus/theme-common" "3.1.1"
"@docusaurus/theme-translations" "3.1.1"
"@docusaurus/types" "3.1.1"
"@docusaurus/utils" "3.1.1"
"@docusaurus/utils-common" "3.1.1"
"@docusaurus/utils-validation" "3.1.1"
"@mdx-js/react" "^3.0.0"
clsx "^2.0.0"
copy-text-to-clipboard "^3.2.0"
@ -2372,18 +2372,18 @@
tslib "^2.6.0"
utility-types "^3.10.0"
"@docusaurus/theme-common@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.1.0.tgz#d176af1d0fc8ea27fea0afb298157f9a75256336"
integrity sha512-YGwEFALLIbF5ocW/Fy6Ae7tFWUOugEN3iwxTx8UkLAcLqYUboDSadesYtVBmRCEB4FVA2qoP7YaW3lu3apUPPw==
"@docusaurus/theme-common@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.1.1.tgz#5a16893928b8379c9e83aef01d753e7e142459e2"
integrity sha512-38urZfeMhN70YaXkwIGXmcUcv2CEYK/2l4b05GkJPrbEbgpsIZM3Xc+Js2ehBGGZmfZq8GjjQ5RNQYG+MYzCYg==
dependencies:
"@docusaurus/mdx-loader" "3.1.0"
"@docusaurus/module-type-aliases" "3.1.0"
"@docusaurus/plugin-content-blog" "3.1.0"
"@docusaurus/plugin-content-docs" "3.1.0"
"@docusaurus/plugin-content-pages" "3.1.0"
"@docusaurus/utils" "3.1.0"
"@docusaurus/utils-common" "3.1.0"
"@docusaurus/mdx-loader" "3.1.1"
"@docusaurus/module-type-aliases" "3.1.1"
"@docusaurus/plugin-content-blog" "3.1.1"
"@docusaurus/plugin-content-docs" "3.1.1"
"@docusaurus/plugin-content-pages" "3.1.1"
"@docusaurus/utils" "3.1.1"
"@docusaurus/utils-common" "3.1.1"
"@types/history" "^4.7.11"
"@types/react" "*"
"@types/react-router-config" "*"
@ -2393,19 +2393,19 @@
tslib "^2.6.0"
utility-types "^3.10.0"
"@docusaurus/theme-search-algolia@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.1.0.tgz#3cdb1f0e8d15698a60110856ca5a06f10d3b049d"
integrity sha512-8cJH0ZhPsEDjq3jR3I+wHmWzVY2bXMQJ59v2QxUmsTZxbWA4u+IzccJMIJx4ooFl9J6iYynwYsFuHxyx/KUmfQ==
"@docusaurus/theme-search-algolia@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.1.1.tgz#5170cd68cc59d150416b070bdc6d15c363ddf5e1"
integrity sha512-tBH9VY5EpRctVdaAhT+b1BY8y5dyHVZGFXyCHgTrvcXQy5CV4q7serEX7U3SveNT9zksmchPyct6i1sFDC4Z5g==
dependencies:
"@docsearch/react" "^3.5.2"
"@docusaurus/core" "3.1.0"
"@docusaurus/logger" "3.1.0"
"@docusaurus/plugin-content-docs" "3.1.0"
"@docusaurus/theme-common" "3.1.0"
"@docusaurus/theme-translations" "3.1.0"
"@docusaurus/utils" "3.1.0"
"@docusaurus/utils-validation" "3.1.0"
"@docusaurus/core" "3.1.1"
"@docusaurus/logger" "3.1.1"
"@docusaurus/plugin-content-docs" "3.1.1"
"@docusaurus/theme-common" "3.1.1"
"@docusaurus/theme-translations" "3.1.1"
"@docusaurus/utils" "3.1.1"
"@docusaurus/utils-validation" "3.1.1"
algoliasearch "^4.18.0"
algoliasearch-helper "^3.13.3"
clsx "^2.0.0"
@ -2415,18 +2415,18 @@
tslib "^2.6.0"
utility-types "^3.10.0"
"@docusaurus/theme-translations@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.1.0.tgz#1c6bdc19723a87e042b5e89b6cdc8b747fdcbc13"
integrity sha512-DApE4AbDI+WBajihxB54L4scWQhVGNZAochlC9fkbciPuFAgdRBD3NREb0rgfbKexDC/rioppu/WJA0u8tS+yA==
"@docusaurus/theme-translations@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.1.1.tgz#117e91ba5e3a8178cb59f3028bf41de165a508c1"
integrity sha512-xvWQFwjxHphpJq5fgk37FXCDdAa2o+r7FX8IpMg+bGZBNXyWBu3MjZ+G4+eUVNpDhVinTc+j6ucL0Ain5KCGrg==
dependencies:
fs-extra "^11.1.1"
tslib "^2.6.0"
"@docusaurus/types@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.1.0.tgz#1dbb60ea38e98ba869f8d7ea2323e4460f05ab65"
integrity sha512-VaczOZf7+re8aFBIWnex1XENomwHdsSTkrdX43zyor7G/FY4OIsP6X28Xc3o0jiY0YdNuvIDyA5TNwOtpgkCVw==
"@docusaurus/types@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.1.1.tgz#747c9dee8cf7c3b0e5ee7351bac5e9c4fdc7f259"
integrity sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==
dependencies:
"@mdx-js/mdx" "^3.0.0"
"@types/history" "^4.7.11"
@ -2438,30 +2438,30 @@
webpack "^5.88.1"
webpack-merge "^5.9.0"
"@docusaurus/utils-common@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.1.0.tgz#846ce9c12b9ebf1ebf513e65303fb8158dcd2e1b"
integrity sha512-SfvnRLHoZ9bwTw67knkSs7IcUR0GY2SaGkpdB/J9pChrDiGhwzKNUhcieoPyPYrOWGRPk3rVNYtoy+Bc7psPAw==
"@docusaurus/utils-common@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.1.1.tgz#b48fade63523fd40f3adb67b47c3371e5183c20b"
integrity sha512-eGne3olsIoNfPug5ixjepZAIxeYFzHHnor55Wb2P57jNbtVaFvij/T+MS8U0dtZRFi50QU+UPmRrXdVUM8uyMg==
dependencies:
tslib "^2.6.0"
"@docusaurus/utils-validation@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.1.0.tgz#3e88c42caec29cd3eedbbd17af97f88719613340"
integrity sha512-dFxhs1NLxPOSzmcTk/eeKxLY5R+U4cua22g9MsAMiRWcwFKStZ2W3/GDY0GmnJGqNS8QAQepJrxQoyxXkJNDeg==
"@docusaurus/utils-validation@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.1.1.tgz#3a747349ed05aee0e4d543552b41f3c9467ee731"
integrity sha512-KlY4P9YVDnwL+nExvlIpu79abfEv6ZCHuOX4ZQ+gtip+Wxj0daccdReIWWtqxM/Fb5Cz1nQvUCc7VEtT8IBUAA==
dependencies:
"@docusaurus/logger" "3.1.0"
"@docusaurus/utils" "3.1.0"
"@docusaurus/logger" "3.1.1"
"@docusaurus/utils" "3.1.1"
joi "^17.9.2"
js-yaml "^4.1.0"
tslib "^2.6.0"
"@docusaurus/utils@3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.1.0.tgz#6ef821bc4c40a91586835a385110b5c0082c590c"
integrity sha512-LgZfp0D+UBqAh7PZ//MUNSFBMavmAPku6Si9x8x3V+S318IGCNJ6hUr2O29UO0oLybEWUjD5Jnj9IUN6XyZeeg==
"@docusaurus/utils@3.1.1":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.1.1.tgz#e822d14704e4b3bb451ca464a7cc56aea9b55a45"
integrity sha512-ZJfJa5cJQtRYtqijsPEnAZoduW6sjAQ7ZCWSZavLcV10Fw0Z3gSaPKA/B4micvj2afRZ4gZxT7KfYqe5H8Cetg==
dependencies:
"@docusaurus/logger" "3.1.0"
"@docusaurus/logger" "3.1.1"
"@svgr/webpack" "^6.5.1"
escape-string-regexp "^4.0.0"
file-loader "^6.2.0"