From d847dca5ab8afaffaf26227ac1f7709dd5cf64c4 Mon Sep 17 00:00:00 2001 From: SonMooSans Date: Sun, 30 Jul 2023 15:46:09 +0800 Subject: [PATCH] Configure eslint & prettier --- .changeset/config.json | 18 +- .eslintrc.cjs | 121 + .gitignore | 1 + .prettierignore | 2 + .vscode/settings.json | 2 +- README.md | 6 +- apps/docs/app/api/search/route.ts | 16 +- .../app/docs/[mode]/[[...slug]]/not-found.tsx | 2 +- .../docs/app/docs/[mode]/[[...slug]]/page.tsx | 251 +- apps/docs/app/docs/[mode]/layout.tsx | 70 +- apps/docs/app/docs/page.tsx | 99 +- apps/docs/app/layout.tsx | 171 +- apps/docs/app/page.tsx | 370 ++- apps/docs/app/style.css | 8 +- apps/docs/components.json | 2 +- apps/docs/components/nav.tsx | 102 +- apps/docs/components/ui/accordion.tsx | 94 +- apps/docs/components/ui/button.tsx | 87 +- apps/docs/components/ui/input.tsx | 39 +- .../docs/headless/components/breadcrumb.mdx | 76 +- .../docs/headless/components/meta.json | 4 +- .../docs/headless/components/safe-link.mdx | 25 +- .../docs/headless/components/sidebar.mdx | 72 +- .../content/docs/headless/components/toc.mdx | 68 +- .../docs/headless/contentlayer/index.mdx | 29 +- .../contentlayer/internationalization.mdx | 126 +- apps/docs/content/docs/headless/index.mdx | 244 +- apps/docs/content/docs/headless/meta.json | 22 +- .../docs/headless/utils/find-neighbour.mdx | 12 +- .../content/docs/headless/utils/get-toc.mdx | 17 +- .../content/docs/headless/utils/meta.json | 4 +- .../content/docs/headless/utils/search.mdx | 131 +- apps/docs/content/docs/ui/blocks/layout.mdx | 72 +- apps/docs/content/docs/ui/blocks/page.mdx | 43 +- apps/docs/content/docs/ui/components/card.mdx | 20 +- .../content/docs/ui/components/codeblock.mdx | 50 +- .../content/docs/ui/components/heading.mdx | 28 +- .../docs/ui/components/roll-button.mdx | 18 +- apps/docs/content/docs/ui/images.mdx | 21 +- apps/docs/content/docs/ui/index.mdx | 286 +- .../content/docs/ui/internationalization.mdx | 143 +- apps/docs/content/docs/ui/meta.json | 30 +- apps/docs/content/docs/ui/theme.mdx | 115 +- apps/docs/contentlayer.config.ts | 6 +- apps/docs/next.config.js | 22 +- apps/docs/package.json | 88 +- apps/docs/postcss.config.js | 10 +- apps/docs/tailwind.config.js | 203 +- apps/docs/tsconfig.json | 66 +- apps/docs/utils/cn.ts | 2 +- apps/docs/utils/page-tree.ts | 26 +- .../app/[lang]/[[...slug]]/not-found.tsx | 2 +- .../website/app/[lang]/[[...slug]]/page.tsx | 133 +- examples/website/app/[lang]/layout.tsx | 115 +- examples/website/app/api/search/route.ts | 26 +- examples/website/app/i18n.tsx | 4 +- examples/website/app/layout.tsx | 75 - examples/website/app/provider.tsx | 44 +- examples/website/app/style.css | 6 +- examples/website/app/tree.ts | 20 +- .../website/content/docs/components/cards.mdx | 2 +- examples/website/content/docs/index.cn.mdx | 2 +- examples/website/content/docs/index.mdx | 2 +- .../content/docs/installation/remix.mdx | 63 +- examples/website/content/docs/meta-cn.json | 14 +- examples/website/content/docs/meta.json | 58 +- examples/website/content/docs/migrate/1.mdx | 63 +- examples/website/content/docs/migrate/2.mdx | 63 +- examples/website/contentlayer.config.ts | 6 +- examples/website/middleware.ts | 24 +- examples/website/next.config.js | 16 +- examples/website/package.json | 44 +- examples/website/tsconfig.json | 66 +- package.json | 56 +- packages/next-docs-ui/README.md | 21 +- packages/next-docs-ui/css/codeblock.css | 174 +- packages/next-docs-ui/css/styles.css | 94 +- packages/next-docs-ui/package.json | 191 +- packages/next-docs-ui/postcss.config.js | 16 +- .../src/components/breadcrumb.tsx | 62 +- .../src/components/dialog/search.tsx | 139 +- packages/next-docs-ui/src/components/index.ts | 10 +- .../next-docs-ui/src/components/mdx/card.tsx | 44 +- .../src/components/mdx/footer.tsx | 60 +- .../src/components/mdx/heading.tsx | 50 +- .../next-docs-ui/src/components/mdx/pre.tsx | 109 +- packages/next-docs-ui/src/components/nav.tsx | 94 +- .../src/components/roll-button.tsx | 77 +- .../src/components/search-toggle.tsx | 45 +- .../next-docs-ui/src/components/sidebar.tsx | 261 +- .../src/components/theme-toggle.tsx | 61 +- packages/next-docs-ui/src/components/toc.tsx | 100 +- .../src/components/ui/command.tsx | 235 +- .../next-docs-ui/src/components/ui/dialog.tsx | 193 +- .../src/components/ui/dropdown-menu.tsx | 327 ++- .../src/components/ui/scroll-area.tsx | 77 +- .../next-docs-ui/src/components/ui/select.tsx | 201 +- .../next-docs-ui/src/contentlayer/index.ts | 339 +-- .../src/contentlayer/mdx-plugins.js | 45 + packages/next-docs-ui/src/contexts/i18n.tsx | 14 +- packages/next-docs-ui/src/contexts/search.tsx | 71 +- packages/next-docs-ui/src/i18n.tsx | 61 +- packages/next-docs-ui/src/layout.tsx | 122 +- packages/next-docs-ui/src/mdx/index.tsx | 48 +- packages/next-docs-ui/src/not-found.tsx | 30 +- packages/next-docs-ui/src/page.tsx | 61 +- packages/next-docs-ui/src/provider.tsx | 35 +- packages/next-docs-ui/src/utils/cn.ts | 10 +- packages/next-docs-ui/tailwind.config.js | 205 +- packages/next-docs-ui/tsconfig.json | 36 +- packages/next-docs-ui/tsup.config.ts | 22 +- packages/next-docs/CHANGELOG.md | 3 +- packages/next-docs/README.md | 17 +- packages/next-docs/package.json | 213 +- packages/next-docs/src/breadcrumb/index.tsx | 82 +- .../next-docs/src/contentlayer/build-tree.ts | 319 ++- packages/next-docs/src/contentlayer/index.ts | 8 +- .../src/contentlayer/load-context.ts | 76 +- .../next-docs/src/contentlayer/types.d.ts | 62 +- packages/next-docs/src/contentlayer/utils.ts | 60 +- packages/next-docs/src/link/index.tsx | 67 +- packages/next-docs/src/middleware/index.ts | 64 +- packages/next-docs/src/search/index.ts | 62 +- .../next-docs/src/server/flexsearch-api.ts | 148 +- .../next-docs/src/server/get-toc-sanity.ts | 138 +- packages/next-docs/src/server/get-toc.ts | 106 +- packages/next-docs/src/server/index.ts | 10 +- packages/next-docs/src/server/tree-utils.ts | 46 +- packages/next-docs/src/server/types.ts | 42 +- packages/next-docs/src/sidebar/index.tsx | 131 +- packages/next-docs/src/toc/index.tsx | 91 +- .../next-docs/src/toc/use-anchor-observer.ts | 146 +- packages/next-docs/src/types.d.ts | 14 +- packages/next-docs/tsconfig.json | 32 +- packages/next-docs/tsup.config.ts | 18 +- pnpm-lock.yaml | 2528 ++++++++++++++++- pnpm-workspace.yaml | 6 +- prettier.config.js | 11 + tsconfig.json | 8 +- turbo.json | 58 +- 140 files changed, 7631 insertions(+), 5119 deletions(-) create mode 100644 .eslintrc.cjs create mode 100644 .prettierignore delete mode 100644 examples/website/app/layout.tsx create mode 100644 packages/next-docs-ui/src/contentlayer/mdx-plugins.js create mode 100644 prettier.config.js diff --git a/.changeset/config.json b/.changeset/config.json index 087972bee..381e90557 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,11 +1,11 @@ { - "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json", - "changelog": "@changesets/cli/changelog", - "commit": false, - "fixed": [["next-docs-zeta", "next-docs-ui"]], - "linked": [], - "access": "restricted", - "baseBranch": "main", - "updateInternalDependencies": "patch", - "ignore": ["website", "docs"] + "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [["next-docs-zeta", "next-docs-ui"]], + "linked": [], + "access": "restricted", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": ["website", "docs"] } diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 000000000..bc04a7f02 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,121 @@ +const TAILWIND_CONFIG = { + extends: ['plugin:tailwindcss/recommended'], + rules: { + // by prettier-plugin-tailwindcss + 'tailwindcss/classnames-order': 'off', + 'tailwindcss/enforces-negative-arbitrary-values': 'error', + 'tailwindcss/enforces-shorthand': 'error', + 'tailwindcss/migration-from-tailwind-2': 'error', + 'tailwindcss/no-custom-classname': 'error' + } +} + +/** @type {import('eslint').Linter.Config} */ +module.exports = { + root: true, + reportUnusedDisableDirectives: true, + ignorePatterns: ['next-env.d.ts'], + overrides: [ + // Rules for all files + { + files: '**/*.{js,jsx,cjs,mjs,ts,tsx,cts,mts}', + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier' + ], + rules: { + 'prefer-object-has-own': 'error', + 'logical-assignment-operators': [ + 'error', + 'always', + { enforceForIfStatements: true } + ], + 'no-negated-condition': 'off', + 'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }], + 'object-shorthand': ['error', 'always'], + + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/consistent-type-imports': 'error' + } + }, + // React.js rules + { + files: '{packages,examples,apps}/**', + extends: [ + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:@next/next/recommended' + ], + rules: { + // it breaks the use of component libraries + 'react/prop-types': 'off', + 'react/no-unknown-property': 'off', + 'react/jsx-curly-brace-presence': 'error', + 'react/jsx-boolean-value': 'error' + }, + settings: { + react: { version: 'detect' } + } + }, + { + ...TAILWIND_CONFIG, + files: 'packages/next-docs-ui/**', + settings: { + tailwindcss: { + config: 'packages/next-docs-ui/tailwind.config.js', + callees: ['cn', 'clsx'] + } + } + }, + { + ...TAILWIND_CONFIG, + files: 'apps/docs/**', + settings: { + tailwindcss: { + config: 'apps/docs/tailwind.config.js', + callees: ['cn', 'clsx', 'cva'], + whitelist: ['nd-not-prose'] + }, + next: { rootDir: 'apps/docs' } + } + }, + { + ...TAILWIND_CONFIG, + files: 'examples/website/**', + settings: { + tailwindcss: { + config: 'examples/website/tailwind.config.js' + }, + next: { rootDir: 'examples/website' } + } + }, + { + files: [ + 'prettier.config.js', + 'postcss.config.js', + 'tailwind.config.js', + 'next.config.js', + '.eslintrc.cjs' + ], + env: { + node: true + }, + rules: { + '@typescript-eslint/no-var-requires': 'off' + } + }, + { + files: 'packages/{next-docs-ui,next-docs}/**', + rules: { + '@next/next/no-html-link-for-pages': 'off' + } + }, + { + files: ['**/*.d.ts'], + rules: { + 'no-var': 'off' + } + } + ] +} diff --git a/.gitignore b/.gitignore index 95e77fa17..11344e42e 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ node_modules out dist .contentlayer +.eslintcache # production /build diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..fe7e23496 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +pnpm-lock.yaml +.changeset/*.md diff --git a/.vscode/settings.json b/.vscode/settings.json index 910a2a5f2..44aeb4060 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "typescript.tsdk": "node_modules\\typescript\\lib" + "typescript.tsdk": "node_modules\\typescript\\lib" } diff --git a/README.md b/README.md index 7e01778e9..58703a353 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,8 @@ npm install next-docs-zeta ### Next Docs UI -The framework built on top of Next Docs Zeta. It offers many out-of-the-box features along with a well-designed user interface. +The framework built on top of Next Docs Zeta. It offers many out-of-the-box +features along with a well-designed user interface. ```bash npm install next-docs-ui @@ -30,7 +31,8 @@ npm install next-docs-ui [![Open in CodeSandbox](https://img.shields.io/badge/Open%20in-CodeSandbox-blue?style=flat-square&logo=codesandbox)](https://githubbox.com/SonMooSans/next-docs-ui-template) -View the [Template](https://github.com/SonMooSans/next-docs-ui-template) repository on Github. +View the [Template](https://github.com/SonMooSans/next-docs-ui-template) +repository on Github. ### Sources diff --git a/apps/docs/app/api/search/route.ts b/apps/docs/app/api/search/route.ts index 0324a1282..abbdc3a6f 100644 --- a/apps/docs/app/api/search/route.ts +++ b/apps/docs/app/api/search/route.ts @@ -1,10 +1,10 @@ -import { allDocs } from "contentlayer/generated"; -import { initSearchAPI } from "next-docs-zeta/server"; +import { allDocs } from 'contentlayer/generated' +import { initSearchAPI } from 'next-docs-zeta/server' export const { GET } = initSearchAPI( - allDocs.map((docs) => ({ - title: docs.title, - content: docs.body.raw, - url: "/docs/" + docs.slug, - })) -); + allDocs.map(docs => ({ + title: docs.title, + content: docs.body.raw, + url: '/docs/' + docs.slug + })) +) diff --git a/apps/docs/app/docs/[mode]/[[...slug]]/not-found.tsx b/apps/docs/app/docs/[mode]/[[...slug]]/not-found.tsx index a027d3957..3c099c1d9 100644 --- a/apps/docs/app/docs/[mode]/[[...slug]]/not-found.tsx +++ b/apps/docs/app/docs/[mode]/[[...slug]]/not-found.tsx @@ -1 +1 @@ -export { default } from "next-docs-ui/not-found"; +export { default } from 'next-docs-ui/not-found' diff --git a/apps/docs/app/docs/[mode]/[[...slug]]/page.tsx b/apps/docs/app/docs/[mode]/[[...slug]]/page.tsx index 5b241b582..9df2328b3 100644 --- a/apps/docs/app/docs/[mode]/[[...slug]]/page.tsx +++ b/apps/docs/app/docs/[mode]/[[...slug]]/page.tsx @@ -1,150 +1,141 @@ -import { allDocs } from "contentlayer/generated"; -import { notFound, redirect } from "next/navigation"; -import { getTree } from "@/utils/page-tree"; - -import { findNeighbour, getTableOfContents } from "next-docs-zeta/server"; -import { getMDXComponent } from "next-contentlayer/hooks"; -import React from "react"; -import { DocsPage } from "next-docs-ui/page"; import { - Link, - Pre, - Heading, - Card, - Cards, - MDXContent, - Table, - Image, -} from "next-docs-ui/mdx"; + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger +} from '@/components/ui/accordion' +import { getTree } from '@/utils/page-tree' +import { allDocs } from 'contentlayer/generated' +import type { Metadata } from 'next' +import { getMDXComponent } from 'next-contentlayer/hooks' +import { RollButton } from 'next-docs-ui/components' import { - Accordion, - AccordionTrigger, - AccordionItem, - AccordionContent, -} from "@/components/ui/accordion"; -import { RollButton } from "next-docs-ui/components"; -import { getPageUrl } from "next-docs-zeta/contentlayer"; - -import type { Metadata } from "next"; + Card, + Cards, + Heading, + Image, + Link, + MDXContent, + Pre, + Table +} from 'next-docs-ui/mdx' +import { DocsPage } from 'next-docs-ui/page' +import { getPageUrl } from 'next-docs-zeta/contentlayer' +import { findNeighbour, getTableOfContents } from 'next-docs-zeta/server' +import { notFound, redirect } from 'next/navigation' type Param = { - mode: string; - slug?: string[]; -}; + mode: string + slug?: string[] +} export default async function Page({ params }: { params: Param }) { - const tree = getTree(params.mode); - const path = [params.mode, ...(params.slug ?? [])].join("/"); - const page = allDocs.find((page) => page.slug === path); + const tree = getTree(params.mode) + const path = [params.mode, ...(params.slug ?? [])].join('/') + const page = allDocs.find(page => page.slug === path) - if (params.mode !== "ui" && params.mode !== "headless") { - redirect(`/docs/headless/${path}`); - } + if (params.mode !== 'ui' && params.mode !== 'headless') { + redirect(`/docs/headless/${path}`) + } - if (page == null) { - notFound(); - } + if (page == null) { + notFound() + } - const toc = await getTableOfContents(page.body.raw); - const MDX = getMDXComponent(page.body.code); - const url = getPageUrl(page.slug.split("/"), "/docs"); - const neighbours = findNeighbour(tree, url); + const toc = await getTableOfContents(page.body.raw) + const MDX = getMDXComponent(page.body.code) + const url = getPageUrl(page.slug.split('/'), '/docs') + const neighbours = findNeighbour(tree, url) - return ( - - - Edit this Page -> - - - } - > - -
-

- {page.title} -

-
- , - Cards: (props) => , - a: (props) => , - pre: (props) =>
,
-                        img: (props) => ,
-                        h1: (props) => ,
-                        h2: (props) => ,
-                        h3: (props) => ,
-                        h4: (props) => ,
-                        h5: (props) => ,
-                        h6: (props) => ,
-                        table: (props) => ,
-                        Accordion: (props) => ,
-                        AccordionTrigger: (props) => (
-                            
-                        ),
-                        AccordionItem: (props) => ,
-                        AccordionContent: (props) => (
-                            
-                        ),
-                        blockquote: (props) => (
-                            
- {props.children} -
- ), - RollButton: (props) => , - }} - /> - - - ); + return ( + + + Edit this Page -> + + + } + > + +
+

{page.title}

+
+ , + Cards: props => , + a: props => , + pre: props =>
,
+            img: props => ,
+            h1: props => ,
+            h2: props => ,
+            h3: props => ,
+            h4: props => ,
+            h5: props => ,
+            h6: props => ,
+            table: props => 
, + Accordion: props => , + AccordionTrigger: props => , + AccordionItem: props => , + AccordionContent: props => , + blockquote: props => ( +
+ {props.children} +
+ ), + RollButton: props => + }} + /> + + + ) } export function generateMetadata({ params }: { params: Param }): Metadata { - const path = [params.mode, ...(params.slug ?? [])].join("/"); - const page = allDocs.find((page) => page.slug === path); + const path = [params.mode, ...(params.slug ?? [])].join('/') + const page = allDocs.find(page => page.slug === path) - if (page == null) return {}; + if (page == null) return {} - const description = - page.description ?? - "The headless ui library for building documentation websites"; + const description = + page.description ?? + 'The headless ui library for building documentation websites' - return { - title: page.title, - description: description, - openGraph: { - url: "https://next-docs-zeta.vercel.app", - title: page.title, - description: description, - images: "/banner.png", - siteName: "Next Docs", - }, - twitter: { - card: "summary_large_image", - creator: "@money_is_shark", - title: page.title, - description: description, - images: "/banner.png", - }, - }; + return { + title: page.title, + description, + openGraph: { + url: 'https://next-docs-zeta.vercel.app', + title: page.title, + description, + images: '/banner.png', + siteName: 'Next Docs' + }, + twitter: { + card: 'summary_large_image', + creator: '@money_is_shark', + title: page.title, + description, + images: '/banner.png' + } + } } export function generateStaticParams() { - return allDocs.map((docs) => { - const [mode, ...slugs] = docs.slug.split("/"); + return allDocs.map(docs => { + const [mode, ...slugs] = docs.slug.split('/') - return { - slug: slugs, - mode, - }; - }); + return { + slug: slugs, + mode + } + }) } diff --git a/apps/docs/app/docs/[mode]/layout.tsx b/apps/docs/app/docs/[mode]/layout.tsx index 84d86dc39..edf4d041b 100644 --- a/apps/docs/app/docs/[mode]/layout.tsx +++ b/apps/docs/app/docs/[mode]/layout.tsx @@ -1,46 +1,46 @@ -import { ReactNode } from "react"; -import { getTree } from "@/utils/page-tree"; -import { DocsLayout } from "next-docs-ui/layout"; -import { cn } from "@/utils/cn"; +import { cn } from '@/utils/cn' +import { getTree } from '@/utils/page-tree' +import { DocsLayout } from 'next-docs-ui/layout' +import type { ReactNode } from 'react' export default function Layout({ - params, - children, + params, + children }: { - params: { mode: string }; - children: ReactNode; + params: { mode: string } + children: ReactNode }) { - const filteredTree = getTree(params.mode); + const filteredTree = getTree(params.mode) - return ( -
+ +
+
- -
-
-
- {children} - -
- ); + /> + + {children} + + + ) } export function generateStaticParams() { - return [ - { - mode: "ui", - }, - { - mode: "headless", - }, - ]; + return [ + { + mode: 'ui' + }, + { + mode: 'headless' + } + ] } diff --git a/apps/docs/app/docs/page.tsx b/apps/docs/app/docs/page.tsx index f7c2aaeff..5bf0df46d 100644 --- a/apps/docs/app/docs/page.tsx +++ b/apps/docs/app/docs/page.tsx @@ -1,58 +1,53 @@ -import { cn } from "@/utils/cn"; -import { cva } from "class-variance-authority"; -import { LayoutIcon, LibraryIcon } from "lucide-react"; -import Link from "next/link"; +import { cn } from '@/utils/cn' +import { cva } from 'class-variance-authority' +import { LayoutIcon, LibraryIcon } from 'lucide-react' +import Link from 'next/link' const item = cva( - "group relative overflow-hidden rounded-xl z-[2] p-px after:absolute after:-inset-px after:-z-[1] after:duration-300 after:transition-rotate-angle after:[--rotate-angle:-20deg] hover:after:[--rotate-angle:135deg]" -); + 'group relative overflow-hidden rounded-xl z-[2] p-px after:absolute after:-inset-px after:z-[-1] after:duration-300 after:transition-rotate-angle after:[--rotate-angle:-20deg] hover:after:[--rotate-angle:135deg]' +) export default function DocsRoot() { - return ( -
-
-
-
-

Choose One.

-
- -
- -

- Next Docs Zeta -

-

- The Headless UI Library for building documentation - websites. -

-
- + return ( +
+
+
+
+

Choose One.

+
+ +
+ +

Next Docs Zeta

+

+ The Headless UI Library for building documentation websites. +

+
+ - -
- -

- Next Docs UI -

-

- The Framework for building documentation websites - with well designed UI. -

-
- -
-
- ); + +
+ +

Next Docs UI

+

+ The Framework for building documentation websites with well + designed UI. +

+
+ +
+
+ ) } diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx index 3f698e844..3dcbcce8c 100644 --- a/apps/docs/app/layout.tsx +++ b/apps/docs/app/layout.tsx @@ -1,103 +1,100 @@ -import { Inter } from "next/font/google"; -import { ExternalLinkIcon, Star } from "lucide-react"; -import { RootProvider } from "next-docs-ui/provider"; -import { Nav } from "@/components/nav"; - -import "next-docs-ui/style.css"; -import "./style.css"; +import { Nav } from '@/components/nav' +import { ExternalLinkIcon, Star } from 'lucide-react' +import { RootProvider } from 'next-docs-ui/provider' +import { Inter } from 'next/font/google' +import 'next-docs-ui/style.css' +import './style.css' export const metadata = { + title: { + template: '%s | Next Docs', + default: 'Next Docs' + }, + description: 'The headless ui library for building a documentation website', + openGraph: { + url: 'https://next-docs-zeta.vercel.app', title: { - template: "%s | Next Docs", - default: "Next Docs", - }, - description: "The headless ui library for building a documentation website", - openGraph: { - url: "https://next-docs-zeta.vercel.app", - title: { - template: "%s | Next Docs", - default: "Next Docs", - }, - description: - "The headless ui library for building a documentation website", - images: "/banner.png", - siteName: "Next Docs", + template: '%s | Next Docs', + default: 'Next Docs' }, - twitter: { - card: "summary_large_image", - creator: "@money_is_shark", - title: { - template: "%s | Next Docs", - default: "Next Docs", - }, - description: - "The headless ui library for building a documentation website", - images: "/banner.png", + description: 'The headless ui library for building a documentation website', + images: '/banner.png', + siteName: 'Next Docs' + }, + twitter: { + card: 'summary_large_image', + creator: '@money_is_shark', + title: { + template: '%s | Next Docs', + default: 'Next Docs' }, - metadataBase: - process.env.NODE_ENV === "development" - ? "http://localhost:3000" - : `https://${process.env.VERCEL_URL}`, -}; + description: 'The headless ui library for building a documentation website', + images: '/banner.png' + }, + metadataBase: + process.env.NODE_ENV === 'development' + ? 'http://localhost:3000' + : `https://${process.env.VERCEL_URL}` +} const inter = Inter({ - subsets: ["latin"], -}); + subsets: ['latin'] +}) export default function RootLayout({ - children, + children }: { - children: React.ReactNode; + children: React.ReactNode }) { - return ( - - - -
, - pre: (props) =>
,
-                        a: (props) => ,
-                        h1: (props) => ,
-                        h2: (props) => ,
-                        h3: (props) => ,
-                        h4: (props) => ,
-                        h5: (props) => ,
-                        h6: (props) => ,
-                        img: (props) => ,
-                        Card: (props) => ,
-                        Cards: (props) => ,
-                    }}
-                />
-            
-        
-    );
+  const path = (params.slug ?? []).join('/')
+  const page = allDocs.find(page => page.slug === path)
+
+  if (page == null) {
+    notFound()
+  }
+
+  const toc = await getTableOfContents(page.body.raw)
+  const MDX = getMDXComponent(page.body.code)
+
+  // We don't provide MDX components by default
+  return (
+    
+      
+        

{page.title}

+
, + pre: props =>
,
+            a: props => ,
+            h1: props => ,
+            h2: props => ,
+            h3: props => ,
+            h4: props => ,
+            h5: props => ,
+            h6: props => ,
+            img: props => ,
+            Card: props => ,
+            Cards: props => 
+          }}
+        />
+      
+    
+  )
 }
 
 export async function generateStaticParams(): Promise<{ slug: string[] }[]> {
-    return allDocs.map((docs) => ({
-        slug: docs.slug.split("/"),
-    }));
+  return allDocs.map(docs => ({
+    slug: docs.slug.split('/')
+  }))
 }
 ```
 
@@ -216,7 +218,7 @@ export async function generateStaticParams(): Promise<{ slug: string[] }[]> {
 
 
 ```tsx title="app/docs/[[...slug]]/not-found.tsx"
-export { default } from "next-docs-ui/not-found";
+export { default } from 'next-docs-ui/not-found'
 ```
 
 
@@ -227,16 +229,16 @@ export { default } from "next-docs-ui/not-found";
 
 
 ```tsx title="app/api/search/route.ts"
-import { allDocs } from "contentlayer/generated";
-import { initSearchAPI } from "next-docs-zeta/server";
+import { allDocs } from 'contentlayer/generated'
+import { initSearchAPI } from 'next-docs-zeta/server'
 
 export const { GET } = initSearchAPI(
-    allDocs.map((docs) => ({
-        title: docs.title,
-        content: docs.body.raw,
-        url: docs.url,
-    }))
-);
+  allDocs.map(docs => ({
+    title: docs.title,
+    content: docs.body.raw,
+    url: docs.url
+  }))
+)
 ```
 
 
@@ -265,24 +267,24 @@ npm run dev
 ## Learn More
 
 
-    
-    
-    
-    
+  
+  
+  
+  
 
diff --git a/apps/docs/content/docs/ui/internationalization.mdx b/apps/docs/content/docs/ui/internationalization.mdx
index 946638f79..d0340987c 100644
--- a/apps/docs/content/docs/ui/internationalization.mdx
+++ b/apps/docs/content/docs/ui/internationalization.mdx
@@ -3,43 +3,48 @@ title: Internationalization
 description: Learn more implement internationalization in Next Docs UI
 ---
 
-Next Docs UI supports I18n routing based on **Zeta**. Please refer to this [guide](/docs/headless/contentlayer/internationalization) to setup basic configurations and learn how to structure the documents.
+Next Docs UI supports I18n routing based on **Zeta**. Please refer to this
+[guide](/docs/headless/contentlayer/internationalization) to setup basic
+configurations and learn how to structure the documents.
 
-Ensure you have your page tree, layout and middleware ready before getting started.
+Ensure you have your page tree, layout and middleware ready before getting
+started.
 
 ## Create Provider
 
 A `I18nProvider` is needed for internationalization.
 
-Assume your files are nested under `/app/[lang]`, where the 'lang' parameter is at index 1.
+Assume your files are nested under `/app/[lang]`, where the 'lang' parameter is
+at index 1.
 
 ```tsx
-"use client";
-import { I18nProvider } from "next-docs-ui/i18n";
-import { useParams, usePathname, useRouter } from "next/navigation";
-import { ReactNode, useCallback } from "react";
-import { defaultLanguage } from "@/i18n";
+'use client'
+
+import { defaultLanguage } from '@/i18n'
+import { I18nProvider } from 'next-docs-ui/i18n'
+import { useParams, usePathname, useRouter } from 'next/navigation'
+import { ReactNode, useCallback } from 'react'
 
 export function ClientI18nProvider({ children }: { children: ReactNode }) {
-    const router = useRouter();
-    const pathname = usePathname();
-    const { lang } = useParams() as { lang?: string };
-    const onChange = useCallback(
-        (v: string) => {
-            const segments = pathname.split("/");
-
-            segments[1] = v; // update parameter
-
-            router.push(segments.join("/"));
-        },
-        [router, pathname]
-    );
-
-    return (
-        
-            {children}
-        
-    );
+  const router = useRouter()
+  const pathname = usePathname()
+  const { lang } = useParams() as { lang?: string }
+  const onChange = useCallback(
+    (v: string) => {
+      const segments = pathname.split('/')
+
+      segments[1] = v // update parameter
+
+      router.push(segments.join('/'))
+    },
+    [router, pathname]
+  )
+
+  return (
+    
+      {children}
+    
+  )
 }
 ```
 
@@ -47,57 +52,59 @@ Then, wrap the root provider inside of your i18n provider.
 
 ```tsx
 
-    ...
+  ...
 
 ```
 
 ## Add Language Switch
 
-To allow users changing their language, you can put the `` component to sidebar same as following:
+To allow users changing their language, you can put the ``
+component to sidebar same as following:
 
 ```tsx title="/[lang]/docs/layout.tsx"
-import { DocsLayout } from "next-docs-ui/layout";
-import { trees } from "@/tree";
-import { ReactNode } from "react";
-import { LanguageSelect } from "next-docs-ui/i18n";
+import { trees } from '@/tree'
+import { LanguageSelect } from 'next-docs-ui/i18n'
+import { DocsLayout } from 'next-docs-ui/layout'
+import { ReactNode } from 'react'
 
 export default function Layout({
-    params,
-    children,
+  params,
+  children
 }: {
-    params: { lang: string };
-    children: ReactNode;
+  params: { lang: string }
+  children: ReactNode
 }) {
-    const tree = trees[params.lang];
-
-    return (
-        
+  const tree = trees[params.lang]
+
+  return (
+    
-            {children}
-        
-    );
+          ]}
+        />
+      }
+    >
+      {children}
+    
+  )
 }
 ```
 
 ## Final Step
 
-Replace all usage to original `tree` with `trees[lang]` and check if there's any legacy usage.
+Replace all usage to original `tree` with `trees[lang]` and check if there's any
+legacy usage.
 
 **Before**
 
@@ -117,13 +124,13 @@ Generate parameters for every language and page.
 
 ```tsx
 export async function generateStaticParams(): Promise<
