From efd88f881bd059b251651e4ffe08c18ba5b687ce Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 10 Feb 2026 01:31:57 +0000
Subject: [PATCH 01/10] Initial plan
From 05465c009477c923abd0ed16878f6d67f855a025 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 10 Feb 2026 01:40:21 +0000
Subject: [PATCH 02/10] Add root and getting-started documentation pages for
fumadocs site
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
---
.gitignore | 5 +
apps/docs/.gitignore | 26 ++
apps/docs/README.md | 45 ++++
apps/docs/app/(home)/layout.tsx | 6 +
apps/docs/app/(home)/page.tsx | 27 ++
apps/docs/app/api/search/route.ts | 7 +
apps/docs/app/docs/[[...slug]]/page.tsx | 57 +++++
apps/docs/app/docs/layout.tsx | 11 +
apps/docs/app/global.css | 3 +
apps/docs/app/layout.tsx | 17 ++
apps/docs/app/llms-full.txt/route.ts | 10 +
.../app/llms.mdx/docs/[[...slug]]/route.ts | 20 ++
apps/docs/app/llms.txt/route.ts | 13 +
apps/docs/app/og/docs/[...slug]/route.tsx | 27 ++
apps/docs/components/ai/page-actions.tsx | 240 ++++++++++++++++++
.../content/docs/getting-started/index.mdx | 73 ++++++
.../content/docs/getting-started/meta.json | 4 +
apps/docs/content/docs/index.mdx | 40 +++
apps/docs/content/docs/meta.json | 20 ++
apps/docs/lib/cn.ts | 1 +
apps/docs/lib/layout.shared.tsx | 16 ++
apps/docs/lib/source.ts | 27 ++
apps/docs/mdx-components.tsx | 9 +
apps/docs/next.config.mjs | 18 ++
apps/docs/package.json | 32 +++
apps/docs/postcss.config.mjs | 7 +
apps/docs/source.config.ts | 23 ++
apps/docs/tsconfig.json | 36 +++
pnpm-workspace.yaml | 1 +
29 files changed, 821 insertions(+)
create mode 100644 apps/docs/.gitignore
create mode 100644 apps/docs/README.md
create mode 100644 apps/docs/app/(home)/layout.tsx
create mode 100644 apps/docs/app/(home)/page.tsx
create mode 100644 apps/docs/app/api/search/route.ts
create mode 100644 apps/docs/app/docs/[[...slug]]/page.tsx
create mode 100644 apps/docs/app/docs/layout.tsx
create mode 100644 apps/docs/app/global.css
create mode 100644 apps/docs/app/layout.tsx
create mode 100644 apps/docs/app/llms-full.txt/route.ts
create mode 100644 apps/docs/app/llms.mdx/docs/[[...slug]]/route.ts
create mode 100644 apps/docs/app/llms.txt/route.ts
create mode 100644 apps/docs/app/og/docs/[...slug]/route.tsx
create mode 100644 apps/docs/components/ai/page-actions.tsx
create mode 100644 apps/docs/content/docs/getting-started/index.mdx
create mode 100644 apps/docs/content/docs/getting-started/meta.json
create mode 100644 apps/docs/content/docs/index.mdx
create mode 100644 apps/docs/content/docs/meta.json
create mode 100644 apps/docs/lib/cn.ts
create mode 100644 apps/docs/lib/layout.shared.tsx
create mode 100644 apps/docs/lib/source.ts
create mode 100644 apps/docs/mdx-components.tsx
create mode 100644 apps/docs/next.config.mjs
create mode 100644 apps/docs/package.json
create mode 100644 apps/docs/postcss.config.mjs
create mode 100644 apps/docs/source.config.ts
create mode 100644 apps/docs/tsconfig.json
diff --git a/.gitignore b/.gitignore
index fe6c79a..3d52bd5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,3 +48,8 @@ coverage/
# generated native folders
/ios
/android
+
+# fumadocs
+apps/docs/.next/
+apps/docs/.source/
+apps/docs/node_modules/
diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore
new file mode 100644
index 0000000..9e429e4
--- /dev/null
+++ b/apps/docs/.gitignore
@@ -0,0 +1,26 @@
+# deps
+/node_modules
+
+# generated content
+.source
+
+# test & build
+/coverage
+/.next/
+/out/
+/build
+*.tsbuildinfo
+
+# misc
+.DS_Store
+*.pem
+/.pnp
+.pnp.js
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# others
+.env*.local
+.vercel
+next-env.d.ts
\ No newline at end of file
diff --git a/apps/docs/README.md b/apps/docs/README.md
new file mode 100644
index 0000000..9b7bba9
--- /dev/null
+++ b/apps/docs/README.md
@@ -0,0 +1,45 @@
+# docs
+
+This is a Next.js application generated with
+[Create Fumadocs](https://github.com/fuma-nama/fumadocs).
+
+Run development server:
+
+```bash
+npm run dev
+# or
+pnpm dev
+# or
+yarn dev
+```
+
+Open http://localhost:3000 with your browser to see the result.
+
+## Explore
+
+In the project, you can see:
+
+- `lib/source.ts`: Code for content source adapter, [`loader()`](https://fumadocs.dev/docs/headless/source-api) provides the interface to access your content.
+- `lib/layout.shared.tsx`: Shared options for layouts, optional but preferred to keep.
+
+| Route | Description |
+| ------------------------- | ------------------------------------------------------ |
+| `app/(home)` | The route group for your landing page and other pages. |
+| `app/docs` | The documentation layout and pages. |
+| `app/api/search/route.ts` | The Route Handler for search. |
+
+### Fumadocs MDX
+
+A `source.config.ts` config file has been included, you can customise different options like frontmatter schema.
+
+Read the [Introduction](https://fumadocs.dev/docs/mdx) for further details.
+
+## Learn More
+
+To learn more about Next.js and Fumadocs, take a look at the following
+resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js
+ features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
+- [Fumadocs](https://fumadocs.dev) - learn about Fumadocs
diff --git a/apps/docs/app/(home)/layout.tsx b/apps/docs/app/(home)/layout.tsx
new file mode 100644
index 0000000..77379fa
--- /dev/null
+++ b/apps/docs/app/(home)/layout.tsx
@@ -0,0 +1,6 @@
+import { HomeLayout } from 'fumadocs-ui/layouts/home';
+import { baseOptions } from '@/lib/layout.shared';
+
+export default function Layout({ children }: LayoutProps<'/'>) {
+ return {children};
+}
diff --git a/apps/docs/app/(home)/page.tsx b/apps/docs/app/(home)/page.tsx
new file mode 100644
index 0000000..704b7a6
--- /dev/null
+++ b/apps/docs/app/(home)/page.tsx
@@ -0,0 +1,27 @@
+import Link from 'next/link';
+
+export default function HomePage() {
+ return (
+
+
ObjectStack Mobile
+
+ Enterprise-grade mobile runtime for the ObjectStack low-code platform.
+ Metadata-driven, offline-first, built with Expo & React Native.
+
+
+
+ Get Started
+
+
+ API Reference
+
+
+
+ );
+}
diff --git a/apps/docs/app/api/search/route.ts b/apps/docs/app/api/search/route.ts
new file mode 100644
index 0000000..7ba7e82
--- /dev/null
+++ b/apps/docs/app/api/search/route.ts
@@ -0,0 +1,7 @@
+import { source } from '@/lib/source';
+import { createFromSource } from 'fumadocs-core/search/server';
+
+export const { GET } = createFromSource(source, {
+ // https://docs.orama.com/docs/orama-js/supported-languages
+ language: 'english',
+});
diff --git a/apps/docs/app/docs/[[...slug]]/page.tsx b/apps/docs/app/docs/[[...slug]]/page.tsx
new file mode 100644
index 0000000..366b4a8
--- /dev/null
+++ b/apps/docs/app/docs/[[...slug]]/page.tsx
@@ -0,0 +1,57 @@
+import { getPageImage, source } from '@/lib/source';
+import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/layouts/docs/page';
+import { notFound } from 'next/navigation';
+import { getMDXComponents } from '@/mdx-components';
+import type { Metadata } from 'next';
+import { createRelativeLink } from 'fumadocs-ui/mdx';
+import { LLMCopyButton, ViewOptions } from '@/components/ai/page-actions';
+import { gitConfig } from '@/lib/layout.shared';
+
+export default async function Page(props: PageProps<'/docs/[[...slug]]'>) {
+ const params = await props.params;
+ const page = source.getPage(params.slug);
+ if (!page) notFound();
+
+ const MDX = page.data.body;
+
+ return (
+
+ {page.data.title}
+ {page.data.description}
+
+
+
+
+
+
+
+
+ );
+}
+
+export async function generateStaticParams() {
+ return source.generateParams();
+}
+
+export async function generateMetadata(props: PageProps<'/docs/[[...slug]]'>): Promise {
+ const params = await props.params;
+ const page = source.getPage(params.slug);
+ if (!page) notFound();
+
+ return {
+ title: page.data.title,
+ description: page.data.description,
+ openGraph: {
+ images: getPageImage(page).url,
+ },
+ };
+}
diff --git a/apps/docs/app/docs/layout.tsx b/apps/docs/app/docs/layout.tsx
new file mode 100644
index 0000000..a373143
--- /dev/null
+++ b/apps/docs/app/docs/layout.tsx
@@ -0,0 +1,11 @@
+import { source } from '@/lib/source';
+import { DocsLayout } from 'fumadocs-ui/layouts/docs';
+import { baseOptions } from '@/lib/layout.shared';
+
+export default function Layout({ children }: LayoutProps<'/docs'>) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/apps/docs/app/global.css b/apps/docs/app/global.css
new file mode 100644
index 0000000..50b3bc2
--- /dev/null
+++ b/apps/docs/app/global.css
@@ -0,0 +1,3 @@
+@import 'tailwindcss';
+@import 'fumadocs-ui/css/neutral.css';
+@import 'fumadocs-ui/css/preset.css';
diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx
new file mode 100644
index 0000000..22fdca3
--- /dev/null
+++ b/apps/docs/app/layout.tsx
@@ -0,0 +1,17 @@
+import { RootProvider } from 'fumadocs-ui/provider/next';
+import './global.css';
+import { Inter } from 'next/font/google';
+
+const inter = Inter({
+ subsets: ['latin'],
+});
+
+export default function Layout({ children }: LayoutProps<'/'>) {
+ return (
+
+
+ {children}
+
+
+ );
+}
diff --git a/apps/docs/app/llms-full.txt/route.ts b/apps/docs/app/llms-full.txt/route.ts
new file mode 100644
index 0000000..d494d2c
--- /dev/null
+++ b/apps/docs/app/llms-full.txt/route.ts
@@ -0,0 +1,10 @@
+import { getLLMText, source } from '@/lib/source';
+
+export const revalidate = false;
+
+export async function GET() {
+ const scan = source.getPages().map(getLLMText);
+ const scanned = await Promise.all(scan);
+
+ return new Response(scanned.join('\n\n'));
+}
diff --git a/apps/docs/app/llms.mdx/docs/[[...slug]]/route.ts b/apps/docs/app/llms.mdx/docs/[[...slug]]/route.ts
new file mode 100644
index 0000000..fde26d9
--- /dev/null
+++ b/apps/docs/app/llms.mdx/docs/[[...slug]]/route.ts
@@ -0,0 +1,20 @@
+import { getLLMText, source } from '@/lib/source';
+import { notFound } from 'next/navigation';
+
+export const revalidate = false;
+
+export async function GET(_req: Request, { params }: RouteContext<'/llms.mdx/docs/[[...slug]]'>) {
+ const { slug } = await params;
+ const page = source.getPage(slug);
+ if (!page) notFound();
+
+ return new Response(await getLLMText(page), {
+ headers: {
+ 'Content-Type': 'text/markdown',
+ },
+ });
+}
+
+export function generateStaticParams() {
+ return source.generateParams();
+}
diff --git a/apps/docs/app/llms.txt/route.ts b/apps/docs/app/llms.txt/route.ts
new file mode 100644
index 0000000..6639c25
--- /dev/null
+++ b/apps/docs/app/llms.txt/route.ts
@@ -0,0 +1,13 @@
+import { source } from '@/lib/source';
+
+export const revalidate = false;
+
+export async function GET() {
+ const lines: string[] = [];
+ lines.push('# Documentation');
+ lines.push('');
+ for (const page of source.getPages()) {
+ lines.push(`- [${page.data.title}](${page.url}): ${page.data.description}`);
+ }
+ return new Response(lines.join('\n'));
+}
diff --git a/apps/docs/app/og/docs/[...slug]/route.tsx b/apps/docs/app/og/docs/[...slug]/route.tsx
new file mode 100644
index 0000000..2d741be
--- /dev/null
+++ b/apps/docs/app/og/docs/[...slug]/route.tsx
@@ -0,0 +1,27 @@
+import { getPageImage, source } from '@/lib/source';
+import { notFound } from 'next/navigation';
+import { ImageResponse } from 'next/og';
+import { generate as DefaultImage } from 'fumadocs-ui/og';
+
+export const revalidate = false;
+
+export async function GET(_req: Request, { params }: RouteContext<'/og/docs/[...slug]'>) {
+ const { slug } = await params;
+ const page = source.getPage(slug.slice(0, -1));
+ if (!page) notFound();
+
+ return new ImageResponse(
+ ,
+ {
+ width: 1200,
+ height: 630,
+ },
+ );
+}
+
+export function generateStaticParams() {
+ return source.getPages().map((page) => ({
+ lang: page.locale,
+ slug: getPageImage(page).segments,
+ }));
+}
diff --git a/apps/docs/components/ai/page-actions.tsx b/apps/docs/components/ai/page-actions.tsx
new file mode 100644
index 0000000..5fe4433
--- /dev/null
+++ b/apps/docs/components/ai/page-actions.tsx
@@ -0,0 +1,240 @@
+'use client';
+import { useMemo, useState } from 'react';
+import { Check, ChevronDown, Copy, ExternalLinkIcon } from 'lucide-react';
+import { cn } from '@/lib/cn';
+import { useCopyButton } from 'fumadocs-ui/utils/use-copy-button';
+import { buttonVariants } from 'fumadocs-ui/components/ui/button';
+import { Popover, PopoverContent, PopoverTrigger } from 'fumadocs-ui/components/ui/popover';
+
+const cache = new Map();
+
+export function LLMCopyButton({
+ /**
+ * A URL to fetch the raw Markdown/MDX content of page
+ */
+ markdownUrl,
+}: {
+ markdownUrl: string;
+}) {
+ const [isLoading, setLoading] = useState(false);
+ const [checked, onClick] = useCopyButton(async () => {
+ const cached = cache.get(markdownUrl);
+ if (cached) return navigator.clipboard.writeText(cached);
+
+ setLoading(true);
+
+ try {
+ await navigator.clipboard.write([
+ new ClipboardItem({
+ 'text/plain': fetch(markdownUrl).then(async (res) => {
+ const content = await res.text();
+ cache.set(markdownUrl, content);
+
+ return content;
+ }),
+ }),
+ ]);
+ } finally {
+ setLoading(false);
+ }
+ });
+
+ return (
+
+ );
+}
+
+export function ViewOptions({
+ markdownUrl,
+ githubUrl,
+}: {
+ /**
+ * A URL to the raw Markdown/MDX content of page
+ */
+ markdownUrl: string;
+
+ /**
+ * Source file URL on GitHub
+ */
+ githubUrl: string;
+}) {
+ const items = useMemo(() => {
+ const fullMarkdownUrl =
+ typeof window !== 'undefined' ? new URL(markdownUrl, window.location.origin) : 'loading';
+ const q = `Read ${fullMarkdownUrl}, I want to ask questions about it.`;
+
+ return [
+ {
+ title: 'Open in GitHub',
+ href: githubUrl,
+ icon: (
+
+ ),
+ },
+ {
+ title: 'Open in Scira AI',
+ href: `https://scira.ai/?${new URLSearchParams({
+ q,
+ })}`,
+ icon: (
+
+ ),
+ },
+ {
+ title: 'Open in ChatGPT',
+ href: `https://chatgpt.com/?${new URLSearchParams({
+ hints: 'search',
+ q,
+ })}`,
+ icon: (
+
+ ),
+ },
+ {
+ title: 'Open in Claude',
+ href: `https://claude.ai/new?${new URLSearchParams({
+ q,
+ })}`,
+ icon: (
+
+ ),
+ },
+ {
+ title: 'Open in Cursor',
+ icon: (
+
+ ),
+ href: `https://cursor.com/link/prompt?${new URLSearchParams({
+ text: q,
+ })}`,
+ },
+ ];
+ }, [githubUrl, markdownUrl]);
+
+ return (
+
+
+ Open
+
+
+
+ {items.map((item) => (
+
+ {item.icon}
+ {item.title}
+
+
+ ))}
+
+
+ );
+}
diff --git a/apps/docs/content/docs/getting-started/index.mdx b/apps/docs/content/docs/getting-started/index.mdx
new file mode 100644
index 0000000..52ab7ac
--- /dev/null
+++ b/apps/docs/content/docs/getting-started/index.mdx
@@ -0,0 +1,73 @@
+---
+title: Getting Started
+description: Set up and run ObjectStack Mobile
+---
+
+This guide walks you through setting up the ObjectStack Mobile development environment, running the app, and understanding the project structure.
+
+## Prerequisites
+
+- **Node.js** ≥ 18
+- **pnpm** (recommended) or npm
+- **Expo CLI** (`npx expo`)
+- An ObjectStack server instance (for API connectivity)
+- iOS Simulator (macOS) or Android Emulator
+
+## Installation
+
+Clone the repository and install dependencies:
+
+```bash
+git clone https://github.com/objectstack-ai/mobile.git
+cd mobile
+pnpm install
+```
+
+## Running the App
+
+Start the Expo development server:
+
+```bash
+# Start with interactive menu
+pnpm start
+
+# Platform-specific
+pnpm ios # iOS Simulator
+pnpm android # Android Emulator
+pnpm web # Web browser
+```
+
+## Server Configuration
+
+On first launch, the app displays a **Server Configuration** screen. Enter your ObjectStack server URL (e.g., `https://your-instance.objectstack.com`). The URL is validated via a health check and stored securely using `expo-secure-store`.
+
+## Project Structure
+
+```
+mobile/
+├── app/ # Expo Router pages (file-based routing)
+│ ├── _layout.tsx # Root layout with providers
+│ ├── (auth)/ # Authentication screens
+│ ├── (tabs)/ # Main tab navigation
+│ └── (app)/ # Dynamic app screens
+├── components/ # React Native components
+│ ├── renderers/ # View type renderers (list, form, etc.)
+│ ├── ui/ # Design system primitives
+│ ├── common/ # Shared utility components
+│ ├── actions/ # Action system components
+│ └── query/ # Query builder UI
+├── hooks/ # Custom React hooks (23+)
+├── lib/ # Core utility libraries (24+)
+├── stores/ # Zustand state stores
+├── locales/ # i18n translation files
+├── assets/ # Static assets
+└── docs/ # Internal documentation
+```
+
+## Next Steps
+
+
+
+
+
+
diff --git a/apps/docs/content/docs/getting-started/meta.json b/apps/docs/content/docs/getting-started/meta.json
new file mode 100644
index 0000000..b60b6d6
--- /dev/null
+++ b/apps/docs/content/docs/getting-started/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Getting Started",
+ "pages": ["index"]
+}
diff --git a/apps/docs/content/docs/index.mdx b/apps/docs/content/docs/index.mdx
new file mode 100644
index 0000000..255cfc8
--- /dev/null
+++ b/apps/docs/content/docs/index.mdx
@@ -0,0 +1,40 @@
+---
+title: ObjectStack Mobile
+description: Enterprise-grade mobile runtime for the ObjectStack low-code platform
+---
+
+ObjectStack Mobile is a metadata-driven, offline-first mobile application built with **Expo** and **React Native**. It interprets server-side metadata from the ObjectStack platform and renders fully native mobile UIs — lists, forms, dashboards, kanban boards, calendars, charts, and more.
+
+## Key Features
+
+- **Metadata-Driven Rendering** — Views, fields, and actions are defined on the server and rendered dynamically on the client
+- **Offline-First Architecture** — Full SQLite offline storage with sync queue and automatic conflict resolution
+- **12+ View Renderers** — List, Form, Detail, Dashboard, Kanban, Calendar, Timeline, Chart, Map, and more
+- **Enterprise Security** — Biometric authentication, certificate pinning, app lock, and encrypted storage
+- **AI Integration** — Natural Language Query (NLQ), AI chat, smart suggestions, and data insights
+- **Real-time Collaboration** — WebSocket-based live updates and presence indicators
+- **Internationalization** — Multi-language support (English, Chinese, Arabic) with RTL layout
+
+## Tech Stack
+
+| Layer | Technology |
+|-------|-----------|
+| Framework | Expo SDK 54 + React Native 0.81 |
+| Routing | Expo Router v6 (file-based) |
+| Styling | NativeWind 4 + Tailwind CSS |
+| State | Zustand (client) + TanStack Query (server) |
+| SDK | @objectstack/client + @objectstack/client-react |
+| Auth | better-auth + @better-auth/expo |
+| Offline | expo-sqlite + react-native-mmkv |
+| Testing | Jest + React Native Testing Library |
+
+## Quick Links
+
+
+
+
+
+
+
+
+
diff --git a/apps/docs/content/docs/meta.json b/apps/docs/content/docs/meta.json
new file mode 100644
index 0000000..6c5e61c
--- /dev/null
+++ b/apps/docs/content/docs/meta.json
@@ -0,0 +1,20 @@
+{
+ "title": "Documentation",
+ "pages": [
+ "---Getting Started---",
+ "getting-started",
+ "---Architecture---",
+ "architecture",
+ "---UI---",
+ "components",
+ "---API Reference---",
+ "hooks",
+ "libraries",
+ "---Platform---",
+ "features",
+ "authentication",
+ "---Operations---",
+ "deployment",
+ "contributing"
+ ]
+}
diff --git a/apps/docs/lib/cn.ts b/apps/docs/lib/cn.ts
new file mode 100644
index 0000000..ba66fd2
--- /dev/null
+++ b/apps/docs/lib/cn.ts
@@ -0,0 +1 @@
+export { twMerge as cn } from 'tailwind-merge';
diff --git a/apps/docs/lib/layout.shared.tsx b/apps/docs/lib/layout.shared.tsx
new file mode 100644
index 0000000..cf367cb
--- /dev/null
+++ b/apps/docs/lib/layout.shared.tsx
@@ -0,0 +1,16 @@
+import type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';
+
+export const gitConfig = {
+ user: 'objectstack-ai',
+ repo: 'mobile',
+ branch: 'main',
+};
+
+export function baseOptions(): BaseLayoutProps {
+ return {
+ nav: {
+ title: 'ObjectStack Mobile',
+ },
+ githubUrl: `https://github.com/${gitConfig.user}/${gitConfig.repo}`,
+ };
+}
diff --git a/apps/docs/lib/source.ts b/apps/docs/lib/source.ts
new file mode 100644
index 0000000..2b2d52f
--- /dev/null
+++ b/apps/docs/lib/source.ts
@@ -0,0 +1,27 @@
+import { docs } from 'fumadocs-mdx:collections/server';
+import { type InferPageType, loader } from 'fumadocs-core/source';
+import { lucideIconsPlugin } from 'fumadocs-core/source/lucide-icons';
+
+// See https://fumadocs.dev/docs/headless/source-api for more info
+export const source = loader({
+ baseUrl: '/docs',
+ source: docs.toFumadocsSource(),
+ plugins: [lucideIconsPlugin()],
+});
+
+export function getPageImage(page: InferPageType) {
+ const segments = [...page.slugs, 'image.png'];
+
+ return {
+ segments,
+ url: `/og/docs/${segments.join('/')}`,
+ };
+}
+
+export async function getLLMText(page: InferPageType) {
+ const processed = await page.data.getText('processed');
+
+ return `# ${page.data.title}
+
+${processed}`;
+}
diff --git a/apps/docs/mdx-components.tsx b/apps/docs/mdx-components.tsx
new file mode 100644
index 0000000..20beb4c
--- /dev/null
+++ b/apps/docs/mdx-components.tsx
@@ -0,0 +1,9 @@
+import defaultMdxComponents from 'fumadocs-ui/mdx';
+import type { MDXComponents } from 'mdx/types';
+
+export function getMDXComponents(components?: MDXComponents): MDXComponents {
+ return {
+ ...defaultMdxComponents,
+ ...components,
+ };
+}
diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs
new file mode 100644
index 0000000..91c6ac1
--- /dev/null
+++ b/apps/docs/next.config.mjs
@@ -0,0 +1,18 @@
+import { createMDX } from 'fumadocs-mdx/next';
+
+const withMDX = createMDX();
+
+/** @type {import('next').NextConfig} */
+const config = {
+ reactStrictMode: true,
+ async rewrites() {
+ return [
+ {
+ source: '/docs/:path*.mdx',
+ destination: '/llms.mdx/docs/:path*',
+ },
+ ];
+ },
+};
+
+export default withMDX(config);
diff --git a/apps/docs/package.json b/apps/docs/package.json
new file mode 100644
index 0000000..7b1090c
--- /dev/null
+++ b/apps/docs/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "docs",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "build": "next build",
+ "dev": "next dev",
+ "start": "next start",
+ "types:check": "fumadocs-mdx && next typegen && tsc --noEmit",
+ "postinstall": "fumadocs-mdx"
+ },
+ "dependencies": {
+ "fumadocs-core": "16.5.2",
+ "fumadocs-mdx": "14.2.7",
+ "fumadocs-ui": "16.5.2",
+ "lucide-react": "^0.563.0",
+ "next": "16.1.6",
+ "react": "^19.2.4",
+ "react-dom": "^19.2.4",
+ "tailwind-merge": "^3.4.0"
+ },
+ "devDependencies": {
+ "@tailwindcss/postcss": "^4.1.18",
+ "@types/mdx": "^2.0.13",
+ "@types/node": "^25.2.1",
+ "@types/react": "^19.2.13",
+ "@types/react-dom": "^19.2.3",
+ "postcss": "^8.5.6",
+ "tailwindcss": "^4.1.18",
+ "typescript": "^5.9.3"
+ }
+}
\ No newline at end of file
diff --git a/apps/docs/postcss.config.mjs b/apps/docs/postcss.config.mjs
new file mode 100644
index 0000000..297374d
--- /dev/null
+++ b/apps/docs/postcss.config.mjs
@@ -0,0 +1,7 @@
+const config = {
+ plugins: {
+ '@tailwindcss/postcss': {},
+ },
+};
+
+export default config;
diff --git a/apps/docs/source.config.ts b/apps/docs/source.config.ts
new file mode 100644
index 0000000..a7c3689
--- /dev/null
+++ b/apps/docs/source.config.ts
@@ -0,0 +1,23 @@
+import { defineConfig, defineDocs } from 'fumadocs-mdx/config';
+import { metaSchema, pageSchema } from 'fumadocs-core/source/schema';
+
+// You can customise Zod schemas for frontmatter and `meta.json` here
+// see https://fumadocs.dev/docs/mdx/collections
+export const docs = defineDocs({
+ dir: 'content/docs',
+ docs: {
+ schema: pageSchema,
+ postprocess: {
+ includeProcessedMarkdown: true,
+ },
+ },
+ meta: {
+ schema: metaSchema,
+ },
+});
+
+export default defineConfig({
+ mdxOptions: {
+ // MDX options
+ },
+});
diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json
new file mode 100644
index 0000000..3838223
--- /dev/null
+++ b/apps/docs/tsconfig.json
@@ -0,0 +1,36 @@
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "target": "ESNext",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "react-jsx",
+ "incremental": true,
+ "paths": {
+ "@/*": ["./*"],
+ "fumadocs-mdx:collections/*": [".source/*"]
+ },
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ]
+ },
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts",
+ ".next/dev/types/**/*.ts"
+ ],
+ "exclude": ["node_modules"]
+}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 4de91a3..e1348f6 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,2 +1,3 @@
packages:
- '.'
+ - 'apps/*'
From 5a85239643d0d806e1bb9137ddf7445479401cbb Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 10 Feb 2026 01:42:37 +0000
Subject: [PATCH 03/10] docs: add architecture section (overview, data layer,
offline-first)
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
---
.../content/docs/architecture/data-layer.mdx | 85 +++++++++++++++++++
apps/docs/content/docs/architecture/index.mdx | 78 +++++++++++++++++
apps/docs/content/docs/architecture/meta.json | 4 +
.../docs/architecture/offline-first.mdx | 79 +++++++++++++++++
4 files changed, 246 insertions(+)
create mode 100644 apps/docs/content/docs/architecture/data-layer.mdx
create mode 100644 apps/docs/content/docs/architecture/index.mdx
create mode 100644 apps/docs/content/docs/architecture/meta.json
create mode 100644 apps/docs/content/docs/architecture/offline-first.mdx
diff --git a/apps/docs/content/docs/architecture/data-layer.mdx b/apps/docs/content/docs/architecture/data-layer.mdx
new file mode 100644
index 0000000..eeafd84
--- /dev/null
+++ b/apps/docs/content/docs/architecture/data-layer.mdx
@@ -0,0 +1,85 @@
+---
+title: Data Layer
+description: Data fetching, caching, and state management
+---
+
+The data layer connects the UI to the ObjectStack server through a multi-tier caching and sync system.
+
+## Client Initialization
+
+The ObjectStack client is initialized as a singleton via `lib/objectstack.ts`:
+
+```ts
+import { createObjectStackClient } from '@/lib/objectstack';
+
+// Set the server URL (persisted in expo-secure-store)
+setObjectStackApiUrl('https://your-server.objectstack.com');
+
+// Create or retrieve the client singleton
+const client = createObjectStackClient(authToken);
+```
+
+The client is provided to the React tree via `ObjectStackProvider` from `@objectstack/client-react`.
+
+## Data Fetching with Hooks
+
+All data access goes through React hooks that wrap TanStack Query:
+
+```tsx
+import { useQuery, useMutation } from '@/hooks/useObjectStack';
+
+// Fetch records
+const { data, isLoading } = useQuery('contacts', {
+ filters: { status: 'active' },
+ sort: { field: 'createdAt', order: 'desc' },
+ limit: 50,
+});
+
+// Mutate records
+const mutation = useMutation('contacts');
+await mutation.mutateAsync({
+ type: 'create',
+ data: { name: 'Jane Doe', email: 'jane@example.com' },
+});
+```
+
+## Metadata Caching
+
+Server metadata (object schemas, view definitions, field configurations) is cached locally using MMKV with ETag-based invalidation:
+
+```ts
+import { getCachedMetadata, isCacheFresh } from '@/lib/metadata-cache';
+
+// Check if cache is fresh (5-minute TTL)
+if (isCacheFresh('objects/contacts')) {
+ return getCachedMetadata('objects/contacts');
+}
+```
+
+## Query Builder
+
+The `useQueryBuilder` hook provides a programmatic interface for building complex filters:
+
+```ts
+const { addFilter, addGroup, serialized } = useQueryBuilder();
+
+addFilter('status', 'eq', 'active');
+addGroup('AND');
+addFilter('createdAt', 'gte', '2024-01-01');
+
+// Serialize to ObjectQL format
+const query = serialized();
+```
+
+Supported operators: `eq`, `neq`, `gt`, `gte`, `lt`, `lte`, `contains`, `startsWith`, `endsWith`, `in`, `between`, `isNull`, `isNotNull`.
+
+## State Stores
+
+Four Zustand stores manage client-side state:
+
+| Store | Purpose | Key State |
+|-------|---------|-----------|
+| `app-store` | App context | `currentAppId`, `isOffline` |
+| `ui-store` | UI preferences | `theme`, `language` |
+| `sync-store` | Sync status | `isSyncing`, `pendingCount`, `conflicts` |
+| `security-store` | Security | `biometricEnabled`, `isLocked`, `inactivityTimeout` |
diff --git a/apps/docs/content/docs/architecture/index.mdx b/apps/docs/content/docs/architecture/index.mdx
new file mode 100644
index 0000000..ef9f688
--- /dev/null
+++ b/apps/docs/content/docs/architecture/index.mdx
@@ -0,0 +1,78 @@
+---
+title: Architecture Overview
+description: System architecture of ObjectStack Mobile
+---
+
+ObjectStack Mobile is a **metadata-driven runtime** — it does not hard-code UI layouts or business logic. Instead, it fetches metadata from the ObjectStack server and dynamically renders native mobile interfaces.
+
+## Layered Architecture
+
+The app follows a strict layered architecture with clear separation of concerns:
+
+```
+┌─────────────────────────────────┐
+│ Navigation Layer │ Expo Router (file-based)
+├─────────────────────────────────┤
+│ Rendering Layer │ View renderers, field widgets
+├─────────────────────────────────┤
+│ Hooks Layer │ Custom React hooks
+├─────────────────────────────────┤
+│ State Layer │ Zustand stores + TanStack Query
+├─────────────────────────────────┤
+│ SDK Layer │ @objectstack/client
+├─────────────────────────────────┤
+│ Offline Layer │ SQLite + MMKV + sync queue
+└─────────────────────────────────┘
+```
+
+### Navigation Layer
+
+File-based routing powered by **Expo Router v6**. Routes are organized into three groups:
+
+- `(auth)/` — Authentication screens (server config, sign-in, sign-up)
+- `(tabs)/` — Main tab bar (Home, Apps, Notifications, Profile)
+- `(app)/` — Dynamic app screens with nested routes for objects, records, and dashboards
+
+### Rendering Layer
+
+**12+ view renderers** that interpret server metadata and produce native UI:
+
+| Renderer | Purpose |
+|----------|---------|
+| `ListViewRenderer` | Sortable, filterable data lists with swipe actions |
+| `FormViewRenderer` | Dynamic forms with sections and conditional fields |
+| `DetailViewRenderer` | Record detail with related lists and actions |
+| `DashboardViewRenderer` | Responsive widget grid (KPIs, charts, tables) |
+| `KanbanViewRenderer` | Drag-and-drop board grouped by status/field |
+| `CalendarViewRenderer` | Monthly calendar with event display |
+| `ChartViewRenderer` | Bar, line, pie, and funnel charts |
+| `TimelineViewRenderer` | Chronological activity/audit log |
+| `MapViewRenderer` | Geographic markers with clustering |
+
+### Hooks Layer
+
+23+ custom hooks encapsulate business logic — data fetching, offline sync, permissions, workflows, AI, analytics, and more. Hooks compose lower-level SDK calls with app-specific state management.
+
+### State Layer
+
+- **Zustand** stores for client-side state (app, UI, sync, security)
+- **TanStack Query** for server state caching and automatic refetching
+- Stores are small and focused — each managing a single concern
+
+### SDK Layer
+
+`@objectstack/client` v2.0.1 provides 13 API namespaces:
+
+`meta` · `data` · `auth` · `views` · `permissions` · `workflow` · `realtime` · `notifications` · `ai` · `analytics` · `i18n` · `automation` · `packages`
+
+### Offline Layer
+
+Full offline-first support with SQLite for structured data, MMKV for key-value caching, and a write-ahead sync queue for mutations. See [Offline-First Architecture](/docs/architecture/offline-first) for details.
+
+## Design Principles
+
+1. **Server-Driven UI** — The server defines what to render; the client decides how
+2. **Offline-First** — Every interaction works without network; syncs when connected
+3. **Progressive Enhancement** — Core features work immediately; advanced features load on demand
+4. **Type Safety** — End-to-end TypeScript from SDK types to UI components
+5. **Performance** — Lazy loading, virtualized lists, memoized computations
diff --git a/apps/docs/content/docs/architecture/meta.json b/apps/docs/content/docs/architecture/meta.json
new file mode 100644
index 0000000..3a9220c
--- /dev/null
+++ b/apps/docs/content/docs/architecture/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Architecture",
+ "pages": ["index", "data-layer", "offline-first"]
+}
diff --git a/apps/docs/content/docs/architecture/offline-first.mdx b/apps/docs/content/docs/architecture/offline-first.mdx
new file mode 100644
index 0000000..8388e26
--- /dev/null
+++ b/apps/docs/content/docs/architecture/offline-first.mdx
@@ -0,0 +1,79 @@
+---
+title: Offline-First Architecture
+description: How ObjectStack Mobile works without network connectivity
+---
+
+ObjectStack Mobile is designed to function fully offline. Users can browse, create, edit, and delete records without network connectivity. Changes are queued and synced when the device reconnects.
+
+## Storage Stack
+
+| Layer | Technology | Purpose |
+|-------|-----------|---------|
+| Structured Data | expo-sqlite | Records, sync queue entries |
+| Key-Value Cache | react-native-mmkv | Metadata, feature flags, config |
+| Secure Storage | expo-secure-store | Auth tokens, server URL |
+
+## Sync Queue
+
+All mutations performed offline are written to a **FIFO sync queue** stored in SQLite:
+
+```ts
+interface SyncQueueEntry {
+ id: string;
+ objectName: string;
+ operation: 'create' | 'update' | 'delete';
+ recordId?: string;
+ payload: Record;
+ status: 'pending' | 'in_progress' | 'failed' | 'conflict';
+ retryCount: number;
+ createdAt: number;
+}
+```
+
+When the device comes back online, the `useOfflineSync` hook processes the queue:
+
+1. **Dequeue** — Take the next pending entry
+2. **Execute** — Send the mutation to the server
+3. **Handle response** — On success, remove from queue; on 409, mark as conflict
+4. **Retry** — Failed entries are retried up to 5 times with exponential backoff
+
+## Conflict Resolution
+
+When a record has been modified on both the server and the device, a **409 Conflict** response triggers the conflict resolution flow:
+
+```ts
+interface ConflictInfo {
+ localVersion: Record;
+ serverVersion: Record;
+ conflictFields: string[];
+}
+```
+
+The `ConflictResolutionDialog` component presents the user with a side-by-side comparison and three options:
+
+- **Keep Local** — Overwrite server with local changes
+- **Keep Server** — Discard local changes
+- **Merge** — Field-by-field manual merge
+
+## Background Sync
+
+The `registerBackgroundSync()` function from `lib/background-sync.ts` registers an Expo background task that drains the sync queue even when the app is in the background:
+
+```ts
+import { registerBackgroundSync } from '@/lib/background-sync';
+
+// Register on app startup
+await registerBackgroundSync();
+```
+
+This uses `expo-background-fetch` and `expo-task-manager` to periodically check for pending queue entries.
+
+## Network Status
+
+The `useNetworkStatus` hook monitors connectivity and updates the app store:
+
+```ts
+const { isConnected, isOffline, networkType, refresh } = useNetworkStatus();
+```
+
+The `OfflineIndicator` component shows a banner when the device is offline, displaying the number of pending mutations and a manual sync button.
From e6a3315e5896b6584cf60ec5d73f79f9fe2350bd Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 10 Feb 2026 01:45:19 +0000
Subject: [PATCH 04/10] Add authentication and components documentation for
fumadocs site
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
---
.../content/docs/authentication/index.mdx | 96 +++++++++++++
.../content/docs/authentication/meta.json | 4 +
apps/docs/content/docs/components/actions.mdx | 69 +++++++++
apps/docs/content/docs/components/common.mdx | 99 +++++++++++++
apps/docs/content/docs/components/index.mdx | 32 +++++
apps/docs/content/docs/components/meta.json | 4 +
apps/docs/content/docs/components/query.mdx | 75 ++++++++++
.../content/docs/components/renderers.mdx | 134 ++++++++++++++++++
.../content/docs/components/ui-primitives.mdx | 91 ++++++++++++
9 files changed, 604 insertions(+)
create mode 100644 apps/docs/content/docs/authentication/index.mdx
create mode 100644 apps/docs/content/docs/authentication/meta.json
create mode 100644 apps/docs/content/docs/components/actions.mdx
create mode 100644 apps/docs/content/docs/components/common.mdx
create mode 100644 apps/docs/content/docs/components/index.mdx
create mode 100644 apps/docs/content/docs/components/meta.json
create mode 100644 apps/docs/content/docs/components/query.mdx
create mode 100644 apps/docs/content/docs/components/renderers.mdx
create mode 100644 apps/docs/content/docs/components/ui-primitives.mdx
diff --git a/apps/docs/content/docs/authentication/index.mdx b/apps/docs/content/docs/authentication/index.mdx
new file mode 100644
index 0000000..c847287
--- /dev/null
+++ b/apps/docs/content/docs/authentication/index.mdx
@@ -0,0 +1,96 @@
+---
+title: Authentication
+description: Authentication system, biometrics, and session management
+---
+
+ObjectStack Mobile uses **better-auth** with the Expo plugin for session management, combined with biometric authentication and app-lock security features.
+
+## Auth Flow
+
+The authentication flow is managed by the root layout (`app/_layout.tsx`):
+
+1. **Server Configuration** — User enters the ObjectStack server URL on first launch
+2. **Sign In** — Email/password login with optional social auth (Google, Apple)
+3. **Session** — Auth token stored securely via `expo-secure-store`
+4. **Route Protection** — Unauthenticated users are redirected to the auth screens
+
+## Auth Client Setup
+
+The auth client is initialized in `lib/auth-client.ts`:
+
+```ts
+import { authClient, reinitializeAuthClient } from '@/lib/auth-client';
+
+// Reinitialize when server URL changes
+reinitializeAuthClient('https://your-server.objectstack.com');
+
+// Sign in
+const result = await authClient.signIn.email({
+ email: 'user@example.com',
+ password: 'password',
+});
+```
+
+## Session Management
+
+`lib/session-manager.ts` provides session utilities:
+
+```ts
+import { getCurrentUser, listSessions } from '@/lib/session-manager';
+
+// Get current authenticated user profile
+const user = await getCurrentUser();
+
+// List all active sessions
+const sessions = await listSessions();
+```
+
+## Biometric Authentication
+
+`lib/biometric-auth.ts` wraps `expo-local-authentication` for fingerprint and face recognition:
+
+```ts
+import { getBiometricStatus } from '@/lib/biometric-auth';
+
+const status = await getBiometricStatus();
+// { isAvailable: true, biometryType: 'fingerprint' | 'facial' | 'iris' }
+```
+
+Biometric auth is used for:
+- **App Unlock** — Require biometric verification after inactivity timeout
+- **Sensitive Actions** — Confirm identity before destructive operations
+
+## App Lock
+
+`lib/app-lock.ts` monitors app lifecycle transitions and locks the app after a configurable inactivity timeout:
+
+```ts
+import { startAppLockMonitor } from '@/lib/app-lock';
+
+// Start monitoring (uses security store settings)
+startAppLockMonitor();
+```
+
+The security state is managed by the `security-store`:
+
+| Setting | Description | Default |
+|---------|-------------|---------|
+| `biometricEnabled` | Whether biometric auth is active | `false` |
+| `isLocked` | Current lock state | `false` |
+| `inactivityTimeout` | Seconds before auto-lock | `300` (5 min) |
+| `lastActiveAt` | Last user interaction timestamp | — |
+
+## Certificate Pinning
+
+For enterprise deployments, `lib/certificate-pinning.ts` validates TLS certificates:
+
+```ts
+import { buildPinningPolicy, validateCertificatePin } from '@/lib/certificate-pinning';
+
+const policy = buildPinningPolicy({
+ hostname: 'api.objectstack.com',
+ pins: ['sha256/AAAA...', 'sha256/BBBB...'],
+});
+
+const isValid = await validateCertificatePin(policy);
+```
diff --git a/apps/docs/content/docs/authentication/meta.json b/apps/docs/content/docs/authentication/meta.json
new file mode 100644
index 0000000..e56fa62
--- /dev/null
+++ b/apps/docs/content/docs/authentication/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Authentication",
+ "pages": ["index"]
+}
diff --git a/apps/docs/content/docs/components/actions.mdx b/apps/docs/content/docs/components/actions.mdx
new file mode 100644
index 0000000..ec43052
--- /dev/null
+++ b/apps/docs/content/docs/components/actions.mdx
@@ -0,0 +1,69 @@
+---
+title: Action Components
+description: User action handling and execution
+---
+
+The action system interprets server-defined actions and provides a native execution layer.
+
+## ActionBar
+
+Horizontal scrollable bar of action buttons:
+
+```tsx
+import { ActionBar } from '@/components/actions/ActionBar';
+
+
+```
+
+## FloatingActionButton
+
+Bottom-right floating button with haptic feedback:
+
+```tsx
+import { FloatingActionButton } from '@/components/actions/FloatingActionButton';
+
+
+```
+
+## ActionExecutor
+
+Handles action execution with deep-linking and navigation:
+
+```tsx
+import { ActionExecutor } from '@/components/actions/ActionExecutor';
+
+
+```
+
+## Batch Operations
+
+For bulk operations on multiple records:
+
+```tsx
+import { BatchActionBar } from '@/components/batch/BatchActionBar';
+import { BatchProgressIndicator } from '@/components/batch/BatchProgressIndicator';
+
+
+
+
+```
diff --git a/apps/docs/content/docs/components/common.mdx b/apps/docs/content/docs/components/common.mdx
new file mode 100644
index 0000000..34ca31a
--- /dev/null
+++ b/apps/docs/content/docs/components/common.mdx
@@ -0,0 +1,99 @@
+---
+title: Common Components
+description: Shared utility components used across the app
+---
+
+The `components/common/` directory contains reusable components for common mobile patterns.
+
+## SearchBar
+
+Debounced search input (300ms default):
+
+```tsx
+import { SearchBar } from '@/components/common/SearchBar';
+
+
+```
+
+## EmptyState
+
+Centered empty view with icon, message, and optional action:
+
+```tsx
+import { EmptyState } from '@/components/common/EmptyState';
+
+
+```
+
+## ErrorBoundary
+
+Class component error handler with retry functionality:
+
+```tsx
+import { ErrorBoundary } from '@/components/common/ErrorBoundary';
+
+
+
+
+```
+
+Catches rendering errors and displays an error screen with a retry button.
+
+## InfiniteScrollList
+
+FlatList wrapper with automatic load-more:
+
+```tsx
+import { InfiniteScrollList } from '@/components/common/InfiniteScrollList';
+
+ }
+ onEndReached={fetchNextPage}
+ hasMore={hasNextPage}
+/>
+```
+
+## LoadingScreen
+
+Centered activity indicator with optional message:
+
+```tsx
+import { LoadingScreen } from '@/components/common/LoadingScreen';
+
+
+```
+
+## OfflineIndicator
+
+Banner showing offline status and pending mutation count:
+
+```tsx
+import { OfflineIndicator } from '@/components/common/OfflineIndicator';
+
+
+```
+
+## Other Components
+
+| Component | Description |
+|-----------|-------------|
+| `CachedImage` | Image with expo caching and blurhash placeholder |
+| `GlobalSearch` | Full-text cross-field search input |
+| `LanguageSelector` | Language picker list with checkmark indicator |
+| `PullToRefresh` | ScrollView with pull-to-refresh control |
diff --git a/apps/docs/content/docs/components/index.mdx b/apps/docs/content/docs/components/index.mdx
new file mode 100644
index 0000000..fcd3da6
--- /dev/null
+++ b/apps/docs/content/docs/components/index.mdx
@@ -0,0 +1,32 @@
+---
+title: Components Overview
+description: UI component library for ObjectStack Mobile
+---
+
+ObjectStack Mobile uses a layered component architecture organized into five categories.
+
+## Component Categories
+
+
+
+
+
+
+
+
+
+## Architecture
+
+```
+┌────────────────────────────┐
+│ View Renderers │ Metadata-driven layouts
+├────────────────────────────┤
+│ Common Components │ Shared patterns
+├────────────────────────────┤
+│ Action / Query / Batch │ Feature-specific
+├────────────────────────────┤
+│ UI Primitives │ Design system tokens
+└────────────────────────────┘
+```
+
+All components use **NativeWind** (Tailwind CSS for React Native) for styling with the `className` prop pattern. The design system follows shadcn/ui conventions adapted for mobile.
diff --git a/apps/docs/content/docs/components/meta.json b/apps/docs/content/docs/components/meta.json
new file mode 100644
index 0000000..b8715d0
--- /dev/null
+++ b/apps/docs/content/docs/components/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Components",
+ "pages": ["index", "renderers", "ui-primitives", "common", "actions", "query"]
+}
diff --git a/apps/docs/content/docs/components/query.mdx b/apps/docs/content/docs/components/query.mdx
new file mode 100644
index 0000000..38c4384
--- /dev/null
+++ b/apps/docs/content/docs/components/query.mdx
@@ -0,0 +1,75 @@
+---
+title: Query Components
+description: Query builder and filtering UI
+---
+
+The query system provides a visual interface for building complex data filters.
+
+## QueryBuilder
+
+Visual filter rule builder supporting AND/OR logic groups:
+
+```tsx
+import { QueryBuilder } from '@/components/query/QueryBuilder';
+
+
+```
+
+The QueryBuilder renders a tree of filter rules where each rule specifies a field, operator, and value. Rules can be grouped with AND/OR logic.
+
+## FilterRow
+
+Individual filter rule editor:
+
+```tsx
+import { FilterRow } from '@/components/query/FilterRow';
+
+
+```
+
+Each FilterRow renders three selectors:
+1. **Field** — Pick from available object fields
+2. **Operator** — Context-sensitive operators (eq, contains, between, etc.)
+3. **Value** — Type-appropriate input (text, number, date, select)
+
+## Filter Operators
+
+| Operator | Description | Applicable Types |
+|----------|-------------|-----------------|
+| `eq` | Equals | All |
+| `neq` | Not equals | All |
+| `gt` / `gte` | Greater than (or equal) | Number, Date |
+| `lt` / `lte` | Less than (or equal) | Number, Date |
+| `contains` | Contains substring | Text |
+| `startsWith` | Starts with | Text |
+| `endsWith` | Ends with | Text |
+| `in` | In list | All |
+| `between` | Between range | Number, Date |
+| `isNull` | Is empty | All |
+| `isNotNull` | Is not empty | All |
+
+## GlobalSearch
+
+Full-text search across all visible fields:
+
+```tsx
+import { GlobalSearch } from '@/components/query/GlobalSearch';
+
+
+```
diff --git a/apps/docs/content/docs/components/renderers.mdx b/apps/docs/content/docs/components/renderers.mdx
new file mode 100644
index 0000000..b336043
--- /dev/null
+++ b/apps/docs/content/docs/components/renderers.mdx
@@ -0,0 +1,134 @@
+---
+title: View Renderers
+description: Metadata-driven view rendering components
+---
+
+View renderers are the core of ObjectStack Mobile's dynamic UI. Each renderer interprets server metadata and produces a native mobile interface for a specific view type.
+
+## ViewRenderer (Router)
+
+The `ViewRenderer` component acts as a dynamic router that lazy-loads the appropriate renderer based on the view type:
+
+```tsx
+import { ViewRenderer } from '@/components/renderers/ViewRenderer';
+
+
+```
+
+## List View
+
+`ListViewRenderer` renders sortable, filterable data tables with swipe actions and infinite scroll.
+
+```tsx
+ navigate(record.id)}
+ onLoadMore={fetchNextPage}
+ hasMore={hasNextPage}
+/>
+```
+
+**Features:** Column sorting, pull-to-refresh, swipe-to-edit/delete, empty state, search integration.
+
+## Form View
+
+`FormViewRenderer` renders dynamic data entry forms with sections and conditional field visibility.
+
+```tsx
+
+```
+
+**Features:** Field sections, conditional logic, validation, field-level permissions, read-only mode.
+
+## Detail View
+
+`DetailViewRenderer` displays a single record with action buttons and related data lists.
+
+```tsx
+
+```
+
+## Dashboard View
+
+`DashboardViewRenderer` renders a responsive widget grid with KPIs, charts, and data tables.
+
+```tsx
+
+```
+
+**Layout:** 2 columns on tablets (≥600dp), 1 column on phones, with 12px gap and widget span support.
+
+## Kanban View
+
+`KanbanViewRenderer` renders a drag-and-drop board grouped by a status or category field.
+
+```tsx
+
+```
+
+## Calendar View
+
+`CalendarViewRenderer` displays events on a monthly calendar with navigation.
+
+```tsx
+
+```
+
+## Chart View
+
+`ChartViewRenderer` renders data visualizations (bar, line, pie, funnel).
+
+```tsx
+
+```
+
+## Other Renderers
+
+| Renderer | Purpose |
+|----------|---------|
+| `TimelineViewRenderer` | Chronological activity/audit log |
+| `MapViewRenderer` | Geographic markers with list fallback |
+| `ImageGallery` | Grid image viewer with modal detail |
+| `FilterDrawer` | Modal filter builder with QueryBuilder |
+| `SwipeableRow` | Gesture row revealing edit/delete actions (80px per action) |
diff --git a/apps/docs/content/docs/components/ui-primitives.mdx b/apps/docs/content/docs/components/ui-primitives.mdx
new file mode 100644
index 0000000..b96046e
--- /dev/null
+++ b/apps/docs/content/docs/components/ui-primitives.mdx
@@ -0,0 +1,91 @@
+---
+title: UI Primitives
+description: Design system components (shadcn/ui style)
+---
+
+The `components/ui/` directory contains foundational design primitives following the **shadcn/ui** pattern adapted for React Native with NativeWind.
+
+## Button
+
+```tsx
+import { Button } from '@/components/ui/Button';
+
+
+```
+
+| Prop | Type | Options |
+|------|------|---------|
+| `variant` | string | `default`, `destructive`, `outline`, `ghost` |
+| `size` | string | `sm`, `default`, `lg` |
+| `onPress` | function | Press handler |
+| `disabled` | boolean | Disable state |
+
+## Card
+
+Container component with rounded borders and shadow:
+
+```tsx
+import { Card } from '@/components/ui/Card';
+
+
+ Card content
+
+```
+
+## Input
+
+Text input field with focus styling:
+
+```tsx
+import { Input } from '@/components/ui/Input';
+
+
+```
+
+## Dialog
+
+Modal overlay with fade-in animation:
+
+```tsx
+import { Dialog } from '@/components/ui/Dialog';
+
+
+```
+
+## BottomSheet
+
+Slide-up drawer modal for mobile-friendly interactions:
+
+```tsx
+import { BottomSheet } from '@/components/ui/BottomSheet';
+
+
+ {/* Content */}
+
+```
+
+## Complete List
+
+| Component | Description |
+|-----------|-------------|
+| `Avatar` | User image or initials (sm, default, lg sizes) |
+| `Badge` | Small label or status indicator |
+| `Button` | Action button with variants and sizes |
+| `Card` | Container with border and shadow |
+| `Checkbox` | Boolean toggle control |
+| `Dialog` | Modal overlay with fade transition |
+| `BottomSheet` | Slide-up drawer modal |
+| `Input` | Text field with focus ring |
+| `Select` | Dropdown picker |
+| `Skeleton` | Loading placeholder animation |
+| `Switch` | Boolean switch toggle |
+| `Tabs` | Tab navigation component |
+| `Toast` | Notification toast messages |
From 367d3a14f5f8ba52856f54aadb1879e91720f777 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 10 Feb 2026 01:48:41 +0000
Subject: [PATCH 05/10] Add hooks documentation for ObjectStack Mobile fumadocs
site
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
---
.../content/docs/hooks/analytics-hooks.mdx | 61 ++++++++
apps/docs/content/docs/hooks/auth-hooks.mdx | 62 ++++++++
apps/docs/content/docs/hooks/data-hooks.mdx | 112 +++++++++++++
.../docs/content/docs/hooks/feature-hooks.mdx | 148 ++++++++++++++++++
apps/docs/content/docs/hooks/index.mdx | 36 +++++
apps/docs/content/docs/hooks/meta.json | 4 +
apps/docs/content/docs/hooks/ui-hooks.mdx | 66 ++++++++
7 files changed, 489 insertions(+)
create mode 100644 apps/docs/content/docs/hooks/analytics-hooks.mdx
create mode 100644 apps/docs/content/docs/hooks/auth-hooks.mdx
create mode 100644 apps/docs/content/docs/hooks/data-hooks.mdx
create mode 100644 apps/docs/content/docs/hooks/feature-hooks.mdx
create mode 100644 apps/docs/content/docs/hooks/index.mdx
create mode 100644 apps/docs/content/docs/hooks/meta.json
create mode 100644 apps/docs/content/docs/hooks/ui-hooks.mdx
diff --git a/apps/docs/content/docs/hooks/analytics-hooks.mdx b/apps/docs/content/docs/hooks/analytics-hooks.mdx
new file mode 100644
index 0000000..567c19e
--- /dev/null
+++ b/apps/docs/content/docs/hooks/analytics-hooks.mdx
@@ -0,0 +1,61 @@
+---
+title: Analytics Hooks
+description: Hooks for event tracking and analytics queries
+---
+
+## useAnalyticsTracking
+
+Page view and action tracking for user analytics.
+
+```ts
+// Track page views automatically
+usePageView('ContactList', { objectName: 'contacts' });
+
+// Track custom actions
+const { trackAction } = useTrackAction();
+trackAction('record_created', { objectName: 'contacts', recordId: 'rec_123' });
+```
+
+The `useAnalyticsTracking` module exports two hooks:
+
+- `usePageView(screenName, properties?)` — Automatically logs a page view event when the component mounts
+- `useTrackAction()` — Returns a `trackAction(action, properties?)` function for custom event tracking
+
+Events are batched and flushed periodically to the analytics endpoint.
+
+## useAnalyticsQuery
+
+Query analytics data with metric/dimension grouping and aggregations.
+
+```ts
+const {
+ data, // AnalyticsResult[]
+ total, // number
+ isLoading, // boolean
+ error, // Error | null
+ refetch, // () => void
+} = useAnalyticsQuery({
+ metric: 'record_count',
+ dimensions: ['status', 'region'],
+ aggregation: 'count',
+ dateRange: { start: '2024-01-01', end: '2024-12-31' },
+ filters: { objectName: 'deals' },
+});
+```
+
+**Aggregation types:** `count`, `sum`, `avg`, `min`, `max`.
+
+## useAnalyticsMeta
+
+Fetches available analytics metadata (metrics, fields, aggregate types).
+
+```ts
+const {
+ metrics, // AnalyticsMetric[]
+ isLoading, // boolean
+ error, // Error | null
+ refetch, // () => void
+} = useAnalyticsMeta();
+```
+
+Returns the list of available metrics, queryable fields, and supported aggregation functions.
diff --git a/apps/docs/content/docs/hooks/auth-hooks.mdx b/apps/docs/content/docs/hooks/auth-hooks.mdx
new file mode 100644
index 0000000..a442af3
--- /dev/null
+++ b/apps/docs/content/docs/hooks/auth-hooks.mdx
@@ -0,0 +1,62 @@
+---
+title: Auth & Security Hooks
+description: Hooks for permissions, feature flags, and configuration
+---
+
+## usePermissions
+
+Checks object-level and field-level permissions for the current user.
+
+```ts
+const {
+ permissions, // PermissionSet
+ checkPermission, // (action, recordId?, field?) => boolean
+ isLoading, // boolean
+ refetch, // () => void
+} = usePermissions('contacts');
+```
+
+**Example:**
+
+```ts
+const { checkPermission } = usePermissions('contacts');
+
+const canCreate = checkPermission('create');
+const canEditEmail = checkPermission('update', record.id, 'email');
+const canDelete = checkPermission('delete', record.id);
+```
+
+Actions: `create`, `read`, `update`, `delete`, `export`, `import`.
+
+## useFeatureFlag
+
+Evaluates a single feature flag with reactive updates.
+
+```ts
+const isEnabled = useFeatureFlag('new-dashboard');
+// Returns: boolean
+```
+
+Re-renders automatically when feature flags change. Supports A/B testing with percentage-based rollout bucketing.
+
+## useRemoteConfig
+
+Accesses remote configuration values with local MMKV fallback.
+
+```ts
+const {
+ config, // Record
+ refresh, // () => Promise
+} = useRemoteConfig();
+```
+
+**Example:**
+
+```ts
+const { config, refresh } = useRemoteConfig();
+
+const maxUploadSize = config.maxUploadSizeMB ?? 10;
+const enableBeta = config.enableBetaFeatures ?? false;
+```
+
+Config values are cached locally in MMKV and refreshed periodically from the server.
diff --git a/apps/docs/content/docs/hooks/data-hooks.mdx b/apps/docs/content/docs/hooks/data-hooks.mdx
new file mode 100644
index 0000000..e8c40a0
--- /dev/null
+++ b/apps/docs/content/docs/hooks/data-hooks.mdx
@@ -0,0 +1,112 @@
+---
+title: Data Hooks
+description: Hooks for data fetching, mutations, and offline sync
+---
+
+## useQueryBuilder
+
+Builds and manages ObjectQL filter trees for complex data queries.
+
+```ts
+const {
+ root, // Filter tree root node
+ addFilter, // (field, operator) => void
+ addGroup, // (logic: 'AND' | 'OR') => void
+ updateFilter, // (id, updates) => void
+ removeNode, // (id) => void
+ serialized, // () => ObjectQL query
+ buildProjection // () => field projection
+} = useQueryBuilder();
+```
+
+**Example:**
+
+```ts
+const { addFilter, serialized } = useQueryBuilder();
+
+addFilter('status', 'eq', 'active');
+addFilter('createdAt', 'gte', '2024-01-01');
+
+const query = serialized();
+// { AND: [{ status: { eq: 'active' } }, { createdAt: { gte: '2024-01-01' } }] }
+```
+
+## useBatchOperations
+
+Execute batch create/update/delete operations on records.
+
+```ts
+const {
+ isProcessing, // boolean
+ progress, // { completed: number, total: number }
+ lastResult, // BatchResult
+ executeBatch, // (operations: BatchOp[]) => Promise
+} = useBatchOperations('contacts');
+```
+
+**Example:**
+
+```ts
+const { executeBatch } = useBatchOperations('contacts');
+
+const result = await executeBatch([
+ { type: 'create', data: { name: 'Alice' } },
+ { type: 'update', id: 'rec_1', data: { status: 'active' } },
+ { type: 'delete', id: 'rec_2' },
+]);
+```
+
+Uses SDK-native `batch()` API with fallback for mixed operations. Reports partial failures.
+
+## useOfflineSync
+
+Drives the offline sync cycle when the device reconnects.
+
+```ts
+const {
+ isSyncing, // boolean
+ syncProgress, // { completed, total, failed }
+ lastSyncAt, // Date | null
+ conflicts, // ConflictInfo[]
+ startSync, // () => Promise
+} = useOfflineSync();
+```
+
+Processes the FIFO sync queue: dequeues pending entries, sends mutations to the server, handles 409 conflicts, retries failed entries up to 5 times.
+
+## useDashboardData
+
+Fetches widget data for dashboard views.
+
+```ts
+const widgetData = useDashboardData(widgetMeta);
+// Returns: WidgetDataPayload (metric, kpi, list, or table data)
+```
+
+Supports metric/kpi/list/table widget types with live query updates via TanStack Query.
+
+## useSubscription
+
+Real-time data subscriptions via WebSocket.
+
+```ts
+const {
+ isConnected, // boolean
+ connectionId, // string | null
+ subscriptionId, // string | null
+ presence, // UserPresence[]
+ connect, // () => void
+ disconnect, // () => void
+} = useSubscription({
+ objectName: 'contacts',
+ onEvent: (event) => handleRealtimeEvent(event),
+});
+```
+
+## Aliases
+
+| Alias | Wraps | Purpose |
+|-------|-------|---------|
+| `useBatchMutation` | `useBatchOperations` | SDK naming convention |
+| `usePackages` | `useAppDiscovery` | SDK naming convention |
+| `useSavedViews` | `useViewStorage` | SDK naming convention |
diff --git a/apps/docs/content/docs/hooks/feature-hooks.mdx b/apps/docs/content/docs/hooks/feature-hooks.mdx
new file mode 100644
index 0000000..0e62684
--- /dev/null
+++ b/apps/docs/content/docs/hooks/feature-hooks.mdx
@@ -0,0 +1,148 @@
+---
+title: Feature Hooks
+description: Hooks for AI, workflows, notifications, file upload, and i18n
+---
+
+## useAI
+
+AI-powered features including Natural Language Query, chat, suggestions, and insights.
+
+```ts
+const {
+ nlq, // (query, object?) => Promise
+ chat, // (message, context?) => Promise
+ suggest, // (request) => Promise
+ insights, // (type?, recordId?) => Promise
+ clearConversation, // () => void
+ isLoading, // boolean
+} = useAI();
+```
+
+**Natural Language Query:**
+
+```ts
+const { nlq } = useAI();
+
+const result = await nlq('Show me all active customers from California');
+// Returns: { records, query, explanation }
+```
+
+**AI Chat:**
+
+```ts
+const { chat } = useAI();
+
+const response = await chat('Summarize this quarter sales', {
+ objectName: 'deals',
+ recordId: 'rec_123',
+});
+```
+
+## useWorkflowState
+
+Manages workflow state transitions and approvals for a record.
+
+```ts
+const {
+ currentState, // WorkflowState
+ availableActions,// WorkflowAction[]
+ history, // WorkflowHistoryEntry[]
+ transition, // (name, comment?) => Promise
+ approve, // (comment?) => Promise
+ reject, // (reason, comment?) => Promise
+ isLoading, // boolean
+} = useWorkflowState('deals', recordId);
+```
+
+**Example:**
+
+```ts
+const { transition, approve, reject } = useWorkflowState('deals', 'rec_123');
+
+// Move to next stage
+await transition('submit_for_review', 'Ready for review');
+
+// Approve
+await approve('Looks good');
+
+// Reject (reason is required)
+await reject('Missing documentation', 'Please add the contract attachment');
+```
+
+## useNotifications
+
+Manages notifications with preferences and cursor-based pagination.
+
+```ts
+const {
+ notifications, // Notification[]
+ unreadCount, // number
+ isLoading, // boolean
+ fetchMore, // () => Promise
+ markAsRead, // (id) => Promise
+ updatePreferences, // (prefs) => Promise
+} = useNotifications();
+```
+
+## useFileUpload
+
+File operations — pick, upload, download, and share files.
+
+```ts
+const {
+ isUploading, // boolean
+ progress, // number (0-100)
+ pickAndUploadImage, // () => Promise
+ captureAndUploadPhoto, // () => Promise
+ pickAndUploadDocument, // () => Promise
+ uploadFile, // (uri, name, mimeType) => Promise
+ downloadFile, // (url, filename) => Promise
+ shareFile, // (uri) => Promise
+} = useFileUpload('contacts', recordId);
+```
+
+**Example:**
+
+```ts
+const { pickAndUploadImage, downloadFile } = useFileUpload('contacts', 'rec_123');
+
+// Pick from gallery and upload
+const result = await pickAndUploadImage();
+// { uri, name, size, mimeType, uploadedUrl }
+
+// Download a file
+const localPath = await downloadFile(
+ 'https://server.com/files/report.pdf',
+ 'report.pdf'
+);
+```
+
+## useServerTranslations
+
+Server-side i18n management with i18next integration.
+
+```ts
+const {
+ locales, // string[]
+ fetchLocales, // () => Promise
+ fetchTranslations, // (locale) => Promise
+ fetchFieldLabels, // (object, locale) => Promise
+ isLoading, // boolean
+} = useServerTranslations();
+```
+
+## useViewStorage
+
+Manage saved views (CRUD) for an object.
+
+```ts
+const {
+ views, // SavedView[]
+ isLoading, // boolean
+ saveView, // (view) => Promise
+ deleteView, // (id) => Promise
+ updateView, // (id, updates) => Promise
+} = useViewStorage('contacts');
+```
+
+Supports private and shared visibility settings for saved list and form view configurations.
diff --git a/apps/docs/content/docs/hooks/index.mdx b/apps/docs/content/docs/hooks/index.mdx
new file mode 100644
index 0000000..e3d15af
--- /dev/null
+++ b/apps/docs/content/docs/hooks/index.mdx
@@ -0,0 +1,36 @@
+---
+title: Hooks Reference
+description: Complete reference for all custom React hooks
+---
+
+ObjectStack Mobile provides 23+ custom React hooks that encapsulate business logic, data fetching, and feature integrations.
+
+## Hook Categories
+
+
+
+
+
+
+
+
+
+## SDK Re-exports
+
+The `useObjectStack` barrel file re-exports all SDK hooks plus custom hooks:
+
+```ts
+import {
+ useClient,
+ useQuery,
+ useMutation,
+ usePagination,
+ useInfiniteQuery,
+ useObject,
+ useView,
+ useFields,
+ useMetadata,
+} from '@/hooks/useObjectStack';
+```
+
+These hooks come from `@objectstack/client-react` and provide direct access to the SDK's data layer with TanStack Query integration.
diff --git a/apps/docs/content/docs/hooks/meta.json b/apps/docs/content/docs/hooks/meta.json
new file mode 100644
index 0000000..457606e
--- /dev/null
+++ b/apps/docs/content/docs/hooks/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Hooks",
+ "pages": ["index", "data-hooks", "auth-hooks", "feature-hooks", "analytics-hooks", "ui-hooks"]
+}
diff --git a/apps/docs/content/docs/hooks/ui-hooks.mdx b/apps/docs/content/docs/hooks/ui-hooks.mdx
new file mode 100644
index 0000000..cef5155
--- /dev/null
+++ b/apps/docs/content/docs/hooks/ui-hooks.mdx
@@ -0,0 +1,66 @@
+---
+title: UI Hooks
+description: Hooks for network status, app discovery, and UI state
+---
+
+## useNetworkStatus
+
+Monitors device connectivity and updates the app store.
+
+```ts
+const {
+ isConnected, // boolean
+ isOffline, // boolean
+ networkType, // 'wifi' | 'cellular' | 'unknown' | null
+ refresh, // () => Promise
+} = useNetworkStatus();
+```
+
+Uses `expo-network` to detect connectivity changes. Automatically updates the `isOffline` flag in the app store, triggering UI updates like the `OfflineIndicator` banner.
+
+## useAppDiscovery
+
+Discovers installed packages and apps from the ObjectStack server.
+
+```ts
+const {
+ apps, // AppPackage[]
+ isLoading, // boolean
+ error, // Error | null
+ refetch, // () => void
+} = useAppDiscovery();
+```
+
+Queries the `packages` API namespace and returns only enabled packages. Used by the Apps tab to display the list of available applications.
+
+## Hook Quick Reference
+
+| Hook | Category | Purpose |
+|------|----------|---------|
+| `useQuery` | Data | Fetch records with filters |
+| `useMutation` | Data | Create/update/delete records |
+| `usePagination` | Data | Cursor-based pagination |
+| `useInfiniteQuery` | Data | Infinite scroll queries |
+| `useObject` | Data | Object metadata |
+| `useView` | Data | View configuration |
+| `useFields` | Data | Field definitions |
+| `useMetadata` | Data | Server metadata |
+| `useQueryBuilder` | Data | Build ObjectQL filters |
+| `useBatchOperations` | Data | Batch create/update/delete |
+| `useOfflineSync` | Data | Offline sync cycle |
+| `useDashboardData` | Data | Dashboard widget data |
+| `useSubscription` | Data | Real-time WebSocket |
+| `usePermissions` | Auth | Permission checks |
+| `useFeatureFlag` | Auth | Feature flag evaluation |
+| `useRemoteConfig` | Auth | Remote configuration |
+| `useAI` | Feature | AI/NLQ/Chat |
+| `useWorkflowState` | Feature | Workflow transitions |
+| `useNotifications` | Feature | Notification management |
+| `useFileUpload` | Feature | File operations |
+| `useServerTranslations` | Feature | Server-side i18n |
+| `useViewStorage` | Feature | Saved views CRUD |
+| `useAnalyticsTracking` | Analytics | Event tracking |
+| `useAnalyticsQuery` | Analytics | Analytics queries |
+| `useAnalyticsMeta` | Analytics | Analytics metadata |
+| `useNetworkStatus` | UI | Connectivity monitoring |
+| `useAppDiscovery` | UI | Package discovery |
From 6417ec31520378f7d60c09af2775d4030892c02c Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 10 Feb 2026 01:51:16 +0000
Subject: [PATCH 06/10] Add Libraries documentation section with auth, data,
security, monitoring, and utilities pages
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
---
apps/docs/content/docs/libraries/auth.mdx | 74 ++++++++++++
apps/docs/content/docs/libraries/data.mdx | 95 ++++++++++++++++
apps/docs/content/docs/libraries/index.mdx | 14 +++
apps/docs/content/docs/libraries/meta.json | 4 +
.../content/docs/libraries/monitoring.mdx | 95 ++++++++++++++++
apps/docs/content/docs/libraries/security.mdx | 79 +++++++++++++
.../docs/content/docs/libraries/utilities.mdx | 106 ++++++++++++++++++
7 files changed, 467 insertions(+)
create mode 100644 apps/docs/content/docs/libraries/auth.mdx
create mode 100644 apps/docs/content/docs/libraries/data.mdx
create mode 100644 apps/docs/content/docs/libraries/index.mdx
create mode 100644 apps/docs/content/docs/libraries/meta.json
create mode 100644 apps/docs/content/docs/libraries/monitoring.mdx
create mode 100644 apps/docs/content/docs/libraries/security.mdx
create mode 100644 apps/docs/content/docs/libraries/utilities.mdx
diff --git a/apps/docs/content/docs/libraries/auth.mdx b/apps/docs/content/docs/libraries/auth.mdx
new file mode 100644
index 0000000..f43ab30
--- /dev/null
+++ b/apps/docs/content/docs/libraries/auth.mdx
@@ -0,0 +1,74 @@
+---
+title: Auth Libraries
+description: Authentication, session, and biometric libraries
+---
+
+## objectstack.ts
+
+Client initialization and singleton management for the ObjectStack SDK.
+
+```ts
+import {
+ setObjectStackApiUrl,
+ createObjectStackClient,
+ getObjectStackClient,
+} from '@/lib/objectstack';
+
+// Set server URL (persisted to expo-secure-store)
+setObjectStackApiUrl('https://your-server.objectstack.com');
+
+// Create client with auth token
+const client = createObjectStackClient(authToken);
+
+// Retrieve existing singleton
+const client = getObjectStackClient();
+```
+
+## auth-client.ts
+
+better-auth client for session management with the Expo plugin.
+
+```ts
+import { authClient, reinitializeAuthClient, getAuthBaseURL } from '@/lib/auth-client';
+
+// Get current base URL
+const baseURL = getAuthBaseURL();
+
+// Reinitialize when server URL changes
+reinitializeAuthClient('https://new-server.objectstack.com');
+
+// Use the auth client
+await authClient.signIn.email({ email, password });
+await authClient.signOut();
+```
+
+## session-manager.ts
+
+Session handling via the ObjectStack client.
+
+```ts
+import { getCurrentUser, listSessions } from '@/lib/session-manager';
+
+// Get authenticated user profile
+const user = await getCurrentUser();
+// { id, email, name, avatar, ... }
+
+// List all active sessions
+const sessions = await listSessions();
+// [{ id, device, lastActive, ... }]
+```
+
+## biometric-auth.ts
+
+Biometric authentication wrapping `expo-local-authentication`.
+
+```ts
+import { getBiometricStatus } from '@/lib/biometric-auth';
+
+const status = await getBiometricStatus();
+// {
+// isAvailable: boolean,
+// biometryType: 'fingerprint' | 'facial' | 'iris' | null,
+// isEnrolled: boolean,
+// }
+```
diff --git a/apps/docs/content/docs/libraries/data.mdx b/apps/docs/content/docs/libraries/data.mdx
new file mode 100644
index 0000000..bbf3f5f
--- /dev/null
+++ b/apps/docs/content/docs/libraries/data.mdx
@@ -0,0 +1,95 @@
+---
+title: Data Libraries
+description: Offline storage, sync queue, metadata cache, and query builder
+---
+
+## offline-storage.ts
+
+SQLite offline storage with key/value patterns and schema migration.
+
+```ts
+import { getDatabase, bootstrapOfflineDatabase } from '@/lib/offline-storage';
+
+// Initialize database and run migrations
+await bootstrapOfflineDatabase();
+
+// Get database instance
+const db = getDatabase();
+```
+
+Records are stored locally in SQLite tables, enabling full offline CRUD operations.
+
+## sync-queue.ts
+
+Write-ahead sync queue for offline mutations. Entries are stored in SQLite and processed in FIFO order.
+
+```ts
+interface SyncQueueEntry {
+ id: string;
+ objectName: string;
+ operation: 'create' | 'update' | 'delete';
+ recordId?: string;
+ payload: Record;
+ status: 'pending' | 'in_progress' | 'failed' | 'conflict';
+ retryCount: number;
+ createdAt: number;
+}
+
+interface ConflictInfo {
+ localVersion: Record;
+ serverVersion: Record;
+ conflictFields: string[];
+}
+```
+
+Status lifecycle: `pending` → `in_progress` → (success: removed) | `failed` | `conflict`.
+
+## metadata-cache.ts
+
+MMKV-based metadata caching with ETag support.
+
+```ts
+import {
+ getCachedMetadata,
+ setCachedMetadata,
+ isCacheFresh,
+} from '@/lib/metadata-cache';
+
+// Check freshness (5-minute TTL)
+if (isCacheFresh('objects/contacts')) {
+ const metadata = getCachedMetadata('objects/contacts');
+}
+
+// Update cache with ETag
+setCachedMetadata('objects/contacts', data, etag);
+```
+
+## background-sync.ts
+
+Background sync task registration using Expo background fetch.
+
+```ts
+import { registerBackgroundSync } from '@/lib/background-sync';
+
+// Register on app startup
+await registerBackgroundSync();
+```
+
+Uses `expo-background-fetch` and `expo-task-manager` to drain the sync queue when the app is in the background.
+
+## query-builder.ts
+
+ObjectQL filter AST helpers for building typed query filters.
+
+```ts
+import { OPERATOR_META } from '@/lib/query-builder';
+
+// Available operators with metadata
+OPERATOR_META = {
+ eq: { label: 'Equals', types: ['text', 'number', 'date', ...] },
+ neq: { label: 'Not Equals', types: ['text', 'number', 'date', ...] },
+ contains: { label: 'Contains', types: ['text'] },
+ between: { label: 'Between', types: ['number', 'date'] },
+ // ... more operators
+};
+```
diff --git a/apps/docs/content/docs/libraries/index.mdx b/apps/docs/content/docs/libraries/index.mdx
new file mode 100644
index 0000000..55b2d0a
--- /dev/null
+++ b/apps/docs/content/docs/libraries/index.mdx
@@ -0,0 +1,14 @@
+---
+title: Libraries Reference
+description: Core utility library modules
+---
+
+ObjectStack Mobile includes 24+ library modules in the `lib/` directory. Each module is a focused utility providing a specific capability.
+
+
+
+
+
+
+
+
diff --git a/apps/docs/content/docs/libraries/meta.json b/apps/docs/content/docs/libraries/meta.json
new file mode 100644
index 0000000..e4f078d
--- /dev/null
+++ b/apps/docs/content/docs/libraries/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Libraries",
+ "pages": ["index", "auth", "data", "security", "monitoring", "utilities"]
+}
diff --git a/apps/docs/content/docs/libraries/monitoring.mdx b/apps/docs/content/docs/libraries/monitoring.mdx
new file mode 100644
index 0000000..59fa18a
--- /dev/null
+++ b/apps/docs/content/docs/libraries/monitoring.mdx
@@ -0,0 +1,95 @@
+---
+title: Monitoring Libraries
+description: Error tracking, analytics, performance, and memory profiling
+---
+
+## sentry.ts
+
+Crash reporting and performance monitoring via Sentry.
+
+```ts
+import { initSentry } from '@/lib/sentry';
+
+initSentry({
+ dsn: 'https://your-sentry-dsn',
+ environment: 'production',
+ tracesSampleRate: 0.2,
+});
+```
+
+Integrates `@sentry/react-native` for automatic crash reporting, breadcrumbs, and performance traces.
+
+## analytics.ts
+
+Event tracking with batch flushing to a remote endpoint.
+
+```ts
+import { createAnalyticsTracker } from '@/lib/analytics';
+
+const tracker = createAnalyticsTracker({
+ endpoint: 'https://analytics.objectstack.com/events',
+ batchSize: 20,
+ flushInterval: 30000, // 30 seconds
+});
+
+// Track events (queued and flushed in batches)
+tracker.track('page_view', { screen: 'ContactList' });
+tracker.track('action', { type: 'record_created', object: 'contacts' });
+```
+
+## error-handling.ts
+
+Standardized error parsing and user-friendly messages.
+
+```ts
+import { parseError } from '@/lib/error-handling';
+
+try {
+ await client.data.create('contacts', data);
+} catch (err) {
+ const error = parseError(err);
+ // {
+ // code: 'UNAUTHORIZED' | 'NOT_FOUND' | 'VALIDATION' | ...,
+ // message: 'User-friendly error message',
+ // details: { ... },
+ // }
+}
+```
+
+Error codes: `UNAUTHORIZED`, `FORBIDDEN`, `NOT_FOUND`, `VALIDATION`, `CONFLICT`, `RATE_LIMITED`, `SERVER_ERROR`, `NETWORK_ERROR`, `TIMEOUT`.
+
+## performance-benchmark.ts
+
+Performance metric tracking with configurable thresholds.
+
+```ts
+import type { BenchmarkConfig } from '@/lib/performance-benchmark';
+
+const config: BenchmarkConfig = {
+ appStartup: { threshold: 2000 }, // 2s max
+ screenRender: { threshold: 500 }, // 500ms max
+ apiResponse: { threshold: 3000 }, // 3s max
+ frameTime: { threshold: 16.67 }, // 60fps target
+};
+```
+
+## memory-profiler.ts
+
+Memory leak detection for development builds.
+
+```ts
+import { createMemoryTracker } from '@/lib/memory-profiler';
+
+const tracker = createMemoryTracker({
+ leakThreshold: 10, // Report after 10 unmatched mounts
+});
+
+// Track component lifecycle
+tracker.onMount('ContactList');
+tracker.onUnmount('ContactList');
+
+// Check for leaks
+const leaks = tracker.getLeaks();
+```
+
+Tracks component mounts, subscriptions, and event listeners. Reports potential memory leaks when unmount counts don't match mount counts above a configurable threshold.
diff --git a/apps/docs/content/docs/libraries/security.mdx b/apps/docs/content/docs/libraries/security.mdx
new file mode 100644
index 0000000..8b7ba2d
--- /dev/null
+++ b/apps/docs/content/docs/libraries/security.mdx
@@ -0,0 +1,79 @@
+---
+title: Security Libraries
+description: Certificate pinning, security audit, and app lock
+---
+
+## certificate-pinning.ts
+
+TLS certificate validation for enterprise deployments.
+
+```ts
+import {
+ buildPinningPolicy,
+ validateCertificatePin,
+} from '@/lib/certificate-pinning';
+
+// Build a pinning policy
+const policy = buildPinningPolicy({
+ hostname: 'api.objectstack.com',
+ pins: ['sha256/AAAA...', 'sha256/BBBB...'],
+});
+
+// Validate during network requests
+const isValid = await validateCertificatePin(policy);
+```
+
+## security-audit.ts
+
+Pre-release security checklist and audit report generator.
+
+```ts
+import { createSecurityAudit } from '@/lib/security-audit';
+
+const audit = createSecurityAudit();
+
+// Register checks
+audit.addCheck('https-enforced', () => checkHTTPS());
+audit.addCheck('cert-pinning', () => checkCertPinning());
+audit.addCheck('secure-storage', () => checkSecureStorage());
+
+// Generate report
+const report = await audit.run();
+// { passed: ['https-enforced', ...], failed: [...], score: 0.95 }
+```
+
+## app-lock.ts
+
+App lifecycle monitoring for biometric locking.
+
+```ts
+import { startAppLockMonitor } from '@/lib/app-lock';
+
+// Start monitoring (reads from security store)
+startAppLockMonitor();
+```
+
+Tracks foreground/background state transitions. When the app returns to foreground after the configured inactivity timeout, it triggers biometric re-authentication.
+
+## server-url.ts
+
+Server URL persistence and validation.
+
+```ts
+import {
+ getServerUrl,
+ setServerUrl,
+ validateServerUrl,
+} from '@/lib/server-url';
+
+// Get stored URL
+const url = await getServerUrl();
+
+// Validate with health check
+const isValid = await validateServerUrl('https://new-server.objectstack.com');
+
+// Persist URL
+await setServerUrl('https://new-server.objectstack.com');
+```
+
+Uses `expo-secure-store` for encrypted persistence. The `validateServerUrl` function performs a health check request to verify the server is accessible.
diff --git a/apps/docs/content/docs/libraries/utilities.mdx b/apps/docs/content/docs/libraries/utilities.mdx
new file mode 100644
index 0000000..9788925
--- /dev/null
+++ b/apps/docs/content/docs/libraries/utilities.mdx
@@ -0,0 +1,106 @@
+---
+title: Utility Libraries
+description: Formatting, i18n, and general utilities
+---
+
+## formatting.ts
+
+Locale-aware date, number, and currency formatting.
+
+```ts
+import { formatDate, formatDateTime } from '@/lib/formatting';
+
+// Format based on current i18n language
+formatDate('2024-03-15'); // "Mar 15, 2024" (en)
+formatDate('2024-03-15'); // "2024年3月15日" (zh)
+
+formatDateTime('2024-03-15T10:30'); // "Mar 15, 2024, 10:30 AM" (en)
+```
+
+Uses the current i18next language for locale-aware formatting.
+
+## i18n.ts
+
+Internationalization setup with i18next and expo-localization.
+
+```ts
+import { detectDeviceLanguage, isRTL } from '@/lib/i18n';
+
+// Detect device language
+const lang = detectDeviceLanguage(); // 'en' | 'zh' | 'ar'
+
+// Check RTL layout
+const rtl = isRTL('ar'); // true
+```
+
+**Supported languages:**
+- English (`en`) — Default
+- Chinese (`zh`) — Simplified Chinese
+- Arabic (`ar`) — Right-to-left support
+
+Translation files are stored in `/locales/{lang}.json` with nested keys (e.g., `common.ok`, `screens.home.title`).
+
+i18next is initialized with the `translation` namespace and default key separator (`.`).
+
+## feature-flags.ts
+
+Feature flag manager with A/B testing support.
+
+```ts
+import { createFeatureFlagManager } from '@/lib/feature-flags';
+
+const manager = createFeatureFlagManager({
+ flags: {
+ 'new-dashboard': { enabled: true, rollout: 50 },
+ 'ai-search': { enabled: false },
+ },
+});
+
+// Evaluate a flag (considers rollout percentage)
+const isEnabled = manager.evaluate('new-dashboard', userId);
+```
+
+Uses `hashUserToPercentage()` for deterministic percentage-based bucketing.
+
+## remote-config.ts
+
+Remote configuration with local MMKV fallback.
+
+```ts
+import { createRemoteConfigManager } from '@/lib/remote-config';
+
+const config = createRemoteConfigManager({
+ endpoint: 'https://server.objectstack.com/config',
+ pollInterval: 300000, // 5 minutes
+});
+
+// Fetch latest config
+await config.refresh();
+
+// Get a value (falls back to cached)
+const value = config.get('maxUploadSizeMB'); // 10
+```
+
+## app-store-review.ts
+
+App Store submission checklist validation.
+
+```ts
+import type { ReviewChecklist } from '@/lib/app-store-review';
+
+// Validates against expo app.json config
+// Checks: metadata, assets, privacy, compliance
+```
+
+## utils.ts
+
+Tailwind CSS class merging utility.
+
+```ts
+import { cn } from '@/lib/utils';
+
+// Merge and deduplicate Tailwind classes
+cn('p-4 bg-white', isActive && 'bg-blue-500', className);
+```
+
+Uses `clsx` + `tailwind-merge` for conditional class composition.
From 9044c0a1f1509a6e67fabbb862513a84e514c04d Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 10 Feb 2026 01:54:23 +0000
Subject: [PATCH 07/10] docs: add fumadocs pages for features, deployment, and
contributing
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
---
apps/docs/content/docs/contributing/index.mdx | 129 ++++++++++++++++++
apps/docs/content/docs/contributing/meta.json | 4 +
apps/docs/content/docs/deployment/index.mdx | 118 ++++++++++++++++
apps/docs/content/docs/deployment/meta.json | 4 +
apps/docs/content/docs/features/ai.mdx | 73 ++++++++++
apps/docs/content/docs/features/analytics.mdx | 74 ++++++++++
apps/docs/content/docs/features/i18n.mdx | 97 +++++++++++++
apps/docs/content/docs/features/meta.json | 4 +
.../content/docs/features/notifications.mdx | 66 +++++++++
apps/docs/content/docs/features/realtime.mdx | 76 +++++++++++
apps/docs/content/docs/features/workflows.mdx | 61 +++++++++
11 files changed, 706 insertions(+)
create mode 100644 apps/docs/content/docs/contributing/index.mdx
create mode 100644 apps/docs/content/docs/contributing/meta.json
create mode 100644 apps/docs/content/docs/deployment/index.mdx
create mode 100644 apps/docs/content/docs/deployment/meta.json
create mode 100644 apps/docs/content/docs/features/ai.mdx
create mode 100644 apps/docs/content/docs/features/analytics.mdx
create mode 100644 apps/docs/content/docs/features/i18n.mdx
create mode 100644 apps/docs/content/docs/features/meta.json
create mode 100644 apps/docs/content/docs/features/notifications.mdx
create mode 100644 apps/docs/content/docs/features/realtime.mdx
create mode 100644 apps/docs/content/docs/features/workflows.mdx
diff --git a/apps/docs/content/docs/contributing/index.mdx b/apps/docs/content/docs/contributing/index.mdx
new file mode 100644
index 0000000..b72e65a
--- /dev/null
+++ b/apps/docs/content/docs/contributing/index.mdx
@@ -0,0 +1,129 @@
+---
+title: Contributing
+description: Development guidelines and contribution process
+---
+
+## Development Setup
+
+```bash
+# Clone and install
+git clone https://github.com/objectstack-ai/mobile.git
+cd mobile
+pnpm install
+
+# Start development
+pnpm start
+```
+
+## Project Conventions
+
+### File Naming
+
+- **Components**: PascalCase (`FormViewRenderer.tsx`)
+- **Hooks**: camelCase with `use` prefix (`useOfflineSync.ts`)
+- **Libraries**: kebab-case (`offline-storage.ts`)
+- **Tests**: `__tests__/{dir}/{name}.test.ts`
+
+### Code Style
+
+- **TypeScript** — Strict mode, no `any` types
+- **React** — Functional components with hooks only
+- **Styling** — NativeWind (Tailwind CSS) via `className` prop
+- **Imports** — Path aliases (`@/components/`, `@/hooks/`, `@/lib/`)
+
+### Component Guidelines
+
+```tsx
+// Prefer explicit prop interfaces
+interface MyComponentProps {
+ title: string;
+ onPress: () => void;
+ className?: string;
+}
+
+// Use NativeWind for styling
+export function MyComponent({ title, onPress, className }: MyComponentProps) {
+ return (
+
+ {title}
+
+ );
+}
+```
+
+### Hook Guidelines
+
+```tsx
+// Follow the pattern: fetch → transform → return
+export function useMyHook(param: string) {
+ const client = useClient();
+ const [state, setState] = useState(initialState);
+
+ const action = useCallback(async () => {
+ // implementation
+ }, [client, param]);
+
+ return { state, action, isLoading };
+}
+```
+
+## Testing
+
+### Running Tests
+
+```bash
+# All tests
+pnpm test
+
+# Specific test
+npx jest __tests__/hooks/useOfflineSync.test.ts
+
+# With coverage
+pnpm test:coverage
+```
+
+### Test Organization
+
+```
+__tests__/
+├── hooks/ # Hook unit tests
+├── lib/ # Library unit tests
+└── components/ # Component snapshot tests
+```
+
+### Testing Patterns
+
+- **Hooks**: Use `@testing-library/react-native` with `renderHook`
+- **Components**: Snapshot tests for rendering
+- **Mocking**: Mock `useClient()` with a stable object reference to prevent infinite re-render loops
+
+```ts
+// Always use stable mock references
+const mockClient = {
+ data: { list: jest.fn(), create: jest.fn() },
+ meta: { getObject: jest.fn() },
+};
+jest.mock('@/hooks/useObjectStack', () => ({
+ useClient: () => mockClient,
+}));
+```
+
+## Pull Request Process
+
+1. Create a feature branch from `main`
+2. Make changes following the conventions above
+3. Add/update tests for your changes
+4. Run `pnpm test` and `pnpm lint`
+5. Submit a PR with a clear description
+6. Address review feedback
+
+## Commit Messages
+
+Follow conventional commits:
+
+```
+feat: add kanban view drag-and-drop
+fix: resolve offline sync retry logic
+docs: update API integration guide
+test: add useWorkflowState unit tests
+```
diff --git a/apps/docs/content/docs/contributing/meta.json b/apps/docs/content/docs/contributing/meta.json
new file mode 100644
index 0000000..14a168a
--- /dev/null
+++ b/apps/docs/content/docs/contributing/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Contributing",
+ "pages": ["index"]
+}
diff --git a/apps/docs/content/docs/deployment/index.mdx b/apps/docs/content/docs/deployment/index.mdx
new file mode 100644
index 0000000..35e930e
--- /dev/null
+++ b/apps/docs/content/docs/deployment/index.mdx
@@ -0,0 +1,118 @@
+---
+title: Deployment
+description: Building, deploying, and CI/CD for ObjectStack Mobile
+---
+
+## Build System
+
+ObjectStack Mobile uses **Expo Application Services (EAS)** for building and deploying.
+
+### Local Development
+
+```bash
+# Start development server
+pnpm start
+
+# Platform-specific
+pnpm ios # iOS Simulator
+pnpm android # Android Emulator
+pnpm web # Web browser
+```
+
+### EAS Build
+
+```bash
+# Install EAS CLI
+npm install -g eas-cli
+
+# Build for development
+eas build --profile development --platform ios
+eas build --profile development --platform android
+
+# Build for production
+eas build --profile production --platform all
+```
+
+### EAS Update (OTA)
+
+```bash
+# Push an over-the-air update
+eas update --branch production --message "Bug fixes"
+```
+
+## Environment Configuration
+
+Environment variables are managed through `.env` files:
+
+```bash
+# .env.example
+EXPO_PUBLIC_API_URL=https://your-server.objectstack.com
+EXPO_PUBLIC_SENTRY_DSN=https://your-sentry-dsn
+EXPO_PUBLIC_ANALYTICS_ENDPOINT=https://analytics.objectstack.com
+```
+
+## CI/CD Pipeline
+
+The recommended CI/CD pipeline uses GitHub Actions:
+
+```yaml
+# .github/workflows/ci.yml
+name: CI
+on: [push, pull_request]
+jobs:
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: pnpm/action-setup@v4
+ - run: pnpm install
+ - run: pnpm test
+ - run: pnpm lint
+
+ build:
+ needs: test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: expo/expo-github-action@v8
+ - run: eas build --non-interactive --platform all
+```
+
+## Testing
+
+```bash
+# Run all tests
+pnpm test
+
+# With coverage
+pnpm test:coverage
+
+# Lint
+pnpm lint
+
+# Format check
+pnpm format:check
+```
+
+## App Configuration
+
+The app is configured via `app.config.ts` and `eas.json`:
+
+- **app.config.ts** — App name, icons, splash screen, plugins, bundle IDs
+- **eas.json** — EAS Build profiles (development, preview, production)
+- **app.json** — Static Expo config
+
+## Versioning
+
+The project uses **Changesets** for version management:
+
+```bash
+# Create a changeset
+pnpm changeset
+
+# Version packages
+pnpm version-packages
+
+# Publish
+pnpm release
+```
diff --git a/apps/docs/content/docs/deployment/meta.json b/apps/docs/content/docs/deployment/meta.json
new file mode 100644
index 0000000..1a3893b
--- /dev/null
+++ b/apps/docs/content/docs/deployment/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Deployment",
+ "pages": ["index"]
+}
diff --git a/apps/docs/content/docs/features/ai.mdx b/apps/docs/content/docs/features/ai.mdx
new file mode 100644
index 0000000..0c939f9
--- /dev/null
+++ b/apps/docs/content/docs/features/ai.mdx
@@ -0,0 +1,73 @@
+---
+title: AI Integration
+description: Natural Language Query, AI chat, suggestions, and insights
+---
+
+ObjectStack Mobile integrates AI capabilities through the `useAI` hook and the SDK's `ai` API namespace.
+
+## Natural Language Query (NLQ)
+
+Convert plain English questions into data queries:
+
+```ts
+const { nlq } = useAI();
+
+const result = await nlq('Show me all deals over $50,000 closing this month');
+// {
+// records: [...],
+// query: { /* generated ObjectQL */ },
+// explanation: 'Filtered deals where amount > 50000 and close_date is in current month'
+// }
+```
+
+NLQ supports optional object scoping:
+
+```ts
+const result = await nlq('Top 10 by revenue', 'customers');
+```
+
+## AI Chat
+
+Context-aware conversational AI:
+
+```ts
+const { chat, clearConversation } = useAI();
+
+const response = await chat('Summarize this record', {
+ objectName: 'deals',
+ recordId: 'rec_123',
+});
+// { message: 'This deal is...', suggestions: [...] }
+
+// Clear conversation history
+clearConversation();
+```
+
+## Smart Suggestions
+
+Get AI-powered suggestions for form fields and actions:
+
+```ts
+const { suggest } = useAI();
+
+const suggestions = await suggest({
+ objectName: 'contacts',
+ field: 'industry',
+ context: { name: 'Acme Corp', website: 'acme.com' },
+});
+// ['Technology', 'Software', 'SaaS']
+```
+
+## Data Insights
+
+AI-generated insights about records and datasets:
+
+```ts
+const { insights } = useAI();
+
+// Object-level insights
+const objectInsights = await insights('summary');
+
+// Record-specific insights
+const recordInsights = await insights('analysis', 'rec_123');
+```
diff --git a/apps/docs/content/docs/features/analytics.mdx b/apps/docs/content/docs/features/analytics.mdx
new file mode 100644
index 0000000..419c21e
--- /dev/null
+++ b/apps/docs/content/docs/features/analytics.mdx
@@ -0,0 +1,74 @@
+---
+title: Analytics
+description: Event tracking and data analytics
+---
+
+## Event Tracking
+
+The analytics system provides two levels of tracking:
+
+### Page View Tracking
+
+Automatically log screen views:
+
+```ts
+import { usePageView } from '@/hooks/useAnalyticsTracking';
+
+function ContactListScreen() {
+ usePageView('ContactList', { objectName: 'contacts' });
+ // ...
+}
+```
+
+### Action Tracking
+
+Track custom user actions:
+
+```ts
+import { useTrackAction } from '@/hooks/useAnalyticsTracking';
+
+function CreateButton() {
+ const { trackAction } = useTrackAction();
+
+ const handleCreate = () => {
+ trackAction('record_created', {
+ objectName: 'contacts',
+ source: 'fab_button',
+ });
+ };
+}
+```
+
+## Analytics Queries
+
+Query aggregated analytics data:
+
+```ts
+import { useAnalyticsQuery } from '@/hooks/useAnalyticsQuery';
+
+const { data, total } = useAnalyticsQuery({
+ metric: 'record_count',
+ dimensions: ['status'],
+ aggregation: 'count',
+ dateRange: {
+ start: '2024-01-01',
+ end: '2024-12-31',
+ },
+});
+```
+
+## Analytics Backend
+
+Events are processed through `lib/analytics.ts`:
+
+```ts
+import { createAnalyticsTracker } from '@/lib/analytics';
+
+const tracker = createAnalyticsTracker({
+ endpoint: '/api/analytics/events',
+ batchSize: 20, // Flush every 20 events
+ flushInterval: 30000, // Or every 30 seconds
+});
+```
+
+Events are queued in memory and flushed in batches to minimize network requests.
diff --git a/apps/docs/content/docs/features/i18n.mdx b/apps/docs/content/docs/features/i18n.mdx
new file mode 100644
index 0000000..a4782b0
--- /dev/null
+++ b/apps/docs/content/docs/features/i18n.mdx
@@ -0,0 +1,97 @@
+---
+title: Internationalization
+description: Multi-language support and RTL layout
+---
+
+ObjectStack Mobile supports multiple languages with full right-to-left (RTL) layout support.
+
+## Supported Languages
+
+| Language | Code | Direction |
+|----------|------|-----------|
+| English | `en` | LTR |
+| Chinese (Simplified) | `zh` | LTR |
+| Arabic | `ar` | RTL |
+
+## Setup
+
+i18n is initialized in `lib/i18n.ts` using i18next with expo-localization:
+
+```ts
+import { detectDeviceLanguage, isRTL } from '@/lib/i18n';
+
+// Auto-detect device language
+const language = detectDeviceLanguage(); // 'en' | 'zh' | 'ar'
+
+// Check if language requires RTL layout
+const rtl = isRTL(language); // true for 'ar'
+```
+
+## Using Translations
+
+In components, use the `useTranslation` hook from react-i18next:
+
+```tsx
+import { useTranslation } from 'react-i18next';
+
+function MyComponent() {
+ const { t } = useTranslation();
+
+ return (
+
+ {t('common.ok')}
+ {t('screens.home.title')}
+
+ );
+}
+```
+
+## Translation Files
+
+Translations are stored in `/locales/{lang}.json` with nested keys:
+
+```json
+{
+ "common": {
+ "ok": "OK",
+ "cancel": "Cancel",
+ "save": "Save",
+ "delete": "Delete"
+ },
+ "screens": {
+ "home": {
+ "title": "Dashboard",
+ "welcome": "Welcome back"
+ }
+ }
+}
+```
+
+## Server-Side Translations
+
+The `useServerTranslations` hook manages server-side translations:
+
+```ts
+const { fetchLocales, fetchTranslations, fetchFieldLabels } = useServerTranslations();
+
+// Fetch available locales
+const locales = await fetchLocales(); // ['en', 'zh', 'ar']
+
+// Fetch translations for a locale
+const translations = await fetchTranslations('zh');
+
+// Fetch field labels for an object
+const labels = await fetchFieldLabels('contacts', 'zh');
+```
+
+## Language Selector
+
+The `LanguageSelector` component provides a native language picker:
+
+```tsx
+import { LanguageSelector } from '@/components/common/LanguageSelector';
+
+
+```
+
+Language selection is persisted in the UI store and applies immediately to all components.
diff --git a/apps/docs/content/docs/features/meta.json b/apps/docs/content/docs/features/meta.json
new file mode 100644
index 0000000..3c0eab7
--- /dev/null
+++ b/apps/docs/content/docs/features/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Features",
+ "pages": ["ai", "workflows", "notifications", "analytics", "i18n", "realtime"]
+}
diff --git a/apps/docs/content/docs/features/notifications.mdx b/apps/docs/content/docs/features/notifications.mdx
new file mode 100644
index 0000000..e10dae6
--- /dev/null
+++ b/apps/docs/content/docs/features/notifications.mdx
@@ -0,0 +1,66 @@
+---
+title: Notifications
+description: Push notifications and preference management
+---
+
+## Notification Management
+
+The `useNotifications` hook provides full notification lifecycle management:
+
+```ts
+const {
+ notifications,
+ unreadCount,
+ isLoading,
+ fetchMore,
+ markAsRead,
+ updatePreferences,
+} = useNotifications();
+```
+
+## Reading Notifications
+
+```tsx
+// Display notifications
+notifications.map(notification => (
+
+));
+
+// Load more (cursor-based pagination)
+await fetchMore();
+
+// Mark as read
+await markAsRead(notification.id);
+```
+
+## Notification Preferences
+
+Users can configure which notifications they receive:
+
+```ts
+await updatePreferences({
+ email: true,
+ push: true,
+ inApp: true,
+ digest: 'daily', // 'realtime' | 'daily' | 'weekly'
+ categories: {
+ workflow: true,
+ mentions: true,
+ updates: false,
+ },
+});
+```
+
+## UI Components
+
+The notification tab (`(tabs)/notifications.tsx`) displays the notification feed with:
+- Unread badge counter on the tab icon
+- Pull-to-refresh for latest notifications
+- Infinite scroll pagination
+- Swipe-to-mark-read gesture
diff --git a/apps/docs/content/docs/features/realtime.mdx b/apps/docs/content/docs/features/realtime.mdx
new file mode 100644
index 0000000..1551ece
--- /dev/null
+++ b/apps/docs/content/docs/features/realtime.mdx
@@ -0,0 +1,76 @@
+---
+title: Real-time Collaboration
+description: WebSocket subscriptions and live presence
+---
+
+ObjectStack Mobile supports real-time data updates and presence awareness through WebSocket connections.
+
+## Subscriptions
+
+The `useSubscription` hook manages WebSocket connections for live data updates:
+
+```ts
+const {
+ isConnected,
+ connectionId,
+ subscriptionId,
+ presence,
+ connect,
+ disconnect,
+} = useSubscription({
+ objectName: 'contacts',
+ onEvent: (event) => {
+ switch (event.type) {
+ case 'record.created':
+ // Handle new record
+ break;
+ case 'record.updated':
+ // Handle update
+ break;
+ case 'record.deleted':
+ // Handle deletion
+ break;
+ }
+ },
+});
+```
+
+## Connection Lifecycle
+
+```ts
+// Connect when entering a view
+connect();
+
+// Disconnect when leaving
+disconnect();
+```
+
+The hook automatically handles reconnection when the network drops and reconnects.
+
+## Presence
+
+Track which users are viewing the same data:
+
+```ts
+const { presence } = useSubscription({
+ objectName: 'contacts',
+ onEvent: handleEvent,
+});
+
+// presence: [{ userId, userName, avatar, lastSeen }]
+```
+
+## CollaborationIndicator
+
+Visual indicator showing other active users:
+
+```tsx
+import { CollaborationIndicator } from '@/components/realtime/CollaborationIndicator';
+
+
+```
+
+Displays overlapping user avatars with a "+N more" indicator.
diff --git a/apps/docs/content/docs/features/workflows.mdx b/apps/docs/content/docs/features/workflows.mdx
new file mode 100644
index 0000000..dc40376
--- /dev/null
+++ b/apps/docs/content/docs/features/workflows.mdx
@@ -0,0 +1,61 @@
+---
+title: Workflows
+description: Workflow state management and approval flows
+---
+
+ObjectStack Mobile supports workflow-driven record management through the `useWorkflowState` hook.
+
+## Workflow State
+
+Each workflow-enabled record has a current state, available transitions, and an audit history:
+
+```ts
+const {
+ currentState,
+ availableActions,
+ history,
+ transition,
+ approve,
+ reject,
+} = useWorkflowState('deals', recordId);
+```
+
+## State Transitions
+
+Move a record through its workflow:
+
+```ts
+// Advance to next stage
+await transition('submit_for_review', 'Ready for review');
+
+// Custom transition
+await transition('escalate', 'Needs manager attention');
+```
+
+## Approvals
+
+Approve or reject records in approval workflows:
+
+```ts
+// Approve with optional comment
+await approve('Approved - meets all criteria');
+
+// Reject with required reason and optional comment
+await reject('Incomplete documentation', 'Please attach the signed contract');
+```
+
+The `reject` function requires a `reason` string (first parameter) and accepts an optional `comment`.
+
+## Workflow History
+
+Track all state changes:
+
+```ts
+const { history } = useWorkflowState('deals', recordId);
+
+history.forEach(entry => {
+ console.log(`${entry.fromState} → ${entry.toState}`);
+ console.log(`By: ${entry.userId} at ${entry.timestamp}`);
+ console.log(`Comment: ${entry.comment}`);
+});
+```
From fe5e3d16d2c5ec6e2f22495cd4cdbd0644ff8b48 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 10 Feb 2026 01:57:37 +0000
Subject: [PATCH 08/10] fix: use system font instead of Google Fonts, update
pnpm-lock.yaml
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
---
apps/docs/app/layout.tsx | 7 +-
pnpm-lock.yaml | 3683 +++++++++++++++++++++++++++++++++++++-
2 files changed, 3599 insertions(+), 91 deletions(-)
diff --git a/apps/docs/app/layout.tsx b/apps/docs/app/layout.tsx
index 22fdca3..060b5be 100644
--- a/apps/docs/app/layout.tsx
+++ b/apps/docs/app/layout.tsx
@@ -1,14 +1,9 @@
import { RootProvider } from 'fumadocs-ui/provider/next';
import './global.css';
-import { Inter } from 'next/font/google';
-
-const inter = Inter({
- subsets: ['latin'],
-});
export default function Layout({ children }: LayoutProps<'/'>) {
return (
-
+
{children}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8b15b24..290126e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -10,7 +10,7 @@ importers:
dependencies:
'@better-auth/expo':
specifier: ^1.4.18
- version: 1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(better-auth@1.4.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(expo-constants@18.0.13)(expo-linking@8.0.11)(expo-network@8.0.8(expo@54.0.33)(react@19.1.0))(expo-web-browser@15.0.10(expo@54.0.33)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)))
+ version: 1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(better-auth@1.4.18(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(expo-constants@18.0.13)(expo-linking@8.0.11)(expo-network@8.0.8(expo@54.0.33)(react@19.1.0))(expo-web-browser@15.0.10(expo@54.0.33)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)))
'@objectstack/client':
specifier: ^2.0.1
version: 2.0.1
@@ -28,7 +28,7 @@ importers:
version: 5.90.20(react@19.1.0)
better-auth:
specifier: ^1.4.18
- version: 1.4.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 1.4.18(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
clsx:
specifier: ^2.1.1
version: 2.1.1
@@ -76,7 +76,7 @@ importers:
version: 8.0.8(expo@54.0.33)(react@19.1.0)
expo-router:
specifier: ^6.0.23
- version: 6.0.23(d0f0c85109698bdaf9ca510e3ba974e7)
+ version: 6.0.23(c9e47bd596c3c2158834c3c0e5fd1acd)
expo-secure-store:
specifier: ^15.0.8
version: 15.0.8(expo@54.0.33)
@@ -214,6 +214,58 @@ importers:
specifier: ~5.9.2
version: 5.9.3
+ apps/docs:
+ dependencies:
+ fumadocs-core:
+ specifier: 16.5.2
+ version: 16.5.2(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.13)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ fumadocs-mdx:
+ specifier: 14.2.7
+ version: 14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.13)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.13)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)
+ fumadocs-ui:
+ specifier: 16.5.2
+ version: 16.5.2(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.13)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18)
+ lucide-react:
+ specifier: ^0.563.0
+ version: 0.563.0(react@19.2.4)
+ next:
+ specifier: 16.1.6
+ version: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react:
+ specifier: ^19.2.4
+ version: 19.2.4
+ react-dom:
+ specifier: ^19.2.4
+ version: 19.2.4(react@19.2.4)
+ tailwind-merge:
+ specifier: ^3.4.0
+ version: 3.4.0
+ devDependencies:
+ '@tailwindcss/postcss':
+ specifier: ^4.1.18
+ version: 4.1.18
+ '@types/mdx':
+ specifier: ^2.0.13
+ version: 2.0.13
+ '@types/node':
+ specifier: ^25.2.1
+ version: 25.2.2
+ '@types/react':
+ specifier: ^19.2.13
+ version: 19.2.13
+ '@types/react-dom':
+ specifier: ^19.2.3
+ version: 19.2.3(@types/react@19.2.13)
+ postcss:
+ specifier: ^8.5.6
+ version: 8.5.6
+ tailwindcss:
+ specifier: ^4.1.18
+ version: 4.1.18
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+
packages:
'@0no-co/graphql.web@1.2.0':
@@ -872,6 +924,165 @@ packages:
resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==}
engines: {node: '>=0.8.0'}
+ '@emnapi/runtime@1.8.1':
+ resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
+
+ '@esbuild/aix-ppc64@0.27.3':
+ resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.27.3':
+ resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.3':
+ resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.3':
+ resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.27.3':
+ resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.3':
+ resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.27.3':
+ resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.3':
+ resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.27.3':
+ resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.3':
+ resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.3':
+ resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.3':
+ resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.3':
+ resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.3':
+ resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.3':
+ resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.3':
+ resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.3':
+ resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.3':
+ resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.3':
+ resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.27.3':
+ resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.27.3':
+ resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.27.3':
+ resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.3':
+ resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.3':
+ resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@eslint-community/eslint-utils@4.9.1':
resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1006,6 +1217,35 @@ packages:
resolution: {integrity: sha512-o2qDlTqJ606h4xR36H2zWTywmZ3v3842K6TU8Ik2n1mfW0S580VHlt3eItVYdLYz+klaPp7CXqanja8eASZjRw==}
hasBin: true
+ '@floating-ui/core@1.7.4':
+ resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==}
+
+ '@floating-ui/dom@1.7.5':
+ resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==}
+
+ '@floating-ui/react-dom@2.1.7':
+ resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@floating-ui/utils@0.2.10':
+ resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
+
+ '@formatjs/fast-memoize@3.1.0':
+ resolution: {integrity: sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==}
+
+ '@formatjs/intl-localematcher@0.8.1':
+ resolution: {integrity: sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==}
+
+ '@fumadocs/tailwind@0.0.2':
+ resolution: {integrity: sha512-4JrTJLRDKKdFF3gy07rAsakqGr17/0cJE042B1icCmMRrPA4a38cjR1qd4EqUiDJ+fzM0wgVN9QYiqds3HB2rg==}
+ peerDependencies:
+ tailwindcss: ^4.0.0
+ peerDependenciesMeta:
+ tailwindcss:
+ optional: true
+
'@humanwhocodes/config-array@0.13.0':
resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
engines: {node: '>=10.10.0'}
@@ -1019,6 +1259,159 @@ packages:
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
deprecated: Use @eslint/object-schema instead
+ '@img/colour@1.0.0':
+ resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==}
+ engines: {node: '>=18'}
+
+ '@img/sharp-darwin-arm64@0.34.5':
+ resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-darwin-x64@0.34.5':
+ resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-arm64@1.2.4':
+ resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-x64@1.2.4':
+ resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-linux-arm64@1.2.4':
+ resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-arm@1.2.4':
+ resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-ppc64@1.2.4':
+ resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-riscv64@1.2.4':
+ resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-s390x@1.2.4':
+ resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linux-x64@1.2.4':
+ resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
+ resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-libvips-linuxmusl-x64@1.2.4':
+ resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-linux-arm64@0.34.5':
+ resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-arm@0.34.5':
+ resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-ppc64@0.34.5':
+ resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-riscv64@0.34.5':
+ resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-s390x@0.34.5':
+ resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linux-x64@0.34.5':
+ resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@img/sharp-linuxmusl-arm64@0.34.5':
+ resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-linuxmusl-x64@0.34.5':
+ resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@img/sharp-wasm32@0.34.5':
+ resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [wasm32]
+
+ '@img/sharp-win32-arm64@0.34.5':
+ resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@img/sharp-win32-ia32@0.34.5':
+ resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@img/sharp-win32-x64@0.34.5':
+ resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [win32]
+
'@inquirer/ansi@1.0.2':
resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
engines: {node: '>=18'}
@@ -1182,10 +1575,68 @@ packages:
'@manypkg/get-packages@1.1.3':
resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
+ '@mdx-js/mdx@3.1.1':
+ resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
+
'@mswjs/interceptors@0.41.2':
resolution: {integrity: sha512-7G0Uf0yK3f2bjElBLGHIQzgRgMESczOMyYVasq1XK8P5HaXtlW4eQhz9MBL+TQILZLaruq+ClGId+hH0w4jvWw==}
engines: {node: '>=18'}
+ '@next/env@16.1.6':
+ resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==}
+
+ '@next/swc-darwin-arm64@16.1.6':
+ resolution: {integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@next/swc-darwin-x64@16.1.6':
+ resolution: {integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@next/swc-linux-arm64-gnu@16.1.6':
+ resolution: {integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@next/swc-linux-arm64-musl@16.1.6':
+ resolution: {integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@next/swc-linux-x64-gnu@16.1.6':
+ resolution: {integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@next/swc-linux-x64-musl@16.1.6':
+ resolution: {integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@next/swc-win32-arm64-msvc@16.1.6':
+ resolution: {integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@next/swc-win32-x64-msvc@16.1.6':
+ resolution: {integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
'@noble/ciphers@2.1.1':
resolution: {integrity: sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==}
engines: {node: '>= 20.19.0'}
@@ -1235,11 +1686,18 @@ packages:
'@open-draft/until@2.1.0':
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
+ '@orama/orama@3.1.18':
+ resolution: {integrity: sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==}
+ engines: {node: '>= 20.0.0'}
+
+ '@radix-ui/number@1.1.1':
+ resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
+
'@radix-ui/primitive@1.1.3':
resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
- '@radix-ui/react-collection@1.1.7':
- resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
+ '@radix-ui/react-accordion@1.2.12':
+ resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1251,26 +1709,65 @@ packages:
'@types/react-dom':
optional: true
- '@radix-ui/react-compose-refs@1.1.2':
- resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
+ '@radix-ui/react-arrow@1.1.7':
+ resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
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-context@1.1.2':
- resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
+ '@radix-ui/react-collapsible@1.1.12':
+ resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==}
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-dialog@1.1.15':
- resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
+ '@radix-ui/react-collection@1.1.7':
+ resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
+ 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-compose-refs@1.1.2':
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
+ 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.2':
+ resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
+ 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.15':
+ resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -1335,6 +1832,45 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-navigation-menu@1.2.14':
+ resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==}
+ 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-popover@1.1.15':
+ resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==}
+ 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-popper@1.2.8':
+ resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
+ 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-portal@1.1.9':
resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
peerDependencies:
@@ -1387,6 +1923,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-scroll-area@1.2.10':
+ resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==}
+ 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.2.0':
resolution: {integrity: sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==}
peerDependencies:
@@ -1405,6 +1954,15 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-slot@1.2.4':
+ resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-tabs@1.1.13':
resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==}
peerDependencies:
@@ -1463,6 +2021,49 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-use-previous@1.1.1':
+ resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==}
+ 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-rect@1.1.1':
+ resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
+ 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-size@1.1.1':
+ resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-visually-hidden@1.2.3':
+ resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==}
+ 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/rect@1.1.1':
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
+
'@react-native/assets-registry@0.81.5':
resolution: {integrity: sha512-705B6x/5Kxm1RKRvSv0ADYWm5JOnoiQ1ufW7h8uu2E6G9Of/eE6hP/Ivw3U5jI16ERqZxiKQwk34VJbB0niX9w==}
engines: {node: '>= 20.19.4'}
@@ -1673,6 +2274,33 @@ packages:
resolution: {integrity: sha512-DoeyTv/TvnoVDhHgdyv/wehieAKdyjLjEMtPOqqq/AjkP02BxeC0JYUrrWKOjV0wdLq5ZP8jKcCX8GN7awZonQ==}
engines: {node: '>=18'}
+ '@shikijs/core@3.22.0':
+ resolution: {integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==}
+
+ '@shikijs/engine-javascript@3.22.0':
+ resolution: {integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==}
+
+ '@shikijs/engine-oniguruma@3.22.0':
+ resolution: {integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==}
+
+ '@shikijs/langs@3.22.0':
+ resolution: {integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==}
+
+ '@shikijs/rehype@3.22.0':
+ resolution: {integrity: sha512-69b2VPc6XBy/VmAJlpBU5By+bJSBdE2nvgRCZXav7zujbrjXuT0F60DIrjKuutjPqNufuizE+E8tIZr2Yn8Z+g==}
+
+ '@shikijs/themes@3.22.0':
+ resolution: {integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==}
+
+ '@shikijs/transformers@3.22.0':
+ resolution: {integrity: sha512-E7eRV7mwDBjueLF6852n2oYeJYxBq3NSsDk+uyruYAXONv4U8holGmIrT+mPRJQ1J1SNOH6L8G19KRzmBawrFw==}
+
+ '@shikijs/types@3.22.0':
+ resolution: {integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==}
+
+ '@shikijs/vscode-textmate@10.0.2':
+ resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+
'@shopify/flash-list@2.2.2':
resolution: {integrity: sha512-YrvLBK5FCpvuX+d9QvJvjVqyi4eBUaEamkyfh9CjPdF6c+AukP0RSBh97qHyTwOEaVq21A5ukwgyWMDIbmxpmQ==}
peerDependencies:
@@ -1692,6 +2320,101 @@ packages:
'@standard-schema/spec@1.1.0':
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
+ '@swc/helpers@0.5.15':
+ resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
+
+ '@tailwindcss/node@4.1.18':
+ resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==}
+
+ '@tailwindcss/oxide-android-arm64@4.1.18':
+ resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+
+ '@tailwindcss/oxide-darwin-arm64@4.1.18':
+ resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-darwin-x64@4.1.18':
+ resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-freebsd-x64@4.1.18':
+ resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
+ resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
+ resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.18':
+ resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.18':
+ resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.1.18':
+ resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@tailwindcss/oxide-wasm32-wasi@4.1.18':
+ resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
+ resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.18':
+ resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.1.18':
+ resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==}
+ engines: {node: '>= 10'}
+
+ '@tailwindcss/postcss@4.1.18':
+ resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==}
+
'@tanstack/query-core@5.90.20':
resolution: {integrity: sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==}
@@ -1739,12 +2462,24 @@ packages:
'@types/babel__traverse@7.28.0':
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+ '@types/debug@4.1.12':
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+
+ '@types/estree-jsx@1.0.5':
+ resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
'@types/graceful-fs@4.1.9':
resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
'@types/hammerjs@2.0.46':
resolution: {integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==}
+ '@types/hast@3.0.4':
+ resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+
'@types/istanbul-lib-coverage@2.0.6':
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
@@ -1760,15 +2495,32 @@ packages:
'@types/jsdom@20.0.1':
resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==}
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+
+ '@types/mdx@2.0.13':
+ resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
+
+ '@types/ms@2.1.0':
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+
'@types/node@12.20.55':
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
'@types/node@25.2.2':
resolution: {integrity: sha512-BkmoP5/FhRYek5izySdkOneRyXYN35I860MFAGupTdebyE66uZaR+bXLHq8k4DirE5DwQi3NuhvRU1jqTVwUrQ==}
+ '@types/react-dom@19.2.3':
+ resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
+ peerDependencies:
+ '@types/react': ^19.2.0
+
'@types/react@19.1.17':
resolution: {integrity: sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==}
+ '@types/react@19.2.13':
+ resolution: {integrity: sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==}
+
'@types/stack-utils@2.0.3':
resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
@@ -1778,6 +2530,12 @@ packages:
'@types/tough-cookie@4.0.5':
resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
+ '@types/unist@2.0.11':
+ resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
+
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
'@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
@@ -1994,6 +2752,10 @@ packages:
asap@2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
async-function@1.0.0:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
@@ -2079,6 +2841,9 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
+ bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -2248,6 +3013,9 @@ packages:
caniuse-lite@1.0.30001769:
resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==}
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+
chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
@@ -2268,6 +3036,18 @@ packages:
resolution: {integrity: sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==}
engines: {node: '>=12.20'}
+ character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+
+ character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+
+ character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+
+ character-reference-invalid@2.0.1:
+ resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+
chardet@2.1.1:
resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
@@ -2275,6 +3055,10 @@ packages:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
+ chokidar@5.0.0:
+ resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
+ engines: {node: '>= 20.19.0'}
+
chownr@3.0.0:
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'}
@@ -2297,6 +3081,9 @@ packages:
cjs-module-lexer@1.4.3:
resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==}
+ class-variance-authority@0.7.1:
+ resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
+
cli-cursor@2.1.0:
resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==}
engines: {node: '>=4'}
@@ -2328,6 +3115,9 @@ packages:
resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+ collapse-white-space@2.1.0:
+ resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
+
collect-v8-coverage@1.0.3:
resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==}
@@ -2358,6 +3148,9 @@ packages:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
commander@12.1.0:
resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
engines: {node: '>=18'}
@@ -2385,6 +3178,9 @@ packages:
resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==}
engines: {node: '>= 0.8.0'}
+ compute-scroll-into-view@3.1.1:
+ resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==}
+
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -2503,6 +3299,9 @@ packages:
decimal.js@10.6.0:
resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
+ decode-named-character-reference@1.3.0:
+ resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==}
+
decode-uri-component@0.2.2:
resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
engines: {node: '>=0.10'}
@@ -2552,6 +3351,10 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
destroy@1.2.0:
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
@@ -2576,6 +3379,9 @@ packages:
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==}
+
didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
@@ -2656,6 +3462,10 @@ packages:
end-of-stream@1.4.5:
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+ enhanced-resolve@5.19.0:
+ resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==}
+ engines: {node: '>=10.13.0'}
+
enquirer@2.4.1:
resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
engines: {node: '>=8.6'}
@@ -2710,6 +3520,17 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
+ esast-util-from-estree@2.0.0:
+ resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
+
+ esast-util-from-js@2.0.1:
+ resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
+
+ esbuild@0.27.3:
+ resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -2729,6 +3550,10 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+
escodegen@2.1.0:
resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
engines: {node: '>=6.0'}
@@ -2787,6 +3612,30 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ estree-util-attach-comments@3.0.0:
+ resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
+
+ estree-util-build-jsx@3.0.1:
+ resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
+
+ estree-util-is-identifier-name@3.0.0:
+ resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
+
+ estree-util-scope@1.0.0:
+ resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==}
+
+ estree-util-to-js@2.0.0:
+ resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
+
+ estree-util-value-to-estree@3.5.0:
+ resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==}
+
+ estree-util-visit@2.0.0:
+ resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
@@ -3018,6 +3867,9 @@ packages:
exponential-backoff@3.1.3:
resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==}
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
extendable-error@0.1.7:
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
@@ -3106,6 +3958,20 @@ packages:
resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
engines: {node: '>= 6'}
+ framer-motion@12.34.0:
+ resolution: {integrity: sha512-+/H49owhzkzQyxtn7nZeF4kdH++I2FWrESQ184Zbcw5cEqNHYkE5yxWxcTLSj5lNx3NWdbIRy5FHqUvetD8FWg==}
+ peerDependencies:
+ '@emotion/is-prop-valid': '*'
+ react: ^18.0.0 || ^19.0.0
+ react-dom: ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@emotion/is-prop-valid':
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+
freeport-async@2.0.0:
resolution: {integrity: sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==}
engines: {node: '>=8'}
@@ -3130,24 +3996,134 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
- function-bind@1.1.2:
- resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
- function.prototype.name@1.1.8:
- resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
- engines: {node: '>= 0.4'}
-
- functions-have-names@1.2.3:
- resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
-
- generator-function@2.0.1:
- resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
- engines: {node: '>= 0.4'}
-
- gensync@1.0.0-beta.2:
- resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
- engines: {node: '>=6.9.0'}
-
+ fumadocs-core@16.5.2:
+ resolution: {integrity: sha512-qboEOEiWtL0E++ADaEpXwC4rAi/S3s9gzVzGexPRzds6s3Q8NaNt9NUXc1brRIqLVUrW1mv7fw41rol7ZqF9Xw==}
+ peerDependencies:
+ '@mdx-js/mdx': '*'
+ '@mixedbread/sdk': ^0.46.0
+ '@orama/core': 1.x.x
+ '@oramacloud/client': 2.x.x
+ '@tanstack/react-router': 1.x.x
+ '@types/estree-jsx': '*'
+ '@types/hast': '*'
+ '@types/mdast': '*'
+ '@types/react': '*'
+ algoliasearch: 5.x.x
+ lucide-react: '*'
+ mdast-util-mdx-jsx: '*'
+ next: 16.x.x
+ react: ^19.2.0
+ react-dom: ^19.2.0
+ react-router: 7.x.x
+ waku: ^0.26.0 || ^0.27.0 || ^1.0.0
+ zod: 4.x.x
+ peerDependenciesMeta:
+ '@mdx-js/mdx':
+ optional: true
+ '@mixedbread/sdk':
+ optional: true
+ '@orama/core':
+ optional: true
+ '@oramacloud/client':
+ optional: true
+ '@tanstack/react-router':
+ optional: true
+ '@types/estree-jsx':
+ optional: true
+ '@types/hast':
+ optional: true
+ '@types/mdast':
+ optional: true
+ '@types/react':
+ optional: true
+ algoliasearch:
+ optional: true
+ lucide-react:
+ optional: true
+ mdast-util-mdx-jsx:
+ optional: true
+ next:
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+ react-router:
+ optional: true
+ waku:
+ optional: true
+ zod:
+ optional: true
+
+ fumadocs-mdx@14.2.7:
+ resolution: {integrity: sha512-Q2W79F7wpwhq4HoYPw9GnMpf5ZmpdU7YzZND7EWwwOiWddfyzPh6EH/z7MFhhdhsTqRh9/kwwsu9XslWDRRPsg==}
+ hasBin: true
+ peerDependencies:
+ '@fumadocs/mdx-remote': ^1.4.0
+ '@types/mdast': '*'
+ '@types/mdx': '*'
+ '@types/react': '*'
+ fumadocs-core: ^15.0.0 || ^16.0.0
+ mdast-util-directive: '*'
+ mdast-util-mdx-jsx: '*'
+ next: ^15.3.0 || ^16.0.0
+ react: '*'
+ vite: 6.x.x || 7.x.x
+ peerDependenciesMeta:
+ '@fumadocs/mdx-remote':
+ optional: true
+ '@types/mdast':
+ optional: true
+ '@types/mdx':
+ optional: true
+ '@types/react':
+ optional: true
+ mdast-util-directive:
+ optional: true
+ mdast-util-mdx-jsx:
+ optional: true
+ next:
+ optional: true
+ react:
+ optional: true
+ vite:
+ optional: true
+
+ fumadocs-ui@16.5.2:
+ resolution: {integrity: sha512-CAugxxcmpTk2gxmFPWVGDTxCPUj0zsNkGyjmdYykLbF3El+ssJFOcj8TQFXTnpCpa8J09mYeCLOOponumQiLlw==}
+ peerDependencies:
+ '@types/react': '*'
+ fumadocs-core: 16.5.2
+ next: 16.x.x
+ react: ^19.2.0
+ react-dom: ^19.2.0
+ tailwindcss: ^4.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ next:
+ optional: true
+ tailwindcss:
+ optional: true
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ function.prototype.name@1.1.8:
+ resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
+ engines: {node: '>= 0.4'}
+
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
+ generator-function@2.0.1:
+ resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
+ engines: {node: '>= 0.4'}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -3180,6 +4156,9 @@ packages:
resolution: {integrity: sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==}
engines: {node: '>=6'}
+ github-slugger@2.0.0:
+ resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
+
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -3257,6 +4236,21 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ hast-util-to-estree@3.1.3:
+ resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
+
+ hast-util-to-html@9.0.5:
+ resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
+
+ hast-util-to-jsx-runtime@2.3.6:
+ resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
+
+ hast-util-to-string@3.0.1:
+ resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
+
+ hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+
headers-polyfill@4.0.3:
resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
@@ -3292,6 +4286,9 @@ packages:
html-parse-stringify@3.0.1:
resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==}
+ html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+
http-errors@2.0.1:
resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
engines: {node: '>= 0.8'}
@@ -3347,6 +4344,11 @@ packages:
engines: {node: '>=16.x'}
hasBin: true
+ image-size@2.0.2:
+ resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==}
+ engines: {node: '>=16.x'}
+ hasBin: true
+
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
@@ -3374,6 +4376,9 @@ packages:
ini@1.3.8:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ inline-style-parser@0.2.7:
+ resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
+
inline-style-prefixer@7.0.1:
resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==}
@@ -3384,6 +4389,12 @@ packages:
invariant@2.2.4:
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+ is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+
+ is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+
is-array-buffer@3.0.5:
resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
engines: {node: '>= 0.4'}
@@ -3426,6 +4437,9 @@ packages:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
+ is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+
is-docker@2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
@@ -3455,6 +4469,9 @@ packages:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
+ is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+
is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
@@ -3478,6 +4495,10 @@ packages:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
@@ -3732,6 +4753,10 @@ packages:
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
hasBin: true
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
jose@6.1.3:
resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==}
@@ -3817,6 +4842,12 @@ packages:
lighthouse-logger@1.4.2:
resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==}
+ lightningcss-android-arm64@1.30.2:
+ resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
lightningcss-android-arm64@1.31.1:
resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==}
engines: {node: '>= 12.0.0'}
@@ -3829,6 +4860,12 @@ packages:
cpu: [arm64]
os: [darwin]
+ lightningcss-darwin-arm64@1.30.2:
+ resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
lightningcss-darwin-arm64@1.31.1:
resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==}
engines: {node: '>= 12.0.0'}
@@ -3841,6 +4878,12 @@ packages:
cpu: [x64]
os: [darwin]
+ lightningcss-darwin-x64@1.30.2:
+ resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
lightningcss-darwin-x64@1.31.1:
resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==}
engines: {node: '>= 12.0.0'}
@@ -3853,6 +4896,12 @@ packages:
cpu: [x64]
os: [freebsd]
+ lightningcss-freebsd-x64@1.30.2:
+ resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
lightningcss-freebsd-x64@1.31.1:
resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==}
engines: {node: '>= 12.0.0'}
@@ -3865,6 +4914,12 @@ packages:
cpu: [arm]
os: [linux]
+ lightningcss-linux-arm-gnueabihf@1.30.2:
+ resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
lightningcss-linux-arm-gnueabihf@1.31.1:
resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==}
engines: {node: '>= 12.0.0'}
@@ -3878,6 +4933,13 @@ packages:
os: [linux]
libc: [glibc]
+ lightningcss-linux-arm64-gnu@1.30.2:
+ resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
lightningcss-linux-arm64-gnu@1.31.1:
resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
engines: {node: '>= 12.0.0'}
@@ -3892,6 +4954,13 @@ packages:
os: [linux]
libc: [musl]
+ lightningcss-linux-arm64-musl@1.30.2:
+ resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
lightningcss-linux-arm64-musl@1.31.1:
resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
engines: {node: '>= 12.0.0'}
@@ -3906,6 +4975,13 @@ packages:
os: [linux]
libc: [glibc]
+ lightningcss-linux-x64-gnu@1.30.2:
+ resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
lightningcss-linux-x64-gnu@1.31.1:
resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
engines: {node: '>= 12.0.0'}
@@ -3920,6 +4996,13 @@ packages:
os: [linux]
libc: [musl]
+ lightningcss-linux-x64-musl@1.30.2:
+ resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
lightningcss-linux-x64-musl@1.31.1:
resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
engines: {node: '>= 12.0.0'}
@@ -3933,6 +5016,12 @@ packages:
cpu: [arm64]
os: [win32]
+ lightningcss-win32-arm64-msvc@1.30.2:
+ resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
lightningcss-win32-arm64-msvc@1.31.1:
resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==}
engines: {node: '>= 12.0.0'}
@@ -3945,6 +5034,12 @@ packages:
cpu: [x64]
os: [win32]
+ lightningcss-win32-x64-msvc@1.30.2:
+ resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
lightningcss-win32-x64-msvc@1.31.1:
resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==}
engines: {node: '>= 12.0.0'}
@@ -3955,6 +5050,10 @@ packages:
resolution: {integrity: sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==}
engines: {node: '>= 12.0.0'}
+ lightningcss@1.30.2:
+ resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
+ engines: {node: '>= 12.0.0'}
+
lightningcss@1.31.1:
resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==}
engines: {node: '>= 12.0.0'}
@@ -3993,6 +5092,9 @@ packages:
resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==}
engines: {node: '>=4'}
+ longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
@@ -4014,6 +5116,14 @@ packages:
react-native: '*'
react-native-svg: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0
+ lucide-react@0.563.0:
+ resolution: {integrity: sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==}
+ peerDependencies:
+ react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
@@ -4021,6 +5131,13 @@ packages:
makeerror@1.0.12:
resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+ markdown-extensions@2.0.0:
+ resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
+ engines: {node: '>=16'}
+
+ markdown-table@3.0.4:
+ resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
+
marky@1.3.0:
resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==}
@@ -4028,6 +5145,54 @@ packages:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
+ mdast-util-find-and-replace@3.0.2:
+ resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
+
+ mdast-util-from-markdown@2.0.2:
+ resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
+
+ mdast-util-gfm-autolink-literal@2.0.1:
+ resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
+
+ mdast-util-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
+
+ mdast-util-gfm-strikethrough@2.0.0:
+ resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
+
+ mdast-util-gfm-table@2.0.0:
+ resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
+
+ mdast-util-gfm-task-list-item@2.0.0:
+ resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
+
+ mdast-util-gfm@3.1.0:
+ resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
+
+ mdast-util-mdx-expression@2.0.1:
+ resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
+
+ mdast-util-mdx-jsx@3.2.0:
+ resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
+
+ mdast-util-mdx@3.0.0:
+ resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
+
+ mdast-util-mdxjs-esm@2.0.1:
+ resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
+
+ mdast-util-phrasing@4.1.0:
+ resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
+
+ mdast-util-to-hast@13.2.1:
+ resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
+
+ mdast-util-to-markdown@2.1.2:
+ resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
+
+ mdast-util-to-string@4.0.0:
+ resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+
mdn-data@2.0.14:
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
@@ -4102,6 +5267,111 @@ packages:
engines: {node: '>=20.19.4'}
hasBin: true
+ micromark-core-commonmark@2.0.3:
+ resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
+
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
+
+ micromark-extension-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
+
+ micromark-extension-gfm-strikethrough@2.1.0:
+ resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
+
+ micromark-extension-gfm-table@2.1.1:
+ resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
+
+ micromark-extension-gfm-tagfilter@2.0.0:
+ resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
+
+ micromark-extension-gfm-task-list-item@2.1.0:
+ resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
+
+ micromark-extension-gfm@3.0.0:
+ resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
+
+ micromark-extension-mdx-expression@3.0.1:
+ resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==}
+
+ micromark-extension-mdx-jsx@3.0.2:
+ resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==}
+
+ micromark-extension-mdx-md@2.0.0:
+ resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
+
+ micromark-extension-mdxjs@3.0.0:
+ resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
+
+ micromark-factory-destination@2.0.1:
+ resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
+
+ micromark-factory-label@2.0.1:
+ resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
+
+ micromark-factory-mdx-expression@2.0.3:
+ resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==}
+
+ micromark-factory-space@2.0.1:
+ resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
+
+ micromark-factory-title@2.0.1:
+ resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
+
+ micromark-factory-whitespace@2.0.1:
+ resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
+
+ micromark-util-character@2.1.1:
+ resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
+
+ micromark-util-chunked@2.0.1:
+ resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
+
+ micromark-util-classify-character@2.0.1:
+ resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
+
+ micromark-util-combine-extensions@2.0.1:
+ resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
+
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
+
+ micromark-util-decode-string@2.0.1:
+ resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
+
+ micromark-util-encode@2.0.1:
+ resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
+
+ micromark-util-events-to-acorn@2.0.3:
+ resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==}
+
+ micromark-util-html-tag-name@2.0.1:
+ resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
+
+ micromark-util-normalize-identifier@2.0.1:
+ resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
+
+ micromark-util-resolve-all@2.0.1:
+ resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
+
+ micromark-util-sanitize-uri@2.0.1:
+ resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
+
+ micromark-util-subtokenize@2.1.0:
+ resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
+
+ micromark-util-symbol@2.0.1:
+ resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
+
+ micromark-util-types@2.0.2:
+ resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
+
+ micromark@4.0.2:
+ resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
+
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
@@ -4162,6 +5432,26 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ motion-dom@12.34.0:
+ resolution: {integrity: sha512-Lql3NuEcScRDxTAO6GgUsRHBZOWI/3fnMlkMcH5NftzcN37zJta+bpbMAV9px4Nj057TuvRooMK7QrzMCgtz6Q==}
+
+ motion-utils@12.29.2:
+ resolution: {integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==}
+
+ motion@12.34.0:
+ resolution: {integrity: sha512-01Sfa/zgsD/di8zA/uFW5Eb7/SPXoGyUfy+uMRMW5Spa8j0z/UbfQewAYvPMYFCXRlyD6e5aLHh76TxeeJD+RA==}
+ peerDependencies:
+ '@emotion/is-prop-valid': '*'
+ react: ^18.0.0 || ^19.0.0
+ react-dom: ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@emotion/is-prop-valid':
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
@@ -4215,9 +5505,40 @@ packages:
resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
engines: {node: '>= 0.6'}
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+
nested-error-stacks@2.0.1:
resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==}
+ next-themes@0.4.6:
+ resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
+ peerDependencies:
+ react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+
+ next@16.1.6:
+ resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==}
+ engines: {node: '>=20.9.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ '@playwright/test': ^1.51.1
+ babel-plugin-react-compiler: '*'
+ react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ '@playwright/test':
+ optional: true
+ babel-plugin-react-compiler:
+ optional: true
+ sass:
+ optional: true
+
node-fetch@2.7.0:
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
engines: {node: 4.x || >=6.0.0}
@@ -4249,6 +5570,10 @@ packages:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
+ npm-to-yarn@3.0.1:
+ resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
@@ -4321,6 +5646,12 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
+ oniguruma-parser@0.12.1:
+ resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
+
+ oniguruma-to-es@4.3.4:
+ resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==}
+
open@7.4.2:
resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
engines: {node: '>=8'}
@@ -4382,6 +5713,9 @@ packages:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
+ parse-entities@4.0.2:
+ resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+
parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
@@ -4419,6 +5753,9 @@ packages:
path-to-regexp@6.3.0:
resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
+ path-to-regexp@8.3.0:
+ resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -4513,9 +5850,17 @@ packages:
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
engines: {node: '>=4'}
+ postcss-selector-parser@7.1.1:
+ resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
+ engines: {node: '>=4'}
+
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+ postcss@8.4.31:
+ resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
+ engines: {node: ^10 || ^12 || >=14}
+
postcss@8.4.49:
resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
engines: {node: ^10 || ^12 || >=14}
@@ -4567,6 +5912,9 @@ packages:
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ property-information@7.1.0:
+ resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
+
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -4619,6 +5967,11 @@ packages:
peerDependencies:
react: ^19.1.0
+ react-dom@19.2.4:
+ resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
+ peerDependencies:
+ react: ^19.2.4
+
react-fast-compare@3.2.2:
resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
@@ -4653,6 +6006,12 @@ packages:
react-is@19.2.4:
resolution: {integrity: sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA==}
+ react-medium-image-zoom@5.4.0:
+ resolution: {integrity: sha512-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
react-native-css-interop@0.2.1:
resolution: {integrity: sha512-B88f5rIymJXmy1sNC/MhTkb3xxBej1KkuAt7TiT9iM7oXz3RM8Bn+7GUrfR02TvSgKm4cg2XiSuLEKYfKwNsjA==}
engines: {node: '>=18'}
@@ -4786,6 +6145,10 @@ packages:
resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
engines: {node: '>=0.10.0'}
+ react@19.2.4:
+ resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
+ engines: {node: '>=0.10.0'}
+
read-cache@1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
@@ -4797,6 +6160,24 @@ packages:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
+ readdirp@5.0.0:
+ resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
+ engines: {node: '>= 20.19.0'}
+
+ recma-build-jsx@1.0.0:
+ resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
+
+ recma-jsx@1.0.1:
+ resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ recma-parse@1.0.0:
+ resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
+
+ recma-stringify@1.0.0:
+ resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
+
redent@3.0.0:
resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
engines: {node: '>=8'}
@@ -4815,6 +6196,15 @@ packages:
regenerator-runtime@0.13.11:
resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
+ regex-recursion@6.0.2:
+ resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
+
+ regex-utilities@2.3.0:
+ resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
+
+ regex@6.1.0:
+ resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==}
+
regexp.prototype.flags@1.5.4:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
@@ -4830,9 +6220,30 @@ packages:
resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==}
hasBin: true
- require-directory@2.1.1:
- resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
- engines: {node: '>=0.10.0'}
+ rehype-recma@1.0.0:
+ resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
+
+ remark-gfm@4.0.1:
+ resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
+
+ remark-mdx@3.1.1:
+ resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==}
+
+ remark-parse@11.0.0:
+ resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
+
+ remark-rehype@11.1.2:
+ resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
+
+ remark-stringify@11.0.0:
+ resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+
+ remark@15.0.1:
+ resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
require-from-string@2.0.2:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
@@ -4934,6 +6345,12 @@ packages:
scheduler@0.26.0:
resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+
+ scroll-into-view-if-needed@3.1.0:
+ resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==}
+
secure-json-parse@4.1.0:
resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
@@ -4999,6 +6416,10 @@ packages:
shallowequal@1.1.0:
resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
+ sharp@0.34.5:
+ resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -5011,6 +6432,9 @@ packages:
resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
engines: {node: '>= 0.4'}
+ shiki@3.22.0:
+ resolution: {integrity: sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==}
+
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines: {node: '>= 0.4'}
@@ -5080,6 +6504,13 @@ packages:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
+
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
spawndamnit@3.0.1:
resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==}
@@ -5168,6 +6599,9 @@ packages:
resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
engines: {node: '>= 0.4'}
+ stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+
strip-ansi@5.2.0:
resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
engines: {node: '>=6'}
@@ -5211,6 +6645,25 @@ packages:
structured-headers@0.4.1:
resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==}
+ style-to-js@1.1.21:
+ resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
+
+ style-to-object@1.0.14:
+ resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
+
+ styled-jsx@5.1.6:
+ resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
+ engines: {node: '>= 12.0.0'}
+ peerDependencies:
+ '@babel/core': '*'
+ babel-plugin-macros: '*'
+ react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ babel-plugin-macros:
+ optional: true
+
styleq@0.1.3:
resolution: {integrity: sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA==}
@@ -5254,6 +6707,13 @@ packages:
engines: {node: '>=14.0.0'}
hasBin: true
+ tailwindcss@4.1.18:
+ resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==}
+
+ tapable@2.3.0:
+ resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
+ engines: {node: '>=6'}
+
tar@7.5.7:
resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==}
engines: {node: '>=18'}
@@ -5292,6 +6752,10 @@ packages:
throat@5.0.0:
resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==}
+ tinyexec@1.0.2:
+ resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ engines: {node: '>=18'}
+
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
@@ -5329,6 +6793,12 @@ packages:
resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
engines: {node: '>=12'}
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+ trough@2.2.0:
+ resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+
ts-api-utils@1.4.3:
resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
engines: {node: '>=16'}
@@ -5417,6 +6887,9 @@ packages:
resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==}
engines: {node: '>=4'}
+ unified@11.0.5:
+ resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
+
unimodules-app-loader@6.0.8:
resolution: {integrity: sha512-fqS8QwT/MC/HAmw1NKCHdzsPA6WaLm0dNmoC5Pz6lL+cDGYeYCNdHMO9fy08aL2ZD7cVkNM0pSR/AoNRe+rslA==}
@@ -5424,6 +6897,27 @@ packages:
resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
engines: {node: '>=8'}
+ unist-util-is@6.0.1:
+ resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
+
+ unist-util-position-from-estree@2.0.0:
+ resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+
+ unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+
+ unist-util-remove-position@5.0.0:
+ resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
+
+ unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+
+ unist-util-visit-parents@6.0.2:
+ resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
+
+ unist-util-visit@5.1.0:
+ resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
+
universalify@0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
@@ -5510,6 +7004,12 @@ packages:
react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
+ vfile-message@4.0.3:
+ resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
+
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+
vlq@1.0.1:
resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==}
@@ -5721,6 +7221,9 @@ packages:
use-sync-external-store:
optional: true
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+
snapshots:
'@0no-co/graphql.web@1.2.0(graphql@16.12.0)':
@@ -6396,11 +7899,11 @@ snapshots:
nanostores: 1.1.0
zod: 4.3.6
- '@better-auth/expo@1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(better-auth@1.4.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(expo-constants@18.0.13)(expo-linking@8.0.11)(expo-network@8.0.8(expo@54.0.33)(react@19.1.0))(expo-web-browser@15.0.10(expo@54.0.33)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)))':
+ '@better-auth/expo@1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))(better-auth@1.4.18(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(expo-constants@18.0.13)(expo-linking@8.0.11)(expo-network@8.0.8(expo@54.0.33)(react@19.1.0))(expo-web-browser@15.0.10(expo@54.0.33)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)))':
dependencies:
'@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0)
'@better-fetch/fetch': 1.1.21
- better-auth: 1.4.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ better-auth: 1.4.18(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
better-call: 1.1.8(zod@4.3.6)
zod: 4.3.6
optionalDependencies:
@@ -6584,6 +8087,89 @@ snapshots:
dependencies:
'@types/hammerjs': 2.0.46
+ '@emnapi/runtime@1.8.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@esbuild/aix-ppc64@0.27.3':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/android-arm@0.27.3':
+ optional: true
+
+ '@esbuild/android-x64@0.27.3':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.3':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.3':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.3':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.3':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.3':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.3':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.3':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.3':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.3':
+ optional: true
+
'@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)':
dependencies:
eslint: 8.57.1
@@ -6674,7 +8260,7 @@ snapshots:
wrap-ansi: 7.0.0
ws: 8.19.0
optionalDependencies:
- expo-router: 6.0.23(d0f0c85109698bdaf9ca510e3ba974e7)
+ expo-router: 6.0.23(c9e47bd596c3c2158834c3c0e5fd1acd)
react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)
transitivePeerDependencies:
- bufferutil
@@ -6906,6 +8492,38 @@ snapshots:
chalk: 4.1.2
js-yaml: 4.1.1
+ '@floating-ui/core@1.7.4':
+ dependencies:
+ '@floating-ui/utils': 0.2.10
+
+ '@floating-ui/dom@1.7.5':
+ dependencies:
+ '@floating-ui/core': 1.7.4
+ '@floating-ui/utils': 0.2.10
+
+ '@floating-ui/react-dom@2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@floating-ui/dom': 1.7.5
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
+ '@floating-ui/utils@0.2.10': {}
+
+ '@formatjs/fast-memoize@3.1.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@formatjs/intl-localematcher@0.8.1':
+ dependencies:
+ '@formatjs/fast-memoize': 3.1.0
+ tslib: 2.8.1
+
+ '@fumadocs/tailwind@0.0.2(tailwindcss@4.1.18)':
+ dependencies:
+ postcss-selector-parser: 7.1.1
+ optionalDependencies:
+ tailwindcss: 4.1.18
+
'@humanwhocodes/config-array@0.13.0':
dependencies:
'@humanwhocodes/object-schema': 2.0.3
@@ -6918,6 +8536,103 @@ snapshots:
'@humanwhocodes/object-schema@2.0.3': {}
+ '@img/colour@1.0.0':
+ optional: true
+
+ '@img/sharp-darwin-arm64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.2.4
+ optional: true
+
+ '@img/sharp-darwin-x64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.2.4
+ optional: true
+
+ '@img/sharp-libvips-darwin-arm64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-darwin-x64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-ppc64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-riscv64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-s390x@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-x64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-x64@1.2.4':
+ optional: true
+
+ '@img/sharp-linux-arm64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-arm@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-ppc64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-ppc64': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-riscv64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-riscv64': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-s390x@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-x64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.2.4
+ optional: true
+
+ '@img/sharp-linuxmusl-arm64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
+ optional: true
+
+ '@img/sharp-linuxmusl-x64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.4
+ optional: true
+
+ '@img/sharp-wasm32@0.34.5':
+ dependencies:
+ '@emnapi/runtime': 1.8.1
+ optional: true
+
+ '@img/sharp-win32-arm64@0.34.5':
+ optional: true
+
+ '@img/sharp-win32-ia32@0.34.5':
+ optional: true
+
+ '@img/sharp-win32-x64@0.34.5':
+ optional: true
+
'@inquirer/ansi@1.0.2': {}
'@inquirer/confirm@5.1.21(@types/node@25.2.2)':
@@ -7181,6 +8896,36 @@ snapshots:
globby: 11.1.0
read-yaml-file: 1.1.0
+ '@mdx-js/mdx@3.1.1':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdx': 2.0.13
+ acorn: 8.15.0
+ collapse-white-space: 2.1.0
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-util-scope: 1.0.0
+ estree-walker: 3.0.3
+ hast-util-to-jsx-runtime: 2.3.6
+ markdown-extensions: 2.0.0
+ recma-build-jsx: 1.0.0
+ recma-jsx: 1.0.1(acorn@8.15.0)
+ recma-stringify: 1.0.0
+ rehype-recma: 1.0.0
+ remark-mdx: 3.1.1
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.2
+ source-map: 0.7.6
+ unified: 11.0.5
+ unist-util-position-from-estree: 2.0.0
+ unist-util-stringify-position: 4.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
'@mswjs/interceptors@0.41.2':
dependencies:
'@open-draft/deferred-promise': 2.2.0
@@ -7190,6 +8935,32 @@ snapshots:
outvariant: 1.4.3
strict-event-emitter: 0.5.1
+ '@next/env@16.1.6': {}
+
+ '@next/swc-darwin-arm64@16.1.6':
+ optional: true
+
+ '@next/swc-darwin-x64@16.1.6':
+ optional: true
+
+ '@next/swc-linux-arm64-gnu@16.1.6':
+ optional: true
+
+ '@next/swc-linux-arm64-musl@16.1.6':
+ optional: true
+
+ '@next/swc-linux-x64-gnu@16.1.6':
+ optional: true
+
+ '@next/swc-linux-x64-musl@16.1.6':
+ optional: true
+
+ '@next/swc-win32-arm64-msvc@16.1.6':
+ optional: true
+
+ '@next/swc-win32-x64-msvc@16.1.6':
+ optional: true
+
'@noble/ciphers@2.1.1': {}
'@noble/hashes@2.0.1': {}
@@ -7241,18 +9012,77 @@ snapshots:
'@open-draft/until@2.1.0': {}
+ '@orama/orama@3.1.18': {}
+
+ '@radix-ui/number@1.1.1': {}
+
'@radix-ui/primitive@1.1.3': {}
- '@radix-ui/react-collection@1.1.7(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
+
+ '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
+
+ '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
+
+ '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-context': 1.1.2(@types/react@19.1.17)(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-slot': 1.2.3(@types/react@19.1.17)(react@19.1.0)
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
'@types/react': 19.1.17
+ '@types/react-dom': 19.2.3(@types/react@19.1.17)
+
+ '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
'@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.17)(react@19.1.0)':
dependencies:
@@ -7260,24 +9090,36 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
'@radix-ui/react-context@1.1.2(@types/react@19.1.17)(react@19.1.0)':
dependencies:
react: 19.1.0
optionalDependencies:
'@types/react': 19.1.17
- '@radix-ui/react-dialog@1.1.15(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-context@1.1.2(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
+ '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-context': 1.1.2(@types/react@19.1.17)(react@19.1.0)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.17)(react@19.1.0)
- '@radix-ui/react-focus-scope': 1.1.7(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-id': 1.1.1(@types/react@19.1.17)(react@19.1.0)
- '@radix-ui/react-portal': 1.1.9(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-presence': 1.1.5(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-slot': 1.2.3(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.17)(react@19.1.0)
aria-hidden: 1.2.6
@@ -7286,6 +9128,29 @@ snapshots:
react-remove-scroll: 2.7.2(@types/react@19.1.17)(react@19.1.0)
optionalDependencies:
'@types/react': 19.1.17
+ '@types/react-dom': 19.2.3(@types/react@19.1.17)
+
+ '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.13)(react@19.2.4)
+ aria-hidden: 1.2.6
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-remove-scroll: 2.7.2(@types/react@19.2.13)(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
'@radix-ui/react-direction@1.1.1(@types/react@19.1.17)(react@19.1.0)':
dependencies:
@@ -7293,17 +9158,37 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
- '@radix-ui/react-dismissable-layer@1.1.11(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-direction@1.1.1(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.17)(react@19.1.0)
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
'@types/react': 19.1.17
+ '@types/react-dom': 19.2.3(@types/react@19.1.17)
+
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
'@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.17)(react@19.1.0)':
dependencies:
@@ -7311,15 +9196,33 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
- '@radix-ui/react-focus-scope@1.1.7(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
+ '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.17)(react@19.1.0)
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
'@types/react': 19.1.17
+ '@types/react-dom': 19.2.3(@types/react@19.1.17)
+
+ '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
'@radix-ui/react-id@1.1.1(@types/react@19.1.17)(react@19.1.0)':
dependencies:
@@ -7328,16 +9231,97 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
- '@radix-ui/react-portal@1.1.9(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-id@1.1.1(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
+ '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
+
+ '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.13)(react@19.2.4)
+ aria-hidden: 1.2.6
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-remove-scroll: 2.7.2(@types/react@19.2.13)(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
+
+ '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
+
+ '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.17)(react@19.1.0)
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
'@types/react': 19.1.17
+ '@types/react-dom': 19.2.3(@types/react@19.1.17)
- '@radix-ui/react-presence@1.1.5(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
+
+ '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.17)(react@19.1.0)
@@ -7345,30 +9329,86 @@ snapshots:
react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
'@types/react': 19.1.17
+ '@types/react-dom': 19.2.3(@types/react@19.1.17)
+
+ '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
- '@radix-ui/react-primitive@2.1.3(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@radix-ui/react-slot': 1.2.3(@types/react@19.1.17)(react@19.1.0)
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
'@types/react': 19.1.17
+ '@types/react-dom': 19.2.3(@types/react@19.1.17)
+
+ '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
- '@radix-ui/react-roving-focus@1.1.11(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-context': 1.1.2(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-direction': 1.1.1(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-id': 1.1.1(@types/react@19.1.17)(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.17)(react@19.1.0)
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
'@types/react': 19.1.17
+ '@types/react-dom': 19.2.3(@types/react@19.1.17)
+
+ '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
+
+ '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
'@radix-ui/react-slot@1.2.0(@types/react@19.1.17)(react@19.1.0)':
dependencies:
@@ -7384,20 +9424,51 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
- '@radix-ui/react-tabs@1.1.13(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-slot@1.2.3(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
+ '@radix-ui/react-slot@1.2.4(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
+ '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-context': 1.1.2(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-direction': 1.1.1(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-id': 1.1.1(@types/react@19.1.17)(react@19.1.0)
- '@radix-ui/react-presence': 1.1.5(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-roving-focus': 1.1.11(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.17)(react@19.1.0)
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
optionalDependencies:
'@types/react': 19.1.17
+ '@types/react-dom': 19.2.3(@types/react@19.1.17)
+
+ '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
'@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.17)(react@19.1.0)':
dependencies:
@@ -7405,6 +9476,12 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
'@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.17)(react@19.1.0)':
dependencies:
'@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.17)(react@19.1.0)
@@ -7413,6 +9490,14 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
'@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.17)(react@19.1.0)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.17)(react@19.1.0)
@@ -7420,6 +9505,13 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
'@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.17)(react@19.1.0)':
dependencies:
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.17)(react@19.1.0)
@@ -7427,11 +9519,55 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
- '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.17)(react@19.1.0)':
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.17)(react@19.1.0)':
+ dependencies:
+ react: 19.1.0
+ optionalDependencies:
+ '@types/react': 19.1.17
+
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
+ '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.2.13)(react@19.2.4)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ react: 19.2.4
+ optionalDependencies:
+ '@types/react': 19.2.13
+
+ '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies:
- react: 19.1.0
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
optionalDependencies:
- '@types/react': 19.1.17
+ '@types/react': 19.2.13
+ '@types/react-dom': 19.2.3(@types/react@19.2.13)
+
+ '@radix-ui/rect@1.1.1': {}
'@react-native/assets-registry@0.81.5': {}
@@ -7717,6 +9853,53 @@ snapshots:
dependencies:
'@sentry/core': 10.38.0
+ '@shikijs/core@3.22.0':
+ dependencies:
+ '@shikijs/types': 3.22.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.5
+
+ '@shikijs/engine-javascript@3.22.0':
+ dependencies:
+ '@shikijs/types': 3.22.0
+ '@shikijs/vscode-textmate': 10.0.2
+ oniguruma-to-es: 4.3.4
+
+ '@shikijs/engine-oniguruma@3.22.0':
+ dependencies:
+ '@shikijs/types': 3.22.0
+ '@shikijs/vscode-textmate': 10.0.2
+
+ '@shikijs/langs@3.22.0':
+ dependencies:
+ '@shikijs/types': 3.22.0
+
+ '@shikijs/rehype@3.22.0':
+ dependencies:
+ '@shikijs/types': 3.22.0
+ '@types/hast': 3.0.4
+ hast-util-to-string: 3.0.1
+ shiki: 3.22.0
+ unified: 11.0.5
+ unist-util-visit: 5.1.0
+
+ '@shikijs/themes@3.22.0':
+ dependencies:
+ '@shikijs/types': 3.22.0
+
+ '@shikijs/transformers@3.22.0':
+ dependencies:
+ '@shikijs/core': 3.22.0
+ '@shikijs/types': 3.22.0
+
+ '@shikijs/types@3.22.0':
+ dependencies:
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
+ '@shikijs/vscode-textmate@10.0.2': {}
+
'@shopify/flash-list@2.2.2(@babel/runtime@7.28.6)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
dependencies:
'@babel/runtime': 7.28.6
@@ -7735,6 +9918,79 @@ snapshots:
'@standard-schema/spec@1.1.0': {}
+ '@swc/helpers@0.5.15':
+ dependencies:
+ tslib: 2.8.1
+
+ '@tailwindcss/node@4.1.18':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.19.0
+ jiti: 2.6.1
+ lightningcss: 1.30.2
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.1.18
+
+ '@tailwindcss/oxide-android-arm64@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-arm64@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.18':
+ optional: true
+
+ '@tailwindcss/oxide@4.1.18':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.1.18
+ '@tailwindcss/oxide-darwin-arm64': 4.1.18
+ '@tailwindcss/oxide-darwin-x64': 4.1.18
+ '@tailwindcss/oxide-freebsd-x64': 4.1.18
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18
+ '@tailwindcss/oxide-linux-arm64-musl': 4.1.18
+ '@tailwindcss/oxide-linux-x64-gnu': 4.1.18
+ '@tailwindcss/oxide-linux-x64-musl': 4.1.18
+ '@tailwindcss/oxide-wasm32-wasi': 4.1.18
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18
+ '@tailwindcss/oxide-win32-x64-msvc': 4.1.18
+
+ '@tailwindcss/postcss@4.1.18':
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ '@tailwindcss/node': 4.1.18
+ '@tailwindcss/oxide': 4.1.18
+ postcss: 8.5.6
+ tailwindcss: 4.1.18
+
'@tanstack/query-core@5.90.20': {}
'@tanstack/react-query@5.90.20(react@19.1.0)':
@@ -7787,12 +10043,26 @@ snapshots:
dependencies:
'@babel/types': 7.29.0
+ '@types/debug@4.1.12':
+ dependencies:
+ '@types/ms': 2.1.0
+
+ '@types/estree-jsx@1.0.5':
+ dependencies:
+ '@types/estree': 1.0.8
+
+ '@types/estree@1.0.8': {}
+
'@types/graceful-fs@4.1.9':
dependencies:
'@types/node': 25.2.2
'@types/hammerjs@2.0.46': {}
+ '@types/hast@3.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
+
'@types/istanbul-lib-coverage@2.0.6': {}
'@types/istanbul-lib-report@3.0.3':
@@ -7814,22 +10084,47 @@ snapshots:
'@types/tough-cookie': 4.0.5
parse5: 7.3.0
+ '@types/mdast@4.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/mdx@2.0.13': {}
+
+ '@types/ms@2.1.0': {}
+
'@types/node@12.20.55': {}
'@types/node@25.2.2':
dependencies:
undici-types: 7.16.0
+ '@types/react-dom@19.2.3(@types/react@19.1.17)':
+ dependencies:
+ '@types/react': 19.1.17
+ optional: true
+
+ '@types/react-dom@19.2.3(@types/react@19.2.13)':
+ dependencies:
+ '@types/react': 19.2.13
+
'@types/react@19.1.17':
dependencies:
csstype: 3.2.3
+ '@types/react@19.2.13':
+ dependencies:
+ csstype: 3.2.3
+
'@types/stack-utils@2.0.3': {}
'@types/statuses@2.0.6': {}
'@types/tough-cookie@4.0.5': {}
+ '@types/unist@2.0.11': {}
+
+ '@types/unist@3.0.3': {}
+
'@types/yargs-parser@21.0.3': {}
'@types/yargs@17.0.35':
@@ -8082,6 +10377,8 @@ snapshots:
asap@2.0.6: {}
+ astring@1.9.0: {}
+
async-function@1.0.0: {}
async-limiter@1.0.1: {}
@@ -8223,13 +10520,15 @@ snapshots:
babel-plugin-jest-hoist: 29.6.3
babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0)
+ bail@2.0.2: {}
+
balanced-match@1.0.2: {}
base64-js@1.5.1: {}
baseline-browser-mapping@2.9.19: {}
- better-auth@1.4.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ better-auth@1.4.18(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@better-auth/core': 1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0)
'@better-auth/telemetry': 1.4.18(@better-auth/core@1.4.18(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.6))(jose@6.1.3)(kysely@0.28.11)(nanostores@1.1.0))
@@ -8244,6 +10543,7 @@ snapshots:
nanostores: 1.1.0
zod: 4.3.6
optionalDependencies:
+ next: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
@@ -8343,6 +10643,8 @@ snapshots:
caniuse-lite@1.0.30001769: {}
+ ccount@2.0.1: {}
+
chalk@2.4.2:
dependencies:
ansi-styles: 3.2.1
@@ -8363,6 +10665,14 @@ snapshots:
char-regex@2.0.2: {}
+ character-entities-html4@2.1.0: {}
+
+ character-entities-legacy@3.0.0: {}
+
+ character-entities@2.0.2: {}
+
+ character-reference-invalid@2.0.1: {}
+
chardet@2.1.1: {}
chokidar@3.6.0:
@@ -8377,6 +10687,10 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
+ chokidar@5.0.0:
+ dependencies:
+ readdirp: 5.0.0
+
chownr@3.0.0: {}
chrome-launcher@0.15.2:
@@ -8405,6 +10719,10 @@ snapshots:
cjs-module-lexer@1.4.3: {}
+ class-variance-authority@0.7.1:
+ dependencies:
+ clsx: 2.1.1
+
cli-cursor@2.1.0:
dependencies:
restore-cursor: 2.0.0
@@ -8427,6 +10745,8 @@ snapshots:
co@4.6.0: {}
+ collapse-white-space@2.1.0: {}
+
collect-v8-coverage@1.0.3: {}
color-convert@1.9.3:
@@ -8457,6 +10777,8 @@ snapshots:
dependencies:
delayed-stream: 1.0.0
+ comma-separated-tokens@2.0.3: {}
+
commander@12.1.0: {}
commander@2.20.3: {}
@@ -8487,6 +10809,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ compute-scroll-into-view@3.1.1: {}
+
concat-map@0.0.1: {}
connect@3.7.0:
@@ -8610,6 +10934,10 @@ snapshots:
decimal.js@10.6.0: {}
+ decode-named-character-reference@1.3.0:
+ dependencies:
+ character-entities: 2.0.2
+
decode-uri-component@0.2.2: {}
dedent@1.7.1: {}
@@ -8644,6 +10972,8 @@ snapshots:
depd@2.0.0: {}
+ dequal@2.0.3: {}
+
destroy@1.2.0: {}
detect-indent@6.1.0: {}
@@ -8656,6 +10986,10 @@ snapshots:
detect-node-es@1.1.0: {}
+ devlop@1.1.0:
+ dependencies:
+ dequal: 2.0.3
+
didyoumean@1.2.2: {}
diff-sequences@29.6.3: {}
@@ -8726,6 +11060,11 @@ snapshots:
dependencies:
once: 1.4.0
+ enhanced-resolve@5.19.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.0
+
enquirer@2.4.1:
dependencies:
ansi-colors: 4.1.3
@@ -8846,6 +11185,49 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
+ esast-util-from-estree@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ unist-util-position-from-estree: 2.0.0
+
+ esast-util-from-js@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ acorn: 8.15.0
+ esast-util-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
+ esbuild@0.27.3:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.3
+ '@esbuild/android-arm': 0.27.3
+ '@esbuild/android-arm64': 0.27.3
+ '@esbuild/android-x64': 0.27.3
+ '@esbuild/darwin-arm64': 0.27.3
+ '@esbuild/darwin-x64': 0.27.3
+ '@esbuild/freebsd-arm64': 0.27.3
+ '@esbuild/freebsd-x64': 0.27.3
+ '@esbuild/linux-arm': 0.27.3
+ '@esbuild/linux-arm64': 0.27.3
+ '@esbuild/linux-ia32': 0.27.3
+ '@esbuild/linux-loong64': 0.27.3
+ '@esbuild/linux-mips64el': 0.27.3
+ '@esbuild/linux-ppc64': 0.27.3
+ '@esbuild/linux-riscv64': 0.27.3
+ '@esbuild/linux-s390x': 0.27.3
+ '@esbuild/linux-x64': 0.27.3
+ '@esbuild/netbsd-arm64': 0.27.3
+ '@esbuild/netbsd-x64': 0.27.3
+ '@esbuild/openbsd-arm64': 0.27.3
+ '@esbuild/openbsd-x64': 0.27.3
+ '@esbuild/openharmony-arm64': 0.27.3
+ '@esbuild/sunos-x64': 0.27.3
+ '@esbuild/win32-arm64': 0.27.3
+ '@esbuild/win32-ia32': 0.27.3
+ '@esbuild/win32-x64': 0.27.3
+
escalade@3.2.0: {}
escape-html@1.0.3: {}
@@ -8856,6 +11238,8 @@ snapshots:
escape-string-regexp@4.0.0: {}
+ escape-string-regexp@5.0.0: {}
+
escodegen@2.1.0:
dependencies:
esprima: 4.0.1
@@ -8962,6 +11346,43 @@ snapshots:
estraverse@5.3.0: {}
+ estree-util-attach-comments@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ estree-util-build-jsx@3.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-walker: 3.0.3
+
+ estree-util-is-identifier-name@3.0.0: {}
+
+ estree-util-scope@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+
+ estree-util-to-js@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ astring: 1.9.0
+ source-map: 0.7.6
+
+ estree-util-value-to-estree@3.5.0:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ estree-util-visit@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 3.0.3
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
esutils@2.0.3: {}
etag@1.8.1: {}
@@ -9100,12 +11521,12 @@ snapshots:
expo: 54.0.33(@babel/core@7.29.0)(@expo/metro-runtime@6.1.2)(expo-router@6.0.23)(graphql@16.12.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react: 19.1.0
- expo-router@6.0.23(d0f0c85109698bdaf9ca510e3ba974e7):
+ expo-router@6.0.23(c9e47bd596c3c2158834c3c0e5fd1acd):
dependencies:
'@expo/metro-runtime': 6.1.2(expo@54.0.33)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@expo/schema-utils': 0.1.8
'@radix-ui/react-slot': 1.2.0(@types/react@19.1.17)(react@19.1.0)
- '@radix-ui/react-tabs': 1.1.13(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@react-navigation/bottom-tabs': 7.12.0(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.23.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@react-navigation/native': 7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@react-navigation/native-stack': 7.12.0(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.23.0(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
@@ -9131,7 +11552,7 @@ snapshots:
sf-symbols-typescript: 2.2.0
shallowequal: 1.1.0
use-latest-callback: 0.2.6(react@19.1.0)
- vaul: 1.1.2(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
optionalDependencies:
'@testing-library/react-native': 12.9.0(jest@29.7.0(@types/node@25.2.2))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0)
react-dom: 19.1.0(react@19.1.0)
@@ -9226,6 +11647,8 @@ snapshots:
exponential-backoff@3.1.3: {}
+ extend@3.0.2: {}
+
extendable-error@0.1.7: {}
fast-copy@4.0.2: {}
@@ -9328,6 +11751,15 @@ snapshots:
hasown: 2.0.2
mime-types: 2.1.35
+ framer-motion@12.34.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ motion-dom: 12.34.0
+ motion-utils: 12.29.2
+ tslib: 2.8.1
+ optionalDependencies:
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
freeport-async@2.0.0: {}
fresh@0.5.2: {}
@@ -9349,6 +11781,106 @@ snapshots:
fsevents@2.3.3:
optional: true
+ fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.13)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6):
+ dependencies:
+ '@formatjs/intl-localematcher': 0.8.1
+ '@orama/orama': 3.1.18
+ '@shikijs/rehype': 3.22.0
+ '@shikijs/transformers': 3.22.0
+ estree-util-value-to-estree: 3.5.0
+ github-slugger: 2.0.0
+ hast-util-to-estree: 3.1.3
+ hast-util-to-jsx-runtime: 2.3.6
+ image-size: 2.0.2
+ negotiator: 1.0.0
+ npm-to-yarn: 3.0.1
+ path-to-regexp: 8.3.0
+ remark: 15.0.1
+ remark-gfm: 4.0.1
+ remark-rehype: 11.1.2
+ scroll-into-view-if-needed: 3.1.0
+ shiki: 3.22.0
+ tinyglobby: 0.2.15
+ unified: 11.0.5
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+ optionalDependencies:
+ '@mdx-js/mdx': 3.1.1
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@types/react': 19.2.13
+ lucide-react: 0.563.0(react@19.2.4)
+ mdast-util-mdx-jsx: 3.2.0
+ next: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ zod: 4.3.6
+ transitivePeerDependencies:
+ - supports-color
+
+ fumadocs-mdx@14.2.7(@types/mdast@4.0.4)(@types/mdx@2.0.13)(@types/react@19.2.13)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.13)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4):
+ dependencies:
+ '@mdx-js/mdx': 3.1.1
+ '@standard-schema/spec': 1.1.0
+ chokidar: 5.0.0
+ esbuild: 0.27.3
+ estree-util-value-to-estree: 3.5.0
+ fumadocs-core: 16.5.2(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.13)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ js-yaml: 4.1.1
+ mdast-util-to-markdown: 2.1.2
+ picocolors: 1.1.1
+ picomatch: 4.0.3
+ remark-mdx: 3.1.1
+ tinyexec: 1.0.2
+ tinyglobby: 0.2.15
+ unified: 11.0.5
+ unist-util-remove-position: 5.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+ zod: 4.3.6
+ optionalDependencies:
+ '@types/mdast': 4.0.4
+ '@types/mdx': 2.0.13
+ '@types/react': 19.2.13
+ mdast-util-mdx-jsx: 3.2.0
+ next: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ transitivePeerDependencies:
+ - supports-color
+
+ fumadocs-ui@16.5.2(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(fumadocs-core@16.5.2(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.13)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6))(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(tailwindcss@4.1.18):
+ dependencies:
+ '@fumadocs/tailwind': 0.0.2(tailwindcss@4.1.18)
+ '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@radix-ui/react-slot': 1.2.4(@types/react@19.2.13)(react@19.2.4)
+ '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.13))(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ class-variance-authority: 0.7.1
+ fumadocs-core: 16.5.2(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.13)(lucide-react@0.563.0(react@19.2.4))(mdast-util-mdx-jsx@3.2.0)(next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)
+ lucide-react: 0.563.0(react@19.2.4)
+ motion: 12.34.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ next-themes: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ react-medium-image-zoom: 5.4.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ react-remove-scroll: 2.7.2(@types/react@19.2.13)(react@19.2.4)
+ scroll-into-view-if-needed: 3.1.0
+ tailwind-merge: 3.4.0
+ optionalDependencies:
+ '@types/react': 19.2.13
+ next: 16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ tailwindcss: 4.1.18
+ transitivePeerDependencies:
+ - '@emotion/is-prop-valid'
+ - '@types/react-dom'
+
function-bind@1.1.2: {}
function.prototype.name@1.1.8:
@@ -9400,6 +11932,8 @@ snapshots:
getenv@2.0.0: {}
+ github-slugger@2.0.0: {}
+
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@@ -9477,6 +12011,69 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ hast-util-to-estree@3.1.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-attach-comments: 3.0.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ zwitch: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-to-html@9.0.5:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
+
+ hast-util-to-jsx-runtime@2.3.6:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-to-string@3.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-whitespace@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
headers-polyfill@4.0.3: {}
help-me@5.0.0: {}
@@ -9511,6 +12108,8 @@ snapshots:
dependencies:
void-elements: 3.1.0
+ html-void-elements@3.0.0: {}
+
http-errors@2.0.1:
dependencies:
depd: 2.0.0
@@ -9569,6 +12168,8 @@ snapshots:
dependencies:
queue: 6.0.2
+ image-size@2.0.2: {}
+
import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
@@ -9592,6 +12193,8 @@ snapshots:
ini@1.3.8: {}
+ inline-style-parser@0.2.7: {}
+
inline-style-prefixer@7.0.1:
dependencies:
css-in-js-utils: 3.1.0
@@ -9606,6 +12209,13 @@ snapshots:
dependencies:
loose-envify: 1.4.0
+ is-alphabetical@2.0.1: {}
+
+ is-alphanumerical@2.0.1:
+ dependencies:
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
+
is-array-buffer@3.0.5:
dependencies:
call-bind: 1.0.8
@@ -9654,6 +12264,8 @@ snapshots:
call-bound: 1.0.4
has-tostringtag: 1.0.2
+ is-decimal@2.0.1: {}
+
is-docker@2.2.1: {}
is-extglob@2.1.1: {}
@@ -9678,6 +12290,8 @@ snapshots:
dependencies:
is-extglob: 2.1.1
+ is-hexadecimal@2.0.1: {}
+
is-map@2.0.3: {}
is-negative-zero@2.0.3: {}
@@ -9693,6 +12307,8 @@ snapshots:
is-path-inside@3.0.3: {}
+ is-plain-obj@4.1.0: {}
+
is-potential-custom-element-name@1.0.1: {}
is-regex@1.2.1:
@@ -10171,6 +12787,8 @@ snapshots:
jiti@1.21.7: {}
+ jiti@2.6.1: {}
+
jose@6.1.3: {}
joycon@3.1.1: {}
@@ -10268,66 +12886,99 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ lightningcss-android-arm64@1.30.2:
+ optional: true
+
lightningcss-android-arm64@1.31.1:
optional: true
lightningcss-darwin-arm64@1.27.0:
optional: true
+ lightningcss-darwin-arm64@1.30.2:
+ optional: true
+
lightningcss-darwin-arm64@1.31.1:
optional: true
lightningcss-darwin-x64@1.27.0:
optional: true
+ lightningcss-darwin-x64@1.30.2:
+ optional: true
+
lightningcss-darwin-x64@1.31.1:
optional: true
lightningcss-freebsd-x64@1.27.0:
optional: true
+ lightningcss-freebsd-x64@1.30.2:
+ optional: true
+
lightningcss-freebsd-x64@1.31.1:
optional: true
lightningcss-linux-arm-gnueabihf@1.27.0:
optional: true
+ lightningcss-linux-arm-gnueabihf@1.30.2:
+ optional: true
+
lightningcss-linux-arm-gnueabihf@1.31.1:
optional: true
lightningcss-linux-arm64-gnu@1.27.0:
optional: true
+ lightningcss-linux-arm64-gnu@1.30.2:
+ optional: true
+
lightningcss-linux-arm64-gnu@1.31.1:
optional: true
lightningcss-linux-arm64-musl@1.27.0:
optional: true
+ lightningcss-linux-arm64-musl@1.30.2:
+ optional: true
+
lightningcss-linux-arm64-musl@1.31.1:
optional: true
lightningcss-linux-x64-gnu@1.27.0:
optional: true
+ lightningcss-linux-x64-gnu@1.30.2:
+ optional: true
+
lightningcss-linux-x64-gnu@1.31.1:
optional: true
lightningcss-linux-x64-musl@1.27.0:
optional: true
+ lightningcss-linux-x64-musl@1.30.2:
+ optional: true
+
lightningcss-linux-x64-musl@1.31.1:
optional: true
lightningcss-win32-arm64-msvc@1.27.0:
optional: true
+ lightningcss-win32-arm64-msvc@1.30.2:
+ optional: true
+
lightningcss-win32-arm64-msvc@1.31.1:
optional: true
lightningcss-win32-x64-msvc@1.27.0:
optional: true
+ lightningcss-win32-x64-msvc@1.30.2:
+ optional: true
+
lightningcss-win32-x64-msvc@1.31.1:
optional: true
@@ -10346,6 +12997,22 @@ snapshots:
lightningcss-win32-arm64-msvc: 1.27.0
lightningcss-win32-x64-msvc: 1.27.0
+ lightningcss@1.30.2:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.30.2
+ lightningcss-darwin-arm64: 1.30.2
+ lightningcss-darwin-x64: 1.30.2
+ lightningcss-freebsd-x64: 1.30.2
+ lightningcss-linux-arm-gnueabihf: 1.30.2
+ lightningcss-linux-arm64-gnu: 1.30.2
+ lightningcss-linux-arm64-musl: 1.30.2
+ lightningcss-linux-x64-gnu: 1.30.2
+ lightningcss-linux-x64-musl: 1.30.2
+ lightningcss-win32-arm64-msvc: 1.30.2
+ lightningcss-win32-x64-msvc: 1.30.2
+
lightningcss@1.31.1:
dependencies:
detect-libc: 2.1.2
@@ -10384,39 +13051,216 @@ snapshots:
lodash@4.17.23: {}
- log-symbols@2.2.0:
+ log-symbols@2.2.0:
+ dependencies:
+ chalk: 2.4.2
+
+ longest-streak@3.1.0: {}
+
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@11.2.5: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lucide-react-native@0.563.0(react-native-svg@15.15.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)
+ react-native-svg: 15.15.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+
+ lucide-react@0.563.0(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ make-dir@4.0.0:
+ dependencies:
+ semver: 7.7.4
+
+ makeerror@1.0.12:
+ dependencies:
+ tmpl: 1.0.5
+
+ markdown-extensions@2.0.0: {}
+
+ markdown-table@3.0.4: {}
+
+ marky@1.3.0: {}
+
+ math-intrinsics@1.1.0: {}
+
+ mdast-util-find-and-replace@3.0.2:
+ dependencies:
+ '@types/mdast': 4.0.4
+ escape-string-regexp: 5.0.0
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
+
+ mdast-util-from-markdown@2.0.2:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.2
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-decode-string: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-stringify-position: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-autolink-literal@2.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-find-and-replace: 3.0.2
+ micromark-util-character: 2.1.1
+
+ mdast-util-gfm-footnote@2.1.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ micromark-util-normalize-identifier: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-strikethrough@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-table@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ markdown-table: 3.0.4
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-task-list-item@2.0.0:
dependencies:
- chalk: 2.4.2
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- loose-envify@1.4.0:
+ mdast-util-gfm@3.1.0:
dependencies:
- js-tokens: 4.0.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm-autolink-literal: 2.0.1
+ mdast-util-gfm-footnote: 2.1.0
+ mdast-util-gfm-strikethrough: 2.0.0
+ mdast-util-gfm-table: 2.0.0
+ mdast-util-gfm-task-list-item: 2.0.0
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- lru-cache@10.4.3: {}
+ mdast-util-mdx-expression@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- lru-cache@11.2.5: {}
+ mdast-util-mdx-jsx@3.2.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
- lru-cache@5.1.1:
+ mdast-util-mdx@3.0.0:
dependencies:
- yallist: 3.1.1
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- lucide-react-native@0.563.0(react-native-svg@15.15.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ mdast-util-mdxjs-esm@2.0.1:
dependencies:
- react: 19.1.0
- react-native: 0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0)
- react-native-svg: 15.15.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- make-dir@4.0.0:
+ mdast-util-phrasing@4.1.0:
dependencies:
- semver: 7.7.4
+ '@types/mdast': 4.0.4
+ unist-util-is: 6.0.1
- makeerror@1.0.12:
+ mdast-util-to-hast@13.2.1:
dependencies:
- tmpl: 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.1
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
- marky@1.3.0: {}
+ mdast-util-to-markdown@2.1.2:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 4.1.0
+ mdast-util-to-string: 4.0.0
+ micromark-util-classify-character: 2.0.1
+ micromark-util-decode-string: 2.0.1
+ unist-util-visit: 5.1.0
+ zwitch: 2.0.4
- math-intrinsics@1.1.0: {}
+ mdast-util-to-string@4.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
mdn-data@2.0.14: {}
@@ -10603,6 +13447,270 @@ snapshots:
- supports-color
- utf-8-validate
+ micromark-core-commonmark@2.0.3:
+ dependencies:
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-factory-destination: 2.0.1
+ micromark-factory-label: 2.0.1
+ micromark-factory-space: 2.0.1
+ micromark-factory-title: 2.0.1
+ micromark-factory-whitespace: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-html-tag-name: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-footnote@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-strikethrough@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-table@2.1.1:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-tagfilter@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-task-list-item@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm@3.0.0:
+ dependencies:
+ micromark-extension-gfm-autolink-literal: 2.1.0
+ micromark-extension-gfm-footnote: 2.1.0
+ micromark-extension-gfm-strikethrough: 2.1.0
+ micromark-extension-gfm-table: 2.1.1
+ micromark-extension-gfm-tagfilter: 2.0.0
+ micromark-extension-gfm-task-list-item: 2.1.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdx-expression@3.0.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdx-jsx@3.0.2:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
+
+ micromark-extension-mdx-md@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
+ micromark-extension-mdxjs@3.0.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ micromark-extension-mdx-expression: 3.0.1
+ micromark-extension-mdx-jsx: 3.0.2
+ micromark-extension-mdx-md: 2.0.0
+ micromark-extension-mdxjs-esm: 3.0.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-destination@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-label@2.0.1:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-mdx-expression@2.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
+
+ micromark-factory-space@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-title@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-factory-whitespace@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-character@2.1.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-chunked@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-classify-character@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-combine-extensions@2.0.1:
+ dependencies:
+ micromark-util-chunked: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-decode-string@2.0.1:
+ dependencies:
+ decode-named-character-reference: 1.3.0
+ micromark-util-character: 2.1.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-encode@2.0.1: {}
+
+ micromark-util-events-to-acorn@2.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/unist': 3.0.3
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
+
+ micromark-util-html-tag-name@2.0.1: {}
+
+ micromark-util-normalize-identifier@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-resolve-all@2.0.1:
+ dependencies:
+ micromark-util-types: 2.0.2
+
+ micromark-util-sanitize-uri@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-encode: 2.0.1
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-subtokenize@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-symbol@2.0.1: {}
+
+ micromark-util-types@2.0.2: {}
+
+ micromark@4.0.2:
+ dependencies:
+ '@types/debug': 4.1.12
+ debug: 4.4.3
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-encode: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
micromatch@4.0.8:
dependencies:
braces: 3.0.3
@@ -10646,6 +13754,20 @@ snapshots:
mkdirp@1.0.4: {}
+ motion-dom@12.34.0:
+ dependencies:
+ motion-utils: 12.29.2
+
+ motion-utils@12.29.2: {}
+
+ motion@12.34.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ framer-motion: 12.34.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ tslib: 2.8.1
+ optionalDependencies:
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
mri@1.2.0: {}
ms@2.0.0: {}
@@ -10709,8 +13831,66 @@ snapshots:
negotiator@0.6.4: {}
+ negotiator@1.0.0: {}
+
nested-error-stacks@2.0.1: {}
+ next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
+ next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ dependencies:
+ '@next/env': 16.1.6
+ '@swc/helpers': 0.5.15
+ baseline-browser-mapping: 2.9.19
+ caniuse-lite: 1.0.30001769
+ postcss: 8.4.31
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.1.0)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 16.1.6
+ '@next/swc-darwin-x64': 16.1.6
+ '@next/swc-linux-arm64-gnu': 16.1.6
+ '@next/swc-linux-arm64-musl': 16.1.6
+ '@next/swc-linux-x64-gnu': 16.1.6
+ '@next/swc-linux-x64-musl': 16.1.6
+ '@next/swc-win32-arm64-msvc': 16.1.6
+ '@next/swc-win32-x64-msvc': 16.1.6
+ babel-plugin-react-compiler: 1.0.0
+ sharp: 0.34.5
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+ optional: true
+
+ next@16.1.6(@babel/core@7.29.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ '@next/env': 16.1.6
+ '@swc/helpers': 0.5.15
+ baseline-browser-mapping: 2.9.19
+ caniuse-lite: 1.0.30001769
+ postcss: 8.4.31
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.4)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 16.1.6
+ '@next/swc-darwin-x64': 16.1.6
+ '@next/swc-linux-arm64-gnu': 16.1.6
+ '@next/swc-linux-arm64-musl': 16.1.6
+ '@next/swc-linux-x64-gnu': 16.1.6
+ '@next/swc-linux-x64-musl': 16.1.6
+ '@next/swc-win32-arm64-msvc': 16.1.6
+ '@next/swc-win32-x64-msvc': 16.1.6
+ babel-plugin-react-compiler: 1.0.0
+ sharp: 0.34.5
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+
node-fetch@2.7.0:
dependencies:
whatwg-url: 5.0.0
@@ -10734,6 +13914,8 @@ snapshots:
dependencies:
path-key: 3.1.1
+ npm-to-yarn@3.0.1: {}
+
nth-check@2.1.1:
dependencies:
boolbase: 1.0.0
@@ -10808,6 +13990,14 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
+ oniguruma-parser@0.12.1: {}
+
+ oniguruma-to-es@4.3.4:
+ dependencies:
+ oniguruma-parser: 0.12.1
+ regex: 6.1.0
+ regex-recursion: 6.0.2
+
open@7.4.2:
dependencies:
is-docker: 2.2.1
@@ -10879,6 +14069,16 @@ snapshots:
dependencies:
callsites: 3.1.0
+ parse-entities@4.0.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ character-entities-legacy: 3.0.0
+ character-reference-invalid: 2.0.1
+ decode-named-character-reference: 1.3.0
+ is-alphanumerical: 2.0.1
+ is-decimal: 2.0.1
+ is-hexadecimal: 2.0.1
+
parse-json@5.2.0:
dependencies:
'@babel/code-frame': 7.29.0
@@ -10911,6 +14111,8 @@ snapshots:
path-to-regexp@6.3.0: {}
+ path-to-regexp@8.3.0: {}
+
path-type@4.0.0: {}
picocolors@1.1.1: {}
@@ -10991,8 +14193,19 @@ snapshots:
cssesc: 3.0.0
util-deprecate: 1.0.2
+ postcss-selector-parser@7.1.1:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
postcss-value-parser@4.2.0: {}
+ postcss@8.4.31:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
postcss@8.4.49:
dependencies:
nanoid: 3.3.11
@@ -11042,6 +14255,8 @@ snapshots:
object-assign: 4.1.1
react-is: 16.13.1
+ property-information@7.1.0: {}
+
proxy-from-env@1.1.0: {}
psl@1.15.0:
@@ -11098,6 +14313,11 @@ snapshots:
react: 19.1.0
scheduler: 0.26.0
+ react-dom@19.2.4(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ scheduler: 0.27.0
+
react-fast-compare@3.2.2: {}
react-freeze@1.0.4(react@19.1.0):
@@ -11122,6 +14342,11 @@ snapshots:
react-is@19.2.4: {}
+ react-medium-image-zoom@5.4.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+
react-native-css-interop@0.2.1(react-native-reanimated@4.2.1(react-native-worklets@0.7.2(@babel/core@7.29.0)(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-svg@15.15.2(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.0)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(tailwindcss@3.4.19(yaml@2.8.2)):
dependencies:
'@babel/helper-module-imports': 7.28.6
@@ -11283,6 +14508,14 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
+ react-remove-scroll-bar@2.3.8(@types/react@19.2.13)(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ react-style-singleton: 2.2.3(@types/react@19.2.13)(react@19.2.4)
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.13
+
react-remove-scroll@2.7.2(@types/react@19.1.17)(react@19.1.0):
dependencies:
react: 19.1.0
@@ -11294,6 +14527,17 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
+ react-remove-scroll@2.7.2(@types/react@19.2.13)(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ react-remove-scroll-bar: 2.3.8(@types/react@19.2.13)(react@19.2.4)
+ react-style-singleton: 2.2.3(@types/react@19.2.13)(react@19.2.4)
+ tslib: 2.8.1
+ use-callback-ref: 1.3.3(@types/react@19.2.13)(react@19.2.4)
+ use-sidecar: 1.1.3(@types/react@19.2.13)(react@19.2.4)
+ optionalDependencies:
+ '@types/react': 19.2.13
+
react-style-singleton@2.2.3(@types/react@19.1.17)(react@19.1.0):
dependencies:
get-nonce: 1.0.1
@@ -11302,6 +14546,14 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
+ react-style-singleton@2.2.3(@types/react@19.2.13)(react@19.2.4):
+ dependencies:
+ get-nonce: 1.0.1
+ react: 19.2.4
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.13
+
react-test-renderer@19.1.0(react@19.1.0):
dependencies:
react: 19.1.0
@@ -11310,6 +14562,8 @@ snapshots:
react@19.1.0: {}
+ react@19.2.4: {}
+
read-cache@1.0.0:
dependencies:
pify: 2.3.0
@@ -11325,6 +14579,37 @@ snapshots:
dependencies:
picomatch: 2.3.1
+ readdirp@5.0.0: {}
+
+ recma-build-jsx@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-util-build-jsx: 3.0.1
+ vfile: 6.0.3
+
+ recma-jsx@1.0.1(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ estree-util-to-js: 2.0.0
+ recma-parse: 1.0.0
+ recma-stringify: 1.0.0
+ unified: 11.0.5
+
+ recma-parse@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ esast-util-from-js: 2.0.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ recma-stringify@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-util-to-js: 2.0.0
+ unified: 11.0.5
+ vfile: 6.0.3
+
redent@3.0.0:
dependencies:
indent-string: 4.0.0
@@ -11349,6 +14634,16 @@ snapshots:
regenerator-runtime@0.13.11: {}
+ regex-recursion@6.0.2:
+ dependencies:
+ regex-utilities: 2.3.0
+
+ regex-utilities@2.3.0: {}
+
+ regex@6.1.0:
+ dependencies:
+ regex-utilities: 2.3.0
+
regexp.prototype.flags@1.5.4:
dependencies:
call-bind: 1.0.8
@@ -11373,6 +14668,64 @@ snapshots:
dependencies:
jsesc: 3.1.0
+ rehype-recma@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/hast': 3.0.4
+ hast-util-to-estree: 3.1.3
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-gfm@4.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-gfm: 3.1.0
+ micromark-extension-gfm: 3.0.0
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx@3.1.1:
+ dependencies:
+ mdast-util-mdx: 3.0.0
+ micromark-extension-mdxjs: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-parse@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.2
+ micromark-util-types: 2.0.2
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-rehype@11.1.2:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ mdast-util-to-hast: 13.2.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ remark-stringify@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-to-markdown: 2.1.2
+ unified: 11.0.5
+
+ remark@15.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
require-directory@2.1.1: {}
require-from-string@2.0.2: {}
@@ -11469,6 +14822,12 @@ snapshots:
scheduler@0.26.0: {}
+ scheduler@0.27.0: {}
+
+ scroll-into-view-if-needed@3.1.0:
+ dependencies:
+ compute-scroll-into-view: 3.1.1
+
secure-json-parse@4.1.0: {}
semver@6.3.1: {}
@@ -11542,6 +14901,38 @@ snapshots:
shallowequal@1.1.0: {}
+ sharp@0.34.5:
+ dependencies:
+ '@img/colour': 1.0.0
+ detect-libc: 2.1.2
+ semver: 7.7.4
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.34.5
+ '@img/sharp-darwin-x64': 0.34.5
+ '@img/sharp-libvips-darwin-arm64': 1.2.4
+ '@img/sharp-libvips-darwin-x64': 1.2.4
+ '@img/sharp-libvips-linux-arm': 1.2.4
+ '@img/sharp-libvips-linux-arm64': 1.2.4
+ '@img/sharp-libvips-linux-ppc64': 1.2.4
+ '@img/sharp-libvips-linux-riscv64': 1.2.4
+ '@img/sharp-libvips-linux-s390x': 1.2.4
+ '@img/sharp-libvips-linux-x64': 1.2.4
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.4
+ '@img/sharp-linux-arm': 0.34.5
+ '@img/sharp-linux-arm64': 0.34.5
+ '@img/sharp-linux-ppc64': 0.34.5
+ '@img/sharp-linux-riscv64': 0.34.5
+ '@img/sharp-linux-s390x': 0.34.5
+ '@img/sharp-linux-x64': 0.34.5
+ '@img/sharp-linuxmusl-arm64': 0.34.5
+ '@img/sharp-linuxmusl-x64': 0.34.5
+ '@img/sharp-wasm32': 0.34.5
+ '@img/sharp-win32-arm64': 0.34.5
+ '@img/sharp-win32-ia32': 0.34.5
+ '@img/sharp-win32-x64': 0.34.5
+ optional: true
+
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -11550,6 +14941,17 @@ snapshots:
shell-quote@1.8.3: {}
+ shiki@3.22.0:
+ dependencies:
+ '@shikijs/core': 3.22.0
+ '@shikijs/engine-javascript': 3.22.0
+ '@shikijs/engine-oniguruma': 3.22.0
+ '@shikijs/langs': 3.22.0
+ '@shikijs/themes': 3.22.0
+ '@shikijs/types': 3.22.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
side-channel-list@1.0.0:
dependencies:
es-errors: 1.3.0
@@ -11622,6 +15024,10 @@ snapshots:
source-map@0.6.1: {}
+ source-map@0.7.6: {}
+
+ space-separated-tokens@2.0.2: {}
+
spawndamnit@3.0.1:
dependencies:
cross-spawn: 7.0.6
@@ -11733,6 +15139,11 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
+ stringify-entities@4.0.4:
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
+
strip-ansi@5.2.0:
dependencies:
ansi-regex: 4.1.1
@@ -11763,6 +15174,29 @@ snapshots:
structured-headers@0.4.1: {}
+ style-to-js@1.1.21:
+ dependencies:
+ style-to-object: 1.0.14
+
+ style-to-object@1.0.14:
+ dependencies:
+ inline-style-parser: 0.2.7
+
+ styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.1.0):
+ dependencies:
+ client-only: 0.0.1
+ react: 19.1.0
+ optionalDependencies:
+ '@babel/core': 7.29.0
+ optional: true
+
+ styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.4):
+ dependencies:
+ client-only: 0.0.1
+ react: 19.2.4
+ optionalDependencies:
+ '@babel/core': 7.29.0
+
styleq@0.1.3: {}
sucrase@3.35.1:
@@ -11828,6 +15262,10 @@ snapshots:
- tsx
- yaml
+ tailwindcss@4.1.18: {}
+
+ tapable@2.3.0: {}
+
tar@7.5.7:
dependencies:
'@isaacs/fs-minipass': 4.0.1
@@ -11870,6 +15308,8 @@ snapshots:
throat@5.0.0: {}
+ tinyexec@1.0.2: {}
+
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
@@ -11906,6 +15346,10 @@ snapshots:
dependencies:
punycode: 2.3.1
+ trim-lines@3.0.1: {}
+
+ trough@2.2.0: {}
+
ts-api-utils@1.4.3(typescript@5.9.3):
dependencies:
typescript: 5.9.3
@@ -11989,12 +15433,54 @@ snapshots:
unicode-property-aliases-ecmascript@2.2.0: {}
+ unified@11.0.5:
+ dependencies:
+ '@types/unist': 3.0.3
+ 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
+
unimodules-app-loader@6.0.8: {}
unique-string@2.0.0:
dependencies:
crypto-random-string: 2.0.0
+ unist-util-is@6.0.1:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-position-from-estree@2.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-remove-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-visit: 5.1.0
+
+ unist-util-stringify-position@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-visit-parents@6.0.2:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+
+ unist-util-visit@5.1.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
+
universalify@0.1.2: {}
universalify@0.2.0: {}
@@ -12025,6 +15511,13 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
+ use-callback-ref@1.3.3(@types/react@19.2.13)(react@19.2.4):
+ dependencies:
+ react: 19.2.4
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.13
+
use-latest-callback@0.2.6(react@19.1.0):
dependencies:
react: 19.1.0
@@ -12037,6 +15530,14 @@ snapshots:
optionalDependencies:
'@types/react': 19.1.17
+ use-sidecar@1.1.3(@types/react@19.2.13)(react@19.2.4):
+ dependencies:
+ detect-node-es: 1.1.0
+ react: 19.2.4
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.13
+
use-sync-external-store@1.6.0(react@19.1.0):
dependencies:
react: 19.1.0
@@ -12057,15 +15558,25 @@ snapshots:
vary@1.1.2: {}
- vaul@1.1.2(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
- '@radix-ui/react-dialog': 1.1.15(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.1.17))(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
transitivePeerDependencies:
- '@types/react'
- '@types/react-dom'
+ vfile-message@4.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-stringify-position: 4.0.0
+
+ vfile@6.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.3
+
vlq@1.0.1: {}
void-elements@3.1.0: {}
@@ -12241,3 +15752,5 @@ snapshots:
'@types/react': 19.1.17
react: 19.1.0
use-sync-external-store: 1.6.0(react@19.1.0)
+
+ zwitch@2.0.4: {}
From ea7193eb9c96405b0198216ae2dc411266dd9793 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 10 Feb 2026 01:59:01 +0000
Subject: [PATCH 09/10] fix: update OG image site name to ObjectStack Mobile
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
---
apps/docs/app/og/docs/[...slug]/route.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/docs/app/og/docs/[...slug]/route.tsx b/apps/docs/app/og/docs/[...slug]/route.tsx
index 2d741be..93f317a 100644
--- a/apps/docs/app/og/docs/[...slug]/route.tsx
+++ b/apps/docs/app/og/docs/[...slug]/route.tsx
@@ -11,7 +11,7 @@ export async function GET(_req: Request, { params }: RouteContext<'/og/docs/[...
if (!page) notFound();
return new ImageResponse(
- ,
+ ,
{
width: 1200,
height: 630,
From abd05171a6c3718fe9b2363a785d5d5d00f1446c Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 10 Feb 2026 02:07:27 +0000
Subject: [PATCH 10/10] fix: align documentation with actual source APIs and
fix template code issues
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
---
apps/docs/app/docs/[[...slug]]/page.tsx | 2 +-
apps/docs/app/og/docs/[...slug]/route.tsx | 1 -
apps/docs/components/ai/page-actions.tsx | 17 +++---
apps/docs/content/docs/libraries/auth.mdx | 2 +-
apps/docs/content/docs/libraries/data.mdx | 38 ++++++-------
.../content/docs/libraries/monitoring.mdx | 53 ++++++++++++-------
apps/docs/content/docs/libraries/security.mdx | 38 ++++++++-----
.../docs/content/docs/libraries/utilities.mdx | 37 ++++++++-----
apps/docs/next.config.mjs | 4 ++
9 files changed, 116 insertions(+), 76 deletions(-)
diff --git a/apps/docs/app/docs/[[...slug]]/page.tsx b/apps/docs/app/docs/[[...slug]]/page.tsx
index 366b4a8..32c24f0 100644
--- a/apps/docs/app/docs/[[...slug]]/page.tsx
+++ b/apps/docs/app/docs/[[...slug]]/page.tsx
@@ -23,7 +23,7 @@ export default async function Page(props: PageProps<'/docs/[[...slug]]'>) {
diff --git a/apps/docs/app/og/docs/[...slug]/route.tsx b/apps/docs/app/og/docs/[...slug]/route.tsx
index 93f317a..afdbe7e 100644
--- a/apps/docs/app/og/docs/[...slug]/route.tsx
+++ b/apps/docs/app/og/docs/[...slug]/route.tsx
@@ -21,7 +21,6 @@ export async function GET(_req: Request, { params }: RouteContext<'/og/docs/[...
export function generateStaticParams() {
return source.getPages().map((page) => ({
- lang: page.locale,
slug: getPageImage(page).segments,
}));
}
diff --git a/apps/docs/components/ai/page-actions.tsx b/apps/docs/components/ai/page-actions.tsx
index 5fe4433..a981144 100644
--- a/apps/docs/components/ai/page-actions.tsx
+++ b/apps/docs/components/ai/page-actions.tsx
@@ -24,16 +24,13 @@ export function LLMCopyButton({
setLoading(true);
try {
- await navigator.clipboard.write([
- new ClipboardItem({
- 'text/plain': fetch(markdownUrl).then(async (res) => {
- const content = await res.text();
- cache.set(markdownUrl, content);
-
- return content;
- }),
- }),
- ]);
+ const res = await fetch(markdownUrl);
+ if (!res.ok) {
+ throw new Error(`Failed to fetch markdown: ${res.status}`);
+ }
+ const content = await res.text();
+ cache.set(markdownUrl, content);
+ await navigator.clipboard.writeText(content);
} finally {
setLoading(false);
}
diff --git a/apps/docs/content/docs/libraries/auth.mdx b/apps/docs/content/docs/libraries/auth.mdx
index f43ab30..15b0a4e 100644
--- a/apps/docs/content/docs/libraries/auth.mdx
+++ b/apps/docs/content/docs/libraries/auth.mdx
@@ -21,7 +21,7 @@ setObjectStackApiUrl('https://your-server.objectstack.com');
const client = createObjectStackClient(authToken);
// Retrieve existing singleton
-const client = getObjectStackClient();
+const existingClient = getObjectStackClient();
```
## auth-client.ts
diff --git a/apps/docs/content/docs/libraries/data.mdx b/apps/docs/content/docs/libraries/data.mdx
index bbf3f5f..e1ae0de 100644
--- a/apps/docs/content/docs/libraries/data.mdx
+++ b/apps/docs/content/docs/libraries/data.mdx
@@ -25,20 +25,22 @@ Write-ahead sync queue for offline mutations. Entries are stored in SQLite and p
```ts
interface SyncQueueEntry {
- id: string;
+ id: number;
objectName: string;
+ recordId: string;
operation: 'create' | 'update' | 'delete';
- recordId?: string;
- payload: Record;
+ payload: string; // JSON-encoded
status: 'pending' | 'in_progress' | 'failed' | 'conflict';
- retryCount: number;
- createdAt: number;
+ retries: number;
+ errorMessage: string | null;
+ createdAt: number; // timestamp (ms)
+ updatedAt: number; // timestamp (ms)
}
interface ConflictInfo {
- localVersion: Record;
- serverVersion: Record;
- conflictFields: string[];
+ entry: SyncQueueEntry;
+ serverRecord: Record | null;
+ localRecord: Record | null;
}
```
@@ -82,14 +84,14 @@ Uses `expo-background-fetch` and `expo-task-manager` to drain the sync queue whe
ObjectQL filter AST helpers for building typed query filters.
```ts
-import { OPERATOR_META } from '@/lib/query-builder';
-
-// Available operators with metadata
-OPERATOR_META = {
- eq: { label: 'Equals', types: ['text', 'number', 'date', ...] },
- neq: { label: 'Not Equals', types: ['text', 'number', 'date', ...] },
- contains: { label: 'Contains', types: ['text'] },
- between: { label: 'Between', types: ['number', 'date'] },
- // ... more operators
-};
+import { OPERATOR_META, operatorsForFieldType } from '@/lib/query-builder';
+
+// Read operator metadata (exported as a const)
+OPERATOR_META.eq; // { label: 'equals', valueCount: 1 }
+OPERATOR_META.between; // { label: 'is between', valueCount: 2 }
+OPERATOR_META.is_null; // { label: 'is empty', valueCount: 0 }
+
+// Get valid operators for a field type
+const ops = operatorsForFieldType('text');
+// ['eq', 'neq', 'is_null', 'is_not_null', 'contains', 'not_contains', 'starts_with', 'ends_with', 'in', 'not_in']
```
diff --git a/apps/docs/content/docs/libraries/monitoring.mdx b/apps/docs/content/docs/libraries/monitoring.mdx
index 59fa18a..0d21e6b 100644
--- a/apps/docs/content/docs/libraries/monitoring.mdx
+++ b/apps/docs/content/docs/libraries/monitoring.mdx
@@ -29,7 +29,7 @@ import { createAnalyticsTracker } from '@/lib/analytics';
const tracker = createAnalyticsTracker({
endpoint: 'https://analytics.objectstack.com/events',
batchSize: 20,
- flushInterval: 30000, // 30 seconds
+ flushIntervalMs: 30_000, // 30 seconds
});
// Track events (queued and flushed in batches)
@@ -56,21 +56,33 @@ try {
}
```
-Error codes: `UNAUTHORIZED`, `FORBIDDEN`, `NOT_FOUND`, `VALIDATION`, `CONFLICT`, `RATE_LIMITED`, `SERVER_ERROR`, `NETWORK_ERROR`, `TIMEOUT`.
+Error codes: `UNAUTHORIZED`, `FORBIDDEN`, `NOT_FOUND`, `VALIDATION_ERROR`, `CONFLICT`, `RATE_LIMITED`, `INTERNAL_ERROR`, `NETWORK_ERROR`, `TIMEOUT`.
## performance-benchmark.ts
Performance metric tracking with configurable thresholds.
```ts
-import type { BenchmarkConfig } from '@/lib/performance-benchmark';
-
-const config: BenchmarkConfig = {
- appStartup: { threshold: 2000 }, // 2s max
- screenRender: { threshold: 500 }, // 500ms max
- apiResponse: { threshold: 3000 }, // 3s max
- frameTime: { threshold: 16.67 }, // 60fps target
-};
+import { createPerformanceBenchmark } from '@/lib/performance-benchmark';
+
+const bench = createPerformanceBenchmark({
+ appStartup: 2000, // 2s max
+ screenRender: 500, // 500ms max
+ apiResponse: 3000, // 3s max
+ frameTime: 16.67, // 60fps target
+});
+
+// Record a measurement
+bench.measure('login-api', 450, 'apiResponse');
+
+// Time an async operation
+const { result, measurement } = await bench.timeAsync(
+ 'fetch-contacts', () => fetchContacts(), 'apiResponse',
+);
+
+// Get aggregate report
+const report = bench.getReport();
+// { measurements, thresholds, passedCount, failedCount, passRate }
```
## memory-profiler.ts
@@ -80,16 +92,19 @@ Memory leak detection for development builds.
```ts
import { createMemoryTracker } from '@/lib/memory-profiler';
-const tracker = createMemoryTracker({
- leakThreshold: 10, // Report after 10 unmatched mounts
-});
+const tracker = createMemoryTracker();
+
+// Register a resource (component mount, subscription, etc.)
+tracker.track('ContactList', () => cleanup());
+
+// Unregister when done (component unmount, unsubscribe)
+tracker.untrack('ContactList');
-// Track component lifecycle
-tracker.onMount('ContactList');
-tracker.onUnmount('ContactList');
+// Report entries tracked longer than 30s (potential leaks)
+const leaks = tracker.reportLeaks(30_000);
-// Check for leaks
-const leaks = tracker.getLeaks();
+// Clean up all tracked entries
+tracker.disposeAll();
```
-Tracks component mounts, subscriptions, and event listeners. Reports potential memory leaks when unmount counts don't match mount counts above a configurable threshold.
+Tracks component mounts, subscriptions, and event listeners. Entries that remain tracked beyond the threshold are reported as potential leaks in development builds.
diff --git a/apps/docs/content/docs/libraries/security.mdx b/apps/docs/content/docs/libraries/security.mdx
index 8b7ba2d..9e38b34 100644
--- a/apps/docs/content/docs/libraries/security.mdx
+++ b/apps/docs/content/docs/libraries/security.mdx
@@ -13,14 +13,15 @@ import {
validateCertificatePin,
} from '@/lib/certificate-pinning';
-// Build a pinning policy
-const policy = buildPinningPolicy({
- hostname: 'api.objectstack.com',
- pins: ['sha256/AAAA...', 'sha256/BBBB...'],
-});
-
-// Validate during network requests
-const isValid = await validateCertificatePin(policy);
+// Build a pinning policy from the API base URL
+const policy = buildPinningPolicy(
+ 'https://api.objectstack.com',
+ ['sha256/AAAA...', 'sha256/BBBB...'],
+);
+// Returns: { hostname, pins, enforced: true, maxChainLength: 3 }
+
+// Validate a certificate hash against the policy
+const isValid = validateCertificatePin(policy, 'sha256/AAAA...');
```
## security-audit.ts
@@ -28,18 +29,27 @@ const isValid = await validateCertificatePin(policy);
Pre-release security checklist and audit report generator.
```ts
-import { createSecurityAudit } from '@/lib/security-audit';
+import { createSecurityAudit, getDefaultSecurityChecks } from '@/lib/security-audit';
const audit = createSecurityAudit();
-// Register checks
-audit.addCheck('https-enforced', () => checkHTTPS());
-audit.addCheck('cert-pinning', () => checkCertPinning());
-audit.addCheck('secure-storage', () => checkSecureStorage());
+// Register checks using the AuditCheckDefinition shape
+audit.addCheck({
+ id: 'https-only',
+ description: 'API communication uses HTTPS',
+ severity: 'critical',
+ evaluate: () => apiUrl.startsWith('https://'),
+ failureDetail: 'All API communication must use HTTPS.',
+});
+
+// Or use the built-in check set
+for (const check of getDefaultSecurityChecks({ httpsOnly: true, biometricEnabled: true })) {
+ audit.addCheck(check);
+}
// Generate report
const report = await audit.run();
-// { passed: ['https-enforced', ...], failed: [...], score: 0.95 }
+// { checks: AuditCheckResult[], passedCount, failedCount, score: 0–100 }
```
## app-lock.ts
diff --git a/apps/docs/content/docs/libraries/utilities.mdx b/apps/docs/content/docs/libraries/utilities.mdx
index 9788925..b4d67f9 100644
--- a/apps/docs/content/docs/libraries/utilities.mdx
+++ b/apps/docs/content/docs/libraries/utilities.mdx
@@ -50,14 +50,22 @@ Feature flag manager with A/B testing support.
import { createFeatureFlagManager } from '@/lib/feature-flags';
const manager = createFeatureFlagManager({
- flags: {
- 'new-dashboard': { enabled: true, rollout: 50 },
- 'ai-search': { enabled: false },
- },
+ endpoint: 'https://server.objectstack.com/flags',
+ refreshIntervalMs: 300_000, // 5 minutes
+ defaults: [
+ { key: 'new-dashboard', enabled: true, rolloutPercentage: 50 },
+ { key: 'ai-search', enabled: false },
+ ],
});
-// Evaluate a flag (considers rollout percentage)
-const isEnabled = manager.evaluate('new-dashboard', userId);
+// Set user for rollout bucketing
+manager.setUserId(userId);
+
+// Evaluate a flag (considers rolloutPercentage)
+const enabled = manager.isEnabled('new-dashboard');
+
+// Start periodic refresh
+manager.startPolling();
```
Uses `hashUserToPercentage()` for deterministic percentage-based bucketing.
@@ -71,25 +79,30 @@ import { createRemoteConfigManager } from '@/lib/remote-config';
const config = createRemoteConfigManager({
endpoint: 'https://server.objectstack.com/config',
- pollInterval: 300000, // 5 minutes
+ refreshIntervalMs: 600_000, // 10 minutes
+ defaults: { maxUploadSizeMB: 10 },
});
// Fetch latest config
await config.refresh();
// Get a value (falls back to cached)
-const value = config.get('maxUploadSizeMB'); // 10
+const value = config.getValue('maxUploadSizeMB');
+
+// Get with fallback
+const limit = config.getValueWithDefault('maxUploadSizeMB', 10);
```
## app-store-review.ts
-App Store submission checklist validation.
+App Store submission checklist validation against Expo app config.
```ts
-import type { ReviewChecklist } from '@/lib/app-store-review';
+import { validateAppStoreReadiness } from '@/lib/app-store-review';
+import type { AppConfig, ReviewReport, ReviewCheckItem } from '@/lib/app-store-review';
-// Validates against expo app.json config
-// Checks: metadata, assets, privacy, compliance
+const report: ReviewReport = validateAppStoreReadiness(appConfig);
+// { checks: ReviewCheckItem[], passedCount, failedCount, readiness: 0–100 }
```
## utils.ts
diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs
index 91c6ac1..55d9e8e 100644
--- a/apps/docs/next.config.mjs
+++ b/apps/docs/next.config.mjs
@@ -7,6 +7,10 @@ const config = {
reactStrictMode: true,
async rewrites() {
return [
+ {
+ source: '/docs.mdx',
+ destination: '/llms.mdx/docs',
+ },
{
source: '/docs/:path*.mdx',
destination: '/llms.mdx/docs/:path*',