Compare commits

...

31 Commits

Author SHA1 Message Date
Trisha Lim
a9bcb6bb28 Pagefind search button styling 2024-12-14 13:41:05 +00:00
Trisha Lim
3f845d74d9 Pagefind modal styling improvements 2024-12-14 13:26:54 +00:00
pax-k
e24255febc chore: trigger build 2024-12-04 16:45:37 +02:00
pax-k
154999f4cf chore: added @sveltejs/adapter-vercel 2024-12-04 16:43:18 +02:00
pax-k
9a0891bcd5 chore: added @sveltejs/adapter-vercel 2024-12-04 16:42:46 +02:00
pax-k
0aba399bac chore: deps 2024-12-04 16:37:17 +02:00
pax-k
0a9df803db chore: updated @types/ws 2024-12-04 13:28:38 +02:00
pax-k
c6c9e5818d chore: revert ts-ignore 2024-12-04 13:12:13 +02:00
pax-k
863c2f8837 ix: ts-ignore types mismatch (ugly) 2024-12-04 13:06:33 +02:00
pax-k
519b4d3e4b fix: ts-ignore types mismatch (ugly) 2024-12-04 13:02:46 +02:00
pax-k
40278c6e75 fix: turbo build order 2024-12-03 17:58:30 +02:00
pax-k
cb4141a400 chore: removed "e2e" from workspaces 2024-12-03 17:33:19 +02:00
pax-k
2beab4200e chore: updated @sveltejs/kit 2024-12-03 17:24:11 +02:00
pax-k
a79dbfff8e Merge branch 'main' into JAZZ-459/integrate-pagefind-into-homepagedocs 2024-12-03 15:44:19 +02:00
pax-k
0ae9c73b52 chore: cleanup 2024-12-03 15:28:57 +02:00
pax-k
58bee686d8 Merge branch 'main' into JAZZ-459/integrate-pagefind-into-homepagedocs 2024-12-03 15:20:12 +02:00
pax-k
d7ab966258 Merge branch 'main' into JAZZ-459/integrate-pagefind-into-homepagedocs 2024-11-25 17:05:21 +02:00
pax-k
8e92218857 chore(docs): removed redundant suffix 2024-11-21 12:42:10 +02:00
pax-k
2463cb772e chore(homepage): SEO titles for pages 2024-11-21 12:06:46 +02:00
pax-k
195af21900 Merge branch 'main' into JAZZ-459/integrate-pagefind-into-homepagedocs 2024-11-21 01:17:57 +02:00
pax-k
46ae19705c fix(pagefind): reset results list scroll position 2024-11-20 00:07:32 +02:00
pax-k
cb6f12450d fix(pagefind): ignore elements from indexing 2024-11-19 23:59:18 +02:00
pax-k
eb6cbe74b1 fix(pagefind): added QuickSearch component 2024-11-19 23:45:53 +02:00
pax-k
8b4a9a33a3 fix(pagefind): absolute import of pagefind 2024-11-19 23:44:28 +02:00
pax-k
6227e4469a fix(pagefind): generate page titles based on mdx frontmatter - wip 2024-11-19 23:17:37 +02:00
pax-k
092efdea87 fix(pagefind): mark content as ignored for indexing 2024-11-19 23:16:36 +02:00
pax-k
b049b67d28 fix: pagefind styling and filtering 2024-11-19 18:46:53 +02:00
pax-k
8394135d5b Merge branch 'main' into JAZZ-459/integrate-pagefind-into-homepagedocs 2024-11-19 15:14:51 +02:00
pax-k
124e61dab0 feat: added search button to SideNav 2024-11-19 15:13:31 +02:00
pax-k
2373ea64ca fix(pagefind): cleanup 2024-11-19 12:16:18 +02:00
pax-k
1a848f97da feat: pagefind for website search functionality 2024-11-19 11:44:45 +02:00
30 changed files with 1537 additions and 184 deletions

View File

@@ -15,7 +15,7 @@
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/kit": "^2.9.0",
"@sveltejs/vite-plugin-svelte": "^4.0.0",
"@types/eslint": "^9.6.0",
"eslint": "^9.7.0",

View File

