diff --git a/packages/docs-new/build.ts b/packages/docs-new/build.ts index 6e97ee7..97a1ec5 100644 --- a/packages/docs-new/build.ts +++ b/packages/docs-new/build.ts @@ -2,14 +2,7 @@ import { resolve } from "node:path" import { build } from "vite" await build({ - build: { - outDir: "dist/client", - lib: { - entry: resolve("src/entry.client.tsx"), - fileName: () => "entry.client.js", - formats: ["es"], - }, - }, + build: { outDir: "dist/client" }, }) await build({ diff --git a/packages/docs-new/index.html b/packages/docs-new/index.html new file mode 100644 index 0000000..6358701 --- /dev/null +++ b/packages/docs-new/index.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + +
+ +
+ + diff --git a/packages/docs-new/package.json b/packages/docs-new/package.json index d80d607..9bfcca1 100644 --- a/packages/docs-new/package.json +++ b/packages/docs-new/package.json @@ -14,7 +14,12 @@ "react-dom": "^18.0.0-rc.0", "react-head": "^3.4.0", "react-router": "^6.2.1", - "react-router-dom": "^6.2.1" + "react-router-dom": "^6.2.1", + "@heroicons/react": "^1.0.5", + "@reach/rect": "^0.16.0", + "clsx": "^1.1.1", + "gray-matter": "^4.0.3", + "react-focus-on": "^3.5.4" }, "devDependencies": { "@mapbox/rehype-prism": "^0.8.0", diff --git a/packages/docs-new/server.ts b/packages/docs-new/server.ts index 34c2c51..16df0ff 100644 --- a/packages/docs-new/server.ts +++ b/packages/docs-new/server.ts @@ -1,6 +1,7 @@ import compression from "compression" import express, { Router } from "express" -import { resolve } from "node:path" +import { readFile } from "node:fs/promises" +import { join, resolve } from "node:path" import { createServer as createViteServer } from "vite" import type * as entryModule from "./src/entry.server" @@ -19,7 +20,15 @@ async function createDevelopmentRouter() { "/src/entry.server.tsx", )) as typeof entryModule - const html = await vite.transformIndexHtml(url, await render(url)) + const htmlTemplate = await readFile( + join(vite.config.root, "index.html"), + "utf8", + ) + + const html = await vite.transformIndexHtml( + url, + render(url, htmlTemplate), + ) res.status(200).set({ "Content-Type": "text/html" }).end(html) } catch (error: any) { @@ -33,17 +42,19 @@ async function createDevelopmentRouter() { function createProductionRouter() { return Router() .use(compression()) - .use(express.static(resolve("dist/client"))) + .use(express.static(resolve("dist/client"), { index: false })) .use("*", async (req, res) => { try { const { render }: typeof entryModule = await import( "./dist/server/entry.server" ) + const htmlTemplate = await readFile("dist/client/index.html", "utf8") + res .status(200) .set({ "Content-Type": "text/html" }) - .end(await render(req.originalUrl)) + .end(render(req.originalUrl, htmlTemplate)) } catch (error: any) { console.error(error) res.status(500).end(error.stack || error.message) diff --git a/packages/docs-new/src/app.tsx b/packages/docs-new/src/app.tsx index 4e3456b..5bf804a 100644 --- a/packages/docs-new/src/app.tsx +++ b/packages/docs-new/src/app.tsx @@ -1,43 +1,35 @@ import { description } from "reacord/package.json" import { lazy, Suspense } from "react" import { Meta, Title } from "react-head" -import { Link, Route, Routes } from "react-router-dom" -import { lazyNamed } from "./helpers/lazy-named" +import { Route, Routes } from "react-router-dom" +import { GuidePageLayout } from "./components/guide-page-layout" +import { LandingPage } from "./pages/landing-page" export function App() { return ( <> Reacord - - }> - - } /> - }> - {docs.map(({ route, component: Component }) => ( - } /> - ))} - - - + + } /> + }> + {docs.map(({ route, component: Component }) => ( + }> + + + } + /> + ))} + + ) } -const LandingPage = lazyNamed( - "LandingPage", - () => import("./pages/landing-page"), -) - -const DocumentPageLayout = lazyNamed( - "DocumentPage", - () => import("./pages/document-page"), -) - const docs = Object.entries(import.meta.glob("./docs/*.md")).map( ([path, loadModule]) => ({ route: path.replace("./docs/", "").replace(/\.md$/, ""), diff --git a/packages/docs-new/src/components/app-link.tsx b/packages/docs-new/src/components/app-link.tsx new file mode 100644 index 0000000..6045973 --- /dev/null +++ b/packages/docs-new/src/components/app-link.tsx @@ -0,0 +1,34 @@ +import { Link } from "react-router-dom" +import { ExternalLink } from "./external-link" + +export type AppLinkProps = { + type: "router" | "internal" | "external" + label: React.ReactNode + to: string + className?: string +} + +export function AppLink(props: AppLinkProps) { + switch (props.type) { + case "router": + return ( + + {props.label} + + ) + + case "internal": + return ( + + {props.label} + + ) + + case "external": + return ( + + {props.label} + + ) + } +} diff --git a/packages/docs-new/src/components/external-link.tsx b/packages/docs-new/src/components/external-link.tsx new file mode 100644 index 0000000..bfe13a6 --- /dev/null +++ b/packages/docs-new/src/components/external-link.tsx @@ -0,0 +1,9 @@ +import type { ComponentPropsWithoutRef } from "react" + +export function ExternalLink(props: ComponentPropsWithoutRef<"a">) { + return ( + + {props.children} + + ) +} diff --git a/packages/docs-new/src/components/guide-page-layout.tsx b/packages/docs-new/src/components/guide-page-layout.tsx new file mode 100644 index 0000000..217c048 --- /dev/null +++ b/packages/docs-new/src/components/guide-page-layout.tsx @@ -0,0 +1,49 @@ +import clsx from "clsx" +import { Outlet } from "react-router" +import { guideLinks } from "../data/guide-links" +import { useScrolled } from "../hooks/dom/use-scrolled" +import { + docsProseClass, + linkClass, + maxWidthContainer, +} from "../styles/components" +import { AppLink } from "./app-link" +import { MainNavigation } from "./main-navigation" + +export function GuidePageLayout() { + return ( + <> + +
+ +
+
+
+ +
+ +
+
+ + ) +} + +function HeaderPanel({ children }: { children: React.ReactNode }) { + const isScrolled = useScrolled() + + const className = clsx( + isScrolled ? "bg-slate-700/30" : "bg-slate-800", + "shadow sticky top-0 backdrop-blur-sm transition z-10 flex", + ) + + return
{children}
+} diff --git a/packages/docs-new/src/components/landing-example.md b/packages/docs-new/src/components/landing-example.md new file mode 100644 index 0000000..ec0112a --- /dev/null +++ b/packages/docs-new/src/components/landing-example.md @@ -0,0 +1,19 @@ + +```tsx +import * as React from "react" +import { Embed, Button } from "reacord" + +function Counter() { + const [count, setCount] = React.useState(0) + return ( + <> + + This button has been clicked {count} times. + + + + ) +} +``` diff --git a/packages/docs-new/src/components/main-navigation.tsx b/packages/docs-new/src/components/main-navigation.tsx new file mode 100644 index 0000000..31e94db --- /dev/null +++ b/packages/docs-new/src/components/main-navigation.tsx @@ -0,0 +1,40 @@ +import { Link } from "react-router-dom" +import { AppLink } from "../components/app-link" +import { guideLinks } from "../data/guide-links" +import { mainLinks } from "../data/main-links" +import { linkClass } from "../styles/components" +import { PopoverMenu } from "./popover-menu" + +export function MainNavigation() { + return ( + + ) +} diff --git a/packages/docs-new/src/components/popover-menu.tsx b/packages/docs-new/src/components/popover-menu.tsx new file mode 100644 index 0000000..6548d85 --- /dev/null +++ b/packages/docs-new/src/components/popover-menu.tsx @@ -0,0 +1,67 @@ +import { MenuAlt4Icon } from "@heroicons/react/outline" +import { useRect } from "@reach/rect" +import clsx from "clsx" +import { useRef, useState } from "react" +import { FocusOn } from "react-focus-on" +import { linkClass } from "../styles/components" + +// todo: remove useRect usage and rely on css absolute positioning instead +export function PopoverMenu({ children }: { children: React.ReactNode }) { + const [visible, setVisible] = useState(false) + + const buttonRef = useRef(null) + const buttonRect = useRect(buttonRef) + + const panelRef = useRef(null) + const panelRect = useRect(panelRef) + + /* eslint-disable jsx-a11y/no-static-element-interactions */ + /* eslint-disable jsx-a11y/click-events-have-key-events */ + return ( + <> + + + setVisible(false)} + onEscapeKey={() => setVisible(false)} + > +
setVisible(false)} + > +
+
+
+ {children} +
+
+
+
+
+ + ) +} + +PopoverMenu.itemClass = clsx` + px-3 py-2 transition text-left font-medium block + opacity-50 hover:opacity-100 hover:bg-black/30 +` diff --git a/packages/docs-new/src/data/guide-links.tsx b/packages/docs-new/src/data/guide-links.tsx new file mode 100644 index 0000000..c1c20a3 --- /dev/null +++ b/packages/docs-new/src/data/guide-links.tsx @@ -0,0 +1,3 @@ +import type { AppLinkProps } from "../components/app-link" + +export const guideLinks: AppLinkProps[] = [] diff --git a/packages/docs-new/src/data/main-links.tsx b/packages/docs-new/src/data/main-links.tsx new file mode 100644 index 0000000..220d45a --- /dev/null +++ b/packages/docs-new/src/data/main-links.tsx @@ -0,0 +1,37 @@ +import { + CodeIcon, + DocumentTextIcon, + ExternalLinkIcon, +} from "@heroicons/react/solid" +import type { AppLinkProps } from "../components/app-link" +import { inlineIconClass } from "../styles/components" + +export const mainLinks: AppLinkProps[] = [ + { + type: "router", + to: "/docs/getting-started", + label: ( + <> + Guides + + ), + }, + { + type: "internal", + to: "/docs/api", + label: ( + <> + API Reference + + ), + }, + { + type: "external", + to: "https://github.com/itsMapleLeaf/reacord", + label: ( + <> + GitHub + + ), + }, +] diff --git a/packages/docs-new/src/entry.server.tsx b/packages/docs-new/src/entry.server.tsx index cbc17e2..fac8aa5 100644 --- a/packages/docs-new/src/entry.server.tsx +++ b/packages/docs-new/src/entry.server.tsx @@ -3,7 +3,7 @@ import { HeadProvider } from "react-head" import { StaticRouter } from "react-router-dom/server" import { App } from "./app" -export async function render(url: string) { +export function render(url: string, htmlTemplate: string) { const headTags: React.ReactElement[] = [] const app = ( @@ -20,23 +20,15 @@ export async function render(url: string) { ? "/entry.client.js" : "/src/entry.client.tsx" - return /* HTML */ ` - - - - - - - - - ${renderToString(<>{headTags})} - - - -
${appHtml}
- - ` + return htmlTemplate + .replace( + "", + renderToString( + <> + {headTags} + + + +
${body}
+ + + ` +} diff --git a/packages/docs-new/src/pages/document-page.tsx b/packages/docs-new/src/pages/document-page.tsx deleted file mode 100644 index 48b9936..0000000 --- a/packages/docs-new/src/pages/document-page.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { Suspense } from "react" -import { Outlet } from "react-router" - -export function DocumentPage() { - return ( - <> -

Docs

- Loading...}> - - - - ) -} diff --git a/packages/docs-new/src/pages/landing-page.tsx b/packages/docs-new/src/pages/landing-page.tsx index 82ef0ff..c6e7ceb 100644 --- a/packages/docs-new/src/pages/landing-page.tsx +++ b/packages/docs-new/src/pages/landing-page.tsx @@ -1,7 +1,30 @@ +import packageJson from "reacord/package.json" +import { Link } from "react-router-dom" +import LandingExample from "../components/landing-example.md" +import { MainNavigation } from "../components/main-navigation" +import { maxWidthContainer } from "../styles/components" + export function LandingPage() { return ( - <> -

Landing

- +
+
+ +
+
+
+

reacord

+
+ +
+

{packageJson.description}

+ + Get Started + +
+
+
) } diff --git a/packages/docs-new/src/styles/components.ts b/packages/docs-new/src/styles/components.ts new file mode 100644 index 0000000..76ad495 --- /dev/null +++ b/packages/docs-new/src/styles/components.ts @@ -0,0 +1,24 @@ +import clsx from "clsx" + +export const maxWidthContainer = clsx`mx-auto w-full max-w-screen-lg px-4` + +export const inlineIconClass = clsx`inline w-5 align-sub` + +export const linkClass = clsx` + font-medium inline-block relative + opacity-60 hover:opacity-100 transition-opacity + after:absolute after:block after:w-full after:h-px after:bg-white/50 after:translate-y-[3px] after:opacity-0 after:transition + hover:after:translate-y-[-1px] hover:after:opacity-100 +` + +export const docsProseClass = clsx` + prose prose-invert + prose-h1:font-light prose-h1:mb-4 prose-h1:text-3xl lg:prose-h1:text-4xl + prose-h2:font-light + prose-h3:font-light + prose-p:my-4 + prose-a:font-medium prose-a:text-emerald-400 hover:prose-a:no-underline + prose-strong:font-medium prose-strong:text-emerald-400 + prose-pre:font-monospace prose-pre:overflow-x-auto + max-w-none +` diff --git a/packages/docs-new/src/styles/prism-theme.css b/packages/docs-new/src/styles/prism-theme.css new file mode 100644 index 0000000..45b8096 --- /dev/null +++ b/packages/docs-new/src/styles/prism-theme.css @@ -0,0 +1,133 @@ +/** + * Nord Theme Originally by Arctic Ice Studio + * https://nordtheme.com + * + * Ported for PrismJS by Zane Hitchcoxc (@zwhitchcox) and Gabriel Ramos (@gabrieluizramos) + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #f8f8f2; + background: none; + /* font-family: "Fira Code", Consolas, Monaco, "Andale Mono", "Ubuntu Mono", + monospace; */ + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.7; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; + border-radius: 0.3em; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + /* background: #2e3440; */ + background: rgba(0, 0, 0, 0.3); +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #636f88; +} + +.token.punctuation { + color: #81a1c1; +} + +.namespace { + opacity: 0.7; +} + +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: #81a1c1; +} + +.token.number { + color: #b48ead; +} + +.token.boolean { + color: #81a1c1; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #a3be8c; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: #81a1c1; +} + +.token.atrule, +.token.attr-value, +.token.function, +.token.class-name { + color: #88c0d0; +} + +.token.keyword { + color: #81a1c1; +} + +.token.regex, +.token.important { + color: #ebcb8b; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.code-line.highlight-line { + background-color: rgba(255, 255, 255, 0.08); + padding: 0 1rem; + margin: 0 -1rem; + display: block; +} diff --git a/packages/docs-new/src/tailwind.css b/packages/docs-new/src/styles/tailwind.css similarity index 100% rename from packages/docs-new/src/tailwind.css rename to packages/docs-new/src/styles/tailwind.css diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aed7f82..4f82836 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,7 +112,9 @@ importers: packages/docs-new: specifiers: + '@heroicons/react': ^1.0.5 '@mapbox/rehype-prism': ^0.8.0 + '@reach/rect': ^0.16.0 '@tailwindcss/typography': ^0.5.0 '@types/compression': ^1.7.2 '@types/express': ^4.17.13 @@ -121,13 +123,16 @@ importers: '@types/react-dom': ^17.0.9 '@vitejs/plugin-react': ^1.1.3 autoprefixer: ^10.4.1 + clsx: ^1.1.1 compression: ^1.7.4 esno: ^0.13.0 express: ^4.17.2 + gray-matter: ^4.0.3 postcss: ^8.4.5 reacord: workspace:* react: ^18.0.0-rc.0 react-dom: ^18.0.0-rc.0 + react-focus-on: ^3.5.4 react-head: ^3.4.0 react-router: ^6.2.1 react-router-dom: ^6.2.1 @@ -138,10 +143,15 @@ importers: vite: ^2.7.10 xdm: ^3.3.1 dependencies: + '@heroicons/react': 1.0.5_react@18.0.0-rc.0 + '@reach/rect': 0.16.0_757a802188413a36d4f24237d13b8e90 + clsx: 1.1.1 express: 4.17.2 + gray-matter: 4.0.3 reacord: link:../reacord react: 18.0.0-rc.0 react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 + react-focus-on: 3.5.4_2fa291bfae6e56080648438396754a97 react-head: 3.4.0_757a802188413a36d4f24237d13b8e90 react-router: 6.2.1_react@18.0.0-rc.0 react-router-dom: 6.2.1_757a802188413a36d4f24237d13b8e90 @@ -727,6 +737,14 @@ packages: react: 17.0.2 dev: false + /@heroicons/react/1.0.5_react@18.0.0-rc.0: + resolution: {integrity: sha512-UDMyLM2KavIu2vlWfMspapw9yii7aoLwzI2Hudx4fyoPwfKfxU8r3cL8dEBXOjcLG0/oOONZzbT14M1HoNtEcg==} + peerDependencies: + react: '>= 16' + dependencies: + react: 18.0.0-rc.0 + dev: false + /@humanwhocodes/config-array/0.9.2: resolution: {integrity: sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==} engines: {node: '>=10.10.0'} @@ -1059,6 +1077,21 @@ packages: resolution: {integrity: sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==} dev: false + /@reach/rect/0.16.0_757a802188413a36d4f24237d13b8e90: + resolution: {integrity: sha512-/qO9jQDzpOCdrSxVPR6l674mRHNTqfEjkaxZHluwJ/2qGUtYsA0GSZiF/+wX/yOWeBif1ycxJDa6HusAMJZC5Q==} + peerDependencies: + react: ^16.8.0 || 17.x + react-dom: ^16.8.0 || 17.x + dependencies: + '@reach/observe-rect': 1.2.0 + '@reach/utils': 0.16.0_757a802188413a36d4f24237d13b8e90 + prop-types: 15.8.0 + react: 18.0.0-rc.0 + react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 + tiny-warning: 1.0.3 + tslib: 2.3.1 + dev: false + /@reach/rect/0.16.0_react-dom@17.0.2+react@17.0.2: resolution: {integrity: sha512-/qO9jQDzpOCdrSxVPR6l674mRHNTqfEjkaxZHluwJ/2qGUtYsA0GSZiF/+wX/yOWeBif1ycxJDa6HusAMJZC5Q==} peerDependencies: @@ -1074,6 +1107,18 @@ packages: tslib: 2.3.1 dev: false + /@reach/utils/0.16.0_757a802188413a36d4f24237d13b8e90: + resolution: {integrity: sha512-PCggBet3qaQmwFNcmQ/GqHSefadAFyNCUekq9RrWoaU9hh/S4iaFgf2MBMdM47eQj5i/Bk0Mm07cP/XPFlkN+Q==} + peerDependencies: + react: ^16.8.0 || 17.x + react-dom: ^16.8.0 || 17.x + dependencies: + react: 18.0.0-rc.0 + react-dom: 18.0.0-rc.0_react@18.0.0-rc.0 + tiny-warning: 1.0.3 + tslib: 2.3.1 + dev: false + /@reach/utils/0.16.0_react-dom@17.0.2+react@17.0.2: resolution: {integrity: sha512-PCggBet3qaQmwFNcmQ/GqHSefadAFyNCUekq9RrWoaU9hh/S4iaFgf2MBMdM47eQj5i/Bk0Mm07cP/XPFlkN+Q==} peerDependencies: @@ -8098,6 +8143,15 @@ packages: react: 17.0.2 dev: false + /react-clientside-effect/1.2.5_react@18.0.0-rc.0: + resolution: {integrity: sha512-2bL8qFW1TGBHozGGbVeyvnggRpMjibeZM2536AKNENLECutp2yfs44IL8Hmpn8qjFQ2K7A9PnYf3vc7aQq/cPA==} + peerDependencies: + react: ^15.3.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@babel/runtime': 7.16.5 + react: 18.0.0-rc.0 + dev: false + /react-dom/17.0.2_react@17.0.2: resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} peerDependencies: @@ -8120,6 +8174,22 @@ packages: scheduler: 0.21.0-rc.0-next-f2a59df48-20211208 dev: false + /react-focus-lock/2.7.1_2fa291bfae6e56080648438396754a97: + resolution: {integrity: sha512-ImSeVmcrLKNMqzUsIdqOkXwTVltj79OPu43oT8tVun7eIckA4VdM7UmYUFo3H/UC2nRVgagMZGFnAOQEDiDYcA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@babel/runtime': 7.16.5 + focus-lock: 0.10.1 + prop-types: 15.8.0 + react: 18.0.0-rc.0 + react-clientside-effect: 1.2.5_react@18.0.0-rc.0 + use-callback-ref: 1.2.5_2fa291bfae6e56080648438396754a97 + use-sidecar: 1.0.5_react@18.0.0-rc.0 + transitivePeerDependencies: + - '@types/react' + dev: false + /react-focus-lock/2.7.1_b08e3c15324cbe90a6ff8fcd416c932c: resolution: {integrity: sha512-ImSeVmcrLKNMqzUsIdqOkXwTVltj79OPu43oT8tVun7eIckA4VdM7UmYUFo3H/UC2nRVgagMZGFnAOQEDiDYcA==} peerDependencies: @@ -8136,6 +8206,27 @@ packages: - '@types/react' dev: false + /react-focus-on/3.5.4_2fa291bfae6e56080648438396754a97: + resolution: {integrity: sha512-HnU0YGKhNSUsC4k6K8L+2wk8mC/qdg+CsS7A1bWLMgK7UuBphdECs2esnS6cLmBoVNjsFnCm/vMypeezKOdK3A==} + engines: {node: '>=8.5.0'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.38 + aria-hidden: 1.1.3 + react: 18.0.0-rc.0 + react-focus-lock: 2.7.1_2fa291bfae6e56080648438396754a97 + react-remove-scroll: 2.4.3_2fa291bfae6e56080648438396754a97 + react-style-singleton: 2.1.1_2fa291bfae6e56080648438396754a97 + tslib: 2.3.1 + use-callback-ref: 1.2.5_2fa291bfae6e56080648438396754a97 + use-sidecar: 1.0.5_react@18.0.0-rc.0 + dev: false + /react-focus-on/3.5.4_b08e3c15324cbe90a6ff8fcd416c932c: resolution: {integrity: sha512-HnU0YGKhNSUsC4k6K8L+2wk8mC/qdg+CsS7A1bWLMgK7UuBphdECs2esnS6cLmBoVNjsFnCm/vMypeezKOdK3A==} engines: {node: '>=8.5.0'} @@ -8192,6 +8283,22 @@ packages: engines: {node: '>=0.10.0'} dev: true + /react-remove-scroll-bar/2.2.0_2fa291bfae6e56080648438396754a97: + resolution: {integrity: sha512-UU9ZBP1wdMR8qoUs7owiVcpaPwsQxUDC2lypP6mmixaGlARZa7ZIBx1jcuObLdhMOvCsnZcvetOho0wzPa9PYg==} + engines: {node: '>=8.5.0'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.38 + react: 18.0.0-rc.0 + react-style-singleton: 2.1.1_2fa291bfae6e56080648438396754a97 + tslib: 1.14.1 + dev: false + /react-remove-scroll-bar/2.2.0_b08e3c15324cbe90a6ff8fcd416c932c: resolution: {integrity: sha512-UU9ZBP1wdMR8qoUs7owiVcpaPwsQxUDC2lypP6mmixaGlARZa7ZIBx1jcuObLdhMOvCsnZcvetOho0wzPa9PYg==} engines: {node: '>=8.5.0'} @@ -8208,6 +8315,25 @@ packages: tslib: 1.14.1 dev: false + /react-remove-scroll/2.4.3_2fa291bfae6e56080648438396754a97: + resolution: {integrity: sha512-lGWYXfV6jykJwbFpsuPdexKKzp96f3RbvGapDSIdcyGvHb7/eqyn46C7/6h+rUzYar1j5mdU+XECITHXCKBk9Q==} + engines: {node: '>=8.5.0'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.38 + react: 18.0.0-rc.0 + react-remove-scroll-bar: 2.2.0_2fa291bfae6e56080648438396754a97 + react-style-singleton: 2.1.1_2fa291bfae6e56080648438396754a97 + tslib: 1.14.1 + use-callback-ref: 1.2.5_2fa291bfae6e56080648438396754a97 + use-sidecar: 1.0.5_react@18.0.0-rc.0 + dev: false + /react-remove-scroll/2.4.3_b08e3c15324cbe90a6ff8fcd416c932c: resolution: {integrity: sha512-lGWYXfV6jykJwbFpsuPdexKKzp96f3RbvGapDSIdcyGvHb7/eqyn46C7/6h+rUzYar1j5mdU+XECITHXCKBk9Q==} engines: {node: '>=8.5.0'} @@ -8269,6 +8395,23 @@ packages: react: 18.0.0-rc.0 dev: false + /react-style-singleton/2.1.1_2fa291bfae6e56080648438396754a97: + resolution: {integrity: sha512-jNRp07Jza6CBqdRKNgGhT3u9umWvils1xsuMOjZlghBDH2MU0PL2WZor4PGYjXpnRCa9DQSlHMs/xnABWOwYbA==} + engines: {node: '>=8.5.0'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.38 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.0.0-rc.0 + tslib: 1.14.1 + dev: false + /react-style-singleton/2.1.1_b08e3c15324cbe90a6ff8fcd416c932c: resolution: {integrity: sha512-jNRp07Jza6CBqdRKNgGhT3u9umWvils1xsuMOjZlghBDH2MU0PL2WZor4PGYjXpnRCa9DQSlHMs/xnABWOwYbA==} engines: {node: '>=8.5.0'} @@ -9910,6 +10053,20 @@ packages: prepend-http: 2.0.0 dev: true + /use-callback-ref/1.2.5_2fa291bfae6e56080648438396754a97: + resolution: {integrity: sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg==} + engines: {node: '>=8.5.0'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.38 + react: 18.0.0-rc.0 + dev: false + /use-callback-ref/1.2.5_b08e3c15324cbe90a6ff8fcd416c932c: resolution: {integrity: sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg==} engines: {node: '>=8.5.0'} @@ -9935,6 +10092,17 @@ packages: tslib: 1.14.1 dev: false + /use-sidecar/1.0.5_react@18.0.0-rc.0: + resolution: {integrity: sha512-k9jnrjYNwN6xYLj1iaGhonDghfvmeTmYjAiGvOr7clwKfPjMXJf4/HOr7oT5tJwYafgp2tG2l3eZEOfoELiMcA==} + engines: {node: '>=8.5.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + dependencies: + detect-node-es: 1.1.0 + react: 18.0.0-rc.0 + tslib: 1.14.1 + dev: false + /use/3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'}