diff --git a/.gitignore b/.gitignore
index 9132715ca..302bee1a0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,9 @@ node_modules
/packages/*/lib
/packages/*/dist
+# docs copied to admin console
+/packages/console/**/*.mdx
+
# logs
logs
*.log*
diff --git a/packages/console/package.json b/packages/console/package.json
index 55ef5bbbf..338219ee0 100644
--- a/packages/console/package.json
+++ b/packages/console/package.json
@@ -8,7 +8,7 @@
"scripts": {
"preinstall": "npx only-allow pnpm",
"precommit": "lint-staged",
- "copyfiles": "copyfiles -u 1 public/**/*.* dist",
+ "copyfiles": "copyfiles -u 2 \"../docs/**/*.mdx\" src/assets",
"start": "pnpm copyfiles && parcel src/index.html",
"dev": "pnpm copyfiles && PORT=5002 parcel src/index.html --public-url /console --no-cache --hmr-port 6002",
"check": "tsc --noEmit",
@@ -21,17 +21,40 @@
"@logto/phrases": "^0.1.0",
"@logto/react": "^0.1.3",
"@logto/schemas": "^0.1.0",
+ "@mdx-js/react": "^1.6.22",
"@monaco-editor/react": "^4.3.1",
+ "@parcel/core": "^2.5.0",
+ "@parcel/transformer-mdx": "^2.5.0",
+ "@parcel/transformer-sass": "^2.5.0",
+ "@silverhand/eslint-config": "^0.10.2",
+ "@silverhand/eslint-config-react": "^0.10.3",
"@silverhand/essentials": "^1.1.6",
+ "@silverhand/ts-config": "^0.10.2",
+ "@silverhand/ts-config-react": "^0.10.3",
+ "@tsconfig/docusaurus": "^1.0.5",
+ "@types/lodash.kebabcase": "^4.1.6",
+ "@types/mdx": "^2.0.1",
+ "@types/mdx-js__react": "^1.5.5",
+ "@types/react": "^17.0.14",
+ "@types/react-dom": "^17.0.9",
+ "@types/react-modal": "^3.13.1",
"classnames": "^2.3.1",
+ "copyfiles": "^2.4.1",
"csstype": "^3.0.11",
"dnd-core": "^16.0.0",
+ "eslint": "^8.10.0",
"i18next": "^21.6.12",
"i18next-browser-languagedetector": "^6.1.3",
"ky": "^0.30.0",
+ "lint-staged": "^12.0.0",
"lodash.kebabcase": "^4.1.1",
"monaco-editor": "^0.33.0",
"nanoid": "^3.1.23",
+ "parcel": "^2.5.0",
+ "postcss": "^8.4.6",
+ "postcss-modules": "^4.3.0",
+ "prettier": "^2.3.2",
+ "process": "^0.11.10",
"react": "^17.0.2",
"react-dnd": "^16.0.0",
"react-dnd-html5-backend": "^16.0.0",
@@ -44,30 +67,13 @@
"react-paginate": "^8.1.2",
"react-router-dom": "^6.2.2",
"remark-gfm": "^3.0.1",
- "swr": "^1.2.2",
- "@parcel/core": "^2.3.2",
- "@parcel/transformer-sass": "^2.3.2",
- "@silverhand/eslint-config": "^0.10.2",
- "@silverhand/eslint-config-react": "^0.10.3",
- "@silverhand/ts-config": "^0.10.2",
- "@silverhand/ts-config-react": "^0.10.3",
- "@types/lodash.kebabcase": "^4.1.6",
- "@types/react": "^17.0.14",
- "@types/react-dom": "^17.0.9",
- "@types/react-modal": "^3.13.1",
- "copyfiles": "^2.4.1",
- "eslint": "^8.10.0",
- "lint-staged": "^12.0.0",
- "parcel": "^2.3.2",
- "postcss": "^8.4.6",
- "postcss-modules": "^4.3.0",
- "prettier": "^2.3.2",
- "process": "^0.11.10",
"stylelint": "^13.13.1",
+ "swr": "^1.2.2",
"typescript": "^4.6.2"
},
"alias": {
- "@/*": "./src/$1"
+ "@/*": "./src/$1",
+ "@theme/*": "./src/mdx-components/$1"
},
"eslintConfig": {
"extends": "@silverhand/react"
diff --git a/packages/console/public/get-started/application/react/en-us/index.json b/packages/console/public/get-started/application/react/en-us/index.json
deleted file mode 100644
index 3c62211cb..000000000
--- a/packages/console/public/get-started/application/react/en-us/index.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "files": ["step1.md", "step2.md", "step3.md", "step4.md", "step5.md"]
-}
diff --git a/packages/console/public/get-started/application/react/en-us/step1.md b/packages/console/public/get-started/application/react/en-us/step1.md
deleted file mode 100644
index 83edd3ff2..000000000
--- a/packages/console/public/get-started/application/react/en-us/step1.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: Install Logto SDK
-subtitle: 1 step
----
-## Option 1: Install your SDK dependency
-
-Run the CLI command under your project's root directory.
-
-```
-// installation with npm
-npm install @logto/react --save
-
-// installation with yarn
-yarn add @logto/react
-
-// installation with pnpm
-pnpm install @logto/react --save
-```
-
-## Option 2: Add script tag to your HTML
-
-```
-
-```
-
-## Option 3: Fork your own from github
-
-```
-git clone https://github.com/logto-io/js.git
-```
-
-```
-pnpm build
-```
\ No newline at end of file
diff --git a/packages/console/public/get-started/application/react/en-us/step2.md b/packages/console/public/get-started/application/react/en-us/step2.md
deleted file mode 100644
index 277c5798d..000000000
--- a/packages/console/public/get-started/application/react/en-us/step2.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: Initiate LogtoClient
-subtitle: 1 step | Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
----
-Add the following code to your main html file. You may need client ID and authorization domain.
-
-```typescript
-import { LogtoProvider, LogtoConfig } from '@logto/react';
-import React from 'react';
-
-...
-
-const App = () => {
- const config: LogtoConfig = { clientId: 'foo', endpoint: 'https://your-endpoint-domain.com' }
-
- return (
-
-
-
- } />
- } />
-
-
-
- }
- />
-
-
-
- );
-};
-```
\ No newline at end of file
diff --git a/packages/console/public/get-started/application/react/en-us/step3.md b/packages/console/public/get-started/application/react/en-us/step3.md
deleted file mode 100644
index f8a4afc91..000000000
--- a/packages/console/public/get-started/application/react/en-us/step3.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: Sign In
-subtitle: 2 steps
----
-## Step 1: Setup your login
-
-The Logto React SDK provides you tools and hooks to quickly implement your own authorization flow. First, let’s enter your redirect URI
-
-```redirectUris
-Redirect URI
-```
-
-Add the following code to your web app
-
-```typescript
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const SignInButton = () => {
- const { signIn } = useLogto();
- const redirectUrl = window.location.origin + '/callback';
-
- return ;
-};
-
-export default SignInButton;
-```
-
-## Step 2: Retrieve Auth Status
-
-```typescript
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const App = () => {
- const { isAuthenticated, signIn } = useLogto();
-
- if !(isAuthenticated) {
- return
- }
-
- return <>
-
-
- >
-};
-```
\ No newline at end of file
diff --git a/packages/console/public/get-started/application/react/en-us/step4.md b/packages/console/public/get-started/application/react/en-us/step4.md
deleted file mode 100644
index 0df80c5c8..000000000
--- a/packages/console/public/get-started/application/react/en-us/step4.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Sign Out
-subtitle: 1 steps
----
-Execute signOut() methods will redirect users to the Logto sign out page. After a success sign out, all use session data and auth status will be cleared.
-
-```postLogoutRedirectUris
-Post sign out redirect URI
-```
-
-Add the following code to your web app
-
-```typescript
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const SignOutButton = () => {
- const { signOut } = useLogto();
-
- return (
-
- );
-};
-
-export default SignOutButton;
-```
\ No newline at end of file
diff --git a/packages/console/public/get-started/application/react/en-us/step5.md b/packages/console/public/get-started/application/react/en-us/step5.md
deleted file mode 100644
index 481ac231d..000000000
--- a/packages/console/public/get-started/application/react/en-us/step5.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Advanced Settings & Documentation Links
-subtitle: 2 steps
----
-## Step 1: Advanced Settings
-
-Go to application details page and switch to advanced settings tab
-
-## Step 2: Now check out the documentation links below
-
-[- SDK Documentation](https://link-url-here.org)
-
-[- OIDC Documentation](https://link-url-here.org)
-
-[- Calling API to fetch accessToken](https://link-url-here.org)
\ No newline at end of file
diff --git a/packages/console/public/get-started/application/react/zh-cn/index.json b/packages/console/public/get-started/application/react/zh-cn/index.json
deleted file mode 100644
index 3c62211cb..000000000
--- a/packages/console/public/get-started/application/react/zh-cn/index.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "files": ["step1.md", "step2.md", "step3.md", "step4.md", "step5.md"]
-}
diff --git a/packages/console/public/get-started/application/react/zh-cn/step1.md b/packages/console/public/get-started/application/react/zh-cn/step1.md
deleted file mode 100644
index 2ae1000c8..000000000
--- a/packages/console/public/get-started/application/react/zh-cn/step1.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: 安装 Logto SDK
-subtitle: 1 step
----
-## 方案1: 安装 SDK 依赖包
-
-Run the CLI command under your project's root directory.
-
-```
-// installation with npm
-npm install @logto/react --save
-
-// installation with yarn
-yarn add @logto/react
-
-// installation with pnpm
-pnpm install @logto/react --save
-```
-
-## 方案2: Add script tag to your HTML
-
-```
-
-```
-
-## 方案3: Fork your own from github
-
-```
-git clone https://github.com/logto-io/js.git
-```
-
-```
-pnpm build
-```
\ No newline at end of file
diff --git a/packages/console/public/get-started/application/react/zh-cn/step2.md b/packages/console/public/get-started/application/react/zh-cn/step2.md
deleted file mode 100644
index 95b8356ac..000000000
--- a/packages/console/public/get-started/application/react/zh-cn/step2.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: 初始化 LogtoClient
-subtitle: 1 step | Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
----
-Add the following code to your main html file. You may need client ID and authorization domain.
-
-```typescript
-import { LogtoProvider, LogtoConfig } from '@logto/react';
-import React from 'react';
-
-...
-
-const App = () => {
- const config: LogtoConfig = { clientId: 'foo', endpoint: 'https://your-endpoint-domain.com' }
-
- return (
-
-
-
- } />
- } />
-
-
-
- }
- />
-
-
-
- );
-};
-```
\ No newline at end of file
diff --git a/packages/console/public/get-started/application/react/zh-cn/step3.md b/packages/console/public/get-started/application/react/zh-cn/step3.md
deleted file mode 100644
index c59cad0e9..000000000
--- a/packages/console/public/get-started/application/react/zh-cn/step3.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: 登录
-subtitle: 2 steps
----
-## Step 1: Setup your login
-
-The Logto React SDK provides you tools and hooks to quickly implement your own authorization flow. First, let’s enter your redirect URI
-
-```redirectUris
-Redirect URI
-```
-
-Add the following code to your web app
-
-```typescript
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const SignInButton = () => {
- const { signIn } = useLogto();
- const redirectUrl = window.location.origin + '/callback';
-
- return ;
-};
-
-export default SignInButton;
-```
-
-## Step 2: Retrieve Auth Status
-
-```typescript
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const App = () => {
- const { isAuthenticated, signIn } = useLogto();
-
- if !(isAuthenticated) {
- return
- }
-
- return <>
-
-
- >
-};
-```
\ No newline at end of file
diff --git a/packages/console/public/get-started/application/react/zh-cn/step4.md b/packages/console/public/get-started/application/react/zh-cn/step4.md
deleted file mode 100644
index 52dbb2f4b..000000000
--- a/packages/console/public/get-started/application/react/zh-cn/step4.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: 登出
-subtitle: 1 steps
----
-Execute signOut() methods will redirect users to the Logto sign out page. After a success sign out, all use session data and auth status will be cleared.
-
-```postLogoutRedirectUris
-Post sign out redirect URI
-```
-
-Add the following code to your web app
-
-```typescript
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const SignOutButton = () => {
- const { signOut } = useLogto();
-
- return (
-
- );
-};
-
-export default SignOutButton;
-```
\ No newline at end of file
diff --git a/packages/console/public/get-started/application/react/zh-cn/step5.md b/packages/console/public/get-started/application/react/zh-cn/step5.md
deleted file mode 100644
index bed6491ee..000000000
--- a/packages/console/public/get-started/application/react/zh-cn/step5.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: 高级设置以及相关文档链接
-subtitle: 2 steps
----
-## Step 1: Advanced Settings
-
-Go to application details page and switch to advanced settings tab
-
-## Step 2: Now check out the documentation links below
-
-[- SDK Documentation](https://link-url-here.org)
-
-[- OIDC Documentation](https://link-url-here.org)
-
-[- Calling API to fetch accessToken](https://link-url-here.org)
\ No newline at end of file
diff --git a/packages/console/src/mdx-components/TabItem/index.tsx b/packages/console/src/mdx-components/TabItem/index.tsx
new file mode 100644
index 000000000..827acafad
--- /dev/null
+++ b/packages/console/src/mdx-components/TabItem/index.tsx
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import React, { ReactNode } from 'react';
+
+export type Props = {
+ children: ReactNode;
+ className?: string;
+ value: string;
+ label?: string;
+};
+
+const TabItem = ({ children, ...rest }: Props): JSX.Element => {
+ return (
+
+ {children}
+
+ );
+};
+
+export default TabItem;
diff --git a/packages/console/src/mdx-components/Tabs/index.tsx b/packages/console/src/mdx-components/Tabs/index.tsx
new file mode 100644
index 000000000..1f78b967e
--- /dev/null
+++ b/packages/console/src/mdx-components/Tabs/index.tsx
@@ -0,0 +1,108 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import { Nullable } from '@silverhand/essentials';
+import React, { useState, isValidElement, type ReactElement, cloneElement } from 'react';
+
+import type { Props as TabItemProps } from '../TabItem';
+
+type Props = {
+ className?: string;
+ children: ReactElement;
+};
+
+// A very rough duck type, but good enough to guard against mistakes while
+// allowing customization
+function isTabItem(comp: ReactElement): comp is ReactElement {
+ return typeof comp.props.value !== 'undefined';
+}
+
+const Tabs = ({ className, children }: Props): JSX.Element => {
+ const verifiedChildren = React.Children.map(children, (child) => {
+ if (isValidElement(child) && isTabItem(child)) {
+ return child;
+ }
+ });
+
+ const values =
+ // Only pick keys that we recognize. MDX would inject some keys by default
+ verifiedChildren.map(({ props: { value, label } }) => ({
+ value,
+ label,
+ }));
+
+ const [selectedValue, setSelectedValue] = useState();
+ const tabReferences: Array> = [];
+
+ const handleTabChange = (
+ event: React.FocusEvent | React.MouseEvent
+ ) => {
+ const newTab = event.currentTarget;
+ const newTabIndex = tabReferences.indexOf(newTab);
+ const newTabValue = values[newTabIndex]?.value;
+
+ if (newTabValue !== selectedValue) {
+ setSelectedValue(newTabValue);
+ }
+ };
+
+ const handleKeydown = (event: React.KeyboardEvent) => {
+ // eslint-disable-next-line @silverhand/fp/no-let
+ let focusElement: Nullable = null;
+
+ switch (event.key) {
+ case 'ArrowRight': {
+ const nextTab = tabReferences.indexOf(event.currentTarget) + 1;
+ // eslint-disable-next-line @silverhand/fp/no-mutation
+ focusElement = tabReferences[nextTab] ?? tabReferences[0] ?? null;
+ break;
+ }
+
+ case 'ArrowLeft': {
+ const previousTab = tabReferences.indexOf(event.currentTarget) - 1;
+ // eslint-disable-next-line @silverhand/fp/no-mutation
+ focusElement =
+ tabReferences[previousTab] ?? tabReferences[tabReferences.length - 1] ?? null;
+ break;
+ }
+ default:
+ break;
+ }
+
+ focusElement?.focus();
+ };
+
+ return (
+
+
+ {values.map(({ value, label }) => (
+ - tabReferences.concat(tabControl)}
+ role="tab"
+ tabIndex={selectedValue === value ? 0 : -1}
+ aria-selected={selectedValue === value}
+ onKeyDown={handleKeydown}
+ onFocus={handleTabChange}
+ onClick={handleTabChange}
+ >
+ {label ?? value}
+
+ ))}
+
+
+ {verifiedChildren.map((tabItem) =>
+ cloneElement(tabItem, {
+ key: tabItem.props.value,
+ })
+ )}
+
+
+ );
+};
+
+export default Tabs;
diff --git a/packages/console/src/pages/Applications/components/CreateForm/index.tsx b/packages/console/src/pages/Applications/components/CreateForm/index.tsx
index 9fe1fbee5..cce5c64fc 100644
--- a/packages/console/src/pages/Applications/components/CreateForm/index.tsx
+++ b/packages/console/src/pages/Applications/components/CreateForm/index.tsx
@@ -10,9 +10,9 @@ import RadioGroup, { Radio } from '@/components/RadioGroup';
import TextInput from '@/components/TextInput';
import useApi from '@/hooks/use-api';
import { applicationTypeI18nKey } from '@/types/applications';
-import { GetStartedForm } from '@/types/get-started';
+import { GuideForm } from '@/types/guide';
-import GetStartedModal from '../GetStartedModal';
+import GuideModal from '../GuideModal';
import TypeDescription from '../TypeDescription';
import * as styles from './index.module.scss';
@@ -57,7 +57,7 @@ const CreateForm = ({ onClose }: Props) => {
setIsGetStartedModalOpen(true);
});
- const onComplete = async (data: GetStartedForm) => {
+ const onComplete = async (data: GuideForm) => {
if (!createdApp) {
return;
}
@@ -118,7 +118,7 @@ const CreateForm = ({ onClose }: Props) => {
{createdApp && (
- void;
- onComplete: (data: GetStartedForm) => Promise;
+ onComplete: (data: GuideForm) => Promise;
};
-const GetStartedModal = ({ appName, isOpen, onClose, onComplete }: Props) => (
+const GuideModal = ({ appName, isOpen, onClose, onComplete }: Props) => (
- }
title={appName}
subtitle="applications.get_started.header_description"
- type="application"
defaultSubtype={SupportedJavascriptLibraries.React}
onClose={onClose}
onComplete={onComplete}
@@ -29,4 +28,4 @@ const GetStartedModal = ({ appName, isOpen, onClose, onComplete }: Props) => (
);
-export default GetStartedModal;
+export default GuideModal;
diff --git a/packages/console/src/pages/Connectors/components/CreateForm/index.tsx b/packages/console/src/pages/Connectors/components/CreateForm/index.tsx
index 21d375fed..e1e8489e1 100644
--- a/packages/console/src/pages/Connectors/components/CreateForm/index.tsx
+++ b/packages/console/src/pages/Connectors/components/CreateForm/index.tsx
@@ -11,7 +11,7 @@ import UnnamedTrans from '@/components/UnnamedTrans';
import { RequestError } from '@/hooks/use-api';
import * as modalStyles from '@/scss/modal.module.scss';
-import GetStartedModal from '../GetStartedModal';
+import GuideModal from '../GuideModal';
import * as styles from './index.module.scss';
type Props = {
@@ -101,7 +101,7 @@ const CreateForm = ({ onClose, isOpen: isFormOpen, type }: Props) => {
)}
{activeConnector && (
- void;
- onComplete?: (data: GetStartedForm) => Promise;
+ onComplete?: (data: GuideForm) => Promise;
};
const onClickFetchSampleProject = (name: string) => {
@@ -34,7 +34,7 @@ const onClickFetchSampleProject = (name: string) => {
window.open(sampleUrl, '_blank');
};
-const GetStartedModal = ({ connector, isOpen, onClose }: Props) => {
+const GuideModal = ({ connector, isOpen, onClose }: Props) => {
const api = useApi();
const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
const {
@@ -48,7 +48,7 @@ const GetStartedModal = ({ connector, isOpen, onClose }: Props) => {
const isSocialConnector =
connectorType !== ConnectorType.SMS && connectorType !== ConnectorType.Email;
const [activeStepIndex, setActiveStepIndex] = useState(0);
- const methods = useForm({ reValidateMode: 'onBlur' });
+ const methods = useForm({ reValidateMode: 'onBlur' });
const {
control,
formState: { isSubmitting },
@@ -126,9 +126,7 @@ const GetStartedModal = ({ connector, isOpen, onClose }: Props) => {
title="Enter your json here"
subtitle="Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
index={0}
- isActive={activeStepIndex === 0}
- isComplete={activeStepIndex > 0}
- isFinalStep={isSocialConnector}
+ activeIndex={activeStepIndex}
buttonHtmlType="submit"
>
{
{!isSocialConnector && (
1}
+ activeIndex={activeStepIndex}
buttonHtmlType="button"
+ buttonText="general.done"
onNext={onClose}
>
@@ -163,4 +160,4 @@ const GetStartedModal = ({ connector, isOpen, onClose }: Props) => {
);
};
-export default GetStartedModal;
+export default GuideModal;
diff --git a/packages/console/src/pages/GetStarted/components/CodeComponentRenderer/index.tsx b/packages/console/src/pages/GetStarted/components/CodeComponentRenderer/index.tsx
deleted file mode 100644
index c96a3cc11..000000000
--- a/packages/console/src/pages/GetStarted/components/CodeComponentRenderer/index.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import React, { PropsWithChildren, useEffect, useRef } from 'react';
-import { Controller, useFormContext } from 'react-hook-form';
-import { useTranslation } from 'react-i18next';
-import { CodeProps } from 'react-markdown/lib/ast-to-react.js';
-
-import CodeEditor from '@/components/CodeEditor';
-import DangerousRaw from '@/components/DangerousRaw';
-import FormField from '@/components/FormField';
-import MultiTextInput from '@/components/MultiTextInput';
-import { createValidatorForRhf, convertRhfErrorMessage } from '@/components/MultiTextInput/utils';
-import { GetStartedForm } from '@/types/get-started';
-import { noSpaceRegex } from '@/utilities/regex';
-
-type Props = PropsWithChildren & { onError: () => void };
-
-const CodeComponentRenderer = ({ className, children, onError }: Props) => {
- const {
- control,
- formState: { errors },
- } = useFormContext();
-
- const ref = useRef(null);
- const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
- const [, codeBlockType] = /language-(\w+)/.exec(className ?? '') ?? [];
- const content = String(children);
-
- /** Code block types defined in markdown. E.g.
- * ```typescript
- * some code
- * ```
- * These two custom code block types should be replaced with `MultiTextInput` component:
- * 'redirectUris' and 'postLogoutRedirectUris'
- */
- const isMultilineInput =
- codeBlockType === 'redirectUris' || codeBlockType === 'postLogoutRedirectUris';
-
- const firstErrorKey = Object.keys(errors)[0];
- const isFirstErrorField = firstErrorKey && firstErrorKey === codeBlockType;
-
- useEffect(() => {
- if (isFirstErrorField) {
- onError();
- }
- }, [isFirstErrorField, onError]);
-
- if (isMultilineInput) {
- return (
- {content}}>
- (
-
-
-
- )}
- />
-
- );
- }
-
- return ;
-};
-
-export default CodeComponentRenderer;
diff --git a/packages/console/src/pages/GetStarted/hooks/index.ts b/packages/console/src/pages/GetStarted/hooks/index.ts
deleted file mode 100644
index 775b87294..000000000
--- a/packages/console/src/pages/GetStarted/hooks/index.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import i18next from 'i18next';
-import { useMemo } from 'react';
-// eslint-disable-next-line node/file-extension-in-import
-import useSWRImmutable from 'swr/immutable';
-
-import { StepMetadata } from '@/types/get-started';
-import { parseMarkdownWithYamlFrontmatter } from '@/utilities/markdown';
-
-type DocumentFileNames = {
- files: string[];
-};
-
-export type GetStartedType = 'application' | 'connector';
-
-/**
- * Fetch the markdown files for the given type and subtype.
- * @param type 'application' or 'connector'
- * @param subtype Application library name or connector name
- * @returns List of step metadata including Yaml frontmatter and markdown content
- */
-export const useGetStartedSteps = (type: GetStartedType, subtype?: string) => {
- const subPath = subtype ? `/${subtype}` : '';
- const publicPath = useMemo(
- () => `/console/get-started/${type}${subPath}/${i18next.language}`.toLowerCase(),
- [type, subPath]
- );
-
- const { data: jsonData } = useSWRImmutable(`${publicPath}/index.json`);
- const { data: steps } = useSWRImmutable(
- jsonData,
- async ({ files }: DocumentFileNames) =>
- Promise.all(
- files.map(async (fileName) => {
- const response = await fetch(`${publicPath}/${fileName}`);
- const markdownFile = await response.text();
-
- return parseMarkdownWithYamlFrontmatter(markdownFile);
- })
- )
- );
-
- return steps;
-};
diff --git a/packages/console/src/pages/Guide/components/MultiTextInputField/index.tsx b/packages/console/src/pages/Guide/components/MultiTextInputField/index.tsx
new file mode 100644
index 000000000..00d0f3364
--- /dev/null
+++ b/packages/console/src/pages/Guide/components/MultiTextInputField/index.tsx
@@ -0,0 +1,64 @@
+import React, { useRef } from 'react';
+import { Controller, useFormContext } from 'react-hook-form';
+import { useTranslation } from 'react-i18next';
+
+import DangerousRaw from '@/components/DangerousRaw';
+import FormField from '@/components/FormField';
+import MultiTextInput from '@/components/MultiTextInput';
+import { createValidatorForRhf, convertRhfErrorMessage } from '@/components/MultiTextInput/utils';
+import { GuideForm } from '@/types/guide';
+import { noSpaceRegex } from '@/utilities/regex';
+
+type Props = {
+ name: 'redirectUris' | 'postLogoutRedirectUris';
+ title: string;
+ onError?: () => void;
+};
+
+const MultiTextInputField = ({ name, title, onError }: Props) => {
+ const {
+ control,
+ formState: { errors },
+ } = useFormContext();
+
+ const ref = useRef(null);
+ const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
+
+ const firstErrorKey = Object.keys(errors)[0];
+ const isFirstErrorField = firstErrorKey && firstErrorKey === name;
+
+ if (isFirstErrorField) {
+ ref.current?.scrollIntoView({ block: 'center', behavior: 'smooth' });
+ onError?.();
+ }
+
+ return (
+ {title}}>
+ (
+
+
+
+ )}
+ />
+
+ );
+};
+
+export default MultiTextInputField;
diff --git a/packages/console/src/pages/GetStarted/components/Step/index.module.scss b/packages/console/src/pages/Guide/components/Step/index.module.scss
similarity index 100%
rename from packages/console/src/pages/GetStarted/components/Step/index.module.scss
rename to packages/console/src/pages/Guide/components/Step/index.module.scss
diff --git a/packages/console/src/pages/GetStarted/components/Step/index.tsx b/packages/console/src/pages/Guide/components/Step/index.tsx
similarity index 62%
rename from packages/console/src/pages/GetStarted/components/Step/index.tsx
rename to packages/console/src/pages/Guide/components/Step/index.tsx
index 075adcec4..d77e6b789 100644
--- a/packages/console/src/pages/GetStarted/components/Step/index.tsx
+++ b/packages/console/src/pages/Guide/components/Step/index.tsx
@@ -1,16 +1,7 @@
+import { I18nKey } from '@logto/phrases';
import { conditional } from '@silverhand/essentials';
import classNames from 'classnames';
-import React, {
- cloneElement,
- isValidElement,
- PropsWithChildren,
- useCallback,
- useEffect,
- useMemo,
- useRef,
- useState,
-} from 'react';
-import { CodeProps } from 'react-markdown/lib/ast-to-react.js';
+import React, { PropsWithChildren, useEffect, useRef, useState } from 'react';
import Button from '@/components/Button';
import Card from '@/components/Card';
@@ -21,16 +12,15 @@ import Spacer from '@/components/Spacer';
import { ArrowDown, ArrowUp } from '@/icons/Arrow';
import Tick from '@/icons/Tick';
-import CodeComponentRenderer from '../CodeComponentRenderer';
import * as styles from './index.module.scss';
type Props = PropsWithChildren<{
title: string;
subtitle?: string;
index: number;
- isActive: boolean;
- isComplete: boolean;
- isFinalStep: boolean;
+ activeIndex: number;
+ invalidIndex?: number;
+ buttonText?: I18nKey;
buttonHtmlType: 'submit' | 'button';
onNext?: () => void;
}>;
@@ -40,46 +30,30 @@ const Step = ({
title,
subtitle,
index,
- isActive,
- isComplete,
- isFinalStep,
- buttonHtmlType,
+ activeIndex,
+ invalidIndex,
+ buttonText = 'general.next',
+ buttonHtmlType = 'button',
onNext,
}: Props) => {
const [isExpanded, setIsExpanded] = useState(false);
+ const isActive = index === activeIndex;
+ const isComplete = index < activeIndex;
+ const isInvalid = index === invalidIndex;
const ref = useRef(null);
- const scrollToStep = useCallback(() => {
- ref.current?.scrollIntoView({ block: 'start', behavior: 'smooth' });
- }, []);
-
- const onError = useCallback(() => {
- setIsExpanded(true);
- scrollToStep();
- }, [scrollToStep]);
-
useEffect(() => {
- if (isActive) {
+ if (isActive || isInvalid) {
setIsExpanded(true);
}
- }, [isActive]);
+ }, [isActive, isInvalid]);
useEffect(() => {
if (isExpanded) {
- scrollToStep();
+ ref.current?.scrollIntoView({ block: 'start', behavior: 'smooth' });
}
- }, [isExpanded, scrollToStep]);
+ }, [isExpanded]);
- const memoizedComponents = useMemo(
- () => ({
- code: ({ ...props }: PropsWithChildren) => (
-
- ),
- }),
- [onError]
- );
-
- // TODO: add more styles to markdown renderer
return (
- {isValidElement(children) && cloneElement(children, { components: memoizedComponents })}
+ {children}
diff --git a/packages/console/src/pages/GetStarted/index.module.scss b/packages/console/src/pages/Guide/index.module.scss
similarity index 95%
rename from packages/console/src/pages/GetStarted/index.module.scss
rename to packages/console/src/pages/Guide/index.module.scss
index 198e301c7..9537a41d7 100644
--- a/packages/console/src/pages/GetStarted/index.module.scss
+++ b/packages/console/src/pages/Guide/index.module.scss
@@ -39,6 +39,10 @@
.banner {
margin-bottom: _.unit(6);
}
+
+ h1 {
+ display: none;
+ }
}
}
diff --git a/packages/console/src/pages/GetStarted/index.tsx b/packages/console/src/pages/Guide/index.tsx
similarity index 52%
rename from packages/console/src/pages/GetStarted/index.tsx
rename to packages/console/src/pages/Guide/index.tsx
index 4d1192653..68d48715d 100644
--- a/packages/console/src/pages/GetStarted/index.tsx
+++ b/packages/console/src/pages/Guide/index.tsx
@@ -1,31 +1,52 @@
import { AdminConsoleKey } from '@logto/phrases';
-import React, { cloneElement, isValidElement, PropsWithChildren, ReactNode, useState } from 'react';
+import { MDXProvider } from '@mdx-js/react';
+import i18next from 'i18next';
+import { MDXProps } from 'mdx/types';
+import React, {
+ cloneElement,
+ isValidElement,
+ lazy,
+ LazyExoticComponent,
+ PropsWithChildren,
+ ReactNode,
+ Suspense,
+ useState,
+} from 'react';
import { FormProvider, useForm } from 'react-hook-form';
-import ReactMarkdown from 'react-markdown';
import Button from '@/components/Button';
import CardTitle from '@/components/CardTitle';
+import CodeEditor from '@/components/CodeEditor';
import DangerousRaw from '@/components/DangerousRaw';
import IconButton from '@/components/IconButton';
import Spacer from '@/components/Spacer';
import Close from '@/icons/Close';
-import { GetStartedForm } from '@/types/get-started';
+import { GuideForm } from '@/types/guide';
+import MultiTextInputField from './components/MultiTextInputField';
import Step from './components/Step';
-import { GetStartedType, useGetStartedSteps } from './hooks';
import * as styles from './index.module.scss';
+const Guides: Record JSX.Element>> = {
+ react: lazy(async () => import('@/assets/docs/tutorial/integrate-sdk/react/index.mdx')),
+ 'react_zh-cn': lazy(
+ async () =>
+ import(
+ '@/assets/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/index.mdx'
+ )
+ ),
+};
+
type Props = PropsWithChildren<{
title: string;
subtitle?: AdminConsoleKey;
- type: GetStartedType;
/** `subtype` can be an actual type of an application or connector.
* e.g. React, Angular, Vue, etc. for application. Or Github, WeChat, etc. for connector.
*/
defaultSubtype?: string;
bannerComponent?: ReactNode;
onClose?: () => void;
- onComplete?: (data: GetStartedForm) => Promise;
+ onComplete?: (data: GuideForm) => Promise;
}>;
const onClickFetchSampleProject = (projectName: string) => {
@@ -33,19 +54,23 @@ const onClickFetchSampleProject = (projectName: string) => {
window.open(sampleUrl, '_blank');
};
-const GetStarted = ({
+const Guide = ({
title,
subtitle,
- type,
- defaultSubtype,
+ defaultSubtype = '',
bannerComponent,
onClose,
onComplete,
}: Props) => {
const [subtype, setSubtype] = useState(defaultSubtype);
- const [activeStepIndex, setActiveStepIndex] = useState(-1);
- const steps = useGetStartedSteps(type, subtype) ?? [];
- const methods = useForm({ reValidateMode: 'onBlur' });
+ const [activeStepIndex, setActiveStepIndex] = useState(-1);
+ const [invalidStepIndex, setInvalidStepIndex] = useState(-1);
+
+ const locale = i18next.language;
+ const guideKey = `${subtype}_${locale}`.toLowerCase();
+ const GuideComponent = Guides[guideKey] ?? Guides[subtype];
+
+ const methods = useForm({ mode: 'onSubmit', reValidateMode: 'onChange' });
const {
formState: { isSubmitting },
handleSubmit,
@@ -89,32 +114,32 @@ const GetStarted = ({
setActiveStepIndex(0);
},
})}
- {steps.map(({ title, subtitle, metadata }, index) => {
- if (!title) {
- return null;
- }
- const isFinalStep = index === steps.length - 1;
+ {
+ const [, language] = /language-(\w+)/.exec(className ?? '') ?? [];
- return (
- index}
- isFinalStep={isFinalStep}
- buttonHtmlType={isFinalStep ? 'submit' : 'button'}
- onNext={() => {
- setActiveStepIndex(index + 1);
- }}
- >
- {metadata && (
- {metadata}
- )}
-
- );
- })}
+ return ;
+ },
+ MultiTextInputField,
+ Step,
+ }}
+ >
+ Loading...}>
+ {GuideComponent && (
+ {
+ setActiveStepIndex(nextIndex);
+ }}
+ onError={(invalidIndex: number) => {
+ setInvalidStepIndex(invalidIndex);
+ }}
+ />
+ )}
+
+
@@ -122,4 +147,4 @@ const GetStarted = ({
);
};
-export default GetStarted;
+export default Guide;
diff --git a/packages/console/src/types/applications.ts b/packages/console/src/types/applications.ts
index 609bc408f..0cfaf24c9 100644
--- a/packages/console/src/types/applications.ts
+++ b/packages/console/src/types/applications.ts
@@ -7,7 +7,7 @@ export const applicationTypeI18nKey = Object.freeze({
} as const);
export enum SupportedJavascriptLibraries {
- Angular = 'Angular',
- React = 'React',
- Vue = 'Vue',
+ Angular = 'angular',
+ React = 'react',
+ Vue = 'vue',
}
diff --git a/packages/console/src/types/get-started.ts b/packages/console/src/types/get-started.ts
deleted file mode 100644
index b610af3e9..000000000
--- a/packages/console/src/types/get-started.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-export type StepMetadata = {
- title?: string;
- subtitle?: string;
- metadata: string; // Markdown formatted string
-};
-
-export type GetStartedForm = {
- redirectUris: string[];
- postLogoutRedirectUris: string[];
- connectorConfigJson: string;
-};
diff --git a/packages/console/src/types/guide.ts b/packages/console/src/types/guide.ts
new file mode 100644
index 000000000..10418f263
--- /dev/null
+++ b/packages/console/src/types/guide.ts
@@ -0,0 +1,5 @@
+export type GuideForm = {
+ redirectUris: string[];
+ postLogoutRedirectUris: string[];
+ connectorConfigJson: string;
+};
diff --git a/packages/docs/docs/tutorial/integrate-sdk/react/_step-1.mdx b/packages/docs/docs/tutorial/integrate-sdk/react/_step-1.mdx
deleted file mode 100644
index c8a6df8f9..000000000
--- a/packages/docs/docs/tutorial/integrate-sdk/react/_step-1.mdx
+++ /dev/null
@@ -1,45 +0,0 @@
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-## Install SDK
-
-
-
-
-```bash
-npm i @logto/react
-```
-
-
-
-
-```bash
-yarn add @logto/react
-```
-
-
-
-
-```bash
-pnpm add @logto/react
-```
-
-
-
-
-
-```html
-
-```
-
-
-
-
-
-```bash
-git clone https://github.com/logto-io/js.git
-pnpm build
-```
-
-
-
diff --git a/packages/docs/docs/tutorial/integrate-sdk/react/_step-2.md b/packages/docs/docs/tutorial/integrate-sdk/react/_step-2.md
deleted file mode 100644
index 76b4f5531..000000000
--- a/packages/docs/docs/tutorial/integrate-sdk/react/_step-2.md
+++ /dev/null
@@ -1,33 +0,0 @@
-## Initiate LogtoClient
-
-Add the following code to your main html file. You may need client ID and authorization domain.
-
-```tsx
-import { LogtoProvider, LogtoConfig } from '@logto/react';
-import React from 'react';
-
-//...
-
-const App = () => {
- const config: LogtoConfig = { clientId: 'foo', endpoint: 'https://your-endpoint-domain.com' }
-
- return (
-
-
-
- } />
- } />
-
-
-
- }
- />
-
-
-
- );
-};
-```
diff --git a/packages/docs/docs/tutorial/integrate-sdk/react/_step-3.md b/packages/docs/docs/tutorial/integrate-sdk/react/_step-3.md
deleted file mode 100644
index 1f74facfa..000000000
--- a/packages/docs/docs/tutorial/integrate-sdk/react/_step-3.md
+++ /dev/null
@@ -1,45 +0,0 @@
-## Sign In
-
-### Setup your login
-
-The Logto React SDK provides you tools and hooks to quickly implement your own authorization flow. First, let’s enter your redirect URI
-
-```redirectUris
-Redirect URI
-```
-
-Add the following code to your web app
-
-```typescript
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const SignInButton = () => {
- const { signIn } = useLogto();
- const redirectUrl = window.location.origin + '/callback';
-
- return ;
-};
-
-export default SignInButton;
-```
-
-### Retrieve Auth Status
-
-```tsx
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const App = () => {
- const { isAuthenticated, signIn } = useLogto();
-
- if !(isAuthenticated) {
- return
- }
-
- return <>
-
-
- >
-};
-```
diff --git a/packages/docs/docs/tutorial/integrate-sdk/react/_step-4.md b/packages/docs/docs/tutorial/integrate-sdk/react/_step-4.md
deleted file mode 100644
index 32744fa70..000000000
--- a/packages/docs/docs/tutorial/integrate-sdk/react/_step-4.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## Sign Out
-
-Execute signOut() methods will redirect users to the Logto sign out page. After a success sign out, all use session data and auth status will be cleared.
-
-```postLogoutRedirectUris
-Post sign out redirect URI
-```
-
-Add the following code to your web app
-
-```tsx
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const SignOutButton = () => {
- const { signOut } = useLogto();
-
- return (
-
- );
-};
-
-export default SignOutButton;
-```
diff --git a/packages/docs/docs/tutorial/integrate-sdk/react/_step-5.md b/packages/docs/docs/tutorial/integrate-sdk/react/_step-5.md
deleted file mode 100644
index 00ae11202..000000000
--- a/packages/docs/docs/tutorial/integrate-sdk/react/_step-5.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Further Readings
-
-- [SDK Documentation](https://link-url-here.org)
-- [OIDC Documentation](https://link-url-here.org)
-- [Calling API to fetch accessToken](https://link-url-here.org)
diff --git a/packages/docs/docs/tutorial/integrate-sdk/react/index.mdx b/packages/docs/docs/tutorial/integrate-sdk/react/index.mdx
index b9abf09b6..9b015c541 100644
--- a/packages/docs/docs/tutorial/integrate-sdk/react/index.mdx
+++ b/packages/docs/docs/tutorial/integrate-sdk/react/index.mdx
@@ -1,13 +1,190 @@
-import Step1 from './_step-1.mdx'
-import Step2 from './_step-2.md'
-import Step3 from './_step-3.md'
-import Step4 from './_step-4.md'
-import Step5 from './_step-5.md'
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
# Integrate `@logto/react`
-
-
-
-
-
+ props.onNext(1)}
+>
+
+
+
+```bash
+npm i @logto/react
+```
+
+
+
+
+```bash
+yarn add @logto/react
+```
+
+
+
+
+```bash
+pnpm add @logto/react
+```
+
+
+
+
+```html
+
+```
+
+
+
+
+```bash
+git clone https://github.com/logto-io/js.git
+pnpm build
+```
+
+
+
+
+ props.onNext(2)}
+>
+
+Add the following code to your main html file. You may need client ID and authorization domain.
+
+```typescript
+import { LogtoProvider, LogtoConfig } from '@logto/react';
+import React from 'react';
+
+//...
+
+const App = () => {
+ const config: LogtoConfig = { clientId: 'foo', endpoint: 'https://your-endpoint-domain.com' };
+
+ return (
+
+
+
+ } />
+ } />
+
+
+
+ }
+ />
+
+
+
+ );
+};
+```
+
+
+ props.onNext(3)}
+>
+
+### Setup your login
+
+The Logto React SDK provides you tools and hooks to quickly implement your own authorization flow. First, let’s enter your redirect URI
+
+ props.onError(2)} />
+
+Add the following code to your web app
+
+```typescript
+import React from 'react';
+import { useLogto } from '@logto/react';
+
+const SignInButton = () => {
+ const { signIn } = useLogto();
+ const redirectUrl = window.location.origin + '/callback';
+
+ return ;
+};
+
+export default SignInButton;
+```
+
+### Retrieve Auth Status
+
+```typescript
+import React from "react";
+import { useLogto } from '@logto/react';
+
+const App = () => {
+ const { isAuthenticated, signIn } = useLogto();
+
+ if !(isAuthenticated) {
+ return
+ }
+
+ return <>
+
+
+ >
+};
+```
+
+
+ props.onNext(4)}
+>
+
+Execute signOut() methods will redirect users to the Logto sign out page. After a success sign out, all use session data and auth status will be cleared.
+
+ props.onError(3)} />
+
+Add the following code to your web app
+
+```typescript
+import React from 'react';
+import { useLogto } from '@logto/react';
+
+const SignOutButton = () => {
+ const { signOut } = useLogto();
+
+ return ;
+};
+
+export default SignOutButton;
+```
+
+
+
+
+- [SDK Documentation](https://link-url-here.org)
+- [OIDC Documentation](https://link-url-here.org)
+- [Calling API to fetch accessToken](https://link-url-here.org)
+
+
diff --git a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-1.mdx b/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-1.mdx
deleted file mode 100644
index 11621826b..000000000
--- a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-1.mdx
+++ /dev/null
@@ -1,45 +0,0 @@
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-## 安装 Logto SDK
-
-
-
-
-```bash
-npm i @logto/react
-```
-
-
-
-
-```bash
-yarn add @logto/react
-```
-
-
-
-
-```bash
-pnpm add @logto/react
-```
-
-
-
-
-
-```html
-
-```
-
-
-
-
-
-```bash
-git clone https://github.com/logto-io/js.git
-pnpm build
-```
-
-
-
diff --git a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-2.md b/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-2.md
deleted file mode 100644
index 9b59eac48..000000000
--- a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-2.md
+++ /dev/null
@@ -1,33 +0,0 @@
-## 初始化 LogtoClient
-
-Add the following code to your main html file. You may need client ID and authorization domain.
-
-```tsx
-import { LogtoProvider, LogtoConfig } from '@logto/react';
-import React from 'react';
-
-...
-
-const App = () => {
- const config: LogtoConfig = { clientId: 'foo', endpoint: 'https://your-endpoint-domain.com' }
-
- return (
-
-
-
- } />
- } />
-
-
-
- }
- />
-
-
-
- );
-};
-```
diff --git a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-3.md b/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-3.md
deleted file mode 100644
index 3cf98e00e..000000000
--- a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-3.md
+++ /dev/null
@@ -1,45 +0,0 @@
-## 登录
-
-### Setup your login
-
-The Logto React SDK provides you tools and hooks to quickly implement your own authorization flow. First, let’s enter your redirect URI
-
-```redirectUris
-Redirect URI
-```
-
-Add the following code to your web app
-
-```tsx
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const SignInButton = () => {
- const { signIn } = useLogto();
- const redirectUrl = window.location.origin + '/callback';
-
- return ;
-};
-
-export default SignInButton;
-```
-
-### Retrieve Auth Status
-
-```tsx
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const App = () => {
- const { isAuthenticated, signIn } = useLogto();
-
- if !(isAuthenticated) {
- return
- }
-
- return <>
-
-
- >
-};
-```
diff --git a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-4.md b/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-4.md
deleted file mode 100644
index d745c5749..000000000
--- a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-4.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## 登出
-
-Execute signOut() methods will redirect users to the Logto sign out page. After a success sign out, all use session data and auth status will be cleared.
-
-```postLogoutRedirectUris
-Post sign out redirect URI
-```
-
-Add the following code to your web app
-
-```tsx
-import React from "react";
-import { useLogto } from '@logto/react';
-
-const SignOutButton = () => {
- const { signOut } = useLogto();
-
- return (
-
- );
-};
-
-export default SignOutButton;
-```
diff --git a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-5.md b/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-5.md
deleted file mode 100644
index 00ae11202..000000000
--- a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/_step-5.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## Further Readings
-
-- [SDK Documentation](https://link-url-here.org)
-- [OIDC Documentation](https://link-url-here.org)
-- [Calling API to fetch accessToken](https://link-url-here.org)
diff --git a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/index.mdx b/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/index.mdx
index c0a432816..e085b0b3e 100644
--- a/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/index.mdx
+++ b/packages/docs/i18n/zh-cn/docusaurus-plugin-content-docs/current/tutorial/integrate-sdk/react/index.mdx
@@ -1,13 +1,190 @@
-import Step1 from './_step-1.mdx'
-import Step2 from './_step-2.md'
-import Step3 from './_step-3.md'
-import Step4 from './_step-4.md'
-import Step5 from './_step-5.md'
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
# 集成 `@logto/react`
-
-
-
-
-
+ props.onNext(1)}
+>
+
+
+
+```bash
+npm i @logto/react
+```
+
+
+
+
+```bash
+yarn add @logto/react
+```
+
+
+
+
+```bash
+pnpm add @logto/react
+```
+
+
+
+
+```html
+
+```
+
+
+
+
+```bash
+git clone https://github.com/logto-io/js.git
+pnpm build
+```
+
+
+
+
+ props.onNext(2)}
+>
+
+在项目的 html 文件中,加入如下代码(需提前准备好 client ID 以及 authorization domain)
+Add the following code to your main html file. You may need client ID and authorization domain.
+
+```typescript
+import { LogtoProvider, LogtoConfig } from '@logto/react';
+import React from 'react';
+
+//...
+
+const App = () => {
+ const config: LogtoConfig = { clientId: 'foo', endpoint: 'https://your-endpoint-domain.com' };
+
+ return (
+
+
+
+ } />
+ } />
+
+
+
+ }
+ />
+
+
+
+ );
+};
+```
+
+
+ props.onNext(3)}
+>
+
+### Setup your login
+
+The Logto React SDK provides you tools and hooks to quickly implement your own authorization flow. First, let’s enter your redirect URI
+
+ props.onError(2)} />
+
+Add the following code to your web app
+
+```typescript
+import React from 'react';
+import { useLogto } from '@logto/react';
+
+const SignInButton = () => {
+ const { signIn } = useLogto();
+ const redirectUrl = window.location.origin + '/callback';
+
+ return ;
+};
+
+export default SignInButton;
+```
+
+### Retrieve Auth Status
+
+```typescript
+import React from "react";
+import { useLogto } from '@logto/react';
+
+const App = () => {
+ const { isAuthenticated, signIn } = useLogto();
+
+ if !(isAuthenticated) {
+ return
+ }
+
+ return <>
+
+
+ >
+};
+```
+
+
+ props.onNext(4)}
+>
+
+Execute signOut() methods will redirect users to the Logto sign out page. After a success sign out, all use session data and auth status will be cleared.
+
+ props.onError(3)} />
+
+Add the following code to your web app
+
+```typescript
+import React from 'react';
+import { useLogto } from '@logto/react';
+
+const SignOutButton = () => {
+ const { signOut } = useLogto();
+
+ return ;
+};
+
+export default SignOutButton;
+```
+
+
+
+
+- [SDK Documentation](https://link-url-here.org)
+- [OIDC Documentation](https://link-url-here.org)
+- [Calling API to fetch accessToken](https://link-url-here.org)
+
+
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 9b6438a14..c6fe0e4f4 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -19,8 +19,8 @@
"@logto/jest-config": "^0.1.0",
"@logto/phrases": "^0.1.0",
"@logto/schemas": "^0.1.0",
- "@parcel/core": "^2.3.2",
- "@parcel/transformer-sass": "^2.3.2",
+ "@parcel/core": "^2.5.0",
+ "@parcel/transformer-sass": "^2.5.0",
"@peculiar/webcrypto": "^1.3.3",
"@silverhand/eslint-config": "^0.10.2",
"@silverhand/eslint-config-react": "^0.10.3",
@@ -42,7 +42,7 @@
"ky": "^0.30.0",
"libphonenumber-js": "^1.9.49",
"lint-staged": "^12.0.0",
- "parcel": "^2.3.2",
+ "parcel": "^2.5.0",
"postcss": "^8.4.6",
"postcss-modules": "^4.3.0",
"prettier": "^2.3.2",
diff --git a/packages/ui/src/scss/modal.module.scss b/packages/ui/src/scss/modal.module.scss
index 0b6c0d95d..91d574572 100644
--- a/packages/ui/src/scss/modal.module.scss
+++ b/packages/ui/src/scss/modal.module.scss
@@ -23,8 +23,7 @@
inset: 0;
}
-
-// React modal animation
+/* stylelint-disable selector-class-pattern */
/* stylelint-disable-next-line selector-pseudo-class-no-unknown */
:global {
.ReactModal__Content[role='popup'] {
@@ -32,7 +31,6 @@
transition: transform 0.3s ease-in-out;
}
- /* stylelint-disable selector-class-pattern */
.ReactModal__Content--after-open[role='popup'] {
transform: translateY(0);
}
@@ -40,5 +38,6 @@
.ReactModal__Content--before-close[role='popup'] {
transform: translateY(100%);
}
- /* stylelint-enable selector-class-pattern */
}
+
+/* stylelint-enable selector-class-pattern */
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a8d396178..670aac2a1 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -438,15 +438,20 @@ importers:
'@logto/phrases': ^0.1.0
'@logto/react': ^0.1.3
'@logto/schemas': ^0.1.0
+ '@mdx-js/react': ^1.6.22
'@monaco-editor/react': ^4.3.1
- '@parcel/core': ^2.3.2
- '@parcel/transformer-sass': ^2.3.2
+ '@parcel/core': ^2.5.0
+ '@parcel/transformer-mdx': ^2.5.0
+ '@parcel/transformer-sass': ^2.5.0
'@silverhand/eslint-config': ^0.10.2
'@silverhand/eslint-config-react': ^0.10.3
'@silverhand/essentials': ^1.1.6
'@silverhand/ts-config': ^0.10.2
'@silverhand/ts-config-react': ^0.10.3
+ '@tsconfig/docusaurus': ^1.0.5
'@types/lodash.kebabcase': ^4.1.6
+ '@types/mdx': ^2.0.1
+ '@types/mdx-js__react': ^1.5.5
'@types/react': ^17.0.14
'@types/react-dom': ^17.0.9
'@types/react-modal': ^3.13.1
@@ -462,7 +467,7 @@ importers:
lodash.kebabcase: ^4.1.1
monaco-editor: ^0.33.0
nanoid: ^3.1.23
- parcel: ^2.3.2
+ parcel: ^2.5.0
postcss: ^8.4.6
postcss-modules: ^4.3.0
prettier: ^2.3.2
@@ -486,15 +491,20 @@ importers:
'@logto/phrases': link:../phrases
'@logto/react': 0.1.3_react@17.0.2
'@logto/schemas': link:../schemas
+ '@mdx-js/react': 1.6.22_react@17.0.2
'@monaco-editor/react': 4.3.1_66b714495a9e953b0598750a09f73ca1
- '@parcel/core': 2.3.2
- '@parcel/transformer-sass': 2.3.2_@parcel+core@2.3.2
+ '@parcel/core': 2.5.0
+ '@parcel/transformer-mdx': 2.5.0_8232c903f4498966f4a3632b84785854
+ '@parcel/transformer-sass': 2.5.0_@parcel+core@2.5.0
'@silverhand/eslint-config': 0.10.2_3a533fa6cc3da0cf8525ef55d41c4384
'@silverhand/eslint-config-react': 0.10.3_75f27ebc3d08f23e7ca8c3f63c7fa502
'@silverhand/essentials': 1.1.6
'@silverhand/ts-config': 0.10.2_typescript@4.6.2
'@silverhand/ts-config-react': 0.10.3_typescript@4.6.2
+ '@tsconfig/docusaurus': 1.0.5
'@types/lodash.kebabcase': 4.1.6
+ '@types/mdx': 2.0.1
+ '@types/mdx-js__react': 1.5.5
'@types/react': 17.0.37
'@types/react-dom': 17.0.11
'@types/react-modal': 3.13.1
@@ -510,7 +520,7 @@ importers:
lodash.kebabcase: 4.1.1
monaco-editor: 0.33.0
nanoid: 3.3.1
- parcel: 2.3.2_postcss@8.4.6
+ parcel: 2.5.0_postcss@8.4.6
postcss: 8.4.6
postcss-modules: 4.3.0_postcss@8.4.6
prettier: 2.5.1
@@ -806,8 +816,8 @@ importers:
'@logto/jest-config': ^0.1.0
'@logto/phrases': ^0.1.0
'@logto/schemas': ^0.1.0
- '@parcel/core': ^2.3.2
- '@parcel/transformer-sass': ^2.3.2
+ '@parcel/core': ^2.5.0
+ '@parcel/transformer-sass': ^2.5.0
'@peculiar/webcrypto': ^1.3.3
'@silverhand/eslint-config': ^0.10.2
'@silverhand/eslint-config-react': ^0.10.3
@@ -829,7 +839,7 @@ importers:
ky: ^0.30.0
libphonenumber-js: ^1.9.49
lint-staged: ^12.0.0
- parcel: ^2.3.2
+ parcel: ^2.5.0
postcss: ^8.4.6
postcss-modules: ^4.3.0
prettier: ^2.3.2
@@ -847,8 +857,8 @@ importers:
'@logto/jest-config': link:../jest-config
'@logto/phrases': link:../phrases
'@logto/schemas': link:../schemas
- '@parcel/core': 2.3.2
- '@parcel/transformer-sass': 2.3.2_@parcel+core@2.3.2
+ '@parcel/core': 2.5.0
+ '@parcel/transformer-sass': 2.5.0_@parcel+core@2.5.0
'@peculiar/webcrypto': 1.3.3
'@silverhand/eslint-config': 0.10.2_3a533fa6cc3da0cf8525ef55d41c4384
'@silverhand/eslint-config-react': 0.10.3_75f27ebc3d08f23e7ca8c3f63c7fa502
@@ -870,7 +880,7 @@ importers:
ky: 0.30.0
libphonenumber-js: 1.9.49
lint-staged: 12.4.0
- parcel: 2.3.2_postcss@8.4.6
+ parcel: 2.5.0_postcss@8.4.6
postcss: 8.4.6
postcss-modules: 4.3.0_postcss@8.4.6
prettier: 2.5.1
@@ -4578,6 +4588,16 @@ packages:
write-file-atomic: 3.0.3
dev: true
+ /@lezer/common/0.15.12:
+ resolution: {integrity: sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==}
+ dev: true
+
+ /@lezer/lr/0.15.8:
+ resolution: {integrity: sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==}
+ dependencies:
+ '@lezer/common': 0.15.12
+ dev: true
+
/@logto/browser/0.1.3:
resolution: {integrity: sha512-SsXp7uWnDKSyYGbcCCUkTelcWs8OlUNO0gVnW1hvuAAgm62LAX6EfgsE4EIKCLN/JrcRfjbiJIr98QNfa0riWw==}
requiresBuild: true
@@ -4650,6 +4670,15 @@ packages:
resolution: {integrity: sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==}
dev: true
+ /@mischnic/json-sourcemap/0.1.0:
+ resolution: {integrity: sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==}
+ engines: {node: '>=12.0.0'}
+ dependencies:
+ '@lezer/common': 0.15.12
+ '@lezer/lr': 0.15.8
+ json5: 2.2.1
+ dev: true
+
/@monaco-editor/loader/1.2.0_monaco-editor@0.33.0:
resolution: {integrity: sha512-cJVCG/T/KxXgzYnjKqyAgsKDbH9mGLjcXxN6AmwumBwa2rVFkwvGcUj1RJtD0ko4XqLqJxwqsN/Z/KURB5f1OQ==}
peerDependencies:
@@ -4865,84 +4894,84 @@ packages:
'@octokit/openapi-types': 11.2.0
dev: true
- /@parcel/bundler-default/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-JUrto4mjSD0ic9dEqRp0loL5o3HVYHja1ZIYSq+rBl2UWRV6/9cGTb07lXOCqqm0BWE+hQ4krUxB76qWaF0Lqw==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/bundler-default/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-7CJzE17SirCXjcRgBcnqWO/5EOA1raq/3OIKtT4cxbjpDQGHZpjpEEZiMNRpEpdNMxDSlsG8mAkXTYGL2VVWRw==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/hash': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/hash': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
nullthrows: 1.1.1
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/cache/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-Xxq+ekgcFEme6Fn1v7rEOBkyMOUOUu7eNqQw0l6HQS+INZ2Q7YzzfdW7pI8rEOAAICVg5BWKpmBQZpgJlT+HxQ==}
+ /@parcel/cache/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-3kOO3cZQv0FAKhrMHGLdb4Qtzpmy78Q6jPN3u8eCY4yqeDTnyQBZvWNHoyCm5WlmL8y6Q6REYMbETLxSH1ggAQ==}
engines: {node: '>= 12.0.0'}
peerDependencies:
- '@parcel/core': ^2.3.2
+ '@parcel/core': ^2.5.0
dependencies:
- '@parcel/core': 2.3.2
- '@parcel/fs': 2.3.2_@parcel+core@2.3.2
- '@parcel/logger': 2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/core': 2.5.0
+ '@parcel/fs': 2.5.0_@parcel+core@2.5.0
+ '@parcel/logger': 2.5.0
+ '@parcel/utils': 2.5.0
lmdb: 2.2.4
dev: true
- /@parcel/codeframe/2.3.2:
- resolution: {integrity: sha512-ireQALcxxrTdIEpzTOoMo/GpfbFm1qlyezeGl3Hce3PMvHLg3a5S6u/Vcy7SAjdld5GfhHEqVY+blME6Z4CyXQ==}
+ /@parcel/codeframe/2.5.0:
+ resolution: {integrity: sha512-qafqL8Vu2kr932cCWESoDEEoAeKVi7/xdzTBuhzEJng1AfmRT0rCbt/P4ao3RjiDyozPSjXsHOqM6GDZcto4eQ==}
engines: {node: '>= 12.0.0'}
dependencies:
chalk: 4.1.2
dev: true
- /@parcel/compressor-raw/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-8dIoFwinYK6bOTpnZOAwwIv0v73y0ezsctPmfMnIqVQPn7wJwfhw/gbKVcmK5AkgQMkyid98hlLZoaZtGF1Mdg==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/compressor-raw/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-I5Zs+2f1ue4sTPdfT8BNsLfTZl48sMWLk2Io3elUJjH/SS9kO7ut5ChkuJtt77ZS35m0OF+ZCt3ICTJdnDG8eA==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/config-default/2.3.2_@parcel+core@2.3.2+postcss@8.4.6:
- resolution: {integrity: sha512-E7/iA7fGCYvXU3u6zF9nxjeDVsgjCN6MVvDjymjaxYMoDWTIsPV245SBEXqzgtmzbMAV+VAl4rVWLMB4pzMt9g==}
+ /@parcel/config-default/2.5.0_@parcel+core@2.5.0+postcss@8.4.6:
+ resolution: {integrity: sha512-r30V61958SONvP9I8KV8s44ZOFq0H219VyFjPysraSabHjZ+KMaCTQOuqaDtUMa272sHUQkBcZxKYj5jYPJlZg==}
peerDependencies:
- '@parcel/core': ^2.3.2
+ '@parcel/core': ^2.5.0
dependencies:
- '@parcel/bundler-default': 2.3.2_@parcel+core@2.3.2
- '@parcel/compressor-raw': 2.3.2_@parcel+core@2.3.2
- '@parcel/core': 2.3.2
- '@parcel/namer-default': 2.3.2_@parcel+core@2.3.2
- '@parcel/optimizer-cssnano': 2.3.2_@parcel+core@2.3.2
- '@parcel/optimizer-htmlnano': 2.3.2_@parcel+core@2.3.2+postcss@8.4.6
- '@parcel/optimizer-image': 2.3.2_@parcel+core@2.3.2
- '@parcel/optimizer-svgo': 2.3.2_@parcel+core@2.3.2
- '@parcel/optimizer-terser': 2.3.2_@parcel+core@2.3.2
- '@parcel/packager-css': 2.3.2_@parcel+core@2.3.2
- '@parcel/packager-html': 2.3.2_@parcel+core@2.3.2
- '@parcel/packager-js': 2.3.2_@parcel+core@2.3.2
- '@parcel/packager-raw': 2.3.2_@parcel+core@2.3.2
- '@parcel/packager-svg': 2.3.2_@parcel+core@2.3.2
- '@parcel/reporter-dev-server': 2.3.2_@parcel+core@2.3.2
- '@parcel/resolver-default': 2.3.2_@parcel+core@2.3.2
- '@parcel/runtime-browser-hmr': 2.3.2_@parcel+core@2.3.2
- '@parcel/runtime-js': 2.3.2_@parcel+core@2.3.2
- '@parcel/runtime-react-refresh': 2.3.2_@parcel+core@2.3.2
- '@parcel/runtime-service-worker': 2.3.2_@parcel+core@2.3.2
- '@parcel/transformer-babel': 2.3.2_@parcel+core@2.3.2
- '@parcel/transformer-css': 2.3.2_@parcel+core@2.3.2
- '@parcel/transformer-html': 2.3.2_@parcel+core@2.3.2
- '@parcel/transformer-image': 2.3.2_@parcel+core@2.3.2
- '@parcel/transformer-js': 2.3.2_@parcel+core@2.3.2
- '@parcel/transformer-json': 2.3.2_@parcel+core@2.3.2
- '@parcel/transformer-postcss': 2.3.2_@parcel+core@2.3.2
- '@parcel/transformer-posthtml': 2.3.2_@parcel+core@2.3.2
- '@parcel/transformer-raw': 2.3.2_@parcel+core@2.3.2
- '@parcel/transformer-react-refresh-wrap': 2.3.2_@parcel+core@2.3.2
- '@parcel/transformer-svg': 2.3.2_@parcel+core@2.3.2
+ '@parcel/bundler-default': 2.5.0_@parcel+core@2.5.0
+ '@parcel/compressor-raw': 2.5.0_@parcel+core@2.5.0
+ '@parcel/core': 2.5.0
+ '@parcel/namer-default': 2.5.0_@parcel+core@2.5.0
+ '@parcel/optimizer-css': 2.5.0_@parcel+core@2.5.0
+ '@parcel/optimizer-htmlnano': 2.5.0_@parcel+core@2.5.0+postcss@8.4.6
+ '@parcel/optimizer-image': 2.5.0_@parcel+core@2.5.0
+ '@parcel/optimizer-svgo': 2.5.0_@parcel+core@2.5.0
+ '@parcel/optimizer-terser': 2.5.0_@parcel+core@2.5.0
+ '@parcel/packager-css': 2.5.0_@parcel+core@2.5.0
+ '@parcel/packager-html': 2.5.0_@parcel+core@2.5.0
+ '@parcel/packager-js': 2.5.0_@parcel+core@2.5.0
+ '@parcel/packager-raw': 2.5.0_@parcel+core@2.5.0
+ '@parcel/packager-svg': 2.5.0_@parcel+core@2.5.0
+ '@parcel/reporter-dev-server': 2.5.0_@parcel+core@2.5.0
+ '@parcel/resolver-default': 2.5.0_@parcel+core@2.5.0
+ '@parcel/runtime-browser-hmr': 2.5.0_@parcel+core@2.5.0
+ '@parcel/runtime-js': 2.5.0_@parcel+core@2.5.0
+ '@parcel/runtime-react-refresh': 2.5.0_@parcel+core@2.5.0
+ '@parcel/runtime-service-worker': 2.5.0_@parcel+core@2.5.0
+ '@parcel/transformer-babel': 2.5.0_@parcel+core@2.5.0
+ '@parcel/transformer-css': 2.5.0_@parcel+core@2.5.0
+ '@parcel/transformer-html': 2.5.0_@parcel+core@2.5.0
+ '@parcel/transformer-image': 2.5.0_@parcel+core@2.5.0
+ '@parcel/transformer-js': 2.5.0_@parcel+core@2.5.0
+ '@parcel/transformer-json': 2.5.0_@parcel+core@2.5.0
+ '@parcel/transformer-postcss': 2.5.0_@parcel+core@2.5.0
+ '@parcel/transformer-posthtml': 2.5.0_@parcel+core@2.5.0
+ '@parcel/transformer-raw': 2.5.0_@parcel+core@2.5.0
+ '@parcel/transformer-react-refresh-wrap': 2.5.0_@parcel+core@2.5.0
+ '@parcel/transformer-svg': 2.5.0_@parcel+core@2.5.0
transitivePeerDependencies:
- cssnano
- postcss
@@ -4953,138 +4982,229 @@ packages:
- uncss
dev: true
- /@parcel/core/2.3.2:
- resolution: {integrity: sha512-gdJzpsgeUhv9H8T0UKVmyuptiXdduEfKIUx0ci+/PGhq8cCoiFnlnuhW6H7oLr79OUc+YJStabDJuG4U2A6ysw==}
+ /@parcel/core/2.5.0:
+ resolution: {integrity: sha512-dygDmPsfAYJKTnUftcbEzjCik7AAaPbFvJW8ETYz8diyjkAG9y6hvCAZIrJE5pNOjFzg32en4v4UWv8Sqlzl9g==}
engines: {node: '>= 12.0.0'}
dependencies:
- '@parcel/cache': 2.3.2_@parcel+core@2.3.2
- '@parcel/diagnostic': 2.3.2
- '@parcel/events': 2.3.2
- '@parcel/fs': 2.3.2_@parcel+core@2.3.2
- '@parcel/graph': 2.3.2
- '@parcel/hash': 2.3.2
- '@parcel/logger': 2.3.2
- '@parcel/package-manager': 2.3.2_@parcel+core@2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@mischnic/json-sourcemap': 0.1.0
+ '@parcel/cache': 2.5.0_@parcel+core@2.5.0
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/events': 2.5.0
+ '@parcel/fs': 2.5.0_@parcel+core@2.5.0
+ '@parcel/graph': 2.5.0
+ '@parcel/hash': 2.5.0
+ '@parcel/logger': 2.5.0
+ '@parcel/package-manager': 2.5.0_@parcel+core@2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
'@parcel/source-map': 2.0.2
- '@parcel/types': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
- '@parcel/workers': 2.3.2_@parcel+core@2.3.2
+ '@parcel/types': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
+ '@parcel/workers': 2.5.0_@parcel+core@2.5.0
abortcontroller-polyfill: 1.7.3
base-x: 3.0.9
- browserslist: 4.20.0
+ browserslist: 4.20.2
clone: 2.1.2
dotenv: 7.0.0
dotenv-expand: 5.1.0
- json-source-map: 0.6.1
- json5: 2.2.0
+ json5: 2.2.1
msgpackr: 1.5.4
nullthrows: 1.1.1
semver: 5.7.1
dev: true
- /@parcel/diagnostic/2.3.2:
- resolution: {integrity: sha512-/xW93Az4AOiifuYW/c4CDbUcu3lx5FcUDAj9AGiR9NSTsF/ROC/RqnxvQ3AGtqa14R7vido4MXEpY3JEp6FsqA==}
+ /@parcel/css-darwin-arm64/1.8.1:
+ resolution: {integrity: sha512-PbpIlqLMAhWZlimKCdNP/ZfGNJUlEWgNeTcO2LDjPIK5JK6oTAJHfP/PPzjLS8mu+JIznZ//9MnVOUi1xcjXMA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/css-darwin-x64/1.8.1:
+ resolution: {integrity: sha512-R4FrwXQGAgW3/YRCSRCBNcV6mz+OKqYuyrVnZBmKTLDuTGhZHCF12qLL7SV5jYsKXBDauYAXDv/SOFIwlikVXg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/css-linux-arm-gnueabihf/1.8.1:
+ resolution: {integrity: sha512-MVRlPGipRrs+f6nURR6cJbFw85YSXkPbR6l/0Hm1vyFlNn0HmRDCEWZFPwvvSavibU968Wgc5yKaC78D6Ecgsw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/css-linux-arm64-gnu/1.8.1:
+ resolution: {integrity: sha512-s6UpF9CjUMeeCELx0Cu+HtR8RKycm516b1mJlQC8hsPtAyDYlByW4tSDwC3By4Fqf3xCan6IH/oaq0ujS0Iqew==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/css-linux-arm64-musl/1.8.1:
+ resolution: {integrity: sha512-Tp3Pe2tx7mltPrZ1ZDV8PLkgYcwQOigrH9YjPPOaf8iFptDpHOv1y2cs1eSgnvP+5kBdIXd7H87kGSC7OosuXg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/css-linux-x64-gnu/1.8.1:
+ resolution: {integrity: sha512-8yqXRlei4qBFSv9R8yru6yB2ak7frA/z6rMB2E5lNN8kMhpB1E0xKYMhsTZdMOV5A/gkPZlP3sHZG4qQ3GOLgQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/css-linux-x64-musl/1.8.1:
+ resolution: {integrity: sha512-S1Qf9tZzX7AnmqKRhR/qpFYsqSCxYSz5KdekdxIijPEMxyI5tpWp6g2adGYxrCuV0E5EpcpmXlBT6d6+8FrgPg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/css-win32-x64-msvc/1.8.1:
+ resolution: {integrity: sha512-tZ5s2zM/63mEdpdnE82xtfDDR7tAN32REii1EU5LOdfpB2PIw902p30fvklj1pOFBji/v/JdpAdLIYc4W7Gb6w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/css/1.8.1:
+ resolution: {integrity: sha512-TOfe+msei+NuPPKb60Kc+nPuCThl07L3Fut67nfot1OXy2hKYr/eF7AiAguCaIlRXkjEtXRR4S7fO24dLZ1C9g==}
engines: {node: '>= 12.0.0'}
dependencies:
- json-source-map: 0.6.1
+ detect-libc: 1.0.3
+ optionalDependencies:
+ '@parcel/css-darwin-arm64': 1.8.1
+ '@parcel/css-darwin-x64': 1.8.1
+ '@parcel/css-linux-arm-gnueabihf': 1.8.1
+ '@parcel/css-linux-arm64-gnu': 1.8.1
+ '@parcel/css-linux-arm64-musl': 1.8.1
+ '@parcel/css-linux-x64-gnu': 1.8.1
+ '@parcel/css-linux-x64-musl': 1.8.1
+ '@parcel/css-win32-x64-msvc': 1.8.1
+ dev: true
+
+ /@parcel/diagnostic/2.5.0:
+ resolution: {integrity: sha512-KiMGGRpEV7wl5gjcxBKcgX84a+cG+IEn94gwy5LK3lENR09nuKShqqgKGAmj/17CobJgw1QNP94/H4Md+oxIWg==}
+ engines: {node: '>= 12.0.0'}
+ dependencies:
+ '@mischnic/json-sourcemap': 0.1.0
nullthrows: 1.1.1
dev: true
- /@parcel/events/2.3.2:
- resolution: {integrity: sha512-WiYIwXMo4Vd+pi58vRoHkul8TPE5VEfMY+3FYwVCKPl/LYqSD+vz6wMx9uG18mEbB1d/ofefv5ZFQNtPGKO4tQ==}
+ /@parcel/events/2.5.0:
+ resolution: {integrity: sha512-Gc2LPwL1H34Ony5MENbKZg7wvCscZ4x9y7Fu92sfbdWpLo3K13hVtsX3TMIIgYt3B7R7OmO8yR880U2T+JfVkQ==}
engines: {node: '>= 12.0.0'}
dev: true
- /@parcel/fs-search/2.3.2:
- resolution: {integrity: sha512-u3DTEFnPtKuZvEtgGzfVjQUytegSSn3POi7WfwMwPIaeDPfYcyyhfl+c96z7VL9Gk/pqQ99/cGyAwFdFsnxxXA==}
+ /@parcel/fs-search/2.5.0:
+ resolution: {integrity: sha512-uBONkz9ZCNSOqbPGWJY3MNl+pqBTfvzHH9+4UhzHEHPArvK2oD0+syYPVE60+zGrxybXTESYMCJp4bHvH6Z2hA==}
engines: {node: '>= 12.0.0'}
dependencies:
detect-libc: 1.0.3
dev: true
- /@parcel/fs/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-XV+OsnRpN01QKU37lBN0TFKvv7uPKfQGbqFqYOrMbXH++Ae8rBU0Ykz+Yu4tv2h7shMlde+AMKgRnRTAJZpWEQ==}
+ /@parcel/fs/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-YYr14BWtx/bJ+hu6PPQQ6G/3omOTWgVqEw+UFI3iQH3P6+e0LRXW/Ja1yAcJeepGcTwIP0opnXZBQOm8PBQ2SA==}
engines: {node: '>= 12.0.0'}
peerDependencies:
- '@parcel/core': ^2.3.2
+ '@parcel/core': ^2.5.0
dependencies:
- '@parcel/core': 2.3.2
- '@parcel/fs-search': 2.3.2
- '@parcel/types': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/core': 2.5.0
+ '@parcel/fs-search': 2.5.0
+ '@parcel/types': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
'@parcel/watcher': 2.0.5
- '@parcel/workers': 2.3.2_@parcel+core@2.3.2
+ '@parcel/workers': 2.5.0_@parcel+core@2.5.0
dev: true
- /@parcel/graph/2.3.2:
- resolution: {integrity: sha512-ltTBM3IEqumgmy4ABBFETT8NtAwSsjD9mY3WCyJ5P8rUshfVCg093rvBPbpuJYMaH/TV1AHVaWfZqaZ4JQDIQQ==}
+ /@parcel/graph/2.5.0:
+ resolution: {integrity: sha512-qa2VtG08dJyTaWrxYAkMIlkoDRSPoiqLDNxxHKplkcxAjXBUw0/AkWaz82VO5r1G6jfOj+nM30ajH9uygZYwbw==}
engines: {node: '>= 12.0.0'}
dependencies:
- '@parcel/utils': 2.3.2
+ '@parcel/utils': 2.5.0
nullthrows: 1.1.1
dev: true
- /@parcel/hash/2.3.2:
- resolution: {integrity: sha512-SMtYTsHihws/wqdVnOr0QAGyGYsW9rJSJkkoRujUxo8l2ctnBN1ztv89eOUrdtgHsmcnj/oz1yw6sN38X+BUng==}
+ /@parcel/hash/2.5.0:
+ resolution: {integrity: sha512-47JL0XpB7UvIW6Ijf8vv+yVMt9dLvB/lRlBHFmAkmovisueVMVbYD7smxVZnCSehD8UH8BcymKbMzyL5dimgoQ==}
engines: {node: '>= 12.0.0'}
dependencies:
detect-libc: 1.0.3
xxhash-wasm: 0.4.2
dev: true
- /@parcel/logger/2.3.2:
- resolution: {integrity: sha512-jIWd8TXDQf+EnNWSa7Q10lSQ6C1LSH8OZkTlaINrfVIw7s+3tVxO3I4pjp7/ARw7RX2gdNPlw6fH4Gn/HvvYbw==}
+ /@parcel/logger/2.5.0:
+ resolution: {integrity: sha512-pT1L3ceH6trL1N3I3r2HawPjz/PCubOo/Kazu7IeXsMsKVjj1a6AeieZHzkNZIbhiGPtm/cHbBNLz2zTWDLeOA==}
engines: {node: '>= 12.0.0'}
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/events': 2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/events': 2.5.0
dev: true
- /@parcel/markdown-ansi/2.3.2:
- resolution: {integrity: sha512-l01ggmag5QScCk9mYA0xHh5TWSffR84uPFP2KvaAMQQ9NLNufcFiU0mn/Mtr3pCb5L5dSzmJ+Oo9s7P1Kh/Fmg==}
+ /@parcel/markdown-ansi/2.5.0:
+ resolution: {integrity: sha512-ixkNF3KWIqxMlfxTe9Gb2cp/uNmklQev8VEUxujMVxmUfGyQs4859zdJIQlIinabWYhArhsXATkVf3MzCUN6TQ==}
engines: {node: '>= 12.0.0'}
dependencies:
chalk: 4.1.2
dev: true
- /@parcel/namer-default/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-3QUMC0+5+3KMKfoAxYAbpZtuRqTgyZKsGDWzOpuqwemqp6P8ahAvNPwSCi6QSkGcTmvtYwBu9/NHPSONxIFOfg==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/namer-default/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-ahGQqHJzsWE5Qux8zXMAU+lyNBOl+ZpcOFzRGE2DWOsmAlytsHl7DBVCQvzUyNBFg1/HmIj+7D4efv2kjR7rTg==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
nullthrows: 1.1.1
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/node-resolver-core/2.3.2:
- resolution: {integrity: sha512-wmrnMNzJN4GuHw2Ftho+BWgSWR6UCkW3XoMdphqcxpw/ieAdS2a+xYSosYkZgQZ6lGutSvLyJ1CkVvP6RLIdQQ==}
+ /@parcel/node-resolver-core/2.5.0:
+ resolution: {integrity: sha512-XQvpguiIwQcu75cscLDFOVhjsjuPzXbuMaaZ7XxxUEl0PscIgu/GfKYxTfTruN3cRl+CaQH6qBAMfjLaFng6lQ==}
engines: {node: '>= 12.0.0'}
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/utils': 2.5.0
nullthrows: 1.1.1
dev: true
- /@parcel/optimizer-cssnano/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-wTBOxMiBI38NAB9XIlQZRCjS59+EWjWR9M04D3TWyxl+dL5gYMc1cl4GNynUnmcPdz+3s1UbOdo5/8V90wjiiw==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/optimizer-css/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-J00bLF+4SsnKc+YbYrNuBr44/zz3cg++CoXteXhH27PxP1rScGQx36Rui8WORgil5mlX2VYN79DuqJC7V3Ynbg==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/css': 1.8.1
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
'@parcel/source-map': 2.0.2
- cssnano: 5.1.2_postcss@8.4.8
- postcss: 8.4.8
+ '@parcel/utils': 2.5.0
+ browserslist: 4.20.2
+ nullthrows: 1.1.1
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/optimizer-htmlnano/2.3.2_@parcel+core@2.3.2+postcss@8.4.6:
- resolution: {integrity: sha512-U8C0TDSxsx8HmHaLW0Zc7ha1fXQynzhvBjCRMGYnOiLiw0MOfLQxzQ2WKVSeCotmdlF63ayCwxWsd6BuqStiKQ==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/optimizer-htmlnano/2.5.0_@parcel+core@2.5.0+postcss@8.4.6:
+ resolution: {integrity: sha512-Fr0zPqgxoNaOVdROAjNGDWCts3+wByNQ82Mxhu8Tzc25A2cPjcr1H2sa/TE3hf79c92DxdKf2FaC1ZOgR5YPdg==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
htmlnano: 2.0.0_postcss@8.4.6+svgo@2.8.0
nullthrows: 1.1.1
posthtml: 0.16.6
@@ -5100,201 +5220,202 @@ packages:
- uncss
dev: true
- /@parcel/optimizer-image/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-HOk3r5qdvY/PmI7Q3i2qEgFH3kP2QWG4Wq3wmC4suaF1+c2gpiQc+HKHWp4QvfbH3jhT00c5NxQyqPhbXeNI9Q==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/optimizer-image/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-nbo2pdnAt21WLGjzTpsE8ZEL0xNoP7c3wBj9y70Pysmasg1SrRVCbfE8jTy+lHBQwq2yjC6lV/Usv+9lfA7S/w==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
- '@parcel/workers': 2.3.2_@parcel+core@2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
+ '@parcel/workers': 2.5.0_@parcel+core@2.5.0
detect-libc: 1.0.3
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/optimizer-svgo/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-l7WvZ5+e7D1mVmLUxMVaSb29cviXzuvSY2OpQs0ukdPACDqag+C65hWMzwTiOSSRGPMIu96kQKpeVru2YjibhA==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/optimizer-svgo/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-pgZqwU0RLc/wr4WcQY/W1GJmddnEANDEpz1mdppUOqBz1EfTQ7zh5NgUA3hV1i05Hbecp3mHSvXJPV0mhNOl5Q==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
svgo: 2.8.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/optimizer-terser/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-dOapHhfy0xiNZa2IoEyHGkhhla07xsja79NPem14e5jCqY6Oi40jKNV4ab5uu5u1elWUjJuw69tiYbkDZWbKQw==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/optimizer-terser/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-PZ3UHBGfjE49/Jloopsd38Hxg4qzsrdepWP53mCuVP7Aw605Y4QtYuB1ho3VV0oXfKQVq+uI7lVIBsuW4K6vqA==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
'@parcel/source-map': 2.0.2
- '@parcel/utils': 2.3.2
+ '@parcel/utils': 2.5.0
nullthrows: 1.1.1
terser: 5.12.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/package-manager/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-pAQfywKVORY8Ee+NHAyKzzQrKbnz8otWRejps7urwhDaTVLfAd5C/1ZV64ATZ9ALYP9jyoQ8bTaxVd4opcSuwg==}
+ /@parcel/package-manager/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-zTuF55/lITUjw9dUU/X0HiF++589xbPXw/zUiG9T6s8BQThLvrxAhYP89S719pw7cTqDimGkTxnIuK+a0djEkg==}
engines: {node: '>= 12.0.0'}
peerDependencies:
- '@parcel/core': ^2.3.2
+ '@parcel/core': ^2.5.0
dependencies:
- '@parcel/core': 2.3.2
- '@parcel/diagnostic': 2.3.2
- '@parcel/fs': 2.3.2_@parcel+core@2.3.2
- '@parcel/logger': 2.3.2
- '@parcel/types': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
- '@parcel/workers': 2.3.2_@parcel+core@2.3.2
+ '@parcel/core': 2.5.0
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/fs': 2.5.0_@parcel+core@2.5.0
+ '@parcel/logger': 2.5.0
+ '@parcel/types': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
+ '@parcel/workers': 2.5.0_@parcel+core@2.5.0
semver: 5.7.1
dev: true
- /@parcel/packager-css/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-ByuF9xDnQnpVL1Hdu9aY6SpxOuZowd3TH7joh1qdRPLeMHTEvUywHBXoiAyNdrhnLGum8uPEdY8Ra5Xuo1U7kg==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/packager-css/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-c0mGBFdVSPhAxaX3+zN8KEIqOOUhkIPKbZex1pnGYfy03Qe2/Mb4nyt5DAGlw9gjka1UCHIN/wszLmKC8YyUeg==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
'@parcel/source-map': 2.0.2
- '@parcel/utils': 2.3.2
+ '@parcel/utils': 2.5.0
nullthrows: 1.1.1
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/packager-html/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-YqAptdU+uqfgwSii76mRGcA/3TpuC6yHr8xG+11brqj/tEFLsurmX0naombzd7FgmrTE9w+kb0HUIMl2vRBn0A==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/packager-html/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-ZFGUPRMWKrm8kQHdkEJ5S22C05qpSymx+o+57EfuNjCrGyj3M59WyGYYXYJ175bFYZ/jp5yy+VxMh6fZefe+Pw==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/types': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/types': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
nullthrows: 1.1.1
posthtml: 0.16.6
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/packager-js/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-3OP0Ro9M1J+PIKZK4Ec2N5hjIPiqk++B2kMFeiUqvaNZjJgKrPPEICBhjS52rma4IE/NgmIMB3aI5pWqE/KwNA==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/packager-js/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-aJAKOTgXdxO3V9O7+2DCVOtne128WwXmUAOVThnMRo7f3zMVSAR7Mxc9pEsuTzPfj8UBXgFBRfdJUSCgsMxiSw==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/hash': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/hash': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
'@parcel/source-map': 2.0.2
- '@parcel/utils': 2.3.2
+ '@parcel/utils': 2.5.0
globals: 13.12.1
nullthrows: 1.1.1
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/packager-raw/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-RnoZ7WgNAFWkEPrEefvyDqus7xfv9XGprHyTbfLittPaVAZpl+4eAv43nXyMfzk77Cgds6KcNpkosj3acEpNIQ==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/packager-raw/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-aHV0oogeiqxhxS1lsttw15EvG3DDWK3FV7+F+7hoaAy+xg89K56NTp6j43Jtw9iyU1/HnZRGBE2hF3C7N73oKw==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/packager-svg/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-iIC0VeczOXynS7M5jCi3naMBRyAznBVJ3iMg92/GaI9duxPlUMGAlHzLAKNtoXkc00HMXDH7rrmMb04VX6FYSg==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/packager-svg/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-XSMFn30K/kpjcPpQqt88GmPJsNUSVL3RNeigXkIAcLpfO6Tb2eV4iOt4yVCagaDrRJ19alXut0TxjMm5bm41/g==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/types': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/types': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
posthtml: 0.16.6
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/plugin/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-SaLZAJX4KH+mrAmqmcy9KJN+V7L+6YNTlgyqYmfKlNiHu7aIjLL+3prX8QRcgGtjAYziCxvPj0cl1CCJssaiGg==}
+ /@parcel/plugin/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-obtb6/Gql6YFQ86bdv75A2Noabx8679reFZeyfKKf0L7Lppx4DFQetXwM9XVy7Gx6hJ1Ekm3UMuuIyVJk33YHQ==}
engines: {node: '>= 12.0.0'}
dependencies:
- '@parcel/types': 2.3.2_@parcel+core@2.3.2
+ '@parcel/types': 2.5.0_@parcel+core@2.5.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/reporter-cli/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-VYetmTXqW83npsvVvqlQZTbF3yVL3k/FCCl3kSWvOr9LZA0lmyqJWPjMHq37yIIOszQN/p5guLtgCjsP0UQw1Q==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/reporter-cli/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-miJt2YbRJBmYSVeoUWUj8YL85Pwj1CmGQB0/btqhulGLH/Fvkbv6T4sJ4gl4l5xIt9mJQsZ70pOWwa8BId3rWw==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/types': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/types': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
chalk: 4.1.2
+ term-size: 2.2.1
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/reporter-dev-server/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-E7LtnjAX4iiWMw2qKUyFBi3+bDz0UGjqgHoPQylUYYLi6opXjJz/oC+cCcCy4e3RZlkrl187XonvagS59YjDxA==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/reporter-dev-server/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-wvxAiW42AxJ3B8jtvowJcP4/cTV8zY48SfKg61YKYu1yUO+TtyJIjHQzDW2XuT34cIGFY97Gr0i+AVu44RyUuQ==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/resolver-default/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-y3r+xOwWsATrNGUWuZ6soA7q24f8E5tY1AZ9lHCufnkK2cdKZJ5O1cyd7ohkAiKZx2/pMd+FgmVZ/J3oxetXkA==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/resolver-default/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-39PkZpVr/+iYS11u+lA84vIsKm/yisltTVmUjlYsDnExiuV1c8OSbSdYZ3JMx+7CYPE0bWbosX2AGilIwIMWpQ==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/node-resolver-core': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/node-resolver-core': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/runtime-browser-hmr/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-nRD6uOyF1+HGylP9GASbYmvUDOsDaNwvaxuGTSh8+5M0mmCgib+hVBiPEKbwdmKjGbUPt9wRFPyMa/JpeQZsIQ==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/runtime-browser-hmr/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-oPAo8Zf06gXCpt41nyvK7kv2HH1RrHAGgOqttyjStwAFlm5MZKs7BgtJzO58LfJN8g3sMY0cNdG17fB/4f8q6Q==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/runtime-js/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-SJepcHvYO/7CEe/Q85sngk+smcJ6TypuPh4D2R8kN+cAJPi5WvbQEe7+x5BEgbN+5Jumi/Uo3FfOOE5mYh+F6g==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/runtime-js/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-gPC2PbNAiooULP71wF5twe4raekuXsR1Hw/ahITDoqsZdXHzG3CkoCjYL3CkmBGiKQgMMocCyN1E2oBzAH8Kyw==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
nullthrows: 1.1.1
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/runtime-react-refresh/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-P+GRPO2XVDSBQ4HmRSj2xfbHSQvL9+ahTE/AB74IJExLTITv5l4SHAV3VsiKohuHYUAYHW3A/Oe7tEFCAb6Cug==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/runtime-react-refresh/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-+8RuDKFdFYIQTrXG4MRhG9XqkkYEHn0zxKyOJ/IkDDfSEhY0na+EyhrneFUwIvDX63gLPkxceXAg0gwBqXPK/Q==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
react-refresh: 0.9.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/runtime-service-worker/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-iREHj/eapphC4uS/zGUkiTJvG57q+CVbTrfE42kB8ECtf/RYNo5YC9htdvPZjRSXDPrEPc5NCoKp4X09ENNikw==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/runtime-service-worker/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-STuDlU0fPXeWpAmbayY7o04F0eHy6FTOFeT5KQ0PTxtdEa3Ey8QInP/NVE52Yv0aVQtesWukGrNEFCERlkbFRw==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
nullthrows: 1.1.1
transitivePeerDependencies:
- '@parcel/core'
@@ -5307,45 +5428,44 @@ packages:
detect-libc: 1.0.3
dev: true
- /@parcel/transformer-babel/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-QpWfH2V6jJ+kcUBIMM/uBBG8dGFvNaOGS+8jD6b+eTP+1owzm83RoWgqhRV2D/hhv2qMXEQzIljoc/wg2y+X4g==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-babel/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-EFb866C9jCoBHIcebWF7goAcYj1wkObx0GDxshlazFtvym1RM27xSWWjRYyqb5+HNOxB3voaNvQOVjcD+DXjCA==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
'@parcel/source-map': 2.0.2
- '@parcel/utils': 2.3.2
- browserslist: 4.20.0
- json5: 2.2.0
+ '@parcel/utils': 2.5.0
+ browserslist: 4.20.2
+ json5: 2.2.1
nullthrows: 1.1.1
semver: 5.7.1
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/transformer-css/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-8lzvDny+78DIAqhcXam2Bf9FyaUoqzHdUQdNFn+PuXTHroG/QGPvln1kvqngJjn4/cpJS9vYmAPVXe+nai3P8g==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-css/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-p8FOvKWWSbS6H8PbD9a0KZqyaKNpSD2BUTzSRYnNj3TBUv7/ZXaP6Om295XTQ/MPht1o7XTQzvfpF/7yEhr02Q==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/hash': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/css': 1.8.1
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
'@parcel/source-map': 2.0.2
- '@parcel/utils': 2.3.2
+ '@parcel/utils': 2.5.0
+ browserslist: 4.20.2
nullthrows: 1.1.1
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- semver: 5.7.1
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/transformer-html/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-idT1I/8WM65IFYBqzRwpwT7sf0xGur4EDQDHhuPX1w+pIVZnh0lkLMAnEqs6ar1SPRMys4chzkuDNnqh0d76hg==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-html/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-iEjNyAF0wQmY3DMw7FS+UzoOMng76UsSngh+WWA1E5lv5XyqrP8Mk2QLTJp1nWetUhSLhZr58LGmPYBTB4l9ZQ==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/hash': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/hash': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
nullthrows: 1.1.1
posthtml: 0.16.6
posthtml-parser: 0.10.2
@@ -5355,53 +5475,70 @@ packages:
- '@parcel/core'
dev: true
- /@parcel/transformer-image/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-0K7cJHXysli6hZsUz/zVGO7WCoaaIeVdzAxKpLA1Yl3LKw/ODiMyXKt08LiV/ljQ2xT5qb9EsXUWDRvcZ0b96A==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-image/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-vVEXTHZl8m/9yopgK0dWHLOQX2zOnghq6pZnWdWVG6fsvXZln7kP1YN5iwWDoADQYkiKzP+Ymn6UwP9pZpHFzA==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
+ peerDependencies:
+ '@parcel/core': ^2.5.0
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/workers': 2.3.2_@parcel+core@2.3.2
+ '@parcel/core': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/workers': 2.5.0_@parcel+core@2.5.0
nullthrows: 1.1.1
- transitivePeerDependencies:
- - '@parcel/core'
dev: true
- /@parcel/transformer-js/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-U1fbIoAoqR5P49S+DMhH8BUd9IHRPwrTTv6ARYGsYnhuNsjTFhNYE0kkfRYboe/e0z7vEbeJICZXjnZ7eQDw5A==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-js/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-Cp8Ic+Au3OcskCRZszmo47z3bqcZ7rfPv2xZYXpXY2TzEc3IV0bKje57bZektoY8LW9LkYM9iBO/WhkVoT6LIg==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
+ peerDependencies:
+ '@parcel/core': ^2.5.0
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/core': 2.5.0
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
'@parcel/source-map': 2.0.2
- '@parcel/utils': 2.3.2
- '@parcel/workers': 2.3.2_@parcel+core@2.3.2
- '@swc/helpers': 0.2.14
- browserslist: 4.20.0
+ '@parcel/utils': 2.5.0
+ '@parcel/workers': 2.5.0_@parcel+core@2.5.0
+ '@swc/helpers': 0.3.8
+ browserslist: 4.20.2
detect-libc: 1.0.3
nullthrows: 1.1.1
regenerator-runtime: 0.13.9
semver: 5.7.1
+ dev: true
+
+ /@parcel/transformer-json/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-661sByA7TkR6Lmxt+hqV4h2SAt+7lgc58DzmUYArpEl1fQnMuQuaB0kQeHzi6fDD2+2G6o7EC+DuwBZKa479TA==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
+ dependencies:
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ json5: 2.2.1
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/transformer-json/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-Pv2iPaxKINtFwOk5fDbHjQlSm2Vza/NLimQY896FLxiXPNAJxWGvMwdutgOPEBKksxRx9LZPyIOHiRVZ0KcA3w==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-mdx/2.5.0_8232c903f4498966f4a3632b84785854:
+ resolution: {integrity: sha512-DU9GysnYthYW0OoaFxbXm4kn2ff8KCJ+M7RsLGABSW44x8IwkNpVZni5sPjxUASqkUHGpDFIT8o0un4VSxKaNQ==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
+ peerDependencies:
+ '@mdx-js/react': ^1.6.22
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- json5: 2.2.0
+ '@mdx-js/mdx': 1.6.22
+ '@mdx-js/react': 1.6.22_react@17.0.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
transitivePeerDependencies:
- '@parcel/core'
+ - supports-color
dev: true
- /@parcel/transformer-postcss/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-Rpdxc1rt2aJFCh/y/ccaBc9J1crDjNY5o44xYoOemBoUNDMREsmg5sR5iO81qKKO5GxfoosGb2zh59aeTmywcg==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-postcss/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-IPNlWElekdQHMTBqhdwJNBCQomuYyo7xgNBdnTrt9VJ+R5ihy6n7ZJSWIAJXAH9VZxETTtunfrzRtgkmtjTeZQ==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/hash': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/hash': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
clone: 2.1.2
nullthrows: 1.1.1
postcss-value-parser: 4.2.0
@@ -5410,12 +5547,12 @@ packages:
- '@parcel/core'
dev: true
- /@parcel/transformer-posthtml/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-tMdVExfdM+1G8A9KSHDsjg+S9xEGbhH5mApF2NslPnNZ4ciLKRNuHU2sSV/v8i0a6kacKvDTrwQXYBQJGOodBw==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-posthtml/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-AZxg1XD8OXOS4bEGEmBBR+X9T9qoFdVsbVUg498zzejYSka1ZQHF7TgLI/+pUnE+ZVYNIp7/G0xXqsRVKMKmdQ==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
nullthrows: 1.1.1
posthtml: 0.16.6
posthtml-parser: 0.10.2
@@ -5425,44 +5562,44 @@ packages:
- '@parcel/core'
dev: true
- /@parcel/transformer-raw/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-lY7eOCaALZ90+GH+4PZRmAPGQRXoZ66NakSdhEtH6JSSAYOmZKDvNLGTMRo/vK1oELzWMuAHGdqvbcPDtNLLVw==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-raw/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-I3zjE1u9+Wj90Qqs1V2FTm6iC6SAyOVUthwVZkZey+qbQG/ok682Ez2XjLu7MyQCo9BJNwF/nfOa1hHr3MaJEQ==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/transformer-react-refresh-wrap/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-FZaderyCExn0SBZ6D+zHPWc8JSn9YDcbfibv0wkCl+D7sYfeWZ22i7MRp5NwCe/TZ21WuxDWySCggEp/Waz2xg==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-react-refresh-wrap/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-VPqVBxhTN4OQwcjsdyxrv+smjAm4s6dbSWAplgPwdOITMv+a0tjhhJU37WnRC+xxTrbEqRcOt96JvGOkPb8i7g==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
react-refresh: 0.9.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/transformer-sass/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-jVDdhyzfCYLY/91gOfMAT0Cj3a3czETD71WpvnXhzfctnhZZ/lhC1aFUJxlhIF1hkVNyZ1b9USCCBAD4fje2Jg==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-sass/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-tio+LcQvP2RUt2SqBPpxGvEJGeYyLjT87xKPuvYRmQ38h/FjG2j7WgvcHgii02YkZNyajCmMIoGwVYgovm5+bw==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
'@parcel/source-map': 2.0.2
sass: 1.49.9
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/transformer-svg/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-k9My6bePsaGgUh+tidDjFbbVgKPTzwCAQfoloZRMt7y396KgUbvCfqDruk04k6k+cJn7Jl1o/5lUpTEruBze7g==}
- engines: {node: '>= 12.0.0', parcel: ^2.3.2}
+ /@parcel/transformer-svg/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-zCGJcrCpICFe0Q/dgjQZfW7sYFkbJEC7NGT4zEJnMo8Cm/kq8Qh6+2ApX6c+vv5Q0WZn5Ic+N0OvxIMkvgdC/w==}
+ engines: {node: '>= 12.0.0', parcel: ^2.5.0}
dependencies:
- '@parcel/diagnostic': 2.3.2
- '@parcel/hash': 2.3.2
- '@parcel/plugin': 2.3.2_@parcel+core@2.3.2
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/hash': 2.5.0
+ '@parcel/plugin': 2.5.0_@parcel+core@2.5.0
nullthrows: 1.1.1
posthtml: 0.16.6
posthtml-parser: 0.10.2
@@ -5472,29 +5609,29 @@ packages:
- '@parcel/core'
dev: true
- /@parcel/types/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-C77Ct1xNM7LWjPTfe/dQ/9rq1efdsX5VJu2o8/TVi6qoFh64Wp/c5/vCHwKInOTBZUTchVO6z4PGJNIZoUVJuA==}
+ /@parcel/types/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-bA0fhG6aXSGYEVo5Dt96x6lseUQHeVZVzgmiRdZsvb614Gvx22ItfaKhPmAVbM9vzbObZDHl9l9G2Ovw8Xve4g==}
dependencies:
- '@parcel/cache': 2.3.2_@parcel+core@2.3.2
- '@parcel/diagnostic': 2.3.2
- '@parcel/fs': 2.3.2_@parcel+core@2.3.2
- '@parcel/package-manager': 2.3.2_@parcel+core@2.3.2
+ '@parcel/cache': 2.5.0_@parcel+core@2.5.0
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/fs': 2.5.0_@parcel+core@2.5.0
+ '@parcel/package-manager': 2.5.0_@parcel+core@2.5.0
'@parcel/source-map': 2.0.2
- '@parcel/workers': 2.3.2_@parcel+core@2.3.2
+ '@parcel/workers': 2.5.0_@parcel+core@2.5.0
utility-types: 3.10.0
transitivePeerDependencies:
- '@parcel/core'
dev: true
- /@parcel/utils/2.3.2:
- resolution: {integrity: sha512-xzZ+0vWhrXlLzGoz7WlANaO5IPtyWGeCZruGtepUL3yheRWb1UU4zFN9xz7Z+j++Dmf1Fgkc3qdk/t4O8u9HLQ==}
+ /@parcel/utils/2.5.0:
+ resolution: {integrity: sha512-kaLGXtQuOOH55KZqXdYDvczhh3mk2eeTVqrrXuuihGjbLKYFlUW2tFDm+5r2s9nCPwTQxOO43ZEOCKSnia+e4w==}
engines: {node: '>= 12.0.0'}
dependencies:
- '@parcel/codeframe': 2.3.2
- '@parcel/diagnostic': 2.3.2
- '@parcel/hash': 2.3.2
- '@parcel/logger': 2.3.2
- '@parcel/markdown-ansi': 2.3.2
+ '@parcel/codeframe': 2.5.0
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/hash': 2.5.0
+ '@parcel/logger': 2.5.0
+ '@parcel/markdown-ansi': 2.5.0
'@parcel/source-map': 2.0.2
chalk: 4.1.2
dev: true
@@ -5508,17 +5645,17 @@ packages:
node-gyp-build: 4.3.0
dev: true
- /@parcel/workers/2.3.2_@parcel+core@2.3.2:
- resolution: {integrity: sha512-JbOm+Ceuyymd1SuKGgodC2EXAiPuFRpaNUSJpz3NAsS3lVIt2TDAPMOWBivS7sML/KltspUfl/Q9YwO0TPUFNw==}
+ /@parcel/workers/2.5.0_@parcel+core@2.5.0:
+ resolution: {integrity: sha512-/Ow5OKJWs+9OzV3Jy4J++VnbNx0j3ls/M1CGVBLiBWyCada9DMtquYoBQ4Sk6Uam50BKkIFYetGOeXPNQyyMjg==}
engines: {node: '>= 12.0.0'}
peerDependencies:
- '@parcel/core': ^2.3.2
+ '@parcel/core': ^2.5.0
dependencies:
- '@parcel/core': 2.3.2
- '@parcel/diagnostic': 2.3.2
- '@parcel/logger': 2.3.2
- '@parcel/types': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/core': 2.5.0
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/logger': 2.5.0
+ '@parcel/types': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
chrome-trace-event: 1.0.3
nullthrows: 1.1.1
dev: true
@@ -5952,8 +6089,8 @@ packages:
- supports-color
dev: true
- /@swc/helpers/0.2.14:
- resolution: {integrity: sha512-wpCQMhf5p5GhNg2MmGKXzUNwxe7zRiCsmqYsamez2beP7mKPCSiu+BjZcdN95yYSzO857kr0VfQewmGpS77nqA==}
+ /@swc/helpers/0.3.8:
+ resolution: {integrity: sha512-aWItSZvJj4+GI6FWkjZR13xPNPctq2RRakzo+O6vN7bC2yjwdg5EFpgaSAUn95b7BGSgcflvzVDPoKmJv24IOg==}
dev: true
/@szmarczak/http-timer/1.1.2:
@@ -6333,6 +6470,16 @@ packages:
resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==}
dev: true
+ /@types/mdx-js__react/1.5.5:
+ resolution: {integrity: sha512-k8pnaP6JXVlQh18HgL5X6sYFNC/qZnzO7R2+HsmwrwUd+JnnsU0d9lyyT0RQrHg1anxDU36S98TI/fsGtmYqqg==}
+ dependencies:
+ '@types/react': 17.0.37
+ dev: true
+
+ /@types/mdx/2.0.1:
+ resolution: {integrity: sha512-JPEv4iAl0I+o7g8yVWDwk30es8mfVrjkvh5UeVR2sYPpZCK44vrAPsbJpIS+rJAUxLgaSAMKTEH5Vn5qd9XsrQ==}
+ dev: true
+
/@types/mime/1.3.2:
resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==}
dev: true
@@ -8587,16 +8734,6 @@ packages:
engines: {node: '>=8'}
dev: true
- /css-declaration-sorter/6.1.4_postcss@8.4.8:
- resolution: {integrity: sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==}
- engines: {node: '>= 10'}
- peerDependencies:
- postcss: ^8.0.9
- dependencies:
- postcss: 8.4.8
- timsort: 0.3.0
- dev: true
-
/css-declaration-sorter/6.2.2_postcss@8.4.12:
resolution: {integrity: sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==}
engines: {node: ^10 || ^12 || >=14}
@@ -8724,44 +8861,6 @@ packages:
postcss-zindex: 5.1.0_postcss@8.4.12
dev: true
- /cssnano-preset-default/5.2.2_postcss@8.4.8:
- resolution: {integrity: sha512-uFzWn1jGBwbRLzb33qHpEtl2mEZw2IV/su1HP8psLK7L8C3iOV6OsAzDM0En1YA4Vpc1iKxgNozqR+i2ubW3tw==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- css-declaration-sorter: 6.1.4_postcss@8.4.8
- cssnano-utils: 3.1.0_postcss@8.4.8
- postcss: 8.4.8
- postcss-calc: 8.2.4_postcss@8.4.8
- postcss-colormin: 5.3.0_postcss@8.4.8
- postcss-convert-values: 5.1.0_postcss@8.4.8
- postcss-discard-comments: 5.1.1_postcss@8.4.8
- postcss-discard-duplicates: 5.1.0_postcss@8.4.8
- postcss-discard-empty: 5.1.1_postcss@8.4.8
- postcss-discard-overridden: 5.1.0_postcss@8.4.8
- postcss-merge-longhand: 5.1.0_postcss@8.4.8
- postcss-merge-rules: 5.1.0_postcss@8.4.8
- postcss-minify-font-values: 5.1.0_postcss@8.4.8
- postcss-minify-gradients: 5.1.0_postcss@8.4.8
- postcss-minify-params: 5.1.1_postcss@8.4.8
- postcss-minify-selectors: 5.2.0_postcss@8.4.8
- postcss-normalize-charset: 5.1.0_postcss@8.4.8
- postcss-normalize-display-values: 5.1.0_postcss@8.4.8
- postcss-normalize-positions: 5.1.0_postcss@8.4.8
- postcss-normalize-repeat-style: 5.1.0_postcss@8.4.8
- postcss-normalize-string: 5.1.0_postcss@8.4.8
- postcss-normalize-timing-functions: 5.1.0_postcss@8.4.8
- postcss-normalize-unicode: 5.1.0_postcss@8.4.8
- postcss-normalize-url: 5.1.0_postcss@8.4.8
- postcss-normalize-whitespace: 5.1.1_postcss@8.4.8
- postcss-ordered-values: 5.1.0_postcss@8.4.8
- postcss-reduce-initial: 5.1.0_postcss@8.4.8
- postcss-reduce-transforms: 5.1.0_postcss@8.4.8
- postcss-svgo: 5.1.0_postcss@8.4.8
- postcss-unique-selectors: 5.1.1_postcss@8.4.8
- dev: true
-
/cssnano-preset-default/5.2.7_postcss@8.4.12:
resolution: {integrity: sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -8809,27 +8908,6 @@ packages:
postcss: 8.4.12
dev: true
- /cssnano-utils/3.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- dev: true
-
- /cssnano/5.1.2_postcss@8.4.8:
- resolution: {integrity: sha512-zzQSTSLl5FGHhFSNHpUwDrIFYuwzL5d5f0quow5j97rR4GeJ4atuQ7e6qX7+UkrzU6xAzvqztKQYCdVngDTVGw==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- cssnano-preset-default: 5.2.2_postcss@8.4.8
- lilconfig: 2.0.4
- postcss: 8.4.8
- yaml: 1.10.2
- dev: true
-
/cssnano/5.1.7_postcss@8.4.12:
resolution: {integrity: sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -11181,7 +11259,7 @@ packages:
resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==}
dependencies:
domelementtype: 2.2.0
- domhandler: 4.3.0
+ domhandler: 4.3.1
domutils: 2.8.0
entities: 3.0.1
dev: true
@@ -12738,10 +12816,6 @@ packages:
resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
dev: true
- /json-source-map/0.6.1:
- resolution: {integrity: sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==}
- dev: true
-
/json-stable-stringify-without-jsonify/1.0.1:
resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=}
dev: true
@@ -15002,21 +15076,21 @@ packages:
tslib: 2.3.1
dev: true
- /parcel/2.3.2_postcss@8.4.6:
- resolution: {integrity: sha512-4jhgoBcQaiGKmnmBvNyKyOvZrxCgzgUzdEoVup/fRCOP99hNmvYIN5IErIIJxsU9ObcG/RGCFF8wa4kVRsWfIg==}
+ /parcel/2.5.0_postcss@8.4.6:
+ resolution: {integrity: sha512-er0mj/BaMjWyzQ/jedLUi/LNAuQcFT8lCvoNqANF+jTaX9rohaBwxIvKVJVAZgyCnmyfbbldp496wPMW0R0+CA==}
engines: {node: '>= 12.0.0'}
hasBin: true
dependencies:
- '@parcel/config-default': 2.3.2_@parcel+core@2.3.2+postcss@8.4.6
- '@parcel/core': 2.3.2
- '@parcel/diagnostic': 2.3.2
- '@parcel/events': 2.3.2
- '@parcel/fs': 2.3.2_@parcel+core@2.3.2
- '@parcel/logger': 2.3.2
- '@parcel/package-manager': 2.3.2_@parcel+core@2.3.2
- '@parcel/reporter-cli': 2.3.2_@parcel+core@2.3.2
- '@parcel/reporter-dev-server': 2.3.2_@parcel+core@2.3.2
- '@parcel/utils': 2.3.2
+ '@parcel/config-default': 2.5.0_@parcel+core@2.5.0+postcss@8.4.6
+ '@parcel/core': 2.5.0
+ '@parcel/diagnostic': 2.5.0
+ '@parcel/events': 2.5.0
+ '@parcel/fs': 2.5.0_@parcel+core@2.5.0
+ '@parcel/logger': 2.5.0
+ '@parcel/package-manager': 2.5.0_@parcel+core@2.5.0
+ '@parcel/reporter-cli': 2.5.0_@parcel+core@2.5.0
+ '@parcel/reporter-dev-server': 2.5.0_@parcel+core@2.5.0
+ '@parcel/utils': 2.5.0
chalk: 4.1.2
commander: 7.2.0
get-port: 4.2.0
@@ -15402,16 +15476,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-calc/8.2.4_postcss@8.4.8:
- resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==}
- peerDependencies:
- postcss: ^8.2.2
- dependencies:
- postcss: 8.4.8
- postcss-selector-parser: 6.0.9
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-colormin/5.3.0_postcss@8.4.12:
resolution: {integrity: sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15425,19 +15489,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-colormin/5.3.0_postcss@8.4.8:
- resolution: {integrity: sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- browserslist: 4.20.0
- caniuse-api: 3.0.0
- colord: 2.9.2
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-convert-values/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15448,16 +15499,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-convert-values/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-discard-comments/5.1.1_postcss@8.4.12:
resolution: {integrity: sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15467,15 +15508,6 @@ packages:
postcss: 8.4.12
dev: true
- /postcss-discard-comments/5.1.1_postcss@8.4.8:
- resolution: {integrity: sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- dev: true
-
/postcss-discard-duplicates/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15485,15 +15517,6 @@ packages:
postcss: 8.4.12
dev: true
- /postcss-discard-duplicates/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- dev: true
-
/postcss-discard-empty/5.1.1_postcss@8.4.12:
resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15503,15 +15526,6 @@ packages:
postcss: 8.4.12
dev: true
- /postcss-discard-empty/5.1.1_postcss@8.4.8:
- resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- dev: true
-
/postcss-discard-overridden/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15521,15 +15535,6 @@ packages:
postcss: 8.4.12
dev: true
- /postcss-discard-overridden/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- dev: true
-
/postcss-discard-unused/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15587,17 +15592,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-merge-longhand/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-Gr46srN2tsLD8fudKYoHO56RG0BLQ2nsBRnSZGY04eNBPwTeWa9KeHrbL3tOLAHyB2aliikycPH2TMJG1U+W6g==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- stylehacks: 5.1.0_postcss@8.4.8
- dev: true
-
/postcss-merge-longhand/5.1.4_postcss@8.4.12:
resolution: {integrity: sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15609,19 +15603,6 @@ packages:
stylehacks: 5.1.0_postcss@8.4.12
dev: true
- /postcss-merge-rules/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-NecukEJovQ0mG7h7xV8wbYAkXGTO3MPKnXvuiXzOKcxoOodfTTKYjeo8TMhAswlSkjcPIBlnKbSFcTuVSDaPyQ==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- browserslist: 4.20.0
- caniuse-api: 3.0.0
- cssnano-utils: 3.1.0_postcss@8.4.8
- postcss: 8.4.8
- postcss-selector-parser: 6.0.9
- dev: true
-
/postcss-merge-rules/5.1.1_postcss@8.4.12:
resolution: {integrity: sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15645,28 +15626,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-minify-font-values/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
- /postcss-minify-gradients/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-J/TMLklkONn3LuL8wCwfwU8zKC1hpS6VcxFkNUNjmVt53uKqrrykR3ov11mdUYyqVMEx67slMce0tE14cE4DTg==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- colord: 2.9.2
- cssnano-utils: 3.1.0_postcss@8.4.8
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-minify-gradients/5.1.1_postcss@8.4.12:
resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15679,18 +15638,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-minify-params/5.1.1_postcss@8.4.8:
- resolution: {integrity: sha512-WCpr+J9Uz8XzMpAfg3UL8z5rde6MifBbh5L8bn8S2F5hq/YDJJzASYCnCHvAB4Fqb94ys8v95ULQkW2EhCFvNg==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- browserslist: 4.20.0
- cssnano-utils: 3.1.0_postcss@8.4.8
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-minify-params/5.1.2_postcss@8.4.12:
resolution: {integrity: sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15713,16 +15660,6 @@ packages:
postcss-selector-parser: 6.0.9
dev: true
- /postcss-minify-selectors/5.2.0_postcss@8.4.8:
- resolution: {integrity: sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-selector-parser: 6.0.9
- dev: true
-
/postcss-modules-extract-imports/3.0.0_postcss@8.4.12:
resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==}
engines: {node: ^10 || ^12 || >= 14}
@@ -15830,15 +15767,6 @@ packages:
postcss: 8.4.12
dev: true
- /postcss-normalize-charset/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- dev: true
-
/postcss-normalize-display-values/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15849,16 +15777,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-display-values/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-normalize-positions/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15869,16 +15787,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-positions/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-normalize-repeat-style/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15889,16 +15797,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-repeat-style/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-normalize-string/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15909,16 +15807,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-string/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-normalize-timing-functions/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15929,16 +15817,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-timing-functions/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-normalize-unicode/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15950,17 +15828,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-unicode/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- browserslist: 4.20.0
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-normalize-url/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15972,17 +15839,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-url/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- normalize-url: 6.1.0
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-normalize-whitespace/5.1.1_postcss@8.4.12:
resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -15993,27 +15849,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-whitespace/5.1.1_postcss@8.4.8:
- resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
- /postcss-ordered-values/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-wU4Z4D4uOIH+BUKkYid36gGDJNQtkVJT7Twv8qH6UyfttbbJWyw4/xIPuVEkkCtQLAJ0EdsNSh8dlvqkXb49TA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- cssnano-utils: 3.1.0_postcss@8.4.8
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-ordered-values/5.1.1_postcss@8.4.12:
resolution: {integrity: sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -16046,17 +15881,6 @@ packages:
postcss: 8.4.12
dev: true
- /postcss-reduce-initial/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- browserslist: 4.20.0
- caniuse-api: 3.0.0
- postcss: 8.4.8
- dev: true
-
/postcss-reduce-transforms/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==}
engines: {node: ^10 || ^12 || >=14.0}
@@ -16067,16 +15891,6 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-reduce-transforms/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- dev: true
-
/postcss-resolve-nested-selector/0.1.1:
resolution: {integrity: sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=}
dev: true
@@ -16139,17 +15953,6 @@ packages:
svgo: 2.8.0
dev: true
- /postcss-svgo/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-value-parser: 4.2.0
- svgo: 2.8.0
- dev: true
-
/postcss-syntax/0.36.2_postcss@7.0.39:
resolution: {integrity: sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==}
peerDependencies:
@@ -16168,16 +15971,6 @@ packages:
postcss-selector-parser: 6.0.9
dev: true
- /postcss-unique-selectors/5.1.1_postcss@8.4.8:
- resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- postcss: 8.4.8
- postcss-selector-parser: 6.0.9
- dev: true
-
/postcss-value-parser/4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
dev: true
@@ -16217,15 +16010,6 @@ packages:
source-map-js: 1.0.2
dev: true
- /postcss/8.4.8:
- resolution: {integrity: sha512-2tXEqGxrjvAO6U+CJzDL2Fk2kPHTv1jQsYkSoMeOis2SsYaXRO2COxTdQp99cYvif9JTXaAk9lYGc3VhJt7JPQ==}
- engines: {node: ^10 || ^12 || >=14}
- dependencies:
- nanoid: 3.3.1
- picocolors: 1.0.0
- source-map-js: 1.0.2
- dev: true
-
/postgres-array/2.0.0:
resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
engines: {node: '>=4'}
@@ -18560,17 +18344,6 @@ packages:
postcss-selector-parser: 6.0.9
dev: true
- /stylehacks/5.1.0_postcss@8.4.8:
- resolution: {integrity: sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==}
- engines: {node: ^10 || ^12 || >=14.0}
- peerDependencies:
- postcss: ^8.2.15
- dependencies:
- browserslist: 4.20.0
- postcss: 8.4.8
- postcss-selector-parser: 6.0.9
- dev: true
-
/stylelint-config-xo-scss/0.14.0_stylelint@13.13.1:
resolution: {integrity: sha512-B+7xC8GryR85beOtuYxSNxqc7GTnOIxrGxVxpJJeUGV8T+qVg82o/mRiw0AcmXIulqQtJIsgomcmeZI5wEtrAg==}
engines: {node: '>=10'}
@@ -18865,6 +18638,11 @@ packages:
uuid: 3.4.0
dev: true
+ /term-size/2.2.1:
+ resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
+ engines: {node: '>=8'}
+ dev: true
+
/terminal-link/2.1.1:
resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==}
engines: {node: '>=8'}