feat(docs): persistent session id and clerk in docs (#518)

This commit is contained in:
Ariel Weinberger
2024-07-31 15:54:13 +02:00
committed by GitHub
parent 615b9642ac
commit abde2bc841
13 changed files with 336 additions and 23 deletions
+1
View File
@@ -2,3 +2,4 @@ export * from "./frame";
export * from "./sidenav/sidenav-title-with-icon";
export * from "./reference/property-reference";
export * from "./copilotkit-css";
export * from "./link-to-copilot-cloud";
+57
View File
@@ -0,0 +1,57 @@
import { useEffect, useState } from "react";
import Link from "next/link";
import { useAuth } from "@clerk/nextjs";
import posthog from "posthog-js";
export function LinkToCopilotCloud({
className,
subPath,
asLink = true,
children
}: {
className?: string;
subPath?: string;
asLink?: boolean;
children?: React.ReactNode;
}) {
const [isClient, setIsClient] = useState(false);
const { userId } = useAuth();
useEffect(() => {
setIsClient(true);
}, []);
if (!isClient) {
return null;
}
const url = new URL(`https://cloud.copilotkit.ai`);
url.searchParams.set("ref", "docs");
const sessionId = posthog.get_session_id();
if (sessionId) {
url.searchParams.set("session_id", sessionId);
}
if (subPath) {
url.pathname += subPath;
}
let cn = `${className}`;
if (asLink) {
cn = "_text-primary-600 decoration-from-font underline [text-underline-position:from-font]";
}
return (
<Link
href={url.toString()}
target="_blank"
className={`${cn}`}
>
{
children ? children : userId ? "Go to Copilot Cloud" : "Sign up to Copilot Cloud"
}
</Link>
);
}
+8
View File
@@ -48,6 +48,14 @@ button:has(.nested-title) > svg {
@apply hidden;
}
button:has(.disable-menu) > svg {
@apply hidden;
}
[id^="headlessui-menu-items-"] {
@apply hidden !important;
}
.nested-title {
@apply text-gray-900 font-semibold [&:not(:first-child)]:mt-5 mb-2 pb-1.5;
}
@@ -1,16 +1,26 @@
// Check that PostHog is client-side (used to handle Next.js SSR)
import { useRouter } from "next/router";
import { PostHogProvider as PostHogProviderBase } from "posthog-js/react";
import posthog from "posthog-js";
import { useRouter } from "next/router";
import { useEffect } from "react";
import { useAuth } from "@clerk/nextjs";
import { useSearchParams } from "next/navigation";
const POSTHOG_KEY = process.env.POSTHOG_KEY;
const POSTHOG_HOST = process.env.POSTHOG_HOST;
if (typeof window !== "undefined") {
// Get search param
const searchParams = new URLSearchParams(window.location.search);
const sessionId = searchParams.get("session_id");
if (POSTHOG_KEY && POSTHOG_HOST) {
posthog.init(POSTHOG_KEY, {
api_host: POSTHOG_HOST,
person_profiles: "identified_only",
bootstrap: {
sessionID: sessionId ?? undefined,
},
// Enable debug mode in development
loaded: (posthog) => {
if (process.env.NODE_ENV === "development") posthog.debug();
@@ -19,8 +29,18 @@ if (typeof window !== "undefined") {
}
}
export function usePostHog() {
export function PostHogProvider({ children }: { children: React.ReactNode }) {
const router = useRouter();
const { userId } = useAuth();
const searchParams = useSearchParams();
const sessionId = searchParams.get("session_id");
posthog?.set_config({
bootstrap: {
sessionID: sessionId ?? undefined,
},
});
useEffect(() => {
if (!POSTHOG_KEY || !POSTHOG_HOST) return;
@@ -36,5 +56,11 @@ export function usePostHog() {
};
}, []);
return { posthog };
}
useEffect(() => {
if (userId) {
posthog?.identify(userId);
}
}, [userId]);
return <PostHogProviderBase client={posthog}>{children}</PostHogProviderBase>;
}
+1
View File
@@ -12,6 +12,7 @@ export default withNextra({
POSTHOG_KEY: process.env.POSTHOG_KEY,
POSTHOG_HOST: process.env.POSTHOG_HOST,
SCARF_PIXEL_ID: process.env.SCARF_PIXEL_ID,
CLERK_PUBLISHABLE_KEY: process.env.CLERK_PUBLISHABLE_KEY || "pk_live_Y2xlcmsuY29waWxvdGtpdC5haSQ",
},
async redirects() {
return [
+1
View File
@@ -13,6 +13,7 @@
"author": "",
"license": "ISC",
"dependencies": {
"@clerk/nextjs": "^5.2.8",
"@stackblitz/sdk": "^1.11.0",
"@vercel/og": "^0.6.2",
"next": "^14.2.5",
+10 -9
View File
@@ -2,9 +2,9 @@ import "../globals.css";
import { AppProps } from "next/app";
import { IBM_Plex_Sans } from "next/font/google";
import { useRB2B } from "../lib/hooks/useRB2B";
import { PostHogProvider } from "posthog-js/react";
import { usePostHog } from "../lib/hooks/usePostHog";
import { ScarfPixel } from "../lib/ScarfPixel";
import { ClerkProvider } from "@clerk/nextjs";
import { PostHogProvider } from "../lib/providers/PostHogProvider";
const plex = IBM_Plex_Sans({
subsets: ["latin"],
@@ -13,16 +13,17 @@ const plex = IBM_Plex_Sans({
export default function App({ Component, pageProps }: AppProps) {
useRB2B();
const { posthog } = usePostHog();
return (
<>
<PostHogProvider client={posthog}>
<main className={plex.className}>
<Component {...pageProps} />
</main>
</PostHogProvider>
<ScarfPixel />
<ClerkProvider publishableKey={process.env.CLERK_PUBLISHABLE_KEY}>
<PostHogProvider>
<main className={plex.className}>
<Component {...pageProps} />
</main>
</PostHogProvider>
<ScarfPixel />
</ClerkProvider>
</>
);
}
+12 -4
View File
@@ -1,4 +1,12 @@
import { LinkToCopilotCloud } from "../components/link-to-copilot-cloud";
export default {
"copilot-cloud": {
title: (
<LinkToCopilotCloud asLink={false} className="disable-menu bg-indigo-500 py-1 px-4 text-white font-medium rounded-full" />
),
type: "menu",
},
"___getting-started": {
type: "separator",
title: "Getting Started",
@@ -15,15 +23,15 @@ export default {
"tutorial-textarea": {
title: "Tutorial: Textarea Autocomplete",
},
"concepts": {
concepts: {
title: <span className="nested-title">Concepts</span>,
type: "doc",
},
"reference": {
reference: {
title: <span className="nested-title">Reference</span>,
type: "doc",
},
"___contributing": {
___contributing: {
type: "separator",
title: "Contributing",
},
@@ -33,7 +41,7 @@ export default {
"documentation-contributions": {
title: "Documentation Contributions",
},
"___extras": {
___extras: {
type: "separator",
title: "Extras",
},
+2 -1
View File
@@ -1,5 +1,6 @@
import { Callout } from "nextra/components";
import { Tabs } from "nextra/components";
import { LinkToCopilotCloud } from "../components";
# Quickstart: Chatbot
@@ -17,7 +18,7 @@ First, you must wrap all components that interact with your copilot with the [`<
Additionally, let's use the [`<CopilotSidebar />`](/reference/components/CopilotSidebar) UI component to display the copilot chat sidebar. Some other options you can choose from are [`<CopilotPopup />`](/reference/components/CopilotPopup) and [`<CopilotChat />`](/reference/components/CopilotChat).
<Callout type="info">
Copilot Cloud is the easiest way to get started with CopilotKit. [Sign up for free and get your public API key](https://cloud.copilotkit.ai), then replace `<your-public-api-key>` with your actual API key.
Copilot Cloud is the easiest way to get started with CopilotKit. <LinkToCopilotCloud>Sign up for free and get your public API key</LinkToCopilotCloud>, then replace `<your-public-api-key>` with your actual API key.
If you prefer to self-host, you will need to [set up your Copilot Runtime endpoint](/concepts/copilot-runtime).
</Callout>
@@ -1,5 +1,6 @@
import { Tabs } from "nextra/components";
import { PropertyReference } from "../../../components/reference/property-reference";
import { LinkToCopilotCloud } from "../../../components";
# `<CopilotKit />`
@@ -10,7 +11,7 @@ This component will typically wrap your entire application (or a sub-tree of you
<Tabs items={["Copilot Cloud (Recommended)", "Self-hosted Runtime"]}>
<Tabs.Tab>
You can get your Copilot Cloud API key for free by [signing up here](https://cloud.copilotkit.ai).
You can get your Copilot Cloud API key for free by <LinkToCopilotCloud>signing up here</LinkToCopilotCloud>.
```tsx
import { CopilotKit } from "@copilotkit/react-core";
@@ -41,7 +42,7 @@ This component will typically wrap your entire application (or a sub-tree of you
</PropertyReference>
<PropertyReference name="publicApiKey" type="string">
Your Copilot Cloud API key. Don't have it yet? [Click here to sign up for free](https://cloud.copilotkit.ai).
Your Copilot Cloud API key. Don't have it yet? <LinkToCopilotCloud>Click here to sign up for free</LinkToCopilotCloud>.
</PropertyReference>
<PropertyReference name="cloudRestrictToTopic" cloudOnly type="{ validTopics?: string[]; invalidTopics?: string[]; }" >
@@ -1,4 +1,5 @@
import { Callout } from "nextra/components"
import { LinkToCopilotCloud } from "../../components";
# Step 2: Setup CopilotKit
@@ -19,7 +20,7 @@ npm install @copilotkit/react-core @copilotkit/react-ui
<Callout type="info">
In this example, we use Copilot Cloud, which is the easiest way to get started with CopilotKit.
[Click here to sign up for free and get your API key](https://cloud.copilotkit.ai/).
<LinkToCopilotCloud>Click here to sign up for free and get your API key</LinkToCopilotCloud>.
If you prefer to self-host the Copilot Runtime, refer to [this guide](/concepts/copilot-runtime).
</Callout>
@@ -1,4 +1,5 @@
import { Callout } from "nextra/components"
import { LinkToCopilotCloud } from "../../components";
# Step 2: Setup CopilotKit
@@ -20,7 +21,7 @@ npm install @copilotkit/react-core @copilotkit/react-ui @copilotkit/react-textar
<Callout type="info">
In this example, we use Copilot Cloud, which is the easiest way to get started with CopilotKit.
[Click here to sign up for free and get your API key](https://cloud.copilotkit.ai/).
<LinkToCopilotCloud>Click here to sign up for free and get your API key</LinkToCopilotCloud>.
If you prefer to self-host the Copilot Runtime, refer to [this guide](/concepts/copilot-runtime).
</Callout>
+206
View File
@@ -8,6 +8,9 @@ importers:
.:
dependencies:
'@clerk/nextjs':
specifier: ^5.2.8
version: 5.2.8(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@stackblitz/sdk':
specifier: ^1.11.0
version: 1.11.0
@@ -67,6 +70,41 @@ packages:
'@braintree/sanitize-url@6.0.4':
resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==}
'@clerk/backend@1.4.3':
resolution: {integrity: sha512-wj4qsZO6iNiY9vF7vLH5v1f3oLh1yCLgFa0PedLzJAIJgepZl23C1/ubrRm7vyewjQEMHZwod4816mZlHDfoqA==}
engines: {node: '>=18.17.0'}
'@clerk/clerk-react@5.2.10':
resolution: {integrity: sha512-qJZ79aiB80cUuqccKqhk6QImGIji4y1bjK1xbGnqiAthtMegxFShLJwEsrF7nl0Rw5yM9cphiwETEqBWfIPL4Q==}
engines: {node: '>=18.17.0'}
peerDependencies:
react: '>=18 || >=19.0.0-beta'
react-dom: '>=18 || >=19.0.0-beta'
'@clerk/nextjs@5.2.8':
resolution: {integrity: sha512-dy4K1e2ygWBsDjnLmQKtoeRpoToCNFRXMu6GN4VesE9/mOYNXKiyJE2/DY6lGV3oR2f8Qr9YjcXzphRnf1d/OQ==}
engines: {node: '>=18.17.0'}
peerDependencies:
next: ^13.5.4 || ^14.0.3 || >=15.0.0-rc
react: '>=18 || >=19.0.0-beta'
react-dom: '>=18 || >=19.0.0-beta'
'@clerk/shared@2.4.1':
resolution: {integrity: sha512-sApuz6hDRIai4Jwo/fBcihX74+DdrKLt08LkEVrooh/7zc0ipDOSGlqmAy15yNuKPaxpemp/9nW4T8gq6uIr9Q==}
engines: {node: '>=18.17.0'}
peerDependencies:
react: '>=18 || >=19.0.0-beta'
react-dom: '>=18 || >=19.0.0-beta'
peerDependenciesMeta:
react:
optional: true
react-dom:
optional: true
'@clerk/types@4.9.1':
resolution: {integrity: sha512-fCmqzPBFh0rH9TlUVPpvPW225DtGJDuCv5GecwuuzD8hcgwGetTfRSDRNl5Dub5aJuqYWGQQCCnKfnfCrhZvrA==}
engines: {node: '>=18.17.0'}
'@corex/deepmerge@4.0.43':
resolution: {integrity: sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==}
@@ -563,6 +601,10 @@ packages:
compute-scroll-into-view@3.1.0:
resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==}
cookie@0.5.0:
resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
engines: {node: '>= 0.6'}
cose-base@1.0.3:
resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
@@ -573,6 +615,9 @@ packages:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
crypto-js@4.2.0:
resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
css-background-parser@0.1.0:
resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==}
@@ -591,6 +636,9 @@ packages:
engines: {node: '>=4'}
hasBin: true
csstype@3.1.1:
resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
@@ -783,6 +831,9 @@ packages:
dompurify@3.1.6:
resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==}
dot-case@3.0.4:
resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
@@ -928,6 +979,9 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
glob-to-regexp@0.4.1:
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
glob@10.4.5:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
@@ -1081,6 +1135,10 @@ packages:
resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
hasBin: true
js-cookie@3.0.5:
resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
engines: {node: '>=14'}
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -1130,12 +1188,19 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
lru-cache@4.1.5:
resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
map-obj@4.3.0:
resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
engines: {node: '>=8'}
markdown-extensions@2.0.0:
resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
engines: {node: '>=16'}
@@ -1485,6 +1550,9 @@ packages:
nlcst-to-string@4.0.0:
resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==}
no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
node-releases@2.0.18:
resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
@@ -1559,6 +1627,9 @@ packages:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
path-to-regexp@6.2.2:
resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==}
periscopic@3.1.0:
resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
@@ -1754,6 +1825,9 @@ packages:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
engines: {node: '>=4'}
server-only@0.0.1:
resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
shebang-command@1.2.0:
resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
engines: {node: '>=0.10.0'}
@@ -1784,6 +1858,13 @@ packages:
resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
engines: {node: '>=14.16'}
snake-case@3.0.4:
resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
snakecase-keys@5.4.4:
resolution: {integrity: sha512-YTywJG93yxwHLgrYLZjlC75moVEX04LZM4FHfihjHe1FCXm+QaLOFfSf535aXOAd0ArVQMWUAe8ZPm4VtWyXaA==}
engines: {node: '>=12'}
source-map-js@1.2.0:
resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
engines: {node: '>=0.10.0'}
@@ -1802,6 +1883,9 @@ packages:
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
std-env@3.7.0:
resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
streamsearch@1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
@@ -1871,6 +1955,11 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
swr@2.2.5:
resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==}
peerDependencies:
react: ^16.11.0 || ^17.0.0 || ^18.0.0
tailwindcss@3.4.6:
resolution: {integrity: sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==}
engines: {node: '>=14.0.0'}
@@ -1911,6 +2000,9 @@ packages:
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
tslib@2.4.1:
resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
tslib@2.6.3:
resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
@@ -1922,6 +2014,10 @@ packages:
peerDependencies:
typescript: '*'
type-fest@2.19.0:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'}
typescript@5.5.3:
resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==}
engines: {node: '>=14.17'}
@@ -1987,6 +2083,11 @@ packages:
peerDependencies:
browserslist: '>= 4.21.0'
use-sync-external-store@1.2.2:
resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -2074,6 +2175,54 @@ snapshots:
'@braintree/sanitize-url@6.0.4': {}
'@clerk/backend@1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@clerk/shared': 2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@clerk/types': 4.9.1
cookie: 0.5.0
snakecase-keys: 5.4.4
tslib: 2.4.1
transitivePeerDependencies:
- react
- react-dom
'@clerk/clerk-react@5.2.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@clerk/shared': 2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@clerk/types': 4.9.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
tslib: 2.4.1
'@clerk/nextjs@5.2.8(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@clerk/backend': 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@clerk/clerk-react': 5.2.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@clerk/shared': 2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@clerk/types': 4.9.1
crypto-js: 4.2.0
next: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
path-to-regexp: 6.2.2
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
server-only: 0.0.1
tslib: 2.4.1
'@clerk/shared@2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@clerk/types': 4.9.1
glob-to-regexp: 0.4.1
js-cookie: 3.0.5
std-env: 3.7.0
swr: 2.2.5(react@18.3.1)
optionalDependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
'@clerk/types@4.9.1':
dependencies:
csstype: 3.1.1
'@corex/deepmerge@4.0.43': {}
'@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
@@ -2524,6 +2673,8 @@ snapshots:
compute-scroll-into-view@3.1.0: {}
cookie@0.5.0: {}
cose-base@1.0.3:
dependencies:
layout-base: 1.0.2
@@ -2540,6 +2691,8 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
crypto-js@4.2.0: {}
css-background-parser@0.1.0: {}
css-box-shadow@1.0.0-3: {}
@@ -2554,6 +2707,8 @@ snapshots:
cssesc@3.0.0: {}
csstype@3.1.1: {}
csstype@3.1.3: {}
cytoscape-cose-bilkent@4.1.0(cytoscape@3.30.1):
@@ -2763,6 +2918,11 @@ snapshots:
dompurify@3.1.6: {}
dot-case@3.0.4:
dependencies:
no-case: 3.0.4
tslib: 2.6.3
eastasianwidth@0.2.0: {}
electron-to-chromium@1.4.832: {}
@@ -2897,6 +3057,8 @@ snapshots:
dependencies:
is-glob: 4.0.3
glob-to-regexp@0.4.1: {}
glob@10.4.5:
dependencies:
foreground-child: 3.2.1
@@ -3121,6 +3283,8 @@ snapshots:
jiti@1.21.6: {}
js-cookie@3.0.5: {}
js-tokens@4.0.0: {}
js-yaml@3.14.1:
@@ -3159,6 +3323,10 @@ snapshots:
dependencies:
js-tokens: 4.0.0
lower-case@2.0.2:
dependencies:
tslib: 2.6.3
lru-cache@10.4.3: {}
lru-cache@4.1.5:
@@ -3166,6 +3334,8 @@ snapshots:
pseudomap: 1.0.2
yallist: 2.1.2
map-obj@4.3.0: {}
markdown-extensions@2.0.0: {}
markdown-table@3.0.3: {}
@@ -3964,6 +4134,11 @@ snapshots:
dependencies:
'@types/nlcst': 2.0.3
no-case@3.0.4:
dependencies:
lower-case: 2.0.2
tslib: 2.6.3
node-releases@2.0.18: {}
non-layered-tidy-tree-layout@2.0.2: {}
@@ -4034,6 +4209,8 @@ snapshots:
lru-cache: 10.4.3
minipass: 7.1.2
path-to-regexp@6.2.2: {}
periscopic@3.1.0:
dependencies:
'@types/estree': 1.0.5
@@ -4307,6 +4484,8 @@ snapshots:
extend-shallow: 2.0.1
kind-of: 6.0.3
server-only@0.0.1: {}
shebang-command@1.2.0:
dependencies:
shebang-regex: 1.0.0
@@ -4330,6 +4509,17 @@ snapshots:
slash@5.1.0: {}
snake-case@3.0.4:
dependencies:
dot-case: 3.0.4
tslib: 2.6.3
snakecase-keys@5.4.4:
dependencies:
map-obj: 4.3.0
snake-case: 3.0.4
type-fest: 2.19.0
source-map-js@1.2.0: {}
source-map@0.7.4: {}
@@ -4344,6 +4534,8 @@ snapshots:
sprintf-js@1.0.3: {}
std-env@3.7.0: {}
streamsearch@1.1.0: {}
string-width@4.2.3:
@@ -4408,6 +4600,12 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
swr@2.2.5(react@18.3.1):
dependencies:
client-only: 0.0.1
react: 18.3.1
use-sync-external-store: 1.2.2(react@18.3.1)
tailwindcss@3.4.6:
dependencies:
'@alloc/quick-lru': 5.2.0
@@ -4466,6 +4664,8 @@ snapshots:
ts-interface-checker@0.1.13: {}
tslib@2.4.1: {}
tslib@2.6.3: {}
twoslash-protocol@0.2.9: {}
@@ -4478,6 +4678,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
type-fest@2.19.0: {}
typescript@5.5.3: {}
undici-types@5.26.5: {}
@@ -4574,6 +4776,10 @@ snapshots:
escalade: 3.1.2
picocolors: 1.0.1
use-sync-external-store@1.2.2(react@18.3.1):
dependencies:
react: 18.3.1
util-deprecate@1.0.2: {}
uuid@9.0.1: {}