-    { lang: string; slug: string[] }[]
+  { lang: string; slug: string[] }[]
 > {
-    return languages.flatMap((lang) =>
-        getPages(lang)!.map((docs) => ({
-            slug: docs.slug.split("/"),
-            lang: lang,
-        }))
-    );
+  return languages.flatMap(lang =>
+    getPages(lang)!.map(docs => ({
+      slug: docs.slug.split('/'),
+      lang: lang
+    }))
+  )
 }
 ```
diff --git a/apps/docs/content/docs/ui/meta.json b/apps/docs/content/docs/ui/meta.json
index 983549592..c4bc16bb9 100644
--- a/apps/docs/content/docs/ui/meta.json
+++ b/apps/docs/content/docs/ui/meta.json
@@ -1,17 +1,17 @@
 {
-    "pages": [
-        "---Guide---",
-        "index",
-        "theme",
-        "images",
-        "internationalization",
-        "---Components---",
-        "components/codeblock",
-        "components/card",
-        "components/heading",
-        "components/roll-button",
-        "---Blocks---",
-        "blocks/page",
-        "blocks/layout"
-    ]
+  "pages": [
+    "---Guide---",
+    "index",
+    "theme",
+    "images",
+    "internationalization",
+    "---Components---",
+    "components/codeblock",
+    "components/card",
+    "components/heading",
+    "components/roll-button",
+    "---Blocks---",
+    "blocks/page",
+    "blocks/layout"
+  ]
 }
diff --git a/apps/docs/content/docs/ui/theme.mdx b/apps/docs/content/docs/ui/theme.mdx
index 29746c1c7..a355ba777 100644
--- a/apps/docs/content/docs/ui/theme.mdx
+++ b/apps/docs/content/docs/ui/theme.mdx
@@ -3,22 +3,23 @@ title: Theming
 description: Add Theme to Next Docs UI
 ---
 
-The styling system is based on [Shadcn UI](https://ui.shadcn.com), allowing you to overwrite css variables.
+The styling system is based on [Shadcn UI](https://ui.shadcn.com), allowing you
+to overwrite css variables.
 
 ## Example
 
 ```css title="global.css"
 :root {
-    /* hsl colors */
-    /* use whitespace instead of comma */
-    --background: 0 0% 100%;
-    --foreground: 222.2 47.4% 11.2%;
+  /* hsl colors */
+  /* use whitespace instead of comma */
+  --background: 0 0% 100%;
+  --foreground: 222.2 47.4% 11.2%;
 
-    --muted: 210 40% 96.1%;
-    --muted-foreground: 215.4 16.3% 46.9%;
+  --muted: 210 40% 96.1%;
+  --muted-foreground: 215.4 16.3% 46.9%;
 
-    --popover: 0 0% 100%;
-    --popover-foreground: 222.2 47.4% 11.2%;
+  --popover: 0 0% 100%;
+  --popover-foreground: 222.2 47.4% 11.2%;
 }
 ```
 
@@ -31,67 +32,67 @@ The styling system is based on [Shadcn UI](https://ui.shadcn.com), allowing you
 
 ```css
 :root {
-    --background: 0 0% 100%;
-    --foreground: 222.2 47.4% 11.2%;
+  --background: 0 0% 100%;
+  --foreground: 222.2 47.4% 11.2%;
 
-    --muted: 210 40% 96.1%;
-    --muted-foreground: 215.4 16.3% 46.9%;
+  --muted: 210 40% 96.1%;
+  --muted-foreground: 215.4 16.3% 46.9%;
 
-    --popover: 0 0% 100%;
-    --popover-foreground: 222.2 47.4% 11.2%;
+  --popover: 0 0% 100%;
+  --popover-foreground: 222.2 47.4% 11.2%;
 
-    --card: 0 0% 100%;
-    --card-foreground: 222.2 47.4% 11.2%;
+  --card: 0 0% 100%;
+  --card-foreground: 222.2 47.4% 11.2%;
 
-    --border: 214.3 31.8% 91.4%;
-    --input: 214.3 31.8% 91.4%;
+  --border: 214.3 31.8% 91.4%;
+  --input: 214.3 31.8% 91.4%;
 
-    --primary: 222.2 47.4% 11.2%;
-    --primary-foreground: 210 40% 98%;
+  --primary: 222.2 47.4% 11.2%;
+  --primary-foreground: 210 40% 98%;
 
-    --secondary: 210 40% 96.1%;
-    --secondary-foreground: 222.2 47.4% 11.2%;
+  --secondary: 210 40% 96.1%;
+  --secondary-foreground: 222.2 47.4% 11.2%;
 
-    --accent: 210 40% 96.1%;
-    --accent-foreground: 222.2 47.4% 11.2%;
+  --accent: 210 40% 96.1%;
+  --accent-foreground: 222.2 47.4% 11.2%;
 
-    --destructive: 0 100% 50%;
-    --destructive-foreground: 210 40% 98%;
+  --destructive: 0 100% 50%;
+  --destructive-foreground: 210 40% 98%;
 
-    --ring: 215 20.2% 65.1%;
+  --ring: 215 20.2% 65.1%;
 
-    --radius: 0.5rem;
+  --radius: 0.5rem;
 }
 
 .dark {
-    --background: 224 71% 4%;
-    --foreground: 213 31% 91%;
+  --background: 224 71% 4%;
+  --foreground: 213 31% 91%;
 
-    --muted: 223 47% 11%;
-    --muted-foreground: 215.4 16.3% 56.9%;
+  --muted: 223 47% 11%;
+  --muted-foreground: 215.4 16.3% 56.9%;
 
-    --popover: 224 71% 4%;
-    --popover-foreground: 215 20.2% 65.1%;
+  --popover: 224 71% 4%;
+  --popover-foreground: 215 20.2% 65.1%;
 
-    --card: 224 71% 4%;
-    --card-foreground: 213 31% 91%;
+  --card: 224 71% 4%;
+  --card-foreground: 213 31% 91%;
 
-    --border: 216 34% 17%;
-    --input: 216 34% 17%;
+  --border: 216 34% 17%;
+  --input: 216 34% 17%;
 
-    --primary: 210 40% 98%;
-    --primary-foreground: 222.2 47.4% 1.2%;
+  --primary: 210 40% 98%;
+  --primary-foreground: 222.2 47.4% 1.2%;
 
-    --secondary: 222.2 47.4% 11.2%;
-    --secondary-foreground: 210 40% 98%;
+  --secondary: 222.2 47.4% 11.2%;
+  --secondary-foreground: 210 40% 98%;
 
-    --accent: 216 34% 17%;
-    --accent-foreground: 210 40% 98%;
+  --accent: 216 34% 17%;
+  --accent-foreground: 210 40% 98%;
 
-    --destructive: 0 63% 31%;
-    --destructive-foreground: 210 40% 98%;
+  --destructive: 0 63% 31%;
+  --destructive-foreground: 210 40% 98%;
 
-    --ring: 216 34% 17%;
+  --ring: 216 34% 17%;
 }
 ```
 
@@ -101,24 +102,30 @@ The styling system is based on [Shadcn UI](https://ui.shadcn.com), allowing you
 
 ## Global Styles
 
-By importing `next-docs-ui/style.css` the default border, text and background colors will be changed.
+By importing `next-docs-ui/style.css` the default border, text and background
+colors will be changed.
 
-CSS selectors such as `[data-rehype-pretty-code-fragment]` has special meanings for codeblock styling.
+CSS selectors such as `[data-rehype-pretty-code-fragment]` has special meanings
+for codeblock styling.
 
 ## Tailwind CSS
 
-You can use Next Docs UI with Tailwind CSS, and copy the Tailwind [configuration](https://ui.shadcn.com/docs/installation/manual#configure-tailwindconfigjs) from Shadcn UI.
+You can use Next Docs UI with Tailwind CSS, and copy the Tailwind
+[configuration](https://ui.shadcn.com/docs/installation/manual#configure-tailwindconfigjs)
+from Shadcn UI.
 
-Since Next Docs UI uses Tailwind CSS for styling, the `nd-` prefix is added to all classes in order to prevent conflicts.
+Since Next Docs UI uses Tailwind CSS for styling, the `nd-` prefix is added to
+all classes in order to prevent conflicts.
 
 ### Fix Preflight
 
-Some global styles might be overwritten by [Tailwind CSS Preflight](https://tailwindcss.com/docs/preflight).
+Some global styles might be overwritten by
+[Tailwind CSS Preflight](https://tailwindcss.com/docs/preflight).
 
 Please add the following to your `style.css`.
 
 ```css
 * {
-    border-color: hsl(var(--border));
+  border-color: hsl(var(--border));
 }
 ```
diff --git a/apps/docs/contentlayer.config.ts b/apps/docs/contentlayer.config.ts
index 665ee7fd9..bab63b581 100644
--- a/apps/docs/contentlayer.config.ts
+++ b/apps/docs/contentlayer.config.ts
@@ -1,4 +1,4 @@
-import { makeSource } from "contentlayer/source-files";
-import { defaultConfig } from "next-docs-ui/contentlayer";
+import { makeSource } from 'contentlayer/source-files'
+import { defaultConfig } from 'next-docs-ui/contentlayer'
 
-export default makeSource(defaultConfig);
+export default makeSource(defaultConfig)
diff --git a/apps/docs/next.config.js b/apps/docs/next.config.js
index 5a3f46742..86b58c145 100644
--- a/apps/docs/next.config.js
+++ b/apps/docs/next.config.js
@@ -1,16 +1,16 @@
-const withAnalyzer = require("@next/bundle-analyzer")({
-    enabled: process.env.ANALYZE === "true",
-});
+const withAnalyzer = require('@next/bundle-analyzer')({
+  enabled: process.env.ANALYZE === 'true'
+})
 
 /** @type {import('next').NextConfig} */
 const config = {
-    pageExtensions: ["ts", "tsx", "js", "jsx", "md", "mdx"],
-    reactStrictMode: true,
-    images: {
-        domains: ["i.pravatar.cc"],
-    },
-};
+  pageExtensions: ['ts', 'tsx', 'js', 'jsx', 'md', 'mdx'],
+  reactStrictMode: true,
+  images: {
+    domains: ['i.pravatar.cc']
+  }
+}
 
-const { withContentlayer } = require("next-contentlayer");
+const { withContentlayer } = require('next-contentlayer')
 
-module.exports = withAnalyzer(withContentlayer(config));
+module.exports = withAnalyzer(withContentlayer(config))
diff --git a/apps/docs/package.json b/apps/docs/package.json
index 93fdde34c..6399be452 100644
--- a/apps/docs/package.json
+++ b/apps/docs/package.json
@@ -1,46 +1,46 @@
 {
-    "name": "docs",
-    "version": "0.1.3",
-    "private": true,
-    "scripts": {
-        "dev": "next dev",
-        "build": "next build",
-        "start": "next start",
-        "lint": "next lint"
-    },
-    "dependencies": {
-        "@radix-ui/react-accordion": "^1.1.1",
-        "@radix-ui/react-collapsible": "^1.0.3",
-        "@radix-ui/react-dialog": "^1.0.3",
-        "@radix-ui/react-select": "^1.2.1",
-        "autoprefixer": "10.4.14",
-        "class-variance-authority": "^0.6.0",
-        "clsx": "^1.2.1",
-        "cmdk": "^0.2.0",
-        "contentlayer": "^0.3.4",
-        "lucide-react": "^0.190.0",
-        "next": "13.4.12",
-        "next-contentlayer": "^0.3.4",
-        "next-docs-ui": "workspace:*",
-        "next-docs-zeta": "workspace:*",
-        "next-themes": "^0.2.1",
-        "postcss": "8.4.23",
-        "react": "18.2.0",
-        "react-dom": "18.2.0",
-        "rehype-img-size": "^1.0.1",
-        "rehype-pretty-code": "^0.9.5",
-        "rehype-slug": "^5.1.0",
-        "remark-gfm": "^3.0.1",
-        "swr": "^2.1.5",
-        "tailwind-merge": "^1.12.0"
-    },
-    "devDependencies": {
-        "@next/bundle-analyzer": "^13.4.1",
-        "@types/flexsearch": "0.7.3",
-        "@types/node": "18.16.3",
-        "@types/react": "18.2.0",
-        "@types/react-dom": "18.2.1",
-        "tailwindcss": "3.3.2",
-        "tailwindcss-animate": "^1.0.5"
-    }
+  "name": "docs",
+  "version": "0.1.3",
+  "private": true,
+  "scripts": {
+    "dev": "next dev",
+    "build": "next build",
+    "start": "next start",
+    "lint": "next lint"
+  },
+  "dependencies": {
+    "@radix-ui/react-accordion": "^1.1.1",
+    "@radix-ui/react-collapsible": "^1.0.3",
+    "@radix-ui/react-dialog": "^1.0.3",
+    "@radix-ui/react-select": "^1.2.1",
+    "autoprefixer": "10.4.14",
+    "class-variance-authority": "^0.6.0",
+    "clsx": "^1.2.1",
+    "cmdk": "^0.2.0",
+    "contentlayer": "^0.3.4",
+    "lucide-react": "^0.190.0",
+    "next": "13.4.12",
+    "next-contentlayer": "^0.3.4",
+    "next-docs-ui": "workspace:*",
+    "next-docs-zeta": "workspace:*",
+    "next-themes": "^0.2.1",
+    "postcss": "8.4.23",
+    "react": "18.2.0",
+    "react-dom": "18.2.0",
+    "rehype-img-size": "^1.0.1",
+    "rehype-pretty-code": "^0.9.5",
+    "rehype-slug": "^5.1.0",
+    "remark-gfm": "^3.0.1",
+    "swr": "^2.1.5",
+    "tailwind-merge": "^1.12.0"
+  },
+  "devDependencies": {
+    "@next/bundle-analyzer": "^13.4.1",
+    "@types/flexsearch": "0.7.3",
+    "@types/node": "18.16.3",
+    "@types/react": "18.2.0",
+    "@types/react-dom": "18.2.1",
+    "tailwindcss": "3.3.2",
+    "tailwindcss-animate": "^1.0.5"
+  }
 }
diff --git a/apps/docs/postcss.config.js b/apps/docs/postcss.config.js
index 67cdf1a55..85f717cc0 100644
--- a/apps/docs/postcss.config.js
+++ b/apps/docs/postcss.config.js
@@ -1,6 +1,6 @@
 module.exports = {
-    plugins: {
-        tailwindcss: {},
-        autoprefixer: {},
-    },
-};
+  plugins: {
+    tailwindcss: {},
+    autoprefixer: {}
+  }
+}
diff --git a/apps/docs/tailwind.config.js b/apps/docs/tailwind.config.js
index 25a1eac57..92fe2387b 100644
--- a/apps/docs/tailwind.config.js
+++ b/apps/docs/tailwind.config.js
@@ -1,106 +1,105 @@
 /** @type {import('tailwindcss').Config} */
 module.exports = {
-    darkMode: "class",
-    content: [
-        "./components/**/*.{ts,tsx}",
-        "./app/**/*.{ts,tsx}",
-        "./content/**/*.mdx",
-    ],
-    theme: {
-        container: {
-            center: true,
-            padding: "2rem",
-            screens: {
-                "2xl": "1200px",
-            },
+  darkMode: 'class',
+  content: [
+    './components/**/*.{ts,tsx}',
+    './app/**/*.{ts,tsx}',
+    './content/**/*.mdx'
+  ],
+  theme: {
+    container: {
+      center: true,
+      padding: '2rem',
+      screens: {
+        '2xl': '1200px'
+      }
+    },
+    extend: {
+      backgroundImage: {
+        'gradient-to-animated':
+          'linear-gradient(var(--rotate-angle),var(--tw-gradient-stops))',
+        'gradient-radial': 'radial-gradient(circle, var(--tw-gradient-stops))',
+        'gradient-radial-top':
+          'radial-gradient(40% 60% at top, var(--tw-gradient-stops))'
+      },
+      colors: {
+        border: 'hsl(var(--border))',
+        input: 'hsl(var(--input))',
+        ring: 'hsl(var(--ring))',
+        background: 'hsl(var(--background))',
+        foreground: 'hsl(var(--foreground))',
+        primary: {
+          DEFAULT: 'hsl(var(--primary))',
+          foreground: 'hsl(var(--primary-foreground))'
         },
-        extend: {
-            backgroundImage: {
-                "gradient-to-animated":
-                    "linear-gradient(var(--rotate-angle),var(--tw-gradient-stops))",
-                "gradient-radial":
-                    "radial-gradient(circle, var(--tw-gradient-stops))",
-                "gradient-radial-top":
-                    "radial-gradient(40% 60% at top, var(--tw-gradient-stops))",
-            },
-            colors: {
-                border: "hsl(var(--border))",
-                input: "hsl(var(--input))",
-                ring: "hsl(var(--ring))",
-                background: "hsl(var(--background))",
-                foreground: "hsl(var(--foreground))",
-                primary: {
-                    DEFAULT: "hsl(var(--primary))",
-                    foreground: "hsl(var(--primary-foreground))",
-                },
-                secondary: {
-                    DEFAULT: "hsl(var(--secondary))",
-                    foreground: "hsl(var(--secondary-foreground))",
-                },
-                destructive: {
-                    DEFAULT: "hsl(var(--destructive))",
-                    foreground: "hsl(var(--destructive-foreground))",
-                },
-                muted: {
-                    DEFAULT: "hsl(var(--muted))",
-                    foreground: "hsl(var(--muted-foreground))",
-                },
-                accent: {
-                    DEFAULT: "hsl(var(--accent))",
-                    foreground: "hsl(var(--accent-foreground))",
-                },
-                popover: {
-                    DEFAULT: "hsl(var(--popover))",
-                    foreground: "hsl(var(--popover-foreground))",
-                },
-                card: {
-                    DEFAULT: "hsl(var(--card))",
-                    foreground: "hsl(var(--card-foreground))",
-                },
-            },
-            transitionProperty: {
-                "rotate-angle": "--rotate-angle",
-            },
-            borderRadius: {
-                lg: "var(--radius)",
-                md: "calc(var(--radius) - 2px)",
-                sm: "calc(var(--radius) - 4px)",
-            },
-            keyframes: {
-                "accordion-down": {
-                    from: { height: 0 },
-                    to: { height: "var(--radix-accordion-content-height)" },
-                },
-                "accordion-up": {
-                    from: { height: "var(--radix-accordion-content-height)" },
-                    to: { height: 0 },
-                },
-                star: {
-                    "0%, 100%": {
-                        transform: "translateY(0) scale(var(--tw-scale-x))",
-                        opacity: 1,
-                    },
-                    "50%": {
-                        transform: "translateY(40px) scale(var(--tw-scale-x))",
-                        opacity: 0.2,
-                    },
-                },
-                heart: {
-                    "0%": {
-                        "stroke-dashoffset": 0,
-                    },
-                    "50%, 100%": {
-                        "stroke-dashoffset": 400,
-                    },
-                },
-            },
-            animation: {
-                star: "star 4s cubic-bezier(0.4, 0, 0.6, 1) infinite",
-                heart: "heart 1s linear infinite",
-                "accordion-down": "accordion-down 0.2s ease-out",
-                "accordion-up": "accordion-up 0.2s ease-out",
-            },
+        secondary: {
+          DEFAULT: 'hsl(var(--secondary))',
+          foreground: 'hsl(var(--secondary-foreground))'
         },
-    },
-    plugins: [require("tailwindcss-animate")],
-};
+        destructive: {
+          DEFAULT: 'hsl(var(--destructive))',
+          foreground: 'hsl(var(--destructive-foreground))'
+        },
+        muted: {
+          DEFAULT: 'hsl(var(--muted))',
+          foreground: 'hsl(var(--muted-foreground))'
+        },
+        accent: {
+          DEFAULT: 'hsl(var(--accent))',
+          foreground: 'hsl(var(--accent-foreground))'
+        },
+        popover: {
+          DEFAULT: 'hsl(var(--popover))',
+          foreground: 'hsl(var(--popover-foreground))'
+        },
+        card: {
+          DEFAULT: 'hsl(var(--card))',
+          foreground: 'hsl(var(--card-foreground))'
+        }
+      },
+      transitionProperty: {
+        'rotate-angle': '--rotate-angle'
+      },
+      borderRadius: {
+        lg: 'var(--radius)',
+        md: 'calc(var(--radius) - 2px)',
+        sm: 'calc(var(--radius) - 4px)'
+      },
+      keyframes: {
+        'accordion-down': {
+          from: { height: 0 },
+          to: { height: 'var(--radix-accordion-content-height)' }
+        },
+        'accordion-up': {
+          from: { height: 'var(--radix-accordion-content-height)' },
+          to: { height: 0 }
+        },
+        star: {
+          '0%, 100%': {
+            transform: 'translateY(0) scale(var(--tw-scale-x))',
+            opacity: 1
+          },
+          '50%': {
+            transform: 'translateY(40px) scale(var(--tw-scale-x))',
+            opacity: 0.2
+          }
+        },
+        heart: {
+          '0%': {
+            'stroke-dashoffset': 0
+          },
+          '50%, 100%': {
+            'stroke-dashoffset': 400
+          }
+        }
+      },
+      animation: {
+        star: 'star 4s cubic-bezier(0.4, 0, 0.6, 1) infinite',
+        heart: 'heart 1s linear infinite',
+        'accordion-down': 'accordion-down 0.2s ease-out',
+        'accordion-up': 'accordion-up 0.2s ease-out'
+      }
+    }
+  },
+  plugins: [require('tailwindcss-animate')]
+}
diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json
index bf25f78a0..db9ae4d79 100644
--- a/apps/docs/tsconfig.json
+++ b/apps/docs/tsconfig.json
@@ -1,36 +1,36 @@
 {
-    "compilerOptions": {
-        "baseUrl": ".",
-        "target": "ESNext",
-        "lib": ["dom", "dom.iterable", "esnext"],
-        "allowJs": true,
-        "skipLibCheck": true,
-        "strict": true,
-        "forceConsistentCasingInFileNames": true,
-        "noEmit": true,
-        "esModuleInterop": true,
-        "module": "esnext",
-        "moduleResolution": "node",
-        "resolveJsonModule": true,
-        "isolatedModules": true,
-        "jsx": "preserve",
-        "incremental": true,
-        "paths": {
-            "@/*": ["./*"],
-            "contentlayer/generated": ["./.contentlayer/generated"]
-        },
-        "plugins": [
-            {
-                "name": "next"
-            }
-        ]
+  "compilerOptions": {
+    "baseUrl": ".",
+    "target": "ESNext",
+    "lib": ["dom", "dom.iterable", "esnext"],
+    "allowJs": true,
+    "skipLibCheck": true,
+    "strict": true,
+    "forceConsistentCasingInFileNames": true,
+    "noEmit": true,
+    "esModuleInterop": true,
+    "module": "esnext",
+    "moduleResolution": "node",
+    "resolveJsonModule": true,
+    "isolatedModules": true,
+    "jsx": "preserve",
+    "incremental": true,
+    "paths": {
+      "@/*": ["./*"],
+      "contentlayer/generated": ["./.contentlayer/generated"]
     },
-    "include": [
-        "next-env.d.ts",
-        "**/*.ts",
-        "**/*.tsx",
-        ".next/types/**/*.ts",
-        ".contentlayer/generated"
-    ],
-    "exclude": ["node_modules"]
+    "plugins": [
+      {
+        "name": "next"
+      }
+    ]
+  },
+  "include": [
+    "next-env.d.ts",
+    "**/*.ts",
+    "**/*.tsx",
+    ".next/types/**/*.ts",
+    ".contentlayer/generated"
+  ],
+  "exclude": ["node_modules"]
 }
diff --git a/apps/docs/utils/cn.ts b/apps/docs/utils/cn.ts
index 8e473dac8..2a9afd0c4 100644
--- a/apps/docs/utils/cn.ts
+++ b/apps/docs/utils/cn.ts
@@ -1 +1 @@
-export { twMerge as cn } from "tailwind-merge";
+export { twMerge as cn } from 'tailwind-merge'
diff --git a/apps/docs/utils/page-tree.ts b/apps/docs/utils/page-tree.ts
index 585a77975..ed715f25e 100644
--- a/apps/docs/utils/page-tree.ts
+++ b/apps/docs/utils/page-tree.ts
@@ -1,20 +1,20 @@
-import { allDocs, allMeta } from "contentlayer/generated";
-import { buildPageTree, loadContext } from "next-docs-zeta/contentlayer";
-import type { TreeNode } from "next-docs-zeta/server";
+import { allDocs, allMeta } from 'contentlayer/generated'
+import { buildPageTree, loadContext } from 'next-docs-zeta/contentlayer'
+import type { TreeNode } from 'next-docs-zeta/server'
 
-const ctx = loadContext(allMeta, allDocs);
+const ctx = loadContext(allMeta, allDocs)
 
 export const uiTree = buildPageTree(ctx, {
-    root: "docs/ui",
-});
+  root: 'docs/ui'
+})
 export const headlessTree = buildPageTree(ctx, {
-    root: "docs/headless",
-});
+  root: 'docs/headless'
+})
 
-export function getTree(mode: "ui" | "headless" | string): TreeNode[] {
-    if (mode === "ui") {
-        return uiTree;
-    }
+export function getTree(mode: 'ui' | 'headless' | string): TreeNode[] {
+  if (mode === 'ui') {
+    return uiTree
+  }
 
-    return headlessTree;
+  return headlessTree
 }
diff --git a/examples/website/app/[lang]/[[...slug]]/not-found.tsx b/examples/website/app/[lang]/[[...slug]]/not-found.tsx
index a027d3957..3c099c1d9 100644
--- a/examples/website/app/[lang]/[[...slug]]/not-found.tsx
+++ b/examples/website/app/[lang]/[[...slug]]/not-found.tsx
@@ -1 +1 @@
-export { default } from "next-docs-ui/not-found";
+export { default } from 'next-docs-ui/not-found'
diff --git a/examples/website/app/[lang]/[[...slug]]/page.tsx b/examples/website/app/[lang]/[[...slug]]/page.tsx
index 49ba48a0f..e59e2b184 100644
--- a/examples/website/app/[lang]/[[...slug]]/page.tsx
+++ b/examples/website/app/[lang]/[[...slug]]/page.tsx
@@ -1,88 +1,87 @@
-import { DocsPage } from "next-docs-ui/page";
+import { languages } from '@/app/i18n'
+import type { Metadata } from 'next'
+import { getMDXComponent } from 'next-contentlayer/hooks'
 import {
-    Heading,
-    Image,
-    Pre,
-    Link,
-    Table,
-    MDXContent,
-    Card,
-    Cards,
-} from "next-docs-ui/mdx";
-import { getTableOfContents } from "next-docs-zeta/server";
-import { notFound } from "next/navigation";
-import { getPages, getPage, trees } from "../../tree";
-import { getMDXComponent } from "next-contentlayer/hooks";
-import { languages } from "@/app/i18n";
-
-import type { Metadata } from "next";
+  Card,
+  Cards,
+  Heading,
+  Image,
+  Link,
+  MDXContent,
+  Pre,
+  Table
+} from 'next-docs-ui/mdx'
+import { DocsPage } from 'next-docs-ui/page'
+import { getTableOfContents } from 'next-docs-zeta/server'
+import { notFound } from 'next/navigation'
+import { getPage, getPages, trees } from '../../tree'
 
 export default async function Page({
-    params,
+  params
 }: {
-    params: { lang: string; slug?: string[] };
+  params: { lang: string; slug?: string[] }
 }) {
-    if (!languages.includes(params.lang)) {
-        notFound();
-    }
+  if (!languages.includes(params.lang)) {
+    notFound()
+  }
 
-    const tree = trees[params.lang];
-    const page = getPage(params.lang, params.slug);
+  const tree = trees[params.lang]
+  const page = getPage(params.lang, params.slug)
 
-    if (page == null) {
-        notFound();
-    }
+  if (page == null) {
+    notFound()
+  }
 
-    const toc = await getTableOfContents(page.body.raw);
-    const MDX = getMDXComponent(page.body.code);
+  const toc = await getTableOfContents(page.body.raw)
+  const MDX = getMDXComponent(page.body.code)
 
-    return (
-        
-            
-                

{page.title}

-
, - pre: (props) =>
,
-                        a: (props) => ,
-                        h1: (props) => ,
-                        h2: (props) => ,
-                        h3: (props) => ,
-                        h4: (props) => ,
-                        h5: (props) => ,
-                        h6: (props) => ,
-                        img: (props) => ,
-                        Card: (props) => ,
-                        Cards: (props) => ,
-                    }}
-                />
-            
-        
-    );
+  return (
+    
+      
+        

{page.title}

+
, + pre: props =>
,
+            a: props => ,
+            h1: props => ,
+            h2: props => ,
+            h3: props => ,
+            h4: props => ,
+            h5: props => ,
+            h6: props => ,
+            img: props => ,
+            Card: props => ,
+            Cards: props => 
+          }}
+        />
+      
+    
+  )
 }
 
 export async function generateStaticParams(): Promise<
-    { lang: string; slug: string[] }[]
+  { lang: string; slug: string[] }[]
 > {
-    return languages.flatMap((lang) =>
-        getPages(lang)!.map((docs) => ({
-            slug: docs.slug.split("/"),
-            lang: lang,
-        }))
-    );
+  return languages.flatMap(lang =>
+    getPages(lang)!.map(docs => ({
+      slug: docs.slug.split('/'),
+      lang
+    }))
+  )
 }
 
 export function generateMetadata({
-    params,
+  params
 }: {
-    params: { lang: string; slug?: string[] };
+  params: { lang: string; slug?: string[] }
 }) {
-    const page = getPage(params.lang, params.slug);
+  const page = getPage(params.lang, params.slug)
 
-    if (page == null) return;
+  if (page == null) return
 
-    return {
-        title: page.title,
-        description: page.description,
-    } satisfies Metadata;
+  return {
+    title: page.title,
+    description: page.description
+  } satisfies Metadata
 }
diff --git a/examples/website/app/[lang]/layout.tsx b/examples/website/app/[lang]/layout.tsx
index fc78257fc..dec015960 100644
--- a/examples/website/app/[lang]/layout.tsx
+++ b/examples/website/app/[lang]/layout.tsx
@@ -1,38 +1,93 @@
-import { DocsLayout } from "next-docs-ui/layout";
-import { trees } from "../tree";
-import { ReactNode } from "react";
-import { LanguageSelect } from "next-docs-ui/i18n";
+import { LanguageSelect } from 'next-docs-ui/i18n'
+import { DocsLayout } from 'next-docs-ui/layout'
+import { RootProvider } from 'next-docs-ui/provider'
+import { Inter } from 'next/font/google'
+import type { ReactNode } from 'react'
+import { ClientI18nProvider } from '../provider'
+import { trees } from '../tree'
+import 'next-docs-ui/style.css'
+import '../style.css'
+
+const inter = Inter({
+  subsets: ['latin']
+})
 
 export default function Layout({
-    params,
-    children,
+  params,
+  children
 }: {
-    params: { lang: string };
-    children: ReactNode;
+  params: { lang: string }
+  children: ReactNode
 }) {
-    const tree = trees[params.lang];
+  const tree = trees[params.lang]
 
-    return (
-        
+      
+        
+          
+            
+
+
+
+ - } - > - {children} - - ); + } + > + {children} + + + + + + ) } diff --git a/examples/website/app/api/search/route.ts b/examples/website/app/api/search/route.ts index ffcebd892..e6447a880 100644 --- a/examples/website/app/api/search/route.ts +++ b/examples/website/app/api/search/route.ts @@ -1,16 +1,16 @@ -import { languages } from "@/app/i18n"; -import { getPages } from "@/app/tree"; -import { getPageUrl } from "next-docs-zeta/contentlayer"; -import { initI18nSearchAPI } from "next-docs-zeta/server"; +import { languages } from '@/app/i18n' +import { getPages } from '@/app/tree' +import { getPageUrl } from 'next-docs-zeta/contentlayer' +import { initI18nSearchAPI } from 'next-docs-zeta/server' export const { GET } = initI18nSearchAPI( - languages.map((lang) => { - const pages = getPages(lang)!.map((page) => ({ - title: page.title, - content: page.body.raw, - url: getPageUrl(page.slug.split("/"), "/", lang), - })); + languages.map(lang => { + const pages = getPages(lang)!.map(page => ({ + title: page.title, + content: page.body.raw, + url: getPageUrl(page.slug.split('/'), '/', lang) + })) - return [lang, pages]; - }) -); + return [lang, pages] + }) +) diff --git a/examples/website/app/i18n.tsx b/examples/website/app/i18n.tsx index f22f55f45..7d1db2d3a 100644 --- a/examples/website/app/i18n.tsx +++ b/examples/website/app/i18n.tsx @@ -1,2 +1,2 @@ -export const defaultLanguage = "en"; -export const languages = ["en", "cn"]; +export const defaultLanguage = 'en' +export const languages = ['en', 'cn'] diff --git a/examples/website/app/layout.tsx b/examples/website/app/layout.tsx deleted file mode 100644 index da058a32b..000000000 --- a/examples/website/app/layout.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { Inter } from "next/font/google"; -import { RootProvider } from "next-docs-ui/provider"; -import { ClientI18nProvider } from "./provider"; -import type { Metadata } from "next"; - -import "next-docs-ui/style.css"; -import "./style.css"; - -export const metadata: Metadata = { - title: { - default: "My App", - template: "My App | %s", - }, - description: "Generated by Next.js", -}; - -const inter = Inter({ - subsets: ["latin"], -}); - -export default function RootLayout({ - children, -}: { - children: React.ReactNode; -}) { - return ( - - - - -
-
-
-
- {children} - - - - - ); -} diff --git a/examples/website/app/provider.tsx b/examples/website/app/provider.tsx index fc57dbc98..3392a2a8a 100644 --- a/examples/website/app/provider.tsx +++ b/examples/website/app/provider.tsx @@ -1,27 +1,29 @@ -"use client"; -import { I18nProvider } from "next-docs-ui/i18n"; -import { useParams, usePathname, useRouter } from "next/navigation"; -import { ReactNode, useCallback } from "react"; -import { defaultLanguage } from "./i18n"; +'use client' + +import { I18nProvider } from 'next-docs-ui/i18n' +import { useParams, usePathname, useRouter } from 'next/navigation' +import type { ReactNode } from 'react' +import { useCallback } from 'react' +import { defaultLanguage } from './i18n' export function ClientI18nProvider({ children }: { children: ReactNode }) { - const router = useRouter(); - const pathname = usePathname(); - const { lang } = useParams() as { lang?: string }; - const onChange = useCallback( - (v: string) => { - const segments = pathname.split("/"); + const router = useRouter() + const pathname = usePathname() + const { lang } = useParams() as { lang?: string } + const onChange = useCallback( + (v: string) => { + const segments = pathname.split('/') - segments[1] = v; + segments[1] = v - router.push(segments.join("/")); - }, - [router, pathname] - ); + router.push(segments.join('/')) + }, + [router, pathname] + ) - return ( - - {children} - - ); + return ( + + {children} + + ) } diff --git a/examples/website/app/style.css b/examples/website/app/style.css index 22902f76c..b0f036f5c 100644 --- a/examples/website/app/style.css +++ b/examples/website/app/style.css @@ -1,8 +1,8 @@ :root { - --gradient: 200 90% 85%; - --primary: 270 95% 75% !important; + --gradient: 200 90% 85%; + --primary: 270 95% 75% !important; } .dark { - --gradient: 630 50% 50%; + --gradient: 630 50% 50%; } diff --git a/examples/website/app/tree.ts b/examples/website/app/tree.ts index efef6da69..b202288ab 100644 --- a/examples/website/app/tree.ts +++ b/examples/website/app/tree.ts @@ -1,14 +1,14 @@ -import { allMeta, allDocs } from "contentlayer/generated"; +import { allDocs, allMeta } from 'contentlayer/generated' import { - buildI18nPageTree, - createUtils, - loadContext, -} from "next-docs-zeta/contentlayer"; -import { languages } from "./i18n"; + buildI18nPageTree, + createUtils, + loadContext +} from 'next-docs-zeta/contentlayer' +import { languages } from './i18n' -const ctx = loadContext(allMeta, allDocs, languages); +const ctx = loadContext(allMeta, allDocs, languages) export const trees = buildI18nPageTree(ctx, languages, { - baseUrl: "/", -}); + baseUrl: '/' +}) -export const { getPage, getPages } = createUtils(ctx); +export const { getPage, getPages } = createUtils(ctx) diff --git a/examples/website/content/docs/components/cards.mdx b/examples/website/content/docs/components/cards.mdx index a72ea1bc3..db0dfa4c1 100644 --- a/examples/website/content/docs/components/cards.mdx +++ b/examples/website/content/docs/components/cards.mdx @@ -5,5 +5,5 @@ title: Cards Try components. - + diff --git a/examples/website/content/docs/index.cn.mdx b/examples/website/content/docs/index.cn.mdx index c1bb7cc00..bafa5f9aa 100644 --- a/examples/website/content/docs/index.cn.mdx +++ b/examples/website/content/docs/index.cn.mdx @@ -8,7 +8,7 @@ title: 快速開始 ```js // 這會將“Hello World”記錄到控制台 -console.log("你好世界"); +console.log('你好世界') ``` | 名稱 | 組件 | diff --git a/examples/website/content/docs/index.mdx b/examples/website/content/docs/index.mdx index dab6c30d0..a465b9991 100644 --- a/examples/website/content/docs/index.mdx +++ b/examples/website/content/docs/index.mdx @@ -8,7 +8,7 @@ What is even better than a battle of juice? `hello world`. ```js // this will log "Hello World" to console -console.log("Hello World"); +console.log('Hello World') ``` | Name | Comopnent | diff --git a/examples/website/content/docs/installation/remix.mdx b/examples/website/content/docs/installation/remix.mdx index 984983f53..645d3e22e 100644 --- a/examples/website/content/docs/installation/remix.mdx +++ b/examples/website/content/docs/installation/remix.mdx @@ -17,9 +17,9 @@ Tardantis magno _quod_ qui militiam mutabile ferentes tenus ab tendit est prospexit! Sibi obstipui, fortuna quaerunt placet referre mille umentes stagna. Stipitis quamvis, ibi cristis pactus nec, in _venit quondam Apollineos_ dubita minus, o, quem. Et similes leonis viae extis inque quae abiit opposuit notum -tuta induruit Phoebus amplectitur, cultus [Mulciber -letum](http://www.fronte.io/es)? Densus recingitur dixisse magistris lenta, -relinquent Alce ignis te. +tuta induruit Phoebus amplectitur, cultus +[Mulciber letum](http://www.fronte.io/es)? Densus recingitur dixisse magistris +lenta, relinquent Alce ignis te. Delicuit fulgura ego et multa, moriens ante Phaestiadas zephyris, marmoreis trepidare tamen, avidas tot pollice. Gnatis ad puer simulacraque annum saltus @@ -144,10 +144,10 @@ Lorem markdownum _se referre precari_ pruinas et cornua, ignes in o per ducebas **carmina**; sine. Vocat tantum huic occurrensque saltu illum; tuta temperat est vidi foedere docendam sublimemque cognoscere videnda sub. -> Timuit Iuno vestem nemus terris frondator [bracchia captum -> quadriiugi](http://www.hoc.net/) inamabile venefica nec valuit scopulus luco -> cito, sibi. Ille _vulnera_: edentem ex inducta immaduisse auro! Hoc nec -> vicina, sonant sibi optas: nemus lintea. +> Timuit Iuno vestem nemus terris frondator +> [bracchia captum quadriiugi](http://www.hoc.net/) inamabile venefica nec +> valuit scopulus luco cito, sibi. Ille _vulnera_: edentem ex inducta immaduisse +> auro! Hoc nec vicina, sonant sibi optas: nemus lintea. ## Extendi teli humanam paret @@ -164,10 +164,10 @@ Premitur quoque in coryli vires fuit vota nuribusque, contigerant donec, propior vetorque forti. Senecta instructo membra: **pectora** accipiunt elusaque longa trieterica, Inachidos mei inquit: et leti, epulanda si ignes. Emicuit tepebat conplexa temptatos patri amoris [passa](http://dat.net/). Animo repetitum parens -exibit, his causa esse deducentia tenuit [colla -tempore](http://aethiopasquenolis.net/reliquit-abstulit) quem faciat! Cultis -_amnis quid_ leves; longoque mea _pater moenia et_ validum in nervis ut utque -unxere, ut. +exibit, his causa esse deducentia tenuit +[colla tempore](http://aethiopasquenolis.net/reliquit-abstulit) quem faciat! +Cultis _amnis quid_ leves; longoque mea _pater moenia et_ validum in nervis ut +utque unxere, ut. > Solidas ad cursu liquidis concolor caedis me contemptoremque illam nec, amens > luminibus agitat. Illa versato, aut Veneris, tua cornua instar omnis beatus. @@ -179,10 +179,10 @@ dea armis robustior tum? Lugubris ardua. Ubi Achaia adicit caelo mersisque **rumpere gravidae fatidicamque** atria, pedibusque. Cupit non fundunt obstat, **somno qui volumine** quoque ventis agitant interea vocisque tellus Stygiae. -- Lacrimis sunt Talibus -- Non pudorem -- Contigit faciemque imitata mollibat mihi ego feruntur -- Ille illae et quod ignibus manibus vidit +- Lacrimis sunt Talibus +- Non pudorem +- Contigit faciemque imitata mollibat mihi ego feruntur +- Ille illae et quod ignibus manibus vidit ## Pariterque illa @@ -251,17 +251,17 @@ nervoque hora. ## Exilio nostros potentia et cubilia Iris Viriles populi voce iurant tumulo forma celsior, alis novissimus, pictis ducar. -Quod amnes exspatiata te nexuque solvit [plectrumque -iuvat](http://flere.com/illa) tamen inmissa: sed sonis fatorum. Tuorum sororibus -ramis quaedam, amori cognoscet aut rapuere audierit sine vos aevo munusque o -satis, cadet! Onus aetas, enim magis, **daret dixit** sonat; +Quod amnes exspatiata te nexuque solvit +[plectrumque iuvat](http://flere.com/illa) tamen inmissa: sed sonis fatorum. +Tuorum sororibus ramis quaedam, amori cognoscet aut rapuere audierit sine vos +aevo munusque o satis, cadet! Onus aetas, enim magis, **daret dixit** sonat; [Sic](http://tanto.io/) at sumite amici miratur et procul Dulichius. -- Ora Aiax -- Orare Aeneae -- Luctus Phoebes sed factura mecum Antaeo -- Vultus incessere crescunt petit hoc patrio furit -- Crista natos et quam mitem accensa condi +- Ora Aiax +- Orare Aeneae +- Luctus Phoebes sed factura mecum Antaeo +- Vultus incessere crescunt petit hoc patrio furit +- Crista natos et quam mitem accensa condi ## Arbor nega profeci miraris ubique @@ -302,8 +302,9 @@ Echo [medios](http://gargaphie.net/dicitqua) illa patriam: sive suas **mersis nec** caput inquit, Nereidum, morbo. Credere petunt. Igne vertice incepto animos nimbis adspergine utque sibi tum, miles nunc sanguis similis, quo vix perque. Tigride labori: calet in bis **potenti**, resilire si formae partim? Quid -pectora veniam praedelassat iuvenes ea sensit vasta umor [sororis Laertiadaeque -postarum](http://forem.com/errorem-deficit) et portus trementem pollice. +pectora veniam praedelassat iuvenes ea sensit vasta umor +[sororis Laertiadaeque postarum](http://forem.com/errorem-deficit) et portus +trementem pollice. > Est tu proxima recepta tingui ubi tinctas corpore vultus notam signumque longo > sensit ultima in summa. In nec flentibus res plangi in arva patre solis @@ -315,11 +316,11 @@ postarum](http://forem.com/errorem-deficit) et portus trementem pollice. Amborum [turba](http://www.deceptus-nec.org/festa) liquefacta delabere dedit vero minister, Theseus. Inrita facto solacia si praebet Styga viribus scilicet -facta in. Lavere est _ferrum resonis turpis_ ventos; deos [alti ferarum -aras](http://humi.org/retro-secum.html) uti dabitur petit, patula plangore -_lupos_! Electae paelex creberrima fuerant Aiaci tu alii committit, Apidani. Cum -vacca est nullo illi aere urbe magnis videat creatis: foramina quid patet -solane, hi petitur quod. +facta in. Lavere est _ferrum resonis turpis_ ventos; deos +[alti ferarum aras](http://humi.org/retro-secum.html) uti dabitur petit, patula +plangore _lupos_! Electae paelex creberrima fuerant Aiaci tu alii committit, +Apidani. Cum vacca est nullo illi aere urbe magnis videat creatis: foramina quid +patet solane, hi petitur quod. > Sequar ille, tamen, admonitu quaerit, fugis idem hominis? Quoque coeperunt > miseros murmur discrimine videre ab fertque: facta videre, est adest cura! diff --git a/examples/website/content/docs/meta-cn.json b/examples/website/content/docs/meta-cn.json index ed6b717e9..89d78205f 100644 --- a/examples/website/content/docs/meta-cn.json +++ b/examples/website/content/docs/meta-cn.json @@ -1,9 +1,9 @@ { - "pages": [ - "---指南---", - "index", - "install", - "---API Reference---", - "components" - ] + "pages": [ + "---指南---", + "index", + "install", + "---API Reference---", + "components" + ] } diff --git a/examples/website/content/docs/meta.json b/examples/website/content/docs/meta.json index 2692b1dcf..4ce802bda 100644 --- a/examples/website/content/docs/meta.json +++ b/examples/website/content/docs/meta.json @@ -1,31 +1,31 @@ { - "pages": [ - "---Guide---", - "index", - "playground", - "---Installation---", - "installation/next", - "installation/remix", - "installation/qwik", - "installation/vite", - "---Migrate---", - "migrate/1", - "migrate/2", - "---Components---", - "components/input", - "components/select", - "components/avatar", - "components/cards", - "components/button", - "components/tabs", - "components/progress", - "components/spinner", - "components/calendar", - "components/checkbox", - "components/combobox", - "components/accordion", - "components/date-picker", - "components/form", - "ssr" - ] + "pages": [ + "---Guide---", + "index", + "playground", + "---Installation---", + "installation/next", + "installation/remix", + "installation/qwik", + "installation/vite", + "---Migrate---", + "migrate/1", + "migrate/2", + "---Components---", + "components/input", + "components/select", + "components/avatar", + "components/cards", + "components/button", + "components/tabs", + "components/progress", + "components/spinner", + "components/calendar", + "components/checkbox", + "components/combobox", + "components/accordion", + "components/date-picker", + "components/form", + "ssr" + ] } diff --git a/examples/website/content/docs/migrate/1.mdx b/examples/website/content/docs/migrate/1.mdx index cd5fbaa05..40a737c32 100644 --- a/examples/website/content/docs/migrate/1.mdx +++ b/examples/website/content/docs/migrate/1.mdx @@ -17,9 +17,9 @@ Tardantis magno _quod_ qui militiam mutabile ferentes tenus ab tendit est prospexit! Sibi obstipui, fortuna quaerunt placet referre mille umentes stagna. Stipitis quamvis, ibi cristis pactus nec, in _venit quondam Apollineos_ dubita minus, o, quem. Et similes leonis viae extis inque quae abiit opposuit notum -tuta induruit Phoebus amplectitur, cultus [Mulciber -letum](http://www.fronte.io/es)? Densus recingitur dixisse magistris lenta, -relinquent Alce ignis te. +tuta induruit Phoebus amplectitur, cultus +[Mulciber letum](http://www.fronte.io/es)? Densus recingitur dixisse magistris +lenta, relinquent Alce ignis te. Delicuit fulgura ego et multa, moriens ante Phaestiadas zephyris, marmoreis trepidare tamen, avidas tot pollice. Gnatis ad puer simulacraque annum saltus @@ -144,10 +144,10 @@ Lorem markdownum _se referre precari_ pruinas et cornua, ignes in o per ducebas **carmina**; sine. Vocat tantum huic occurrensque saltu illum; tuta temperat est vidi foedere docendam sublimemque cognoscere videnda sub. -> Timuit Iuno vestem nemus terris frondator [bracchia captum -> quadriiugi](http://www.hoc.net/) inamabile venefica nec valuit scopulus luco -> cito, sibi. Ille _vulnera_: edentem ex inducta immaduisse auro! Hoc nec -> vicina, sonant sibi optas: nemus lintea. +> Timuit Iuno vestem nemus terris frondator +> [bracchia captum quadriiugi](http://www.hoc.net/) inamabile venefica nec +> valuit scopulus luco cito, sibi. Ille _vulnera_: edentem ex inducta immaduisse +> auro! Hoc nec vicina, sonant sibi optas: nemus lintea. ## Extendi teli humanam paret @@ -164,10 +164,10 @@ Premitur quoque in coryli vires fuit vota nuribusque, contigerant donec, propior vetorque forti. Senecta instructo membra: **pectora** accipiunt elusaque longa trieterica, Inachidos mei inquit: et leti, epulanda si ignes. Emicuit tepebat conplexa temptatos patri amoris [passa](http://dat.net/). Animo repetitum parens -exibit, his causa esse deducentia tenuit [colla -tempore](http://aethiopasquenolis.net/reliquit-abstulit) quem faciat! Cultis -_amnis quid_ leves; longoque mea _pater moenia et_ validum in nervis ut utque -unxere, ut. +exibit, his causa esse deducentia tenuit +[colla tempore](http://aethiopasquenolis.net/reliquit-abstulit) quem faciat! +Cultis _amnis quid_ leves; longoque mea _pater moenia et_ validum in nervis ut +utque unxere, ut. > Solidas ad cursu liquidis concolor caedis me contemptoremque illam nec, amens > luminibus agitat. Illa versato, aut Veneris, tua cornua instar omnis beatus. @@ -179,10 +179,10 @@ dea armis robustior tum? Lugubris ardua. Ubi Achaia adicit caelo mersisque **rumpere gravidae fatidicamque** atria, pedibusque. Cupit non fundunt obstat, **somno qui volumine** quoque ventis agitant interea vocisque tellus Stygiae. -- Lacrimis sunt Talibus -- Non pudorem -- Contigit faciemque imitata mollibat mihi ego feruntur -- Ille illae et quod ignibus manibus vidit +- Lacrimis sunt Talibus +- Non pudorem +- Contigit faciemque imitata mollibat mihi ego feruntur +- Ille illae et quod ignibus manibus vidit ## Pariterque illa @@ -251,17 +251,17 @@ nervoque hora. ## Exilio nostros potentia et cubilia Iris Viriles populi voce iurant tumulo forma celsior, alis novissimus, pictis ducar. -Quod amnes exspatiata te nexuque solvit [plectrumque -iuvat](http://flere.com/illa) tamen inmissa: sed sonis fatorum. Tuorum sororibus -ramis quaedam, amori cognoscet aut rapuere audierit sine vos aevo munusque o -satis, cadet! Onus aetas, enim magis, **daret dixit** sonat; +Quod amnes exspatiata te nexuque solvit +[plectrumque iuvat](http://flere.com/illa) tamen inmissa: sed sonis fatorum. +Tuorum sororibus ramis quaedam, amori cognoscet aut rapuere audierit sine vos +aevo munusque o satis, cadet! Onus aetas, enim magis, **daret dixit** sonat; [Sic](http://tanto.io/) at sumite amici miratur et procul Dulichius. -- Ora Aiax -- Orare Aeneae -- Luctus Phoebes sed factura mecum Antaeo -- Vultus incessere crescunt petit hoc patrio furit -- Crista natos et quam mitem accensa condi +- Ora Aiax +- Orare Aeneae +- Luctus Phoebes sed factura mecum Antaeo +- Vultus incessere crescunt petit hoc patrio furit +- Crista natos et quam mitem accensa condi ## Arbor nega profeci miraris ubique @@ -302,8 +302,9 @@ Echo [medios](http://gargaphie.net/dicitqua) illa patriam: sive suas **mersis nec** caput inquit, Nereidum, morbo. Credere petunt. Igne vertice incepto animos nimbis adspergine utque sibi tum, miles nunc sanguis similis, quo vix perque. Tigride labori: calet in bis **potenti**, resilire si formae partim? Quid -pectora veniam praedelassat iuvenes ea sensit vasta umor [sororis Laertiadaeque -postarum](http://forem.com/errorem-deficit) et portus trementem pollice. +pectora veniam praedelassat iuvenes ea sensit vasta umor +[sororis Laertiadaeque postarum](http://forem.com/errorem-deficit) et portus +trementem pollice. > Est tu proxima recepta tingui ubi tinctas corpore vultus notam signumque longo > sensit ultima in summa. In nec flentibus res plangi in arva patre solis @@ -315,11 +316,11 @@ postarum](http://forem.com/errorem-deficit) et portus trementem pollice. Amborum [turba](http://www.deceptus-nec.org/festa) liquefacta delabere dedit vero minister, Theseus. Inrita facto solacia si praebet Styga viribus scilicet -facta in. Lavere est _ferrum resonis turpis_ ventos; deos [alti ferarum -aras](http://humi.org/retro-secum.html) uti dabitur petit, patula plangore -_lupos_! Electae paelex creberrima fuerant Aiaci tu alii committit, Apidani. Cum -vacca est nullo illi aere urbe magnis videat creatis: foramina quid patet -solane, hi petitur quod. +facta in. Lavere est _ferrum resonis turpis_ ventos; deos +[alti ferarum aras](http://humi.org/retro-secum.html) uti dabitur petit, patula +plangore _lupos_! Electae paelex creberrima fuerant Aiaci tu alii committit, +Apidani. Cum vacca est nullo illi aere urbe magnis videat creatis: foramina quid +patet solane, hi petitur quod. > Sequar ille, tamen, admonitu quaerit, fugis idem hominis? Quoque coeperunt > miseros murmur discrimine videre ab fertque: facta videre, est adest cura! diff --git a/examples/website/content/docs/migrate/2.mdx b/examples/website/content/docs/migrate/2.mdx index b2975717a..4bea377cf 100644 --- a/examples/website/content/docs/migrate/2.mdx +++ b/examples/website/content/docs/migrate/2.mdx @@ -17,9 +17,9 @@ Tardantis magno _quod_ qui militiam mutabile ferentes tenus ab tendit est prospexit! Sibi obstipui, fortuna quaerunt placet referre mille umentes stagna. Stipitis quamvis, ibi cristis pactus nec, in _venit quondam Apollineos_ dubita minus, o, quem. Et similes leonis viae extis inque quae abiit opposuit notum -tuta induruit Phoebus amplectitur, cultus [Mulciber -letum](http://www.fronte.io/es)? Densus recingitur dixisse magistris lenta, -relinquent Alce ignis te. +tuta induruit Phoebus amplectitur, cultus +[Mulciber letum](http://www.fronte.io/es)? Densus recingitur dixisse magistris +lenta, relinquent Alce ignis te. Delicuit fulgura ego et multa, moriens ante Phaestiadas zephyris, marmoreis trepidare tamen, avidas tot pollice. Gnatis ad puer simulacraque annum saltus @@ -144,10 +144,10 @@ Lorem markdownum _se referre precari_ pruinas et cornua, ignes in o per ducebas **carmina**; sine. Vocat tantum huic occurrensque saltu illum; tuta temperat est vidi foedere docendam sublimemque cognoscere videnda sub. -> Timuit Iuno vestem nemus terris frondator [bracchia captum -> quadriiugi](http://www.hoc.net/) inamabile venefica nec valuit scopulus luco -> cito, sibi. Ille _vulnera_: edentem ex inducta immaduisse auro! Hoc nec -> vicina, sonant sibi optas: nemus lintea. +> Timuit Iuno vestem nemus terris frondator +> [bracchia captum quadriiugi](http://www.hoc.net/) inamabile venefica nec +> valuit scopulus luco cito, sibi. Ille _vulnera_: edentem ex inducta immaduisse +> auro! Hoc nec vicina, sonant sibi optas: nemus lintea. ## Extendi teli humanam paret @@ -164,10 +164,10 @@ Premitur quoque in coryli vires fuit vota nuribusque, contigerant donec, propior vetorque forti. Senecta instructo membra: **pectora** accipiunt elusaque longa trieterica, Inachidos mei inquit: et leti, epulanda si ignes. Emicuit tepebat conplexa temptatos patri amoris [passa](http://dat.net/). Animo repetitum parens -exibit, his causa esse deducentia tenuit [colla -tempore](http://aethiopasquenolis.net/reliquit-abstulit) quem faciat! Cultis -_amnis quid_ leves; longoque mea _pater moenia et_ validum in nervis ut utque -unxere, ut. +exibit, his causa esse deducentia tenuit +[colla tempore](http://aethiopasquenolis.net/reliquit-abstulit) quem faciat! +Cultis _amnis quid_ leves; longoque mea _pater moenia et_ validum in nervis ut +utque unxere, ut. > Solidas ad cursu liquidis concolor caedis me contemptoremque illam nec, amens > luminibus agitat. Illa versato, aut Veneris, tua cornua instar omnis beatus. @@ -179,10 +179,10 @@ dea armis robustior tum? Lugubris ardua. Ubi Achaia adicit caelo mersisque **rumpere gravidae fatidicamque** atria, pedibusque. Cupit non fundunt obstat, **somno qui volumine** quoque ventis agitant interea vocisque tellus Stygiae. -- Lacrimis sunt Talibus -- Non pudorem -- Contigit faciemque imitata mollibat mihi ego feruntur -- Ille illae et quod ignibus manibus vidit +- Lacrimis sunt Talibus +- Non pudorem +- Contigit faciemque imitata mollibat mihi ego feruntur +- Ille illae et quod ignibus manibus vidit ## Pariterque illa @@ -251,17 +251,17 @@ nervoque hora. ## Exilio nostros potentia et cubilia Iris Viriles populi voce iurant tumulo forma celsior, alis novissimus, pictis ducar. -Quod amnes exspatiata te nexuque solvit [plectrumque -iuvat](http://flere.com/illa) tamen inmissa: sed sonis fatorum. Tuorum sororibus -ramis quaedam, amori cognoscet aut rapuere audierit sine vos aevo munusque o -satis, cadet! Onus aetas, enim magis, **daret dixit** sonat; +Quod amnes exspatiata te nexuque solvit +[plectrumque iuvat](http://flere.com/illa) tamen inmissa: sed sonis fatorum. +Tuorum sororibus ramis quaedam, amori cognoscet aut rapuere audierit sine vos +aevo munusque o satis, cadet! Onus aetas, enim magis, **daret dixit** sonat; [Sic](http://tanto.io/) at sumite amici miratur et procul Dulichius. -- Ora Aiax -- Orare Aeneae -- Luctus Phoebes sed factura mecum Antaeo -- Vultus incessere crescunt petit hoc patrio furit -- Crista natos et quam mitem accensa condi +- Ora Aiax +- Orare Aeneae +- Luctus Phoebes sed factura mecum Antaeo +- Vultus incessere crescunt petit hoc patrio furit +- Crista natos et quam mitem accensa condi ## Arbor nega profeci miraris ubique @@ -302,8 +302,9 @@ Echo [medios](http://gargaphie.net/dicitqua) illa patriam: sive suas **mersis nec** caput inquit, Nereidum, morbo. Credere petunt. Igne vertice incepto animos nimbis adspergine utque sibi tum, miles nunc sanguis similis, quo vix perque. Tigride labori: calet in bis **potenti**, resilire si formae partim? Quid -pectora veniam praedelassat iuvenes ea sensit vasta umor [sororis Laertiadaeque -postarum](http://forem.com/errorem-deficit) et portus trementem pollice. +pectora veniam praedelassat iuvenes ea sensit vasta umor +[sororis Laertiadaeque postarum](http://forem.com/errorem-deficit) et portus +trementem pollice. > Est tu proxima recepta tingui ubi tinctas corpore vultus notam signumque longo > sensit ultima in summa. In nec flentibus res plangi in arva patre solis @@ -315,11 +316,11 @@ postarum](http://forem.com/errorem-deficit) et portus trementem pollice. Amborum [turba](http://www.deceptus-nec.org/festa) liquefacta delabere dedit vero minister, Theseus. Inrita facto solacia si praebet Styga viribus scilicet -facta in. Lavere est _ferrum resonis turpis_ ventos; deos [alti ferarum -aras](http://humi.org/retro-secum.html) uti dabitur petit, patula plangore -_lupos_! Electae paelex creberrima fuerant Aiaci tu alii committit, Apidani. Cum -vacca est nullo illi aere urbe magnis videat creatis: foramina quid patet -solane, hi petitur quod. +facta in. Lavere est _ferrum resonis turpis_ ventos; deos +[alti ferarum aras](http://humi.org/retro-secum.html) uti dabitur petit, patula +plangore _lupos_! Electae paelex creberrima fuerant Aiaci tu alii committit, +Apidani. Cum vacca est nullo illi aere urbe magnis videat creatis: foramina quid +patet solane, hi petitur quod. > Sequar ille, tamen, admonitu quaerit, fugis idem hominis? Quoque coeperunt > miseros murmur discrimine videre ab fertque: facta videre, est adest cura! diff --git a/examples/website/contentlayer.config.ts b/examples/website/contentlayer.config.ts index 44372db88..bab63b581 100644 --- a/examples/website/contentlayer.config.ts +++ b/examples/website/contentlayer.config.ts @@ -1,4 +1,4 @@ -import { defaultConfig } from "next-docs-ui/contentlayer"; -import { makeSource } from "contentlayer/source-files"; +import { makeSource } from 'contentlayer/source-files' +import { defaultConfig } from 'next-docs-ui/contentlayer' -export default makeSource(defaultConfig); +export default makeSource(defaultConfig) diff --git a/examples/website/middleware.ts b/examples/website/middleware.ts index e322d8f08..625168513 100644 --- a/examples/website/middleware.ts +++ b/examples/website/middleware.ts @@ -1,17 +1,17 @@ -import { NextRequest } from "next/server"; -import { defaultLanguage, languages } from "./app/i18n"; -import { createI18nMiddleware } from "next-docs-zeta/middleware"; +import { createI18nMiddleware } from 'next-docs-zeta/middleware' +import type { NextRequest } from 'next/server' +import { defaultLanguage, languages } from './app/i18n' export function middleware(request: NextRequest) { - return createI18nMiddleware( - request, - languages, - defaultLanguage, - (locale, slug) => `/${locale}/${slug}` - ); + return createI18nMiddleware( + request, + languages, + defaultLanguage, + (locale, slug) => `/${locale}/${slug}` + ) } export const config = { - // Matcher ignoring `/_next/` and `/api/` - matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"], -}; + // Matcher ignoring `/_next/` and `/api/` + matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'] +} diff --git a/examples/website/next.config.js b/examples/website/next.config.js index cf4b451eb..9eee366b5 100644 --- a/examples/website/next.config.js +++ b/examples/website/next.config.js @@ -1,12 +1,12 @@ /** @type {import('next').NextConfig} */ const config = { - pageExtensions: ["ts", "tsx", "js", "jsx"], - reactStrictMode: true, - images: { - domains: ["i.pravatar.cc"], - }, -}; + pageExtensions: ['ts', 'tsx', 'js', 'jsx'], + reactStrictMode: true, + images: { + domains: ['i.pravatar.cc'] + } +} -const { withContentlayer } = require("next-contentlayer"); +const { withContentlayer } = require('next-contentlayer') -module.exports = withContentlayer(config); +module.exports = withContentlayer(config) diff --git a/examples/website/package.json b/examples/website/package.json index e0c698742..3b9407365 100644 --- a/examples/website/package.json +++ b/examples/website/package.json @@ -1,24 +1,24 @@ { - "name": "website", - "version": "0.1.3", - "private": true, - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint" - }, - "dependencies": { - "next-docs-zeta": "workspace:*", - "next-docs-ui": "workspace:*", - "next": "13.4.12", - "react": "18.2.0", - "react-dom": "18.2.0", - "contentlayer": "^0.3.4", - "next-contentlayer": "^0.3.4" - }, - "devDependencies": { - "@types/react": "18.2.0", - "@types/react-dom": "18.2.1" - } + "name": "website", + "version": "0.1.3", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "next-docs-zeta": "workspace:*", + "next-docs-ui": "workspace:*", + "next": "13.4.12", + "react": "18.2.0", + "react-dom": "18.2.0", + "contentlayer": "^0.3.4", + "next-contentlayer": "^0.3.4" + }, + "devDependencies": { + "@types/react": "18.2.0", + "@types/react-dom": "18.2.1" + } } diff --git a/examples/website/tsconfig.json b/examples/website/tsconfig.json index bf25f78a0..db9ae4d79 100644 --- a/examples/website/tsconfig.json +++ b/examples/website/tsconfig.json @@ -1,36 +1,36 @@ { - "compilerOptions": { - "baseUrl": ".", - "target": "ESNext", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "paths": { - "@/*": ["./*"], - "contentlayer/generated": ["./.contentlayer/generated"] - }, - "plugins": [ - { - "name": "next" - } - ] + "compilerOptions": { + "baseUrl": ".", + "target": "ESNext", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "paths": { + "@/*": ["./*"], + "contentlayer/generated": ["./.contentlayer/generated"] }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx", - ".next/types/**/*.ts", - ".contentlayer/generated" - ], - "exclude": ["node_modules"] + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".contentlayer/generated" + ], + "exclude": ["node_modules"] } diff --git a/package.json b/package.json index af238a229..9c230f73f 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,35 @@ { - "name": "root", - "version": "0.1.0", - "private": true, - "scripts": { - "build": "turbo run build --filter=./packages/\\*", - "clean": "turbo run clean", - "dev": "turbo run dev", - "dev:ui": "turbo run dev --filter=website...", - "lint": "eslint --cache --ignore-path .gitignore --max-warnings 0 .", - "lint:prettier": "prettier --cache --check --ignore-path .gitignore --ignore-path .prettierignore .", - "prettier": "prettier --cache --write --list-different --ignore-path .gitignore --ignore-path .prettierignore .", - "release": "changeset publish", - "test": "turbo run test", - "types:check": "turbo run types:check", - "version": "changeset version" - }, - "devDependencies": { - "changeset": "^0.2.6", - "concurrently": "^8.0.1", - "tsup": "6.7.0", - "turbo": "v1.9.9", - "typescript": "5.0.4" - } + "name": "root", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "turbo run build --filter=./packages/\\*", + "clean": "turbo run clean", + "dev": "turbo run dev", + "dev:ui": "turbo run dev --filter=website...", + "lint": "eslint --cache --ignore-path .gitignore --max-warnings 0 .", + "lint:prettier": "prettier --cache --check --ignore-path .gitignore --ignore-path .prettierignore .", + "prettier": "prettier --cache --write --list-different --ignore-path .gitignore --ignore-path .prettierignore .", + "release": "changeset publish", + "test": "turbo run test", + "types:check": "turbo run types:check", + "version": "changeset version" + }, + "devDependencies": { + "@changesets/cli": "^2.26.2", + "@ianvs/prettier-plugin-sort-imports": "^4.1.0", + "@next/eslint-plugin-next": "^13.4.12", + "@typescript-eslint/eslint-plugin": "^6.2.0", + "@typescript-eslint/parser": "^6.2.0", + "concurrently": "^8.0.1", + "eslint": "^8.46.0", + "eslint-config-prettier": "^8.9.0", + "eslint-plugin-react": "^7.33.1", + "eslint-plugin-tailwindcss": "^3.13.0", + "prettier": "^3.0.0", + "prettier-plugin-tailwindcss": "^0.4.1", + "tsup": "6.7.0", + "turbo": "v1.9.9", + "typescript": "5.0.4" + } } diff --git a/packages/next-docs-ui/README.md b/packages/next-docs-ui/README.md index 5c85b47bc..95788832f 100644 --- a/packages/next-docs-ui/README.md +++ b/packages/next-docs-ui/README.md @@ -2,23 +2,24 @@ The Next.js framework for building documentation website. -It's build on the top of Next.js, Radix UI and **Next Docs**, fully styled using Tailwind CSS. +It's build on the top of Next.js, Radix UI and **Next Docs**, fully styled using +Tailwind CSS. ## Features Next Docs UI provides many features out of the box. -- Light/Dark Mode -- Full-text Search -- Table of Contents -- Built-in Components -- Code Syntax highlighting powered by Shiki -- Well Designed UI & Accessibility +- Light/Dark Mode +- Full-text Search +- Table of Contents +- Built-in Components +- Code Syntax highlighting powered by Shiki +- Well Designed UI & Accessibility **Moreover:** -- Built for App Router -- Great Flexibility -- Light & Fast +- Built for App Router +- Great Flexibility +- Light & Fast [Read Documentation](https://next-docs-zeta.vercel.app/docs/ui) diff --git a/packages/next-docs-ui/css/codeblock.css b/packages/next-docs-ui/css/codeblock.css index b4e487fbd..d852b3574 100644 --- a/packages/next-docs-ui/css/codeblock.css +++ b/packages/next-docs-ui/css/codeblock.css @@ -1,94 +1,94 @@ :root { - --shiki-color-text: oklch(37.53% 0 0); - --shiki-color-background: transparent; - --shiki-token-constant: oklch(56.45% 0.163 253.27); - --shiki-token-string: oklch(54.64% 0.144 147.32); - --shiki-token-comment: oklch(73.8% 0 0); - --shiki-token-keyword: oklch(56.8% 0.2 26.41); - --shiki-token-parameter: oklch(77.03% 0.174 64.05); - --shiki-token-function: oklch(50.15% 0.188 294.99); - --shiki-token-string-expression: var(--shiki-token-string); - --shiki-token-punctuation: oklch(24.78% 0 0); - --shiki-token-link: var(--shiki-token-string); + --shiki-color-text: oklch(37.53% 0 0); + --shiki-color-background: transparent; + --shiki-token-constant: oklch(56.45% 0.163 253.27); + --shiki-token-string: oklch(54.64% 0.144 147.32); + --shiki-token-comment: oklch(73.8% 0 0); + --shiki-token-keyword: oklch(56.8% 0.2 26.41); + --shiki-token-parameter: oklch(77.03% 0.174 64.05); + --shiki-token-function: oklch(50.15% 0.188 294.99); + --shiki-token-string-expression: var(--shiki-token-string); + --shiki-token-punctuation: oklch(24.78% 0 0); + --shiki-token-link: var(--shiki-token-string); - /* from github-light */ - --shiki-color-ansi-black: #24292e; - --shiki-color-ansi-black-dim: #24292e80; - --shiki-color-ansi-red: #d73a49; - --shiki-color-ansi-red-dim: #d73a4980; - --shiki-color-ansi-green: #28a745; - --shiki-color-ansi-green-dim: #28a74580; - --shiki-color-ansi-yellow: #dbab09; - --shiki-color-ansi-yellow-dim: #dbab0980; - --shiki-color-ansi-blue: #0366d6; - --shiki-color-ansi-blue-dim: #0366d680; - --shiki-color-ansi-magenta: #5a32a3; - --shiki-color-ansi-magenta-dim: #5a32a380; - --shiki-color-ansi-cyan: #1b7c83; - --shiki-color-ansi-cyan-dim: #1b7c8380; - --shiki-color-ansi-white: #6a737d; - --shiki-color-ansi-white-dim: #6a737d80; - --shiki-color-ansi-bright-black: #959da5; - --shiki-color-ansi-bright-black-dim: #959da580; - --shiki-color-ansi-bright-red: #cb2431; - --shiki-color-ansi-bright-red-dim: #cb243180; - --shiki-color-ansi-bright-green: #22863a; - --shiki-color-ansi-bright-green-dim: #22863a80; - --shiki-color-ansi-bright-yellow: #b08800; - --shiki-color-ansi-bright-yellow-dim: #b0880080; - --shiki-color-ansi-bright-blue: #005cc5; - --shiki-color-ansi-bright-blue-dim: #005cc580; - --shiki-color-ansi-bright-magenta: #5a32a3; - --shiki-color-ansi-bright-magenta-dim: #5a32a380; - --shiki-color-ansi-bright-cyan: #3192aa; - --shiki-color-ansi-bright-cyan-dim: #3192aa80; - --shiki-color-ansi-bright-white: #d1d5da; - --shiki-color-ansi-bright-white-dim: #d1d5da80; + /* from github-light */ + --shiki-color-ansi-black: #24292e; + --shiki-color-ansi-black-dim: #24292e80; + --shiki-color-ansi-red: #d73a49; + --shiki-color-ansi-red-dim: #d73a4980; + --shiki-color-ansi-green: #28a745; + --shiki-color-ansi-green-dim: #28a74580; + --shiki-color-ansi-yellow: #dbab09; + --shiki-color-ansi-yellow-dim: #dbab0980; + --shiki-color-ansi-blue: #0366d6; + --shiki-color-ansi-blue-dim: #0366d680; + --shiki-color-ansi-magenta: #5a32a3; + --shiki-color-ansi-magenta-dim: #5a32a380; + --shiki-color-ansi-cyan: #1b7c83; + --shiki-color-ansi-cyan-dim: #1b7c8380; + --shiki-color-ansi-white: #6a737d; + --shiki-color-ansi-white-dim: #6a737d80; + --shiki-color-ansi-bright-black: #959da5; + --shiki-color-ansi-bright-black-dim: #959da580; + --shiki-color-ansi-bright-red: #cb2431; + --shiki-color-ansi-bright-red-dim: #cb243180; + --shiki-color-ansi-bright-green: #22863a; + --shiki-color-ansi-bright-green-dim: #22863a80; + --shiki-color-ansi-bright-yellow: #b08800; + --shiki-color-ansi-bright-yellow-dim: #b0880080; + --shiki-color-ansi-bright-blue: #005cc5; + --shiki-color-ansi-bright-blue-dim: #005cc580; + --shiki-color-ansi-bright-magenta: #5a32a3; + --shiki-color-ansi-bright-magenta-dim: #5a32a380; + --shiki-color-ansi-bright-cyan: #3192aa; + --shiki-color-ansi-bright-cyan-dim: #3192aa80; + --shiki-color-ansi-bright-white: #d1d5da; + --shiki-color-ansi-bright-white-dim: #d1d5da80; } .dark { - --shiki-color-text: oklch(86.07% 0 0); - --shiki-token-constant: oklch(76.85% 0.121 252.34); - --shiki-token-string: oklch(81.11% 0.124 0); - --shiki-token-comment: oklch(55.18% 0.017 251.27); - --shiki-token-keyword: oklch(72.14% 0.162 15.49); - /*--shiki-token-parameter: #ff9800; is same as in light mode */ - --shiki-token-function: oklch(72.67% 0.137 299.15); - --shiki-token-string-expression: oklch(69.28% 0.179 143.2); - --shiki-token-punctuation: oklch(79.21% 0 0); - --shiki-token-link: var(--shiki-token-string); + --shiki-color-text: oklch(86.07% 0 0); + --shiki-token-constant: oklch(76.85% 0.121 252.34); + --shiki-token-string: oklch(81.11% 0.124 0); + --shiki-token-comment: oklch(55.18% 0.017 251.27); + --shiki-token-keyword: oklch(72.14% 0.162 15.49); + /*--shiki-token-parameter: #ff9800; is same as in light mode */ + --shiki-token-function: oklch(72.67% 0.137 299.15); + --shiki-token-string-expression: oklch(69.28% 0.179 143.2); + --shiki-token-punctuation: oklch(79.21% 0 0); + --shiki-token-link: var(--shiki-token-string); - /* from github-dark */ - --shiki-color-ansi-black: #586069; - --shiki-color-ansi-black-dim: #58606980; - --shiki-color-ansi-red: #ea4a5a; - --shiki-color-ansi-red-dim: #ea4a5a80; - --shiki-color-ansi-green: #34d058; - --shiki-color-ansi-green-dim: #34d05880; - --shiki-color-ansi-yellow: #ffea7f; - --shiki-color-ansi-yellow-dim: #ffea7f80; - --shiki-color-ansi-blue: #2188ff; - --shiki-color-ansi-blue-dim: #2188ff80; - --shiki-color-ansi-magenta: #b392f0; - --shiki-color-ansi-magenta-dim: #b392f080; - --shiki-color-ansi-cyan: #39c5cf; - --shiki-color-ansi-cyan-dim: #39c5cf80; - --shiki-color-ansi-white: #d1d5da; - --shiki-color-ansi-white-dim: #d1d5da80; - --shiki-color-ansi-bright-black: #959da5; - --shiki-color-ansi-bright-black-dim: #959da580; - --shiki-color-ansi-bright-red: #f97583; - --shiki-color-ansi-bright-red-dim: #f9758380; - --shiki-color-ansi-bright-green: #85e89d; - --shiki-color-ansi-bright-green-dim: #85e89d80; - --shiki-color-ansi-bright-yellow: #ffea7f; - --shiki-color-ansi-bright-yellow-dim: #ffea7f80; - --shiki-color-ansi-bright-blue: #79b8ff; - --shiki-color-ansi-bright-blue-dim: #79b8ff80; - --shiki-color-ansi-bright-magenta: #b392f0; - --shiki-color-ansi-bright-magenta-dim: #b392f080; - --shiki-color-ansi-bright-cyan: #56d4dd; - --shiki-color-ansi-bright-cyan-dim: #56d4dd80; - --shiki-color-ansi-bright-white: #fafbfc; - --shiki-color-ansi-bright-white-dim: #fafbfc80; + /* from github-dark */ + --shiki-color-ansi-black: #586069; + --shiki-color-ansi-black-dim: #58606980; + --shiki-color-ansi-red: #ea4a5a; + --shiki-color-ansi-red-dim: #ea4a5a80; + --shiki-color-ansi-green: #34d058; + --shiki-color-ansi-green-dim: #34d05880; + --shiki-color-ansi-yellow: #ffea7f; + --shiki-color-ansi-yellow-dim: #ffea7f80; + --shiki-color-ansi-blue: #2188ff; + --shiki-color-ansi-blue-dim: #2188ff80; + --shiki-color-ansi-magenta: #b392f0; + --shiki-color-ansi-magenta-dim: #b392f080; + --shiki-color-ansi-cyan: #39c5cf; + --shiki-color-ansi-cyan-dim: #39c5cf80; + --shiki-color-ansi-white: #d1d5da; + --shiki-color-ansi-white-dim: #d1d5da80; + --shiki-color-ansi-bright-black: #959da5; + --shiki-color-ansi-bright-black-dim: #959da580; + --shiki-color-ansi-bright-red: #f97583; + --shiki-color-ansi-bright-red-dim: #f9758380; + --shiki-color-ansi-bright-green: #85e89d; + --shiki-color-ansi-bright-green-dim: #85e89d80; + --shiki-color-ansi-bright-yellow: #ffea7f; + --shiki-color-ansi-bright-yellow-dim: #ffea7f80; + --shiki-color-ansi-bright-blue: #79b8ff; + --shiki-color-ansi-bright-blue-dim: #79b8ff80; + --shiki-color-ansi-bright-magenta: #b392f0; + --shiki-color-ansi-bright-magenta-dim: #b392f080; + --shiki-color-ansi-bright-cyan: #56d4dd; + --shiki-color-ansi-bright-cyan-dim: #56d4dd80; + --shiki-color-ansi-bright-white: #fafbfc; + --shiki-color-ansi-bright-white-dim: #fafbfc80; } diff --git a/packages/next-docs-ui/css/styles.css b/packages/next-docs-ui/css/styles.css index 50f90f6e1..d1de09623 100644 --- a/packages/next-docs-ui/css/styles.css +++ b/packages/next-docs-ui/css/styles.css @@ -1,90 +1,92 @@ -@import "./codeblock.css"; +@import './codeblock.css'; @tailwind base; @tailwind components; @tailwind utilities; * { - @apply nd-border-border; + @apply nd-border-border; } body { - @apply nd-bg-background nd-text-foreground; - font-feature-settings: "rlig" 1, "calt" 1; + @apply nd-bg-background nd-text-foreground; + font-feature-settings: + 'rlig' 1, + 'calt' 1; } [data-rehype-pretty-code-fragment] code { - @apply nd-grid nd-py-4; + @apply nd-grid nd-py-4; } [data-rehype-pretty-code-fragment] .line { - @apply nd-pl-4 nd-pr-8; + @apply nd-pl-4 nd-pr-8; } [data-rehype-pretty-code-fragment] .line-highlighted { - @apply nd-bg-primary/10 nd-border-l-2 nd-border-l-primary; + @apply nd-bg-primary/10 nd-border-l-2 nd-border-l-primary; } :root { - --background: 0 0% 100%; - --foreground: 222.2 47.4% 11.2%; + --background: 0 0% 100%; + --foreground: 222.2 47.4% 11.2%; - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; - --popover: 0 0% 100%; - --popover-foreground: 222.2 47.4% 11.2%; + --popover: 0 0% 100%; + --popover-foreground: 222.2 47.4% 11.2%; - --card: 0 0% 100%; - --card-foreground: 222.2 47.4% 11.2%; + --card: 0 0% 100%; + --card-foreground: 222.2 47.4% 11.2%; - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; - --primary: 222.2 47.4% 11.2%; - --primary-foreground: 210 40% 98%; + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; - --secondary: 210 40% 96.1%; - --secondary-foreground: 222.2 47.4% 11.2%; + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; - --destructive: 0 100% 50%; - --destructive-foreground: 210 40% 98%; + --destructive: 0 100% 50%; + --destructive-foreground: 210 40% 98%; - --ring: 215 20.2% 65.1%; + --ring: 215 20.2% 65.1%; - --radius: 0.5rem; + --radius: 0.5rem; } .dark { - --background: 224 71% 4%; - --foreground: 213 31% 91%; + --background: 224 71% 4%; + --foreground: 213 31% 91%; - --muted: 223 47% 11%; - --muted-foreground: 215.4 16.3% 56.9%; + --muted: 223 47% 11%; + --muted-foreground: 215.4 16.3% 56.9%; - --popover: 224 71% 4%; - --popover-foreground: 215 20.2% 65.1%; + --popover: 224 71% 4%; + --popover-foreground: 215 20.2% 65.1%; - --card: 224 71% 4%; - --card-foreground: 213 31% 91%; + --card: 224 71% 4%; + --card-foreground: 213 31% 91%; - --border: 216 34% 17%; - --input: 216 34% 17%; + --border: 216 34% 17%; + --input: 216 34% 17%; - --primary: 210 40% 98%; - --primary-foreground: 222.2 47.4% 1.2%; + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 1.2%; - --secondary: 222.2 47.4% 11.2%; - --secondary-foreground: 210 40% 98%; + --secondary: 222.2 47.4% 11.2%; + --secondary-foreground: 210 40% 98%; - --accent: 216 34% 17%; - --accent-foreground: 210 40% 98%; + --accent: 216 34% 17%; + --accent-foreground: 210 40% 98%; - --destructive: 0 63% 31%; - --destructive-foreground: 210 40% 98%; + --destructive: 0 63% 31%; + --destructive-foreground: 210 40% 98%; - --ring: 216 34% 17%; + --ring: 216 34% 17%; } diff --git a/packages/next-docs-ui/package.json b/packages/next-docs-ui/package.json index 45c5322e6..1cedaea5e 100644 --- a/packages/next-docs-ui/package.json +++ b/packages/next-docs-ui/package.json @@ -1,102 +1,101 @@ { - "name": "next-docs-ui", - "description": "The framework for building a documentation website in Next.js", - "version": "1.1.3", - "homepage": "https://next-docs-zeta.vercel.app", - "author": "Money SonMooSans", - "repository": "github:SonMooSans/next-docs", - "license": "MIT", - "files": [ - "dist/*" - ], - "exports": { - "./style.css": "./dist/style.css", - "./contentlayer": { - "import": "./dist/contentlayer/index.mjs", - "types": "./dist/contentlayer/index.d.ts" - }, - "./components": { - "import": "./dist/components/index.mjs", - "types": "./dist/components/index.d.ts" - }, - "./mdx": { - "import": "./dist/mdx/index.mjs", - "types": "./dist/mdx/index.d.ts" - }, - "./*": { - "import": "./dist/*.mjs", - "types": "./dist/*.d.ts" - } + "name": "next-docs-ui", + "description": "The framework for building a documentation website in Next.js", + "version": "1.1.3", + "homepage": "https://next-docs-zeta.vercel.app", + "author": "Money SonMooSans", + "repository": "github:SonMooSans/next-docs", + "license": "MIT", + "files": [ + "dist/*" + ], + "exports": { + "./style.css": "./dist/style.css", + "./contentlayer": { + "import": "./dist/contentlayer/index.mjs", + "types": "./dist/contentlayer/index.d.ts" }, - "typesVersions": { - "*": { - "contentlayer": [ - "./dist/contentlayer/index.d.ts" - ], - "components": [ - "./dist/components/index.d.ts" - ], - "mdx": [ - "./dist/mdx/index.d.ts" - ], - "*": [ - "./dist/*.d.ts" - ] - } + "./components": { + "import": "./dist/components/index.mjs", + "types": "./dist/components/index.d.ts" }, - "scripts": { - "build": "tsup --clean && postcss css/styles.css -o ./dist/style.css", - "clean": "rmdir /q/s dist", - "dev": "concurrently \"pnpm dev:layout\" \"pnpm dev:tailwind\"", - "dev:layout": "tsup --watch", - "dev:tailwind": "postcss css/styles.css -o ./dist/style.css --watch", - "prepublishOnly": "pnpm build", - "types": "tsup --dts-only", - "types:check": "tsc --noEmit" + "./mdx": { + "import": "./dist/mdx/index.mjs", + "types": "./dist/mdx/index.d.ts" }, - "dependencies": { - "@radix-ui/react-collapsible": "^1.0.3", - "@radix-ui/react-dialog": "^1.0.3", - "@radix-ui/react-dropdown-menu": "^2.0.5", - "@radix-ui/react-scroll-area": "^1.0.4", - "@radix-ui/react-select": "^1.2.1", - "clsx": "^1.2.1", - "cmdk": "^0.2.0", - "lucide-react": "^0.190.0", - "next-docs-zeta": "workspace:*", - "next-themes": "^0.2.1", - "rehype-img-size": "^1.0.1", - "rehype-pretty-code": "^0.9.5", - "rehype-slug": "^5.1.0", - "remark-gfm": "^3.0.1", - "scroll-into-view-if-needed": "^3.0.10", - "tailwind-merge": "^1.12.0" - }, - "peerDependencies": { - "contentlayer": "0.3.x", - "next": "13.x", - "react": "18.x", - "react-dom": "18.x" - }, - "devDependencies": { - "@tailwindcss/typography": "^0.5.9", - "@types/react": "18.2.0", - "@types/react-dom": "18.2.1", - "autoprefixer": "10.4.14", - "contentlayer": "^0.3.4", - "next": "13.4.12", - "postcss": "8.4.23", - "postcss-cli": "^10.1.0", - "postcss-import": "^15.1.0", - "postcss-lightningcss": "^0.9.0", - "tailwindcss": "3.3.2", - "tailwindcss-animate": "^1.0.5" - }, - "keywords": [ - "NextJs", - "Docs" - ], - "publishConfig": { - "access": "public" + "./*": { + "import": "./dist/*.mjs", + "types": "./dist/*.d.ts" + } + }, + "typesVersions": { + "*": { + "contentlayer": [ + "./dist/contentlayer/index.d.ts" + ], + "components": [ + "./dist/components/index.d.ts" + ], + "mdx": [ + "./dist/mdx/index.d.ts" + ], + "*": [ + "./dist/*.d.ts" + ] } + }, + "scripts": { + "build": "tsup --clean && postcss css/styles.css -o ./dist/style.css", + "clean": "rmdir /q/s dist", + "dev": "concurrently \"pnpm dev:layout\" \"pnpm dev:tailwind\"", + "dev:layout": "tsup --watch", + "dev:tailwind": "postcss css/styles.css -o ./dist/style.css --watch", + "prepublishOnly": "pnpm build", + "types:check": "tsc --noEmit" + }, + "dependencies": { + "@radix-ui/react-collapsible": "^1.0.3", + "@radix-ui/react-dialog": "^1.0.3", + "@radix-ui/react-dropdown-menu": "^2.0.5", + "@radix-ui/react-scroll-area": "^1.0.4", + "@radix-ui/react-select": "^1.2.1", + "clsx": "^1.2.1", + "cmdk": "^0.2.0", + "lucide-react": "^0.190.0", + "next-docs-zeta": "workspace:*", + "next-themes": "^0.2.1", + "rehype-img-size": "^1.0.1", + "rehype-pretty-code": "^0.9.5", + "rehype-slug": "^5.1.0", + "remark-gfm": "^3.0.1", + "scroll-into-view-if-needed": "^3.0.10", + "tailwind-merge": "^1.12.0" + }, + "peerDependencies": { + "contentlayer": "0.3.x", + "next": "13.x", + "react": "18.x", + "react-dom": "18.x" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.9", + "@types/react": "18.2.0", + "@types/react-dom": "18.2.1", + "autoprefixer": "10.4.14", + "contentlayer": "^0.3.4", + "next": "13.4.12", + "postcss": "8.4.23", + "postcss-cli": "^10.1.0", + "postcss-import": "^15.1.0", + "postcss-lightningcss": "^0.9.0", + "tailwindcss": "3.3.2", + "tailwindcss-animate": "^1.0.5" + }, + "keywords": [ + "NextJs", + "Docs" + ], + "publishConfig": { + "access": "public" + } } diff --git a/packages/next-docs-ui/postcss.config.js b/packages/next-docs-ui/postcss.config.js index 4d786fa57..301fcb18d 100644 --- a/packages/next-docs-ui/postcss.config.js +++ b/packages/next-docs-ui/postcss.config.js @@ -1,9 +1,9 @@ module.exports = { - plugins: { - "postcss-import": {}, - tailwindcss: {}, - "postcss-lightningcss": { - browsers: ">= .25%", - }, - }, -}; + plugins: { + 'postcss-import': {}, + tailwindcss: {}, + 'postcss-lightningcss': { + browsers: '>= .25%' + } + } +} diff --git a/packages/next-docs-ui/src/components/breadcrumb.tsx b/packages/next-docs-ui/src/components/breadcrumb.tsx index b5957bcee..238a7d33e 100644 --- a/packages/next-docs-ui/src/components/breadcrumb.tsx +++ b/packages/next-docs-ui/src/components/breadcrumb.tsx @@ -1,38 +1,38 @@ -import type { TreeNode } from "next-docs-zeta/server"; -import { useBreadcrumb } from "next-docs-zeta/breadcrumb"; -import clsx from "clsx"; -import { ChevronRightIcon } from "lucide-react"; -import Link from "next/link"; -import { Fragment } from "react"; -import { usePathname } from "next/navigation"; +import clsx from 'clsx' +import { ChevronRightIcon } from 'lucide-react' +import { useBreadcrumb } from 'next-docs-zeta/breadcrumb' +import type { TreeNode } from 'next-docs-zeta/server' +import Link from 'next/link' +import { usePathname } from 'next/navigation' +import { Fragment } from 'react' const itemStyles = - "nd-overflow-hidden nd-overflow-ellipsis nd-whitespace-nowrap"; + 'nd-overflow-hidden nd-overflow-ellipsis nd-whitespace-nowrap' export function Breadcrumb({ tree }: { tree: TreeNode[] }) { - const pathname = usePathname(); - const items = useBreadcrumb(pathname, tree); + const pathname = usePathname() + const items = useBreadcrumb(pathname, tree) - return ( -
-