@@ -18,7 +18,8 @@ export function Select(
"w-full rounded-md border shadow-sm px-2 py-1.5 text-sm",
"font-medium text-stone-900",
"dark:text-white",
"appearance-none",
"appearance-none cursor-pointer",
"transition-colors hover:border-stone-300 dark:hover:border-stone-800",
);
return (

View File

@@ -293,7 +293,10 @@ export function Nav(props: NavProps) {
const { mainLogo, items, docNav, cta } = props;
return (
<>
<div className="w-full border-b py-2 sticky top-0 z-50 bg-white dark:bg-stone-950 hidden md:block">
<div
className="w-full border-b py-2 sticky top-0 z-50 bg-white dark:bg-stone-950 hidden md:block"
data-pagefind-ignore="all"
>
<PopoverGroup className="flex flex-wrap items-center max-sm:justify-between md:gap-2 container w-full">
<Link href="/" className="flex items-center">
{mainLogo}

View File

@@ -11,6 +11,12 @@ import ProblemStatementSection from "@/components/home/ProblemStatementSection";
import { SupportedEnvironmentsSection } from "@/components/home/SupportedEnvironmentsSection";
import { Testimonial } from "gcmp-design-system/src/app/components/molecules/Testimonial";
export const metadata = {
title: "Jazz - Build Collaborative Apps with TypeScript",
description:
"Jazz helps you build collaborative, local-first apps with TypeScript. Ship faster with built-in features like real-time sync, offline support, and end-to-end encryption.",
};
export default function Home() {
return (
<>

View File

@@ -17,7 +17,7 @@ export default function Page({ params }: Props) {
export async function generateMetadata({ params }: Props) {
const packageName = params.package;
return {
title: `${packageName} - jazz`,
title: `${packageName} - API Reference`,
description: `API reference for ${packageName}.`,
};
}

View File

@@ -55,7 +55,7 @@ const Card = ({
export default function Page() {
return (
<>
<div data-pagefind-ignore="all">
<h1>API Reference</h1>
<div className="grid sm:grid-cols-2 lg:grid-cols-3 gap-4">
@@ -104,6 +104,6 @@ export default function Page() {
</CardBody>
</Card>
</div>
</>
</div>
);
}

View File

@@ -1,3 +1,7 @@
---
title: React with Jazz Guide
---
import { CodeGroup, ComingSoon } from "@/components/forMdx";
# React guide

View File

@@ -1,3 +1,7 @@
---
title: React Native with Jazz
---
import { CodeGroup } from "@/components/forMdx";
# React Native

View File

@@ -1,3 +1,8 @@
---
title: Node.JS / server workers with Jazz
---
import { CodeGroup } from "@/components/forMdx";
# Node.JS / server workers

View File

@@ -1,8 +1,12 @@
---
title: Vue.js with Jazz
---
import { CodeGroup } from "@/components/forMdx";
# VueJS demo todo app guide
# Vue.js demo todo app guide
This guide provides step-by-step instructions for setting up and running a Jazz-powered Todo application using VueJS.
This guide provides step-by-step instructions for setting up and running a Jazz-powered Todo application using Vue.js.
See the full example [here](https://github.com/gardencmp/jazz/tree/main/examples/todo-vue).
@@ -12,7 +16,7 @@ See the full example [here](https://github.com/gardencmp/jazz/tree/main/examples
### Create a new app
Run the following command to create a new VueJS application:
Run the following command to create a new Vue.js application:
<CodeGroup>
```bash

View File

@@ -1,3 +1,7 @@
---
title: CoValues in Jazz
---
import { CodeGroup, ComingSoon } from "@/components/forMdx";
# CoValues

View File

@@ -1,3 +1,8 @@
---
title: Sync and storage
---
# Sync and storage
## Using Jazz Cloud

View File

@@ -9,6 +9,12 @@ import { GappedGrid } from "gcmp-design-system/src/app/components/molecules/Gapp
import { HeroHeader } from "gcmp-design-system/src/app/components/molecules/HeroHeader";
import { CloudUploadIcon, FingerprintIcon, ImageIcon } from "lucide-react";
export const metadata = {
title: "Example Apps | Jazz",
description:
"Find an example app with code most similar to what you want to build with Jazz - including React, Next.js, and React Native examples.",
};
type Example = {
name: string;
slug: string;

View File

@@ -6,6 +6,7 @@ import localFont from "next/font/local";
import { JazzFooter } from "@/components/footer";
import { JazzNav } from "@/components/nav";
import { PagefindSearch } from "@/components/pagefind";
import { Analytics } from "@vercel/analytics/react";
import { SpeedInsights } from "@vercel/speed-insights/next";
import { ThemeProvider } from "gcmp-design-system/src/app/components/molecules/ThemeProvider";
@@ -100,6 +101,7 @@ export default function RootLayout({
<main>{children}</main>
</div>
<JazzFooter />
<PagefindSearch />
</ThemeProvider>
</body>
</html>

View File

@@ -1,17 +1,17 @@
import { SideNav } from "@/components/SideNav";
import { SideNavHeader } from "@/components/SideNavHeader";
import { SideNavItem } from "@/components/SideNavItem";
import { docNavigationItems } from "@/lib/docNavigationItems";
import { packages } from "@/lib/packages";
import { clsx } from "clsx";
import { ChevronRight, PackageIcon } from "lucide-react";
import Link from "next/link";
import { twMerge } from "tailwind-merge";
import { requestProject } from "./requestProject";
export function ApiNav({ className }: { className?: string }) {
return (
<div className={clsx(className, "text-sm space-y-5")}>
<div
className={clsx(className, "text-sm space-y-5")}
data-pagefind-ignore="all"
>
<SideNavHeader href="/api-reference">API Reference</SideNavHeader>
<ul className="space-y-5">
{packages.map(({ name }) => (

View File

@@ -1,4 +1,8 @@
"use client";
import { clsx } from "clsx";
import { usePagefindSearch } from "../pagefind";
import { QuickSearch } from "../quick-search";
export default function DocsLayout({
children,
@@ -7,6 +11,7 @@ export default function DocsLayout({
children: React.ReactNode;
nav?: React.ReactNode;
}) {
const { setOpen } = usePagefindSearch();
return (
<div className="container relative grid grid-cols-12 gap-5">
<div
@@ -16,10 +21,16 @@ export default function DocsLayout({
"sticky align-start top-[65px] h-[calc(100vh-65px)] overflow-y-auto overflow-x-hidden",
"hidden md:block",
)}
data-pagefind-ignore
>
<div className="pb-5">
<QuickSearch onClick={() => setOpen((open) => !open)} />
</div>
{nav}
</div>
<div className="col-span-12 md:col-span-8 lg:col-span-9">{children}</div>
<div className="col-span-12 md:col-span-8 lg:col-span-9 data-pagefind-body">
{children}
</div>
</div>
);
}

View File

@@ -10,7 +10,7 @@ const highlighter = getHighlighter({
export function Example({ children }: { children: ReactNode }) {
return (
<div className="flex-1">
<div className="flex-1" data-pagefind-weight="2">
<div className="border bg-white dark:bg-stone-900 rounded shadow-sm">
<div className="py-1 px-2 border-b text-xs">Example</div>
<div className="py-1 px-2 overflow-x-auto">{children}</div>
@@ -74,6 +74,7 @@ export function ClassOrInterface({
<div
id={name}
className="peer sticky top-0 mt-4 md:top-[65px] md:pt-8 bg-white dark:bg-stone-950 z-20"
data-pagefind-weight="6"
>
<Link
href={"#" + name}
@@ -119,7 +120,10 @@ export function PropDecl({
example?: ReactNode;
}) {
return (
<div className="text-sm flex flex-col gap-3 my-2 p-3 rounded bg-stone-50 dark:bg-stone-925">
<div
className="text-sm flex flex-col gap-3 my-2 p-3 rounded bg-stone-50 dark:bg-stone-925"
data-pagefind-weight="4"
>
{(name || type) && (
<div>
{name && <Highlight>{name + ":"}</Highlight>}
@@ -157,7 +161,10 @@ export function FnDecl({
example: ReactNode;
}) {
return (
<div className="text-sm flex flex-col gap-3 my-2 p-3 rounded bg-stone-50 dark:bg-stone-925">
<div
className="text-sm flex flex-col gap-3 my-2 p-3 rounded bg-stone-50 dark:bg-stone-925"
data-pagefind-weight="5"
>
<div className="flex flex-col gap-2">
<div>
{<Highlight>{signature + ":"}</Highlight>}{" "}
@@ -201,7 +208,10 @@ export function PropCategory({
}) {
return (
<>
<div className="col-span-6 py-3 font-display font-semibold text-lg text-stone-900 dark:text-white">
<div
className="col-span-6 py-3 font-display font-semibold text-lg text-stone-900 dark:text-white"
data-pagefind-weight="3"
>
{name}
</div>
{description && <PropDecl doc={description} example={example} />}
@@ -211,7 +221,10 @@ export function PropCategory({
export function DocComment({ children }: { children: ReactNode }) {
return (
<div className="prose-inner-sm flex-1 max-w-2xl leading-snug">
<div
className="prose-inner-sm flex-1 max-w-2xl leading-snug"
data-pagefind-weight="2"
>
{children}
</div>
);

View File

@@ -0,0 +1,249 @@
"use client";
import { clsx } from "clsx";
import { Command } from "cmdk";
import React, { useState, useEffect, useRef } from "react";
import { singletonHook } from "react-singleton-hook";
export const usePagefindSearch = singletonHook(
{ open: false, setOpen: () => {} },
() => {
const [open, setOpen] = useState(false);
return { open, setOpen };
},
);
export function PagefindSearch() {
const { open, setOpen } = usePagefindSearch();
const [query, setQuery] = useState("");
const [results, setResults] = useState([]);
const listRef = useRef<HTMLDivElement>(null);
useEffect(() => {
const down = (e: KeyboardEvent) => {
if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
e.preventDefault();
setOpen((open) => !open);
}
};
document.addEventListener("keydown", down);
return () => document.removeEventListener("keydown", down);
}, [setOpen]);
useEffect(() => {
async function loadPagefind() {
// @ts-expect-error pagefind.js generated after build
if (typeof window.pagefind === "undefined") {
try {
// @ts-expect-error pagefind.js generated after build
window.pagefind = await import(
// @ts-expect-error pagefind.js generated after build
/* webpackIgnore: true */ "/_next/static/chunks/pagefind/pagefind.js "
);
} catch (e) {
// @ts-expect-error pagefind.js generated after build
window.pagefind = { search: () => ({ results: [] }) };
}
}
}
loadPagefind();
}, []);
useEffect(() => {
if (listRef.current) {
listRef.current.scrollTop = 0;
}
}, [results]);
async function handleSearch(value: string) {
setQuery(value);
// @ts-expect-error pagefind.js generated after build
if (window.pagefind) {
// @ts-expect-error pagefind.js generated after build
const search = await window.pagefind.search(value);
const results = await Promise.all(
search.results.map((result: any) => result.data()),
);
setResults(results);
}
}
return (
<Command.Dialog
open={open}
onOpenChange={(open) => {
if (!open) {
setQuery("");
setResults([]);
}
setOpen(open);
}}
label="Search"
className="fixed top-[10%] sm:top-1/2 left-1/2 -translate-x-1/2 sm:-translate-y-1/2 w-full sm:w-auto z-20"
shouldFilter={false}
>
<div
className="w-full sm:w-[640px] mx-auto max-w-[calc(100%-2rem)] overflow-hidden
origin-center animate-in fade-in
data-[state=open]:animate-in data-[state=closed]:animate-out
data-[state=open]:scale-100 data-[state=closed]:scale-95
data-[state=closed]:opacity-0 data-[state=open]:opacity-100
transition-all duration-200 ease-in-out
rounded-xl bg-white ring-1 ring-stone-400/20 shadow-2xl shadow-stone-900/25
dark:bg-stone-925 dark:ring-stone-600/20
"
>
<Command.Input
value={query}
onValueChange={handleSearch}
placeholder="Search documentation..."
className={clsx(
"w-full text-base sm:text-lg px-4 sm:px-5 py-4 sm:py-5 outline-none border-b bg-transparent text-stone-900 placeholder:text-stone-600 placeholder:font-normal caret-blue",
"dark:text-stone-100 dark:placeholder:text-stone-400 dark:caret-blue-500",
)}
/>
<Command.List
ref={listRef}
className="h-[50vh] sm:h-[300px] max-h-[60vh] sm:max-h-[400px] overflow-y-auto overflow-x-hidden overscroll-contain transition-all duration-100 ease-in p-2"
>
{results.length === 0 ? (
<Command.Empty className="flex items-center justify-center h-16 text-sm dark:text-stone-400">
No results found.
</Command.Empty>
) : (
<Command.Group>
{results.map((result: any) => (
<SearchResult
key={result.id}
result={result}
setOpen={setOpen}
/>
))}
</Command.Group>
)}
</Command.List>
</div>
</Command.Dialog>
);
}
function HighlightedText({ text }: { text: string }) {
const decodedText = text.replace(/&lt;/g, "<").replace(/&gt;/g, ">");
const parts = decodedText.split(/(<mark>.*?<\/mark>)/g);
return (
<p className="text-xs dark:text-stone-400 leading-relaxed mt-1">
{parts.map((part, i) => {
if (part.startsWith("<mark>")) {
const content = part.replace(/<\/?mark>/g, "");
return (
<mark
key={i}
className="font-medium px-0.5 bg-blue-100 text-stone-800 dark:text-stone-100 dark:bg-blue-500/20"
>
{content}
</mark>
);
}
return part;
})}
</p>
);
}
function SearchResult({
result,
setOpen,
}: {
result: any;
setOpen: (open: boolean) => void;
}) {
// const [data, setData] = useState<any>(null);
// useEffect(() => {
// async function fetchData() {
// const data = await result.data();
// setData(data);
// }
// fetchData();
// }, [result]);
if (!result) {
return null;
}
let url = result?.url
?.split("/_next/static/chunks/server/app/")?.[1]
?.split(".html")?.[0];
return (
<>
<Command.Item
value={result.meta.title}
onSelect={() => {
if (!url) return;
const cleanUrl = url.startsWith("/") ? url : `/${url}`;
window.location.href = `${window.location.origin}${cleanUrl}`;
setOpen(false);
}}
className={`group relative flex items-center gap-2 sm:gap-3 px-3 sm:px-4 py-2 sm:py-3 cursor-pointer text-sm mt-1 select-none
transition-all duration-200 ease-in-out
animate-in fade-in-0
data-[selected=true]:bg-stone-100 hover:bg-stone-50 active:bg-stone-100
dark:text-stone-100 dark:data-[selected=true]:bg-stone-900 dark:hover:bg-stone-925 dark:active:bg-stone-900
max-w-full`}
>
<div className="min-w-0 flex-1">
<h3 className="text-sm font-medium truncate text-stone-900 dark:text-stone-100">
{result.meta?.title || "No title"}
</h3>
<HighlightedText text={result.excerpt || ""} />
</div>
<div className="absolute -left-px w-[3px] h-full bg-blue transition-opacity duration-200 ease-in-out opacity-0 group-data-[selected=true]:opacity-100 dark:bg-blue-500" />
</Command.Item>
{/* Sub-results section */}
{result.sub_results && result.sub_results.length > 0 && (
<div className="ml-4 border-l">
{result.sub_results.map((subResult: any) => {
// to avoid showing the same result twice
if (subResult.title === result.meta.title) return null;
return (
<Command.Item
key={subResult.id}
value={subResult.title}
onSelect={() => {
const [subUrlPath, subUrlHash] = subResult?.url
?.split("/_next/static/chunks/server/app/")?.[1]
?.split(".html");
if (!subUrlPath) return;
const cleanSubUrl = subUrlPath.startsWith("/")
? subUrlPath
: `/${subUrlPath}`;
const hash = subUrlHash ? `${subUrlHash}` : "";
window.location.href = `${window.location.origin}${cleanSubUrl}${hash}`;
setOpen(false);
}}
className={`group relative flex items-center gap-2 sm:gap-3 px-3 sm:px-4 py-2 sm:py-3 cursor-pointer text-sm mt-1 select-none
transition-all duration-200 ease-in-out
animate-in fade-in-0
data-[selected=true]:bg-stone-100 hover:bg-stone-50 active:bg-stone-100
dark:text-stone-100 dark:data-[selected=true]:bg-stone-900 dark:hover:bg-stone-925 dark:active:bg-stone-900
max-w-full`}
>
<div className="min-w-0 flex-1">
<h3 className="text-sm font-medium truncate text-stone-900 dark:text-stone-100">
{subResult?.title || "No title"}
</h3>
<HighlightedText text={subResult?.excerpt || ""} />
</div>
<div className="absolute -left-px w-[3px] h-full bg-blue transition-opacity duration-200 ease-in-out opacity-0 group-data-[selected=true]:opacity-100 dark:bg-blue-500" />
</Command.Item>
);
})}
</div>
)}
</>
);
}

View File

@@ -0,0 +1,24 @@
import { clsx } from "clsx";
import { Search } from "lucide-react";
export function QuickSearch({ onClick }: { onClick: () => void }) {
return (
<button
onClick={onClick}
className={clsx(
"w-full rounded-md border shadow-sm px-2 py-1.5 text-sm text-stone-900 dark:text-white",
"flex items-center gap-2",
"transition-colors hover:border-stone-400 dark:hover:border-stone-800",
)}
>
<Search className="size-4" />
<span className="text-stone-600 dark:text-stone-400">
Quick search...
</span>
<kbd className="ml-auto font-medium text-stone-400 dark:text-stone-500">
<kbd className="font-sans"></kbd>
<kbd className="font-sans">K</kbd>
</kbd>
</button>
);
}

View File

@@ -2,6 +2,8 @@ import createMDX from "@next/mdx";
import withToc from "@stefanprobst/rehype-extract-toc";
import withTocExport from "@stefanprobst/rehype-extract-toc/mdx";
import rehypeSlug from "rehype-slug";
import remarkFrontmatter from "remark-frontmatter";
import remarkMdxFrontmatter from "remark-mdx-frontmatter";
import { getHighlighter } from "shiki";
import { SKIP, visit } from "unist-util-visit";
@@ -15,7 +17,12 @@ const nextConfig = {
const withMDX = createMDX({
// Add markdown plugins here, as desired
options: {
remarkPlugins: [highlightPlugin, remarkHtmlToJsx],
remarkPlugins: [
highlightPlugin,
remarkHtmlToJsx,
remarkFrontmatter,
remarkMdxFrontmatter,
],
rehypePlugins: [rehypeSlug, withToc, withTocExport],
},
});

View File

@@ -5,8 +5,8 @@
"type": "module",
"scripts": {
"dev": "NODE_OPTIONS=--max-old-space-size=8192 next dev",
"build": "pnpm run build:generate-docs && next build && npx pagefind --site .next --output-path .next/static/chunks/pagefind --glob 'server/**/*.html'",
"build:generate-docs": "node genDocs.mjs --build",
"build": "pnpm run build:generate-docs && next build",
"start": "next start",
"format-and-lint": "biome check .",
"format-and-lint:fix": "biome check . --write"
@@ -23,6 +23,7 @@
"@vercel/analytics": "^1.3.1",
"@vercel/speed-insights": "^1.0.12",
"clsx": "^2.1.1",
"cmdk": "^1.0.4",
"gcmp-design-system": "workspace:*",
"lucide-react": "^0.436.0",
"mdast-util-from-markdown": "^2.0.0",
@@ -32,7 +33,10 @@
"qrcode": "^1.5.4",
"react": "^18",
"react-dom": "^18",
"react-singleton-hook": "^4.0.1",
"rehype-slug": "^6.0.0",
"remark-frontmatter": "^5.0.0",
"remark-mdx-frontmatter": "^5.0.0",
"shiki": "^0.14.6",
"shiki-twoslash": "^3.1.2",
"tailwind-merge": "^1.14.0",

573
homepage/pnpm-lock.yaml generated
View File

@@ -202,6 +202,9 @@ importers:
clsx:
specifier: ^2.1.1
version: 2.1.1
cmdk:
specifier: ^1.0.4
version: 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
gcmp-design-system:
specifier: workspace:*
version: link:../design-system
@@ -229,9 +232,18 @@ importers:
react-dom:
specifier: ^18
version: 18.3.1(react@18.3.1)
react-singleton-hook:
specifier: ^4.0.1
version: 4.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rehype-slug:
specifier: ^6.0.0
version: 6.0.0
remark-frontmatter:
specifier: ^5.0.0
version: 5.0.0
remark-mdx-frontmatter:
specifier: ^5.0.0
version: 5.0.0
shiki:
specifier: ^0.14.6
version: 0.14.7
@@ -599,6 +611,168 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
'@radix-ui/primitive@1.1.0':
resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==}
'@radix-ui/react-compose-refs@1.1.0':
resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-context@1.1.1':
resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-dialog@1.1.2':
resolution: {integrity: sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
'@radix-ui/react-dismissable-layer@1.1.1':
resolution: {integrity: sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
'@radix-ui/react-focus-guards@1.1.1':
resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-focus-scope@1.1.0':
resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
'@radix-ui/react-id@1.1.0':
resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-portal@1.1.2':
resolution: {integrity: sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
'@radix-ui/react-presence@1.1.1':
resolution: {integrity: sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
'@radix-ui/react-primitive@2.0.0':
resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@types/react-dom':
optional: true
'@radix-ui/react-slot@1.1.0':
resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-use-callback-ref@1.1.0':
resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-use-controllable-state@1.1.0':
resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-use-escape-keydown@1.1.0':
resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@radix-ui/react-use-layout-effect@1.1.0':
resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
'@types/react':
optional: true
'@react-aria/focus@3.18.4':
resolution: {integrity: sha512-91J35077w9UNaMK1cpMUEFRkNNz0uZjnSwiyBCFuRdaVuivO53wNC9XtWSDNDdcO5cGy87vfJRVAiyoCn/mjqA==}
peerDependencies:
@@ -883,6 +1057,10 @@ packages:
arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
aria-hidden@1.2.4:
resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
engines: {node: '>=10'}
astring@1.8.6:
resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==}
hasBin: true
@@ -982,6 +1160,12 @@ packages:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
cmdk@1.0.4:
resolution: {integrity: sha512-AnsjfHyHpQ/EFeAnG216WY7A5LiYCoZzCSygiLvfXC3H3LFGCprErteUcszaVluGOhuOTbJS3jWHrSDYPBBygg==}
peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc
react-dom: ^18 || ^19 || ^19.0.0-rc
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -1042,6 +1226,9 @@ packages:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
detect-node-es@1.1.0:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
@@ -1110,6 +1297,10 @@ packages:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
eslint-scope@5.1.1:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
engines: {node: '>=8.0.0'}
@@ -1145,6 +1336,9 @@ packages:
resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==}
engines: {node: '>=12.0.0'}
estree-util-value-to-estree@3.2.1:
resolution: {integrity: sha512-Vt2UOjyPbNQQgT5eJh+K5aATti0OjCIAGc9SgMdOFYbohuifsWclR74l0iZTJwePMgWYdX1hlVS+dedH9XV8kw==}
estree-util-visit@1.2.1:
resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==}
@@ -1177,6 +1371,9 @@ packages:
fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
fault@2.0.1:
resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
fenceparser@1.1.1:
resolution: {integrity: sha512-VdkTsK7GWLT0VWMK5S5WTAPn61wJ98WPFwJiRHumhg4ESNUO/tnkU8bzzzc62o6Uk1SVhuZFLnakmDA4SGV7wA==}
engines: {node: '>=12'}
@@ -1193,6 +1390,10 @@ packages:
resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
engines: {node: '>=14'}
format@0.2.2:
resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
engines: {node: '>=0.4.x'}
fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
@@ -1208,6 +1409,10 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
get-nonce@1.0.1:
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
engines: {node: '>=6'}
github-slugger@2.0.0:
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
@@ -1269,6 +1474,9 @@ packages:
inline-style-parser@0.1.1:
resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
invariant@2.2.4:
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
is-alphabetical@2.0.1:
resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
@@ -1431,6 +1639,9 @@ packages:
mdast-util-from-markdown@2.0.0:
resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==}
mdast-util-frontmatter@2.0.1:
resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==}
mdast-util-mdx-expression@1.3.2:
resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==}
@@ -1489,6 +1700,9 @@ packages:
micromark-core-commonmark@2.0.1:
resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==}
micromark-extension-frontmatter@2.0.0:
resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==}
micromark-extension-mdx-expression@1.0.8:
resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==}
@@ -1902,6 +2116,48 @@ packages:
react-promise-suspense@0.3.4:
resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==}
react-remove-scroll-bar@2.3.6:
resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==}
engines: {node: '>=10'}
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
react-remove-scroll@2.6.0:
resolution: {integrity: sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==}
engines: {node: '>=10'}
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
react-singleton-hook@4.0.1:
resolution: {integrity: sha512-fWuk8VxcZPChrkQasDLM8pgd/7kyi+Cr/5FfCiD99FicjEru+JmtEZNnN4lJ8Z7KbqAST5CYPlpz6lmNsZFGNw==}
peerDependencies:
react: '18'
react-dom: '*'
react-native: '*'
peerDependenciesMeta:
react-dom:
optional: true
react-native:
optional: true
react-style-singleton@2.2.1:
resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
engines: {node: '>=10'}
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
react@18.3.1:
resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
engines: {node: '>=0.10.0'}
@@ -1916,6 +2172,12 @@ packages:
rehype-slug@6.0.0:
resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
remark-frontmatter@5.0.0:
resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==}
remark-mdx-frontmatter@5.0.0:
resolution: {integrity: sha512-kI75pshe27TM71R+0iX7C3p4MbGMdygkvSbrk1WYSar88WAwR2JfQilofcDGgDNFAWUo5IwTPyq9XvGpifTwqQ==}
remark-mdx@2.3.0:
resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==}
@@ -2127,6 +2389,9 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
toml@3.0.0:
resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
@@ -2160,6 +2425,9 @@ packages:
unified@10.1.2:
resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
unified@11.0.5:
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
unist-util-generated@2.0.1:
resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
@@ -2217,6 +2485,31 @@ packages:
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
use-callback-ref@1.3.2:
resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==}
engines: {node: '>=10'}
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
use-sidecar@1.1.2:
resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
engines: {node: '>=10'}
peerDependencies:
'@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0
peerDependenciesMeta:
'@types/react':
optional: true
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==}
@@ -2234,6 +2527,9 @@ packages:
vfile@5.3.7:
resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
vscode-oniguruma@1.7.0:
resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==}
@@ -2566,6 +2862,141 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
'@radix-ui/primitive@1.1.0': {}
'@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.1)(react@18.3.1)':
dependencies:
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.1
'@radix-ui/react-context@1.1.1(@types/react@18.3.1)(react@18.3.1)':
dependencies:
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.1
'@radix-ui/react-dialog@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/primitive': 1.1.0
'@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.1)(react@18.3.1)
'@radix-ui/react-context': 1.1.1(@types/react@18.3.1)(react@18.3.1)
'@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-focus-guards': 1.1.1(@types/react@18.3.1)(react@18.3.1)
'@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-id': 1.1.0(@types/react@18.3.1)(react@18.3.1)
'@radix-ui/react-portal': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-slot': 1.1.0(@types/react@18.3.1)(react@18.3.1)
'@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.1)(react@18.3.1)
aria-hidden: 1.2.4
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-remove-scroll: 2.6.0(@types/react@18.3.1)(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.1
'@types/react-dom': 18.3.0
'@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/primitive': 1.1.0
'@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.1)(react@18.3.1)
'@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.1)(react@18.3.1)
'@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.1)(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.1
'@types/react-dom': 18.3.0
'@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.1)(react@18.3.1)':
dependencies:
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.1
'@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.1)(react@18.3.1)
'@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.1)(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.1
'@types/react-dom': 18.3.0
'@radix-ui/react-id@1.1.0(@types/react@18.3.1)(react@18.3.1)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.1)(react@18.3.1)
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.1
'@radix-ui/react-portal@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.1)(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.1
'@types/react-dom': 18.3.0
'@radix-ui/react-presence@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.1)(react@18.3.1)
'@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.1)(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.1
'@types/react-dom': 18.3.0
'@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/react-slot': 1.1.0(@types/react@18.3.1)(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.1
'@types/react-dom': 18.3.0
'@radix-ui/react-slot@1.1.0(@types/react@18.3.1)(react@18.3.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.1)(react@18.3.1)
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.1
'@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.1)(react@18.3.1)':
dependencies:
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.1
'@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.1)(react@18.3.1)':
dependencies:
'@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.1)(react@18.3.1)
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.1
'@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.1)(react@18.3.1)':
dependencies:
'@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.1)(react@18.3.1)
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.1
'@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.1)(react@18.3.1)':
dependencies:
react: 18.3.1
optionalDependencies:
'@types/react': 18.3.1
'@react-aria/focus@3.18.4(react@18.3.1)':
dependencies:
'@react-aria/interactions': 3.22.4(react@18.3.1)
@@ -2879,6 +3310,10 @@ snapshots:
arg@5.0.2: {}
aria-hidden@1.2.4:
dependencies:
tslib: 2.8.1
astring@1.8.6: {}
autoprefixer@10.4.19(postcss@8.4.38):
@@ -2973,6 +3408,18 @@ snapshots:
clsx@2.1.1: {}
cmdk@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@radix-ui/react-dialog': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-id': 1.1.0(@types/react@18.3.1)(react@18.3.1)
'@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
use-sync-external-store: 1.2.2(react@18.3.1)
transitivePeerDependencies:
- '@types/react'
- '@types/react-dom'
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
@@ -3016,6 +3463,8 @@ snapshots:
dequal@2.0.3: {}
detect-node-es@1.1.0: {}
devlop@1.1.0:
dependencies:
dequal: 2.0.3
@@ -3076,6 +3525,8 @@ snapshots:
escalade@3.2.0: {}
escape-string-regexp@5.0.0: {}
eslint-scope@5.1.1:
dependencies:
esrecurse: 4.3.0
@@ -3113,6 +3564,10 @@ snapshots:
dependencies:
is-plain-obj: 3.0.0
estree-util-value-to-estree@3.2.1:
dependencies:
'@types/estree': 1.0.5
estree-util-visit@1.2.1:
dependencies:
'@types/estree-jsx': 1.0.5
@@ -3149,6 +3604,10 @@ snapshots:
dependencies:
reusify: 1.0.4
fault@2.0.1:
dependencies:
format: 0.2.2
fenceparser@1.1.1: {}
fill-range@7.0.1:
@@ -3165,6 +3624,8 @@ snapshots:
cross-spawn: 7.0.3
signal-exit: 4.1.0
format@0.2.2: {}
fraction.js@4.3.7: {}
fsevents@2.3.3:
@@ -3174,6 +3635,8 @@ snapshots:
get-caller-file@2.0.5: {}
get-nonce@1.0.1: {}
github-slugger@2.0.0: {}
glob-parent@5.1.2:
@@ -3259,6 +3722,10 @@ snapshots:
inline-style-parser@0.1.1: {}
invariant@2.2.4:
dependencies:
loose-envify: 1.4.0
is-alphabetical@2.0.1: {}
is-alphanumerical@2.0.1:
@@ -3414,6 +3881,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
mdast-util-frontmatter@2.0.1:
dependencies:
'@types/mdast': 4.0.3
devlop: 1.1.0
escape-string-regexp: 5.0.0
mdast-util-from-markdown: 2.0.0
mdast-util-to-markdown: 2.1.0
micromark-extension-frontmatter: 2.0.0
transitivePeerDependencies:
- supports-color
mdast-util-mdx-expression@1.3.2:
dependencies:
'@types/estree-jsx': 1.0.5
@@ -3604,6 +4082,13 @@ snapshots:
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-frontmatter@2.0.0:
dependencies:
fault: 2.0.1
micromark-util-character: 2.1.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-mdx-expression@1.0.8:
dependencies:
'@types/estree': 1.0.5
@@ -4218,6 +4703,40 @@ snapshots:
dependencies:
fast-deep-equal: 2.0.1
react-remove-scroll-bar@2.3.6(@types/react@18.3.1)(react@18.3.1):
dependencies:
react: 18.3.1
react-style-singleton: 2.2.1(@types/react@18.3.1)(react@18.3.1)
tslib: 2.8.1
optionalDependencies:
'@types/react': 18.3.1
react-remove-scroll@2.6.0(@types/react@18.3.1)(react@18.3.1):
dependencies:
react: 18.3.1
react-remove-scroll-bar: 2.3.6(@types/react@18.3.1)(react@18.3.1)
react-style-singleton: 2.2.1(@types/react@18.3.1)(react@18.3.1)
tslib: 2.8.1
use-callback-ref: 1.3.2(@types/react@18.3.1)(react@18.3.1)
use-sidecar: 1.1.2(@types/react@18.3.1)(react@18.3.1)
optionalDependencies:
'@types/react': 18.3.1
react-singleton-hook@4.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
react: 18.3.1
optionalDependencies:
react-dom: 18.3.1(react@18.3.1)
react-style-singleton@2.2.1(@types/react@18.3.1)(react@18.3.1):
dependencies:
get-nonce: 1.0.1
invariant: 2.2.4
react: 18.3.1
tslib: 2.8.1
optionalDependencies:
'@types/react': 18.3.1
react@18.3.1:
dependencies:
loose-envify: 1.4.0
@@ -4238,6 +4757,24 @@ snapshots:
hast-util-to-string: 3.0.1
unist-util-visit: 5.0.0
remark-frontmatter@5.0.0:
dependencies:
'@types/mdast': 4.0.3
mdast-util-frontmatter: 2.0.1
micromark-extension-frontmatter: 2.0.0
unified: 11.0.5
transitivePeerDependencies:
- supports-color
remark-mdx-frontmatter@5.0.0:
dependencies:
'@types/mdast': 4.0.3
estree-util-is-identifier-name: 3.0.0
estree-util-value-to-estree: 3.2.1
toml: 3.0.0
unified: 11.0.5
yaml: 2.4.2
remark-mdx@2.3.0:
dependencies:
mdast-util-mdx: 2.0.1
@@ -4476,6 +5013,8 @@ snapshots:
dependencies:
is-number: 7.0.0
toml@3.0.0: {}
trim-lines@3.0.1: {}
trough@2.2.0: {}
@@ -4508,6 +5047,16 @@ snapshots:
trough: 2.2.0
vfile: 5.3.7
unified@11.0.5:
dependencies:
'@types/unist': 3.0.2
bail: 2.0.2
devlop: 1.1.0
extend: 3.0.2
is-plain-obj: 4.1.0
trough: 2.2.0
vfile: 6.0.3
unist-util-generated@2.0.1: {}
unist-util-is@5.2.1:
@@ -4586,6 +5135,25 @@ snapshots:
dependencies:
punycode: 2.3.1
use-callback-ref@1.3.2(@types/react@18.3.1)(react@18.3.1):
dependencies:
react: 18.3.1
tslib: 2.8.1
optionalDependencies:
'@types/react': 18.3.1
use-sidecar@1.1.2(@types/react@18.3.1)(react@18.3.1):
dependencies:
detect-node-es: 1.1.0
react: 18.3.1
tslib: 2.8.1
optionalDependencies:
'@types/react': 18.3.1
use-sync-external-store@1.2.2(react@18.3.1):
dependencies:
react: 18.3.1
util-deprecate@1.0.2: {}
uvu@0.5.6:
@@ -4612,6 +5180,11 @@ snapshots:
unist-util-stringify-position: 3.0.3
vfile-message: 3.1.4
vfile@6.0.3:
dependencies:
'@types/unist': 3.0.2
vfile-message: 4.0.2
vscode-oniguruma@1.7.0: {}
vscode-textmate@5.2.0: {}

View File

@@ -2,7 +2,7 @@
"name": "jazz-monorepo",
"private": true,
"type": "module",
"workspaces": ["packages/*", "examples/*", "e2e/*"],
"workspaces": ["packages/*", "examples/*"],
"packageManager": "pnpm@9.1.4",
"devDependencies": {
"@biomejs/biome": "1.9.4",

View File

@@ -19,6 +19,6 @@
"prepublishOnly": "npm run build"
},
"devDependencies": {
"@types/ws": "^8.5.5"
"@types/ws": "8.5.10"
}
}

View File

@@ -13,7 +13,7 @@
"ws": "^8.14.2"
},
"devDependencies": {
"@types/ws": "^8.5.5",
"@types/ws": "8.5.10",
"typescript": "^5.3.3"
},
"scripts": {

View File

@@ -26,7 +26,7 @@
"ws": "^8.14.2"
},
"devDependencies": {
"@types/ws": "^8.5.5",
"@types/ws": "8.5.10",
"typescript": "^5.3.3"
}
}

View File

@@ -18,4 +18,4 @@ Greetings, brave explorer! 🌟 You've caught us in our early stages - this pack
---
> **Note**: You've been warned, but we're glad you're here! Let's build something amazing together. 🚀
> **Note**: You've been warned, but we're glad you're here! Let's build something amazing together. 🚀

View File

@@ -14,8 +14,14 @@
"format-and-lint": "pnpm run format && pnpm run lint",
"format-and-lint:fix": "pnpm run format --write && pnpm run lint --fix"
},
"files": ["dist", "!dist/**/*.test.*", "!dist/**/*.spec.*"],
"sideEffects": ["**/*.css"],
"files": [
"dist",
"!dist/**/*.test.*",
"!dist/**/*.spec.*"
],
"sideEffects": [
"**/*.css"
],
"svelte": "./dist/index.js",
"types": "./dist/index.d.ts",
"type": "module",
@@ -30,7 +36,7 @@
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/kit": "^2.9.0",
"@sveltejs/package": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^4.0.0",
"@types/eslint": "^9.6.0",
@@ -45,7 +51,8 @@
"svelte-check": "^4.0.0",
"typescript": "^5.0.0",
"typescript-eslint": "^8.0.0",
"vite": "^5.0.11"
"vite": "^5.0.11",
"@sveltejs/adapter-vercel": "^5.5.0"
},
"dependencies": {
"jazz-browser": "workspace:*",

726
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,9 @@
"$schema": "https://turbo.build/schema.json",
"remoteCache": {},
"tasks": {
"jazz-nodejs#build": {
"dependsOn": ["cojson-transport-ws#build"]
},
"build": {
"env": ["RESEND_API_KEY", "RESEND_AUDIENCE_ID"],
"dependsOn": ["^build"],