diff --git a/docs/components/index.ts b/docs/components/index.ts index 4037305845..161fa6d77d 100644 --- a/docs/components/index.ts +++ b/docs/components/index.ts @@ -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"; \ No newline at end of file diff --git a/docs/components/link-to-copilot-cloud.tsx b/docs/components/link-to-copilot-cloud.tsx new file mode 100644 index 0000000000..59bbf76462 --- /dev/null +++ b/docs/components/link-to-copilot-cloud.tsx @@ -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 ( + + { + children ? children : userId ? "Go to Copilot Cloud" : "Sign up to Copilot Cloud" + } + + ); +} diff --git a/docs/globals.css b/docs/globals.css index a7aa9cf557..3046de3c51 100644 --- a/docs/globals.css +++ b/docs/globals.css @@ -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; } diff --git a/docs/lib/hooks/usePostHog.tsx b/docs/lib/providers/PostHogProvider.tsx similarity index 50% rename from docs/lib/hooks/usePostHog.tsx rename to docs/lib/providers/PostHogProvider.tsx index 624864714d..2a7824df0c 100644 --- a/docs/lib/hooks/usePostHog.tsx +++ b/docs/lib/providers/PostHogProvider.tsx @@ -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 {children}; +} \ No newline at end of file diff --git a/docs/next.config.mjs b/docs/next.config.mjs index 5b55895aa9..ad39373d18 100644 --- a/docs/next.config.mjs +++ b/docs/next.config.mjs @@ -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 [ diff --git a/docs/package.json b/docs/package.json index 221dca22fd..4b7c3f428d 100644 --- a/docs/package.json +++ b/docs/package.json @@ -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", diff --git a/docs/pages/_app.tsx b/docs/pages/_app.tsx index 3ccef8136b..a2962ca4cc 100644 --- a/docs/pages/_app.tsx +++ b/docs/pages/_app.tsx @@ -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 ( <> - -
- -
-
- + + +
+ +
+
+ +
); } diff --git a/docs/pages/_meta.tsx b/docs/pages/_meta.tsx index ad922fdf04..46cd01809f 100644 --- a/docs/pages/_meta.tsx +++ b/docs/pages/_meta.tsx @@ -1,4 +1,12 @@ +import { LinkToCopilotCloud } from "../components/link-to-copilot-cloud"; + export default { + "copilot-cloud": { + title: ( + + ), + type: "menu", + }, "___getting-started": { type: "separator", title: "Getting Started", @@ -15,15 +23,15 @@ export default { "tutorial-textarea": { title: "Tutorial: Textarea Autocomplete", }, - "concepts": { + concepts: { title: Concepts, type: "doc", }, - "reference": { + reference: { title: Reference, 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", }, diff --git a/docs/pages/quickstart-chatbot.mdx b/docs/pages/quickstart-chatbot.mdx index 81cc8407bc..d05d0a1370 100644 --- a/docs/pages/quickstart-chatbot.mdx +++ b/docs/pages/quickstart-chatbot.mdx @@ -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 [``](/reference/components/CopilotSidebar) UI component to display the copilot chat sidebar. Some other options you can choose from are [``](/reference/components/CopilotPopup) and [``](/reference/components/CopilotChat). - 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 `` with your actual API key. + Copilot Cloud is the easiest way to get started with CopilotKit. Sign up for free and get your public API key, then replace `` with your actual API key. If you prefer to self-host, you will need to [set up your Copilot Runtime endpoint](/concepts/copilot-runtime). diff --git a/docs/pages/reference/components/CopilotKit.mdx b/docs/pages/reference/components/CopilotKit.mdx index 0f6ea338ec..8b5f30b9f2 100644 --- a/docs/pages/reference/components/CopilotKit.mdx +++ b/docs/pages/reference/components/CopilotKit.mdx @@ -1,5 +1,6 @@ import { Tabs } from "nextra/components"; import { PropertyReference } from "../../../components/reference/property-reference"; +import { LinkToCopilotCloud } from "../../../components"; # `` @@ -10,7 +11,7 @@ This component will typically wrap your entire application (or a sub-tree of you - 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 signing up here. ```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 - 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? Click here to sign up for free. diff --git a/docs/pages/tutorial-ai-todo-list-copilot/step-2-setup-copilotkit.mdx b/docs/pages/tutorial-ai-todo-list-copilot/step-2-setup-copilotkit.mdx index 87d6154d17..3c06c9aa26 100644 --- a/docs/pages/tutorial-ai-todo-list-copilot/step-2-setup-copilotkit.mdx +++ b/docs/pages/tutorial-ai-todo-list-copilot/step-2-setup-copilotkit.mdx @@ -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 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/). + Click here to sign up for free and get your API key. If you prefer to self-host the Copilot Runtime, refer to [this guide](/concepts/copilot-runtime). diff --git a/docs/pages/tutorial-textarea/step-2-setup-copilotkit.mdx b/docs/pages/tutorial-textarea/step-2-setup-copilotkit.mdx index 20fd7caa23..70b8aafbdc 100644 --- a/docs/pages/tutorial-textarea/step-2-setup-copilotkit.mdx +++ b/docs/pages/tutorial-textarea/step-2-setup-copilotkit.mdx @@ -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 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/). + Click here to sign up for free and get your API key. If you prefer to self-host the Copilot Runtime, refer to [this guide](/concepts/copilot-runtime). diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index cff6db9309..8affc3513f 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -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: {}