Docs

- {items.map((item, i) => { - const active = items.length === i + 1; - const style = clsx(itemStyles, active && "nd-text-foreground"); + return ( +
+

Docs

+ {items.map((item, i) => { + const active = items.length === i + 1 + const style = clsx(itemStyles, active && 'nd-text-foreground') - return ( - - - {item.url != null ? ( - - {item.name} - - ) : ( -

{item.name}

- )} -
- ); - })} -
- ); + return ( + + + {item.url != null ? ( + + {item.name} + + ) : ( +

{item.name}

+ )} +
+ ) + })} +
+ ) } diff --git a/packages/next-docs-ui/src/components/dialog/search.tsx b/packages/next-docs-ui/src/components/dialog/search.tsx index e75d0c116..829ce72f8 100644 --- a/packages/next-docs-ui/src/components/dialog/search.tsx +++ b/packages/next-docs-ui/src/components/dialog/search.tsx @@ -1,80 +1,79 @@ -import { useDocsSearch } from "next-docs-zeta/search"; import { - CommandDialog, - CommandEmpty, - CommandGroup, - CommandInput, - CommandItem, - CommandList, - CommandSeparator, -} from "@/components/ui/command"; -import { useRouter } from "next/navigation"; -import { useCallback, useContext } from "react"; -import { BookOpenIcon } from "lucide-react"; -import { I18nContext } from "@/contexts/i18n"; - -import type { DialogProps } from "@radix-ui/react-dialog"; + CommandDialog, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, + CommandSeparator +} from '@/components/ui/command' +import { I18nContext } from '@/contexts/i18n' +import type { DialogProps } from '@radix-ui/react-dialog' +import { BookOpenIcon } from 'lucide-react' +import { useDocsSearch } from 'next-docs-zeta/search' +import { useRouter } from 'next/navigation' +import { useCallback, useContext } from 'react' export type SearchOptions = { - /** - * links to be displayed in Search Dialog - */ - links?: [name: string, link: string][]; -}; + /** + * links to be displayed in Search Dialog + */ + links?: [name: string, link: string][] +} export default function SearchDialog({ - links = [], - ...props + links = [], + ...props }: DialogProps & SearchOptions) { - const router = useRouter(); - const locale = useContext(I18nContext)?.locale; - const { search, setSearch, query } = useDocsSearch(locale); + const router = useRouter() + const locale = useContext(I18nContext)?.locale + const { search, setSearch, query } = useDocsSearch(locale) - const onOpen = useCallback( - (v: string) => { - router.push(v); - props.onOpenChange?.(false); - }, - [router] - ); + const onOpen = useCallback( + (v: string) => { + router.push(v) + props.onOpenChange?.(false) + }, + [router] + ) - return ( - - - - No results found. + return ( + + + + No results found. - {query.data != "empty" && - query.data != null && - query.data.length !== 0 && ( - - {query.data.map((item) => ( - - {item.doc.title} - - ))} - - )} - - {query.data === "empty" && links.length > 0 && ( - - {links.map(([name, url], i) => ( - - - {name} - - ))} - - )} - - - ); + {query.data != 'empty' && + query.data != null && + query.data.length !== 0 && ( + + {query.data.map(item => ( + + {item.doc.title} + + ))} + + )} + + {query.data === 'empty' && links.length > 0 && ( + + {links.map(([name, url], i) => ( + + + {name} + + ))} + + )} + + + ) } diff --git a/packages/next-docs-ui/src/components/index.ts b/packages/next-docs-ui/src/components/index.ts index e3b3d2048..3937081b1 100644 --- a/packages/next-docs-ui/src/components/index.ts +++ b/packages/next-docs-ui/src/components/index.ts @@ -1,5 +1,5 @@ -"use client"; -export * from "./theme-toggle"; -export * from "./nav"; -export * from "./search-toggle"; -export * from "./roll-button"; +'use client' +export * from './theme-toggle' +export * from './nav' +export * from './search-toggle' +export * from './roll-button' diff --git a/packages/next-docs-ui/src/components/mdx/card.tsx b/packages/next-docs-ui/src/components/mdx/card.tsx index 86f130c34..13f69c392 100644 --- a/packages/next-docs-ui/src/components/mdx/card.tsx +++ b/packages/next-docs-ui/src/components/mdx/card.tsx @@ -1,30 +1,30 @@ -import { SafeLink } from "next-docs-zeta/link"; -import { ReactNode } from "react"; +import { SafeLink } from 'next-docs-zeta/link' +import type { ReactNode } from 'react' export function Cards({ children }: { children: ReactNode }) { - return ( -
- {children} -
- ); + return ( +
+ {children} +
+ ) } export function Card({ - href, - title, - description, + href, + title, + description }: { - href: string; - title: string; - description: string; + href: string + title: string + description: string }) { - return ( - -

{title}

-

{description}

-
- ); + return ( + +

{title}

+

{description}

+
+ ) } diff --git a/packages/next-docs-ui/src/components/mdx/footer.tsx b/packages/next-docs-ui/src/components/mdx/footer.tsx index 1feb72d9a..b5ab56ff2 100644 --- a/packages/next-docs-ui/src/components/mdx/footer.tsx +++ b/packages/next-docs-ui/src/components/mdx/footer.tsx @@ -1,39 +1,35 @@ -import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react"; -import Link from "next/link"; +import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react' +import Link from 'next/link' export type FooterProps = { - previous?: { name: string; url: string }; - next?: { name: string; url: string }; -}; + previous?: { name: string; url: string } + next?: { name: string; url: string } +} const item = - "nd-flex nd-flex-row nd-gap-2 nd-items-end nd-text-sm nd-text-muted-foreground"; + 'nd-flex nd-flex-row nd-gap-2 nd-items-end nd-text-sm nd-text-muted-foreground' export function Footer({ next, previous }: FooterProps) { - return ( -
- {previous && ( - - -
-

Previous

-

- {previous.name} -

-
- - )} - {next && ( - -
-

Next

-

- {next.name} -

-
- - - )} -
- ); + return ( +
+ {previous && ( + + +
+

Previous

+

{previous.name}

+
+ + )} + {next && ( + +
+

Next

+

{next.name}

+
+ + + )} +
+ ) } diff --git a/packages/next-docs-ui/src/components/mdx/heading.tsx b/packages/next-docs-ui/src/components/mdx/heading.tsx index 87a71256d..5a34b18a6 100644 --- a/packages/next-docs-ui/src/components/mdx/heading.tsx +++ b/packages/next-docs-ui/src/components/mdx/heading.tsx @@ -1,30 +1,30 @@ -import clsx from "clsx"; -import { LinkIcon } from "lucide-react"; -import { ComponentPropsWithoutRef } from "react"; +import clsx from 'clsx' +import { LinkIcon } from 'lucide-react' +import type { ComponentPropsWithoutRef } from 'react' -type Types = "h1" | "h2" | "h3" | "h4" | "h5" | "h6"; -type HeadingProps = Omit, "as"> & { - as?: T; -}; +type Types = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' +type HeadingProps = Omit, 'as'> & { + as?: T +} -export function Heading({ - id, - as, - ...props +export function Heading({ + id, + as, + ...props }: HeadingProps) { - const As = as ?? "h1"; + const As = as ?? 'h1' - return ( - - - {props.children} -
- - - - ); + return ( + + + {props.children} + + + + + ) } diff --git a/packages/next-docs-ui/src/components/mdx/pre.tsx b/packages/next-docs-ui/src/components/mdx/pre.tsx index da403c247..dbfc2dc0c 100644 --- a/packages/next-docs-ui/src/components/mdx/pre.tsx +++ b/packages/next-docs-ui/src/components/mdx/pre.tsx @@ -1,67 +1,68 @@ -import { CheckIcon, CopyIcon } from "lucide-react"; -import { ComponentProps, useRef, useState, useEffect } from "react"; +import { CheckIcon, CopyIcon } from 'lucide-react' +import type { ComponentProps } from 'react' +import { useEffect, useRef, useState } from 'react' -export function Pre({ title, ...props }: ComponentProps<"pre">) { - const ref = useRef(null); - const onCopy = () => { - if (ref.current == null || ref.current.textContent == null) return; +export function Pre({ title, ...props }: ComponentProps<'pre'>) { + const ref = useRef(null) + const onCopy = () => { + if (ref.current == null || ref.current.textContent == null) return - navigator.clipboard.writeText(ref.current.textContent); - }; + navigator.clipboard.writeText(ref.current.textContent) + } - return ( -
- {title && ( -
- {title} -
- )} - -
-                {props.children}
-            
+ return ( +
+ {title && ( +
+ {title}
- ); + )} + +
+        {props.children}
+      
+
+ ) } function CopyButton({ onCopy }: { onCopy: () => void }) { - const [checked, setChecked] = useState(false); + const [checked, setChecked] = useState(false) - const onClick = () => { - onCopy(); - setChecked(true); - }; + const onClick = () => { + onCopy() + setChecked(true) + } - useEffect(() => { - if (!checked) return; + useEffect(() => { + if (!checked) return - const timer = setTimeout(() => { - setChecked(false); - }, 1500); + const timer = setTimeout(() => { + setChecked(false) + }, 1500) - return () => { - clearTimeout(timer); - }; - }, [checked]); + return () => { + clearTimeout(timer) + } + }, [checked]) - return ( - - ); + return ( + + ) } diff --git a/packages/next-docs-ui/src/components/nav.tsx b/packages/next-docs-ui/src/components/nav.tsx index 36d6bacba..f2de2d5ac 100644 --- a/packages/next-docs-ui/src/components/nav.tsx +++ b/packages/next-docs-ui/src/components/nav.tsx @@ -1,58 +1,56 @@ -import { ReactNode } from "react"; -import { SearchBar } from "./search-toggle"; -import { SidebarTrigger } from "./sidebar"; -import { MenuIcon } from "lucide-react"; -import { ThemeToggle } from "./theme-toggle"; -import Link from "next/link"; +import { MenuIcon } from 'lucide-react' +import Link from 'next/link' +import type { ReactNode } from 'react' +import { SearchBar } from './search-toggle' +import { SidebarTrigger } from './sidebar' +import { ThemeToggle } from './theme-toggle' type NavLinkProps = { - icon: ReactNode; - href: string; - external?: boolean; -}; + icon: ReactNode + href: string + external?: boolean +} export function Nav({ - links, - enableSidebar = true, - children, + links, + enableSidebar = true, + children }: { - links?: NavLinkProps[]; - enableSidebar?: boolean; - children: ReactNode; + links?: NavLinkProps[] + enableSidebar?: boolean + children: ReactNode }) { - return ( - - ); + return ( + + ) } export function NavLink(props: NavLinkProps) { - return ( - - {props.icon} - - ); + return ( + + {props.icon} + + ) } diff --git a/packages/next-docs-ui/src/components/roll-button.tsx b/packages/next-docs-ui/src/components/roll-button.tsx index f9d4ff9f8..dcf76eb1e 100644 --- a/packages/next-docs-ui/src/components/roll-button.tsx +++ b/packages/next-docs-ui/src/components/roll-button.tsx @@ -1,50 +1,49 @@ -import clsx from "clsx"; -import { ChevronUpIcon } from "lucide-react"; -import { useEffect, useState } from "react"; +import clsx from 'clsx' +import { ChevronUpIcon } from 'lucide-react' +import { useEffect, useState } from 'react' type RollButtonProps = { - /** - * Percentage of scroll position to display the roll button - * - * @default 0.2 - */ - percentage?: number; -}; + /** + * Percentage of scroll position to display the roll button + * + * @default 0.2 + */ + percentage?: number +} /** * A button that scrolls to the top */ export function RollButton({ percentage = 0.2 }: RollButtonProps) { - const [show, setShow] = useState(false); + const [show, setShow] = useState(false) - useEffect(() => { - window.addEventListener("scroll", () => { - const element = document.scrollingElement; - if (!element) return; - const nearTop = - element.scrollTop / - (element.scrollHeight - element.clientHeight) < - percentage; + useEffect(() => { + window.addEventListener('scroll', () => { + const element = document.scrollingElement + if (!element) return + const nearTop = + element.scrollTop / (element.scrollHeight - element.clientHeight) < + percentage - setShow(!nearTop); - }); - }, []); + setShow(!nearTop) + }) + }, []) - return ( - - ); + return ( + + ) } diff --git a/packages/next-docs-ui/src/components/search-toggle.tsx b/packages/next-docs-ui/src/components/search-toggle.tsx index 6869a0bf4..68264c112 100644 --- a/packages/next-docs-ui/src/components/search-toggle.tsx +++ b/packages/next-docs-ui/src/components/search-toggle.tsx @@ -1,25 +1,26 @@ -import { ComponentPropsWithoutRef, useContext } from "react"; -import { cn } from "@/utils/cn"; -import { SearchIcon } from "lucide-react"; -import { SearchContext } from "@/contexts/search"; +import { SearchContext } from '@/contexts/search' +import { cn } from '@/utils/cn' +import { SearchIcon } from 'lucide-react' +import type { ComponentPropsWithoutRef } from 'react' +import { useContext } from 'react' -export function SearchBar(props: ComponentPropsWithoutRef<"button">) { - const { setOpenSearch } = useContext(SearchContext); +export function SearchBar(props: ComponentPropsWithoutRef<'button'>) { + const { setOpenSearch } = useContext(SearchContext) - return ( - - ); + return ( + + ) } diff --git a/packages/next-docs-ui/src/components/sidebar.tsx b/packages/next-docs-ui/src/components/sidebar.tsx index a2db17213..a17a4f18e 100644 --- a/packages/next-docs-ui/src/components/sidebar.tsx +++ b/packages/next-docs-ui/src/components/sidebar.tsx @@ -1,154 +1,151 @@ -import clsx from "clsx"; -import { ChevronDown } from "lucide-react"; -import { ReactNode, useEffect, useState } from "react"; -import Link from "next/link"; -import { usePathname } from "next/navigation"; -import type { TreeNode, FileNode, FolderNode } from "next-docs-zeta/server"; -import * as Base from "next-docs-zeta/sidebar"; -import * as Collapsible from "@radix-ui/react-collapsible"; -import { SearchBar } from "./search-toggle"; -import { ScrollArea } from "@/components/ui/scroll-area"; +import { ScrollArea } from '@/components/ui/scroll-area' +import * as Collapsible from '@radix-ui/react-collapsible' +import clsx from 'clsx' +import { ChevronDown } from 'lucide-react' +import type { FileNode, FolderNode, TreeNode } from 'next-docs-zeta/server' +import * as Base from 'next-docs-zeta/sidebar' +import Link from 'next/link' +import { usePathname } from 'next/navigation' +import type { ReactNode } from 'react' +import { useEffect, useState } from 'react' +import { SearchBar } from './search-toggle' -export const SidebarProvider = Base.SidebarProvider; -export const SidebarTrigger = Base.SidebarTrigger; +export const { SidebarProvider } = Base +export const { SidebarTrigger } = Base -export type SidebarProps = { items: TreeNode[]; children?: ReactNode }; +export type SidebarProps = { items: TreeNode[]; children?: ReactNode } export function Sidebar({ items, children }: SidebarProps) { - return ( - - - - ); + return ( + + + + ) } function Node({ item }: { item: TreeNode }) { - if (item.type === "separator") - return ( -

- {item.name} -

- ); - if (item.type === "folder") return ; + if (item.type === 'separator') + return ( +

+ {item.name} +

+ ) + if (item.type === 'folder') return - return ; + return } function Item({ item }: { item: FileNode }) { - const { url, name } = item; - const pathname = usePathname(); - const active = pathname === url; + const { url, name } = item + const pathname = usePathname() + const active = pathname === url - return ( - - {name} - - ); + return ( + + {name} + + ) } function Folder({ item }: { item: FolderNode }) { - const { name, children, index } = item; + const { name, children, index } = item - const pathname = usePathname(); - const active = index && pathname === index.url; - const childActive = pathname.startsWith(item.url + "/"); - const [extend, setExtend] = useState(active || childActive); + const pathname = usePathname() + const active = index && pathname === index.url + const childActive = pathname.startsWith(item.url + '/') + const [extend, setExtend] = useState(active || childActive) - useEffect(() => { - if (active || childActive) { - setExtend(true); - } - }, [active, childActive]); + useEffect(() => { + if (active || childActive) { + setExtend(true) + } + }, [active, childActive]) - const onClick = () => { - if (item.index == null || active) { - setExtend((prev) => !prev); - } - }; + const onClick = () => { + if (item.index == null || active) { + setExtend(prev => !prev) + } + } - const As = index == null ? "p" : Link; - return ( - - + + {index ? ( + + {name} + + ) : ( +

+ {name} +

+ )} + +
+ +
    + {children.map((item, i) => { + const active = item.type !== 'separator' && pathname === item.url + + return ( +
  • - - {name} - - - - -
      - {children.map((item, i) => { - const active = - item.type !== "separator" && pathname === item.url; - - return ( -
    • - -
    • - ); - })} -
    -
    - - ); + > + +
  • + ) + })} +
+
+
+ ) } diff --git a/packages/next-docs-ui/src/components/theme-toggle.tsx b/packages/next-docs-ui/src/components/theme-toggle.tsx index 3a599599c..88d67b395 100644 --- a/packages/next-docs-ui/src/components/theme-toggle.tsx +++ b/packages/next-docs-ui/src/components/theme-toggle.tsx @@ -1,36 +1,35 @@ -import { MoonIcon, SunIcon } from "lucide-react"; -import { useTheme } from "next-themes"; - import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, -} from "@/components/ui/dropdown-menu"; + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger +} from '@/components/ui/dropdown-menu' +import { MoonIcon, SunIcon } from 'lucide-react' +import { useTheme } from 'next-themes' export function ThemeToggle() { - const { setTheme } = useTheme(); + const { setTheme } = useTheme() - return ( - - - - - - setTheme("light")}> - Light - - setTheme("dark")}> - Dark - - setTheme("system")}> - System - - - - ); + return ( + + + + + + setTheme('light')}> + Light + + setTheme('dark')}> + Dark + + setTheme('system')}> + System + + + + ) } diff --git a/packages/next-docs-ui/src/components/toc.tsx b/packages/next-docs-ui/src/components/toc.tsx index 7d6635139..7429a7019 100644 --- a/packages/next-docs-ui/src/components/toc.tsx +++ b/packages/next-docs-ui/src/components/toc.tsx @@ -1,60 +1,58 @@ -import * as Primitive from "next-docs-zeta/toc"; -import type { TOCItemType } from "next-docs-zeta/server"; -import { useEffect, useRef } from "react"; -import scrollIntoView from "scroll-into-view-if-needed"; +import type { TOCItemType } from 'next-docs-zeta/server' +import * as Primitive from 'next-docs-zeta/toc' +import { useEffect, useRef } from 'react' +import scrollIntoView from 'scroll-into-view-if-needed' export function TOC({ items }: { items: TOCItemType[] }) { - return ( -
- - {items.length > 0 && ( -

On this page

- )} - {items.map((item, i) => ( - - ))} -
-
- ); + return ( +
+ + {items.length > 0 && ( +

On this page

+ )} + {items.map((item, i) => ( + + ))} +
+
+ ) } function TOCItem({ item }: { item: TOCItemType }) { - const ref = useRef(null); - const anchor = Primitive.useActiveAnchor(item.url); - const active = anchor?.isActive ?? false; + const ref = useRef(null) + const anchor = Primitive.useActiveAnchor(item.url) + const active = anchor?.isActive ?? false - useEffect(() => { - if (active && ref.current) { - const toc = document.getElementById("nd-toc"); + useEffect(() => { + if (active && ref.current) { + const toc = document.getElementById('nd-toc') - scrollIntoView(ref.current, { - behavior: "smooth", - block: "center", - inline: "center", - scrollMode: "always", - boundary: toc, - }); - } - }, [active]); + scrollIntoView(ref.current, { + behavior: 'smooth', + block: 'center', + inline: 'center', + scrollMode: 'always', + boundary: toc + }) + } + }, [active]) - return ( -
- - {item.title} - -
- {item.items?.map((item, i) => ( - - ))} -
-
- ); + return ( +
+ + {item.title} + +
+ {item.items?.map((item, i) => )} +
+
+ ) } diff --git a/packages/next-docs-ui/src/components/ui/command.tsx b/packages/next-docs-ui/src/components/ui/command.tsx index 4e188700d..4f3e8f3db 100644 --- a/packages/next-docs-ui/src/components/ui/command.tsx +++ b/packages/next-docs-ui/src/components/ui/command.tsx @@ -1,147 +1,146 @@ -"use client"; -import * as React from "react"; +'use client' -import { Command as CommandPrimitive } from "cmdk"; -import { Search } from "lucide-react"; -import type { DialogProps } from "@radix-ui/react-dialog"; - -import { cn } from "@/utils/cn"; -import { Dialog, DialogContent } from "./dialog"; +import { cn } from '@/utils/cn' +import type { DialogProps } from '@radix-ui/react-dialog' +import { Command as CommandPrimitive } from 'cmdk' +import { Search } from 'lucide-react' +import * as React from 'react' +import { Dialog, DialogContent } from './dialog' const Command = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); -Command.displayName = CommandPrimitive.displayName; + +)) +Command.displayName = CommandPrimitive.displayName interface CommandDialogProps extends DialogProps {} const CommandDialog = ({ children, ...props }: CommandDialogProps) => { - return ( - - - - {children} - - - - ); -}; + return ( + + + + {children} + + + + ) +} const CommandInput = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( -
- - -
-)); - -CommandInput.displayName = CommandPrimitive.Input.displayName; +
+ + +
+)) + +CommandInput.displayName = CommandPrimitive.Input.displayName const CommandList = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); - -CommandList.displayName = CommandPrimitive.List.displayName; + +)) + +CommandList.displayName = CommandPrimitive.List.displayName const CommandEmpty = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >((props, ref) => ( - -)); + +)) -CommandEmpty.displayName = CommandPrimitive.Empty.displayName; +CommandEmpty.displayName = CommandPrimitive.Empty.displayName const CommandGroup = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); - -CommandGroup.displayName = CommandPrimitive.Group.displayName; + +)) + +CommandGroup.displayName = CommandPrimitive.Group.displayName const CommandSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); -CommandSeparator.displayName = CommandPrimitive.Separator.displayName; + +)) +CommandSeparator.displayName = CommandPrimitive.Separator.displayName const CommandItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); - -CommandItem.displayName = CommandPrimitive.Item.displayName; + +)) + +CommandItem.displayName = CommandPrimitive.Item.displayName export { - Command, - CommandDialog, - CommandInput, - CommandList, - CommandEmpty, - CommandGroup, - CommandItem, - CommandSeparator, -}; + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandSeparator +} diff --git a/packages/next-docs-ui/src/components/ui/dialog.tsx b/packages/next-docs-ui/src/components/ui/dialog.tsx index 32dba8b99..f2e0d7c5a 100644 --- a/packages/next-docs-ui/src/components/ui/dialog.tsx +++ b/packages/next-docs-ui/src/components/ui/dialog.tsx @@ -1,123 +1,122 @@ -"use client"; +'use client' -import * as React from "react"; -import * as DialogPrimitive from "@radix-ui/react-dialog"; -import { X } from "lucide-react"; +import { cn } from '@/utils/cn' +import * as DialogPrimitive from '@radix-ui/react-dialog' +import { X } from 'lucide-react' +import * as React from 'react' -import { cn } from "@/utils/cn"; +const Dialog = DialogPrimitive.Root -const Dialog = DialogPrimitive.Root; - -const DialogTrigger = DialogPrimitive.Trigger; +const DialogTrigger = DialogPrimitive.Trigger const DialogPortal = ({ - className, - ...props + className, + ...props }: DialogPrimitive.DialogPortalProps) => ( - -); -DialogPortal.displayName = DialogPrimitive.Portal.displayName; + +) +DialogPortal.displayName = DialogPrimitive.Portal.displayName const DialogOverlay = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); -DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; + +)) +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName const DialogContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( - - - - {children} - - - Close - - - -)); -DialogContent.displayName = DialogPrimitive.Content.displayName; + + + + {children} + + + Close + + + +)) +DialogContent.displayName = DialogPrimitive.Content.displayName const DialogHeader = ({ - className, - ...props + className, + ...props }: React.HTMLAttributes) => ( -
-); -DialogHeader.displayName = "DialogHeader"; +
+) +DialogHeader.displayName = 'DialogHeader' const DialogFooter = ({ - className, - ...props + className, + ...props }: React.HTMLAttributes) => ( -
-); -DialogFooter.displayName = "DialogFooter"; +
+) +DialogFooter.displayName = 'DialogFooter' const DialogTitle = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); -DialogTitle.displayName = DialogPrimitive.Title.displayName; + +)) +DialogTitle.displayName = DialogPrimitive.Title.displayName const DialogDescription = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); -DialogDescription.displayName = DialogPrimitive.Description.displayName; + +)) +DialogDescription.displayName = DialogPrimitive.Description.displayName export { - Dialog, - DialogTrigger, - DialogContent, - DialogHeader, - DialogFooter, - DialogTitle, - DialogDescription, -}; + Dialog, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription +} diff --git a/packages/next-docs-ui/src/components/ui/dropdown-menu.tsx b/packages/next-docs-ui/src/components/ui/dropdown-menu.tsx index 90cbc0942..3dd7bf783 100644 --- a/packages/next-docs-ui/src/components/ui/dropdown-menu.tsx +++ b/packages/next-docs-ui/src/components/ui/dropdown-menu.tsx @@ -1,202 +1,201 @@ -import * as React from "react"; -import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; -import { CheckIcon, ChevronRightIcon, SquareDotIcon } from "lucide-react"; +import { cn } from '@/utils/cn' +import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu' +import { CheckIcon, ChevronRightIcon, SquareDotIcon } from 'lucide-react' +import * as React from 'react' -import { cn } from "@/utils/cn"; +const DropdownMenu = DropdownMenuPrimitive.Root -const DropdownMenu = DropdownMenuPrimitive.Root; +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger -const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; +const DropdownMenuGroup = DropdownMenuPrimitive.Group -const DropdownMenuGroup = DropdownMenuPrimitive.Group; +const DropdownMenuPortal = DropdownMenuPrimitive.Portal -const DropdownMenuPortal = DropdownMenuPrimitive.Portal; +const DropdownMenuSub = DropdownMenuPrimitive.Sub -const DropdownMenuSub = DropdownMenuPrimitive.Sub; - -const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup; +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup const DropdownMenuSubTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean; - } + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } >(({ className, inset, children, ...props }, ref) => ( - - {children} - - -)); + + {children} + + +)) DropdownMenuSubTrigger.displayName = - DropdownMenuPrimitive.SubTrigger.displayName; + DropdownMenuPrimitive.SubTrigger.displayName const DropdownMenuSubContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); + +)) DropdownMenuSubContent.displayName = - DropdownMenuPrimitive.SubContent.displayName; + DropdownMenuPrimitive.SubContent.displayName const DropdownMenuContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, sideOffset = 4, ...props }, ref) => ( - - - -)); -DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName const DropdownMenuItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean; - } + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } >(({ className, inset, ...props }, ref) => ( - -)); -DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; + +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName const DropdownMenuCheckboxItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, children, checked, ...props }, ref) => ( - - - - - - - {children} - -)); + + + + + + + {children} + +)) DropdownMenuCheckboxItem.displayName = - DropdownMenuPrimitive.CheckboxItem.displayName; + DropdownMenuPrimitive.CheckboxItem.displayName const DropdownMenuRadioItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( - - - - - - - {children} - -)); -DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName; + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName const DropdownMenuLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean; - } + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } >(({ className, inset, ...props }, ref) => ( - -)); -DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName const DropdownMenuSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); -DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName const DropdownMenuShortcut = ({ - className, - ...props + className, + ...props }: React.HTMLAttributes) => { - return ( - - ); -}; -DropdownMenuShortcut.displayName = "DropdownMenuShortcut"; + return ( + + ) +} +DropdownMenuShortcut.displayName = 'DropdownMenuShortcut' export { - DropdownMenu, - DropdownMenuTrigger, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuCheckboxItem, - DropdownMenuRadioItem, - DropdownMenuLabel, - DropdownMenuSeparator, - DropdownMenuShortcut, - DropdownMenuGroup, - DropdownMenuPortal, - DropdownMenuSub, - DropdownMenuSubContent, - DropdownMenuSubTrigger, - DropdownMenuRadioGroup, -}; + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup +} diff --git a/packages/next-docs-ui/src/components/ui/scroll-area.tsx b/packages/next-docs-ui/src/components/ui/scroll-area.tsx index 69ee3f006..81928b1ee 100644 --- a/packages/next-docs-ui/src/components/ui/scroll-area.tsx +++ b/packages/next-docs-ui/src/components/ui/scroll-area.tsx @@ -1,47 +1,44 @@ -import * as React from "react"; -import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"; - -import { cn } from "@/utils/cn"; +import { cn } from '@/utils/cn' +import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area' +import * as React from 'react' const ScrollArea = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( - - - {children} - - - - -)); + + + {children} + + + + +)) -ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName; +ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName const ScrollBar = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef< - typeof ScrollAreaPrimitive.ScrollAreaScrollbar - > ->(({ className, orientation = "vertical", ...props }, ref) => ( - - - -)); -ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName; + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, orientation = 'vertical', ...props }, ref) => ( + + + +)) +ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName -export { ScrollArea, ScrollBar }; +export { ScrollArea, ScrollBar } diff --git a/packages/next-docs-ui/src/components/ui/select.tsx b/packages/next-docs-ui/src/components/ui/select.tsx index 680033ffb..c640856bc 100644 --- a/packages/next-docs-ui/src/components/ui/select.tsx +++ b/packages/next-docs-ui/src/components/ui/select.tsx @@ -1,122 +1,121 @@ -import * as React from "react"; -import * as SelectPrimitive from "@radix-ui/react-select"; -import { Check, ChevronDown } from "lucide-react"; +import { cn } from '@/utils/cn' +import * as SelectPrimitive from '@radix-ui/react-select' +import { Check, ChevronDown } from 'lucide-react' +import * as React from 'react' -import { cn } from "@/utils/cn"; +const Select = SelectPrimitive.Root -const Select = SelectPrimitive.Root; +const SelectGroup = SelectPrimitive.Group -const SelectGroup = SelectPrimitive.Group; - -const SelectValue = SelectPrimitive.Value; +const SelectValue = SelectPrimitive.Value const SelectTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( - + {children} + + + + +)) +SelectTrigger.displayName = SelectPrimitive.Trigger.displayName + +const SelectContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, position = 'popper', ...props }, ref) => ( + + + + > {children} - - - - -)); -SelectTrigger.displayName = SelectPrimitive.Trigger.displayName; - -const SelectContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, position = "popper", ...props }, ref) => ( - - - - {children} - - - -)); -SelectContent.displayName = SelectPrimitive.Content.displayName; + + + +)) +SelectContent.displayName = SelectPrimitive.Content.displayName const SelectLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); -SelectLabel.displayName = SelectPrimitive.Label.displayName; + +)) +SelectLabel.displayName = SelectPrimitive.Label.displayName const SelectItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( - - - - - - + + + + + + - {children} - -)); -SelectItem.displayName = SelectPrimitive.Item.displayName; + {children} + +)) +SelectItem.displayName = SelectPrimitive.Item.displayName const SelectSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - -)); -SelectSeparator.displayName = SelectPrimitive.Separator.displayName; + +)) +SelectSeparator.displayName = SelectPrimitive.Separator.displayName export { - Select, - SelectGroup, - SelectValue, - SelectTrigger, - SelectContent, - SelectLabel, - SelectItem, - SelectSeparator, -}; + Select, + SelectGroup, + SelectValue, + SelectTrigger, + SelectContent, + SelectLabel, + SelectItem, + SelectSeparator +} diff --git a/packages/next-docs-ui/src/contentlayer/index.ts b/packages/next-docs-ui/src/contentlayer/index.ts index a7ce8ba71..74e134365 100644 --- a/packages/next-docs-ui/src/contentlayer/index.ts +++ b/packages/next-docs-ui/src/contentlayer/index.ts @@ -1,212 +1,173 @@ -import { Args, defineDocumentType } from "contentlayer/source-files"; -import rehypePrettycode, { Options as CodeOptions } from "rehype-pretty-code"; -import remarkGfm from "remark-gfm"; -import rehypeSlug from "rehype-slug"; -import rehypeImgSize, { Options as ImgSizeOptions } from "rehype-img-size"; +import type { Args } from 'contentlayer/source-files' +import { defineDocumentType } from 'contentlayer/source-files' +import type { Options as ImgSizeOptions } from 'rehype-img-size' +import rehypeImgSize from 'rehype-img-size' +import type { Options as CodeOptions } from 'rehype-pretty-code' +import rehypePrettycode from 'rehype-pretty-code' +import rehypeSlug from 'rehype-slug' +import remarkGfm from 'remark-gfm' +import { + rehypeCodeBlocksPostProcess, + rehypeCodeBlocksPreProcess +} from './mdx-plugins' function removeSlash(path: string) { - let start = 0, - end = path.length; - while (path.charAt(start) == "/") start++; - while (path.charAt(end - 1) == "/" && end > start) end--; + let start = 0, + end = path.length + while (path.charAt(start) == '/') start++ + while (path.charAt(end - 1) == '/' && end > start) end-- - return path.slice(start, end); + return path.slice(start, end) } function removePattern(path: string, pattern: string) { - if (path.endsWith("/index") || path === "index") { - path = path.slice(0, path.length - "index".length); - } - - if (!path.startsWith(pattern)) { - return path; - } + if (path.endsWith('/index') || path === 'index') { + path = path.slice(0, path.length - 'index'.length) + } - return removeSlash(path.slice(pattern.length)); -} - -function visit(node: any, tagNames: any, handler: any) { - if (tagNames.includes(node.tagName)) { - handler(node); - return; - } + if (!path.startsWith(pattern)) { + return path + } - node.children?.forEach((n: any) => visit(n, tagNames, handler)); + return removeSlash(path.slice(pattern.length)) } -/** - * Should be added before rehype-pretty-code - */ -const rehypeCodeBlocksPreProcess = () => (tree: any) => { - visit(tree, ["pre"], (preEl: any) => { - const [codeEl] = preEl.children; - - // Add default language `text` for code-blocks - codeEl.properties.className ||= ["language-text"]; - }); -}; - -/** - * Should be added after rehype-pretty-code - */ -const rehypeCodeBlocksPostProcess = () => (tree: any) => { - visit(tree, ["div"], (node: any) => { - // Remove default fragment div - // Add title to pre element - if ("data-rehype-pretty-code-fragment" in node.properties) { - if (node.children.length === 0) return; - - let preEl = node.children[0]; - - if ("data-rehype-pretty-code-title" in preEl.properties) { - const title = preEl.children[0].value; - preEl = node.children[1]; - - if (!preEl) return; - preEl.properties.title = title; - } - - Object.assign(node, preEl); - } - }); -}; - type Options = { - /** - * Where the docs files located - * @default "docs" - */ - docsPattern: string; - - /** - * @default "content" - */ - contentDirPath: string; - - /** - * The directory path for images - * @default "./public" - */ - imgDirPath: string; -}; + /** + * Where the docs files located + * @default "docs" + */ + docsPattern: string + + /** + * @default "content" + */ + contentDirPath: string + + /** + * The directory path for images + * @default "./public" + */ + imgDirPath: string +} export function createConfig(options: Partial = {}): Args { - const { - docsPattern = "docs", - contentDirPath = "content", - imgDirPath = "./public", - } = options; - - const Docs = defineDocumentType(() => ({ - name: "Docs", - filePathPattern: `${docsPattern}/**/*.mdx`, - contentType: "mdx", - fields: { - title: { - type: "string", - description: "The title of the document", - required: true, - }, - description: { - type: "string", - description: "The description of the document", - required: false, - }, - }, - computedFields: { - locale: { - type: "string", - resolve: (post) => { - return post._raw.flattenedPath.split(".")[1]; - }, - }, - slug: { - type: "string", - resolve: (post) => { - return removePattern( - post._raw.flattenedPath.split(".")[0], - docsPattern - ); - }, - }, - }, - })); - - const Meta = defineDocumentType(() => ({ - name: "Meta", - filePathPattern: `${docsPattern}/**/*.json`, - contentType: "data", - fields: { - title: { - type: "string", - description: "The title of the folder", - required: false, - }, - pages: { - type: "list", - of: { - type: "string", - }, - description: "Pages of the folder", - default: [], - }, - }, - computedFields: { - slug: { - type: "string", - resolve: (post) => - removePattern(post._raw.sourceFileDir, docsPattern), - }, - }, - })); - - return { - contentDirPath: contentDirPath, - documentTypes: [Docs, Meta], - mdx: { - rehypePlugins: [ - rehypeCodeBlocksPreProcess, - [rehypePrettycode, codeOptions], - rehypeCodeBlocksPostProcess, - rehypeSlug, - [ - rehypeImgSize as any, - { - dir: imgDirPath, - } as ImgSizeOptions, - ], - ], - remarkPlugins: [remarkGfm], + const { + docsPattern = 'docs', + contentDirPath = 'content', + imgDirPath = './public' + } = options + + const Docs = defineDocumentType(() => ({ + name: 'Docs', + filePathPattern: `${docsPattern}/**/*.mdx`, + contentType: 'mdx', + fields: { + title: { + type: 'string', + description: 'The title of the document', + required: true + }, + description: { + type: 'string', + description: 'The description of the document', + required: false + } + }, + computedFields: { + locale: { + type: 'string', + resolve: post => { + return post._raw.flattenedPath.split('.')[1] + } + }, + slug: { + type: 'string', + resolve: post => { + return removePattern( + post._raw.flattenedPath.split('.')[0], + docsPattern + ) + } + } + } + })) + + const Meta = defineDocumentType(() => ({ + name: 'Meta', + filePathPattern: `${docsPattern}/**/*.json`, + contentType: 'data', + fields: { + title: { + type: 'string', + description: 'The title of the folder', + required: false + }, + pages: { + type: 'list', + of: { + type: 'string' }, - }; + description: 'Pages of the folder', + default: [] + } + }, + computedFields: { + slug: { + type: 'string', + resolve: post => removePattern(post._raw.sourceFileDir, docsPattern) + } + } + })) + + return { + contentDirPath, + documentTypes: [Docs, Meta], + mdx: { + rehypePlugins: [ + rehypeCodeBlocksPreProcess, + [rehypePrettycode, codeOptions], + rehypeCodeBlocksPostProcess, + rehypeSlug, + [ + /* eslint-disable */ + rehypeImgSize as any, + { + dir: imgDirPath + } as ImgSizeOptions + ] + ], + remarkPlugins: [remarkGfm] + } + } } /** * MDX Plugins */ export const mdxPlugins = { - rehypeCodeBlocksPreProcess, - rehypePrettycode, - rehypeCodeBlocksPostProcess, - rehypeSlug, - rehypeImgSize: rehypeImgSize as any, // fix tsc errors - remarkGfm, -}; + rehypeCodeBlocksPreProcess, + rehypePrettycode, + rehypeCodeBlocksPostProcess, + rehypeSlug, + rehypeImgSize: rehypeImgSize as any, // fix tsc errors + remarkGfm +} export const codeOptions: Partial = { - theme: "css-variables", - keepBackground: false, - onVisitLine(node) { - if (node.children.length === 0) { - node.children = [{ type: "text", value: " " }]; - } - }, - onVisitHighlightedLine(node) { - node.properties.className.push("line-highlighted"); - }, - onVisitHighlightedWord(node) { - node.properties.className = ["word-highlighted"]; - }, -}; + theme: 'css-variables', + keepBackground: false, + onVisitLine(node) { + if (node.children.length === 0) { + node.children = [{ type: 'text', value: ' ' }] + } + }, + onVisitHighlightedLine(node) { + node.properties.className.push('line-highlighted') + }, + onVisitHighlightedWord(node) { + node.properties.className = ['word-highlighted'] + } +} -export const defaultConfig: Args = createConfig(); +export const defaultConfig: Args = createConfig() diff --git a/packages/next-docs-ui/src/contentlayer/mdx-plugins.js b/packages/next-docs-ui/src/contentlayer/mdx-plugins.js new file mode 100644 index 000000000..fd66e78cc --- /dev/null +++ b/packages/next-docs-ui/src/contentlayer/mdx-plugins.js @@ -0,0 +1,45 @@ +function visit(node, tagNames, handler) { + if (tagNames.includes(node.tagName)) { + handler(node) + return + } + + node.children?.forEach(n => visit(n, tagNames, handler)) +} + +/** + * Should be added before rehype-pretty-code + */ +export const rehypeCodeBlocksPreProcess = () => tree => { + visit(tree, ['pre'], preEl => { + const [codeEl] = preEl.children + + // Add default language `text` for code-blocks + codeEl.properties.className ||= ['language-text'] + }) +} + +/** + * Should be added after rehype-pretty-code + */ +export const rehypeCodeBlocksPostProcess = () => tree => { + visit(tree, ['div'], node => { + // Remove default fragment div + // Add title to pre element + if ('data-rehype-pretty-code-fragment' in node.properties) { + if (node.children.length === 0) return + + let preEl = node.children[0] + + if ('data-rehype-pretty-code-title' in preEl.properties) { + const title = preEl.children[0].value + preEl = node.children[1] + + if (!preEl) return + preEl.properties.title = title + } + + Object.assign(node, preEl) + } + }) +} diff --git a/packages/next-docs-ui/src/contexts/i18n.tsx b/packages/next-docs-ui/src/contexts/i18n.tsx index ccf5cffa5..b94c607e0 100644 --- a/packages/next-docs-ui/src/contexts/i18n.tsx +++ b/packages/next-docs-ui/src/contexts/i18n.tsx @@ -1,9 +1,9 @@ -import { createContext } from "react"; +import { createContext } from 'react' export const I18nContext = createContext< - | { - locale: string; - onChange: (v: string) => void; - } - | undefined ->(undefined); + | { + locale: string + onChange: (v: string) => void + } + | undefined +>(undefined) diff --git a/packages/next-docs-ui/src/contexts/search.tsx b/packages/next-docs-ui/src/contexts/search.tsx index cbd925d2a..c20cd00b1 100644 --- a/packages/next-docs-ui/src/contexts/search.tsx +++ b/packages/next-docs-ui/src/contexts/search.tsx @@ -1,47 +1,46 @@ -import { ReactNode, createContext, useEffect, useState } from "react"; -import dynamic from "next/dynamic"; -import type { SearchOptions } from "../components/dialog/search"; +import dynamic from 'next/dynamic' +import type { ReactNode } from 'react' +import { createContext, useEffect, useState } from 'react' +import type { SearchOptions } from '../components/dialog/search' -const SearchDialog = dynamic(() => import("../components/dialog/search")); +const SearchDialog = dynamic(() => import('../components/dialog/search')) -export const SearchContext = createContext({ - setOpenSearch: (v: boolean) => {}, -}); +export const SearchContext = createContext<{ + setOpenSearch: (value: boolean) => void +}>({ + setOpenSearch: () => {} +}) export function SearchProvider({ - search, - children, + search, + children }: { - search?: SearchOptions; - children: ReactNode; + search?: SearchOptions + children: ReactNode }) { - const [isOpen, setOpen] = useState(); + const [isOpen, setOpen] = useState() - useEffect(() => { - const handler = (e: KeyboardEvent) => { - if (e.key === "k" && (e.metaKey || e.ctrlKey)) { - setOpen(true); - e.preventDefault(); - } - }; + useEffect(() => { + const handler = (e: KeyboardEvent) => { + if (e.key === 'k' && (e.metaKey || e.ctrlKey)) { + setOpen(true) + e.preventDefault() + } + } - window.addEventListener("keydown", handler); + window.addEventListener('keydown', handler) - return () => { - window.removeEventListener("keydown", handler); - }; - }, []); + return () => { + window.removeEventListener('keydown', handler) + } + }, []) - return ( - - {isOpen !== undefined && ( - - )} - {children} - - ); + return ( + + {isOpen !== undefined && ( + + )} + {children} + + ) } diff --git a/packages/next-docs-ui/src/i18n.tsx b/packages/next-docs-ui/src/i18n.tsx index 9a087b4ea..608d584f3 100644 --- a/packages/next-docs-ui/src/i18n.tsx +++ b/packages/next-docs-ui/src/i18n.tsx @@ -1,39 +1,40 @@ -"use client"; +'use client' + import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { useContext } from "react"; -import { I18nContext } from "./contexts/i18n"; + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue +} from '@/components/ui/select' +import { useContext } from 'react' +import { I18nContext } from './contexts/i18n' export type LanguageSelectProps = { - languages: { name: string; locale: string }[]; -}; + languages: { name: string; locale: string }[] +} export function LanguageSelect(props: LanguageSelectProps) { - const context = useContext(I18nContext); + const context = useContext(I18nContext) - if (context == null) { - return <>; - } + if (context == null) { + return <> + } - return ( - - ); + return ( + + ) } -export const I18nProvider = I18nContext.Provider; +export const I18nProvider = I18nContext.Provider diff --git a/packages/next-docs-ui/src/layout.tsx b/packages/next-docs-ui/src/layout.tsx index 2dce62573..de8c2d42c 100644 --- a/packages/next-docs-ui/src/layout.tsx +++ b/packages/next-docs-ui/src/layout.tsx @@ -1,74 +1,70 @@ -"use client"; -import { ReactNode } from "react"; -import { Sidebar } from "@/components/sidebar"; -import clsx from "clsx"; -import { Nav } from "@/components/nav"; -import Link from "next/link"; -import { TreeNode } from "next-docs-zeta/server"; -import { GithubIcon } from "lucide-react"; +'use client' + +import { Nav } from '@/components/nav' +import { Sidebar } from '@/components/sidebar' +import clsx from 'clsx' +import { GithubIcon } from 'lucide-react' +import type { TreeNode } from 'next-docs-zeta/server' +import Link from 'next/link' +import type { ReactNode } from 'react' export type DocsLayoutProps = { - /** - * Navbar title - */ - navTitle?: string | ReactNode; + /** + * Navbar title + */ + navTitle?: string | ReactNode - tree: TreeNode[]; + tree: TreeNode[] - /** - * Replace navbar - */ - nav?: ReactNode | false; + /** + * Replace navbar + */ + nav?: ReactNode | false - /** - * Github url displayed on the navbar - */ - githubUrl?: string; + /** + * Github url displayed on the navbar + */ + githubUrl?: string - sidebarContent?: ReactNode; + sidebarContent?: ReactNode - children: ReactNode; -}; + children: ReactNode +} export function DocsLayout(props: DocsLayoutProps) { - const links = props.githubUrl - ? [ - { - href: props.githubUrl, - icon: ( - - ), - external: true, - }, - ] - : []; + const links = props.githubUrl + ? [ + { + href: props.githubUrl, + icon: , + external: true + } + ] + : [] - return ( - <> - {props.nav !== undefined ? ( - props.nav - ) : ( - - )} -
- {props.sidebarContent} - {props.children} -
- - ); + return ( + <> + {props.nav !== undefined ? ( + props.nav + ) : ( + + )} +
+ {props.sidebarContent} + {props.children} +
+ + ) } diff --git a/packages/next-docs-ui/src/mdx/index.tsx b/packages/next-docs-ui/src/mdx/index.tsx index ab1e96662..28e59fbad 100644 --- a/packages/next-docs-ui/src/mdx/index.tsx +++ b/packages/next-docs-ui/src/mdx/index.tsx @@ -1,30 +1,30 @@ -"use client"; -import NextImage from "next/image"; -import { ComponentPropsWithoutRef, ReactNode } from "react"; +'use client' -export { Card, Cards } from "@/components/mdx/card"; -export { Pre } from "@/components/mdx/pre"; -export { Heading } from "@/components/mdx/heading"; -export { SafeLink as Link } from "next-docs-zeta/link"; +import NextImage, { type ImageProps } from 'next/image' +import type { ComponentPropsWithoutRef, ReactNode } from 'react' -export const Image = ({ alt, ...props }: ComponentPropsWithoutRef<"img">) => ( - -); +export { Card, Cards } from '@/components/mdx/card' +export { Pre } from '@/components/mdx/pre' +export { Heading } from '@/components/mdx/heading' +export { SafeLink as Link } from 'next-docs-zeta/link' -export const Table = (props: ComponentPropsWithoutRef<"table">) => ( -
-
- -); +export const Image = (props: ComponentPropsWithoutRef<'img'>) => ( + +) + +export const Table = (props: ComponentPropsWithoutRef<'table'>) => ( +
+
+ +) export function MDXContent({ children }: { children: ReactNode }) { - return ( -
- {children} -
- ); + return ( +
+ {children} +
+ ) } diff --git a/packages/next-docs-ui/src/not-found.tsx b/packages/next-docs-ui/src/not-found.tsx index fba5a177e..a98532bfa 100644 --- a/packages/next-docs-ui/src/not-found.tsx +++ b/packages/next-docs-ui/src/not-found.tsx @@ -1,18 +1,18 @@ -import Link from "next/link"; +import Link from 'next/link' export default function NotFound() { - return ( -
-

Not Found

-

- This page could not be found. -

- - Back to Home -> - -
- ); + return ( +
+

Not Found

+

+ This page could not be found. +

+ + Back to Home -> + +
+ ) } diff --git a/packages/next-docs-ui/src/page.tsx b/packages/next-docs-ui/src/page.tsx index 225e231b4..f378dda33 100644 --- a/packages/next-docs-ui/src/page.tsx +++ b/packages/next-docs-ui/src/page.tsx @@ -1,37 +1,38 @@ -"use client"; -import { TableOfContents, TreeNode } from "next-docs-zeta/server"; -import { Breadcrumb } from "@/components/breadcrumb"; -import { TOC } from "@/components/toc"; -import { Footer, FooterProps } from "@/components/mdx/footer"; +'use client' -import type { ReactNode } from "react"; +import { Breadcrumb } from '@/components/breadcrumb' +import type { FooterProps } from '@/components/mdx/footer' +import { Footer } from '@/components/mdx/footer' +import { TOC } from '@/components/toc' +import type { TableOfContents, TreeNode } from 'next-docs-zeta/server' +import type { ReactNode } from 'react' export type DocsPageProps = { - toc: TableOfContents; + toc: TableOfContents - /** - * Custom content in TOC container - */ - tocContent?: ReactNode; - tree: TreeNode[]; - children: ReactNode; - footer?: FooterProps | false; -}; + /** + * Custom content in TOC container + */ + tocContent?: ReactNode + tree: TreeNode[] + children: ReactNode + footer?: FooterProps | false +} export function DocsPage(props: DocsPageProps) { - return ( - <> -
- - {props.children} - {props.footer !== false &&
} -
-
-
- - {props.tocContent} -
-
- - ); + return ( + <> +
+ + {props.children} + {props.footer !== false &&
} +
+
+
+ + {props.tocContent} +
+
+ + ) } diff --git a/packages/next-docs-ui/src/provider.tsx b/packages/next-docs-ui/src/provider.tsx index 2da0586d1..f6a3554ee 100644 --- a/packages/next-docs-ui/src/provider.tsx +++ b/packages/next-docs-ui/src/provider.tsx @@ -1,23 +1,22 @@ -"use client"; -import { ThemeProvider } from "next-themes"; -import { SidebarProvider } from "./components/sidebar"; -import { SearchProvider } from "./contexts/search"; -import { type ReactNode } from "react"; -import type { SearchOptions } from "./components/dialog/search"; +'use client' + +import { ThemeProvider } from 'next-themes' +import { type ReactNode } from 'react' +import type { SearchOptions } from './components/dialog/search' +import { SidebarProvider } from './components/sidebar' +import { SearchProvider } from './contexts/search' export type RootProviderProps = { - search?: SearchOptions; - children: ReactNode; -}; + search?: SearchOptions + children: ReactNode +} export function RootProvider(props: RootProviderProps) { - return ( - - - - {props.children} - - - - ); + return ( + + + {props.children} + + + ) } diff --git a/packages/next-docs-ui/src/utils/cn.ts b/packages/next-docs-ui/src/utils/cn.ts index 1fcd79eaf..0c944fc6c 100644 --- a/packages/next-docs-ui/src/utils/cn.ts +++ b/packages/next-docs-ui/src/utils/cn.ts @@ -1,6 +1,6 @@ -import { createTailwindMerge, getDefaultConfig } from "tailwind-merge"; +import { createTailwindMerge, getDefaultConfig } from 'tailwind-merge' -export const cn = createTailwindMerge(getDefaultConfig, (config) => ({ - ...config, - prefix: "nd-", -})); +export const cn = createTailwindMerge(getDefaultConfig, config => ({ + ...config, + prefix: 'nd-' +})) diff --git a/packages/next-docs-ui/tailwind.config.js b/packages/next-docs-ui/tailwind.config.js index 2af60a299..f00558511 100644 --- a/packages/next-docs-ui/tailwind.config.js +++ b/packages/next-docs-ui/tailwind.config.js @@ -1,108 +1,105 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - darkMode: "class", - content: ["./src/**/*.{ts,tsx}"], - prefix: "nd-", - theme: { - container: { - center: true, - padding: "2rem", - screens: { - "2xl": "1200px", - }, + darkMode: 'class', + content: ['./src/**/*.{ts,tsx}'], + prefix: 'nd-', + theme: { + container: { + center: true, + padding: '2rem', + screens: { + '2xl': '1200px' + } + }, + extend: { + colors: { + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' }, - extend: { - colors: { - border: "hsl(var(--border))", - input: "hsl(var(--input))", - ring: "hsl(var(--ring))", - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", - primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))", - }, - secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))", - }, - destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))", - }, - muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))", - }, - accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))", - }, - popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))", - }, - card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))", - }, - }, - keyframes: { - "collapsible-down": { - from: { height: 0 }, - to: { height: "var(--radix-collapsible-content-height)" }, - }, - "collapsible-up": { - from: { height: "var(--radix-collapsible-content-height)" }, - to: { height: 0 }, - }, - }, - animation: { - "collapsible-down": "collapsible-down 0.2s ease-out", - "collapsible-up": "collapsible-up 0.2s ease-out", - }, - typography: () => ({ - text: { - css: { - "--tw-prose-body": "hsl(var(--foreground))", - "--tw-prose-headings": "hsl(var(--foreground))", - "--tw-prose-lead": "hsl(var(--foreground))", - "--tw-prose-links": "hsl(var(--primary))", - "--tw-prose-bold": "hsl(var(--foreground))", - "--tw-prose-counters": "hsl(var(--muted-foreground))", - "--tw-prose-bullets": "hsl(var(--foreground))", - "--tw-prose-hr": "hsl(var(--foreground))", - "--tw-prose-quotes": "hsl(var(--foreground))", - "--tw-prose-quote-borders": "hsl(var(--border))", - "--tw-prose-captions": "hsl(var(--foreground))", - "--tw-prose-code": "hsl(var(--foreground))", - "--tw-prose-th-borders": "hsl(var(--border))", - "--tw-prose-td-borders": "hsl(var(--border))", - a: { - "font-weight": "400", - "text-decoration": "none", - "&:hover": { - "text-decoration": "underline", - }, - }, - code: { - padding: "0.4rem", - "border-radius": "5px", - background: "hsl(var(--secondary))", - "&::before": { - content: "none", - }, - "&::after": { - content: "none", - }, - }, - }, - }, - }), + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' }, - }, - plugins: [ - require("tailwindcss-animate"), - require("@tailwindcss/typography"), - ], -}; + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + } + }, + keyframes: { + 'collapsible-down': { + from: { height: 0 }, + to: { height: 'var(--radix-collapsible-content-height)' } + }, + 'collapsible-up': { + from: { height: 'var(--radix-collapsible-content-height)' }, + to: { height: 0 } + } + }, + animation: { + 'collapsible-down': 'collapsible-down 0.2s ease-out', + 'collapsible-up': 'collapsible-up 0.2s ease-out' + }, + typography: () => ({ + text: { + css: { + '--tw-prose-body': 'hsl(var(--foreground))', + '--tw-prose-headings': 'hsl(var(--foreground))', + '--tw-prose-lead': 'hsl(var(--foreground))', + '--tw-prose-links': 'hsl(var(--primary))', + '--tw-prose-bold': 'hsl(var(--foreground))', + '--tw-prose-counters': 'hsl(var(--muted-foreground))', + '--tw-prose-bullets': 'hsl(var(--foreground))', + '--tw-prose-hr': 'hsl(var(--foreground))', + '--tw-prose-quotes': 'hsl(var(--foreground))', + '--tw-prose-quote-borders': 'hsl(var(--border))', + '--tw-prose-captions': 'hsl(var(--foreground))', + '--tw-prose-code': 'hsl(var(--foreground))', + '--tw-prose-th-borders': 'hsl(var(--border))', + '--tw-prose-td-borders': 'hsl(var(--border))', + a: { + 'font-weight': '400', + 'text-decoration': 'none', + '&:hover': { + 'text-decoration': 'underline' + } + }, + code: { + padding: '0.4rem', + 'border-radius': '5px', + background: 'hsl(var(--secondary))', + '&::before': { + content: 'none' + }, + '&::after': { + content: 'none' + } + } + } + } + }) + } + }, + plugins: [require('tailwindcss-animate'), require('@tailwindcss/typography')] +} diff --git a/packages/next-docs-ui/tsconfig.json b/packages/next-docs-ui/tsconfig.json index 90bedc3b3..99b74794e 100644 --- a/packages/next-docs-ui/tsconfig.json +++ b/packages/next-docs-ui/tsconfig.json @@ -1,20 +1,20 @@ { - "compilerOptions": { - "target": "es2016", - "module": "ESNext", - "declaration": false, - "noEmit": true, - "esModuleInterop": true, - "strict": true, - "skipLibCheck": true, - "allowJs": true, - "jsx": "react-jsx", - "moduleResolution": "node", - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "resolveJsonModule": true, - "paths": { - "@/*": ["./src/*"] - } - }, - "exclude": ["node_modules"] + "compilerOptions": { + "target": "es2016", + "module": "ESNext", + "declaration": false, + "noEmit": true, + "esModuleInterop": true, + "strict": true, + "skipLibCheck": true, + "allowJs": true, + "jsx": "react-jsx", + "moduleResolution": "node", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "resolveJsonModule": true, + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules"] } diff --git a/packages/next-docs-ui/tsup.config.ts b/packages/next-docs-ui/tsup.config.ts index 0b54e239d..aebbeb2cd 100644 --- a/packages/next-docs-ui/tsup.config.ts +++ b/packages/next-docs-ui/tsup.config.ts @@ -1,13 +1,13 @@ -import { defineConfig } from "tsup"; -import tsconfig from "./tsconfig.json"; +import { defineConfig } from 'tsup' +import tsconfig from './tsconfig.json' export default defineConfig({ - entry: [ - "./src/{contentlayer,mdx,components}/index.{ts,tsx}", - "./src/*.{ts,tsx}", - ], - external: ["next-docs-zeta", "shiki"], - format: "esm", - dts: true, - target: tsconfig.compilerOptions.target as "es2016", -}); + entry: [ + './src/{contentlayer,mdx,components}/index.{ts,tsx}', + './src/*.{ts,tsx}' + ], + external: ['next-docs-zeta', 'shiki'], + format: 'esm', + dts: true, + target: tsconfig.compilerOptions.target as 'es2016' +}) diff --git a/packages/next-docs/CHANGELOG.md b/packages/next-docs/CHANGELOG.md index a6fe2f594..a381db8fd 100644 --- a/packages/next-docs/CHANGELOG.md +++ b/packages/next-docs/CHANGELOG.md @@ -28,7 +28,8 @@ ### Minor Changes -- 4fa45c0: Add support for dynamic hrefs and relative paths to `` component +- 4fa45c0: Add support for dynamic hrefs and relative paths to `` + component - 0983891: Add international Docs search ## 0.3.2 diff --git a/packages/next-docs/README.md b/packages/next-docs/README.md index f0a8b2642..e69f2fd1d 100644 --- a/packages/next-docs/README.md +++ b/packages/next-docs/README.md @@ -6,9 +6,9 @@ The library for building documentation websites in Next.js. Next Docs Provides: -- Search (Supported: flexsearch) -- Breadcrumb, Sidebar, TOC Components -- Additional utilities (getTOC, buildPageTree) +- Search (Supported: flexsearch) +- Breadcrumb, Sidebar, TOC Components +- Additional utilities (getTOC, buildPageTree) ## Installation @@ -20,13 +20,16 @@ npm install next-docs-zeta Next Docs is built for Next.js App Router and support any sources. -It's recommended to use Next Docs with [Tailwind CSS](https://tailwindcss.com) + [Radix UI](https://www.radix-ui.com), and [Contentlayer](https://www.contentlayer.dev) (or any CMS). +It's recommended to use Next Docs with [Tailwind CSS](https://tailwindcss.com) + +[Radix UI](https://www.radix-ui.com), and +[Contentlayer](https://www.contentlayer.dev) (or any CMS). ### Example [![Open in CodeSandbox](https://img.shields.io/badge/Open%20in-CodeSandbox-blue?style=flat-square&logo=codesandbox)](https://githubbox.com/SonMooSans/next-docs-template) -View the [Template](https://github.com/SonMooSans/next-docs-template) repository on Github. +View the [Template](https://github.com/SonMooSans/next-docs-template) repository +on Github. ### Sources @@ -34,4 +37,6 @@ Next Docs has native support for [Contentlayer](https://www.contentlayer.dev). ### Learn More -**Next Docs** offers simple document searching as well as components for building a good docs. You can go to our [website](https://next-docs-zeta.vercel.app/docs) to learn more about this. +**Next Docs** offers simple document searching as well as components for +building a good docs. You can go to our +[website](https://next-docs-zeta.vercel.app/docs) to learn more about this. diff --git a/packages/next-docs/package.json b/packages/next-docs/package.json index 881158b25..a4cf05076 100644 --- a/packages/next-docs/package.json +++ b/packages/next-docs/package.json @@ -1,116 +1,115 @@ { - "name": "next-docs-zeta", - "description": "The library for building a documentation website in Next.js", - "version": "1.1.3", - "homepage": "https://next-docs-zeta.vercel.app", - "author": "Money SonMooSans", - "repository": "github:SonMooSans/next-docs", - "license": "MIT", - "files": [ - "dist/*" - ], - "exports": { - "./sidebar": { - "import": "./dist/sidebar/index.mjs", - "types": "./dist/sidebar/index.d.ts" - }, - "./breadcrumb": { - "import": "./dist/breadcrumb/index.mjs", - "types": "./dist/breadcrumb/index.d.ts" - }, - "./toc": { - "import": "./dist/toc/index.mjs", - "types": "./dist/toc/index.d.ts" - }, - "./search": { - "import": "./dist/search/index.mjs", - "types": "./dist/search/index.d.ts" - }, - "./server": { - "import": "./dist/server/index.mjs", - "types": "./dist/server/index.d.ts" - }, - "./link": { - "import": "./dist/link/index.mjs", - "types": "./dist/link/index.d.ts" - }, - "./contentlayer": { - "import": "./dist/contentlayer/index.mjs", - "types": "./dist/contentlayer/index.d.ts" - }, - "./middleware": { - "import": "./dist/middleware/index.mjs", - "types": "./dist/middleware/index.d.ts" - }, - "./*": { - "import": "./dist/*.mjs", - "types": "./dist/*.d.ts" - } + "name": "next-docs-zeta", + "description": "The library for building a documentation website in Next.js", + "version": "1.1.3", + "homepage": "https://next-docs-zeta.vercel.app", + "author": "Money SonMooSans", + "repository": "github:SonMooSans/next-docs", + "license": "MIT", + "files": [ + "dist/*" + ], + "exports": { + "./sidebar": { + "import": "./dist/sidebar/index.mjs", + "types": "./dist/sidebar/index.d.ts" }, - "typesVersions": { - "*": { - "sidebar": [ - "./dist/sidebar/index.d.ts" - ], - "breadcrumb": [ - "./dist/breadcrumb/index.d.ts" - ], - "toc": [ - "./dist/toc/index.d.ts" - ], - "search": [ - "./dist/search/index.d.ts" - ], - "server": [ - "./dist/server/index.d.ts" - ], - "link": [ - "./dist/link/index.d.ts" - ], - "contentlayer": [ - "./dist/contentlayer/index.d.ts" - ], - "middleware": [ - "./dist/middleware/index.d.ts" - ] - } + "./breadcrumb": { + "import": "./dist/breadcrumb/index.mjs", + "types": "./dist/breadcrumb/index.d.ts" }, - "scripts": { - "build": "tsup --clean", - "clean": "rmdir /q/s dist", - "dev": "tsup --watch", - "prepublishOnly": "pnpm build", - "types": "tsup --dts-only", - "types:check": "tsc --noEmit" + "./toc": { + "import": "./dist/toc/index.mjs", + "types": "./dist/toc/index.d.ts" }, - "dependencies": { - "@formatjs/intl-localematcher": "^0.4.0", - "flexsearch": "0.7.21", - "mdast-util-toc": "^6.1.1", - "negotiator": "^0.6.3", - "react-remove-scroll": "^2.5.6", - "remark": "^14.0.2", - "swr": "^2.1.5", - "unist-util-visit": "^4.1.2" + "./search": { + "import": "./dist/search/index.mjs", + "types": "./dist/search/index.d.ts" }, - "peerDependencies": { - "next": "13.x", - "react": "18.x", - "react-dom": "18.x" + "./server": { + "import": "./dist/server/index.mjs", + "types": "./dist/server/index.d.ts" }, - "devDependencies": { - "@types/flexsearch": "0.7.3", - "@types/negotiator": "^0.6.1", - "@types/react": "18.2.0", - "@types/react-dom": "18.2.1", - "contentlayer": "^0.3.4", - "next": "13.4.12" + "./link": { + "import": "./dist/link/index.mjs", + "types": "./dist/link/index.d.ts" }, - "keywords": [ - "NextJs", - "Docs" - ], - "publishConfig": { - "access": "public" + "./contentlayer": { + "import": "./dist/contentlayer/index.mjs", + "types": "./dist/contentlayer/index.d.ts" + }, + "./middleware": { + "import": "./dist/middleware/index.mjs", + "types": "./dist/middleware/index.d.ts" + }, + "./*": { + "import": "./dist/*.mjs", + "types": "./dist/*.d.ts" + } + }, + "typesVersions": { + "*": { + "sidebar": [ + "./dist/sidebar/index.d.ts" + ], + "breadcrumb": [ + "./dist/breadcrumb/index.d.ts" + ], + "toc": [ + "./dist/toc/index.d.ts" + ], + "search": [ + "./dist/search/index.d.ts" + ], + "server": [ + "./dist/server/index.d.ts" + ], + "link": [ + "./dist/link/index.d.ts" + ], + "contentlayer": [ + "./dist/contentlayer/index.d.ts" + ], + "middleware": [ + "./dist/middleware/index.d.ts" + ] } + }, + "scripts": { + "build": "tsup --clean", + "clean": "rmdir /q/s dist", + "dev": "tsup --watch", + "prepublishOnly": "pnpm build", + "types:check": "tsc --noEmit" + }, + "dependencies": { + "@formatjs/intl-localematcher": "^0.4.0", + "flexsearch": "0.7.21", + "mdast-util-toc": "^6.1.1", + "negotiator": "^0.6.3", + "react-remove-scroll": "^2.5.6", + "remark": "^14.0.2", + "swr": "^2.1.5", + "unist-util-visit": "^4.1.2" + }, + "peerDependencies": { + "next": "13.x", + "react": "18.x", + "react-dom": "18.x" + }, + "devDependencies": { + "@types/flexsearch": "0.7.3", + "@types/negotiator": "^0.6.1", + "@types/react": "18.2.0", + "@types/react-dom": "18.2.1", + "contentlayer": "^0.3.4", + "next": "13.4.12" + }, + "keywords": [ + "NextJs", + "Docs" + ], + "publishConfig": { + "access": "public" + } } diff --git a/packages/next-docs/src/breadcrumb/index.tsx b/packages/next-docs/src/breadcrumb/index.tsx index 92309a78d..703ffe715 100644 --- a/packages/next-docs/src/breadcrumb/index.tsx +++ b/packages/next-docs/src/breadcrumb/index.tsx @@ -1,20 +1,20 @@ -import { TreeNode } from "@/server/types"; -import { useMemo } from "react"; +import type { TreeNode } from '@/server/types' +import { useMemo } from 'react' export type BreadcrumbItem = { - name: string; - url: string | null; -}; + name: string + url: string | null +} export function useBreadcrumb(url: string, tree: TreeNode[]): BreadcrumbItem[] { - return useMemo(() => getBreadcrumbItems(url, tree), [tree, url]); + return useMemo(() => getBreadcrumbItems(url, tree), [tree, url]) } export function getBreadcrumbItems( - url: string, - tree: TreeNode[] + url: string, + tree: TreeNode[] ): BreadcrumbItem[] { - return searchPath(tree, url) ?? []; + return searchPath(tree, url) ?? [] } /** @@ -23,40 +23,40 @@ export function getBreadcrumbItems( * @returns The path to the target node from root */ function searchPath(nodes: TreeNode[], url: string): BreadcrumbItem[] | null { - for (let i = 0; i < nodes.length; i++) { - const node = nodes[i]; - - if (node.type === "folder") { - if (node.url === url) { - return [ - { - name: node.name, - url: node.index?.url ?? null, - }, - ]; - } - - const items = searchPath(node.children, url); - - if (items != null) { - items.unshift({ - name: node.name, - url: node.index?.url ?? null, - }); - - return items; - } - } + for (let i = 0; i < nodes.length; i++) { + const node = nodes[i] + + if (node.type === 'folder') { + if (node.url === url) { + return [ + { + name: node.name, + url: node.index?.url ?? null + } + ] + } + + const items = searchPath(node.children, url) + + if (items != null) { + items.unshift({ + name: node.name, + url: node.index?.url ?? null + }) + + return items + } + } - if (node.type === "page" && node.url === url) { - return [ - { - name: node.name, - url: node.url, - }, - ]; + if (node.type === 'page' && node.url === url) { + return [ + { + name: node.name, + url: node.url } + ] } + } - return null; + return null } diff --git a/packages/next-docs/src/contentlayer/build-tree.ts b/packages/next-docs/src/contentlayer/build-tree.ts index 9922750a2..15dcbecbe 100644 --- a/packages/next-docs/src/contentlayer/build-tree.ts +++ b/packages/next-docs/src/contentlayer/build-tree.ts @@ -1,176 +1,175 @@ -import type { FolderNode, FileNode, TreeNode } from "../server"; -import type { PagesContext, MetaPageBase, DocsPageBase } from "./types"; -import { getPageUrl as defaultGetUrl, pathToName, getKey } from "./utils"; +import type { FileNode, FolderNode, TreeNode } from '../server' +import type { DocsPageBase, MetaPageBase, PagesContext } from './types' +import { getPageUrl as defaultGetUrl, getKey, pathToName } from './utils' type Context = PagesContext & { - getUrl: (slug: string, locale?: string) => string; - lang?: string; -}; + getUrl: (slug: string, locale?: string) => string + lang?: string +} type Options = { - /** - * The root folder to scan files - * @default 'docs' - */ - root: string; - /** - * Base URL of documents - * @default "/docs" - */ - baseUrl: string; - - /** - * Get page url from slug and locale - * - * @default '/baseUrl/locale/slug' - */ - getUrl: (slug: string[], baseUrl: string, locale?: string) => string; -}; - -const separator = /---(.*?)---/; + /** + * The root folder to scan files + * @default 'docs' + */ + root: string + /** + * Base URL of documents + * @default "/docs" + */ + baseUrl: string + + /** + * Get page url from slug and locale + * + * @default '/baseUrl/locale/slug' + */ + getUrl: (slug: string[], baseUrl: string, locale?: string) => string +} + +const separator = /---(.*?)---/ function buildMeta(meta: MetaPageBase, ctx: Context): FolderNode { - const segments = meta._raw.sourceFileDir.split("/"); - let index: FileNode | undefined = undefined; + const segments = meta._raw.sourceFileDir.split('/') + let index: FileNode | undefined = undefined - const children = meta.pages.flatMap((item) => { - const result = separator.exec(item); + const children = meta.pages.flatMap(item => { + const result = separator.exec(item) - if (result != null) - return { - type: "separator", - name: result[1], - }; + if (result != null) + return { + type: 'separator', + name: result[1] + } - const path = meta._raw.sourceFileDir + "/" + item; - const page = ctx.docsMap.get(path); + const path = meta._raw.sourceFileDir + '/' + item + const page = ctx.docsMap.get(path) - if (page != null) { - const node = buildFileNode(page, ctx); + if (page != null) { + const node = buildFileNode(page, ctx) - if (item === "index") index = node; - return node; - } + if (item === 'index') index = node + return node + } - //folder can't be index - if (item === "index") { - return []; - } + //folder can't be index + if (item === 'index') { + return [] + } - const node = buildFolderNode(path, ctx); + const node = buildFolderNode(path, ctx) - // if item doesn't exist - if (node.index == null && node.children.length === 0) return []; + // if item doesn't exist + if (node.index == null && node.children.length === 0) return [] - return node; - }); + return node + }) - if (index == null) { - const page = ctx.docsMap.get(meta._raw.sourceFileDir + "/index"); + if (index == null) { + const page = ctx.docsMap.get(meta._raw.sourceFileDir + '/index') - if (page != null) index = buildFileNode(page, ctx); - } + if (page != null) index = buildFileNode(page, ctx) + } - return { - name: meta.title ?? pathToName(segments[segments.length - 1] ?? "docs"), - index: index, - type: "folder", - url: ctx.getUrl(meta.slug, ctx.lang), - children: children, - }; + return { + name: meta.title ?? pathToName(segments[segments.length - 1] ?? 'docs'), + index, + type: 'folder', + url: ctx.getUrl(meta.slug, ctx.lang), + children + } } function buildFileNode(page: DocsPageBase, ctx: Context): FileNode { - if (ctx.lang) { - page = ctx.docsMap.get(getKey(page) + `.${ctx.lang}`) ?? page; - } - - return { - type: "page", - name: page.title, - url: ctx.getUrl(page.slug, ctx.lang), - }; + if (ctx.lang) { + page = ctx.docsMap.get(getKey(page) + `.${ctx.lang}`) ?? page + } + + return { + type: 'page', + name: page.title, + url: ctx.getUrl(page.slug, ctx.lang) + } } function buildFolderNode( - path: string, - ctx: Context, - keepIndex: boolean = false + path: string, + ctx: Context, + keepIndex: boolean = false ): FolderNode { - let meta = ctx.lang ? ctx.metaMap.get(path + `/meta-${ctx.lang}`) : null; - meta = meta ?? ctx.metaMap.get(path + "/meta"); - - if (meta != null) { - return buildMeta(meta, ctx); - } - - const segments = path.split("/"); - let index: FileNode | undefined = undefined; - - const pages = ctx.pages.get(ctx.lang ?? "") ?? []; - - // files under the directory - const children: TreeNode[] = pages - .filter((page) => page._raw.sourceFileDir === path) - .flatMap((page) => { - const node = buildFileNode(page, ctx); - - if (page._raw.flattenedPath === path) { - index = node; - if (!keepIndex) return []; - } - - return node; - }); - - // find folders under the directory - const folders = new Set( - pages - .filter( - (page) => - page._raw.sourceFileDir.startsWith(path + "/") && - page._raw.sourceFileDir.split("/").length === - segments.length + 1 - ) - .map((page) => page._raw.sourceFileDir) - ); - - for (const folder of folders) { - children.push(buildFolderNode(folder, ctx)); - } - - return { - name: - index != null - ? (index as FileNode).name - : pathToName(segments[segments.length - 1] ?? "docs"), - type: "folder", - url: "/" + path, - index, - children, - }; + let meta = ctx.lang ? ctx.metaMap.get(path + `/meta-${ctx.lang}`) : null + meta ??= ctx.metaMap.get(path + '/meta') + + if (meta != null) { + return buildMeta(meta, ctx) + } + + const segments = path.split('/') + let index: FileNode | undefined = undefined + + const pages = ctx.pages.get(ctx.lang ?? '') ?? [] + + // files under the directory + const children: TreeNode[] = pages + .filter(page => page._raw.sourceFileDir === path) + .flatMap(page => { + const node = buildFileNode(page, ctx) + + if (page._raw.flattenedPath === path) { + index = node + if (!keepIndex) return [] + } + + return node + }) + + // find folders under the directory + const folders = new Set( + pages + .filter( + page => + page._raw.sourceFileDir.startsWith(path + '/') && + page._raw.sourceFileDir.split('/').length === segments.length + 1 + ) + .map(page => page._raw.sourceFileDir) + ) + + for (const folder of folders) { + children.push(buildFolderNode(folder, ctx)) + } + + return { + name: + index != null + ? (index as FileNode).name + : pathToName(segments[segments.length - 1] ?? 'docs'), + type: 'folder', + url: '/' + path, + index, + children + } } function build(root: string, ctx: Context): TreeNode[] { - const folder = buildFolderNode(root, ctx, true); + const folder = buildFolderNode(root, ctx, true) - return folder?.children ?? []; + return folder?.children ?? [] } export function buildPageTree( - context: PagesContext, - { - root = "docs", - baseUrl = "/docs", - getUrl = defaultGetUrl, - }: Partial = {} + context: PagesContext, + { + root = 'docs', + baseUrl = '/docs', + getUrl = defaultGetUrl + }: Partial = {} ): TreeNode[] { - return build(root, { - ...context, - getUrl: (slug, locale) => { - return getUrl(slug.split("/"), baseUrl, locale); - }, - }); + return build(root, { + ...context, + getUrl: (slug, locale) => { + return getUrl(slug.split('/'), baseUrl, locale) + } + }) } /** @@ -181,25 +180,25 @@ export function buildPageTree( * @param languages All supported languages */ export function buildI18nPageTree( - context: PagesContext, - languages: Languages[], - { - root = "docs", - baseUrl = "/docs", - getUrl = defaultGetUrl, - }: Partial = {} + context: PagesContext, + languages: Languages[], + { + root = 'docs', + baseUrl = '/docs', + getUrl = defaultGetUrl + }: Partial = {} ): Record { - const entries = languages.map((lang) => { - const tree = build(root, { - ...context, - lang, - getUrl: (slug, locale) => { - return getUrl(slug.split("/"), baseUrl, locale); - }, - }); - - return [lang, tree]; - }); - - return Object.fromEntries(entries); + const entries = languages.map(lang => { + const tree = build(root, { + ...context, + lang, + getUrl: (slug, locale) => { + return getUrl(slug.split('/'), baseUrl, locale) + } + }) + + return [lang, tree] + }) + + return Object.fromEntries(entries) } diff --git a/packages/next-docs/src/contentlayer/index.ts b/packages/next-docs/src/contentlayer/index.ts index c60c3276d..4c34938ad 100644 --- a/packages/next-docs/src/contentlayer/index.ts +++ b/packages/next-docs/src/contentlayer/index.ts @@ -1,5 +1,5 @@ -export * from "./load-context"; -export * from "./build-tree"; -export { createUtils, getPageUrl } from "./utils"; +export * from './load-context' +export * from './build-tree' +export { createUtils, getPageUrl } from './utils' -export type * from "./types"; +export type * from './types' diff --git a/packages/next-docs/src/contentlayer/load-context.ts b/packages/next-docs/src/contentlayer/load-context.ts index d418d1204..c6d3fee6f 100644 --- a/packages/next-docs/src/contentlayer/load-context.ts +++ b/packages/next-docs/src/contentlayer/load-context.ts @@ -1,52 +1,52 @@ -import { PagesContext, MetaPageBase, DocsPageBase } from "./types"; -import { getKey } from "./utils"; +import type { DocsPageBase, MetaPageBase, PagesContext } from './types' +import { getKey } from './utils' export function loadContext< - Meta extends MetaPageBase, - Docs extends DocsPageBase + Meta extends MetaPageBase, + Docs extends DocsPageBase >( - metaPages: Meta[], - docsPages: Docs[], - languages: string[] = [] + metaPages: Meta[], + docsPages: Docs[], + languages: string[] = [] ): PagesContext { - const docsMap = new Map(); - const metaMap = new Map(); - - for (const page of docsPages) { - docsMap.set(getKey(page), page); - } - - for (const meta of metaPages) { - metaMap.set(meta._raw.flattenedPath, meta); - } - - return { - pages: getI18nPages(docsMap, languages), - docsMap, - metaMap, - }; + const docsMap = new Map() + const metaMap = new Map() + + for (const page of docsPages) { + docsMap.set(getKey(page), page) + } + + for (const meta of metaPages) { + metaMap.set(meta._raw.flattenedPath, meta) + } + + return { + pages: getI18nPages(docsMap, languages), + docsMap, + metaMap + } } function getI18nPages( - docsMap: Map, - languages: string[] + docsMap: Map, + languages: string[] ) { - const pages = new Map(); + const pages = new Map() - pages.set("", []); - for (const lang of languages) { - pages.set(lang, []); - } - - for (const [key, value] of docsMap) { - if (value.locale) continue; + pages.set('', []) + for (const lang of languages) { + pages.set(lang, []) + } - for (const lang of languages) { - pages.get(lang)?.push(docsMap.get(`${key}.${lang}`) ?? value); - } + for (const [key, value] of docsMap) { + if (value.locale) continue - pages.get("")?.push(value); + for (const lang of languages) { + pages.get(lang)?.push(docsMap.get(`${key}.${lang}`) ?? value) } - return pages; + pages.get('')?.push(value) + } + + return pages } diff --git a/packages/next-docs/src/contentlayer/types.d.ts b/packages/next-docs/src/contentlayer/types.d.ts index 4163ae739..7e1f6a5ec 100644 --- a/packages/next-docs/src/contentlayer/types.d.ts +++ b/packages/next-docs/src/contentlayer/types.d.ts @@ -1,38 +1,38 @@ -import type { RawDocumentData } from "contentlayer/source-files"; +import type { RawDocumentData } from 'contentlayer/source-files' export type MetaPageBase = { - /** File path relative to `contentDirPath` */ - _id: string; - _raw: RawDocumentData; - type: "Meta"; - /** The title of the folder */ - title?: string | undefined; - /** Pages of the folder */ - pages: string[]; - slug: string; -}; + /** File path relative to `contentDirPath` */ + _id: string + _raw: RawDocumentData + type: 'Meta' + /** The title of the folder */ + title?: string | undefined + /** Pages of the folder */ + pages: string[] + slug: string +} export type DocsPageBase = { - /** File path relative to `contentDirPath` */ - _id: string; - _raw: RawDocumentData; - type: "Docs"; - /** The title of the document */ - title: string; - /** The description of the document */ - description?: string | undefined; - locale?: string; - slug: string; -}; + /** File path relative to `contentDirPath` */ + _id: string + _raw: RawDocumentData + type: 'Docs' + /** The title of the document */ + title: string + /** The description of the document */ + description?: string | undefined + locale?: string + slug: string +} export type PagesContext< - Meta extends MetaPageBase = MetaPageBase, - Docs extends DocsPageBase = DocsPageBase + Meta extends MetaPageBase = MetaPageBase, + Docs extends DocsPageBase = DocsPageBase > = { - /** - * Language -> Page[] - */ - pages: Map; - docsMap: Map; - metaMap: Map; -}; + /** + * Language -> Page[] + */ + pages: Map + docsMap: Map + metaMap: Map +} diff --git a/packages/next-docs/src/contentlayer/utils.ts b/packages/next-docs/src/contentlayer/utils.ts index 68cd459b2..e804ddeb9 100644 --- a/packages/next-docs/src/contentlayer/utils.ts +++ b/packages/next-docs/src/contentlayer/utils.ts @@ -1,47 +1,45 @@ -import { DocsPageBase, MetaPageBase, PagesContext } from "./types"; +import type { DocsPageBase, MetaPageBase, PagesContext } from './types' export function pathToName(path: string): string { - return path.slice(0, 1).toUpperCase() + path.slice(1); + return path.slice(0, 1).toUpperCase() + path.slice(1) } export function getKey(page: DocsPageBase): string { - return page._raw.sourceFileDir === page._raw.flattenedPath - ? page._raw.flattenedPath + "/index" - : page._raw.flattenedPath; + return page._raw.sourceFileDir === page._raw.flattenedPath + ? page._raw.flattenedPath + '/index' + : page._raw.flattenedPath } export function getPageUrl(slug: string[], baseUrl: string, locale?: string) { - const url = [baseUrl, locale, ...slug] - .filter((segment) => segment != null && segment.length > 0) - .join("/"); + const url = [baseUrl, locale, ...slug] + .filter(segment => segment != null && segment.length > 0) + .join('/') - if (baseUrl === "/") { - return url.slice(1); - } + if (baseUrl === '/') { + return url.slice(1) + } - return url; + return url } export function createUtils( - context: PagesContext + context: PagesContext ): { - /** - * Get list of pages from language - * - * @param language If empty, the default language will be used - */ - getPages: (language?: string) => Docs[] | undefined; - - getPage: (language: string, slugs?: string[]) => Docs | undefined; + /** + * Get list of pages from language + * + * @param language If empty, the default language will be used + */ + getPages: (language?: string) => Docs[] | undefined + + getPage: (language: string, slugs?: string[]) => Docs | undefined } { - return { - getPages: (language = "") => context.pages.get(language), - getPage(language, slugs) { - const path = (slugs ?? []).join("/"); - - return context.pages - .get(language) - ?.find((page) => page.slug === path); - }, - }; + return { + getPages: (language = '') => context.pages.get(language), + getPage(language, slugs) { + const path = (slugs ?? []).join('/') + + return context.pages.get(language)?.find(page => page.slug === path) + } + } } diff --git a/packages/next-docs/src/link/index.tsx b/packages/next-docs/src/link/index.tsx index 88436428e..eec69386e 100644 --- a/packages/next-docs/src/link/index.tsx +++ b/packages/next-docs/src/link/index.tsx @@ -1,16 +1,17 @@ -"use client"; -import Link from "next/link"; -import { useParams } from "next/navigation"; -import { AnchorHTMLAttributes } from "react"; +'use client' + +import Link from 'next/link' +import { useParams } from 'next/navigation' +import type { AnchorHTMLAttributes } from 'react' type SafeLinkProps = AnchorHTMLAttributes & { - /** - * Enable dynamic href - * - * @default false - */ - dynamicHrefs?: boolean; -}; + /** + * Enable dynamic href + * + * @default false + */ + dynamicHrefs?: boolean +} /** * Wraps `next/link` and safe to use in mdx documents @@ -18,29 +19,29 @@ type SafeLinkProps = AnchorHTMLAttributes & { * It also supports dynamic hrefs, which means you can use `/[lang]/my-page` with `dynamicHrefs` enabled */ export function SafeLink({ dynamicHrefs = false, ...props }: SafeLinkProps) { - let url = props.href ?? "/"; - const isExternalUrl = !( - url.startsWith("/") || - url.startsWith("#") || - url.startsWith(".") - ); - const params = useParams(); + let url = props.href ?? '/' + const isExternalUrl = !( + url.startsWith('/') || + url.startsWith('#') || + url.startsWith('.') + ) + const params = useParams() - if (!isExternalUrl && dynamicHrefs) { - url = url.replace(/\[.*\]/, (key) => { - const value = params[key.slice(1, -1)] ?? "undefined"; + if (!isExternalUrl && dynamicHrefs) { + url = url.replace(/\[.*\]/, key => { + const value = params[key.slice(1, -1)] ?? 'undefined' - return typeof value === "string" ? value : value.join("/"); - }); - } + return typeof value === 'string' ? value : value.join('/') + }) + } - return ( - - ); + return ( + + ) } diff --git a/packages/next-docs/src/middleware/index.ts b/packages/next-docs/src/middleware/index.ts index 7fa7f3572..f1861a69e 100644 --- a/packages/next-docs/src/middleware/index.ts +++ b/packages/next-docs/src/middleware/index.ts @@ -1,47 +1,45 @@ -import { match as matchLocale } from "@formatjs/intl-localematcher"; -import { NextRequest, NextResponse } from "next/server"; -import Negotiator from "negotiator"; +import { match as matchLocale } from '@formatjs/intl-localematcher' +import Negotiator from 'negotiator' +import type { NextRequest } from 'next/server' +import { NextResponse } from 'next/server' function getLocale( - request: NextRequest, - locales: string[], - defaultLanguage: string + request: NextRequest, + locales: string[], + defaultLanguage: string ): string { - // Negotiator expects plain object so we need to transform headers - const negotiatorHeaders: Record = {}; - request.headers.forEach((value, key) => (negotiatorHeaders[key] = value)); + // Negotiator expects plain object so we need to transform headers + const negotiatorHeaders: Record = {} + request.headers.forEach((value, key) => (negotiatorHeaders[key] = value)) - // Use negotiator and intl-localematcher to get best locale - const languages = new Negotiator({ headers: negotiatorHeaders }).languages( - locales - ); + // Use negotiator and intl-localematcher to get best locale + const languages = new Negotiator({ headers: negotiatorHeaders }).languages( + locales + ) - return matchLocale(languages, locales, defaultLanguage); + return matchLocale(languages, locales, defaultLanguage) } export function createI18nMiddleware( - request: NextRequest, - languages: string[], - defaultLanguage: string, - format: (locale: string, slug: string) => string + request: NextRequest, + languages: string[], + defaultLanguage: string, + format: (locale: string, slug: string) => string ) { - const pathname = request.nextUrl.pathname; + const { pathname } = request.nextUrl - const pathnameIsMissingLocale = languages.every( - (locale) => - !pathname.startsWith(`/${locale}/`) && pathname !== `/${locale}` - ); + const pathnameIsMissingLocale = languages.every( + locale => !pathname.startsWith(`/${locale}/`) && pathname !== `/${locale}` + ) - if (pathnameIsMissingLocale) { - const locale = getLocale(request, languages, defaultLanguage); - let path = pathname; + if (pathnameIsMissingLocale) { + const locale = getLocale(request, languages, defaultLanguage) + let path = pathname - while (path.startsWith("/")) { - path = path.slice(1); - } - - return NextResponse.redirect( - new URL(format(locale, path), request.url) - ); + while (path.startsWith('/')) { + path = path.slice(1) } + + return NextResponse.redirect(new URL(format(locale, path), request.url)) + } } diff --git a/packages/next-docs/src/search/index.ts b/packages/next-docs/src/search/index.ts index a14dfe1d9..ab27c59dc 100644 --- a/packages/next-docs/src/search/index.ts +++ b/packages/next-docs/src/search/index.ts @@ -1,45 +1,45 @@ -import type { SearchDocsResult } from "@/server/types"; -import { useState, useEffect } from "react"; -import useSWR from "swr"; +import type { SearchDocsResult } from '@/server/types' +import { useEffect, useState } from 'react' +import useSWR from 'swr' export function useDocsSearch(locale?: string) { - const [search, setSearch] = useState(""); - const debouncedValue = useDebounce(search, 100); + const [search, setSearch] = useState('') + const debouncedValue = useDebounce(search, 100) - const searchQuery = useSWR( - ["docs", debouncedValue, locale], - async (key) => { - if (debouncedValue.length === 0) return "empty"; + const searchQuery = useSWR( + ['docs', debouncedValue, locale], + async key => { + if (debouncedValue.length === 0) return 'empty' - const params = new URLSearchParams(); - params.set("query", key[1]); - if (key[2]) params.set("locale", key[2]); + const params = new URLSearchParams() + params.set('query', key[1]) + if (key[2]) params.set('locale', key[2]) - const res = await fetch(`/api/search?query=${params}`); + const res = await fetch(`/api/search?query=${params}`) - if (!res.ok) throw new Error(await res.text()); - return (await res.json()) as SearchDocsResult; - }, - { - keepPreviousData: true, - } - ); + if (!res.ok) throw new Error(await res.text()) + return (await res.json()) as SearchDocsResult + }, + { + keepPreviousData: true + } + ) - return { search, setSearch, query: searchQuery }; + return { search, setSearch, query: searchQuery } } function useDebounce(value: T, delayMs: number = 1000) { - const [debouncedValue, setDebouncedValue] = useState(value); + const [debouncedValue, setDebouncedValue] = useState(value) - useEffect(() => { - const handler = setTimeout(() => { - setDebouncedValue(value); - }, delayMs); + useEffect(() => { + const handler = setTimeout(() => { + setDebouncedValue(value) + }, delayMs) - return () => { - clearTimeout(handler); - }; - }, [value, delayMs]); + return () => { + clearTimeout(handler) + } + }, [value, delayMs]) - return debouncedValue; + return debouncedValue } diff --git a/packages/next-docs/src/server/flexsearch-api.ts b/packages/next-docs/src/server/flexsearch-api.ts index 12127bfd1..afe13a6fa 100644 --- a/packages/next-docs/src/server/flexsearch-api.ts +++ b/packages/next-docs/src/server/flexsearch-api.ts @@ -1,93 +1,93 @@ -import { NextResponse } from "next/server"; -import FlexSearch from "flexsearch"; -import { IndexPage } from "./types"; +import FlexSearch from 'flexsearch' +import { NextResponse } from 'next/server' +import type { IndexPage } from './types' type Result = { - GET: (request: Request, options?: any) => Response | Promise; -}; + GET: (request: Request) => Response | Promise +} export function initI18nSearchAPI( - entries: [language: string, indexes: IndexPage[]][] + entries: [language: string, indexes: IndexPage[]][] ): Result { - const map = new Map(); + const map = new Map() - for (const [k, v] of entries) { - map.set(k, initSearchAPI(v, k)); - } + for (const [k, v] of entries) { + map.set(k, initSearchAPI(v, k)) + } - return { - GET(request, options) { - const { searchParams } = new URL(request.url); - const locale = searchParams.get("locale"); + return { + GET(request) { + const { searchParams } = new URL(request.url) + const locale = searchParams.get('locale') - if (locale && map.has(locale)) { - return map.get(locale)!.GET(request, options); - } + if (locale && map.has(locale)) { + return map.get(locale)!.GET(request) + } - return NextResponse.json([]); - }, - }; + return NextResponse.json([]) + } + } } export function initSearchAPI(indexes: IndexPage[], language?: string): Result { - const index = new FlexSearch.Document({ - tokenize: "forward", - optimize: true, - resolution: 9, - language, - cache: 100, - document: { - id: "url", - store: ["title", "url"], - index: [ - { - field: "title", - tokenize: "forward", - optimize: true, - resolution: 9, - }, - { - field: "content", - tokenize: "strict", - optimize: true, - resolution: 9, - context: { - depth: 1, - resolution: 3, - }, - }, - { - field: "keywords", - tokenize: "strict", - optimize: true, - resolution: 9, - }, - ], + const index = new FlexSearch.Document({ + tokenize: 'forward', + optimize: true, + resolution: 9, + language, + cache: 100, + document: { + id: 'url', + store: ['title', 'url'], + index: [ + { + field: 'title', + tokenize: 'forward', + optimize: true, + resolution: 9 }, - }); - - for (const page of indexes) { - index.add({ - title: page.title, - url: page.url, - content: page.content, - keywords: page.keywords, - }); + { + field: 'content', + tokenize: 'strict', + optimize: true, + resolution: 9, + context: { + depth: 1, + resolution: 3 + } + }, + { + field: 'keywords', + tokenize: 'strict', + optimize: true, + resolution: 9 + } + ] } + }) - return { - GET(request) { - const { searchParams } = new URL(request.url); - const query = searchParams.get("query"); + for (const page of indexes) { + index.add({ + title: page.title, + url: page.url, + content: page.content, + keywords: page.keywords + }) + } - if (query == null) return NextResponse.json([]); + return { + GET(request) { + const { searchParams } = new URL(request.url) + const query = searchParams.get('query') - const results = index.search(query, 5, { - enrich: true, - suggest: true, - }); + if (query == null) return NextResponse.json([]) - return NextResponse.json(results[0]?.result ?? []); - }, - }; + const results = index.search(query, 5, { + enrich: true, + suggest: true + }) + + return NextResponse.json(results[0]?.result ?? []) + } + } } diff --git a/packages/next-docs/src/server/get-toc-sanity.ts b/packages/next-docs/src/server/get-toc-sanity.ts index 424959f67..eeba620d2 100644 --- a/packages/next-docs/src/server/get-toc-sanity.ts +++ b/packages/next-docs/src/server/get-toc-sanity.ts @@ -1,20 +1,21 @@ -import type { TableOfContents } from "./get-toc"; +/* eslint-disable */ +import type { TableOfContents } from './get-toc' type Block = { - _type: string; - children?: Block[]; - style?: string; - text?: string; -}; + _type: string + children?: Block[] + style?: string + text?: string +} -type SlugFn = (text: string) => string; +type SlugFn = (text: string) => string type Item = { - title: string; - url: string; - level: number; - children?: Item[]; -}; + title: string + url: string + level: number + children?: Item[] +} /** * Parse TOC from portable text (Sanity) @@ -23,79 +24,76 @@ type Item = { * @param slugFn A function that generates slug from title */ export function getTableOfContentsFromPortableText( - value: any, - slugFn: SlugFn + value: any, + slugFn: SlugFn ): TableOfContents { - if (!Array.isArray(value)) { - throw new Error("Invalid body type"); - } + if (!Array.isArray(value)) { + throw new Error('Invalid body type') + } - const result: Item[] = []; + const result: Item[] = [] - for (const block of value) { - dfs(block, result, slugFn); - } + for (const block of value) { + dfs(block, result, slugFn) + } - return result; + return result } function dfs(block: Block, list: Item[], slugFn: SlugFn) { - if ( - block.style != null && - block.style.length === 2 && - block.style[0] === "h" - ) { - const level = Number(block.style[1]); - - if (Number.isNaN(level)) return; - const text = flattenNode(block); - const item = { - title: text, - url: "#" + slugFn(text), - level, - }; - - let lastElement = list[list.length - 1]; - - if (lastElement != null && lastElement.level < level) { - while (lastElement.children != null) { - const lastChild = - lastElement.children[lastElement.children.length - 1]; - - if (lastChild == null || lastChild.level >= level) { - break; - } - - lastElement = lastChild; - } - - if (lastElement.children == null) { - lastElement.children = []; - } - - lastElement.children.push(item); - } else { - list.push(item); + if ( + block.style != null && + block.style.length === 2 && + block.style[0] === 'h' + ) { + const level = Number(block.style[1]) + + if (Number.isNaN(level)) return + const text = flattenNode(block) + const item = { + title: text, + url: '#' + slugFn(text), + level + } + + let lastElement = list[list.length - 1] + + if (lastElement != null && lastElement.level < level) { + while (lastElement.children != null) { + const lastChild = lastElement.children[lastElement.children.length - 1] + + if (lastChild == null || lastChild.level >= level) { + break } - return; + lastElement = lastChild + } + + lastElement.children ??= [] + + lastElement.children.push(item) + } else { + list.push(item) } - block.children?.forEach((child) => { - dfs(child, list, slugFn); - }); + return + } + + block.children?.forEach(child => { + dfs(child, list, slugFn) + }) } function flattenNode(block: Block): string { - let text = ""; + let text = '' - if (block._type === "span") { - return block.text!!; - } + if (block._type === 'span') { + return block.text! + } - block.children?.forEach((child) => { - text += flattenNode(child); - }); + block.children?.forEach(child => { + text += flattenNode(child) + }) - return text; + return text } diff --git a/packages/next-docs/src/server/get-toc.ts b/packages/next-docs/src/server/get-toc.ts index c6fe73f64..8f85c6485 100644 --- a/packages/next-docs/src/server/get-toc.ts +++ b/packages/next-docs/src/server/get-toc.ts @@ -1,71 +1,73 @@ -import { toc } from "mdast-util-toc"; -import { remark } from "remark"; -import { visit } from "unist-util-visit"; +/* eslint-disable */ +import { toc } from 'mdast-util-toc' +import { remark } from 'remark' +import { visit } from 'unist-util-visit' -const textTypes = ["text", "emphasis", "strong", "inlineCode"]; +const textTypes = ['text', 'emphasis', 'strong', 'inlineCode'] function flattenNode(node: any) { - const p: any[] = []; - visit(node, (node) => { - if (!textTypes.includes(node.type)) return; - p.push(node.value); - }); - return p.join(``); + const p: any[] = [] + visit(node, node => { + if (!textTypes.includes(node.type)) return + p.push(node.value) + }) + return p.join(``) } export interface TOCItemType { - title: string; - url: string; - items?: TOCItemType[]; + title: string + url: string + items?: TOCItemType[] } interface Items { - items?: TOCItemType[]; + items?: TOCItemType[] } function getItems(node: any, current: any): Items { - if (!node) { - return {}; + if (!node) { + return {} + } + + if (node.type === 'paragraph') { + visit(node, item => { + if (item.type === 'link') { + current.url = item.url + current.title = flattenNode(node) + } + + if (item.type === 'text') { + current.title = flattenNode(node) + } + }) + + return current + } + + if (node.type === 'list') { + current.items = node.children.map((i: number) => getItems(i, {})) + + return current + } + if (node.type === 'listItem') { + const heading = getItems(node.children[0], {}) + + if (node.children.length > 1) { + getItems(node.children[1], heading) } - if (node.type === "paragraph") { - visit(node, (item) => { - if (item.type === "link") { - current.url = item.url; - current.title = flattenNode(node); - } + return heading + } - if (item.type === "text") { - current.title = flattenNode(node); - } - }); - - return current; - } - - if (node.type === "list") { - current.items = node.children.map((i: number) => getItems(i, {})); - - return current; - } else if (node.type === "listItem") { - const heading = getItems(node.children[0], {}); - - if (node.children.length > 1) { - getItems(node.children[1], heading); - } - - return heading; - } - - return {}; + return {} } const getToc = () => (node: any, file: any) => { - const table = toc(node); - file.data = getItems(table.map, {}); -}; + const table = toc(node) + file.data = getItems(table.map, {}) +} -export type TableOfContents = TOCItemType[]; +export type TableOfContents = TOCItemType[] /** * Get Table of Contents from markdown/mdx document (using remark) @@ -73,9 +75,9 @@ export type TableOfContents = TOCItemType[]; * @param content Markdown content */ export async function getTableOfContents( - content: string + content: string ): Promise { - const result = await remark().use(getToc).process(content); + const result = await remark().use(getToc).process(content) - return (result.data as Items).items ?? []; + return (result.data as Items).items ?? [] } diff --git a/packages/next-docs/src/server/index.ts b/packages/next-docs/src/server/index.ts index 576e71967..ea6b91b49 100644 --- a/packages/next-docs/src/server/index.ts +++ b/packages/next-docs/src/server/index.ts @@ -1,5 +1,5 @@ -export * from "./flexsearch-api"; -export * from "./get-toc"; -export * from "./types"; -export * from "./get-toc-sanity"; -export * from "./tree-utils"; +export * from './flexsearch-api' +export * from './get-toc' +export * from './types' +export * from './get-toc-sanity' +export * from './tree-utils' diff --git a/packages/next-docs/src/server/tree-utils.ts b/packages/next-docs/src/server/tree-utils.ts index 1fed43017..88c4308d4 100644 --- a/packages/next-docs/src/server/tree-utils.ts +++ b/packages/next-docs/src/server/tree-utils.ts @@ -1,43 +1,43 @@ -import { TreeNode, FileNode } from "./types"; +import type { FileNode, TreeNode } from './types' /** * Flatten tree to an array of page nodes */ export function flattenTree(tree: TreeNode[]): FileNode[] { - return tree.flatMap((node) => { - if (node.type === "separator") return []; - if (node.type === "folder") { - const child = flattenTree(node.children); + return tree.flatMap(node => { + if (node.type === 'separator') return [] + if (node.type === 'folder') { + const child = flattenTree(node.children) - if (node.index) return [node.index, ...child]; + if (node.index) return [node.index, ...child] - return child; - } + return child + } - return [node]; - }); + return [node] + }) } /** * Get neighbours of a page, useful for implementing "previous & next" buttons */ export function findNeighbour( - tree: TreeNode[], - url: string + tree: TreeNode[], + url: string ): { - previous?: FileNode; - next?: FileNode; + previous?: FileNode + next?: FileNode } { - const list = flattenTree(tree); + const list = flattenTree(tree) - for (let i = 0; i < list.length; i++) { - if (list[i].url === url) { - return { - next: list[i + 1], - previous: list[i - 1], - }; - } + for (let i = 0; i < list.length; i++) { + if (list[i].url === url) { + return { + next: list[i + 1], + previous: list[i - 1] + } } + } - return {}; + return {} } diff --git a/packages/next-docs/src/server/types.ts b/packages/next-docs/src/server/types.ts index 37734f419..b97d23d35 100644 --- a/packages/next-docs/src/server/types.ts +++ b/packages/next-docs/src/server/types.ts @@ -1,32 +1,32 @@ -import type FlexSearch from "flexsearch"; +import type FlexSearch from 'flexsearch' -export type TreeNode = FileNode | Separator | FolderNode; +export type TreeNode = FileNode | Separator | FolderNode export type FileNode = { - type: "page"; - name: string; - url: string; -}; + type: 'page' + name: string + url: string +} export type Separator = { - type: "separator"; - name: string; -}; + type: 'separator' + name: string +} export type FolderNode = { - type: "folder"; - name: string; - url: string; - index?: FileNode; - children: TreeNode[]; -}; + type: 'folder' + name: string + url: string + index?: FileNode + children: TreeNode[] +} export type IndexPage = { - title: string; - content: string; - url: string; - keywords?: string; -}; + title: string + content: string + url: string + keywords?: string +} export type SearchDocsResult = - FlexSearch.EnrichedDocumentSearchResultSetUnitResultUnit[]; + FlexSearch.EnrichedDocumentSearchResultSetUnitResultUnit[] diff --git a/packages/next-docs/src/sidebar/index.tsx b/packages/next-docs/src/sidebar/index.tsx index e07dc53a6..92119e90e 100644 --- a/packages/next-docs/src/sidebar/index.tsx +++ b/packages/next-docs/src/sidebar/index.tsx @@ -1,90 +1,85 @@ -import { - ElementType, - ReactNode, - createContext, - useContext, - useEffect, - useState, -} from "react"; -import { usePathname } from "next/navigation"; -import { RemoveScroll } from "react-remove-scroll"; -import { WithAs } from "@/types"; +import type { WithAs } from '@/types' +import { usePathname } from 'next/navigation' +import type { ElementType, ReactNode } from 'react' +import { createContext, useContext, useEffect, useState } from 'react' +import { RemoveScroll } from 'react-remove-scroll' -const SidebarContext = createContext({ - open: false, - setOpen: (_: boolean) => {}, -}); +const SidebarContext = createContext<{ + open: boolean + setOpen: (value: boolean) => void +}>({ + open: false, + setOpen: () => {} +}) export type SidebarProviderProps = { - open?: boolean; - onOpenChange?: (v: boolean) => void; - children: ReactNode; -}; + open?: boolean + onOpenChange?: (v: boolean) => void + children: ReactNode +} export function SidebarProvider(props: SidebarProviderProps) { - const [open, setOpen] = - props.open == null - ? useState(false) - : [props.open, props.onOpenChange!!]; - const pathname = usePathname(); + const [open, setOpen] = + props.open == null ? useState(false) : [props.open, props.onOpenChange!] + const pathname = usePathname() - useEffect(() => { - setOpen(false); - }, [pathname]); + useEffect(() => { + setOpen(false) + }, [pathname]) - return ( - - {props.children} - - ); + return ( + + {props.children} + + ) } -export type SidebarTriggerProps = WithAs; +export type SidebarTriggerProps = WithAs -export function SidebarTrigger({ - as, - ...props +export function SidebarTrigger({ + as, + ...props }: SidebarTriggerProps) { - const { open, setOpen } = useContext(SidebarContext); - const As = as ?? "button"; + const { open, setOpen } = useContext(SidebarContext) + const As = as ?? 'button' - return setOpen(!open)} {...props} />; + return setOpen(!open)} {...props} /> } export type SidebarContentProps = WithAs< - T, - { - minWidth?: number; - } ->; + T, + { + minWidth?: number + } +> -export function SidebarList({ - as, - minWidth, - ...props +export function SidebarList({ + as, + minWidth, + ...props }: SidebarContentProps) { - const { open } = useContext(SidebarContext); - const [isMobileLayout, setIsMobileLayout] = useState(false); + const { open } = useContext(SidebarContext) + const [isMobileLayout, setIsMobileLayout] = useState(false) - useEffect(() => { - if (minWidth == null) return; - const mediaQueryList = window.matchMedia(`(min-width: ${minWidth}px)`); + useEffect(() => { + if (minWidth == null) return + const mediaQueryList = window.matchMedia(`(min-width: ${minWidth}px)`) - const handleChange = () => setIsMobileLayout(!mediaQueryList.matches); - handleChange(); + const handleChange = () => setIsMobileLayout(!mediaQueryList.matches) + handleChange() - mediaQueryList.addEventListener("change", handleChange); - return () => mediaQueryList.removeEventListener("change", handleChange); - }, [minWidth]); + mediaQueryList.addEventListener('change', handleChange) + return () => mediaQueryList.removeEventListener('change', handleChange) + }, [minWidth]) - return ( - - {props.children} - - ); + return ( + + {props.children} + + ) } diff --git a/packages/next-docs/src/toc/index.tsx b/packages/next-docs/src/toc/index.tsx index ddfe1de14..7e1c4eb89 100644 --- a/packages/next-docs/src/toc/index.tsx +++ b/packages/next-docs/src/toc/index.tsx @@ -1,67 +1,68 @@ -import type { TOCItemType, TableOfContents } from "@/server/get-toc"; -import { useAnchorObserver } from "./use-anchor-observer"; -import { ReactNode, useMemo } from "react"; -import { createContext, useContext } from "react"; -import { ComponentPropsWithoutRef, forwardRef } from "react"; +import type { TableOfContents, TOCItemType } from '@/server/get-toc' +import type { ComponentPropsWithoutRef, ReactNode } from 'react' +import { createContext, forwardRef, useContext, useMemo } from 'react' +import { useAnchorObserver } from './use-anchor-observer' -type ActiveAnchors = Record; +type ActiveAnchors = Record type Anchor = { - isActive?: boolean; - aboveHalfViewport: boolean; - index: number; - insideHalfViewport: boolean; -}; + isActive?: boolean + aboveHalfViewport: boolean + index: number + insideHalfViewport: boolean +} -const ActiveAnchorContext = createContext({}); +const ActiveAnchorContext = createContext({}) export const useActiveAnchor = (url: string): Anchor | null => { - const context = useContext(ActiveAnchorContext); + const context = useContext(ActiveAnchorContext) - return context[url.split("#")[1]]; -}; + return context[url.split('#')[1]] +} export function TOCProvider({ - toc, - children, + toc, + children }: { - toc: TableOfContents; - children: ReactNode; + toc: TableOfContents + children: ReactNode }) { - const headings = useMemo(() => { - return toc - .flatMap((item) => getHeadings(item)) - .map((item) => item.split("#")[1]); - }, [toc]); + const headings = useMemo(() => { + return toc + .flatMap(item => getHeadings(item)) + .map(item => item.split('#')[1]) + }, [toc]) - const activeAnchor = useAnchorObserver(headings); + const activeAnchor = useAnchorObserver(headings) - return ( - - {children} - - ); + return ( + + {children} + + ) } function getHeadings(item: TOCItemType): string[] { - const children = item.items?.flatMap((item) => getHeadings(item)) ?? []; + const children = item.items?.flatMap(item => getHeadings(item)) ?? [] - return [item.url, ...children]; + return [item.url, ...children] } -export type TOCItemProps = ComponentPropsWithoutRef<"a"> & { - item: TOCItemType; -}; +export type TOCItemProps = ComponentPropsWithoutRef<'a'> & { + item: TOCItemType +} export const TOCItem = forwardRef( - ({ item, ...props }, ref) => { - const activeAnchor = useActiveAnchor(item.url); - const active = activeAnchor?.isActive === true; + ({ item, ...props }, ref) => { + const activeAnchor = useActiveAnchor(item.url) + const active = activeAnchor?.isActive === true + + return ( + + {props.children} + + ) + } +) - return ( - - {props.children} - - ); - } -); +TOCItem.displayName = 'TOCItem' diff --git a/packages/next-docs/src/toc/use-anchor-observer.ts b/packages/next-docs/src/toc/use-anchor-observer.ts index 039de9508..e9102e83d 100644 --- a/packages/next-docs/src/toc/use-anchor-observer.ts +++ b/packages/next-docs/src/toc/use-anchor-observer.ts @@ -1,14 +1,14 @@ -import { useState, useEffect } from "react"; +import { useEffect, useState } from 'react' export type ActiveAnchor = Record< - string, - { - isActive?: boolean; - aboveHalfViewport: boolean; - index: number; - insideHalfViewport: boolean; - } ->; + string, + { + isActive?: boolean + aboveHalfViewport: boolean + index: number + insideHalfViewport: boolean + } +> /** * @@ -16,78 +16,76 @@ export type ActiveAnchor = Record< * @returns Anchors info */ export function useAnchorObserver(watch: string[]) { - const [activeAnchor, setActiveAnchor] = useState({}); - - useEffect(() => { - const observer = new IntersectionObserver( - (entries) => { - setActiveAnchor((f) => { - const ret = { ...f }; + const [activeAnchor, setActiveAnchor] = useState({}) - for (const entry of entries) { - const headingIdx = watch.findIndex( - (heading) => heading === entry.target.id - ); + useEffect(() => { + const observer = new IntersectionObserver( + entries => { + setActiveAnchor(f => { + const ret = { ...f } - if (entry?.rootBounds && headingIdx !== -1) { - const aboveHalfViewport = - entry.boundingClientRect.y + - entry.boundingClientRect.height <= - entry.rootBounds.y + entry.rootBounds.height; - const insideHalfViewport = - entry.intersectionRatio > 0; - ret[entry.target.id] = { - index: headingIdx, - aboveHalfViewport, - insideHalfViewport, - }; - } - } + for (const entry of entries) { + const headingIdx = watch.findIndex( + heading => heading === entry.target.id + ) - let activeSlug = ""; - let smallestIndexInViewport = Infinity; - let largestIndexAboveViewport = -1; - for (const s in ret) { - ret[s].isActive = false; - if ( - ret[s].insideHalfViewport && - ret[s].index < smallestIndexInViewport - ) { - smallestIndexInViewport = ret[s].index; - activeSlug = s; - } - if ( - smallestIndexInViewport === Infinity && - ret[s].aboveHalfViewport && - ret[s].index > largestIndexAboveViewport - ) { - largestIndexAboveViewport = ret[s].index; - activeSlug = s; - } - } + if (entry?.rootBounds && headingIdx !== -1) { + const aboveHalfViewport = + entry.boundingClientRect.y + entry.boundingClientRect.height <= + entry.rootBounds.y + entry.rootBounds.height + const insideHalfViewport = entry.intersectionRatio > 0 + ret[entry.target.id] = { + index: headingIdx, + aboveHalfViewport, + insideHalfViewport + } + } + } - if (ret[activeSlug]) ret[activeSlug].isActive = true; - return ret; - }); - }, - { - rootMargin: "0px 0px -50%", - threshold: [0, 1], + let activeSlug = '' + let smallestIndexInViewport = Infinity + let largestIndexAboveViewport = -1 + for (const s in ret) { + ret[s].isActive = false + if ( + ret[s].insideHalfViewport && + ret[s].index < smallestIndexInViewport + ) { + smallestIndexInViewport = ret[s].index + activeSlug = s + } + if ( + smallestIndexInViewport === Infinity && + ret[s].aboveHalfViewport && + ret[s].index > largestIndexAboveViewport + ) { + largestIndexAboveViewport = ret[s].index + activeSlug = s } - ); + } - for (const heading of watch) { - const element = document.getElementById(heading); + if (ret[activeSlug]) ret[activeSlug].isActive = true + return ret + }) + }, + { + rootMargin: '0px 0px -50%', + threshold: [0, 1] + } + ) - if (element != null) { - observer.observe(element); - } - } + for (const heading of watch) { + const element = document.getElementById(heading) + + if (element != null) { + observer.observe(element) + } + } - return () => { - observer.disconnect(); - }; - }, [watch]); + return () => { + observer.disconnect() + } + }, [watch]) - return activeAnchor; + return activeAnchor } diff --git a/packages/next-docs/src/types.d.ts b/packages/next-docs/src/types.d.ts index dbe42a32f..17699b3cc 100644 --- a/packages/next-docs/src/types.d.ts +++ b/packages/next-docs/src/types.d.ts @@ -1,9 +1,9 @@ -import type { ComponentPropsWithoutRef, ElementType } from "react"; +import type { ComponentPropsWithoutRef, ElementType } from 'react' -export type WithAs = Omit< - ComponentPropsWithoutRef, - "as" | keyof Extend +export type WithAs = Omit< + ComponentPropsWithoutRef, + 'as' | keyof Extend > & - Extend & { - as?: T; - }; + Extend & { + as?: T + } diff --git a/packages/next-docs/tsconfig.json b/packages/next-docs/tsconfig.json index bf21b353e..c98fff81c 100644 --- a/packages/next-docs/tsconfig.json +++ b/packages/next-docs/tsconfig.json @@ -1,19 +1,19 @@ { - "compilerOptions": { - "target": "es2016", - "module": "ESNext", - "declaration": false, - "noEmit": true, - "esModuleInterop": true, - "strict": true, - "skipLibCheck": true, - "allowJs": true, - "jsx": "react-jsx", - "moduleResolution": "node", - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "resolveJsonModule": true, - "paths": { - "@/*": ["./src/*"] - } + "compilerOptions": { + "target": "es2016", + "module": "ESNext", + "declaration": false, + "noEmit": true, + "esModuleInterop": true, + "strict": true, + "skipLibCheck": true, + "allowJs": true, + "jsx": "react-jsx", + "moduleResolution": "node", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "resolveJsonModule": true, + "paths": { + "@/*": ["./src/*"] } + } } diff --git a/packages/next-docs/tsup.config.ts b/packages/next-docs/tsup.config.ts index 65eda23ce..6ea32262b 100644 --- a/packages/next-docs/tsup.config.ts +++ b/packages/next-docs/tsup.config.ts @@ -1,11 +1,11 @@ -import { defineConfig } from "tsup"; -import tsconfig from "./tsconfig.json"; +import { defineConfig } from 'tsup' +import tsconfig from './tsconfig.json' export default defineConfig({ - entry: [ - "src/{server,breadcrumb,sidebar,toc,search,link,contentlayer,middleware}/index.{ts,tsx}", - ], - format: "esm", - dts: true, - target: tsconfig.compilerOptions.target as "es2016", -}); + entry: [ + 'src/{server,breadcrumb,sidebar,toc,search,link,contentlayer,middleware}/index.{ts,tsx}' + ], + format: 'esm', + dts: true, + target: tsconfig.compilerOptions.target as 'es2016' +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a90c36db..43c830b69 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,12 +4,42 @@ importers: .: devDependencies: - changeset: - specifier: ^0.2.6 - version: 0.2.6 + '@changesets/cli': + specifier: ^2.26.2 + version: 2.26.2 + '@ianvs/prettier-plugin-sort-imports': + specifier: ^4.1.0 + version: 4.1.0(prettier@3.0.0) + '@next/eslint-plugin-next': + specifier: ^13.4.12 + version: 13.4.12 + '@typescript-eslint/eslint-plugin': + specifier: ^6.2.0 + version: 6.2.0(@typescript-eslint/parser@6.2.0)(eslint@8.46.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: ^6.2.0 + version: 6.2.0(eslint@8.46.0)(typescript@5.0.4) concurrently: specifier: ^8.0.1 version: 8.0.1 + eslint: + specifier: ^8.46.0 + version: 8.46.0 + eslint-config-prettier: + specifier: ^8.9.0 + version: 8.9.0(eslint@8.46.0) + eslint-plugin-react: + specifier: ^7.33.1 + version: 7.33.1(eslint@8.46.0) + eslint-plugin-tailwindcss: + specifier: ^3.13.0 + version: 3.13.0(tailwindcss@3.3.2) + prettier: + specifier: ^3.0.0 + version: 3.0.0 + prettier-plugin-tailwindcss: + specifier: ^0.4.1 + version: 0.4.1(@ianvs/prettier-plugin-sort-imports@4.1.0)(prettier@3.0.0) tsup: specifier: 6.7.0 version: 6.7.0(typescript@5.0.4) @@ -54,7 +84,7 @@ importers: version: 0.190.0(react@18.2.0) next: specifier: 13.4.12 - version: 13.4.12(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.12(@babel/core@7.22.9)(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) next-contentlayer: specifier: ^0.3.4 version: 0.3.4(contentlayer@0.3.4)(esbuild@0.17.19)(next@13.4.12)(react-dom@18.2.0)(react@18.2.0) @@ -124,7 +154,7 @@ importers: version: 0.3.4(esbuild@0.17.19) next: specifier: 13.4.12 - version: 13.4.12(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.12(@babel/core@7.22.9)(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) next-contentlayer: specifier: ^0.3.4 version: 0.3.4(contentlayer@0.3.4)(esbuild@0.17.19)(next@13.4.12)(react-dom@18.2.0)(react@18.2.0) @@ -198,7 +228,7 @@ importers: version: 0.3.4(esbuild@0.17.19) next: specifier: 13.4.12 - version: 13.4.12(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.12(@babel/core@7.22.9)(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) packages/next-docs-ui: dependencies: @@ -274,7 +304,7 @@ importers: version: 0.3.4(esbuild@0.17.19) next: specifier: 13.4.12 - version: 13.4.12(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) + version: 13.4.12(@babel/core@7.22.9)(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) postcss: specifier: 8.4.23 version: 8.4.23 @@ -296,17 +326,385 @@ importers: packages: + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} dev: true + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + + /@babel/code-frame@7.22.5: + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.5 + + /@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + + /@babel/core@7.22.9: + resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helpers': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/generator@7.22.9: + resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + + /@babel/helper-compilation-targets@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.9 + lru-cache: 5.1.1 + semver: 6.3.1 + + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + + /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + + /@babel/helpers@7.22.6: + resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + + /@babel/highlight@7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/parser@7.22.7: + resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + /@babel/runtime@7.22.0: resolution: {integrity: sha512-TT6NB0oszYQ4oxLNUdG+FNHIc3MohXVCKA2BeyQ4WeM2VCSC6wBZ6P0Yfkdzxv+87D8Xk0LJyHeCKlWMvpZt0g==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 + /@babel/template@7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + + /@babel/traverse@7.22.8: + resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/types@7.22.5: + resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + + /@changesets/apply-release-plan@6.1.4: + resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} + dependencies: + '@babel/runtime': 7.22.0 + '@changesets/config': 2.3.1 + '@changesets/get-version-range-type': 0.3.2 + '@changesets/git': 2.0.0 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.5.4 + dev: true + + /@changesets/assemble-release-plan@5.2.4: + resolution: {integrity: sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==} + dependencies: + '@babel/runtime': 7.22.0 + '@changesets/errors': 0.1.4 + '@changesets/get-dependents-graph': 1.3.6 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + semver: 7.5.4 + dev: true + + /@changesets/changelog-git@0.1.14: + resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} + dependencies: + '@changesets/types': 5.2.1 + dev: true + + /@changesets/cli@2.26.2: + resolution: {integrity: sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig==} + hasBin: true + dependencies: + '@babel/runtime': 7.22.0 + '@changesets/apply-release-plan': 6.1.4 + '@changesets/assemble-release-plan': 5.2.4 + '@changesets/changelog-git': 0.1.14 + '@changesets/config': 2.3.1 + '@changesets/errors': 0.1.4 + '@changesets/get-dependents-graph': 1.3.6 + '@changesets/get-release-plan': 3.0.17 + '@changesets/git': 2.0.0 + '@changesets/logger': 0.0.5 + '@changesets/pre': 1.0.14 + '@changesets/read': 0.5.9 + '@changesets/types': 5.2.1 + '@changesets/write': 0.2.3 + '@manypkg/get-packages': 1.1.3 + '@types/is-ci': 3.0.0 + '@types/semver': 7.5.0 + ansi-colors: 4.1.3 + chalk: 2.4.2 + enquirer: 2.4.1 + external-editor: 3.1.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + is-ci: 3.0.1 + meow: 6.1.1 + outdent: 0.5.0 + p-limit: 2.3.0 + preferred-pm: 3.0.3 + resolve-from: 5.0.0 + semver: 7.5.4 + spawndamnit: 2.0.0 + term-size: 2.2.1 + tty-table: 4.2.1 + dev: true + + /@changesets/config@2.3.1: + resolution: {integrity: sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w==} + dependencies: + '@changesets/errors': 0.1.4 + '@changesets/get-dependents-graph': 1.3.6 + '@changesets/logger': 0.0.5 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.5 + dev: true + + /@changesets/errors@0.1.4: + resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} + dependencies: + extendable-error: 0.1.7 + dev: true + + /@changesets/get-dependents-graph@1.3.6: + resolution: {integrity: sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q==} + dependencies: + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + chalk: 2.4.2 + fs-extra: 7.0.1 + semver: 7.5.4 + dev: true + + /@changesets/get-release-plan@3.0.17: + resolution: {integrity: sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==} + dependencies: + '@babel/runtime': 7.22.0 + '@changesets/assemble-release-plan': 5.2.4 + '@changesets/config': 2.3.1 + '@changesets/pre': 1.0.14 + '@changesets/read': 0.5.9 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + dev: true + + /@changesets/get-version-range-type@0.3.2: + resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} + dev: true + + /@changesets/git@2.0.0: + resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} + dependencies: + '@babel/runtime': 7.22.0 + '@changesets/errors': 0.1.4 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.5 + spawndamnit: 2.0.0 + dev: true + + /@changesets/logger@0.0.5: + resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} + dependencies: + chalk: 2.4.2 + dev: true + + /@changesets/parse@0.3.16: + resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} + dependencies: + '@changesets/types': 5.2.1 + js-yaml: 3.14.1 + dev: true + + /@changesets/pre@1.0.14: + resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} + dependencies: + '@babel/runtime': 7.22.0 + '@changesets/errors': 0.1.4 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + dev: true + + /@changesets/read@0.5.9: + resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} + dependencies: + '@babel/runtime': 7.22.0 + '@changesets/git': 2.0.0 + '@changesets/logger': 0.0.5 + '@changesets/parse': 0.3.16 + '@changesets/types': 5.2.1 + chalk: 2.4.2 + fs-extra: 7.0.1 + p-filter: 2.1.0 + dev: true + + /@changesets/types@4.1.0: + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + dev: true + + /@changesets/types@5.2.1: + resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} + dev: true + + /@changesets/write@0.2.3: + resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} + dependencies: + '@babel/runtime': 7.22.0 + '@changesets/types': 5.2.1 + fs-extra: 7.0.1 + human-id: 1.0.2 + prettier: 2.8.8 + dev: true + /@contentlayer/cli@0.3.4(esbuild@0.17.19): resolution: {integrity: sha512-vNDwgLuhYNu+m70NZ3XK9kexKNguuxPXg7Yvzj3B34cEilQjjzSrcTY/i+AIQm9V7uT5GGshx9ukzPf+SmoszQ==} dependencies: @@ -664,6 +1062,43 @@ packages: requiresBuild: true optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.46.0 + eslint-visitor-keys: 3.4.2 + dev: true + + /@eslint-community/regexpp@4.6.2: + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.1: + resolution: {integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.46.0: + resolution: {integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@fal-works/esbuild-plugin-global-externals@2.1.2: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} @@ -736,6 +1171,46 @@ packages: protobufjs: 7.2.3 yargs: 17.7.2 + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@ianvs/prettier-plugin-sort-imports@4.1.0(prettier@3.0.0): + resolution: {integrity: sha512-IAXeTLU24k6mRPa6mFbW1qZJ/j0m3OeH44wyijWyr+YqqdNtBnfHxAntOAATS9iDfrT01NesKGsdzqnXdDQa/A==} + peerDependencies: + '@vue/compiler-sfc': '>=3.0.0' + prettier: 2 || 3 + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + dependencies: + '@babel/core': 7.22.9 + '@babel/generator': 7.22.9 + '@babel/parser': 7.22.7 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + prettier: 3.0.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} @@ -743,32 +1218,26 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.18 - dev: true /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@jridgewell/trace-mapping@0.3.18: resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - dev: true /@js-temporal/polyfill@0.4.4: resolution: {integrity: sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==} @@ -777,6 +1246,26 @@ packages: jsbi: 4.3.0 tslib: 2.5.2 + /@manypkg/find-root@1.1.0: + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + dependencies: + '@babel/runtime': 7.22.0 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + dev: true + + /@manypkg/get-packages@1.1.3: + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + dependencies: + '@babel/runtime': 7.22.0 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + dev: true + /@mdx-js/esbuild@2.3.0(esbuild@0.17.19): resolution: {integrity: sha512-r/vsqsM0E+U4Wr0DK+0EfmABE/eg+8ITW4DjvYdh3ve/tK2safaqHArNnaqbOk1DjYGrhxtoXoGaM3BY8fGBTA==} peerDependencies: @@ -824,6 +1313,12 @@ packages: /@next/env@13.4.12: resolution: {integrity: sha512-RmHanbV21saP/6OEPBJ7yJMuys68cIf8OBBWd7+uj40LdpmswVAwe1uzeuFyUsd6SfeITWT3XnQfn6wULeKwDQ==} + /@next/eslint-plugin-next@13.4.12: + resolution: {integrity: sha512-6rhK9CdxEgj/j1qvXIyLTWEaeFv7zOK8yJMulz3Owel0uek0U9MJCGzmKgYxM3aAUBo3gKeywCZKyQnJKto60A==} + dependencies: + glob: 7.1.7 + dev: true + /@next/swc-darwin-arm64@13.4.12: resolution: {integrity: sha512-deUrbCXTMZ6ZhbOoloqecnUeNpUOupi8SE2tx4jPfNS9uyUR9zK4iXBvH65opVcA/9F5I/p8vDXSYbUlbmBjZg==} engines: {node: '>= 10'} @@ -1064,7 +1559,7 @@ packages: '@opentelemetry/propagator-b3': 1.13.0(@opentelemetry/api@1.4.1) '@opentelemetry/propagator-jaeger': 1.13.0(@opentelemetry/api@1.4.1) '@opentelemetry/sdk-trace-base': 1.13.0(@opentelemetry/api@1.4.1) - semver: 7.5.1 + semver: 7.5.4 /@opentelemetry/semantic-conventions@1.13.0: resolution: {integrity: sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw==} @@ -2156,6 +2651,16 @@ packages: dependencies: '@types/unist': 2.0.6 + /@types/is-ci@3.0.0: + resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} + dependencies: + ci-info: 3.8.0 + dev: true + + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + dev: true + /@types/long@4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} @@ -2167,6 +2672,10 @@ packages: /@types/mdx@2.0.5: resolution: {integrity: sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==} + /@types/minimist@1.2.2: + resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} + dev: true + /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} @@ -2174,9 +2683,17 @@ packages: resolution: {integrity: sha512-c4mvXFByghezQ/eVGN5HvH/jI63vm3B7FiE81BUzDAWmuiohRecCO6ddU60dfq29oKUMiQujsoB2h0JQC7JHKA==} dev: true + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: true + /@types/node@18.16.3: resolution: {integrity: sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==} + /@types/normalize-package-data@2.4.1: + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + dev: true + /@types/parse5@6.0.3: resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} @@ -2201,52 +2718,208 @@ packages: /@types/scheduler@0.16.3: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + dev: true + /@types/unist@2.0.6: resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} - /acorn-jsx@5.3.2(acorn@8.8.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + /@typescript-eslint/eslint-plugin@6.2.0(@typescript-eslint/parser@6.2.0)(eslint@8.46.0)(typescript@5.0.4): + resolution: {integrity: sha512-rClGrMuyS/3j0ETa1Ui7s6GkLhfZGKZL3ZrChLeAiACBE/tRc1wq8SNZESUuluxhLj9FkUefRs2l6bCIArWBiQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - acorn: 8.8.2 - - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} + '@eslint-community/regexpp': 4.6.2 + '@typescript-eslint/parser': 6.2.0(eslint@8.46.0)(typescript@5.0.4) + '@typescript-eslint/scope-manager': 6.2.0 + '@typescript-eslint/type-utils': 6.2.0(eslint@8.46.0)(typescript@5.0.4) + '@typescript-eslint/utils': 6.2.0(eslint@8.46.0)(typescript@5.0.4) + '@typescript-eslint/visitor-keys': 6.2.0 + debug: 4.3.4 + eslint: 8.46.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.0.4) + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color dev: true - /acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} - engines: {node: '>=0.4.0'} - hasBin: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - /ansi-sequence-parser@1.1.0: - resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==} - dev: false - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + /@typescript-eslint/parser@6.2.0(eslint@8.46.0)(typescript@5.0.4): + resolution: {integrity: sha512-igVYOqtiK/UsvKAmmloQAruAdUHihsOCvplJpplPZ+3h4aDkC/UKZZNKgB6h93ayuYLuEymU3h8nF1xMRbh37g==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - color-convert: 2.0.1 - - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + '@typescript-eslint/scope-manager': 6.2.0 + '@typescript-eslint/types': 6.2.0 + '@typescript-eslint/typescript-estree': 6.2.0(typescript@5.0.4) + '@typescript-eslint/visitor-keys': 6.2.0 + debug: 4.3.4 + eslint: 8.46.0 + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color dev: true - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + /@typescript-eslint/scope-manager@6.2.0: + resolution: {integrity: sha512-1ZMNVgm5nnHURU8ZSJ3snsHzpFeNK84rdZjluEVBGNu7jDymfqceB3kdIZ6A4xCfEFFhRIB6rF8q/JIqJd2R0Q==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 + '@typescript-eslint/types': 6.2.0 + '@typescript-eslint/visitor-keys': 6.2.0 + dev: true - /arg@5.0.2: + /@typescript-eslint/type-utils@6.2.0(eslint@8.46.0)(typescript@5.0.4): + resolution: {integrity: sha512-DnGZuNU2JN3AYwddYIqrVkYW0uUQdv0AY+kz2M25euVNlujcN2u+rJgfJsBFlUEzBB6OQkUqSZPyuTLf2bP5mw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.2.0(typescript@5.0.4) + '@typescript-eslint/utils': 6.2.0(eslint@8.46.0)(typescript@5.0.4) + debug: 4.3.4 + eslint: 8.46.0 + ts-api-utils: 1.0.1(typescript@5.0.4) + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.2.0: + resolution: {integrity: sha512-1nRRaDlp/XYJQLvkQJG5F3uBTno5SHPT7XVcJ5n1/k2WfNI28nJsvLakxwZRNY5spuatEKO7d5nZWsQpkqXwBA==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@6.2.0(typescript@5.0.4): + resolution: {integrity: sha512-Mts6+3HQMSM+LZCglsc2yMIny37IhUgp1Qe8yJUYVyO6rHP7/vN0vajKu3JvHCBIy8TSiKddJ/Zwu80jhnGj1w==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.2.0 + '@typescript-eslint/visitor-keys': 6.2.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.0.4) + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.2.0(eslint@8.46.0)(typescript@5.0.4): + resolution: {integrity: sha512-RCFrC1lXiX1qEZN8LmLrxYRhOkElEsPKTVSNout8DMzf8PeWoQG7Rxz2SadpJa3VSh5oYKGwt7j7X/VRg+Y3OQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.2.0 + '@typescript-eslint/types': 6.2.0 + '@typescript-eslint/typescript-estree': 6.2.0(typescript@5.0.4) + eslint: 8.46.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.2.0: + resolution: {integrity: sha512-QbaYUQVKKo9bgCzpjz45llCfwakyoxHetIy8CAvYCtd16Zu1KrpzNHofwF8kGkpPOxZB2o6kz+0nqH8ZkIzuoQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.2.0 + eslint-visitor-keys: 3.4.2 + dev: true + + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-sequence-parser@1.1.0: + resolution: {integrity: sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==} + dev: false + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: true @@ -2265,6 +2938,24 @@ packages: tslib: 2.5.2 dev: false + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: true + + /array-includes@3.1.6: + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + is-string: 1.0.7 + dev: true + /array-timsort@1.0.3: resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} @@ -2273,6 +2964,53 @@ packages: engines: {node: '>=8'} dev: true + /array.prototype.flat@1.3.1: + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.flatmap@1.3.1: + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.tosorted@1.1.1: + resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 + dev: true + + /arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + /astring@1.8.5: resolution: {integrity: sha512-TuBbdn7jWVzf8dmFGTaRpW8qgANtWLi1qJLnkfGO5uVf6jf9f/F4B1H35tnOI+qVYZo3p3i8WZlbZOuPAE0wEA==} hasBin: true @@ -2292,6 +3030,11 @@ packages: postcss: 8.4.23 postcss-value-parser: 4.2.0 + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -2299,6 +3042,13 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + dependencies: + is-windows: 1.0.2 + dev: true + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -2316,6 +3066,12 @@ packages: dependencies: fill-range: 7.0.1 + /breakword@1.0.6: + resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + dependencies: + wcwidth: 1.0.1 + dev: true + /browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -2326,6 +3082,16 @@ packages: node-releases: 2.0.12 update-browserslist-db: 1.0.11(browserslist@4.21.5) + /browserslist@4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001517 + electron-to-chromium: 1.4.477 + node-releases: 2.0.12 + update-browserslist-db: 1.0.11(browserslist@4.21.9) + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2350,6 +3116,18 @@ packages: engines: {node: '>=8'} dev: true + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + /camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: @@ -2361,12 +3139,37 @@ packages: engines: {node: '>= 6'} dev: true + /camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + dev: true + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + /caniuse-lite@1.0.30001489: resolution: {integrity: sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==} + /caniuse-lite@1.0.30001517: + resolution: {integrity: sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==} + /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -2375,13 +3178,6 @@ packages: supports-color: 7.2.0 dev: true - /changeset@0.2.6: - resolution: {integrity: sha512-d21ym9zLPOKMVhIa8ulJo5IV3QR2NNdK6BWuwg48qJA0XSQaMeDjo1UGThcTn7YDmU08j3UpKyFNvb3zplk8mw==} - dependencies: - udc: 1.0.1 - underscore: 1.13.6 - dev: true - /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -2394,6 +3190,10 @@ packages: /character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -2408,6 +3208,11 @@ packages: optionalDependencies: fsevents: 2.3.2 + /ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} + dev: true + /class-variance-authority@0.6.0(typescript@5.0.4): resolution: {integrity: sha512-qdRDgfjx3GRb9fpwpSvn+YaidnT7IUJNe4wt5/SWwM+PmUwJUhQRk/8zAyNro0PmVfmen2635UboTjIBXXxy5A==} peerDependencies: @@ -2430,6 +3235,14 @@ packages: dependencies: typanion: 3.12.1 + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2438,6 +3251,11 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true + /clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} @@ -2457,12 +3275,20 @@ packages: - '@types/react' dev: false + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -2535,9 +3361,20 @@ packages: - markdown-wasm - supports-color + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + /cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -2556,6 +3393,28 @@ packages: /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /csv-generate@3.4.3: + resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} + dev: true + + /csv-parse@4.16.3: + resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} + dev: true + + /csv-stringify@5.6.5: + resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} + dev: true + + /csv@5.5.3: + resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} + engines: {node: '>= 0.1.90'} + dependencies: + csv-generate: 3.4.3 + csv-parse: 4.16.3 + csv-stringify: 5.6.5 + stream-transform: 2.1.3 + dev: true + /data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -2578,11 +3437,42 @@ packages: dependencies: ms: 2.1.2 + /decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: true + /decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} dependencies: character-entities: 2.0.2 + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + dev: true + + /define-properties@1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + /dependency-graph@0.11.0: resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} engines: {node: '>= 0.6.0'} @@ -2592,6 +3482,11 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + /detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} @@ -2621,6 +3516,20 @@ packages: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true @@ -2628,9 +3537,95 @@ packages: /electron-to-chromium@1.4.408: resolution: {integrity: sha512-vjeaj0u/UYnzA/CIdGXzzcxRLCqRwREYc9YfaWInjIEr7/XPttZ6ShpyqapchEy0S2r6LpLjDBTnNj7ZxnxJKg==} + /electron-to-chromium@1.4.477: + resolution: {integrity: sha512-shUVy6Eawp33dFBFIoYbIwLHrX0IZ857AlH9ug2o4rvbWmpaCUdBpQ5Zw39HRrfzAFm4APJE9V+E2A/WB0YqJw==} + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + /enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + dev: true + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + safe-array-concat: 1.0.0 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.11 + dev: true + + /es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: true + + /es-shim-unscopables@1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.3 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + /esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} @@ -2664,6 +3659,10 @@ packages: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -2673,11 +3672,142 @@ packages: engines: {node: '>=12'} dev: false + /eslint-config-prettier@8.9.0(eslint@8.46.0): + resolution: {integrity: sha512-+sbni7NfVXnOpnRadUA8S28AUlsZt9GjgFvABIRL9Hkn8KqNzOp+7Lw4QWtrwn20KzU3wqu1QoOj2m+7rKRqkA==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.46.0 + dev: true + + /eslint-plugin-react@7.33.1(eslint@8.46.0): + resolution: {integrity: sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + array.prototype.tosorted: 1.1.1 + doctrine: 2.1.0 + eslint: 8.46.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + object.hasown: 1.1.2 + object.values: 1.1.6 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.1 + string.prototype.matchall: 4.0.8 + dev: true + + /eslint-plugin-tailwindcss@3.13.0(tailwindcss@3.3.2): + resolution: {integrity: sha512-Fcep4KDRLWaK3KmkQbdyKHG0P4GdXFmXdDaweTIPcgOP60OOuWFbh1++dufRT28Q4zpKTKaHwTsXPJ4O/EjU2Q==} + engines: {node: '>=12.13.0'} + peerDependencies: + tailwindcss: ^3.3.2 + dependencies: + fast-glob: 3.3.0 + postcss: 8.4.23 + tailwindcss: 3.3.2 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.2: + resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.46.0: + resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@eslint-community/regexpp': 4.6.2 + '@eslint/eslintrc': 2.1.1 + '@eslint/js': 8.46.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.2 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.2 + dev: true + /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + /estree-util-attach-comments@2.1.1: resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} dependencies: @@ -2720,6 +3850,11 @@ packages: dependencies: '@types/estree': 1.0.1 + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2744,6 +3879,23 @@ packages: /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + /extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + dev: true + + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} @@ -2765,6 +3917,14 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -2782,16 +3942,64 @@ packages: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + dependencies: + micromatch: 4.0.5 + pkg-dir: 4.2.0 + dev: true + + /flat-cache@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: true + /flexsearch@0.7.21: resolution: {integrity: sha512-W7cHV7Hrwjid6lWmy0IhsWDFQboWSng25U3VVywpHOTJnnAZNPScog67G+cVpeX9f7yDD21ih0WDrMMT+JoaYg==} dev: false + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + /format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} @@ -2814,6 +4022,24 @@ packages: universalify: 2.0.0 dev: true + /fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + + /fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + /fs-monkey@1.0.3: resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} @@ -2831,10 +4057,37 @@ packages: /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function.prototype.name@1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + dev: true + /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} @@ -2850,6 +4103,14 @@ packages: engines: {node: '>=10'} dev: true + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: true + /github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} dev: false @@ -2881,6 +4142,35 @@ packages: path-is-absolute: 1.0.1 dev: true + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + /globals@13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + dev: true + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -2904,9 +4194,23 @@ packages: slash: 4.0.0 dev: true + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.1 + dev: true + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + /grapheme-splitter@1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + /gray-matter@4.0.3: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} @@ -2923,6 +4227,19 @@ packages: duplexer: 0.1.2 dev: true + /hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2932,6 +4249,29 @@ packages: resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} engines: {node: '>=8'} + /has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.1 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} @@ -3055,14 +4395,29 @@ packages: property-information: 6.2.0 space-separated-tokens: 2.0.2 + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + /html-void-elements@2.0.1: resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + /human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + dev: true + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} dev: true + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} @@ -3080,6 +4435,24 @@ packages: resolution: {integrity: sha512-hhy8OVNymU+cYYj8IwCbdNlXJRoMr4HRd7+efkH32eBVfybVU/5SbzDYf3ZSiiF9ye/ghfBrI/ujec/nwl+fOQ==} engines: {node: '>=14.0.0'} + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + /inflection@2.0.1: resolution: {integrity: sha512-wzkZHqpb4eGrOKBl34xy3umnYHx8Si5R1U4fwmdxLo5gdH6mEK8gclckTj/qWqy4Je0bsDYe/qazZYuO7xe3XQ==} engines: {node: '>=14.0.0'} @@ -3097,6 +4470,15 @@ packages: /inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + /internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + /invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: @@ -3112,21 +4494,66 @@ packages: is-alphabetical: 2.0.1 is-decimal: 2.0.1 + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + /is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + dependencies: + ci-info: 3.8.0 + dev: true + /is-core-module@2.12.1: resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} dependencies: has: 1.0.3 + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -3151,6 +4578,18 @@ packages: /is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3160,6 +4599,16 @@ packages: engines: {node: '>=12'} dev: false + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true + /is-plain-obj@3.0.0: resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} engines: {node: '>=10'} @@ -3173,11 +4622,68 @@ packages: dependencies: '@types/estree': 1.0.1 + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: true + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + dependencies: + better-path-resolve: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.11 + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -3211,10 +4717,38 @@ packages: /jsbi@4.3.0: resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==} + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: false + /jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: @@ -3223,6 +4757,16 @@ packages: graceful-fs: 4.2.11 dev: true + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + object.assign: 4.1.4 + object.values: 1.1.6 + dev: true + /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -3231,6 +4775,14 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + /lightningcss-darwin-arm64@1.21.5: resolution: {integrity: sha512-z05hyLX85WY0UfhkFUOrWEFqD69lpVAmgl3aDzMKlIZJGygbhbegqb4PV8qfUrKKNBauut/qVNPKZglhTaDDxA==} engines: {node: '>= 12.0.0'} @@ -3333,6 +4885,30 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -3351,6 +4927,10 @@ packages: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true + /lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true @@ -3375,6 +4955,18 @@ packages: dependencies: tslib: 2.5.2 + /lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -3389,6 +4981,16 @@ packages: react: 18.2.0 dev: false + /map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true + /markdown-extensions@1.1.1: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} @@ -3617,6 +5219,23 @@ packages: dependencies: fs-monkey: 1.0.3 + /meow@6.1.1: + resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} + engines: {node: '>=8'} + dependencies: + '@types/minimist': 1.2.2 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 2.5.0 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.13.1 + yargs-parser: 18.1.3 + dev: true + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true @@ -3769,8 +5388,8 @@ packages: /micromark-extension-mdxjs@1.0.1: resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) micromark-extension-mdx-expression: 1.0.5 micromark-extension-mdx-jsx: 1.0.4 micromark-extension-mdx-md: 1.0.1 @@ -3949,12 +5568,31 @@ packages: engines: {node: '>=6'} dev: true + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true + /minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + dev: true + + /mixme@0.5.9: + resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==} + engines: {node: '>= 8.0.0'} + dev: true + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -3980,6 +5618,14 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -3996,7 +5642,7 @@ packages: '@contentlayer/core': 0.3.4(esbuild@0.17.19) '@contentlayer/utils': 0.3.4 contentlayer: 0.3.4(esbuild@0.17.19) - next: 13.4.12(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.12(@babel/core@7.22.9)(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -4013,12 +5659,12 @@ packages: react: '*' react-dom: '*' dependencies: - next: 13.4.12(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.12(@babel/core@7.22.9)(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next@13.4.12(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0): + /next@13.4.12(@babel/core@7.22.9)(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-eHfnru9x6NRmTMcjQp6Nz0J4XH9OubmzOa7CkWL+AUrUxpibub3vWwttjduu9No16dug1kq04hiUUpo7J3m3Xw==} engines: {node: '>=16.8.0'} hasBin: true @@ -4044,7 +5690,7 @@ packages: postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.22.9)(react@18.2.0) watchpack: 2.4.0 zod: 3.21.4 optionalDependencies: @@ -4082,6 +5728,15 @@ packages: /node-releases@2.0.12: resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.2 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -4107,6 +5762,59 @@ packages: engines: {node: '>= 6'} dev: true + /object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.entries@1.1.6: + resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /object.fromentries@2.0.6: + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /object.hasown@1.1.2: + resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} + dependencies: + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /object.values@1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -4129,6 +5837,79 @@ packages: hasBin: true dev: true + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + + /outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + dev: true + + /p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + dependencies: + p-map: 2.1.0 + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + /parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} dependencies: @@ -4141,6 +5922,16 @@ packages: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.22.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + /parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} dev: false @@ -4154,6 +5945,11 @@ packages: no-case: 3.0.4 tslib: 2.5.2 + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -4191,11 +5987,23 @@ packages: engines: {node: '>=0.10.0'} dev: true + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} dev: true + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + /postcss-cli@10.1.0(postcss@8.4.23): resolution: {integrity: sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==} engines: {node: '>=14'} @@ -4342,11 +6150,102 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /preferred-pm@3.0.3: + resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: 4.0.0 + which-pm: 2.0.0 + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-plugin-tailwindcss@0.4.1(@ianvs/prettier-plugin-sort-imports@4.1.0)(prettier@3.0.0): + resolution: {integrity: sha512-hwn2EiJmv8M+AW4YDkbjJ6HlZCTzLyz1QlySn9sMuKV/Px0fjwldlB7tol8GzdgqtkdPtzT3iJ4UzdnYXP25Ag==} + engines: {node: '>=12.17.0'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@shufo/prettier-plugin-blade': '*' + '@trivago/prettier-plugin-sort-imports': '*' + prettier: ^2.2 || ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + prettier-plugin-twig-melody: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@shufo/prettier-plugin-blade': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + prettier-plugin-twig-melody: + optional: true + dependencies: + '@ianvs/prettier-plugin-sort-imports': 4.1.0(prettier@3.0.0) + prettier: 3.0.0 + dev: true + + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prettier@3.0.0: + resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==} + engines: {node: '>=14'} + hasBin: true + dev: true + /pretty-hrtime@1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} dev: true + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: true + /property-information@6.2.0: resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} @@ -4368,6 +6267,10 @@ packages: '@types/node': 18.16.3 long: 5.2.3 + /pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: true + /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} @@ -4382,6 +6285,11 @@ packages: inherits: 2.0.4 dev: false + /quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: true + /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: @@ -4391,6 +6299,10 @@ packages: react: 18.2.0 scheduler: 0.23.0 + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true + /react-remove-scroll-bar@2.3.4(@types/react@18.2.0)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} @@ -4493,15 +6405,61 @@ packages: pify: 2.3.0 dev: true + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.1 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: true + /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + /regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + dev: true + /rehype-img-size@1.0.1: resolution: {integrity: sha512-+rLkxF2H3mQULAg3iA2Z2spJQlBcCpApG8sHC47bc0p33ol+ddz+O3gyUcTgk5xX5jGaj1oQOBs/cBy8nIIhoQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4620,6 +6578,15 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -4633,10 +6600,26 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /resolve@2.0.0-next.4: + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + hasBin: true + dependencies: + is-core-module: 2.12.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.1.7 + dev: true + /rollup@3.23.0: resolution: {integrity: sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -4662,6 +6645,28 @@ packages: dependencies: mri: 1.2.0 + /safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-regex: 1.1.4 + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + /scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: @@ -4680,13 +6685,33 @@ packages: extend-shallow: 2.0.1 kind-of: 6.0.3 - /semver@7.5.1: - resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true + + /shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + dev: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4694,6 +6719,11 @@ packages: shebang-regex: 3.0.0 dev: true + /shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: true + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} @@ -4712,6 +6742,14 @@ packages: vscode-textmate: 8.0.0 dev: false + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true @@ -4740,6 +6778,19 @@ packages: engines: {node: '>=14.16'} dev: true + /smartwrap@2.0.2: + resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + array.prototype.flat: 1.3.1 + breakword: 1.0.6 + grapheme-splitter: 1.0.4 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 15.4.1 + dev: true + /sort-keys@5.0.0: resolution: {integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==} engines: {node: '>=12'} @@ -4779,9 +6830,44 @@ packages: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} dev: true + /spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + dependencies: + cross-spawn: 5.1.0 + signal-exit: 3.0.7 + dev: true + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.13 + dev: true + + /spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.13 + dev: true + + /spdx-license-ids@3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + dev: true + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + /stream-transform@2.1.3: + resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + dependencies: + mixme: 0.5.9 + dev: true + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -4794,6 +6880,44 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + /string.prototype.matchall@4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.5.0 + side-channel: 1.0.4 + dev: true + + /string.prototype.trim@1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /string.prototype.trimend@1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /string.prototype.trimstart@1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + /stringify-entities@4.0.3: resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} dependencies: @@ -4810,17 +6934,34 @@ packages: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + /style-to-object@0.4.1: resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==} dependencies: inline-style-parser: 0.1.1 - /styled-jsx@5.1.1(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.22.9)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -4833,6 +6974,7 @@ packages: babel-plugin-macros: optional: true dependencies: + '@babel/core': 7.22.9 client-only: 0.0.1 react: 18.2.0 @@ -4850,6 +6992,12 @@ packages: ts-interface-checker: 0.1.13 dev: true + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -4921,6 +7069,15 @@ packages: - ts-node dev: true + /term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + /thenby@1.3.4: resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} dev: true @@ -4938,6 +7095,17 @@ packages: any-promise: 1.3.0 dev: true + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -4966,9 +7134,23 @@ packages: /trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + /trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + dev: true + /trough@2.1.0: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + /ts-api-utils@1.0.1(typescript@5.0.4): + resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.0.4 + dev: true + /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true @@ -5015,6 +7197,20 @@ packages: - ts-node dev: true + /tty-table@4.2.1: + resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + chalk: 4.1.2 + csv: 5.5.3 + kleur: 4.1.5 + smartwrap: 2.0.2 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 17.7.2 + dev: true + /turbo-darwin-64@1.9.9: resolution: {integrity: sha512-UDGM9E21eCDzF5t1F4rzrjwWutcup33e7ZjNJcW/mJDPorazZzqXGKEPIy9kXwKhamUUXfC7668r6ZuA1WXF2Q==} cpu: [x64] @@ -5079,6 +7275,33 @@ packages: /typanion@3.12.1: resolution: {integrity: sha512-3SJF/czpzqq6G3lprGFLa6ps12yb1uQ1EmitNnep2fDMNh1aO/Zbq9sWY+3lem0zYb2oHJnQWyabTGUZ+L1ScQ==} + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + /type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -5088,17 +7311,56 @@ packages: resolution: {integrity: sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==} engines: {node: '>=14.16'} + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: true + /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true - /udc@1.0.1: - resolution: {integrity: sha512-jv+D9de1flsum5QkFtBdjyppCQAdz9kTck/0xST5Vx48T9LL2BYnw0Iw77dSKDQ9KZ/PS3qPO1vfXHDpLZlxcQ==} - dev: true - - /underscore@1.13.6: - resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 dev: true /unified@10.1.2: @@ -5154,6 +7416,11 @@ packages: unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 + /universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} @@ -5169,6 +7436,22 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-browserslist-db@1.0.11(browserslist@4.21.9): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.9 + escalade: 3.1.1 + picocolors: 1.0.0 + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: true + /use-callback-ref@1.3.0(@types/react@18.2.0)(react@18.2.0): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} @@ -5239,6 +7522,13 @@ packages: kleur: 4.1.5 sade: 1.8.1 + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + /vfile-location@4.1.0: resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} dependencies: @@ -5274,6 +7564,12 @@ packages: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + dev: true + /web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -5290,7 +7586,7 @@ packages: engines: {node: '>= 10.13.0'} hasBin: true dependencies: - acorn: 8.8.2 + acorn: 8.10.0 acorn-walk: 8.2.0 chalk: 4.1.2 commander: 7.2.0 @@ -5312,6 +7608,46 @@ packages: webidl-conversions: 4.0.2 dev: true + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: true + + /which-pm@2.0.0: + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + engines: {node: '>=8.15'} + dependencies: + load-yaml-file: 0.2.0 + path-exists: 4.0.0 + dev: true + + /which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -5320,6 +7656,15 @@ packages: isexe: 2.0.0 dev: true + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -5345,10 +7690,21 @@ packages: optional: true dev: true + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + /yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -5361,10 +7717,35 @@ packages: resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} engines: {node: '>= 14'} + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: true + /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -5377,6 +7758,11 @@ packages: y18n: 5.0.8 yargs-parser: 21.1.1 + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + /zod@3.21.4: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8f14054cc..2eb129ea3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,4 @@ packages: - - packages/* - - apps/* - - examples/* + - packages/* + - apps/* + - examples/* diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 000000000..6361d199e --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,11 @@ +module.exports = { + semi: false, + singleQuote: true, + trailingComma: 'none', + arrowParens: 'avoid', + plugins: [ + require('prettier-plugin-tailwindcss'), + require('@ianvs/prettier-plugin-sort-imports') + ], + proseWrap: 'always' +} diff --git a/tsconfig.json b/tsconfig.json index 8eac10999..01cfc81ae 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { - "compilerOptions": { - "noEmit": true - }, - "exclude": [] + "compilerOptions": { + "noEmit": true + }, + "exclude": [] } diff --git a/turbo.json b/turbo.json index e14e51ec6..34fb4022b 100644 --- a/turbo.json +++ b/turbo.json @@ -1,32 +1,32 @@ { - "$schema": "https://turbo.build/schema.json", - "pipeline": { - "build": { - "dependsOn": ["^build"], - "outputs": [ - ".contentlayer/**", - "!.contentlayer/.cache/**", - ".next/**", - "!.next/cache/**", - "dist/**/*.d.ts", - "dist/**/*.mjs", - "dist/**/*.js", - "dist/**/*.css" - ] - }, - "test": {}, - "types:check": { - "dependsOn": [], - "outputs": [] - }, - "format": { - "cache": false - }, - "clean": { - "cache": false - }, - "dev": { - "cache": false - } + "$schema": "https://turbo.build/schema.json", + "pipeline": { + "build": { + "dependsOn": ["^build"], + "outputs": [ + ".contentlayer/**", + "!.contentlayer/.cache/**", + ".next/**", + "!.next/cache/**", + "dist/**/*.d.ts", + "dist/**/*.mjs", + "dist/**/*.js", + "dist/**/*.css" + ] + }, + "test": {}, + "types:check": { + "dependsOn": [], + "outputs": [] + }, + "format": { + "cache": false + }, + "clean": { + "cache": false + }, + "dev": { + "cache": false } + } }