diff --git a/apps/engineering/app/components/render.tsx b/apps/engineering/app/components/render.tsx new file mode 100644 index 0000000000..8a94978816 --- /dev/null +++ b/apps/engineering/app/components/render.tsx @@ -0,0 +1,19 @@ +import { CodeBlock, Pre } from "fumadocs-ui/components/codeblock"; +import type { PropsWithChildren } from "react"; +import reactElementToJSXString from "react-element-to-jsx-string"; + +export const RenderComponentWithSnippet: React.FC = (props) => { + return ( +
+ {props.children} + +
+          {reactElementToJSXString(props.children, {
+            showFunctions: true,
+            useBooleanShorthandSyntax: true,
+          })}
+        
+
+
+ ); +}; diff --git a/apps/engineering/app/components/row.tsx b/apps/engineering/app/components/row.tsx new file mode 100644 index 0000000000..b9d08b36db --- /dev/null +++ b/apps/engineering/app/components/row.tsx @@ -0,0 +1,7 @@ +import type { PropsWithChildren } from "react"; + +export const Row: React.FC = (props) => { + return
{props.children}
; +}; + +Row.displayName = "Row"; diff --git a/apps/engineering/app/design/[[...slug]]/page.tsx b/apps/engineering/app/design/[[...slug]]/page.tsx new file mode 100644 index 0000000000..6ffea132e3 --- /dev/null +++ b/apps/engineering/app/design/[[...slug]]/page.tsx @@ -0,0 +1,50 @@ +"use client"; +import { componentSource } from "@/app/source"; +import defaultMdxComponents from "fumadocs-ui/mdx"; +import { DocsBody, DocsDescription, DocsPage, DocsTitle } from "fumadocs-ui/page"; +//import { createTypeTable } from 'fumadocs-typescript/ui'; + +import { notFound } from "next/navigation"; +export default async function Page(props: { + params: Promise<{ slug?: string[] }>; +}) { + const params = await props.params; + + const page = componentSource.getPage(params.slug); + + if (!page) { + notFound(); + } + //const { AutoTypeTable } = createTypeTable(); + + const MDX = page.data.body; + + return ( + + {page.data.title} + + {page.data.description} + + + + + + ); +} +/* +export async function generateStaticParams() { + return componentSource.generateParams(); +} + +export function generateMetadata({ params }: { params: { slug?: string[] } }) { + const page = componentSource.getPage(params.slug); + if (!page) { + notFound(); + } + + return { + title: page.data.title, + description: page.data.description, + } satisfies Metadata; +} +*/ diff --git a/apps/engineering/app/design/layout.tsx b/apps/engineering/app/design/layout.tsx new file mode 100644 index 0000000000..c35370d912 --- /dev/null +++ b/apps/engineering/app/design/layout.tsx @@ -0,0 +1,12 @@ +import { componentSource } from "@/app/source"; +import "@unkey/ui/css"; +import { DocsLayout } from "fumadocs-ui/layouts/notebook"; +import type { ReactNode } from "react"; +import { baseOptions } from "../layout.config"; +export default function Layout({ children }: { children: ReactNode }) { + return ( + + {children} + + ); +} diff --git a/apps/engineering/app/docs/[[...slug]]/page.tsx b/apps/engineering/app/docs/[[...slug]]/page.tsx index 3ccae0190f..b444761460 100644 --- a/apps/engineering/app/docs/[[...slug]]/page.tsx +++ b/apps/engineering/app/docs/[[...slug]]/page.tsx @@ -5,12 +5,11 @@ import { DocsBody, DocsDescription, DocsPage, DocsTitle } from "fumadocs-ui/page import type { Metadata } from "next"; import { notFound } from "next/navigation"; - -export default async function Page({ - params, -}: { - params: { slug?: string[] }; +export default async function Page(props: { + params: Promise<{ slug?: string[] }>; }) { + const params = await props.params; + const page = source.getPage(params.slug); if (!page) { notFound(); @@ -53,8 +52,8 @@ export async function generateStaticParams() { return source.generateParams(); } -export function generateMetadata({ params }: { params: { slug?: string[] } }) { - const page = source.getPage(params.slug); +export async function generateMetadata({ params }: { params: Promise<{ slug?: string[] }> }) { + const page = source.getPage((await params).slug); if (!page) { notFound(); } diff --git a/apps/engineering/app/layout.config.tsx b/apps/engineering/app/layout.config.tsx index 6520161575..3ddd1c54df 100644 --- a/apps/engineering/app/layout.config.tsx +++ b/apps/engineering/app/layout.config.tsx @@ -35,6 +35,11 @@ export const baseOptions: HomeLayoutProps = { url: "/rfcs", active: "nested-url", }, + { + text: "Design", + url: "/design", + active: "nested-url", + }, { text: "GitHub", url: "https://github.com/unkeyed/unkey", diff --git a/apps/engineering/app/layout.tsx b/apps/engineering/app/layout.tsx index 631fa5f54d..7f0d9f0776 100644 --- a/apps/engineering/app/layout.tsx +++ b/apps/engineering/app/layout.tsx @@ -1,15 +1,18 @@ import { RootProvider } from "fumadocs-ui/provider"; -import { Inter } from "next/font/google"; +import { GeistMono } from "geist/font/mono"; +import { GeistSans } from "geist/font/sans"; + import type { ReactNode } from "react"; -import "./global.css"; -const inter = Inter({ - subsets: ["latin"], -}); +import "./global.css"; export default function Layout({ children }: { children: ReactNode }) { return ( - + {children} diff --git a/apps/engineering/app/rfcs/[[...slug]]/page.tsx b/apps/engineering/app/rfcs/[[...slug]]/page.tsx index 6caded34cf..8c3c752fc1 100644 --- a/apps/engineering/app/rfcs/[[...slug]]/page.tsx +++ b/apps/engineering/app/rfcs/[[...slug]]/page.tsx @@ -7,11 +7,11 @@ import { LocalDate } from "./local-date"; import { notFound } from "next/navigation"; -export default async function Page({ - params, -}: { - params: { slug?: string[] }; +export default async function Page(props: { + params: Promise<{ slug?: string[] }>; }) { + const params = await props.params; + const page = rfcSource.getPage(params.slug); if (!page) { @@ -60,8 +60,8 @@ export async function generateStaticParams() { return rfcSource.generateParams(); } -export function generateMetadata({ params }: { params: { slug?: string[] } }) { - const page = rfcSource.getPage(params.slug); +export async function generateMetadata({ params }: { params: Promise<{ slug?: string[] }> }) { + const page = rfcSource.getPage((await params).slug); if (!page) { notFound(); } diff --git a/apps/engineering/app/source.ts b/apps/engineering/app/source.ts index 930ec8c34e..4ea13cb2cb 100644 --- a/apps/engineering/app/source.ts +++ b/apps/engineering/app/source.ts @@ -1,4 +1,4 @@ -import { docs, meta, rfcs } from "@/.source"; +import { components, docs, meta, rfcs } from "@/.source"; import { loader } from "fumadocs-core/source"; import { createMDXSource } from "fumadocs-mdx"; @@ -11,3 +11,8 @@ export const rfcSource = loader({ baseUrl: "/rfcs", source: createMDXSource(rfcs, []), }); + +export const componentSource = loader({ + baseUrl: "/design", + source: createMDXSource(components, []), +}); diff --git a/apps/engineering/content/design/colors.mdx b/apps/engineering/content/design/colors.mdx new file mode 100644 index 0000000000..1e1ba102a9 --- /dev/null +++ b/apps/engineering/content/design/colors.mdx @@ -0,0 +1,128 @@ +--- +title: Colors +description: Color scale and usage +--- + + + + + + + +Unkey uses [Radix Colors](https://www.radix-ui.com/colors) and its scale. +Darkmode is handled automatically, outside of specific edge cases we don't need to apply separate `dark:` classes. + +| Step | Use Case | +|-------|-----------------------------------------| +| 1 | App background | +| 2 | Subtle background | +| 3 | UI element background | +| 4 | Hovered UI element background | +| 5 | Active / Selected UI element background | +| 6 | Subtle borders and separators | +| 7 | UI element border and focus rings | +| 8 | Hovered UI element border | +| 9 | Solid backgrounds | +| 10 | Hovered solid backgrounds | +| 11 | Low-contrast text | +| 12 | High-contrast text | + +[Read more](https://www.radix-ui.com/colors/docs/palette-composition/understanding-the-scale) + + +## gray +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +## success +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +## info +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +## warning +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +## error +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +## feature +
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/engineering/content/design/components/button.mdx b/apps/engineering/content/design/components/button.mdx new file mode 100644 index 0000000000..823429297d --- /dev/null +++ b/apps/engineering/content/design/components/button.mdx @@ -0,0 +1,106 @@ +--- +title: Button +--- +import { Button } from "@unkey/ui" +import { RenderComponentWithSnippet } from "@/app/components/render" +import { Row } from "@/app/components/row" + import { ArrowLeft, ArrowRight, Settings2, Trash} from "lucide-react" + + +## onClick + + + + + + + + + + +## Variant + + + + + + + + + + + + + +## Icons + + + + + + + + + + + +## Keyboard + +Providing a keyboard shortcut will override the `suffix` icon slot. + + + + + + + + + + + + +## Loading + +Providing a loading stae will override the `prefix` icon slot. +When the user hits the specified key, the `onClick` handler will be called. + + + + + + + + + + + +## Disabled + + + + + + + + + diff --git a/apps/engineering/content/design/index.mdx b/apps/engineering/content/design/index.mdx new file mode 100644 index 0000000000..463b548daf --- /dev/null +++ b/apps/engineering/content/design/index.mdx @@ -0,0 +1,7 @@ +--- +title: Design System +--- + + + +Component and general design documentation. diff --git a/apps/engineering/content/design/meta.json b/apps/engineering/content/design/meta.json new file mode 100644 index 0000000000..a55c67ffde --- /dev/null +++ b/apps/engineering/content/design/meta.json @@ -0,0 +1,6 @@ +{ + "title": "Design", + "description": "Our components", + "icon": "Frame", + "root": true +} diff --git a/apps/engineering/content/docs/meta.json b/apps/engineering/content/docs/meta.json index 4d443abece..988eb4c966 100644 --- a/apps/engineering/content/docs/meta.json +++ b/apps/engineering/content/docs/meta.json @@ -1,3 +1,3 @@ { - "pages": ["contributing", "api-design", "company", "architecture"] + "pages": ["contributing", "api-design", "company", "architecture", "design"] } diff --git a/apps/engineering/next.config.mjs b/apps/engineering/next.config.mjs index 50894e976d..ea090b7d28 100644 --- a/apps/engineering/next.config.mjs +++ b/apps/engineering/next.config.mjs @@ -5,6 +5,7 @@ const withMDX = createMDX(); /** @type {import('next').NextConfig} */ const config = { reactStrictMode: true, + transpilePackages: ["@unkey/ui"], }; export default withMDX(config); diff --git a/apps/engineering/package.json b/apps/engineering/package.json index 12faad072c..b0dcfdfdb0 100644 --- a/apps/engineering/package.json +++ b/apps/engineering/package.json @@ -10,16 +10,19 @@ }, "dependencies": { "@radix-ui/react-slot": "^1.1.0", + "@unkey/ui": "workspace:^", "fumadocs-core": "14.4.0", "fumadocs-mdx": "11.1.1", "fumadocs-openapi": "^5.7.5", "fumadocs-twoslash": "^2.0.1", "fumadocs-typescript": "^3.0.2", "fumadocs-ui": "14.4.0", + "geist": "^1.3.1", "lucide-react": "^0.378.0", - "next": "^14.2.8", + "next": "^15.0.3", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-element-to-jsx-string": "^15.0.0", "zod": "^3.23.8" }, "devDependencies": { diff --git a/apps/engineering/postcss.config.js b/apps/engineering/postcss.config.js index 12a703d900..6887c82624 100644 --- a/apps/engineering/postcss.config.js +++ b/apps/engineering/postcss.config.js @@ -1,5 +1,7 @@ module.exports = { plugins: { + "postcss-import": {}, + "tailwindcss/nesting": {}, tailwindcss: {}, autoprefixer: {}, }, diff --git a/apps/engineering/source.config.ts b/apps/engineering/source.config.ts index 81128c19b1..694bfd87b4 100644 --- a/apps/engineering/source.config.ts +++ b/apps/engineering/source.config.ts @@ -16,6 +16,12 @@ export const rfcs = defineCollections({ type: "doc", }); +export const components = defineCollections({ + dir: "content/design", + schema: frontmatterSchema.extend({}), + type: "doc", +}); + export default defineConfig({ lastModifiedTime: "git", }); diff --git a/apps/engineering/tailwind.config.js b/apps/engineering/tailwind.config.js index 5b40413461..95377efc8e 100644 --- a/apps/engineering/tailwind.config.js +++ b/apps/engineering/tailwind.config.js @@ -1,5 +1,5 @@ +import unkeyUiTailwindConfig from "@unkey/ui/tailwind.config"; import { createPreset } from "fumadocs-ui/tailwind-plugin"; - /** @type {import('tailwindcss').Config} */ export default { content: [ @@ -8,6 +8,9 @@ export default { "./content/**/*.{md,mdx}", "./mdx-components.{ts,tsx}", "./node_modules/fumadocs-ui/dist/**/*.js", + "../../internal/ui/**/*.tsx", ], + + theme: unkeyUiTailwindConfig.theme, presets: [createPreset()], }; diff --git a/apps/play/package.json b/apps/play/package.json index 46b108cc7d..1a3d6d6bbd 100644 --- a/apps/play/package.json +++ b/apps/play/package.json @@ -21,7 +21,7 @@ "@xterm/xterm": "^5.5.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", - "geist": "^1.3.0", + "geist": "^1.3.1", "lucide-react": "^0.378.0", "ms": "^2.1.3", "next": "14.2.10", diff --git a/internal/ui/colors.css b/internal/ui/colors.css new file mode 100644 index 0000000000..f09bb24a9b --- /dev/null +++ b/internal/ui/colors.css @@ -0,0 +1,220 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* +All colors are taken from Radix +https://www.radix-ui.com/colors/docs/palette-composition/scales +*/ +@layer base { + :root { + + /* Gray */ + --gray-1: 0, 0%, 99%; + --gray-2: 0, 0%, 98%; + --gray-3: 0, 0%, 94%; + --gray-4: 0, 0%, 91%; + --gray-5: 0, 0%, 88%; + --gray-6: 0, 0%, 85%; + --gray-7: 0, 0%, 81%; + --gray-8: 0, 0%, 73%; + --gray-9: 0, 0%, 55%; + --gray-10: 0, 0%, 51%; + --gray-11: 0, 0%, 39%; + --gray-12: 0, 0%, 13%; + + + /* Teal */ + --success-1: 165, 67%, 99%; + --success-2: 165, 50%, 97%; + --success-3: 167, 63%, 93%; + --success-4: 166, 62%, 88%; + --success-5: 168, 54%, 82%; + --success-6: 168, 48%, 75%; + --success-7: 170, 43%, 66%; + --success-8: 172, 42%, 53%; + --success-9: 173, 80%, 36%; + --success-10: 173, 85%, 33%; + --success-11: 172, 100%, 26%; + --success-12: 174, 65%, 15%; + + /* Amber */ + --warning-1: 40, 60%, 99%; + --warning-2: 51, 91%, 95%; + --warning-3: 52, 100%, 88%; + --warning-4: 50, 100%, 81%; + --warning-5: 50, 94%, 73%; + --warning-6: 46, 84%, 70%; + --warning-7: 42, 75%, 65%; + --warning-8: 38, 75%, 55%; + --warning-9: 42, 100%, 62%; + --warning-10: 42, 100%, 55%; + --warning-11: 35, 100%, 34%; + --warning-12: 24, 40%, 22%; + + /* Tomato */ + + --error-1: 0, 100%, 99%; + --error-2: 7, 100%, 98%; + --error-3: 10, 92%, 95%; + --error-4: 12, 100%, 91%; + --error-5: 11, 100%, 88%; + --error-6: 11, 95%, 84%; + --error-7: 10, 82%, 78%; + --error-8: 10, 75%, 70%; + --error-9: 10, 78%, 54%; + --error-10: 10, 73%, 51%; + --error-11: 10, 82%, 45%; + --error-12: 8, 50%, 24%; + + /* Violet */ + --feature-1: 270, 50%, 99%; + --feature-2: 257, 100%, 99%; + --feature-3: 257, 88%, 97%; + --feature-4: 256, 100%, 95%; + --feature-5: 253, 100%, 93%; + --feature-6: 252, 96%, 89%; + --feature-7: 252, 76%, 84%; + --feature-8: 252, 69%, 76%; + --feature-9: 252, 56%, 57%; + --feature-10: 252, 50%, 54%; + --feature-11: 252, 43%, 52%; + --feature-12: 249, 43%, 26%; + + /* Blue */ + --info-1: 210, 100%, 99%; + --info-2: 207, 100%, 98%; + --info-3: 205, 92%, 95%; + --info-4: 203, 100%, 92%; + --info-5: 206, 100%, 88%; + --info-6: 207, 93%, 83%; + --info-7: 207, 85%, 76%; + --info-8: 206, 82%, 65%; + --info-9: 206, 100%, 50%; + --info-10: 207, 96%, 48%; + --info-11: 208, 88%, 43%; + --info-12: 216, 71%, 23%; + + + /* Slate */ + --accent-1: 240, 20%, 99%; + --accent-2: 240, 20%, 98%; + --accent-3: 240, 11%, 95%; + --accent-4: 240, 10%, 92%; + --accent-5: 230, 11%, 89%; + --accent-6: 240, 10%, 86%; + --accent-7: 233, 10%, 82%; + --accent-8: 231, 10%, 75%; + --accent-9: 231, 6%, 57%; + --accent-10: 226, 5%, 53%; + --accent-11: 220, 6%, 40%; + --accent-12: 210, 13%, 13%; + + } + + + + .dark { + + /* Gray Dark */ + --gray-1: 0, 0%, 7%; + --gray-2: 0, 0%, 10%; + --gray-3: 0, 0%, 13%; + --gray-4: 0, 0%, 16%; + --gray-5: 0, 0%, 19%; + --gray-6: 0, 0%, 23%; + --gray-7: 0, 0%, 28%; + --gray-8: 0, 0%, 38%; + --gray-9: 0, 0%, 43%; + --gray-10: 0, 0%, 48%; + --gray-11: 0, 0%, 71%; + --gray-12: 0, 0%, 93%; + + + /* Teal */ + --success-1: 173, 24%, 7%; + --success-2: 175, 24%, 9%; + --success-3: 174, 55%, 11%; + --success-4: 176, 93%, 12%; + --success-5: 175, 80%, 16%; + --success-6: 174, 63%, 21%; + --success-7: 174, 58%, 26%; + --success-8: 173, 59%, 31%; + --success-9: 173, 80%, 36%; + --success-10: 172, 85%, 38%; + --success-11: 170, 90%, 45%; + --success-12: 163, 69%, 81%; + + /* Amber */ + --warning-1: 36, 29%, 7%; + --warning-2: 39, 32%, 9%; + --warning-3: 36, 71%, 11%; + --warning-4: 37, 100%, 12%; + --warning-5: 37, 100%, 15%; + --warning-6: 39, 90%, 19%; + --warning-7: 37, 64%, 27%; + --warning-8: 36, 60%, 35%; + --warning-9: 42, 100%, 62%; + --warning-10: 50, 100%, 52%; + --warning-11: 46, 100%, 54%; + --warning-12: 41, 100%, 85%; + + /* Tomato */ + --error-1: 0, 17%, 8%; + --error-2: 10, 24%, 10%; + --error-3: 5, 48%, 15%; + --error-4: 4, 64%, 19%; + --error-5: 5, 62%, 23%; + --error-6: 7, 55%, 28%; + --error-7: 9, 49%, 35%; + --error-8: 10, 50%, 45%; + --error-9: 10, 78%, 54%; + --error-10: 11, 82%, 59%; + --error-11: 12, 100%, 75%; + --error-12: 10, 86%, 89%; + + /* Violet */ + --feature-1: 249, 27%, 10%; + --feature-2: 263, 28%, 11%; + --feature-3: 257, 37%, 19%; + --feature-4: 256, 42%, 25%; + --feature-5: 254, 39%, 30%; + --feature-6: 255, 36%, 34%; + --feature-7: 254, 33%, 41%; + --feature-8: 252, 34%, 51%; + --feature-9: 252, 56%, 57%; + --feature-10: 252, 60%, 63%; + --feature-11: 253, 100%, 83%; + --feature-12: 249, 94%, 93%; + + /* Blue */ + --info-1: 215, 42%, 9%; + --info-2: 218, 39%, 11%; + --info-3: 212, 69%, 16%; + --info-4: 209, 100%, 19%; + --info-5: 207, 100%, 23%; + --info-6: 209, 79%, 30%; + --info-7: 211, 66%, 37%; + --info-8: 211, 65%, 45%; + --info-9: 206, 100%, 50%; + --info-10: 210, 100%, 62%; + --info-11: 210, 100%, 72%; + --info-12: 205, 100%, 88%; + + + + /* Slate Dark */ + --accent-1: 240, 6%, 7%; + --accent-2: 220, 6%, 10%; + --accent-3: 225, 6%, 14%; + --accent-4: 210, 7%, 16%; + --accent-5: 214, 7%, 19%; + --accent-6: 213, 8%, 23%; + --accent-7: 213, 8%, 28%; + --accent-8: 212, 8%, 38%; + --accent-9: 219, 6%, 44%; + --accent-10: 222, 5%, 49%; + --accent-11: 216, 7%, 71%; + --accent-12: 220, 9%, 94%; + } +} diff --git a/internal/ui/components.json b/internal/ui/components.json new file mode 100644 index 0000000000..1ca1de2cc9 --- /dev/null +++ b/internal/ui/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/src/components", + "utils": "@/src/lib/utils", + "ui": "@/src/components", + "lib": "@/src/lib", + "hooks": "@/src/hooks" + }, + "iconLibrary": "lucide" +} diff --git a/internal/ui/css.ts b/internal/ui/css.ts new file mode 100644 index 0000000000..04937d9af0 --- /dev/null +++ b/internal/ui/css.ts @@ -0,0 +1,9 @@ +import "./colors.css"; + +/** + * This file exists only to be easy to import in other packages in our monorepo. + * Importing css files is a bit more involved, so we import a ts file, that imports a + * local css file. + * + * You can just do `import "@unkey/ui/css"` and it will load the css file. + */ diff --git a/internal/ui/package.json b/internal/ui/package.json new file mode 100644 index 0000000000..793693555c --- /dev/null +++ b/internal/ui/package.json @@ -0,0 +1,27 @@ +{ + "name": "@unkey/ui", + "version": "1.0.0", + "description": "", + "main": "./src/index.ts", + "types": "./src/index.ts", + "keywords": [], + "author": "Andreas Thomas", + "license": "AGPL-3.0", + "devDependencies": { + "@types/node": "^20.14.9", + "@types/react": "^18.3.11", + "@unkey/tsconfig": "workspace:^", + "tailwindcss": "^3.4.15", + "typescript": "^5.5.3" + }, + "dependencies": { + "@radix-ui/colors": "^3.0.0", + "@radix-ui/react-slot": "^1.1.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "lucide-react": "^0.378.0", + "react": "^18.2.0", + "tailwind-merge": "^2.5.4", + "tailwindcss-animate": "^1.0.7" + } +} diff --git a/internal/ui/src/components/button.tsx b/internal/ui/src/components/button.tsx new file mode 100644 index 0000000000..1e6ceecc85 --- /dev/null +++ b/internal/ui/src/components/button.tsx @@ -0,0 +1,134 @@ +"use client"; +import { Slot } from "@radix-ui/react-slot"; +import { type VariantProps, cva } from "class-variance-authority"; +import { Loader } from "lucide-react"; +import * as React from "react"; +import { cn } from "../lib/utils"; + +/** +primary = black +needs keyboard shortcut +secondary is white +focus state +keyboard select stae +*/ + +const buttonVariants = cva( + "inline-flex group items-center transition duration-150 justify-center gap-3 whitespace-nowrap tracking-normal rounded-lg font-medium transition-colors disabled:pointer-events-none focus:outline-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: + "bg-gray-3 hover:bg-gray-4 focus-visible:bg-gray-5 text-accent-12 border border-gray-6 hover:border-gray-8 ring-2 ring-transparent focus-visible:ring-gray-7 focus-visible:border-gray-7", + primary: + "bg-gray-12 hover:bg-gray-1 text-accent-1 hover:text-accent-12 border border-black dark:border-white hover:border-gray-4 ring-2 ring-transparent focus-visible:ring-gray-7 focus-visible:border-gray-3 drop-shadow-button duration-250", + destructive: + "text-error-9 border border-gray-6 hover:border-error-8 hover:bg-error-4 focus-visible:border-error-9 ring-2 ring-transparent focus-visible:ring-error-3", + ghost: + "text-accent-12 hover:bg-gray-3 ring-2 ring-transparent focus-visible:ring-accent-12", + }, + size: { + default: "h-8 px-3 py-1 text-sm", + }, + shape: { + square: "", + circle: "", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +); + +const keyboardIconVariants = cva( + "items-center transition duration-150 text-center items-center justify-center shadow-none size-5 flex justify-center font-mono text-xs font-medium border rounded-[5px]", + { + variants: { + variant: { + default: "bg-gray-3 border-gray-6 text-accent-12", + primary: + "duration-250 bg-black/10 border-gray-11 text-accent-1 group-hover:text-accent-12 group-hover:bg-gray-3 group-hover:border-gray-6", + destructive: "bg-gray-1 border-gray-6 text-accent-12 group-hover:border-error-8", + ghost: "border-gray-6 text-accent-12 ", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +export type ButtonProps = VariantProps & + React.ButtonHTMLAttributes & { + prefix?: React.ReactNode; + suffix?: React.ReactNode; + loading?: boolean; + disabled?: boolean; + + /** + * Keyboard shortcut to trigger the `onClick` handler + */ + keyboard?: { + /** + * The shortcut displayed on the button + */ + display: string; + /** + * Decide whether the button should be pressed + * Return true to trigger the callback function. + * @example: (e)=> e.key === "a" + */ + trigger: (e: KeyboardEvent) => boolean; + /** + * The function to be called + */ + callback: (e: KeyboardEvent) => void | Promise; + }; + + asChild?: boolean; + }; + +const Button: React.FC = ({ className, variant, size, asChild = false, ...props }) => { + const ref = React.useRef(); + + React.useEffect(() => { + if (!props.keyboard) { + return; + } + const down = (e: KeyboardEvent) => { + if (!props.keyboard!.trigger(e)) { + return; + } + e.preventDefault(); + + ref.current?.focus(); + props.keyboard!.callback(e); + }; + document.addEventListener("keydown", down); + return () => document.removeEventListener("keydown", down); + }, [props.keyboard]); + + const Comp = asChild ? Slot : "button"; + + return ( + + {props.loading ? : props.prefix} + {props.children} + {props.keyboard ? ( + {props.keyboard.display} + ) : ( + props.suffix + )} + + ); +}; +Button.displayName = "Button"; + +export { Button, buttonVariants }; diff --git a/internal/ui/src/index.ts b/internal/ui/src/index.ts new file mode 100644 index 0000000000..397b7785b8 --- /dev/null +++ b/internal/ui/src/index.ts @@ -0,0 +1 @@ +export * from "./components/button"; diff --git a/internal/ui/src/lib/utils.ts b/internal/ui/src/lib/utils.ts new file mode 100644 index 0000000000..365058cebd --- /dev/null +++ b/internal/ui/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/internal/ui/tailwind.config.js b/internal/ui/tailwind.config.js new file mode 100644 index 0000000000..ca5583bc1f --- /dev/null +++ b/internal/ui/tailwind.config.js @@ -0,0 +1,49 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [], + theme: { + extend: { + fontFamily: { + sans: ["var(--font-geist-sans)"], + mono: ["var(--font-geist-mono)"], + }, + colors: { + black: "black", + white: "white", + transparent: "transparent", + current: "currentColor", + gray: palette("gray"), + info: palette("info"), + success: palette("success"), + warning: palette("warning"), + error: palette("error"), + feature: palette("feature"), + accent: palette("accent"), + }, + dropShadow: { + // from vitor's figma + button: "0px 4px 4px 0px rgba(0, 0, 0, 0.25)", + }, + }, + }, + plugins: [], +}; + +/** + * returns a 12 step color scale from css variables + * + * @example: + * { + * 1: "hsl(var(--gray-1))", + * 2: "hsl(var(--gray-2))", + * ..., + * 12: "hsl(var(--gray-12))", + * } + */ +function palette(name) { + const colors = {}; + for (let i = 1; i <= 12; i++) { + colors[i] = `hsl(var(--${name}-${i}))`; + } + return colors; +} diff --git a/internal/ui/tsconfig.json b/internal/ui/tsconfig.json new file mode 100644 index 0000000000..08c6d2740f --- /dev/null +++ b/internal/ui/tsconfig.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@unkey/tsconfig/base.json", + "exclude": ["dist"], + "compilerOptions": { + "outDir": "dist", + "jsx": "react", + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f68d92aa1d..cd1ccbd66f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -202,7 +202,7 @@ importers: version: link:../../internal/schema ai: specifier: ^3.4.7 - version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.9)(vue@3.5.13)(zod@3.23.8) + version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.10)(vue@3.5.13)(zod@3.23.8) drizzle-orm: specifier: ^0.33.0 version: 0.33.0(@opentelemetry/api@1.4.1)(@planetscale/database@1.19.0)(@types/react@18.3.11)(react@18.3.1) @@ -314,10 +314,10 @@ importers: version: 1.0.7(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@tailwindcss/container-queries': specifier: ^0.1.1 - version: 0.1.1(tailwindcss@3.4.10) + version: 0.1.1(tailwindcss@3.4.15) '@tailwindcss/typography': specifier: ^0.5.12 - version: 0.5.12(tailwindcss@3.4.10) + version: 0.5.12(tailwindcss@3.4.15) '@tanstack/react-query': specifier: ^4.36.1 version: 4.36.1(react-dom@18.3.1)(react@18.3.1) @@ -542,13 +542,13 @@ importers: version: 1.37.0 tailwind-merge: specifier: ^2.2.2 - version: 2.3.0 + version: 2.5.4 tailwindcss: specifier: ^3.4.3 - version: 3.4.10(ts-node@10.9.2) + version: 3.4.15(ts-node@10.9.2) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.10) + version: 1.0.7(tailwindcss@3.4.15) trpc-tools: specifier: ^0.12.0 version: 0.12.0(@trpc/server@10.45.2)(typanion@3.14.0)(typescript@5.5.3)(zod@3.23.8) @@ -567,7 +567,7 @@ importers: version: 3.63.1 '@tailwindcss/aspect-ratio': specifier: ^0.4.2 - version: 0.4.2(tailwindcss@3.4.10) + version: 0.4.2(tailwindcss@3.4.15) '@types/d3-array': specifier: ^3.2.1 version: 3.2.1 @@ -602,36 +602,45 @@ importers: '@radix-ui/react-slot': specifier: ^1.1.0 version: 1.1.0(@types/react@18.3.11)(react@18.3.1) + '@unkey/ui': + specifier: workspace:^ + version: link:../../internal/ui fumadocs-core: specifier: 14.4.0 - version: 14.4.0(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) + version: 14.4.0(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1) fumadocs-mdx: specifier: 11.1.1 - version: 11.1.1(acorn@8.14.0)(fumadocs-core@14.4.0)(next@14.2.10) + version: 11.1.1(acorn@8.14.0)(fumadocs-core@14.4.0)(next@15.0.3) fumadocs-openapi: specifier: ^5.7.5 - version: 5.7.5(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10) + version: 5.7.5(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.15) fumadocs-twoslash: specifier: ^2.0.1 - version: 2.0.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(fumadocs-ui@14.4.0)(react-dom@18.3.1)(react@18.3.1)(shiki@1.23.1)(typescript@5.5.4) + version: 2.0.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(fumadocs-ui@14.4.0)(react-dom@18.3.1)(react@18.3.1)(shiki@1.24.0)(typescript@5.5.4) fumadocs-typescript: specifier: ^3.0.2 version: 3.0.2(typescript@5.5.4) fumadocs-ui: specifier: 14.4.0 - version: 14.4.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10) + version: 14.4.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.15) + geist: + specifier: ^1.3.1 + version: 1.3.1(next@15.0.3) lucide-react: specifier: ^0.378.0 version: 0.378.0(react@18.3.1) next: - specifier: ^14.2.8 - version: 14.2.10(@babel/core@7.26.0)(@opentelemetry/api@1.4.1)(react-dom@18.3.1)(react@18.3.1) + specifier: ^15.0.3 + version: 15.0.3(@babel/core@7.26.0)(react-dom@18.3.1)(react@18.3.1) react: specifier: ^18.3.1 version: 18.3.1 react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) + react-element-to-jsx-string: + specifier: ^15.0.0 + version: 15.0.0(react-dom@18.3.1)(react@18.3.1) zod: specifier: ^3.23.8 version: 3.23.8 @@ -656,7 +665,7 @@ importers: version: 8.4.45 tailwindcss: specifier: ^3.4.10 - version: 3.4.10(ts-node@10.9.2) + version: 3.4.15(ts-node@10.9.2) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -727,7 +736,7 @@ importers: version: 8.4.38 tailwindcss: specifier: ^3.4.3 - version: 3.4.10(ts-node@10.9.2) + version: 3.4.15(ts-node@10.9.2) typescript: specifier: ^5.5.3 version: 5.5.3 @@ -771,8 +780,8 @@ importers: specifier: ^2.1.1 version: 2.1.1 geist: - specifier: ^1.3.0 - version: 1.3.0(next@14.2.10) + specifier: ^1.3.1 + version: 1.3.1(next@14.2.10) lucide-react: specifier: ^0.378.0 version: 0.378.0(react@18.3.1) @@ -814,10 +823,10 @@ importers: version: 1.5.0(react-dom@18.3.1)(react@18.3.1) tailwind-merge: specifier: ^2.3.0 - version: 2.3.0 + version: 2.5.4 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.10) + version: 1.0.7(tailwindcss@3.4.15) xterm-for-react: specifier: ^1.0.4 version: 1.0.4(react-dom@18.3.1)(react@18.3.1) @@ -842,10 +851,10 @@ importers: version: 8.4.38 tailwind-scrollbar: specifier: ^3.1.0 - version: 3.1.0(tailwindcss@3.4.10) + version: 3.1.0(tailwindcss@3.4.15) tailwindcss: specifier: ^3.4.3 - version: 3.4.10(ts-node@10.9.2) + version: 3.4.15(ts-node@10.9.2) typescript: specifier: ^5.5.3 version: 5.5.3 @@ -881,7 +890,7 @@ importers: version: link:../../internal/worker-logging ai: specifier: ^3.0.23 - version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.9)(vue@3.5.13)(zod@3.23.8) + version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.10)(vue@3.5.13)(zod@3.23.8) drizzle-orm: specifier: generated version: 0.32.0-aaf764c(@cloudflare/workers-types@4.20240603.0)(@planetscale/database@1.19.0)(react@18.3.1) @@ -1024,7 +1033,7 @@ importers: version: 14.5.4(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) geist: specifier: ^1.3.0 - version: 1.3.0(next@14.2.10) + version: 1.3.1(next@14.2.10) github-slugger: specifier: ^2.0.0 version: 2.0.0 @@ -1075,10 +1084,10 @@ importers: version: 1.12.0 tailwind-merge: specifier: ^2.2.2 - version: 2.3.0 + version: 2.5.4 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.10) + version: 1.0.7(tailwindcss@3.4.15) vaul: specifier: ^0.9.0 version: 0.9.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) @@ -1100,10 +1109,10 @@ importers: version: 4.9.5(react@18.3.1) '@tailwindcss/aspect-ratio': specifier: ^0.4.2 - version: 0.4.2(tailwindcss@3.4.10) + version: 0.4.2(tailwindcss@3.4.15) '@tailwindcss/typography': specifier: ^0.5.12 - version: 0.5.12(tailwindcss@3.4.10) + version: 0.5.12(tailwindcss@3.4.15) '@types/fslightbox-react': specifier: ^1.7.7 version: 1.7.7 @@ -1130,7 +1139,7 @@ importers: version: 8.4.38 tailwindcss: specifier: ^3.4.3 - version: 3.4.10(ts-node@10.9.2) + version: 3.4.15(ts-node@10.9.2) typescript: specifier: ^5.5.3 version: 5.5.3 @@ -1145,7 +1154,7 @@ importers: version: link:../../packages/error ai: specifier: ^3.0.23 - version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.9)(vue@3.5.13)(zod@3.23.8) + version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.10)(vue@3.5.13)(zod@3.23.8) zod: specifier: ^3.23.5 version: 3.23.8 @@ -1436,6 +1445,49 @@ importers: internal/tsconfig: {} + internal/ui: + dependencies: + '@radix-ui/colors': + specifier: ^3.0.0 + version: 3.0.0 + '@radix-ui/react-slot': + specifier: ^1.1.0 + version: 1.1.0(@types/react@18.3.11)(react@18.3.1) + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + lucide-react: + specifier: ^0.378.0 + version: 0.378.0(react@18.3.1) + react: + specifier: ^18.2.0 + version: 18.3.1 + tailwind-merge: + specifier: ^2.5.4 + version: 2.5.4 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.15) + devDependencies: + '@types/node': + specifier: ^20.14.9 + version: 20.14.9 + '@types/react': + specifier: ^18.3.11 + version: 18.3.11 + '@unkey/tsconfig': + specifier: workspace:^ + version: link:../tsconfig + tailwindcss: + specifier: ^3.4.15 + version: 3.4.15(ts-node@10.9.2) + typescript: + specifier: ^5.5.3 + version: 5.5.3 + internal/vault: devDependencies: '@types/node': @@ -1863,7 +1915,7 @@ packages: - zod dev: false - /@ai-sdk/svelte@0.0.51(svelte@5.2.9)(zod@3.23.8): + /@ai-sdk/svelte@0.0.51(svelte@5.2.10)(zod@3.23.8): resolution: {integrity: sha512-aIZJaIds+KpCt19yUDCRDWebzF/17GCY7gN9KkcA2QM6IKRO5UmMcqEYja0ZmwFQPm1kBZkF2njhr8VXis2mAw==} engines: {node: '>=18'} peerDependencies: @@ -1874,8 +1926,8 @@ packages: dependencies: '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.46(zod@3.23.8) - sswr: 2.1.0(svelte@5.2.9) - svelte: 5.2.9 + sswr: 2.1.0(svelte@5.2.10) + svelte: 5.2.10 transitivePeerDependencies: - zod dev: false @@ -2557,6 +2609,10 @@ packages: minimist: 1.2.8 dev: false + /@base2/pretty-print-object@1.0.1: + resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} + dev: false + /@biomejs/biome@1.6.3: resolution: {integrity: sha512-Xnp/TIpIcTnRA4LwerJuoGYQJEqwXtn5AL0U0OPXll/QGbAKmcUAfizU880xTwZRD4f53iceqODLDaD3wxYlIw==} engines: {node: '>=14.*'} @@ -5146,8 +5202,8 @@ packages: tslib: 2.8.1 dev: false - /@fumari/json-schema-to-typescript@1.1.1: - resolution: {integrity: sha512-vVnuwLqW8WJsg09EanNHnXnzsjYYsZE7JlD4M1sLvDnWGjvYJKNU6VpRqDxOiDChUszDZFKhxQSNYGShF0bKJg==} + /@fumari/json-schema-to-typescript@1.1.2: + resolution: {integrity: sha512-OTWBpcRHnMcev652Dcl6xh2SFdTgiZzI9p4iI+pQI06LPOJKHBCVXQEBdOYlczPDQfOxwcNd3QGYeIAnOA0j2g==} engines: {node: '>=18.0.0'} dependencies: '@apidevtools/json-schema-ref-parser': 11.7.2 @@ -5253,6 +5309,17 @@ packages: '@img/sharp-libvips-darwin-arm64': 1.0.2 optional: true + /@img/sharp-darwin-arm64@0.33.5: + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + dev: false + optional: true + /@img/sharp-darwin-x64@0.33.4: resolution: {integrity: sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==} engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5263,6 +5330,17 @@ packages: '@img/sharp-libvips-darwin-x64': 1.0.2 optional: true + /@img/sharp-darwin-x64@0.33.5: + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + dev: false + optional: true + /@img/sharp-libvips-darwin-arm64@1.0.2: resolution: {integrity: sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==} engines: {macos: '>=11', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5271,6 +5349,14 @@ packages: requiresBuild: true optional: true + /@img/sharp-libvips-darwin-arm64@1.0.4: + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@img/sharp-libvips-darwin-x64@1.0.2: resolution: {integrity: sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==} engines: {macos: '>=10.13', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5279,6 +5365,14 @@ packages: requiresBuild: true optional: true + /@img/sharp-libvips-darwin-x64@1.0.4: + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@img/sharp-libvips-linux-arm64@1.0.2: resolution: {integrity: sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==} engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5287,6 +5381,14 @@ packages: requiresBuild: true optional: true + /@img/sharp-libvips-linux-arm64@1.0.4: + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@img/sharp-libvips-linux-arm@1.0.2: resolution: {integrity: sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==} engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5295,6 +5397,14 @@ packages: requiresBuild: true optional: true + /@img/sharp-libvips-linux-arm@1.0.5: + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@img/sharp-libvips-linux-s390x@1.0.2: resolution: {integrity: sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==} engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5303,6 +5413,14 @@ packages: requiresBuild: true optional: true + /@img/sharp-libvips-linux-s390x@1.0.4: + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@img/sharp-libvips-linux-x64@1.0.2: resolution: {integrity: sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==} engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5311,6 +5429,14 @@ packages: requiresBuild: true optional: true + /@img/sharp-libvips-linux-x64@1.0.4: + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@img/sharp-libvips-linuxmusl-arm64@1.0.2: resolution: {integrity: sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==} engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5319,6 +5445,14 @@ packages: requiresBuild: true optional: true + /@img/sharp-libvips-linuxmusl-arm64@1.0.4: + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@img/sharp-libvips-linuxmusl-x64@1.0.2: resolution: {integrity: sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==} engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5327,6 +5461,14 @@ packages: requiresBuild: true optional: true + /@img/sharp-libvips-linuxmusl-x64@1.0.4: + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@img/sharp-linux-arm64@0.33.4: resolution: {integrity: sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==} engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5337,6 +5479,17 @@ packages: '@img/sharp-libvips-linux-arm64': 1.0.2 optional: true + /@img/sharp-linux-arm64@0.33.5: + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + dev: false + optional: true + /@img/sharp-linux-arm@0.33.4: resolution: {integrity: sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==} engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5347,6 +5500,17 @@ packages: '@img/sharp-libvips-linux-arm': 1.0.2 optional: true + /@img/sharp-linux-arm@0.33.5: + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + dev: false + optional: true + /@img/sharp-linux-s390x@0.33.4: resolution: {integrity: sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==} engines: {glibc: '>=2.31', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5357,6 +5521,17 @@ packages: '@img/sharp-libvips-linux-s390x': 1.0.2 optional: true + /@img/sharp-linux-s390x@0.33.5: + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + dev: false + optional: true + /@img/sharp-linux-x64@0.33.4: resolution: {integrity: sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==} engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5367,6 +5542,17 @@ packages: '@img/sharp-libvips-linux-x64': 1.0.2 optional: true + /@img/sharp-linux-x64@0.33.5: + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + dev: false + optional: true + /@img/sharp-linuxmusl-arm64@0.33.4: resolution: {integrity: sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==} engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5377,6 +5563,17 @@ packages: '@img/sharp-libvips-linuxmusl-arm64': 1.0.2 optional: true + /@img/sharp-linuxmusl-arm64@0.33.5: + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + dev: false + optional: true + /@img/sharp-linuxmusl-x64@0.33.4: resolution: {integrity: sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==} engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5387,6 +5584,17 @@ packages: '@img/sharp-libvips-linuxmusl-x64': 1.0.2 optional: true + /@img/sharp-linuxmusl-x64@0.33.5: + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + dev: false + optional: true + /@img/sharp-wasm32@0.33.4: resolution: {integrity: sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5396,6 +5604,16 @@ packages: '@emnapi/runtime': 1.3.1 optional: true + /@img/sharp-wasm32@0.33.5: + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@emnapi/runtime': 1.3.1 + dev: false + optional: true + /@img/sharp-win32-ia32@0.33.4: resolution: {integrity: sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5404,6 +5622,15 @@ packages: requiresBuild: true optional: true + /@img/sharp-win32-ia32@0.33.5: + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@img/sharp-win32-x64@0.33.4: resolution: {integrity: sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -5412,6 +5639,15 @@ packages: requiresBuild: true optional: true + /@img/sharp-win32-x64@0.33.5: + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@inquirer/confirm@3.2.0: resolution: {integrity: sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==} engines: {node: '>=18'} @@ -5427,7 +5663,7 @@ packages: '@inquirer/figures': 1.0.8 '@inquirer/type': 2.0.0 '@types/mute-stream': 0.0.4 - '@types/node': 22.10.0 + '@types/node': 22.10.1 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 cli-width: 4.1.0 @@ -6067,6 +6303,10 @@ packages: /@next/env@14.2.10: resolution: {integrity: sha512-dZIu93Bf5LUtluBXIv4woQw2cZVZ2DJTjax5/5DOs3lzEOeKLy7GxRSr4caK9/SCPdaW6bCgpye6+n4Dh9oJPw==} + /@next/env@15.0.3: + resolution: {integrity: sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==} + dev: false + /@next/swc-darwin-arm64@14.1.0: resolution: {integrity: sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==} engines: {node: '>= 10'} @@ -6084,6 +6324,15 @@ packages: requiresBuild: true optional: true + /@next/swc-darwin-arm64@15.0.3: + resolution: {integrity: sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@next/swc-darwin-x64@14.1.0: resolution: {integrity: sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==} engines: {node: '>= 10'} @@ -6101,6 +6350,15 @@ packages: requiresBuild: true optional: true + /@next/swc-darwin-x64@15.0.3: + resolution: {integrity: sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-arm64-gnu@14.1.0: resolution: {integrity: sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==} engines: {node: '>= 10'} @@ -6118,6 +6376,15 @@ packages: requiresBuild: true optional: true + /@next/swc-linux-arm64-gnu@15.0.3: + resolution: {integrity: sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-arm64-musl@14.1.0: resolution: {integrity: sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==} engines: {node: '>= 10'} @@ -6135,6 +6402,15 @@ packages: requiresBuild: true optional: true + /@next/swc-linux-arm64-musl@15.0.3: + resolution: {integrity: sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-x64-gnu@14.1.0: resolution: {integrity: sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==} engines: {node: '>= 10'} @@ -6152,6 +6428,15 @@ packages: requiresBuild: true optional: true + /@next/swc-linux-x64-gnu@15.0.3: + resolution: {integrity: sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-x64-musl@14.1.0: resolution: {integrity: sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==} engines: {node: '>= 10'} @@ -6169,6 +6454,15 @@ packages: requiresBuild: true optional: true + /@next/swc-linux-x64-musl@15.0.3: + resolution: {integrity: sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-win32-arm64-msvc@14.1.0: resolution: {integrity: sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==} engines: {node: '>= 10'} @@ -6186,6 +6480,15 @@ packages: requiresBuild: true optional: true + /@next/swc-win32-arm64-msvc@15.0.3: + resolution: {integrity: sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@next/swc-win32-ia32-msvc@14.1.0: resolution: {integrity: sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==} engines: {node: '>= 10'} @@ -6220,6 +6523,15 @@ packages: requiresBuild: true optional: true + /@next/swc-win32-x64-msvc@15.0.3: + resolution: {integrity: sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -7392,7 +7704,7 @@ packages: resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} engines: {node: '>=8.0.0'} dependencies: - tslib: 2.8.1 + tslib: 2.4.1 dev: false /@peculiar/webcrypto@1.4.1: @@ -7402,7 +7714,7 @@ packages: '@peculiar/asn1-schema': 2.3.13 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.6 - tslib: 2.8.1 + tslib: 2.4.1 webcrypto-core: 1.8.1 dev: false @@ -7498,6 +7810,10 @@ packages: resolution: {integrity: sha512-xySw8f0ZVsAEP+e7iLl3EvcBXX7gsIlC1Zso/sPBW9gIWerBTgz6axrjU+MZ39wD+WFi5h5zdWpsg3+hwt2Qsg==} dev: false + /@radix-ui/colors@3.0.0: + resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} + dev: false + /@radix-ui/number@1.0.1: resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: @@ -10186,56 +10502,56 @@ packages: '@types/hast': 3.0.4 dev: false - /@shikijs/core@1.23.1: - resolution: {integrity: sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==} + /@shikijs/core@1.24.0: + resolution: {integrity: sha512-6pvdH0KoahMzr6689yh0QJ3rCgF4j1XsXRHNEeEN6M4xJTfQ6QPWrmHzIddotg+xPJUPEPzYzYCKzpYyhTI6Gw==} dependencies: - '@shikijs/engine-javascript': 1.23.1 - '@shikijs/engine-oniguruma': 1.23.1 - '@shikijs/types': 1.23.1 + '@shikijs/engine-javascript': 1.24.0 + '@shikijs/engine-oniguruma': 1.24.0 + '@shikijs/types': 1.24.0 '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 hast-util-to-html: 9.0.3 dev: false - /@shikijs/engine-javascript@1.23.1: - resolution: {integrity: sha512-i/LdEwT5k3FVu07SiApRFwRcSJs5QM9+tod5vYCPig1Ywi8GR30zcujbxGQFJHwYD7A5BUqagi8o5KS+LEVgBg==} + /@shikijs/engine-javascript@1.24.0: + resolution: {integrity: sha512-ZA6sCeSsF3Mnlxxr+4wGEJ9Tto4RHmfIS7ox8KIAbH0MTVUkw3roHPHZN+LlJMOHJJOVupe6tvuAzRpN8qK1vA==} dependencies: - '@shikijs/types': 1.23.1 + '@shikijs/types': 1.24.0 '@shikijs/vscode-textmate': 9.3.0 - oniguruma-to-es: 0.4.1 + oniguruma-to-es: 0.7.0 dev: false - /@shikijs/engine-oniguruma@1.23.1: - resolution: {integrity: sha512-KQ+lgeJJ5m2ISbUZudLR1qHeH3MnSs2mjFg7bnencgs5jDVPeJ2NVDJ3N5ZHbcTsOIh0qIueyAJnwg7lg7kwXQ==} + /@shikijs/engine-oniguruma@1.24.0: + resolution: {integrity: sha512-Eua0qNOL73Y82lGA4GF5P+G2+VXX9XnuUxkiUuwcxQPH4wom+tE39kZpBFXfUuwNYxHSkrSxpB1p4kyRW0moSg==} dependencies: - '@shikijs/types': 1.23.1 + '@shikijs/types': 1.24.0 '@shikijs/vscode-textmate': 9.3.0 dev: false - /@shikijs/rehype@1.23.1: - resolution: {integrity: sha512-PH5bpMDEc4nBP62Ci3lUqkxBWRTm8cdE+eY9er5QD50jAWQxhXcc1Aeax1AlyrASrtjTwCkI22M6N9iSn5p+bQ==} + /@shikijs/rehype@1.24.0: + resolution: {integrity: sha512-ZUbSSc2/bKFqROdU7CwdeuLjtGiwRVy68G8vcHKi3feXqfv/LJCfaC20WBRvrSkw1RWJUaQX3g2ROL4ggwGrug==} dependencies: - '@shikijs/types': 1.23.1 + '@shikijs/types': 1.24.0 '@types/hast': 3.0.4 hast-util-to-string: 3.0.1 - shiki: 1.23.1 + shiki: 1.24.0 unified: 11.0.5 unist-util-visit: 5.0.0 dev: false - /@shikijs/twoslash@1.23.1(typescript@5.5.4): - resolution: {integrity: sha512-Qj/+CGAF6TdcRjPDQn1bxyKD8ejnV7VJLqCHzob1uCbwQlJTI5z0gUVAgpqS55z4vdV1Mrx2IpCTl9glhC0l3A==} + /@shikijs/twoslash@1.24.0(typescript@5.5.4): + resolution: {integrity: sha512-ELyIoD54dFDlb4eGt5sy54WhFeJ39N1hR9W7ADwHWn3XH7cOPjj320EPCh2t76fIoLb0auD46tVLQVVMn93qsA==} dependencies: - '@shikijs/core': 1.23.1 - '@shikijs/types': 1.23.1 + '@shikijs/core': 1.24.0 + '@shikijs/types': 1.24.0 twoslash: 0.2.12(typescript@5.5.4) transitivePeerDependencies: - supports-color - typescript dev: false - /@shikijs/types@1.23.1: - resolution: {integrity: sha512-98A5hGyEhzzAgQh2dAeHKrWW4HfCMeoFER2z16p5eJ+vmPeF6lZ/elEne6/UCU551F/WqkopqRsr1l2Yu6+A0g==} + /@shikijs/types@1.24.0: + resolution: {integrity: sha512-aptbEuq1Pk88DMlCe+FzXNnBZ17LCiLIGWAeCWhoFDzia5Q5Krx3DgnULLiouSdd6+LUM39XwXGppqYE0Ghtug==} dependencies: '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 @@ -10453,6 +10769,12 @@ packages: /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + /@swc/helpers@0.5.13: + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + dependencies: + tslib: 2.8.1 + dev: false + /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: @@ -10478,23 +10800,23 @@ packages: defer-to-connect: 2.0.1 dev: true - /@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.10): + /@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.15): resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==} peerDependencies: tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' dependencies: - tailwindcss: 3.4.10(ts-node@10.9.2) + tailwindcss: 3.4.15(ts-node@10.9.2) dev: true - /@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.10): + /@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.15): resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==} peerDependencies: tailwindcss: '>=3.2.0' dependencies: - tailwindcss: 3.4.10(ts-node@10.9.2) + tailwindcss: 3.4.15(ts-node@10.9.2) dev: false - /@tailwindcss/typography@0.5.12(tailwindcss@3.4.10): + /@tailwindcss/typography@0.5.12(tailwindcss@3.4.15): resolution: {integrity: sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' @@ -10503,9 +10825,9 @@ packages: lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.10(ts-node@10.9.2) + tailwindcss: 3.4.15(ts-node@10.9.2) - /@tailwindcss/typography@0.5.15(tailwindcss@3.4.10): + /@tailwindcss/typography@0.5.15(tailwindcss@3.4.15): resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' @@ -10514,7 +10836,7 @@ packages: lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.10(ts-node@10.9.2) + tailwindcss: 3.4.15(ts-node@10.9.2) dev: false /@tanstack/query-core@4.36.1: @@ -10903,8 +11225,8 @@ packages: resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} dev: false - /@types/d3-scale-chromatic@3.0.3: - resolution: {integrity: sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==} + /@types/d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} dev: false /@types/d3-scale@4.0.2: @@ -10997,7 +11319,7 @@ packages: '@types/d3-quadtree': 3.0.6 '@types/d3-random': 3.0.3 '@types/d3-scale': 4.0.8 - '@types/d3-scale-chromatic': 3.0.3 + '@types/d3-scale-chromatic': 3.1.0 '@types/d3-selection': 3.0.11 '@types/d3-shape': 3.1.6 '@types/d3-time': 3.0.4 @@ -11195,8 +11517,8 @@ packages: resolution: {integrity: sha512-vmYJF0REqDyyU0gviezF/KHq/fYaUbFhkcNbQCuPGFQj6VTbXuHZoxs/Y7mutWe73C8AC6l9fFu8mSYiBAqkGA==} dev: false - /@types/node@18.19.66: - resolution: {integrity: sha512-14HmtUdGxFUalGRfLLn9Gc1oNWvWh5zNbsyOLo5JV6WARSeN1QcEBKRnZm9QqNfrutgsl/hY4eJW63aZ44aBCg==} + /@types/node@18.19.67: + resolution: {integrity: sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==} dependencies: undici-types: 5.26.5 @@ -11205,8 +11527,8 @@ packages: dependencies: undici-types: 5.26.5 - /@types/node@22.10.0: - resolution: {integrity: sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==} + /@types/node@22.10.1: + resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} dependencies: undici-types: 6.20.0 dev: true @@ -11319,7 +11641,7 @@ packages: /@types/ssh2@1.15.1: resolution: {integrity: sha512-ZIbEqKAsi5gj35y4P4vkJYly642wIbY6PqoN0xiyQGshKUGXR9WQjF/iF9mXBQ8uBKy3ezfsCkcoHKhd0BzuDA==} dependencies: - '@types/node': 18.19.66 + '@types/node': 18.19.67 dev: true /@types/statuses@2.0.5: @@ -12019,7 +12341,7 @@ packages: indent-string: 5.0.0 dev: true - /ai@3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.9)(vue@3.5.13)(zod@3.23.8): + /ai@3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.2.10)(vue@3.5.13)(zod@3.23.8): resolution: {integrity: sha512-SutkVjFE86+xNql7fJERJkSEwpILEuiQvCoogJef6ZX/PGHvu3yepwHwVwedgABXe9SudOIKN48EQESrXX/xCw==} engines: {node: '>=18'} peerDependencies: @@ -12044,7 +12366,7 @@ packages: '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8) '@ai-sdk/react': 0.0.62(react@18.3.1)(zod@3.23.8) '@ai-sdk/solid': 0.0.49(zod@3.23.8) - '@ai-sdk/svelte': 0.0.51(svelte@5.2.9)(zod@3.23.8) + '@ai-sdk/svelte': 0.0.51(svelte@5.2.10)(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.46(zod@3.23.8) '@ai-sdk/vue': 0.0.53(vue@3.5.13)(zod@3.23.8) '@opentelemetry/api': 1.4.1 @@ -12055,7 +12377,7 @@ packages: openai: 4.52.1 react: 18.3.1 secure-json-parse: 2.7.0 - svelte: 5.2.9 + svelte: 5.2.10 zod: 3.23.8 zod-to-json-schema: 3.23.2(zod@3.23.8) transitivePeerDependencies: @@ -12657,7 +12979,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001684 - electron-to-chromium: 1.5.65 + electron-to-chromium: 1.5.66 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -14308,7 +14630,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.4.1 dev: false /dot-prop@6.0.1: @@ -14797,8 +15119,8 @@ packages: jake: 10.9.2 dev: true - /electron-to-chromium@1.5.65: - resolution: {integrity: sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==} + /electron-to-chromium@1.5.66: + resolution: {integrity: sha512-pI2QF6+i+zjPbqRzJwkMvtvkdI7MjVbSh2g8dlMguDJIXEPw+kwasS1Jl+YGPEBfGVxsVgGUratAKymPdPo2vQ==} /emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -14981,7 +15303,7 @@ packages: typed-array-byte-offset: 1.0.3 typed-array-length: 1.0.7 unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 + which-typed-array: 1.1.16 /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} @@ -15422,8 +15744,8 @@ packages: - supports-color dev: false - /esm-env@1.1.4: - resolution: {integrity: sha512-oO82nKPHKkzIj/hbtuDYy/JHqBHFlMIW36SDiPCVsj87ntDLcWN+sJ1erdVryd4NxODacFTsdrIE3b7IamqbOg==} + /esm-env@1.2.0: + resolution: {integrity: sha512-OhSQuHL3mUcaQHjGe8UMG8GsJIJHYYz0flR0h9fiTPNMupLMkb7TvcRD0EeJXW5a8GHBgfz08b6FDLNK7kkPQA==} dev: false /espree@10.3.0: @@ -15746,7 +16068,7 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true dependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.3.4 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -16220,7 +16542,7 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /fumadocs-core@14.4.0(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1): + /fumadocs-core@14.4.0(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-hb+SeSqX93Lczl7okwKzYhoruRa4VaPqbkk7x+zq1i2y6AhuIOeImdqqNy4Zno9KOdhiesfPuB6zXTZnoGeSgg==} peerDependencies: '@oramacloud/client': 1.x.x @@ -16242,20 +16564,20 @@ packages: dependencies: '@formatjs/intl-localematcher': 0.5.8 '@orama/orama': 3.0.2 - '@shikijs/rehype': 1.23.1 + '@shikijs/rehype': 1.24.0 github-slugger: 2.0.0 hast-util-to-estree: 3.1.0 hast-util-to-jsx-runtime: 2.3.2 image-size: 1.1.1 negotiator: 1.0.0 - next: 14.2.10(@babel/core@7.26.0)(@opentelemetry/api@1.4.1)(react-dom@18.3.1)(react@18.3.1) + next: 15.0.3(@babel/core@7.26.0)(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-remove-scroll: 2.6.0(@types/react@18.3.11)(react@18.3.1) remark: 15.0.1 remark-gfm: 4.0.0 scroll-into-view-if-needed: 3.1.0 - shiki: 1.23.1 + shiki: 1.24.0 unist-util-visit: 5.0.0 transitivePeerDependencies: - '@types/react' @@ -16284,7 +16606,7 @@ packages: dependencies: '@formatjs/intl-localematcher': 0.5.8 '@orama/orama': 3.0.2 - '@shikijs/rehype': 1.23.1 + '@shikijs/rehype': 1.24.0 github-slugger: 2.0.0 hast-util-to-estree: 3.1.0 hast-util-to-jsx-runtime: 2.3.2 @@ -16297,14 +16619,56 @@ packages: remark: 15.0.1 remark-gfm: 4.0.0 scroll-into-view-if-needed: 3.1.0 - shiki: 1.23.1 + shiki: 1.24.0 + unist-util-visit: 5.0.0 + transitivePeerDependencies: + - '@types/react' + - supports-color + dev: false + + /fumadocs-core@14.5.4(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-MPtCm/qMr1/mruPc/PFD0JXlM9rAIinSInY69ePoUORB+62NQ0Zw00xM1JU3Xhhzr0NUVolHQAVM0yzkE3pb5A==} + peerDependencies: + '@oramacloud/client': 1.x.x + algoliasearch: 4.24.0 + next: 14.x.x || 15.x.x + react: '>= 18' + react-dom: '>= 18' + peerDependenciesMeta: + '@oramacloud/client': + optional: true + algoliasearch: + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + dependencies: + '@formatjs/intl-localematcher': 0.5.8 + '@orama/orama': 3.0.2 + '@shikijs/rehype': 1.24.0 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.0 + hast-util-to-jsx-runtime: 2.3.2 + image-size: 1.1.1 + negotiator: 1.0.0 + next: 15.0.3(@babel/core@7.26.0)(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.6.0(@types/react@18.3.11)(react@18.3.1) + remark: 15.0.1 + remark-gfm: 4.0.0 + scroll-into-view-if-needed: 3.1.0 + shiki: 1.24.0 unist-util-visit: 5.0.0 transitivePeerDependencies: - '@types/react' - supports-color dev: false - /fumadocs-mdx@11.1.1(acorn@8.14.0)(fumadocs-core@14.4.0)(next@14.2.10): + /fumadocs-mdx@11.1.1(acorn@8.14.0)(fumadocs-core@14.4.0)(next@15.0.3): resolution: {integrity: sha512-78Nu/PHfBaRnPWTDTGVVZrG+A7rfK3NU7DX1aCEnZHEfwuY0NmuIOtDIYcoidZxjc88DnoewV+cJoBNn7I/D8Q==} hasBin: true peerDependencies: @@ -16317,17 +16681,17 @@ packages: esbuild: 0.24.0 estree-util-value-to-estree: 3.2.1 fast-glob: 3.3.2 - fumadocs-core: 14.4.0(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) + fumadocs-core: 14.4.0(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1) gray-matter: 4.0.3 micromatch: 4.0.8 - next: 14.2.10(@babel/core@7.26.0)(@opentelemetry/api@1.4.1)(react-dom@18.3.1)(react@18.3.1) + next: 15.0.3(@babel/core@7.26.0)(react-dom@18.3.1)(react@18.3.1) zod: 3.23.8 transitivePeerDependencies: - acorn - supports-color dev: false - /fumadocs-openapi@5.7.5(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10): + /fumadocs-openapi@5.7.5(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.15): resolution: {integrity: sha512-vZjjSDpaCTM5ZCooOVLe8/IQ8+Vw5iquRU374Schpq3+HA9CHykKlQjuKyB6dnST15fGQ1JstG9qofYiI8gn8w==} peerDependencies: next: 14.x.x || 15.x.x @@ -16335,24 +16699,24 @@ packages: react-dom: '>= 18' dependencies: '@apidevtools/json-schema-ref-parser': 11.7.2 - '@fumari/json-schema-to-typescript': 1.1.1 + '@fumari/json-schema-to-typescript': 1.1.2 '@radix-ui/react-select': 2.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) class-variance-authority: 0.7.1 fast-glob: 3.3.2 - fumadocs-core: 14.5.4(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) - fumadocs-ui: 14.5.4(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10) + fumadocs-core: 14.5.4(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1) + fumadocs-ui: 14.5.4(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.15) github-slugger: 2.0.0 hast-util-to-jsx-runtime: 2.3.2 js-yaml: 4.1.0 - next: 14.2.10(@babel/core@7.26.0)(@opentelemetry/api@1.4.1)(react-dom@18.3.1)(react@18.3.1) + next: 15.0.3(@babel/core@7.26.0)(react-dom@18.3.1)(react@18.3.1) openapi-sampler: 1.6.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-hook-form: 7.53.2(react@18.3.1) remark: 15.0.1 remark-rehype: 11.1.1 - shiki: 1.23.1 + shiki: 1.24.0 transitivePeerDependencies: - '@oramacloud/client' - '@types/react' @@ -16362,7 +16726,7 @@ packages: - tailwindcss dev: false - /fumadocs-twoslash@2.0.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(fumadocs-ui@14.4.0)(react-dom@18.3.1)(react@18.3.1)(shiki@1.23.1)(typescript@5.5.4): + /fumadocs-twoslash@2.0.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(fumadocs-ui@14.4.0)(react-dom@18.3.1)(react@18.3.1)(shiki@1.24.0)(typescript@5.5.4): resolution: {integrity: sha512-rpc4yci9sSslsmuS3KRp7ByqXFvffpSSMnmCPsByLnHY0t+aUFut7YAfvqJPyALPpj/si9ghaPJG/T1fcrL0uA==} peerDependencies: fumadocs-ui: ^13.0.0 || ^14.0.0 @@ -16370,13 +16734,13 @@ packages: shiki: 1.x.x dependencies: '@radix-ui/react-popover': 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@shikijs/twoslash': 1.23.1(typescript@5.5.4) - fumadocs-ui: 14.4.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10) + '@shikijs/twoslash': 1.24.0(typescript@5.5.4) + fumadocs-ui: 14.4.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.15) mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.0.0 mdast-util-to-hast: 13.2.0 react: 18.3.1 - shiki: 1.23.1 + shiki: 1.24.0 tailwind-merge: 2.5.5 transitivePeerDependencies: - '@types/react' @@ -16397,14 +16761,14 @@ packages: mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.0.0 mdast-util-to-hast: 13.2.0 - shiki: 1.23.1 + shiki: 1.24.0 ts-morph: 24.0.0 typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: false - /fumadocs-ui@14.4.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10): + /fumadocs-ui@14.4.0(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.15): resolution: {integrity: sha512-UJbhqCKyt4hlXzg+5nj9c48ISOWarxaLfzS8pzjVDE859vnSZVcBYzCMOFIvB2J0DGLX9yvK5RPXuuHkloMNfg==} peerDependencies: next: 14.x.x || 15.x.x @@ -16424,17 +16788,17 @@ packages: '@radix-ui/react-scroll-area': 1.2.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-tabs': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) - '@tailwindcss/typography': 0.5.15(tailwindcss@3.4.10) + '@tailwindcss/typography': 0.5.15(tailwindcss@3.4.15) class-variance-authority: 0.7.1 - fumadocs-core: 14.4.0(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) + fumadocs-core: 14.4.0(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1) lucide-react: 0.456.0(react@18.3.1) - next: 14.2.10(@babel/core@7.26.0)(@opentelemetry/api@1.4.1)(react-dom@18.3.1)(react@18.3.1) + next: 15.0.3(@babel/core@7.26.0)(react-dom@18.3.1)(react@18.3.1) next-themes: 0.4.3(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-medium-image-zoom: 5.2.11(react-dom@18.3.1)(react@18.3.1) tailwind-merge: 2.5.5 - tailwindcss: 3.4.10(ts-node@10.9.2) + tailwindcss: 3.4.15(ts-node@10.9.2) transitivePeerDependencies: - '@oramacloud/client' - '@types/react' @@ -16443,7 +16807,7 @@ packages: - supports-color dev: false - /fumadocs-ui@14.5.4(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.10): + /fumadocs-ui@14.5.4(@types/react-dom@18.3.0)(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1)(tailwindcss@3.4.15): resolution: {integrity: sha512-0MkYEYp3SsFbAWRrNz2XL1ODqDpCHSKbGqO9nUbgg+0AuGiV4gxISP5E2NDvDZpTPz3W+c0mzHrZkPq6r2MVGQ==} peerDependencies: next: 14.x.x || 15.x.x @@ -16464,17 +16828,17 @@ packages: '@radix-ui/react-slot': 1.1.0(@types/react@18.3.11)(react@18.3.1) '@radix-ui/react-tabs': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) class-variance-authority: 0.7.1 - fumadocs-core: 14.5.4(@types/react@18.3.11)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1) + fumadocs-core: 14.5.4(@types/react@18.3.11)(next@15.0.3)(react-dom@18.3.1)(react@18.3.1) lodash.merge: 4.6.2 lucide-react: 0.460.0(react@18.3.1) - next: 14.2.10(@babel/core@7.26.0)(@opentelemetry/api@1.4.1)(react-dom@18.3.1)(react@18.3.1) + next: 15.0.3(@babel/core@7.26.0)(react-dom@18.3.1)(react@18.3.1) next-themes: 0.4.3(react-dom@18.3.1)(react@18.3.1) postcss-selector-parser: 7.0.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-medium-image-zoom: 5.2.11(react-dom@18.3.1)(react@18.3.1) tailwind-merge: 2.5.5 - tailwindcss: 3.4.10(ts-node@10.9.2) + tailwindcss: 3.4.15(ts-node@10.9.2) transitivePeerDependencies: - '@oramacloud/client' - '@types/react' @@ -16502,14 +16866,22 @@ packages: resolution: {integrity: sha512-VNx3UEGr+ILJTiMs1+xc5SX1cMgJCrXezKPa003APUWNqQqaF6n25W8VcR7nHN6yRWbvvUTwCpZCFJeWC2kXlw==} dev: true - /geist@1.3.0(next@14.2.10): - resolution: {integrity: sha512-IoGBfcqVEYB4bEwsfHd35jF4+X9LHRPYZymHL4YOltHSs9LJa24DYs1Z7rEMQ/lsEvaAIc61Y9aUxgcJaQ8lrg==} + /geist@1.3.1(next@14.2.10): + resolution: {integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==} peerDependencies: - next: '>=13.2.0 <15.0.0-0' + next: '>=13.2.0' dependencies: next: 14.2.10(@babel/core@7.26.0)(@opentelemetry/api@1.4.1)(react-dom@18.3.1)(react@18.3.1) dev: false + /geist@1.3.1(next@15.0.3): + resolution: {integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==} + peerDependencies: + next: '>=13.2.0' + dependencies: + next: 15.0.3(@babel/core@7.26.0)(react-dom@18.3.1)(react@18.3.1) + dev: false + /generate-function@2.3.1: resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} dependencies: @@ -17919,7 +18291,7 @@ packages: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.15 + which-typed-array: 1.1.16 /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} @@ -18580,7 +18952,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.8.1 + tslib: 2.4.1 dev: false /lowercase-keys@3.0.0: @@ -19994,7 +20366,6 @@ packages: /minipass@6.0.2: resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} engines: {node: '>=16 || 14 >=14.17'} - dev: true /minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} @@ -20408,6 +20779,51 @@ packages: - '@babel/core' - babel-plugin-macros + /next@15.0.3(@babel/core@7.26.0)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-66855b96-20241106 + react-dom: ^18.2.0 || 19.0.0-rc-66855b96-20241106 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + dependencies: + '@next/env': 15.0.3 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.13 + busboy: 1.6.0 + caniuse-lite: 1.0.30001684 + postcss: 8.4.31 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.6(@babel/core@7.26.0)(react@18.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 15.0.3 + '@next/swc-darwin-x64': 15.0.3 + '@next/swc-linux-arm64-gnu': 15.0.3 + '@next/swc-linux-arm64-musl': 15.0.3 + '@next/swc-linux-x64-gnu': 15.0.3 + '@next/swc-linux-x64-musl': 15.0.3 + '@next/swc-win32-arm64-msvc': 15.0.3 + '@next/swc-win32-x64-msvc': 15.0.3 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + /nlcst-to-string@3.1.1: resolution: {integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==} dependencies: @@ -20418,7 +20834,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.8.1 + tslib: 2.4.1 dev: false /node-addon-api@7.1.1: @@ -20746,12 +21162,12 @@ packages: mimic-function: 5.0.1 dev: true - /oniguruma-to-es@0.4.1: - resolution: {integrity: sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==} + /oniguruma-to-es@0.7.0: + resolution: {integrity: sha512-HRaRh09cE0gRS3+wi2zxekB+I5L8C/gN60S+vb11eADHUaB/q4u8wGGOX3GvwvitG8ixaeycZfeoyruKQzUgNg==} dependencies: emoji-regex-xs: 1.0.0 regex: 5.0.2 - regex-recursion: 4.2.1 + regex-recursion: 4.3.0 dev: false /open@8.4.0: @@ -20776,7 +21192,7 @@ packages: resolution: {integrity: sha512-kv2hevAWZZ3I/vd2t8znGO2rd8wkowncsfcYpo8i+wU9ML+JEcdqiViANXXjWWGjIhajFNixE6gOY1fEgqILAg==} hasBin: true dependencies: - '@types/node': 18.19.66 + '@types/node': 18.19.67 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.5.0 @@ -21152,7 +21568,7 @@ packages: engines: {node: '>=16 || 14 >=14.18'} dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 6.0.2 /path-to-regexp@0.1.10: resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} @@ -21831,6 +22247,19 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: true + /react-element-to-jsx-string@15.0.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} + peerDependencies: + react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + dependencies: + '@base2/pretty-print-object': 1.0.1 + is-plain-object: 5.0.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-is: 18.1.0 + dev: false + /react-email@2.1.1(@babel/core@7.26.0)(eslint@9.15.0)(ts-node@10.9.2): resolution: {integrity: sha512-09oMVl/jN0/Re0bT0sEqYjyyFSCN/Tg0YmzjC9wfYpnMx02Apk40XXitySDfUBMR9EgTdr6T4lYknACqiLK3mg==} engines: {node: '>=18.0.0'} @@ -21915,6 +22344,10 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + /react-is@18.1.0: + resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} + dev: false + /react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -22374,8 +22807,8 @@ packages: /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - /regex-recursion@4.2.1: - resolution: {integrity: sha512-QHNZyZAeKdndD1G3bKAbBEKOSSK4KOHQrAJ01N1LJeb0SoH4DJIeFhp0uUpETgONifS4+P3sOgoA1dhzgrQvhA==} + /regex-recursion@4.3.0: + resolution: {integrity: sha512-5LcLnizwjcQ2ALfOj95MjcatxyqF5RPySx9yT+PaXu3Gox2vyAtLDjHB8NTJLtMGkvyau6nI3CfpwFCjPUIs/A==} dependencies: regex-utilities: 2.3.0 dev: false @@ -23150,6 +23583,37 @@ packages: '@img/sharp-win32-ia32': 0.33.4 '@img/sharp-win32-x64': 0.33.4 + /sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + requiresBuild: true + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + dev: false + optional: true + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -23202,13 +23666,13 @@ packages: '@types/hast': 3.0.4 dev: false - /shiki@1.23.1: - resolution: {integrity: sha512-8kxV9TH4pXgdKGxNOkrSMydn1Xf6It8lsle0fiqxf7a1149K1WGtdOu3Zb91T5r1JpvRPxqxU3C2XdZZXQnrig==} + /shiki@1.24.0: + resolution: {integrity: sha512-qIneep7QRwxRd5oiHb8jaRzH15V/S8F3saCXOdjwRLgozZJr5x2yeBhQtqkO3FSzQDwYEFAYuifg4oHjpDghrg==} dependencies: - '@shikijs/core': 1.23.1 - '@shikijs/engine-javascript': 1.23.1 - '@shikijs/engine-oniguruma': 1.23.1 - '@shikijs/types': 1.23.1 + '@shikijs/core': 1.24.0 + '@shikijs/engine-javascript': 1.24.0 + '@shikijs/engine-oniguruma': 1.24.0 + '@shikijs/types': 1.24.0 '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 dev: false @@ -23315,7 +23779,7 @@ packages: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 - tslib: 2.8.1 + tslib: 2.4.1 dev: false /snakecase-keys@3.2.1: @@ -23574,12 +24038,12 @@ packages: nan: 2.22.0 dev: true - /sswr@2.1.0(svelte@5.2.9): + /sswr@2.1.0(svelte@5.2.10): resolution: {integrity: sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==} peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 dependencies: - svelte: 5.2.9 + svelte: 5.2.10 swrev: 4.0.0 dev: false @@ -23852,6 +24316,24 @@ packages: client-only: 0.0.1 react: 18.3.1 + /styled-jsx@5.1.6(@babel/core@7.26.0)(react@18.3.1): + 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 + dependencies: + '@babel/core': 7.26.0 + client-only: 0.0.1 + react: 18.3.1 + dev: false + /stylis@4.3.2: resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} dev: false @@ -23920,8 +24402,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte@5.2.9: - resolution: {integrity: sha512-LjO7R6K8FI8dA3l+4CcsbJ3djIe2TtokHGzfpDTro5g8nworMbTz9alCR95EQXGsqlzIAvqJtZ7Yy0o33lL09Q==} + /svelte@5.2.10: + resolution: {integrity: sha512-ON0OyO7vOmSjTc9mLjusu3vf1I7BvjovbiRB7j84F1WZMXV6dR+Tj4btIzxQxMHfzbGskaFmRa7qjgmBSVBnhQ==} engines: {node: '>=18'} dependencies: '@ampproject/remapping': 2.3.0 @@ -23931,7 +24413,7 @@ packages: acorn-typescript: 1.4.13(acorn@8.14.0) aria-query: 5.3.2 axobject-query: 4.1.0 - esm-env: 1.1.4 + esm-env: 1.2.0 esrap: 1.2.2 is-reference: 3.0.3 locate-character: 3.0.0 @@ -23997,31 +24479,29 @@ packages: '@babel/runtime': 7.26.0 dev: false - /tailwind-merge@2.3.0: - resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} - dependencies: - '@babel/runtime': 7.26.0 + /tailwind-merge@2.5.4: + resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==} dev: false /tailwind-merge@2.5.5: resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==} dev: false - /tailwind-scrollbar@3.1.0(tailwindcss@3.4.10): + /tailwind-scrollbar@3.1.0(tailwindcss@3.4.15): resolution: {integrity: sha512-pmrtDIZeHyu2idTejfV59SbaJyvp1VRjYxAjZBH0jnyrPRo6HL1kD5Glz8VPagasqr6oAx6M05+Tuw429Z8jxg==} engines: {node: '>=12.13.0'} peerDependencies: tailwindcss: 3.x dependencies: - tailwindcss: 3.4.10(ts-node@10.9.2) + tailwindcss: 3.4.15(ts-node@10.9.2) dev: true - /tailwindcss-animate@1.0.7(tailwindcss@3.4.10): + /tailwindcss-animate@1.0.7(tailwindcss@3.4.15): resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.4.10(ts-node@10.9.2) + tailwindcss: 3.4.15(ts-node@10.9.2) dev: false /tailwindcss@3.4.0(ts-node@10.9.2): @@ -24055,8 +24535,8 @@ packages: - ts-node dev: false - /tailwindcss@3.4.10(ts-node@10.9.2): - resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==} + /tailwindcss@3.4.15(ts-node@10.9.2): + resolution: {integrity: sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -25156,7 +25636,7 @@ packages: is-arguments: 1.1.1 is-generator-function: 1.0.10 is-typed-array: 1.1.13 - which-typed-array: 1.1.15 + which-typed-array: 1.1.16 dev: true /utils-merge@1.0.1: @@ -25653,7 +26133,7 @@ packages: isarray: 2.0.5 which-boxed-primitive: 1.0.2 which-collection: 1.0.2 - which-typed-array: 1.1.15 + which-typed-array: 1.1.16 /which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} @@ -25676,8 +26156,8 @@ packages: path-exists: 4.0.0 dev: true - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + /which-typed-array@1.1.16: + resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.7