diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e5ad9cb0b..ceb913381 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,9 +4,11 @@ on: pull_request: branches: - main + # - solid2 # enable later push: branches: - main + # - solid2 # enable later jobs: build: @@ -20,10 +22,10 @@ jobs: - uses: pnpm/action-setup@v4 - - name: Setup Node.js 21.6.1 - uses: actions/setup-node@v4 + - name: Setup Node.js + uses: actions/setup-node@v6 with: - node-version: 21.6.1 + node-version: "24" cache: pnpm - name: Install dependencies diff --git a/.github/workflows/format-files-prettier.yml b/.github/workflows/format-files-prettier.yml index 804f4efae..80d814619 100644 --- a/.github/workflows/format-files-prettier.yml +++ b/.github/workflows/format-files-prettier.yml @@ -4,6 +4,7 @@ on: pull_request: branches: - main + - solid2 paths: - "**.md" - "**.mdx" @@ -15,6 +16,7 @@ on: push: branches: - main + - solid2 jobs: prettier: diff --git a/.github/workflows/format-files.yml b/.github/workflows/format-files.yml index b2d1d9230..fe9c4b823 100644 --- a/.github/workflows/format-files.yml +++ b/.github/workflows/format-files.yml @@ -4,6 +4,7 @@ on: pull_request: branches: - main + - solid2 paths: - "**.js" - "**.jsx" @@ -14,6 +15,7 @@ on: push: branches: - main + - solid2 jobs: biome: @@ -24,8 +26,6 @@ jobs: - name: Setup Biome uses: biomejs/setup-biome@v2 - with: - version: 1.8.1 - name: Run Biome run: biome ci . diff --git a/.github/workflows/jsr-ci.yml b/.github/workflows/jsr-ci.yml new file mode 100644 index 000000000..3bf71bcdf --- /dev/null +++ b/.github/workflows/jsr-ci.yml @@ -0,0 +1,47 @@ +name: JSR validation + +on: + pull_request: + branches: + - main + push: + branches: + - main + +jobs: + jsr: + name: Validate JSR workspace + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + cache: pnpm + + - name: Set up Deno + uses: denoland/setup-deno@v2 + with: + deno-version: v2.x + + - name: Install dependencies + run: pnpm install + + - name: Check deno.jsonc/package.json version and exports sync + run: pnpm jsr:sync:check + + - name: Build libraries + run: pnpm build:libs + env: + NODE_OPTIONS: "--max_old_space_size=4096" + + - name: Publish dry run with full type checks + run: deno publish --dry-run --allow-slow-types diff --git a/.github/workflows/jsr-publish.yml b/.github/workflows/jsr-publish.yml new file mode 100644 index 000000000..19899dbf0 --- /dev/null +++ b/.github/workflows/jsr-publish.yml @@ -0,0 +1,57 @@ +name: Publish JSR + +on: + workflow_dispatch: + inputs: + publish: + description: Run the real JSR publish after the dry run passes + required: true + default: "false" + type: choice + options: + - "false" + - "true" + +permissions: + contents: read + id-token: write + +jobs: + publish: + name: Publish JSR workspace + runs-on: ubuntu-latest + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + cache: pnpm + + - name: Set up Deno + uses: denoland/setup-deno@v2 + with: + deno-version: v2.x + + - name: Install dependencies + run: pnpm install + + - name: Sync deno.jsonc versions and exports from package.json + run: pnpm jsr:sync + + - name: Build libraries + run: pnpm build:libs + env: + NODE_OPTIONS: "--max_old_space_size=4096" + + - name: Publish dry run + run: deno publish --dry-run --allow-slow-types + + - name: Publish to JSR + if: ${{ inputs.publish == 'true' }} + run: deno publish --allow-slow-types diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 004b912ee..7d8645319 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,7 +4,7 @@ on: [workflow_dispatch] permissions: id-token: write - contents: read + contents: write concurrency: ${{ github.workflow }}-${{ github.ref }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 21dd48e0b..c290df3ab 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,9 +4,11 @@ on: pull_request: branches: - main + - solid2 push: branches: - main + - solid2 jobs: build: @@ -20,10 +22,10 @@ jobs: - uses: pnpm/action-setup@v4 - - name: Setup Node.js 21.6.1 - uses: actions/setup-node@v4 + - name: Setup Node.js + uses: actions/setup-node@v6 with: - node-version: 21.6.1 + node-version: "24" cache: pnpm - name: Install dependencies diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index b4878ca38..db71b8ed5 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -16,10 +16,10 @@ jobs: - uses: pnpm/action-setup@v4 - - name: Setup Node.js 21.6.1 - uses: actions/setup-node@v4 + - name: Setup Node.js + uses: actions/setup-node@v6 with: - node-version: 21.6.1 + node-version: "24" cache: pnpm - name: Install Dependencies diff --git a/.gitignore b/.gitignore index 34af82b43..b18d7a7de 100644 --- a/.gitignore +++ b/.gitignore @@ -18,9 +18,6 @@ lerna-debug.log .env.test.local .env.production.local -# turbo -.turbo - # solid .solid .vinxi diff --git a/.prettierignore b/.prettierignore index 807d8220a..37d1d1fc7 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,5 +3,8 @@ *.jsx *.tsx *.json +*.jsonc *.cjs -pnpm-lock.yaml \ No newline at end of file +*.mjs +*.css +pnpm-lock.yaml diff --git a/.storybook/globals.css b/.storybook/globals.css deleted file mode 100644 index 4d5c85437..000000000 --- a/.storybook/globals.css +++ /dev/null @@ -1,4 +0,0 @@ -@import "tailwindcss"; - -@source "./.storybook/**/*.{ts,tsx}"; -@source "./packages/core/src/**/*.{ts,tsx}"; diff --git a/.storybook/main.ts b/.storybook/main.ts index 3f6673840..4cbb54f94 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -79,7 +79,13 @@ const config: StorybookConfig = { ).pathname, }, ], - dedupe: ["react", "react-dom", "solid-js", "@solidjs/signals", "@solidjs/web"], + dedupe: [ + "react", + "react-dom", + "solid-js", + "@solidjs/signals", + "@solidjs/web", + ], }, }); }, diff --git a/.storybook/manager.ts b/.storybook/manager.ts index 468395a83..3b2b8b382 100644 --- a/.storybook/manager.ts +++ b/.storybook/manager.ts @@ -3,9 +3,9 @@ import { create } from "storybook/theming/create"; addons.setConfig({ theme: create({ - base: "light", + base: "dark", brandTitle: "Kobalte", - brandImage: "/kobalte-logo.svg", + brandImage: "/kobalte.svg", brandUrl: "https://kobalte.dev", brandTarget: "_blank", }), diff --git a/.storybook/public/kobalte-logo.svg b/.storybook/public/kobalte-logo.svg deleted file mode 100644 index 3cfa8037d..000000000 --- a/.storybook/public/kobalte-logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - Kobalte. - diff --git a/.storybook/public/kobalte.svg b/.storybook/public/kobalte.svg new file mode 100644 index 000000000..8582cc458 --- /dev/null +++ b/.storybook/public/kobalte.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MIGRATION.md b/MIGRATION.md index 39aad710e..a4585857e 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -38,16 +38,16 @@ Other affected attributes: `autocomplete`, `autocorrect`, `spellcheck`, `enterke ## Renamed helpers -| Solid 1.x | Solid 2.0 | -|-----------|-----------| -| `mergeProps` | `merge` | -| `splitProps` | `omit` | -| `unwrap` | `snapshot` | -| `onMount` | `onSettled` | +| Solid 1.x | Solid 2.0 | +| ---------------- | ------------------------------------------ | +| `mergeProps` | `merge` | +| `splitProps` | `omit` | +| `unwrap` | `snapshot` | +| `onMount` | `onSettled` | | `createComputed` | `createEffect` (split form) / `createMemo` | -| `Index` | `` | -| `classList` | `class` (object/array accepted) | -| `batch` | removed — writes are auto-batched | +| `Index` | `` | +| `classList` | `class` (object/array accepted) | +| `batch` | removed — writes are auto-batched | ## Effects: split compute/apply form @@ -55,12 +55,18 @@ Other affected attributes: `autocomplete`, `autocorrect`, `spellcheck`, `enterke ```ts // before -createEffect(on(source, (value) => { el.title = value; })); +createEffect( + on(source, value => { + el.title = value; + }), +); // after createEffect( - () => source(), - (value) => { el.title = value; }, + () => source(), + value => { + el.title = value; + }, ); ``` @@ -68,11 +74,11 @@ Cleanup is returned from the apply function instead of using `onCleanup`. ```ts createEffect( - () => source(), - (value) => { - const id = setTimeout(() => doWork(value), 100); - return () => clearTimeout(id); - }, + () => source(), + value => { + const id = setTimeout(() => doWork(value), 100); + return () => clearTimeout(id); + }, ); ``` @@ -91,10 +97,16 @@ createEffect( ```ts // before import { produce } from "solid-js/store"; -setStore(produce(s => { s.count++; })); +setStore( + produce(s => { + s.count++; + }), +); // after -setStore(s => { s.count++; }); +setStore(s => { + s.count++; +}); ``` ## Signals: no writes inside reactive scope diff --git a/apps/docs/app.config.ts b/apps/docs/app.config.ts deleted file mode 100644 index 5d1a1fea5..000000000 --- a/apps/docs/app.config.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { nodeTypes } from "@mdx-js/mdx"; -import { defineConfig } from "@solidjs/start/config"; -// @ts-expect-error missing types -import pkg from "@vinxi/plugin-mdx"; -import { type Options as AcornOptions, parse } from "acorn"; -// @ts-expect-error -import Slugger from "github-slugger"; -import rehypePrettyCode from "rehype-pretty-code"; -import rehypeRaw from "rehype-raw"; -import rehypeSlug from "rehype-slug"; -import remarkGfm from "remark-gfm"; -import remarkShikiTwoslash from "remark-shiki-twoslash"; -import { visit } from "unist-util-visit"; - -const { default: vinxiMdx } = pkg; - -function jsToTreeNode(jsString: string, acornOpts?: AcornOptions) { - return { - type: "mdxjsEsm", - value: "", - data: { - estree: { - body: [], - ...parse( - jsString, - acornOpts ?? { - sourceType: "module", - ecmaVersion: 2020, - }, - ), - type: "Program", - sourceType: "module", - }, - }, - }; -} - -const headingsCache = new Map(); - -function rehypeCollectHeadings() { - const slugger = new Slugger(); - return (tree: any, file: any) => { - const headings: any[] = []; - visit(tree, (node) => { - if (node.type !== "element") { - return; - } - - const { tagName } = node; - - if (tagName[0] !== "h") { - return; - } - - const [_, level] = tagName.match(/h([0-6])/) ?? []; - - if (!level) { - return; - } - - const depth = Number.parseInt(level); - - let text = ""; - - visit(node, (child, __, parent) => { - if (child.type === "element" || parent == null) { - return; - } - - if (child.type === "raw" && child.value.match(/^\n?<.*>\n?$/)) { - return; - } - - if (new Set(["text", "raw", "mdxTextExpression"]).has(child.type)) { - text += child.value; - } - }); - - node.properties = node.properties || {}; - - if (typeof node.properties.id !== "string") { - let slug = slugger.slug(text); - - if (slug.endsWith("-")) { - slug = slug.slice(0, -1); - } - - node.properties.id = slug; - } - - headings.push({ depth, slug: node.properties.id, text }); - }); - - headingsCache.set(file.path, headings); - - tree.children.unshift( - // @ts-expect-error - jsToTreeNode( - `export function getHeadings() { return ${JSON.stringify(headings)} }`, - ), - ); - }; -} - -export default defineConfig({ - server: { - preset: - process.env.GITHUB_ACTIONS || process.env.DEVELOPMENT - ? "node-server" - : "netlify", - experimental: { - asyncContext: true, - }, - prerender: { - routes: ["/docs/core/overview/introduction"], - crawlLinks: true, - }, - }, - - extensions: ["mdx", "md"], - // @ts-expect-error: type should be optional, bugged in @solidjs/start@0.6.1 - solid: { - extensions: ["mdx", "md"], - }, - vite() { - return { - plugins: [ - vinxiMdx.withImports({})({ - jsx: true, - jsxImportSource: "solid-js", - providerImportSource: "solid-mdx", - rehypePlugins: [ - rehypePrettyCode, - rehypeSlug, - [rehypeRaw, { passThrough: nodeTypes }], - // rehypeCollectHeadings, - ], - remarkPlugins: [ - remarkGfm, - [ - // @ts-expect-error - remarkShikiTwoslash.default, - { - disableImplicitReactImport: true, - includeJSDocInHover: true, - themes: ["github-light", "github-dark"], - defaultOptions: { - lib: ["dom", "es2015"], - }, - defaultCompilerOptions: { - allowSyntheticDefaultImports: true, - esModuleInterop: true, - target: "ESNext", - module: "ESNext", - lib: ["dom", "es2015"], - jsxImportSource: "solid-js", - jsx: "preserve", - types: ["vite/client"], - paths: { - "~/*": ["./src/*"], - }, - }, - }, - ], - ], - }), - // { - // name: "mdx-meta", - // async transform(code: any, id: any) { - // if (id.endsWith(".mdx?meta") || id.endsWith(".md?meta")) { - // const replacedId = id.replace(/\?meta$/, ""); - // - // if (headingsCache.has(replacedId)) { - // return { - // code: ` - // export function getHeadings() { - // return ${JSON.stringify(headingsCache.get(id), null, 2)} - // } - // `, - // }; - // } - // } - // }, - // }, - ], - ssr: { - noExternal: ["@tanstack/solid-virtual"], - }, - }; - }, -}); diff --git a/apps/docs/package.json b/apps/docs/package.json index 60a45d1e5..04513de6e 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -22,53 +22,34 @@ "url": "git+https://github.com/kobaltedev/kobalte.git" }, "license": "MIT", - "author": "Fabien Marie-Louise ", + "author": "jer3m01 ", + "contributors": [ + "Fabien Marie-Louise " + ], "type": "module", "scripts": { - "build": "NODE_OPTIONS=\"--max-old-space-size=8192\" vinxi build", - "build:dev": "NODE_OPTIONS=\"--max-old-space-size=8192\" DEVELOPMENT=1 vinxi build", - "clean": "rm -rf .solid && rm -rf netlify && rm -rf .turbo && rm -rf node_modules && rm -rf dist", - "dev": "vinxi dev --host", - "start": "vinxi start" + "build": "vite build", + "build:dev": "DEVELOPMENT=1 vite build", + "clean": "rm -rf .solid && rm -rf netlify && rm -rf node_modules && rm -rf dist", + "dev": "vite dev" }, "dependencies": { - "@docsearch/css": "3.5.2", - "@docsearch/js": "3.5.2", - "@internationalized/date": "3.4.0", "@kobalte/core": "workspace:*", - "@solidjs/meta": "0.29.3", - "@solidjs/router": "0.12.4", - "@solidjs/start": "0.6.1", + "@kobalte/solidbase": "0.6.11", + "@solidjs/meta": "0.29.4", + "@solidjs/router": "0.16.2", + "@solidjs/start": "2.0.0-beta.0", + "@solidjs/web": "catalog:", "@tanstack/solid-virtual": "3.0.0-beta.6", - "clsx": "2.0.0", "minisearch": "7.1.0", - "solid-js": "1.8.15", - "undici": "5.23.0", - "vinxi": "0.3.9" + "nitro": "3.0.260610-beta", + "solid-js": "catalog:", + "vite": "8.1.3" }, "devDependencies": { - "@kobalte/tailwindcss": "0.9.0", - "@mdx-js/mdx": "3.0.0", - "@mdx-js/rollup": "3.0.0", - "@tailwindcss/postcss": "^4.3.1", - "@tailwindcss/typography": "^0.5.20", - "@vinxi/plugin-mdx": "3.7.1", - "acorn": "8.10.0", - "github-slugger": "2.0.0", - "postcss": "8.4.28", - "rehype-pretty-code": "0.12.3", - "rehype-raw": "7.0.0", - "rehype-slug": "6.0.0", - "remark-gfm": "4.0.0", - "remark-shiki-twoslash": "3.1.3", - "shiki": "0.14.7", - "solid-mdx": "0.0.7", - "tailwindcss": "^4.3.1", - "typescript": "4.9.5", - "unist-util-visit": "5.0.0", - "vite": "5.1.4" + "@iconify-json/ri": "^1.2.10" }, "engines": { - "node": ">=18" + "node": "^22.18.0 || >=24.11.0" } } diff --git a/apps/docs/postcss.config.cjs b/apps/docs/postcss.config.cjs deleted file mode 100644 index 769de0b04..000000000 --- a/apps/docs/postcss.config.cjs +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: { - "@tailwindcss/postcss": {}, - }, -}; diff --git a/apps/docs/public/kobalte.svg b/apps/docs/public/kobalte.svg new file mode 100644 index 000000000..8582cc458 --- /dev/null +++ b/apps/docs/public/kobalte.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/src/app.tsx b/apps/docs/src/app.tsx index 2ee53ac2b..6caddbaea 100644 --- a/apps/docs/src/app.tsx +++ b/apps/docs/src/app.tsx @@ -1,76 +1,27 @@ -// @refresh reload -import "@docsearch/css"; -import "./root.css"; - -import { - ColorModeProvider, - ColorModeScript, - cookieStorageManagerSSR, -} from "@kobalte/core/color-mode"; import { Toast } from "@kobalte/core/toast"; -import { MetaProvider, Title } from "@solidjs/meta"; +import { SolidBaseRoot } from "@kobalte/solidbase/client"; import { Router } from "@solidjs/router"; -import { FileRoutes } from "@solidjs/start"; +import { FileRoutes } from "@solidjs/start/router"; import { Suspense } from "solid-js"; -import { isServer, Portal } from "solid-js/web"; -import { MDXProvider } from "solid-mdx"; -import { getCookie } from "vinxi/server"; +import { Portal } from "solid-js/web"; import toastStyles from "./examples/toast.module.css"; -import { mdxComponents } from "./mdx-components"; - -//export const mods = /*#__PURE__*/ import.meta.glob< -// true, -// string, -// { -// getHeadings: () => { -// depth: number; -// text: string; -// slug: string; -// }[]; -// } -//>("./routes/docs/**/*.{md,mdx}", { -// eager: true, -// query: { -// meta: "", -// }, -//}); - -function getServerCookies() { - "use server"; - - const colorMode = getCookie("kb-color-mode"); - - return colorMode ? `kb-color-mode=${colorMode}` : ""; -} export default function App() { - const storageManager = cookieStorageManagerSSR( - isServer ? getServerCookies() : document.cookie, - ); - return ( ( - - Kobalte - - - - {props.children} - - - - - - - - - - - - + + {props.children} + + + + + + + + + + )} > diff --git a/apps/docs/src/components/callout.tsx b/apps/docs/src/components/callout.tsx deleted file mode 100644 index 9a732fadc..000000000 --- a/apps/docs/src/components/callout.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { clsx } from "clsx"; -import { type ComponentProps, splitProps } from "solid-js"; - -interface CalloutProps extends ComponentProps<"div"> { - type: "note" | "warning"; -} - -export function Callout(props: CalloutProps) { - const [local, others] = splitProps(props, ["type", "class"]); - - return ( -
- ); -} diff --git a/apps/docs/src/components/footer.tsx b/apps/docs/src/components/footer.tsx deleted file mode 100644 index 68a719658..000000000 --- a/apps/docs/src/components/footer.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { - DiscordIcon, - GitHubIcon, - OpenCollectiveIcon, - TwitterIcon, -} from "./icons"; - -export function Footer() { - return ( - - ); -} diff --git a/apps/docs/src/components/header.tsx b/apps/docs/src/components/header.tsx deleted file mode 100644 index 9724efb82..000000000 --- a/apps/docs/src/components/header.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import docsearch from "@docsearch/js"; -import { useMatch } from "@solidjs/router"; -import { clsx } from "clsx"; -import { onMount } from "solid-js"; -import type { NavSection } from "../model/navigation"; -import { - LATEST_CORE_CHANGELOG_URL, - LATEST_CORE_VERSION_NAME, -} from "../VERSIONS"; -import { GitHubIcon } from "./icons"; -import { MobileNavigation } from "./mobile-navigation"; -import { ThemeSelector } from "./theme-selector"; - -interface HeaderProps { - navSections: NavSection[]; -} - -export function Header(props: HeaderProps) { - const isChangelogPath = useMatch(() => "/docs/changelog/*"); - - onMount(() => { - docsearch({ - appId: "H7ZQSI0SAN", - apiKey: "c9354456dd4bb74c37e4d2b762b89b88", - indexName: "kobalte", - container: "#docsearch", - }); - }); - - return ( -
-
- -
-
- - Kobalte - . - - - {LATEST_CORE_VERSION_NAME} - -
- -
- ); -} diff --git a/apps/docs/src/components/icons.tsx b/apps/docs/src/components/icons.tsx index 73ad954a0..b7d71b9bb 100644 --- a/apps/docs/src/components/icons.tsx +++ b/apps/docs/src/components/icons.tsx @@ -1,115 +1,5 @@ import type { ComponentProps } from "solid-js"; -export function GitHubIcon(props: ComponentProps<"svg">) { - return ( - - GitHub - - - ); -} - -export function DiscordIcon(props: ComponentProps<"svg">) { - return ( - - Discord - - - ); -} - -export function OpenCollectiveIcon(props: ComponentProps<"svg">) { - return ( - - OpenCollective - - - ); -} - -export function TwitterIcon(props: ComponentProps<"svg">) { - return ( - - Twitter - - - ); -} - -export function SunIcon(props: ComponentProps<"svg">) { - return ( - - Sun - - - ); -} - -export function MoonIcon(props: ComponentProps<"svg">) { - return ( - - Moon - - - ); -} - -export function DesktopIcon(props: ComponentProps<"svg">) { - return ( - - Desktop - - - ); -} - -export function CopyIcon(props: ComponentProps<"svg">) { - return ( - - Copy - - - ); -} - export function CheckIcon(props: ComponentProps<"svg">) { return ( diff --git a/apps/docs/src/components/index.ts b/apps/docs/src/components/index.ts index c2b7d5b3b..6ef8d54d4 100644 --- a/apps/docs/src/components/index.ts +++ b/apps/docs/src/components/index.ts @@ -1,12 +1 @@ -export * from "./callout"; -export * from "./footer"; -export * from "./header"; export * from "./icons"; -export * from "./kbd"; -export * from "./layout"; -export * from "./navigation"; -export * from "./preview"; -export * from "./prose"; -export * from "./table-of-contents"; -export * from "./tabs-snippets"; -export * from "./theme-selector"; diff --git a/apps/docs/src/components/kbd.tsx b/apps/docs/src/components/kbd.tsx deleted file mode 100644 index bf1cfcc73..000000000 --- a/apps/docs/src/components/kbd.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { clsx } from "clsx"; -import { type ComponentProps, splitProps } from "solid-js"; - -export function Kbd(props: ComponentProps<"kbd">) { - const [local, others] = splitProps(props, ["class"]); - - return ( - - ); -} diff --git a/apps/docs/src/components/layout.tsx b/apps/docs/src/components/layout.tsx deleted file mode 100644 index cc52a66a0..000000000 --- a/apps/docs/src/components/layout.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { useLocation } from "@solidjs/router"; -import { type ParentProps, Show } from "solid-js"; - -import type { NavSection } from "../model/navigation"; -import { Footer } from "./footer"; -import { Header } from "./header"; -import { Navigation } from "./navigation"; -import { Prose } from "./prose"; -import { TableOfContents } from "./table-of-contents"; - -interface LayoutProps extends ParentProps { - navSections: NavSection[]; -} - -export function Layout(props: LayoutProps) { - const location = useLocation(); - - const allLinks = () => props.navSections.flatMap((section) => section.links); - const linkIndex = () => - allLinks().findIndex((link) => link.href === location.pathname); - const previousPage = () => allLinks()[linkIndex() - 1]; - const nextPage = () => allLinks()[linkIndex() + 1]; - - return ( - <> -
-
- -
-
- {props.children} -
-
- -
-
- Previous -
-
- - - {previousPage().title} - -
-
-
- -
-
- Next -
-
- - {nextPage().title} - - -
-
-
-
-
-
- -
- - ); -} diff --git a/apps/docs/src/components/mobile-navigation.tsx b/apps/docs/src/components/mobile-navigation.tsx deleted file mode 100644 index 7ec0b6191..000000000 --- a/apps/docs/src/components/mobile-navigation.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { Dialog } from "@kobalte/core/dialog"; -import { createDisclosureState } from "@kobalte/core/primitives/create-disclosure-state"; -import { Separator } from "@kobalte/core/separator"; -import { useIsRouting, useMatch } from "@solidjs/router"; -import { clsx } from "clsx"; -import { type ComponentProps, createComputed, splitProps } from "solid-js"; -import type { NavSection } from "../model/navigation"; -import { - LATEST_CORE_CHANGELOG_URL, - LATEST_CORE_VERSION_NAME, -} from "../VERSIONS"; -import { CrossIcon, HamburgerMenuIcon } from "./icons"; -import { Navigation } from "./navigation"; - -interface MobileNavigationProps extends ComponentProps<"button"> { - sections: NavSection[]; -} - -export function MobileNavigation(props: MobileNavigationProps) { - const [local] = splitProps(props, ["sections", "class"]); - - const { isOpen, setIsOpen, open, close } = createDisclosureState(); - - const isRouting = useIsRouting(); - - createComputed(() => isRouting() && close()); - - const isChangelogPath = useMatch(() => "/docs/changelog/*"); - - return ( - <> - - - - - - -
-
- - Kobalte - . - - - {LATEST_CORE_VERSION_NAME} - -
- -
- - - -
-
-
- - ); -} diff --git a/apps/docs/src/components/navigation.tsx b/apps/docs/src/components/navigation.tsx deleted file mode 100644 index 48d254b32..000000000 --- a/apps/docs/src/components/navigation.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { useLocation } from "@solidjs/router"; -import { clsx } from "clsx"; -import { type ComponentProps, For, Match, Switch, splitProps } from "solid-js"; - -import type { NavSection } from "../model/navigation"; - -interface NavigationProps extends ComponentProps<"nav"> { - sections: NavSection[]; -} - -export function Navigation(props: NavigationProps) { - const [local, others] = splitProps(props, ["sections", "class"]); - - const location = useLocation(); - - return ( - - ); -} diff --git a/apps/docs/src/components/preview.tsx b/apps/docs/src/components/preview.tsx deleted file mode 100644 index f552501d3..000000000 --- a/apps/docs/src/components/preview.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { clsx } from "clsx"; -import { type ComponentProps, mergeProps, splitProps } from "solid-js"; - -interface PreviewProps extends ComponentProps<"div"> { - isCentered?: boolean; - isRounded?: boolean; -} - -export function Preview(props: PreviewProps) { - const mergedProps = mergeProps({ isCentered: true }, props); - - const [local, others] = splitProps(mergedProps, [ - "class", - "isCentered", - "isRounded", - ]); - - return ( -
- ); -} diff --git a/apps/docs/src/components/prose.tsx b/apps/docs/src/components/prose.tsx deleted file mode 100644 index 8bbdd2c0b..000000000 --- a/apps/docs/src/components/prose.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { clsx } from "clsx"; -import { type ComponentProps, splitProps } from "solid-js"; - -export function Prose(props: ComponentProps<"div">) { - const [local, others] = splitProps(props, ["class"]); - - return ( -
- ); -} diff --git a/apps/docs/src/components/table-of-contents.tsx b/apps/docs/src/components/table-of-contents.tsx deleted file mode 100644 index c9ca5b132..000000000 --- a/apps/docs/src/components/table-of-contents.tsx +++ /dev/null @@ -1,191 +0,0 @@ -import { useLocation } from "@solidjs/router"; -import { clsx } from "clsx"; -import { - type Accessor, - createEffect, - createSignal, - For, - on, - onCleanup, - type Setter, - Suspense, -} from "solid-js"; -import { isServer } from "solid-js/web"; - -//import { mods } from "../app"; - -interface TocItem { - depth: number; - text: string; - slug: string; -} - -function getHeadingsFromToc(tableOfContents: TocItem[]) { - return tableOfContents.map(({ slug }) => { - const el = document.getElementById(slug); - - if (!el) { - return; - } - - const style = window.getComputedStyle(el); - const scrollMt = Number.parseFloat(style.scrollMarginTop) + 1; - - const top = window.scrollY + el.getBoundingClientRect().top - scrollMt; - - return { slug, top }; - }); -} - -function useCurrentSection(tableOfContents: Accessor) { - const [currentSection, setCurrentSection] = createSignal( - tableOfContents()?.[0]?.slug, - ); - - createEffect(() => { - const toc = tableOfContents(); - - if (toc == null || toc.length === 0) { - return; - } - - const headings = getHeadingsFromToc(toc); - - function onScroll() { - const top = window.scrollY; - let current = headings[0]?.slug; - - for (const heading of headings) { - if (heading == null) { - continue; - } - - if (top >= heading.top) { - current = heading.slug; - } else { - break; - } - } - - setCurrentSection(current); - } - - window.addEventListener("scroll", onScroll, { passive: true }); - - onScroll(); - - onCleanup(() => { - // @ts-expect-error - window.removeEventListener("scroll", onScroll, { passive: true }); - }); - }); - - return currentSection; -} - -//const getTOC = cache(async (pathname: string) => { -// "use server"; -// -// const mod = mods[`./routes${pathname}.mdx`] ?? mods[`./routes${pathname}.md`]; -// return !mod -// ? [] -// : mod.getHeadings().filter((h) => h.depth > 1 && h.depth <= 3); -//}, "toc"); - -function updateHeadings(setter: Setter) { - if (document.getElementsByTagName("article").length === 0) { - setTimeout(() => updateHeadings(setter), 1); - return; - } - - setter( - [ - ...document - .getElementsByTagName("article")[0] - .querySelectorAll( - "h1[data-toc], h2[data-toc], h3[data-toc], h4[data-toc], h5[data-toc], h6[data-toc]", - ), - ].map((element) => ({ - depth: Number(element.tagName.substr(1)), - text: element.textContent!, - slug: element.id, - })), - ); -} - -export function TableOfContents() { - const path = useLocation(); - - // const toc = createAsync(() => getTOC(path.pathname)); - - const [toc, setToc] = createSignal([]); - - createEffect( - on( - () => path.pathname, - (pathname) => { - if (isServer) return; - - updateHeadings(setToc); - }, - ), - ); - - const currentSection = useCurrentSection(toc); - - createEffect( - on( - () => currentSection(), - (currentSection) => { - if (isServer) return; - - const element = document.querySelector( - `a[data-toc-slug="${currentSection}"]`, - ); - - element?.scrollIntoView({ - behavior: "smooth", - block: "nearest", - }); - }, - ), - ); - - return ( - - ); -} diff --git a/apps/docs/src/components/tabs-snippets.tsx b/apps/docs/src/components/tabs-snippets.tsx deleted file mode 100644 index e988c2135..000000000 --- a/apps/docs/src/components/tabs-snippets.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { Tabs, type TabsRootProps } from "@kobalte/core/tabs"; -import { clsx } from "clsx"; -import { - type ComponentProps, - type ParentComponent, - splitProps, -} from "solid-js"; - -type TabsSnippetsComposite = { - List: typeof Tabs.List; - Trigger: typeof Tabs.Trigger; - Content: typeof Tabs.Content; -}; - -export const TabsSnippets: ParentComponent & - TabsSnippetsComposite = (props) => { - const [local, others] = splitProps(props, ["class"]); - - return ( - - ); -}; - -TabsSnippets.List = (props: ComponentProps) => { - const [local, others] = splitProps(props, ["children", "class"]); - - return ( - - {local.children} - - - ); -}; - -TabsSnippets.Trigger = (props: ComponentProps) => { - const [local, others] = splitProps(props, ["class"]); - - return ( - - ); -}; - -TabsSnippets.Content = Tabs.Content; diff --git a/apps/docs/src/components/theme-selector.tsx b/apps/docs/src/components/theme-selector.tsx deleted file mode 100644 index a4a3c1940..000000000 --- a/apps/docs/src/components/theme-selector.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import { - type ConfigColorMode, - type MaybeConfigColorMode, - useColorMode, -} from "@kobalte/core/color-mode"; -import { Select } from "@kobalte/core/select"; -import { createSignal, type JSX, onMount } from "solid-js"; - -import { DesktopIcon, MoonIcon, SunIcon } from "./icons"; - -interface ThemeOption { - value: ConfigColorMode; - label: string; - icon: (clazz: string) => JSX.Element; -} - -const THEME_OPTIONS: ThemeOption[] = [ - { - value: "light", - label: "Light", - icon: (clazz: string) => , - }, - { - value: "dark", - label: "Dark", - icon: (clazz: string) => , - }, - { - value: "system", - label: "System", - icon: (clazz: string) => , - }, -]; - -function parseCookie(): MaybeConfigColorMode { - const match = document.cookie.match(/(^| )kb-color-mode=([^;]+)/); - return match?.[2] as MaybeConfigColorMode; -} - -export function ThemeSelector() { - const { colorMode, setColorMode } = useColorMode(); - const [selectedTheme, setSelectedTheme] = createSignal(); - - onMount(() => { - setSelectedTheme( - THEME_OPTIONS.find((option) => option.value === parseCookie()), - ); - }); - - return ( - - options={THEME_OPTIONS} - optionValue="value" - optionTextValue="label" - value={selectedTheme() ?? THEME_OPTIONS[0]} - onChange={(option) => { - setSelectedTheme(option); - setColorMode(option.value); - }} - gutter={8} - sameWidth={false} - placement="bottom" - itemComponent={(props) => ( - - {props.item.rawValue.icon("h-4 w-4")} - {props.item.rawValue.label} - - )} - > - - > - {(state) => state.selectedOption().icon("h-5 w-5")} - - - - - - - - - ); -} diff --git a/apps/docs/src/entry-server.tsx b/apps/docs/src/entry-server.tsx index b347edbce..a42a95e0e 100644 --- a/apps/docs/src/entry-server.tsx +++ b/apps/docs/src/entry-server.tsx @@ -1,10 +1,16 @@ +import { getHtmlProps } from "@kobalte/solidbase/server"; import { createHandler, StartServer } from "@solidjs/start/server"; export default createHandler(() => ( ( - + + Kobalte + diff --git a/apps/docs/src/examples/accordion.module.css b/apps/docs/src/examples/accordion.module.css index 0e0c5aef5..8a799211c 100644 --- a/apps/docs/src/examples/accordion.module.css +++ b/apps/docs/src/examples/accordion.module.css @@ -1,19 +1,25 @@ .accordion { - border-radius: 6px; + display: flex; + flex-direction: column; width: 300px; - border: 1px solid hsl(240 5% 84%); + border-radius: 6px; + border: 1px solid hsl(240 6% 90%); + background-color: white; color: hsl(240 4% 16%); } +.accordion__item { + overflow: hidden; +} + .accordion__item:first-child { - margin-top: 0; - border-top-left-radius: 4px; - border-top-right-radius: 4px; + border-top-left-radius: 6px; + border-top-right-radius: 6px; } .accordion__item:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; } .accordion__item-header { @@ -25,26 +31,38 @@ align-items: center; justify-content: space-between; width: 100%; - padding: 14px; - border-bottom: 1px solid hsl(240 5% 84%); - font-weight: 600; + padding: 14px 16px; + border: none; + border-top: 1px solid hsl(240 6% 90%); + font-size: 16px; + font-weight: 500; text-align: left; outline: none; + cursor: pointer; + background: none; + transition: + border-color 250ms, + color 250ms; +} + +.accordion__item:first-child .accordion__item-trigger { + border-top: none; } -.accordion__item:last-child .accordion__item-trigger { - border-bottom: none; +.accordion__item-trigger:hover { + background-color: hsl(240 6% 97%); } .accordion__item-trigger:focus-visible { z-index: 1; outline: 2px solid hsl(200 98% 39%); - outline-offset: 2px; + outline-offset: -2px; } .accordion__item-trigger-icon { - width: 24px; - height: 24px; + width: 20px; + height: 20px; + color: hsl(240 5% 46%); transition: transform 300ms cubic-bezier(0.87, 0, 0.13, 1); } @@ -54,7 +72,7 @@ .accordion__item-content { overflow: hidden; - font-size: 16px; + font-size: 14px; animation: slideUp 300ms cubic-bezier(0.87, 0, 0.13, 1); } @@ -64,6 +82,7 @@ .accordion__item-content-text { padding: 16px; + color: hsl(240 5% 26%); } @keyframes slideDown { @@ -84,11 +103,24 @@ } } -[data-kb-theme="dark"] .accordion { - border-color: hsl(240 5% 65%); - color: hsl(0 0% 100% / 0.9); +[data-theme*="dark"] .accordion { + border-color: hsl(240 5% 34%); + background-color: hsl(240 4% 16%); + color: hsl(0 100% 100% / 0.9); +} + +[data-theme*="dark"] .accordion__item-trigger { + border-top-color: hsl(240 5% 34%); +} + +[data-theme*="dark"] .accordion__item-trigger:hover { + background-color: hsl(240 4% 22%); +} + +[data-theme*="dark"] .accordion__item-trigger-icon { + color: hsl(240 5% 65%); } -[data-kb-theme="dark"] .accordion__item-trigger { - border-bottom-color: hsl(240 5% 65%); +[data-theme*="dark"] .accordion__item-content-text { + color: hsl(0 100% 100% / 0.9); } diff --git a/apps/docs/src/examples/accordion.tsx b/apps/docs/src/examples/accordion.tsx index a90c283f5..4dfac22a0 100644 --- a/apps/docs/src/examples/accordion.tsx +++ b/apps/docs/src/examples/accordion.tsx @@ -1,6 +1,5 @@ import { Accordion } from "@kobalte/core/accordion"; import { createSignal } from "solid-js"; - import { ChevronDownIcon } from "../components"; import style from "./accordion.module.css"; @@ -182,7 +181,9 @@ export function ControlledExample() { -

+

Expanded item: {expandedItem().join(",")}

diff --git a/apps/docs/src/examples/alert-dialog.module.css b/apps/docs/src/examples/alert-dialog.module.css index d619abd3a..123993350 100644 --- a/apps/docs/src/examples/alert-dialog.module.css +++ b/apps/docs/src/examples/alert-dialog.module.css @@ -130,33 +130,33 @@ } } -[data-kb-theme="dark"] .alert-dialog__trigger { +[data-theme*="dark"] .alert-dialog__trigger { background-color: hsl(201 96% 32%); color: hsla(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .alert-dialog__trigger:hover { +[data-theme*="dark"] .alert-dialog__trigger:hover { background-color: hsl(200 98% 39%); } -[data-kb-theme="dark"] .alert-dialog__trigger:active { +[data-theme*="dark"] .alert-dialog__trigger:active { background-color: hsl(199 89% 48%); } -[data-kb-theme="dark"] .alert-dialog__content { +[data-theme*="dark"] .alert-dialog__content { border: 1px solid hsl(240 5% 26%); background-color: hsl(240 4% 16%); box-shadow: none; } -[data-kb-theme="dark"] .alert-dialog__close-button { +[data-theme*="dark"] .alert-dialog__close-button { color: hsl(0 100% 100% / 0.8); } -[data-kb-theme="dark"] .alert-dialog__title { +[data-theme*="dark"] .alert-dialog__title { color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .alert-dialog__description { +[data-theme*="dark"] .alert-dialog__description { color: hsl(0 100% 100% / 0.7); } diff --git a/apps/docs/src/examples/alert-dialog.tsx b/apps/docs/src/examples/alert-dialog.tsx index d7eef264a..cfbdccc1e 100644 --- a/apps/docs/src/examples/alert-dialog.tsx +++ b/apps/docs/src/examples/alert-dialog.tsx @@ -1,5 +1,4 @@ import { AlertDialog } from "@kobalte/core/alert-dialog"; - import { CrossIcon } from "../components"; import style from "./alert-dialog.module.css"; diff --git a/apps/docs/src/examples/alert.module.css b/apps/docs/src/examples/alert.module.css index d4e2af775..b0752b580 100644 --- a/apps/docs/src/examples/alert.module.css +++ b/apps/docs/src/examples/alert.module.css @@ -6,7 +6,7 @@ font-size: 16px; } -[data-kb-theme="dark"] .alert { +[data-theme*="dark"] .alert { background-color: hsla(202 80% 24% / 0.2); color: hsl(198 93% 60%); } diff --git a/apps/docs/src/examples/alert.tsx b/apps/docs/src/examples/alert.tsx index 7e717f841..e991ba3e6 100644 --- a/apps/docs/src/examples/alert.tsx +++ b/apps/docs/src/examples/alert.tsx @@ -1,5 +1,4 @@ import { Alert } from "@kobalte/core/alert"; - import style from "./alert.module.css"; export function BasicExample() { diff --git a/apps/docs/src/examples/badge.tsx b/apps/docs/src/examples/badge.tsx index edcd4f948..de90064a4 100644 --- a/apps/docs/src/examples/badge.tsx +++ b/apps/docs/src/examples/badge.tsx @@ -1,5 +1,4 @@ import { Badge } from "@kobalte/core/badge"; - import style from "./badge.module.css"; export function BasicExample() { diff --git a/apps/docs/src/examples/breadcrumbs.module.css b/apps/docs/src/examples/breadcrumbs.module.css index 844879e62..0932790a5 100644 --- a/apps/docs/src/examples/breadcrumbs.module.css +++ b/apps/docs/src/examples/breadcrumbs.module.css @@ -31,14 +31,14 @@ color: hsl(240 5% 65%); } -[data-kb-theme="dark"] .breadcrumbs__link { +[data-theme*="dark"] .breadcrumbs__link { color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .breadcrumbs__link[data-disabled] { +[data-theme*="dark"] .breadcrumbs__link[data-disabled] { color: hsl(240 4% 46%); } -[data-kb-theme="dark"] .breadcrumbs__link:hover { +[data-theme*="dark"] .breadcrumbs__link:hover { color: hsl(201 96% 32%); } diff --git a/apps/docs/src/examples/breadcrumbs.tsx b/apps/docs/src/examples/breadcrumbs.tsx index 0800ca785..175dfbcbd 100644 --- a/apps/docs/src/examples/breadcrumbs.tsx +++ b/apps/docs/src/examples/breadcrumbs.tsx @@ -1,5 +1,4 @@ import { Breadcrumbs } from "@kobalte/core/breadcrumbs"; - import { ChevronRightIcon } from "../components"; import style from "./breadcrumbs.module.css"; diff --git a/apps/docs/src/examples/button.module.css b/apps/docs/src/examples/button.module.css index 694fd918b..2593a99d5 100644 --- a/apps/docs/src/examples/button.module.css +++ b/apps/docs/src/examples/button.module.css @@ -28,15 +28,15 @@ background-color: hsl(201 90% 27%); } -[data-kb-theme="dark"] .button { +[data-theme*="dark"] .button { background-color: hsl(201 96% 32%); color: hsla(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .button:hover { +[data-theme*="dark"] .button:hover { background-color: hsl(200 98% 39%); } -[data-kb-theme="dark"] .button:active { +[data-theme*="dark"] .button:active { background-color: hsl(199 89% 48%); } diff --git a/apps/docs/src/examples/button.tsx b/apps/docs/src/examples/button.tsx index 3e76fee56..cbc72e60e 100644 --- a/apps/docs/src/examples/button.tsx +++ b/apps/docs/src/examples/button.tsx @@ -1,5 +1,4 @@ import { Button } from "@kobalte/core/button"; - import style from "./button.module.css"; export function BasicExample() { diff --git a/apps/docs/src/examples/calendar.module.css b/apps/docs/src/examples/calendar.module.css deleted file mode 100644 index 8ea159707..000000000 --- a/apps/docs/src/examples/calendar.module.css +++ /dev/null @@ -1,241 +0,0 @@ -.calendar { - display: inline-block; - background-color: white; - border: 1px solid hsl(214 32% 91%); - border-radius: 10px; - padding: 16px; - box-shadow: 0 1px 3px rgb(0 0 0 / 0.07); - font-family: inherit; -} - -.calendar__header { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 12px; -} - -.calendar__heading { - font-size: 14px; - font-weight: 600; - color: hsl(222 47% 11%); -} - -.calendar__nav_button { - appearance: none; - display: inline-flex; - align-items: center; - justify-content: center; - width: 28px; - height: 28px; - border-radius: 6px; - border: 1px solid hsl(214 32% 91%); - background-color: white; - color: hsl(215 16% 47%); - cursor: pointer; - font-size: 16px; - line-height: 1; - flex-shrink: 0; - transition: background-color 150ms, color 150ms; -} - -.calendar__nav_button:hover { - background-color: hsl(210 40% 96%); - color: hsl(222 47% 11%); -} - -.calendar__nav_button:focus-visible { - outline: 2px solid hsl(221 83% 53%); - outline-offset: 2px; -} - -.calendar__nav_button[disabled] { - opacity: 0.4; - cursor: default; -} - -.calendar__body { - display: flex; - gap: 24px; -} - -.calendar__grid { - border-collapse: collapse; - width: 100%; -} - -.calendar__day_name { - font-size: 11px; - font-weight: 500; - color: hsl(215 16% 47%); - text-align: center; - padding: 4px 0 8px; - text-transform: uppercase; - letter-spacing: 0.04em; -} - -.calendar__cell_trigger { - display: flex; - align-items: center; - justify-content: center; - width: 32px; - height: 32px; - border-radius: 9999px; - font-size: 13px; - cursor: pointer; - user-select: none; - color: hsl(222 47% 11%); - transition: background-color 100ms; -} - -.calendar__cell_trigger:focus-visible { - outline: 2px solid hsl(221 83% 53%); - outline-offset: 1px; -} - -.calendar__cell_trigger[data-selected] { - background-color: hsl(221 83% 53%); - color: white; -} - -.calendar__cell_trigger[data-today] { - font-weight: 600; - color: hsl(221 83% 53%); -} - -.calendar__cell_trigger[data-today][data-selected] { - color: white; -} - -.calendar__cell_trigger[data-highlighted] { - background-color: hsl(210 40% 94%); -} - -.calendar__cell_trigger[data-highlighted][data-selected] { - background-color: hsl(221 83% 47%); -} - -.calendar__cell_trigger:hover:not([data-selected]):not([data-disabled]):not([data-unavailable]) { - background-color: hsl(210 40% 96%); -} - -.calendar__cell_trigger[data-selected]:hover { - background-color: hsl(221 83% 47%); -} - -.calendar__cell_trigger[data-disabled] { - opacity: 0.3; - cursor: default; -} - -.calendar__cell_trigger[data-unavailable] { - text-decoration: line-through; - opacity: 0.4; - cursor: default; -} - -.calendar__cell_trigger[data-outside-month] { - opacity: 0.2; -} - -.calendar__controlled_output { - font-size: 12px; - color: hsl(215 16% 47%); - margin: 0; -} - -/* ─── Date picker ───────────────────────────────────────────────────────────── */ - -.datepicker { - display: inline-flex; - align-items: center; - border: 1px solid hsl(214 32% 91%); - border-radius: 8px; - background-color: white; - overflow: hidden; - transition: box-shadow 150ms; -} - -.datepicker:focus-within { - box-shadow: 0 0 0 2px hsl(221 83% 53% / 0.3); - border-color: hsl(221 83% 53%); -} - -.datepicker__input { - flex: 1; - border: none; - outline: none; - padding: 0 12px; - height: 38px; - font-size: 14px; - color: hsl(222 47% 11%); - background: transparent; - cursor: default; - min-width: 180px; -} - -.datepicker__input::placeholder { - color: hsl(215 16% 65%); -} - -.datepicker__button { - display: inline-flex; - align-items: center; - justify-content: center; - width: 36px; - height: 38px; - border: none; - border-left: 1px solid hsl(214 32% 91%); - background-color: white; - color: hsl(215 16% 47%); - cursor: pointer; - flex-shrink: 0; - transition: background-color 150ms, color 150ms; -} - -.datepicker__button:hover { - background-color: hsl(210 40% 96%); - color: hsl(221 83% 53%); -} - -.datepicker__button:focus-visible { - outline: 2px solid hsl(221 83% 53%); - outline-offset: -2px; -} - -.datepicker__button[data-expanded] { - background-color: hsl(210 40% 96%); - color: hsl(221 83% 53%); -} - -.datepicker__popover { - z-index: 50; - transform-origin: var(--kb-popover-content-transform-origin); - animation: datepicker-hide 150ms ease-in forwards; -} - -.datepicker__popover[data-expanded] { - animation: datepicker-show 150ms ease-out; -} - -@keyframes datepicker-show { - from { - opacity: 0; - transform: translateY(-4px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -@keyframes datepicker-hide { - from { - opacity: 1; - transform: translateY(0); - } - to { - opacity: 0; - transform: translateY(-4px); - } -} diff --git a/apps/docs/src/examples/calendar.tsx b/apps/docs/src/examples/calendar.tsx deleted file mode 100644 index ece7666ab..000000000 --- a/apps/docs/src/examples/calendar.tsx +++ /dev/null @@ -1,289 +0,0 @@ -import { GregorianCalendar, isWeekend } from "@internationalized/date"; -import { createMemo, createSignal, Show } from "solid-js"; - -import { Calendar, type DateValue } from "@kobalte/core/calendar"; -import { Popover } from "@kobalte/core/popover"; -import style from "./calendar.module.css"; - -const createCalendar = () => new GregorianCalendar(); - -function CalendarGrid(props: { offset?: { months: number } }) { - return ( - - - - {(day) => ( - - {day().slice(0, 2)} - - )} - - - - {(weekIndex) => ( - - {(date) => ( - }> - {(d) => ( - - - - )} - - )} - - )} - - - ); -} - -export function BasicExample() { - return ( - - - - ‹ - - - - › - - - - - - - ); -} - -export function MultipleExample() { - return ( - - - - ‹ - - - - › - - - - - - - ); -} - -export function RangeExample() { - return ( - - - - ‹ - - - - › - - - - - - - - ); -} - -export function ControlledExample() { - const [value, setValue] = createSignal(null); - - return ( -
- setValue(v as DateValue)} - class={style.calendar} - > - - - ‹ - - - - › - - - - - - -

- {value() ? `Selected: ${value()!.toString()}` : "No date selected"} -

-
- ); -} - -export function DisabledDatesExample() { - return ( - isWeekend(date, "en-US")} - class={style.calendar} - > - - - ‹ - - - - › - - - - - - - ); -} - -function CalendarIcon() { - return ( - - ); -} - -export function DatePickerExample() { - const [open, setOpen] = createSignal(false); - const [value, setValue] = createSignal(null); - - const formatted = createMemo(() => { - const v = value(); - if (!v) return ""; - const tz = Intl.DateTimeFormat().resolvedOptions().timeZone; - return new Intl.DateTimeFormat("en-US", { - month: "long", - day: "numeric", - year: "numeric", - }).format(v.toDate(tz)); - }); - - return ( - - - - - - - - - - { - setValue(v as DateValue); - setOpen(false); - }} - class={style.calendar} - > - - - ‹ - - - - › - - - - - - - - - - ); -} diff --git a/apps/docs/src/examples/checkbox.module.css b/apps/docs/src/examples/checkbox.module.css index de6f651e7..2fdaa2c39 100644 --- a/apps/docs/src/examples/checkbox.module.css +++ b/apps/docs/src/examples/checkbox.module.css @@ -47,25 +47,25 @@ user-select: none; } -[data-kb-theme="dark"] .checkbox__control { +[data-theme*="dark"] .checkbox__control { border-color: hsl(240 5% 34%); background-color: hsl(240 5% 26%); } -[data-kb-theme="dark"] .checkbox__control[data-checked] { +[data-theme*="dark"] .checkbox__control[data-checked] { border-color: hsl(200 98% 39%); background-color: hsl(200 98% 39%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .checkbox__control[data-invalid] { +[data-theme*="dark"] .checkbox__control[data-invalid] { border-color: hsl(0 72% 51%); } -[data-kb-theme="dark"] .checkbox__label { +[data-theme*="dark"] .checkbox__label { color: hsl(240 5% 84%); } -[data-kb-theme="dark"] .checkbox__description { +[data-theme*="dark"] .checkbox__description { color: hsl(240 5% 65%); } diff --git a/apps/docs/src/examples/checkbox.tsx b/apps/docs/src/examples/checkbox.tsx index 32bf0b434..3e9010197 100644 --- a/apps/docs/src/examples/checkbox.tsx +++ b/apps/docs/src/examples/checkbox.tsx @@ -1,7 +1,5 @@ import { Checkbox } from "@kobalte/core/checkbox"; -import { clsx } from "clsx"; import { createSignal } from "solid-js"; - import { CheckIcon } from "../components"; import style from "./checkbox.module.css"; @@ -51,7 +49,9 @@ export function ControlledExample() { Subscribe -

+

You are {checked() ? "subscribed" : "unsubscribed"}.

@@ -60,14 +60,21 @@ export function ControlledExample() { export function DescriptionExample() { return ( - + -
+
Subscribe You will receive our weekly newsletter. @@ -82,7 +89,8 @@ export function ErrorMessageExample() { return ( -
+
Subscribe You must agree to our Terms and Conditions. @@ -119,7 +134,12 @@ export function HTMLFormExample() {
@@ -130,7 +150,7 @@ export function HTMLFormExample() { Subscribe -
+
diff --git a/apps/docs/src/examples/collapsible.module.css b/apps/docs/src/examples/collapsible.module.css index 6b2aadc7d..9ccca47f3 100644 --- a/apps/docs/src/examples/collapsible.module.css +++ b/apps/docs/src/examples/collapsible.module.css @@ -65,8 +65,8 @@ } } -[data-kb-theme="dark"] .collapsible__trigger, -[data-kb-theme="dark"] .collapsible__content { +[data-theme*="dark"] .collapsible__trigger, +[data-theme*="dark"] .collapsible__content { border-color: hsl(240 5% 65%); color: hsl(0 0% 100% / 0.9); } diff --git a/apps/docs/src/examples/collapsible.tsx b/apps/docs/src/examples/collapsible.tsx index 772c3fe77..892689124 100644 --- a/apps/docs/src/examples/collapsible.tsx +++ b/apps/docs/src/examples/collapsible.tsx @@ -1,5 +1,4 @@ import { Collapsible } from "@kobalte/core/collapsible"; - import { ChevronDownIcon } from "../components"; import style from "./collapsible.module.css"; diff --git a/apps/docs/src/examples/color-area.tsx b/apps/docs/src/examples/color-area.tsx index cd86918ce..dba51a2b2 100644 --- a/apps/docs/src/examples/color-area.tsx +++ b/apps/docs/src/examples/color-area.tsx @@ -51,7 +51,13 @@ export function ControlledValueExample() { -

+

Current color value: {value().toString("hsl")}

@@ -60,7 +66,7 @@ export function ControlledValueExample() { export function XAndYChannelExample() { const [value, setValue] = createSignal(parseColor("rgb(100, 149, 237)")); - const [rChannel, gChannel, bChannel] = value().getColorChannels(); + const [_rChannel, gChannel, bChannel] = value().getColorChannels(); return ( -
+
diff --git a/apps/docs/src/examples/color-channel-field.module.css b/apps/docs/src/examples/color-channel-field.module.css index 6d7552dff..b2acae065 100644 --- a/apps/docs/src/examples/color-channel-field.module.css +++ b/apps/docs/src/examples/color-channel-field.module.css @@ -58,13 +58,13 @@ background: rgba(0, 0, 0, 0.2); } -[data-kb-theme="dark"] .color-channel-field__increment, -[data-kb-theme="dark"] .color-channel-field__decrement { +[data-theme*="dark"] .color-channel-field__increment, +[data-theme*="dark"] .color-channel-field__decrement { background: rgba(0, 0, 0, 0.5); } -[data-kb-theme="dark"] .color-channel-field__increment:hover, -[data-kb-theme="dark"] .color-channel-field__decrement:hover { +[data-theme*="dark"] .color-channel-field__increment:hover, +[data-theme*="dark"] .color-channel-field__decrement:hover { background: rgba(0, 0, 0, 0.25); } @@ -117,8 +117,8 @@ border-radius: 0; } -[data-kb-theme="dark"] .color-channel-field__custom-trigger-decrement, -[data-kb-theme="dark"] .color-channel-field__custom-trigger-increment { +[data-theme*="dark"] .color-channel-field__custom-trigger-decrement, +[data-theme*="dark"] .color-channel-field__custom-trigger-increment { border-color: hsl(240 5% 34%); } @@ -156,29 +156,29 @@ user-select: none; } -[data-kb-theme="dark"] .color-channel-field__input { +[data-theme*="dark"] .color-channel-field__input { background-color: hsl(240 4% 16%); border: 1px solid hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .color-channel-field__input:hover { +[data-theme*="dark"] .color-channel-field__input:hover { border-color: hsl(240 4% 46%); } -[data-kb-theme="dark"] .color-channel-field__input[data-invalid] { +[data-theme*="dark"] .color-channel-field__input[data-invalid] { border-color: hsl(0 72% 51%); color: hsl(0 72% 51%); } -[data-kb-theme="dark"] .color-channel-field__input::placeholder { +[data-theme*="dark"] .color-channel-field__input::placeholder { color: hsl(0 100% 100% / 0.5); } -[data-kb-theme="dark"] .color-channel-field__label { +[data-theme*="dark"] .color-channel-field__label { color: hsl(240 5% 84%); } -[data-kb-theme="dark"] .color-channel-field__description { +[data-theme*="dark"] .color-channel-field__description { color: hsl(240 5% 65%); } diff --git a/apps/docs/src/examples/color-channel-field.tsx b/apps/docs/src/examples/color-channel-field.tsx index af2930db9..5537a7d65 100644 --- a/apps/docs/src/examples/color-channel-field.tsx +++ b/apps/docs/src/examples/color-channel-field.tsx @@ -91,7 +91,13 @@ export function ControlledExample() {
-

+

Lightness: {value().getChannelValue("lightness")}%

@@ -188,7 +194,12 @@ export function HTMLFormExample() {
-
+
diff --git a/apps/docs/src/examples/color-field.module.css b/apps/docs/src/examples/color-field.module.css index a8ecbea59..76dd9a412 100644 --- a/apps/docs/src/examples/color-field.module.css +++ b/apps/docs/src/examples/color-field.module.css @@ -56,29 +56,29 @@ user-select: none; } -[data-kb-theme="dark"] .color-field__input { +[data-theme*="dark"] .color-field__input { background-color: hsl(240 4% 16%); border: 1px solid hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .color-field__input:hover { +[data-theme*="dark"] .color-field__input:hover { border-color: hsl(240 4% 46%); } -[data-kb-theme="dark"] .color-field__input[data-invalid] { +[data-theme*="dark"] .color-field__input[data-invalid] { border-color: hsl(0 72% 51%); color: hsl(0 72% 51%); } -[data-kb-theme="dark"] .color-field__input::placeholder { +[data-theme*="dark"] .color-field__input::placeholder { color: hsl(0 100% 100% / 0.5); } -[data-kb-theme="dark"] .color-field__label { +[data-theme*="dark"] .color-field__label { color: hsl(240 5% 84%); } -[data-kb-theme="dark"] .color-field__description { +[data-theme*="dark"] .color-field__description { color: hsl(240 5% 65%); } diff --git a/apps/docs/src/examples/color-field.tsx b/apps/docs/src/examples/color-field.tsx index 2faf5622f..1dfd0f5d1 100644 --- a/apps/docs/src/examples/color-field.tsx +++ b/apps/docs/src/examples/color-field.tsx @@ -1,6 +1,5 @@ import { ColorField } from "@kobalte/core/color-field"; import { createSignal } from "solid-js"; - import style from "./color-field.module.css"; export function BasicExample() { @@ -40,7 +39,15 @@ export function ControlledExample() { -

Your favorite color is: {value()}

+

+ Your favorite color is: {value()} +

); } @@ -96,7 +103,12 @@ export function HTMLFormExample() { @@ -104,7 +116,7 @@ export function HTMLFormExample() { -
+
diff --git a/apps/docs/src/examples/color-wheel.tsx b/apps/docs/src/examples/color-wheel.tsx index 332f69707..013660991 100644 --- a/apps/docs/src/examples/color-wheel.tsx +++ b/apps/docs/src/examples/color-wheel.tsx @@ -62,7 +62,13 @@ export function ControlledValueExample() { -

+

Current color value: {value().toString("hsl")}

@@ -109,7 +115,12 @@ export function HTMLFormExample() { Label @@ -119,7 +130,7 @@ export function HTMLFormExample() { -
+
diff --git a/apps/docs/src/examples/combobox.module.css b/apps/docs/src/examples/combobox.module.css index 3f55cc1ac..8b141178e 100644 --- a/apps/docs/src/examples/combobox.module.css +++ b/apps/docs/src/examples/combobox.module.css @@ -169,45 +169,45 @@ } } -[data-kb-theme="dark"] .combobox__control { +[data-theme*="dark"] .combobox__control { background-color: hsl(240 4% 16%); border: 1px solid hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .combobox__control:hover { +[data-theme*="dark"] .combobox__control:hover { border-color: hsl(240 4% 46%); } -[data-kb-theme="dark"] .combobox__control[data-invalid] { +[data-theme*="dark"] .combobox__control[data-invalid] { border-color: hsl(0 72% 51%); color: hsl(0 72% 51%); } -[data-kb-theme="dark"] .combobox__input::placeholder { +[data-theme*="dark"] .combobox__input::placeholder { color: hsl(0 100% 100% / 0.5); } -[data-kb-theme="dark"] .combobox__trigger { +[data-theme*="dark"] .combobox__trigger { background: hsl(240 5% 26%); border-left: 1px solid hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .combobox__content { +[data-theme*="dark"] .combobox__content { border: 1px solid hsl(240 5% 26%); background-color: hsl(240 4% 16%); box-shadow: none; } -[data-kb-theme="dark"] .combobox__section { +[data-theme*="dark"] .combobox__section { color: hsl(0 100% 100% / 0.7); } -[data-kb-theme="dark"] .combobox__item { +[data-theme*="dark"] .combobox__item { color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .combobox__description { +[data-theme*="dark"] .combobox__description { color: hsl(0 100% 100% / 0.7); } diff --git a/apps/docs/src/examples/combobox.tsx b/apps/docs/src/examples/combobox.tsx index 7848c1460..70d51b258 100644 --- a/apps/docs/src/examples/combobox.tsx +++ b/apps/docs/src/examples/combobox.tsx @@ -116,7 +116,15 @@ export function ControlledExample() { -

Your favorite fruit is: {value()}.

+

+ Your favorite fruit is: {value()}. +

); } @@ -218,7 +226,12 @@ export function HTMLFormExample() { -
+
@@ -407,23 +420,41 @@ export function MultipleSelectionExample() { {(state) => ( <>
0 && "p-2" - }`} + style={{ + display: "flex", + "align-items": "center", + gap: "8px", + "flex-wrap": "wrap", + ...(state.selectedOptions().length > 0 && { padding: "8px" }), + }} > {(option) => ( e.stopPropagation()} > {option} )} @@ -438,9 +469,18 @@ export function MultipleSelectionExample() { type="button" onPointerDown={(e) => e.stopPropagation()} onClick={state.clear} - class="ml-auto self-center mr-2 rounded-full hover:bg-zinc-100 dark:hover:bg-zinc-600 p-2" + style={{ + "margin-left": "auto", + "align-self": "center", + "margin-right": "8px", + "border-radius": "9999px", + padding: "8px", + cursor: "pointer", + background: "none", + border: "none", + }} > - + @@ -456,7 +496,13 @@ export function MultipleSelectionExample() { -

+

Your favorite fruits are: {values().join(", ")}.

diff --git a/apps/docs/src/examples/context-menu.module.css b/apps/docs/src/examples/context-menu.module.css index 950132530..0889fede4 100644 --- a/apps/docs/src/examples/context-menu.module.css +++ b/apps/docs/src/examples/context-menu.module.css @@ -131,35 +131,35 @@ } } -[data-kb-theme="dark"] .context-menu__trigger { +[data-theme*="dark"] .context-menu__trigger { border-color: rgb(255 255 255 / 0.5); color: rgb(255 255 255 / 0.7); } -[data-kb-theme="dark"] .context-menu__content, -[data-kb-theme="dark"] .context-menu__sub-content { +[data-theme*="dark"] .context-menu__content, +[data-theme*="dark"] .context-menu__sub-content { border: 1px solid hsl(240 5% 26%); background-color: hsl(240 4% 16%); box-shadow: none; } -[data-kb-theme="dark"] .context-menu__group-label { +[data-theme*="dark"] .context-menu__group-label { color: hsl(0 100% 100% / 0.7); } -[data-kb-theme="dark"] .context-menu__item, -[data-kb-theme="dark"] .context-menu__checkbox-item, -[data-kb-theme="dark"] .context-menu__radio-item, -[data-kb-theme="dark"] .context-menu__sub-trigger { +[data-theme*="dark"] .context-menu__item, +[data-theme*="dark"] .context-menu__checkbox-item, +[data-theme*="dark"] .context-menu__radio-item, +[data-theme*="dark"] .context-menu__sub-trigger { color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] +[data-theme*="dark"] .context-menu__sub-trigger[data-expanded]:not([data-highlighted]) { background-color: hsl(202 80% 24% / 0.7); color: hsl(198 93% 60%); } -[data-kb-theme="dark"] .context-menu__separator { +[data-theme*="dark"] .context-menu__separator { border-color: hsl(240 5% 34%); } diff --git a/apps/docs/src/examples/context-menu.tsx b/apps/docs/src/examples/context-menu.tsx index 31be52f2c..ebd99246a 100644 --- a/apps/docs/src/examples/context-menu.tsx +++ b/apps/docs/src/examples/context-menu.tsx @@ -1,6 +1,5 @@ import { ContextMenu } from "@kobalte/core/context-menu"; import { createSignal } from "solid-js"; - import { CheckIcon, ChevronRightIcon, DotFilledIcon } from "../components"; import style from "./context-menu.module.css"; diff --git a/apps/docs/src/examples/dialog.module.css b/apps/docs/src/examples/dialog.module.css index 594594919..cbd139309 100644 --- a/apps/docs/src/examples/dialog.module.css +++ b/apps/docs/src/examples/dialog.module.css @@ -130,33 +130,33 @@ } } -[data-kb-theme="dark"] .dialog__trigger { +[data-theme*="dark"] .dialog__trigger { background-color: hsl(201 96% 32%); color: hsla(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .dialog__trigger:hover { +[data-theme*="dark"] .dialog__trigger:hover { background-color: hsl(200 98% 39%); } -[data-kb-theme="dark"] .dialog__trigger:active { +[data-theme*="dark"] .dialog__trigger:active { background-color: hsl(199 89% 48%); } -[data-kb-theme="dark"] .dialog__content { +[data-theme*="dark"] .dialog__content { border: 1px solid hsl(240 5% 26%); background-color: hsl(240 4% 16%); box-shadow: none; } -[data-kb-theme="dark"] .dialog__close-button { +[data-theme*="dark"] .dialog__close-button { color: hsl(0 100% 100% / 0.8); } -[data-kb-theme="dark"] .dialog__title { +[data-theme*="dark"] .dialog__title { color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .dialog__description { +[data-theme*="dark"] .dialog__description { color: hsl(0 100% 100% / 0.7); } diff --git a/apps/docs/src/examples/dialog.tsx b/apps/docs/src/examples/dialog.tsx index ffdbd69b9..4691c0ed0 100644 --- a/apps/docs/src/examples/dialog.tsx +++ b/apps/docs/src/examples/dialog.tsx @@ -1,5 +1,4 @@ import { Dialog } from "@kobalte/core/dialog"; - import { CrossIcon } from "../components"; import style from "./dialog.module.css"; diff --git a/apps/docs/src/examples/drawer.module.css b/apps/docs/src/examples/drawer.module.css index 3d4611fe0..459127030 100644 --- a/apps/docs/src/examples/drawer.module.css +++ b/apps/docs/src/examples/drawer.module.css @@ -163,43 +163,43 @@ /* ─── Dark mode ───────────────────────────────────────────────────────────── */ -[data-kb-theme="dark"] .drawer__trigger { +[data-theme*="dark"] .drawer__trigger { background-color: hsl(201 96% 32%); color: hsla(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .drawer__trigger:hover { +[data-theme*="dark"] .drawer__trigger:hover { background-color: hsl(200 98% 39%); } -[data-kb-theme="dark"] .drawer__trigger:active { +[data-theme*="dark"] .drawer__trigger:active { background-color: hsl(199 89% 48%); } -[data-kb-theme="dark"] .drawer__content, -[data-kb-theme="dark"] .drawer__content_right { +[data-theme*="dark"] .drawer__content, +[data-theme*="dark"] .drawer__content_right { background-color: hsl(240 4% 16%); border-color: hsl(240 5% 26%); box-shadow: none; } -[data-kb-theme="dark"] .drawer__handle { +[data-theme*="dark"] .drawer__handle { background-color: hsl(240 5% 34%); } -[data-kb-theme="dark"] .drawer__close-button { +[data-theme*="dark"] .drawer__close-button { color: hsl(0 100% 100% / 0.8); } -[data-kb-theme="dark"] .drawer__title { +[data-theme*="dark"] .drawer__title { color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .drawer__description { +[data-theme*="dark"] .drawer__description { color: hsl(0 100% 100% / 0.7); } -[data-kb-theme="dark"] .drawer__action { +[data-theme*="dark"] .drawer__action { background-color: hsl(240 5% 84%); color: hsl(240 6% 10%); } diff --git a/apps/docs/src/examples/drawer.tsx b/apps/docs/src/examples/drawer.tsx index 1a5ffaa7e..d3128c1fc 100644 --- a/apps/docs/src/examples/drawer.tsx +++ b/apps/docs/src/examples/drawer.tsx @@ -1,6 +1,5 @@ -import { createSignal } from "solid-js"; - import { Drawer } from "@kobalte/core/drawer"; +import { createSignal } from "solid-js"; import { CrossIcon } from "../components"; import style from "./drawer.module.css"; @@ -81,6 +80,7 @@ export function ControlledExample() {
diff --git a/apps/docs/src/examples/otp-field.module.css b/apps/docs/src/examples/otp-field.module.css index 3ded47862..6bacb9fa3 100644 --- a/apps/docs/src/examples/otp-field.module.css +++ b/apps/docs/src/examples/otp-field.module.css @@ -48,12 +48,12 @@ } } -[data-kb-theme="dark"] .otp-field__slot { +[data-theme*="dark"] .otp-field__slot { border-color: hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .otp-field__slot[data-active] { +[data-theme*="dark"] .otp-field__slot[data-active] { border-color: hsl(200 98% 39%); box-shadow: 0 0 0 3px hsl(200 98% 39% / 0.2); } diff --git a/apps/docs/src/examples/pagination.module.css b/apps/docs/src/examples/pagination.module.css index aed957056..125083394 100644 --- a/apps/docs/src/examples/pagination.module.css +++ b/apps/docs/src/examples/pagination.module.css @@ -1,4 +1,5 @@ .pagination__root > ul { + list-style: none; display: inline-flex; align-items: center; justify-content: space-between; @@ -66,27 +67,27 @@ color: white; } -[data-kb-theme="dark"] .pagination__item { +[data-theme*="dark"] .pagination__item { background-color: hsl(240 4% 16%); border: 1px solid hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .pagination__ellipsis { +[data-theme*="dark"] .pagination__ellipsis { background-color: hsl(240 4% 16%); border: 1px solid hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .pagination__item[aria-current="page"] { +[data-theme*="dark"] .pagination__item[aria-current="page"] { background-color: hsl(201 96% 32%); color: hsla(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .pagination__item:hover { +[data-theme*="dark"] .pagination__item:hover { border-color: hsl(240 4% 46%); } -[data-kb-theme="dark"] .pagination__item:active { +[data-theme*="dark"] .pagination__item:active { background-color: hsl(199 89% 48%); } diff --git a/apps/docs/src/examples/pagination.tsx b/apps/docs/src/examples/pagination.tsx index ad68d45d7..3f44d4d44 100644 --- a/apps/docs/src/examples/pagination.tsx +++ b/apps/docs/src/examples/pagination.tsx @@ -1,5 +1,4 @@ import { Pagination } from "@kobalte/core/pagination"; - import { createSignal } from "solid-js"; import style from "./pagination.module.css"; diff --git a/apps/docs/src/examples/popover.module.css b/apps/docs/src/examples/popover.module.css index a647c4f76..9c756c5fa 100644 --- a/apps/docs/src/examples/popover.module.css +++ b/apps/docs/src/examples/popover.module.css @@ -6,6 +6,7 @@ height: 40px; width: auto; outline: none; + border: none; border-radius: 6px; padding: 0 16px; background-color: hsl(200 98% 39%); @@ -98,37 +99,37 @@ } } -[data-kb-theme="dark"] .popover__trigger { +[data-theme*="dark"] .popover__trigger { background-color: hsl(201 96% 32%); color: hsla(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .popover__trigger:hover { +[data-theme*="dark"] .popover__trigger:hover { background-color: hsl(200 98% 39%); } -[data-kb-theme="dark"] .popover__trigger:active { +[data-theme*="dark"] .popover__trigger:active { background-color: hsl(199 89% 48%); } -[data-kb-theme="dark"] .popover__anchor { +[data-theme*="dark"] .popover__anchor { background-color: hsl(240 4% 16%); } -[data-kb-theme="dark"] .popover__content { +[data-theme*="dark"] .popover__content { border: 1px solid hsl(240 5% 26%); background-color: hsl(240 4% 16%); box-shadow: none; } -[data-kb-theme="dark"] .popover__close-button { +[data-theme*="dark"] .popover__close-button { color: hsl(0 100% 100% / 0.8); } -[data-kb-theme="dark"] .popover__title { +[data-theme*="dark"] .popover__title { color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .popover__description { +[data-theme*="dark"] .popover__description { color: hsl(0 100% 100% / 0.7); } diff --git a/apps/docs/src/examples/popover.tsx b/apps/docs/src/examples/popover.tsx index 3292a6036..d3ee64725 100644 --- a/apps/docs/src/examples/popover.tsx +++ b/apps/docs/src/examples/popover.tsx @@ -1,6 +1,5 @@ import { Popover } from "@kobalte/core/popover"; import { createSignal } from "solid-js"; - import { CrossIcon } from "../components"; import style from "./popover.module.css"; diff --git a/apps/docs/src/examples/progress.module.css b/apps/docs/src/examples/progress.module.css index 2d3cfc54f..ead5b4318 100644 --- a/apps/docs/src/examples/progress.module.css +++ b/apps/docs/src/examples/progress.module.css @@ -32,11 +32,11 @@ background-color: #16a34a; } -[data-kb-theme="dark"] .progress__label, -[data-kb-theme="dark"] .progress__value-label { +[data-theme*="dark"] .progress__label, +[data-theme*="dark"] .progress__value-label { color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .progress__track { +[data-theme*="dark"] .progress__track { background-color: hsl(240 5% 26%); } diff --git a/apps/docs/src/examples/progress.tsx b/apps/docs/src/examples/progress.tsx index f356d9943..b2e03b38e 100644 --- a/apps/docs/src/examples/progress.tsx +++ b/apps/docs/src/examples/progress.tsx @@ -1,5 +1,4 @@ import { Progress } from "@kobalte/core/progress"; - import style from "./progress.module.css"; export function BasicExample() { diff --git a/apps/docs/src/examples/radio-group.module.css b/apps/docs/src/examples/radio-group.module.css index 5d2145e55..dd96ea9b0 100644 --- a/apps/docs/src/examples/radio-group.module.css +++ b/apps/docs/src/examples/radio-group.module.css @@ -73,35 +73,35 @@ user-select: none; } -[data-kb-theme="dark"] .radio-group__label { +[data-theme*="dark"] .radio-group__label { color: hsl(240 5% 84%); } -[data-kb-theme="dark"] .radio-group__description { +[data-theme*="dark"] .radio-group__description { color: hsl(240 5% 65%); } -[data-kb-theme="dark"] .radio__control { +[data-theme*="dark"] .radio__control { border-color: hsl(240 5% 34%); background-color: hsl(240 5% 26%); } -[data-kb-theme="dark"] .radio__control[data-checked] { +[data-theme*="dark"] .radio__control[data-checked] { border-color: hsl(200 98% 39%); background-color: hsl(200 98% 39%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .radio__control[data-checked][data-invalid] { +[data-theme*="dark"] .radio__control[data-checked][data-invalid] { border-color: hsl(0 72% 51%); background-color: hsl(0 72% 51%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .radio__indicator { +[data-theme*="dark"] .radio__indicator { background-color: hsl(240 4% 16%); } -[data-kb-theme="dark"] .radio__label { +[data-theme*="dark"] .radio__label { color: hsl(240 5% 84%); } diff --git a/apps/docs/src/examples/radio-group.tsx b/apps/docs/src/examples/radio-group.tsx index 9f65cf382..fd716eb4a 100644 --- a/apps/docs/src/examples/radio-group.tsx +++ b/apps/docs/src/examples/radio-group.tsx @@ -82,7 +82,15 @@ export function ControlledExample() {
-

Your favorite fruit is: {value()}.

+

+ Your favorite fruit is: {value()}. +

); } @@ -166,7 +174,12 @@ export function HTMLFormExample() { @@ -188,7 +201,7 @@ export function HTMLFormExample() {
-
+
diff --git a/apps/docs/src/examples/rating.module.css b/apps/docs/src/examples/rating.module.css index ef021968f..47fb517de 100644 --- a/apps/docs/src/examples/rating.module.css +++ b/apps/docs/src/examples/rating.module.css @@ -37,7 +37,7 @@ outline: none; } -[data-kb-theme="dark"] .rating-item { +[data-theme*="dark"] .rating-item { fill: hsl(240 5% 26%); } @@ -49,14 +49,14 @@ fill: hsl(240 6% 90%); } -[data-kb-theme="dark"] .half-star-icon > path + path { +[data-theme*="dark"] .half-star-icon > path + path { fill: hsl(240 5% 26%); } -[data-kb-theme="dark"] .rating__label { +[data-theme*="dark"] .rating__label { color: hsl(240 5% 84%); } -[data-kb-theme="dark"] .rating__description { +[data-theme*="dark"] .rating__description { color: hsl(240 5% 65%); } diff --git a/apps/docs/src/examples/rating.tsx b/apps/docs/src/examples/rating.tsx index d02616539..ce082fc63 100644 --- a/apps/docs/src/examples/rating.tsx +++ b/apps/docs/src/examples/rating.tsx @@ -1,6 +1,5 @@ -import { Index, createSignal } from "solid-js"; -import { Rating } from "../../../../packages/core/src/rating"; - +import { Rating } from "@kobalte/core/rating"; +import { createSignal, Index } from "solid-js"; import style from "./rating.module.css"; export function BasicExample() { @@ -58,7 +57,15 @@ export function ControlledExample() { -

Your rating is: {value()}/5

+

+ Your rating is: {value()}/5 +

); } @@ -148,7 +155,12 @@ export function HTMLFormExample() { @@ -164,7 +176,7 @@ export function HTMLFormExample() { -
+
diff --git a/apps/docs/src/examples/search.module.css b/apps/docs/src/examples/search.module.css index 2513e9b1c..052f814d3 100644 --- a/apps/docs/src/examples/search.module.css +++ b/apps/docs/src/examples/search.module.css @@ -196,41 +196,41 @@ } } -[data-kb-theme="dark"] .search__control { +[data-theme*="dark"] .search__control { background-color: hsl(240 4% 16%); border: 1px solid hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .search__control:hover { +[data-theme*="dark"] .search__control:hover { border-color: hsl(240 4% 46%); } -[data-kb-theme="dark"] .search__input::placeholder { +[data-theme*="dark"] .search__input::placeholder { color: hsl(0 100% 100% / 0.5); } -[data-kb-theme="dark"] .search__indicator { +[data-theme*="dark"] .search__indicator { background: hsl(240 5% 26%); border-right: 1px solid hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .search__content { +[data-theme*="dark"] .search__content { border: 1px solid hsl(240 5% 26%); background-color: hsl(240 4% 16%); box-shadow: none; } -[data-kb-theme="dark"] .search__section { +[data-theme*="dark"] .search__section { color: hsl(0 100% 100% / 0.7); } -[data-kb-theme="dark"] .search__item { +[data-theme*="dark"] .search__item { color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .search__description { +[data-theme*="dark"] .search__description { color: hsl(0 100% 100% / 0.7); } @@ -283,13 +283,13 @@ color: hsl(240 4% 46%); } -[data-kb-theme="dark"] .search__control_inline { +[data-theme*="dark"] .search__control_inline { background-color: hsl(240 4% 16%); border: 1px solid hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .search__content_inline { +[data-theme*="dark"] .search__content_inline { background-color: hsl(240 4% 16%); border: 1px solid hsl(240 5% 34%); } diff --git a/apps/docs/src/examples/search.tsx b/apps/docs/src/examples/search.tsx index 6c58ebc12..be7fc843c 100644 --- a/apps/docs/src/examples/search.tsx +++ b/apps/docs/src/examples/search.tsx @@ -1,6 +1,5 @@ import MiniSearch from "minisearch"; import { createSignal } from "solid-js"; -import { Search } from "../../../../packages/core/src/search"; import { MagnifyingGlassIcon, ReloadIcon } from "../components"; import style from "./search.module.css"; @@ -550,6 +549,8 @@ const queryEmojiData = (query: string, numSuggestions = 20) => { .slice(0, numSuggestions) as never as EmojiDatum[]; }; +import { Search } from "@kobalte/core/search"; + export function BasicExample() { const [options, setOptions] = createSignal([]); const [emoji, setEmoji] = createSignal(); diff --git a/apps/docs/src/examples/segmented-control.module.css b/apps/docs/src/examples/segmented-control.module.css index 7036430ff..856516fda 100644 --- a/apps/docs/src/examples/segmented-control.module.css +++ b/apps/docs/src/examples/segmented-control.module.css @@ -1,11 +1,11 @@ -[data-kb-theme] .segmented-control { +.segmented-control { --font-size-md: 0.875rem; --font-size-sm: 0.75rem; --border-width: 1px; --border-radius: 0.5rem; } -[data-kb-theme="light"] .segmented-control { +.segmented-control { --border-color: hsl(240 6% 90%); --border-active-color: hsl(240 6% 75%); --label-color: hsl(240 6% 10%); @@ -16,7 +16,7 @@ --indicator-focus-shadow-color: hsl(200 98% 39%); } -[data-kb-theme="dark"] .segmented-control { +[data-theme*="dark"] .segmented-control { --border-color: hsl(240 6% 26%); --border-active-color: hsl(240 6% 41%); --label-color: hsl(240 5% 84%); diff --git a/apps/docs/src/examples/segmented-control.tsx b/apps/docs/src/examples/segmented-control.tsx index 22b1fbd82..d3b20d648 100644 --- a/apps/docs/src/examples/segmented-control.tsx +++ b/apps/docs/src/examples/segmented-control.tsx @@ -115,7 +115,15 @@ export function ControlledExample() {
-

Your favorite fruit is: {value()}.

+

+ Your favorite fruit is: {value()}. +

); } @@ -223,7 +231,12 @@ export function HTMLFormExample() {
-
+
diff --git a/apps/docs/src/examples/select.module.css b/apps/docs/src/examples/select.module.css index efdb84ca8..5206ed3d2 100644 --- a/apps/docs/src/examples/select.module.css +++ b/apps/docs/src/examples/select.module.css @@ -162,39 +162,39 @@ } } -[data-kb-theme="dark"] .select__trigger { +[data-theme*="dark"] .select__trigger { background-color: hsl(240 4% 16%); border: 1px solid hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .select__trigger:hover { +[data-theme*="dark"] .select__trigger:hover { border-color: hsl(240 4% 46%); } -[data-kb-theme="dark"] .select__trigger[data-invalid] { +[data-theme*="dark"] .select__trigger[data-invalid] { border-color: hsl(0 72% 51%); color: hsl(0 72% 51%); } -[data-kb-theme="dark"] .select__value[data-placeholder-shown] { +[data-theme*="dark"] .select__value[data-placeholder-shown] { color: hsl(0 100% 100% / 0.5); } -[data-kb-theme="dark"] .select__content { +[data-theme*="dark"] .select__content { border: 1px solid hsl(240 5% 26%); background-color: hsl(240 4% 16%); box-shadow: none; } -[data-kb-theme="dark"] .select__section { +[data-theme*="dark"] .select__section { color: hsl(0 100% 100% / 0.7); } -[data-kb-theme="dark"] .select__item { +[data-theme*="dark"] .select__item { color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .select__description { +[data-theme*="dark"] .select__description { color: hsl(0 100% 100% / 0.7); } diff --git a/apps/docs/src/examples/select.tsx b/apps/docs/src/examples/select.tsx index bd1c3129c..219172284 100644 --- a/apps/docs/src/examples/select.tsx +++ b/apps/docs/src/examples/select.tsx @@ -1,4 +1,3 @@ -import { Select } from "@kobalte/core/select"; import { createVirtualizer } from "@tanstack/solid-virtual"; import { createSignal, For } from "solid-js"; @@ -7,6 +6,8 @@ import style from "./select.module.css"; const STRING_OPTIONS = ["Apple", "Banana", "Blueberry", "Grapes", "Pineapple"]; +import { Select } from "@kobalte/core/select"; + export function BasicExample() { return ( -

Your favorite fruit is: {value()}.

+

+ Your favorite fruit is: {value()}. +

); } @@ -197,7 +206,12 @@ export function HTMLFormExample() { -
+
@@ -382,20 +396,43 @@ export function MultipleSelectionExample() { class={style.select__value}> {(state) => ( <> -
+
{(option) => ( e.stopPropagation()} > {option} )} @@ -405,9 +442,17 @@ export function MultipleSelectionExample() { type="button" onPointerDown={(e) => e.stopPropagation()} onClick={state.clear} - class="ml-auto mr-2 rounded-full hover:bg-zinc-100 dark:hover:bg-zinc-600 p-1" + style={{ + "margin-left": "auto", + "margin-right": "8px", + "border-radius": "9999px", + padding: "4px", + cursor: "pointer", + background: "none", + border: "none", + }} > - + )} @@ -422,7 +467,13 @@ export function MultipleSelectionExample() { -

+

Your favorite fruits are: {values().join(", ")}.

diff --git a/apps/docs/src/examples/separator.module.css b/apps/docs/src/examples/separator.module.css index 7abcedb21..702f6958e 100644 --- a/apps/docs/src/examples/separator.module.css +++ b/apps/docs/src/examples/separator.module.css @@ -8,6 +8,6 @@ width: 100%; } -[data-kb-theme="dark"] .separator { +[data-theme*="dark"] .separator { background-color: hsl(240 5% 26%); } diff --git a/apps/docs/src/examples/separator.tsx b/apps/docs/src/examples/separator.tsx index df7439f20..46ad8fda9 100644 --- a/apps/docs/src/examples/separator.tsx +++ b/apps/docs/src/examples/separator.tsx @@ -1,10 +1,9 @@ import { Separator } from "@kobalte/core/separator"; - import style from "./separator.module.css"; export function BasicExample() { return ( -
+
Content above Content below diff --git a/apps/docs/src/examples/skeleton.tsx b/apps/docs/src/examples/skeleton.tsx index 2cd54cd65..d40748f80 100644 --- a/apps/docs/src/examples/skeleton.tsx +++ b/apps/docs/src/examples/skeleton.tsx @@ -2,7 +2,6 @@ import { Image } from "@kobalte/core/image"; import { Skeleton } from "@kobalte/core/skeleton"; import { ToggleButton } from "@kobalte/core/toggle-button"; import { createSignal } from "solid-js"; - import style from "./skeleton.module.css"; export function BasicExample() { @@ -23,7 +22,7 @@ export function MultipleSkeletonsExample() { diff --git a/apps/docs/src/examples/slider.module.css b/apps/docs/src/examples/slider.module.css index 7e817648a..4079b4b16 100644 --- a/apps/docs/src/examples/slider.module.css +++ b/apps/docs/src/examples/slider.module.css @@ -66,6 +66,6 @@ justify-content: space-between; } -[data-kb-theme="dark"] .SliderTrack { +[data-theme*="dark"] .SliderTrack { background-color: hsl(240 5% 26%); } diff --git a/apps/docs/src/examples/slider.tsx b/apps/docs/src/examples/slider.tsx index e5ba9c7c3..67a70a863 100644 --- a/apps/docs/src/examples/slider.tsx +++ b/apps/docs/src/examples/slider.tsx @@ -41,7 +41,7 @@ export function MultipleThumbsExample() { export function StepExample() { return ( -
+
Step size 8 diff --git a/apps/docs/src/examples/switch.module.css b/apps/docs/src/examples/switch.module.css index 795a21c45..005e6bdf6 100644 --- a/apps/docs/src/examples/switch.module.css +++ b/apps/docs/src/examples/switch.module.css @@ -62,28 +62,28 @@ user-select: none; } -[data-kb-theme="dark"] .switch__control { +[data-theme*="dark"] .switch__control { border-color: hsl(240 5% 34%); background-color: hsl(240 5% 26%); } -[data-kb-theme="dark"] .switch__control[data-checked] { +[data-theme*="dark"] .switch__control[data-checked] { border-color: hsl(200 98% 39%); background-color: hsl(200 98% 39%); } -[data-kb-theme="dark"] .switch__control[data-invalid] { +[data-theme*="dark"] .switch__control[data-invalid] { border-color: hsl(0 72% 51%); } -[data-kb-theme="dark"] .switch__thumb { +[data-theme*="dark"] .switch__thumb { background-color: hsl(240 5% 84%); } -[data-kb-theme="dark"] .switch__label { +[data-theme*="dark"] .switch__label { color: hsl(240 5% 84%); } -[data-kb-theme="dark"] .switch__description { +[data-theme*="dark"] .switch__description { color: hsl(240 5% 65%); } diff --git a/apps/docs/src/examples/switch.tsx b/apps/docs/src/examples/switch.tsx index e756cde28..654ec9a26 100644 --- a/apps/docs/src/examples/switch.tsx +++ b/apps/docs/src/examples/switch.tsx @@ -1,6 +1,5 @@ import { Switch } from "@kobalte/core/switch"; import { createSignal } from "solid-js"; - import style from "./switch.module.css"; export function BasicExample() { @@ -39,7 +38,9 @@ export function ControlledExample() { -

+

Airplane mode is {checked() ? "active" : "inactive"}.

@@ -49,7 +50,14 @@ export function ControlledExample() { export function DescriptionExample() { return ( -
+
Airplane mode Disable all network connections. @@ -73,7 +81,14 @@ export function ErrorMessageExample() { onChange={setChecked} validationState={!checked() ? "invalid" : "valid"} > -
+
Airplane mode You must enable airplane mode. @@ -103,7 +118,12 @@ export function HTMLFormExample() { Airplane mode @@ -112,7 +132,7 @@ export function HTMLFormExample() { -
+
diff --git a/apps/docs/src/examples/tabs.module.css b/apps/docs/src/examples/tabs.module.css index b351303ad..43ae4dadb 100644 --- a/apps/docs/src/examples/tabs.module.css +++ b/apps/docs/src/examples/tabs.module.css @@ -63,18 +63,18 @@ padding: 16px; } -[data-kb-theme="dark"] .tabs__list { +[data-theme*="dark"] .tabs__list { border-color: hsl(240 5% 26%); } -[data-kb-theme="dark"] .tabs__trigger { +[data-theme*="dark"] .tabs__trigger { color: rgb(255 255 255 / 0.9); } -[data-kb-theme="dark"] .tabs__trigger:hover { +[data-theme*="dark"] .tabs__trigger:hover { background-color: hsl(240 4% 16%); } -[data-kb-theme="dark"] .tabs__trigger:focus-visible { +[data-theme*="dark"] .tabs__trigger:focus-visible { background-color: hsl(240 4% 16%); } diff --git a/apps/docs/src/examples/tabs.tsx b/apps/docs/src/examples/tabs.tsx index 41f62d29b..ca79e1903 100644 --- a/apps/docs/src/examples/tabs.tsx +++ b/apps/docs/src/examples/tabs.tsx @@ -1,6 +1,5 @@ import { Tabs } from "@kobalte/core/tabs"; import { createSignal, For } from "solid-js"; - import style from "./tabs.module.css"; export function BasicExample() { @@ -114,7 +113,11 @@ export function ControlledExample() { Contact details -

Selected tab: {selectedTab()}

+

+ Selected tab: {selectedTab()} +

); } @@ -139,7 +142,15 @@ export function FocusableContentExample() { @@ -182,17 +193,44 @@ export function DynamicContentExample() { return ( <> -
+
diff --git a/apps/docs/src/examples/time-field.module.css b/apps/docs/src/examples/time-field.module.css index 3fccb4d39..9de5c5870 100644 --- a/apps/docs/src/examples/time-field.module.css +++ b/apps/docs/src/examples/time-field.module.css @@ -45,7 +45,7 @@ } .time-field__segment:focus { - color: #fff !important; + color: #fff; background: hsl(200 98% 39%); outline: none; border-radius: 4px; @@ -67,11 +67,11 @@ user-select: none; } -[data-kb-theme="dark"] .time-field__label { +[data-theme*="dark"] .time-field__label { color: hsl(240 5% 84%); } -[data-kb-theme="dark"] .time-field__field { +[data-theme*="dark"] .time-field__field { background-color: hsl(240 4% 16%); border: 1px solid hsl(240 5% 34%); color: hsl(0 100% 100% / 0.9); @@ -82,10 +82,10 @@ outline-color: hsl(0 72% 51%); } -[data-kb-theme="dark"] .time-field__segment[data-placeholder] { +[data-theme*="dark"] .time-field__segment[data-placeholder] { color: hsl(0 100% 100% / 0.5); } -[data-kb-theme="dark"] .time-field__description { +[data-theme*="dark"] .time-field__description { color: hsl(240 5% 65%); } diff --git a/apps/docs/src/examples/time-field.tsx b/apps/docs/src/examples/time-field.tsx index 94f4bc0e5..127ade30c 100644 --- a/apps/docs/src/examples/time-field.tsx +++ b/apps/docs/src/examples/time-field.tsx @@ -1,5 +1,5 @@ -import { Show, createSignal } from "solid-js"; -import { TimeField } from "../../../../packages/core/src/time-field"; +import { TimeField } from "@kobalte/core/time-field"; +import { createSignal, Show } from "solid-js"; import style from "./time-field.module.css"; export function BasicExample() { @@ -57,7 +57,13 @@ export function ControlledValueExample() { )} -

+

Selected time:{" "} {JSON.stringify(value())} @@ -197,7 +203,12 @@ export function HTMLFormExample() { @@ -210,7 +221,7 @@ export function HTMLFormExample() { -

+
diff --git a/apps/docs/src/examples/toast.module.css b/apps/docs/src/examples/toast.module.css index 42dfc51f6..c34f44e4d 100644 --- a/apps/docs/src/examples/toast.module.css +++ b/apps/docs/src/examples/toast.module.css @@ -135,24 +135,24 @@ } } -[data-kb-theme="dark"] .toast { +[data-theme*="dark"] .toast { border: 1px solid hsl(240 5% 26%); background-color: hsl(240 4% 16%); box-shadow: none; } -[data-kb-theme="dark"] .toast__close-button { +[data-theme*="dark"] .toast__close-button { color: hsl(0 100% 100% / 0.8); } -[data-kb-theme="dark"] .toast__title { +[data-theme*="dark"] .toast__title { color: hsl(0 100% 100% / 0.9); } -[data-kb-theme="dark"] .toast__description { +[data-theme*="dark"] .toast__description { color: hsl(0 100% 100% / 0.7); } -[data-kb-theme="dark"] .toast__progress-track { +[data-theme*="dark"] .toast__progress-track { background-color: hsl(240 5% 26%); } diff --git a/apps/docs/src/examples/toast.tsx b/apps/docs/src/examples/toast.tsx index 3f37761df..15801595e 100644 --- a/apps/docs/src/examples/toast.tsx +++ b/apps/docs/src/examples/toast.tsx @@ -1,5 +1,4 @@ import { Toast, toaster } from "@kobalte/core/toast"; - import { CrossIcon } from "../components"; import style from "./toast.module.css"; @@ -53,7 +52,7 @@ export function BasicExample() { }; return ( -
+
@@ -65,10 +64,10 @@ export function BasicExample() { } export function MultipleRegionsExample() { - let id: number; + let _id: number; const showToast = (region?: string) => { - id = toaster.show( + _id = toaster.show( (props) => (
@@ -96,7 +95,7 @@ export function MultipleRegionsExample() { }; return ( -
+
- {local.children} - - ); - }, - table: (props: ComponentProps<"table">) => { - const [local, others] = splitProps(props, ["class"]); - - return ( -
- - - ); - }, - a: (props: ComponentProps<"a">) => { - return ; - }, -}; diff --git a/apps/docs/src/model/navigation.ts b/apps/docs/src/model/navigation.ts deleted file mode 100644 index d981d5a4a..000000000 --- a/apps/docs/src/model/navigation.ts +++ /dev/null @@ -1,10 +0,0 @@ -interface NavLink { - title: string; - href: string; - status?: "new" | "updated" | "unreleased"; -} - -export interface NavSection { - title: string; - links: NavLink[]; -} diff --git a/apps/docs/src/root.css b/apps/docs/src/root.css deleted file mode 100644 index 7103f4ee9..000000000 --- a/apps/docs/src/root.css +++ /dev/null @@ -1,752 +0,0 @@ -@import "tailwindcss"; -@config "../tailwind.config.cjs"; - -@font-face { - font-family: "Lexend"; - font-style: normal; - font-weight: 100 900; - font-display: swap; - src: url("/fonts/lexend.woff2") format("woff2"); -} -@font-face { - font-family: "Inter"; - font-weight: 100 900; - font-display: block; - font-style: normal; - font-named-instance: "Regular"; - src: url("/fonts/Inter-roman.var.woff2") format("woff2"); -} -@font-face { - font-family: "Inter"; - font-weight: 100 900; - font-display: block; - font-style: italic; - font-named-instance: "Italic"; - src: url("/fonts/Inter-italic.var.woff2") format("woff2"); -} - -@layer base { - /* Hide scrollbar for Chrome, Safari and Opera */ - .hide-scrollbar::-webkit-scrollbar { - display: none; - } - - /* Hide scrollbar for IE, Edge and Firefox */ - .hide-scrollbar { - -ms-overflow-style: none; /* IE and Edge */ - scrollbar-width: none; /* Firefox */ - } - - .kb-button { - appearance: none; - display: inline-flex; - justify-content: center; - align-items: center; - height: 40px; - width: auto; - outline: none; - border: 1px solid hsl(240 5% 84%); - border-radius: 6px; - padding: 0 16px; - background-color: transparent; - color: hsl(240 6% 10%); - font-size: 16px; - line-height: 0; - transition: background-color; - } - - .kb-button:disabled { - opacity: 0.5; - cursor: not-allowed; - } - - .kb-button:hover { - background-color: hsl(0 0% 98%); - } - - .kb-button:focus-visible { - outline: 2px solid hsl(200 98% 39%); - outline-offset: 2px; - } - - .kb-button:active { - background-color: hsl(240 6% 90%); - } - - [data-kb-theme="dark"] .kb-button { - border-color: transparent; - background-color: hsl(240 4% 16%); - color: hsla(0 100% 100% / 0.9); - } - - [data-kb-theme="dark"] .kb-button:hover { - background-color: hsl(240 5% 34%); - } - - [data-kb-theme="dark"] .kb-button:active { - background-color: hsl(240 4% 46%); - } - - .kb-button-primary { - appearance: none; - display: inline-flex; - justify-content: center; - align-items: center; - height: 40px; - width: auto; - outline: none; - border-radius: 6px; - padding: 0 16px; - background-color: hsl(200 98% 39%); - color: white; - font-size: 16px; - line-height: 0; - transition: 250ms background-color; - } - - .kb-button-primary:hover { - background-color: hsl(201 96% 32%); - } - - .kb-button-primary:focus-visible { - outline: 2px solid hsl(200 98% 39%); - outline-offset: 2px; - } - - .kb-button-primary:active { - background-color: hsl(201 90% 27%); - } - - [data-kb-theme="dark"] .kb-button-primary { - background-color: hsl(201 96% 32%); - color: hsla(0 100% 100% / 0.9); - } - - [data-kb-theme="dark"] .kb-button-primary:hover { - background-color: hsl(200 98% 39%); - } - - [data-kb-theme="dark"] .kb-button-primary:active { - background-color: hsl(199 89% 48%); - } - - .kb-table .kb-code { - @apply bg-transparent dark:bg-transparent p-0 text-sky-700; - } - - .kb-tabs-snippets pre.shiki { - margin: 0; - border: none; - border-top-right-radius: 0; - border-top-left-radius: 0; - } - - .kb-preview + .kb-tabs-snippets { - margin: 0; - border-top: none; - border-top-right-radius: 0; - border-top-left-radius: 0; - } -} - -/* ------------------------------------------------------------------------------------------------- - * DocSearch - * Credit: https://github.com/vuejs/vitepress/blob/83ce1b8c5e95d2e29e733d9312f514d725fe7f0b/src/client/theme-default/components/VPNavBarSearch.vue - * -----------------------------------------------------------------------------------------------*/ - -:root { - --kb-docsearch-text-light-1: rgba(60, 60, 67); - --kb-docsearch-text-light-2: rgba(60, 60, 67, 0.75); - --kb-docsearch-text-dark-1: rgba(255, 255, 245, 0.86); - --kb-docsearch-text-dark-2: rgba(235, 235, 245, 0.6); - --kb-docsearch-bg: #ffffff; - --kb-docsearch-bg-soft: #f6f6f7; - --kb-docsearch-bg-soft-mute: #e3e3e5; - --kb-docsearch-bg-alt: #f6f6f7; - --kb-docsearch-divider: rgba(60, 60, 67, 0.12); - --kb-docsearch-text-1: var(--kb-docsearch-text-light-1); - --kb-docsearch-text-2: var(--kb-docsearch-text-light-2); - --kb-docsearch-brand: #0284c7; -} - -[data-kb-theme="dark"] { - --kb-docsearch-bg: #1e1e20; - --kb-docsearch-bg-soft: #252529; - --kb-docsearch-bg-soft-mute: #313136; - --kb-docsearch-bg-alt: #27272a; - --kb-docsearch-divider: rgba(82, 82, 89, 0.32); - --kb-docsearch-text-1: var(--kb-docsearch-text-dark-1); - --kb-docsearch-text-2: var(--kb-docsearch-text-dark-2); -} - -.DocSearch { - --docsearch-primary-color: var(--kb-docsearch-brand); - --docsearch-highlight-color: var(--docsearch-primary-color); - --docsearch-text-color: var(--kb-docsearch-text-1); - --docsearch-muted-color: var(--kb-docsearch-text-2); - --docsearch-searchbox-shadow: none; - --docsearch-searchbox-focus-background: transparent; - --docsearch-key-gradient: transparent; - --docsearch-key-shadow: none; - --docsearch-modal-background: var(--kb-docsearch-bg-soft); - --docsearch-footer-background: var(--kb-docsearch-bg); -} - -[data-kb-theme="dark"] .DocSearch { - --docsearch-modal-shadow: none; - --docsearch-footer-shadow: none; - --docsearch-logo-color: var(--kb-docsearch-text-2); - --docsearch-hit-background: var(--kb-docsearch-bg-soft-mute); - --docsearch-hit-color: var(--kb-docsearch-text-2); - --docsearch-hit-shadow: none; -} - -.DocSearch-Button { - display: flex; - justify-content: center; - align-items: center; - margin: 0; - padding: 0; - width: 32px; - height: 40px; - background: transparent; - transition: border-color 0.25s; -} - -.DocSearch-Button:hover { - background: transparent; -} - -.DocSearch-Button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} - -.DocSearch-Button:focus:not(:focus-visible) { - outline: none !important; -} - -@media (min-width: 768px) { - .DocSearch-Button.DocSearch-Button { - justify-content: flex-start; - border: 1px solid transparent; - border-radius: 8px; - padding: 0 10px 0 12px; - width: 100%; - height: 40px; - background-color: var(--kb-docsearch-bg-alt); - } - - .DocSearch-Button:hover { - border-color: var(--kb-docsearch-brand); - background: var(--kb-docsearch-bg-alt); - } -} - -.DocSearch-Button .DocSearch-Button-Container { - display: flex; - align-items: center; -} - -.DocSearch-Button .DocSearch-Search-Icon { - position: relative; - width: 16px; - height: 16px; - color: var(--kb-docsearch-text-1); - fill: currentColor; - transition: color 0.5s; -} - -.DocSearch-Button:hover .DocSearch-Search-Icon { - color: var(--kb-docsearch-text-1); -} - -@media (min-width: 768px) { - .DocSearch-Button .DocSearch-Search-Icon { - top: 1px; - margin-right: 8px; - width: 14px; - height: 14px; - color: var(--kb-docsearch-text-2); - } -} - -.DocSearch-Button .DocSearch-Button-Placeholder { - display: none; - margin-top: 2px; - padding: 0 16px 0 0; - font-size: 13px; - font-weight: 500; - color: var(--kb-docsearch-text-2); - transition: color 0.5s; -} - -.DocSearch-Button:hover .DocSearch-Button-Placeholder { - color: var(--kb-docsearch-text-1); -} - -@media (min-width: 768px) { - .DocSearch-Button .DocSearch-Button-Placeholder { - display: inline-block; - } -} - -.DocSearch-Button .DocSearch-Button-Keys { - /*rtl:ignore*/ - direction: ltr; - display: none; - min-width: auto; -} - -@media (min-width: 768px) { - .DocSearch-Button .DocSearch-Button-Keys { - display: flex; - align-items: center; - } -} - -.DocSearch-Button .DocSearch-Button-Key { - @apply font-sans; - display: block; - margin: 2px 0 0 0; - border: 1px solid var(--kb-docsearch-divider); - /*rtl:begin:ignore*/ - border-right: none; - border-radius: 4px 0 0 4px; - padding-left: 6px; - /*rtl:end:ignore*/ - min-width: 0; - width: auto; - height: 22px; - line-height: 22px; - font-size: 12px; - font-weight: 500; - transition: - color 0.5s, - border-color 0.5s; -} - -.DocSearch-Button .DocSearch-Button-Key + .DocSearch-Button-Key { - /*rtl:begin:ignore*/ - border-right: 1px solid var(--kb-docsearch-divider); - border-left: none; - border-radius: 0 4px 4px 0; - padding-left: 2px; - padding-right: 6px; - /*rtl:end:ignore*/ -} -.DocSearch-Button .DocSearch-Button-Key:first-child { - font-size: 1px; - letter-spacing: -12px; - color: transparent; -} - -.DocSearch-Button .DocSearch-Button-Key:first-child:after { - content: "⌘"; - font-size: 12px; - letter-spacing: normal; - color: var(--docsearch-muted-color); -} - -.DocSearch-Button .DocSearch-Button-Key:first-child > * { - display: none; -} - -[data-kb-theme="dark"] .DocSearch-Footer { - border-top: 1px solid var(--kb-docsearch-divider); -} - -.DocSearch-Form { - border: 1px solid var(--kb-docsearch-brand); - background-color: #fff; -} - -[data-kb-theme="dark"] .DocSearch-Form { - background-color: var(--kb-docsearch-bg-soft-mute); -} - -.DocSearch-Screen-Icon > svg { - margin: auto; -} - -/* ------------------------------------------------------------------------------------------------- - * Shiki Twoslash CSS - * -----------------------------------------------------------------------------------------------*/ - -.kb-preview + pre.shiki, -.kb-preview + pre.shiki + pre.shiki { - margin: 0 0 16px 0; - padding: 16px; - border-top: none; - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -pre.shiki .kb-copy-btn { - opacity: 0; -} - -pre.shiki:hover .kb-copy-btn { - opacity: 1; -} - -pre { - /* In theory shiki will overwrite these, but this is to make sure there are defaults regardless */ - background-color: white; - color: black; - - /* Give it some space to breathe */ - padding: 12px; - - /* All code samples get a grey border, twoslash ones get a different color */ - border-left: 1px solid #999; - border-bottom: 1px solid #999; - - margin-top: 1rem; - margin-bottom: 1rem; - - /* Important to allow the code to move horizontally; */ - overflow-x: auto; - position: relative; -} - -[data-kb-theme="light"] .shiki.github-dark { - display: none !important; -} - -[data-kb-theme="dark"] .shiki.github-light { - display: none !important; -} - -pre.shiki { - overflow-x: auto; - - display: flex; - align-items: center; - - border-radius: 8px; - border: 1px solid #e4e4e7; - - background-color: #fafafa !important; - - padding: 12px; - - font-family: - ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", - "Courier New", monospace; -} - -[data-kb-theme="dark"] pre.shiki { - border-color: #3f3f46; - background-color: #27272a !important; -} - -/* Reset mdx-components `code`. */ -pre.shiki code { - font-size: 14px; - border-radius: initial; - background: initial; - padding-inline-start: initial; - padding-inline-end: initial; - padding-top: initial; - padding-bottom: initial; - overflow-wrap: initial; -} - -pre.shiki:hover .dim { - opacity: 1; -} -pre.shiki div.dim { - opacity: 0.7; -} -pre.shiki div.dim, -pre.shiki div.highlight { - margin: 0; - padding: 0; -} -pre.shiki div.highlight { - opacity: 1; - background-color: rgb(224 242 254 / 0.8); -} -[data-kb-theme="dark"] pre.shiki div.highlight { - background-color: rgb(12 74 110 / 0.4); -} -pre.shiki div.line { - min-height: 1rem; -} - -/** Don't show the language identifiers */ -pre.shiki .language-id { - display: none; -} - -/* Visually differentiates twoslash code samples */ -pre.twoslash { - border-color: #719af4; -} - -/** When you mouse over the pre, show the underlines */ -pre.twoslash:hover data-lsp { - border-color: #747474; -} - -/** The tooltip-like which provides the LSP response */ -pre.twoslash data-lsp:hover::before { - content: attr(lsp); - position: absolute; - transform: translate(0, 1rem); - - background-color: #3f3f3f; - color: #fff; - text-align: left; - padding: 5px 8px; - border-radius: 2px; - font-family: - "JetBrains Mono", - Menlo, - Monaco, - Consolas, - Courier New, - monospace; - font-size: 14px; - white-space: pre-wrap; - z-index: 100; -} - -pre .code-container { - overflow: auto; - width: 100%; -} -/* The try button */ -pre .code-container > a { - position: absolute; - right: 8px; - bottom: 8px; - border-radius: 4px; - border: 1px solid #719af4; - padding: 0 8px; - color: #719af4; - text-decoration: none; - opacity: 0; - transition-timing-function: ease; - transition: opacity 0.3s; -} -/* Respect no animations */ -@media (prefers-reduced-motion: reduce) { - pre .code-container > a { - transition: none; - } -} -pre .code-container > a:hover { - color: white; - background-color: #719af4; -} -pre .code-container:hover a { - opacity: 1; -} - -pre code { - font-size: 14px; - font-family: - "JetBrains Mono", - Menlo, - Monaco, - Consolas, - Courier New, - monospace; - white-space: pre; - -webkit-overflow-scrolling: touch; -} -pre code a { - text-decoration: none; -} -pre data-err { - /* Extracted from VS Code */ - background: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%206%203'%20enable-background%3D'new%200%200%206%203'%20height%3D'3'%20width%3D'6'%3E%3Cg%20fill%3D'%23c94824'%3E%3Cpolygon%20points%3D'5.5%2C0%202.5%2C3%201.1%2C3%204.1%2C0'%2F%3E%3Cpolygon%20points%3D'4%2C0%206%2C2%206%2C0.6%205.4%2C0'%2F%3E%3Cpolygon%20points%3D'0%2C2%201%2C3%202.4%2C3%200%2C0.6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") - repeat-x bottom left; - padding-bottom: 3px; -} -pre .query { - margin-bottom: 10px; - color: #137998; - display: inline-block; -} - -/* In order to have the 'popped out' style design and to not break the layout - /* we need to place a fake and un-selectable copy of the error which _isn't_ broken out - /* behind the actual error message. - /* This sections keeps both of those two in in sync */ - -pre .error, -pre .error-behind { - margin-left: -14px; - margin-top: 8px; - margin-bottom: 4px; - padding: 6px 6px 6px 14px; - width: calc(100% - 20px); - white-space: pre-wrap; - display: block; -} -pre .error { - position: absolute; - background-color: #fee; - border-left: 2px solid #bf1818; - /* Give the space to the error code */ - display: flex; - align-items: center; - color: black; -} -pre .error .code { - display: none; -} -pre .error-behind { - user-select: none; - visibility: transparent; - color: #fee; -} -/* Queries */ -pre .arrow { - /* Transparent background */ - background-color: #eee; - position: relative; - top: -7px; - margin-left: 0.1rem; - /* Edges */ - border-left: 1px solid #eee; - border-top: 1px solid #eee; - transform: translateY(25%) rotate(45deg); - /* Size */ - height: 8px; - width: 8px; -} -pre .popover { - margin-bottom: 10px; - background-color: #eee; - display: inline-block; - padding: 0 0.5rem 0.3rem; - margin-top: 10px; - border-radius: 3px; -} -/* Completion */ -pre .inline-completions ul.dropdown { - display: inline-block; - position: absolute; - width: 240px; - background-color: gainsboro; - color: grey; - font-family: - ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", - "Courier New", monospace; - font-size: 0.8rem; - margin: 0; - padding: 0; - border-left: 4px solid #4b9edd; -} -pre .inline-completions ul.dropdown::before { - background-color: #4b9edd; - width: 2px; - position: absolute; - top: -1.2rem; - left: -3px; - content: " "; -} -pre .inline-completions ul.dropdown li { - overflow-x: hidden; - padding-left: 4px; - margin-bottom: 4px; -} -pre .inline-completions ul.dropdown li.deprecated { - text-decoration: line-through; -} -pre .inline-completions ul.dropdown li span.result-found { - color: #4b9edd; -} -pre .inline-completions ul.dropdown li span.result { - width: 100px; - color: black; - display: inline-block; -} -.dark-theme .markdown pre { - background-color: #d8d8d8; - border-color: #ddd; - filter: invert(98%) hue-rotate(180deg); -} -data-lsp { - /* Ensures there's no 1px jump when the hover happens */ - border-bottom: 1px dotted transparent; - /* Fades in unobtrusively */ - transition-timing-function: ease; - transition: border-color 0.3s; -} -/* Respect people's wishes to not have animations */ -@media (prefers-reduced-motion: reduce) { - data-lsp { - transition: none; - } -} - -/** Annotations support, providing a tool for meta commentary */ -.tag-container { - position: relative; -} -.tag-container .twoslash-annotation { - position: absolute; - font-family: - "JetBrains Mono", - Menlo, - Monaco, - Consolas, - Courier New, - monospace; - right: -10px; - /** Default annotation text to 200px */ - width: 200px; - color: #187abf; - background-color: #fcf3d9; -} -.tag-container .twoslash-annotation p { - text-align: left; - font-size: 0.8rem; - line-height: 0.9rem; -} -.tag-container .twoslash-annotation svg { - float: left; - margin-left: -44px; -} -.tag-container .twoslash-annotation.left { - right: auto; - left: -200px; -} -.tag-container .twoslash-annotation.left svg { - float: right; - margin-right: -5px; -} - -/** Support for showing console log/warn/errors inline */ -pre .logger { - display: flex; - align-items: center; - color: black; - padding: 6px 6px 6px 8px; - width: calc(100% - 19px); - white-space: pre-wrap; -} -pre .logger svg { - margin-right: 9px; -} -pre .logger.error-log { - background-color: #fee; - border-left: 2px solid #bf1818; -} -pre .logger.warn-log { - background-color: #ffe; - border-left: 2px solid #eae662; -} -pre .logger.log-log { - background-color: #e9e9e9; - border-left: 2px solid #ababab; -} -pre .logger.log-log svg { - margin-left: 6px; - margin-right: 9px; -} diff --git a/apps/docs/src/routes/[...notFound].mdx b/apps/docs/src/routes/[...404].mdx similarity index 100% rename from apps/docs/src/routes/[...notFound].mdx rename to apps/docs/src/routes/[...404].mdx diff --git a/apps/docs/src/routes/docs/changelog.tsx b/apps/docs/src/routes/docs/changelog.tsx deleted file mode 100644 index e52dfd322..000000000 --- a/apps/docs/src/routes/docs/changelog.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { RouteProps } from "@solidjs/router"; -import { Layout } from "../../components"; -import type { NavSection } from "../../model/navigation"; -import { CORE_VERSIONS } from "../../VERSIONS"; - -const CHANGELOG_NAV_SECTIONS: NavSection[] = [ - { - title: "Changelog", - links: CORE_VERSIONS.map((version) => ({ - title: `v${version}`, - href: `/docs/changelog/${version.replaceAll(".", "-")}`, - })), - }, -]; - -export default function ChangelogLayout(props: RouteProps) { - return {props.children}; -} diff --git a/apps/docs/src/routes/docs/changelog/(_)index.tsx b/apps/docs/src/routes/docs/changelog/(_)index.tsx new file mode 100644 index 000000000..3c0a20b97 --- /dev/null +++ b/apps/docs/src/routes/docs/changelog/(_)index.tsx @@ -0,0 +1,17 @@ +import { Navigate, redirect } from "@solidjs/router"; + +const target = "./0-13-x"; + +export const route = { + preload() { + return redirect(target); + }, +}; + +export function GET() { + throw redirect(target); +} + +export default function () { + return ; +} diff --git a/apps/docs/src/routes/docs/changelog/0-1-x.mdx b/apps/docs/src/routes/docs/changelog/0-1-x.mdx index c6f2fea4c..fd99741ba 100644 --- a/apps/docs/src/routes/docs/changelog/0-1-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-1-x.mdx @@ -1,4 +1,9 @@ -# v0.1.x +--- +title: Changelog v0.1.x +sidebarTitle: v0.1.x +--- + +# {frontmatter.sidebarTitle} ## v0.1.0 (January 04, 2023 - Initial release) diff --git a/apps/docs/src/routes/docs/changelog/0-10-x.mdx b/apps/docs/src/routes/docs/changelog/0-10-x.mdx index 7a84c9f9b..d988e3ba8 100644 --- a/apps/docs/src/routes/docs/changelog/0-10-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-10-x.mdx @@ -1,4 +1,9 @@ -# v0.10.x +--- +title: Changelog v0.10.x +sidebarTitle: v0.10.x +--- + +# {frontmatter.sidebarTitle} ## v0.10.0 (August 12, 2023) diff --git a/apps/docs/src/routes/docs/changelog/0-11-x.mdx b/apps/docs/src/routes/docs/changelog/0-11-x.mdx index 3e7ca2c1d..8974be496 100644 --- a/apps/docs/src/routes/docs/changelog/0-11-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-11-x.mdx @@ -1,4 +1,9 @@ -# v0.11.x +--- +title: Changelog v0.11.x +sidebarTitle: v0.11.x +--- + +# {frontmatter.sidebarTitle} ## v0.11.2 (October 21, 2023) diff --git a/apps/docs/src/routes/docs/changelog/0-12-x.mdx b/apps/docs/src/routes/docs/changelog/0-12-x.mdx index 10aad2a29..5dc790390 100644 --- a/apps/docs/src/routes/docs/changelog/0-12-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-12-x.mdx @@ -1,4 +1,9 @@ -# v0.12.x +--- +title: Changelog v0.12.x +sidebarTitle: v0.12.x +--- + +# {frontmatter.sidebarTitle} ## v0.12.6 (March 16, 2024) diff --git a/apps/docs/src/routes/docs/changelog/0-13-x.mdx b/apps/docs/src/routes/docs/changelog/0-13-x.mdx index 4f79adfde..f75bb1cb7 100644 --- a/apps/docs/src/routes/docs/changelog/0-13-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-13-x.mdx @@ -1,4 +1,9 @@ -# v0.13.x +--- +title: Changelog v0.13.x +sidebarTitle: v0.13.x +--- + +# {frontmatter.sidebarTitle} ## v0.13.12 (July 1, 2026) diff --git a/apps/docs/src/routes/docs/changelog/0-2-x.mdx b/apps/docs/src/routes/docs/changelog/0-2-x.mdx index b8c6b4994..144f85020 100644 --- a/apps/docs/src/routes/docs/changelog/0-2-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-2-x.mdx @@ -1,4 +1,9 @@ -# v0.2.x +--- +title: Changelog v0.2.x +sidebarTitle: v0.2.x +--- + +# {frontmatter.sidebarTitle} ## v0.2.0 (January 13, 2023) diff --git a/apps/docs/src/routes/docs/changelog/0-3-x.mdx b/apps/docs/src/routes/docs/changelog/0-3-x.mdx index 27adfd4e3..0c6370074 100644 --- a/apps/docs/src/routes/docs/changelog/0-3-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-3-x.mdx @@ -1,4 +1,9 @@ -# v0.3.x +--- +title: Changelog v0.3.x +sidebarTitle: v0.3.x +--- + +# {frontmatter.sidebarTitle} ## v0.3.1 (January 15, 2023) diff --git a/apps/docs/src/routes/docs/changelog/0-4-x.mdx b/apps/docs/src/routes/docs/changelog/0-4-x.mdx index 708a276c3..66461dac2 100644 --- a/apps/docs/src/routes/docs/changelog/0-4-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-4-x.mdx @@ -1,4 +1,9 @@ -# v0.4.x +--- +title: Changelog v0.4.x +sidebarTitle: v0.4.x +--- + +# {frontmatter.sidebarTitle} ## v0.4.0 (January 19, 2023) diff --git a/apps/docs/src/routes/docs/changelog/0-5-x.mdx b/apps/docs/src/routes/docs/changelog/0-5-x.mdx index 2726a8d70..d19633652 100644 --- a/apps/docs/src/routes/docs/changelog/0-5-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-5-x.mdx @@ -1,4 +1,9 @@ -# v0.5.x +--- +title: Changelog v0.5.x +sidebarTitle: v0.5.x +--- + +# {frontmatter.sidebarTitle} ## v0.5.0 (January 27, 2023) diff --git a/apps/docs/src/routes/docs/changelog/0-6-x.mdx b/apps/docs/src/routes/docs/changelog/0-6-x.mdx index 56c763ac3..430296e77 100644 --- a/apps/docs/src/routes/docs/changelog/0-6-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-6-x.mdx @@ -1,4 +1,9 @@ -# v0.6.x +--- +title: Changelog v0.6.x +sidebarTitle: v0.6.x +--- + +# {frontmatter.sidebarTitle} ## v0.6.2 (February 25, 2023) diff --git a/apps/docs/src/routes/docs/changelog/0-7-x.mdx b/apps/docs/src/routes/docs/changelog/0-7-x.mdx index 70780ef9e..4ee5e0e46 100644 --- a/apps/docs/src/routes/docs/changelog/0-7-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-7-x.mdx @@ -1,4 +1,9 @@ -# v0.7.x +--- +title: Changelog v0.7.x +sidebarTitle: v0.7.x +--- + +# {frontmatter.sidebarTitle} ## v0.7.4 (March 18, 2023) diff --git a/apps/docs/src/routes/docs/changelog/0-8-x.mdx b/apps/docs/src/routes/docs/changelog/0-8-x.mdx index 070669edc..fa8fe2942 100644 --- a/apps/docs/src/routes/docs/changelog/0-8-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-8-x.mdx @@ -1,4 +1,9 @@ -# v0.8.x +--- +title: Changelog v0.8.x +sidebarTitle: v0.8.x +--- + +# {frontmatter.sidebarTitle} ## v0.8.2 (March 30, 2023) diff --git a/apps/docs/src/routes/docs/changelog/0-9-x.mdx b/apps/docs/src/routes/docs/changelog/0-9-x.mdx index 4b12d5a25..7bcdf36d8 100644 --- a/apps/docs/src/routes/docs/changelog/0-9-x.mdx +++ b/apps/docs/src/routes/docs/changelog/0-9-x.mdx @@ -1,4 +1,9 @@ -# v0.9.x +--- +title: Changelog v0.9.x +sidebarTitle: v0.9.x +--- + +# {frontmatter.sidebarTitle} ## v0.9.8 (June 29, 2023) diff --git a/apps/docs/src/routes/docs/changelog/index.tsx b/apps/docs/src/routes/docs/changelog/index.tsx deleted file mode 100644 index a9711c698..000000000 --- a/apps/docs/src/routes/docs/changelog/index.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { Navigate } from "@solidjs/router"; -import { LATEST_CORE_CHANGELOG_URL } from "../../../VERSIONS"; - -export default function () { - return ; -} diff --git a/apps/docs/src/routes/docs/core.tsx b/apps/docs/src/routes/docs/core.tsx deleted file mode 100644 index 7c99eed22..000000000 --- a/apps/docs/src/routes/docs/core.tsx +++ /dev/null @@ -1,243 +0,0 @@ -import type { RouteProps } from "@solidjs/router"; - -import { Layout } from "../../components"; -import type { NavSection } from "../../model/navigation"; - -const CORE_NAV_SECTIONS: NavSection[] = [ - { - title: "Overview", - links: [ - { - title: "Introduction", - href: "/docs/core/overview/introduction", - }, - { - title: "Getting started", - href: "/docs/core/overview/getting-started", - }, - { - title: "Styling", - href: "/docs/core/overview/styling", - }, - { - title: "Animation", - href: "/docs/core/overview/animation", - }, - { - title: "Polymorphism", - href: "/docs/core/overview/polymorphism", - }, - { - title: "Server side rendering", - href: "/docs/core/overview/ssr", - }, - ], - }, - { - title: "Components", - links: [ - { - title: "Accordion", - href: "/docs/core/components/accordion", - }, - { - title: "Alert", - href: "/docs/core/components/alert", - }, - { - title: "Alert Dialog", - href: "/docs/core/components/alert-dialog", - }, - { - title: "Badge", - href: "/docs/core/components/badge", - }, - { - title: "Breadcrumbs", - href: "/docs/core/components/breadcrumbs", - }, - { - title: "Button", - href: "/docs/core/components/button", - }, - { - title: "Calendar", - href: "/docs/core/components/calendar", - }, - { - title: "Checkbox", - href: "/docs/core/components/checkbox", - }, - { - title: "Collapsible", - href: "/docs/core/components/collapsible", - }, - { - title: "Color Area", - href: "/docs/core/components/color-area", - }, - { - title: "Color Channel Field", - href: "/docs/core/components/color-channel-field", - }, - { - title: "Color Field", - href: "/docs/core/components/color-field", - }, - { - title: "Color Slider", - href: "/docs/core/components/color-slider", - }, - { - title: "Color Swatch", - href: "/docs/core/components/color-swatch", - }, - { - title: "Color Wheel", - href: "/docs/core/components/color-wheel", - }, - { - title: "Combobox", - href: "/docs/core/components/combobox", - }, - { - title: "Context Menu", - href: "/docs/core/components/context-menu", - }, - { - title: "Dialog", - href: "/docs/core/components/dialog", - }, - { - title: "Drawer", - href: "/docs/core/components/drawer", - }, - { - title: "Dropdown Menu", - href: "/docs/core/components/dropdown-menu", - }, - { - title: "File Field", - href: "/docs/core/components/file-field", - }, - { - title: "Hover Card", - href: "/docs/core/components/hover-card", - }, - { - title: "Image", - href: "/docs/core/components/image", - }, - { - title: "Link", - href: "/docs/core/components/link", - }, - { - title: "Menubar", - href: "/docs/core/components/menubar", - }, - { - title: "Meter", - href: "/docs/core/components/meter", - }, - { - title: "Navigation Menu", - href: "/docs/core/components/navigation-menu", - }, - { - title: "Number Field", - href: "/docs/core/components/number-field", - }, - { - title: "OTP Field", - href: "/docs/core/components/otp-field", - }, - { - title: "Pagination", - href: "/docs/core/components/pagination", - }, - { - title: "Popover", - href: "/docs/core/components/popover", - }, - { - title: "Progress", - href: "/docs/core/components/progress", - }, - { - title: "Radio Group", - href: "/docs/core/components/radio-group", - }, - { - title: "Rating", - href: "/docs/core/components/rating", - status: "new", - }, - { - title: "Search", - href: "/docs/core/components/search", - }, - { - title: "Segmented Control", - href: "/docs/core/components/segmented-control", - }, - { - title: "Select", - href: "/docs/core/components/select", - }, - { - title: "Separator", - href: "/docs/core/components/separator", - }, - { - title: "Skeleton", - href: "/docs/core/components/skeleton", - }, - { - title: "Slider", - href: "/docs/core/components/slider", - }, - { - title: "Switch", - href: "/docs/core/components/switch", - }, - { - title: "Tabs", - href: "/docs/core/components/tabs", - }, - { - title: "Text Field", - href: "/docs/core/components/text-field", - }, - { - title: "Time Field", - href: "/docs/core/components/time-field", - status: "new", - }, - { - title: "Toast", - href: "/docs/core/components/toast", - }, - { - title: "Toggle Button", - href: "/docs/core/components/toggle-button", - }, - { - title: "Toggle Group", - href: "/docs/core/components/toggle-group", - }, - { - title: "Tooltip", - href: "/docs/core/components/tooltip", - }, - { - title: "I18nProvider", - href: "/docs/core/components/i18n-provider", - }, - ], - }, -]; - -export default function CoreLayout(props: RouteProps) { - return {props.children}; -} diff --git a/apps/docs/src/routes/docs/core/overview/introduction.mdx b/apps/docs/src/routes/docs/core/(0)overview/(0)introduction.mdx similarity index 95% rename from apps/docs/src/routes/docs/core/overview/introduction.mdx rename to apps/docs/src/routes/docs/core/(0)overview/(0)introduction.mdx index a38c87e99..511c4d845 100644 --- a/apps/docs/src/routes/docs/core/overview/introduction.mdx +++ b/apps/docs/src/routes/docs/core/(0)overview/(0)introduction.mdx @@ -1,4 +1,8 @@ -# Introduction +--- +title: Introduction +--- + +# {frontmatter.title} Kobalte is a UI toolkit for building accessible web apps and design systems with SolidJS. It provides a set of low-level UI components and primitives which can be the foundation for your design system implementation. diff --git a/apps/docs/src/routes/docs/core/(0)overview/(1)getting-started.mdx b/apps/docs/src/routes/docs/core/(0)overview/(1)getting-started.mdx new file mode 100644 index 000000000..882e51506 --- /dev/null +++ b/apps/docs/src/routes/docs/core/(0)overview/(1)getting-started.mdx @@ -0,0 +1,129 @@ +--- +title: Getting Started +--- + +import { PopoverDemo } from "../../../../examples/getting-started"; + +# {frontmatter.title} + +## Installation + +Install Kobalte by running: + +```package-install +@kobalte/core +``` + +## Using the components + +The example below demonstrate how to create a Popover component with Kobalte. + +:::preview + + + +--- + +```tsx title="index.tsx" tab +import { Popover } from "@kobalte/core/popover"; +import { CrossIcon } from "some-icon-library"; +import "./style.css"; + +function App() { + + Learn more + + + +
+ About Kobalte + + + +
+ + A UI toolkit for building accessible web apps and design systems with SolidJS. + +
+
+
; +} +``` + +```css title="style.css" tab +.popover__trigger { + appearance: none; + display: inline-flex; + justify-content: center; + align-items: center; + height: 40px; + width: auto; + outline: none; + border: none; + border-radius: 6px; + padding: 0 16px; + background-color: hsl(200 98% 39%); + color: white; + font-size: 16px; + line-height: 0; + transition: 250ms background-color; +} + +.popover__trigger:hover { + background-color: hsl(201 96% 32%); +} + +.popover__trigger:focus-visible { + outline: 2px solid hsl(200 98% 39%); + outline-offset: 2px; +} + +.popover__trigger:active { + background-color: hsl(201 90% 27%); +} + +.popover__content { + z-index: 50; + max-width: min(calc(100vw - 16px), 380px); + border: 1px solid hsl(240 5% 84%); + border-radius: 6px; + padding: 12px; + background-color: white; + box-shadow: + 0 10px 15px -3px rgb(0 0 0 / 0.1), + 0 4px 6px -4px rgb(0 0 0 / 0.1); +} + +.popover__header { + display: flex; + align-items: baseline; + justify-content: space-between; + margin-bottom: 6px; +} + +.popover__close-button { + height: 16px; + width: 16px; + color: hsl(240 5% 34%); +} + +.popover__title { + font-size: 16px; + font-weight: 500; + color: hsl(240 6% 10%); +} + +.popover__description { + font-size: 14px; + color: hsl(240 5% 26%); +} +``` + +::: + +In a few lines of code, we've implemented a fully accessible Popover component that: + +- Adheres to [WAI-ARIA Dialog](https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/) design pattern. +- Can be controlled or uncontrolled. +- Optionally render a pointing arrow. +- Has focus fully managed and customizable. diff --git a/apps/docs/src/routes/docs/core/overview/styling.mdx b/apps/docs/src/routes/docs/core/(0)overview/(2)styling.mdx similarity index 52% rename from apps/docs/src/routes/docs/core/overview/styling.mdx rename to apps/docs/src/routes/docs/core/(0)overview/(2)styling.mdx index 220df0e29..10ccbc3c9 100644 --- a/apps/docs/src/routes/docs/core/overview/styling.mdx +++ b/apps/docs/src/routes/docs/core/(0)overview/(2)styling.mdx @@ -1,6 +1,8 @@ -import { Callout, TabsSnippets } from "../../../../components"; +--- +title: Styling +--- -# Styling +# {frontmatter.title} Kobalte components are unstyled, allowing you to completely customize the look and feel. Bring your preferred styling solution (vanilla CSS, Tailwind, CSS-in-JS libraries, etc...). @@ -8,48 +10,29 @@ Kobalte components are unstyled, allowing you to completely customize the look a All components and their parts accept a `class` prop. This class will be passed through to the DOM element. You can style a component part by targeting the `class` that you provide. - - - index.tsx - style.css - - - {/* */} - ```tsx - import { Popover as KPopover } from "@kobalte/core"; - import "./style.css"; - - export const Popover = () => { - return ( - - - Open - - - ... - - - ); - }; - ``` - {/* */} - - - - {/* */} - ```css - .popover__trigger { - /* The popover trigger style. */ - } - - .popover__content { - /* The popover content style. */ - } - ``` - {/* */} - - - +```tsx title="index.tsx" tab +import { Popover as KPopover } from "@kobalte/core/popover"; +import "./style.css"; + +export const Popover = () => { + return ( + + Open + ... + + ); +}; +``` + +```css title="style.css" tab +.popover__trigger { + /* The popover trigger style. */ +} + +.popover__content { + /* The popover content style. */ +} +``` ## Styling a state @@ -60,55 +43,21 @@ When a component or its parts can have multiple states, we automatically attach You can style a component state by targeting the `data-*` attributes added by Kobalte. - - - style.css - - - {/* */} - ```css - .popover__trigger[data-disabled] { - /* The popover trigger style when disabled. */ - } - ``` - {/* */} - - +```css title="style.css" +.popover__trigger[data-disabled] { + /* The popover trigger style when disabled. */ +} +``` ## Using the TailwindCSS plugin -If you are using [TailwindCSS](https://tailwindcss.com/), you can use the `@kobalte/tailwindcss` plugin to target Kobalte's `data-*` attributes with modifiers like `ui-expanded:*`. +If you are using [TailwindCSS v3](https://v3.tailwindcss.com/), you can use the `@kobalte/tailwindcss` plugin to target Kobalte's `data-*` attributes with modifiers like `ui-expanded:*`. From Tailwind v4 the plugin is no longer required as data attributes are natively supported, use them directly instead. ### Installation - - - npm - yarn - pnpm - - - {/* */} - ```bash - npm install @kobalte/tailwindcss - ``` - {/* */} - - - {/* */} - ```bash - yarn add @kobalte/tailwindcss - ``` - {/* */} - - - {/* */} - ```bash - pnpm add @kobalte/tailwindcss - ``` - {/* */} - - +```package-install +@kobalte/tailwindcss +``` ### Usage @@ -171,41 +120,15 @@ If you are using [Vanilla Extract](https://vanilla-extract.style/), you can use ### Installation - - - npm - yarn - pnpm - - - {/* */} - ```bash - npm install @kobalte/vanilla-extract - ``` - {/* */} - - - {/* */} - ```bash - yarn add @kobalte/vanilla-extract - ``` - {/* */} - - - {/* */} - ```bash - pnpm add @kobalte/vanilla-extract - ``` - {/* */} - - +```package-install +@kobalte/vanilla-extract +``` ### Usage Use the `componentStateStyles` utility function to create vanilla-extract styles that target `data-*` attributes of Kobalte components. -```ts -// styles.css +```ts title="style.css.ts" import { componentStateStyles } from "@kobalte/vanilla-extract"; import { style } from "@vanilla-extract/css"; @@ -238,9 +161,9 @@ const button = style([ Then apply your styles to the component: -```tsx +```tsx title="MyButton.tsx" import { Button } from "@kobalte/core/button"; -import { button } from "./styles.css"; +import { button } from "./styles.css.ts"; export const MyButton = () => ; ``` @@ -261,3 +184,5 @@ export const PopoverTrigger = (props: ComponentProps) = return ; }; ``` + +Follow the [Polymorphism Guide](./polymorphism) for more advanced type control and additional props. diff --git a/apps/docs/src/routes/docs/core/overview/animation.mdx b/apps/docs/src/routes/docs/core/(0)overview/(3)animation.mdx similarity index 95% rename from apps/docs/src/routes/docs/core/overview/animation.mdx rename to apps/docs/src/routes/docs/core/(0)overview/(3)animation.mdx index 7f3cf0e61..aa0a9d345 100644 --- a/apps/docs/src/routes/docs/core/overview/animation.mdx +++ b/apps/docs/src/routes/docs/core/(0)overview/(3)animation.mdx @@ -1,6 +1,8 @@ -import { Preview } from "../../../../components"; +--- +title: Animation +--- -# Animation +# {frontmatter.title} Kobalte components can be animated with CSS keyframes or your JavaScript animation library of choice. However, there are some caveats noted here in regard to exiting animations with JavaScript animation libraries. diff --git a/apps/docs/src/routes/docs/core/overview/polymorphism.mdx b/apps/docs/src/routes/docs/core/(0)overview/(4)polymorphism.mdx similarity index 93% rename from apps/docs/src/routes/docs/core/overview/polymorphism.mdx rename to apps/docs/src/routes/docs/core/(0)overview/(4)polymorphism.mdx index fb59bb853..ea6a270e8 100644 --- a/apps/docs/src/routes/docs/core/overview/polymorphism.mdx +++ b/apps/docs/src/routes/docs/core/(0)overview/(4)polymorphism.mdx @@ -1,6 +1,8 @@ -import { Callout } from "../../../../components/callout.tsx"; +--- +title: Polymorphism +--- -# Polymorphism +# {frontmatter.title} Kobalte components that render a DOM element support polymorphism via the `as` prop. This allows you to change the rendered element or component while preserving behavior, accessibility, and state management. @@ -14,7 +16,7 @@ Polymorphism is useful when you want to: Use `as` with a native element or a custom Solid component. -```tsx {8, 13} +```tsx {9, 14} import { Tabs } from "@kobalte/core/tabs"; import { MyCustomButton } from "./components"; @@ -48,12 +50,12 @@ When using an `as` callback: - Always spread the provided props - Custom props are forwarded **unchanged** -- Kobalte options are _not_ passed +- Kobalte options are **not** passed - Event handlers must be defined on the **parent** Violating these rules can break behavior or accessibility. -```tsx {17} +```tsx {12} import { Tabs } from "@kobalte/core/tabs"; import { MyCustomButton } from "./components"; @@ -84,7 +86,7 @@ In this example: You can use `PolymorphicCallbackProps` to get exact typing for callback props: -```tsx {6-9} +```tsx {7-11} import { Tabs, TabsTriggerOptions, TabsTriggerRenderProps } from "@kobalte/core/tabs"; import { PolymorphicCallbackProps } from "@kobalte/core/polymorphic"; @@ -111,9 +113,9 @@ Custom event handlers defined on a Kobalte component are called _before_ Kobalte ## Component Prop Types - - This section is intended for **library authors** building on top of Kobalte. - +:::warning +This section is intended for **library authors** building on top of Kobalte. +::: Every Kobalte component that renders an element exposes four core types: @@ -192,10 +194,10 @@ function CustomTabsTrigger( } ``` - - When using generics, TypeScript can lose some precision; splitting local props and spreading the - remaining props helps preserve usability. - +:::info +When using generics, TypeScript can lose some precision; splitting local props and spreading the +remaining props helps preserve usability. +::: Note: diff --git a/apps/docs/src/routes/docs/core/(0)overview/(5)ssr.mdx b/apps/docs/src/routes/docs/core/(0)overview/(5)ssr.mdx new file mode 100644 index 000000000..d788827ac --- /dev/null +++ b/apps/docs/src/routes/docs/core/(0)overview/(5)ssr.mdx @@ -0,0 +1,15 @@ +--- +title: SSR +--- + +# Server Side Rendering + +Kobalte should work with any SSR for SolidJS, please make sure the environment is correctly setup. + +## Usage with SolidStart + +Kobalte works out of the box with [SolidStart](https://start.solidjs.com/). + +:::info +Kobalte has been tested with `solid-js@1.9.9`, `@solidjs/start@0.6.1`, and `@solidjs/start@2.0.0-alpha.3`. +::: diff --git a/apps/docs/src/routes/docs/core/(0)overview/(_)index.tsx b/apps/docs/src/routes/docs/core/(0)overview/(_)index.tsx new file mode 100644 index 000000000..9c202c7db --- /dev/null +++ b/apps/docs/src/routes/docs/core/(0)overview/(_)index.tsx @@ -0,0 +1,17 @@ +import { Navigate, redirect } from "@solidjs/router"; + +const target = "./introduction"; + +export const route = { + preload() { + return redirect(target); + }, +}; + +export function GET() { + throw redirect(target); +} + +export default function () { + return ; +} diff --git a/apps/docs/src/routes/docs/core/components/accordion.mdx b/apps/docs/src/routes/docs/core/(1)components/accordion.mdx similarity index 59% rename from apps/docs/src/routes/docs/core/components/accordion.mdx rename to apps/docs/src/routes/docs/core/(1)components/accordion.mdx index 43c0fcb18..7c4ae4383 100644 --- a/apps/docs/src/routes/docs/core/components/accordion.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/accordion.mdx @@ -1,4 +1,17 @@ -import { Preview, TabsSnippets, Kbd, Callout } from "../../../../components"; +--- +title: Accordion +badges: + - icon: npm + label: "Since v0.5.0" + - label: "@kobalte/core/accordion" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/accordion" + - icon: aria + label: "Accordion" + url: "https://www.w3.org/WAI/ARIA/apg/patterns/accordion/" +--- + import { BasicExample, DefaultValueExample, @@ -7,7 +20,7 @@ import { AllowMultipleExample, } from "../../../../examples/accordion"; -# Accordion +# {frontmatter.title} A vertically stacked set of interactive headings that each reveal an associated section of content. @@ -51,165 +64,21 @@ The accordion consists of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { Accordion } from "@kobalte/core/accordion"; - import { ChevronDownIcon } from "some-icon-library"; - import "./style.css"; - - function App() { - return ( - - - - - Is it accessible? - - - - -

- Yes. It adheres to the WAI-ARIA design pattern. -

-
-
- - - - - Is it unstyled? - - - - -

- Yes. It's unstyled by default, giving you freedom over the look and feel. -

-
-
- - - - - Can it be animated? - - - - -

- Yes! You can animate the Accordion with CSS or JavaScript. -

-
-
-
- ); - } - ``` - -
- - ```css - .accordion { - border-radius: 6px; - width: 300px; - border: 1px solid hsl(240 5% 84%); - color: hsl(240 4% 16%); - } - - .accordion__item:first-child { - margin-top: 0; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - } - - .accordion__item:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - } - - .accordion__item-header { - display: flex; - } - - .accordion__item-trigger { - display: inline-flex; - align-items: center; - justify-content: space-between; - width: 100%; - padding: 14px; - border-bottom: 1px solid hsl(240 5% 84%); - font-weight: 600; - text-align: left; - outline: none; - } - - .accordion__item:last-child .accordion__item-trigger { - border-bottom: none; - } - - .accordion__item-trigger:focus-visible { - z-index: 1; - outline: 2px solid hsl(200 98% 39%); - outline-offset: 2px; +:::preview -} + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/accordion.tsx#L6-L64" + +``` - .accordion__item-trigger-icon { - width: 24px; - height: 24px; - transition: transform 300ms cubic-bezier(0.87, 0, 0.13, 1); - } - - .accordion__item-trigger[data-expanded] > .accordion__item-trigger-icon { - transform: rotate(180deg); - } - - .accordion__item-content { - overflow: hidden; - font-size: 16px; - animation: slideUp 300ms cubic-bezier(0.87, 0, 0.13, 1); - } - - .accordion__item-content[data-expanded] { - animation: slideDown 300ms cubic-bezier(0.87, 0, 0.13, 1); - } - - .accordion__item-content-text { - padding: 16px; - } - - @keyframes slideDown { - from { - height: 0; - } - to { - height: var(--kb-accordion-content-height); - } - } - - @keyframes slideUp { - from { - height: var(--kb-accordion-content-height); - } - to { - height: 0; - } - } - ``` - - - {/* */} -
+```css title="style.css" tab file="../../../../examples/accordion.module.css" + +``` + +::: ## Usage @@ -217,11 +86,13 @@ The accordion consists of: A default expanded item can be provided using the `defaultValue` prop, which should correspond to the `value` prop provided to each accordion item. - - - +:::preview + + + +--- -```tsx {0,2} +```tsx {1,3} {/* ... */} {/* ... */} @@ -229,19 +100,23 @@ A default expanded item can be provided using the `defaultValue` prop, which sho ``` - - The `value` and `defaultValue` props always take a `string[]`. - +::: + +:::info[] +The `value` and `defaultValue` props always take a `string[]`. +::: ### Controlled value Expanded item can be controlled using the `value` prop, paired with the `onChange` event. The `value` prop from the accordion item will be passed into the callback when the item is expanded, allowing you to update state accordingly. - - - +:::preview + + + +--- -```tsx {3,7} +```tsx {4,8} import { createSignal } from "solid-js"; function ControlledExample() { @@ -260,15 +135,19 @@ function ControlledExample() { } ``` +::: + ### Collapsible item By default, accordion items are not collapsible, meaning you can't toggle them from open to close and vice-versa. Use the `collapsible` prop to enable this behavior. - - - +:::preview + + -```tsx {0} +--- + +```tsx {1} {/* ... */} {/* ... */} @@ -276,15 +155,19 @@ By default, accordion items are not collapsible, meaning you can't toggle them f ``` +::: + ### Allow expanding multiple items Use the `multiple` to allow expanding multiple accordion items at the same time. This also make all accordion items collapsible. - - - +:::preview + + -```tsx {0} +--- + +```tsx {1} {/* ... */} {/* ... */} @@ -292,12 +175,13 @@ Use the `multiple` to allow expanding multiple accordion items at the same time. ``` +::: + ### Animating content size We expose the CSS custom properties `--kb-accordion-content-width` and `--kb-accordion-content-height` which you can use to animate the size of the content when it opens/closes. -```css {16,22} -/* style.css */ +```css {16,22} title="style.css" .accordion__item-content { overflow: hidden; font-size: 16px; @@ -384,11 +268,11 @@ We expose the CSS custom properties `--kb-accordion-content-width` and `--kb-acc | Key | Description | | :-------------------------------- | :------------------------------------------------------------------------------------- | -| Space | When focus is on an `Accordion.Trigger` of a collapsed section, expands the section. | -| Enter | When focus is on an `Accordion.Trigger` of a collapsed section, expands the section. | -| Tab | Moves focus to the next focusable element. | -| Shift + Tab | Moves focus to the previous focusable element. | -| ArrowDown | Moves focus to the next `Accordion.Trigger`. | -| ArrowUp | Moves focus to the previous `Accordion.Trigger`. | -| Home | When focus is on an `Accordion.Trigger`, moves focus to the first `Accordion.Trigger`. | -| End | When focus is on an `Accordion.Trigger`, moves focus to the last `Accordion.Trigger`. | +| Space | When focus is on an `Accordion.Trigger` of a collapsed section, expands the section. | +| Enter | When focus is on an `Accordion.Trigger` of a collapsed section, expands the section. | +| Tab | Moves focus to the next focusable element. | +| Shift + Tab | Moves focus to the previous focusable element. | +| ArrowDown | Moves focus to the next `Accordion.Trigger`. | +| ArrowUp | Moves focus to the previous `Accordion.Trigger`. | +| Home | When focus is on an `Accordion.Trigger`, moves focus to the first `Accordion.Trigger`. | +| End | When focus is on an `Accordion.Trigger`, moves focus to the last `Accordion.Trigger`. | diff --git a/apps/docs/src/routes/docs/core/components/alert-dialog.mdx b/apps/docs/src/routes/docs/core/(1)components/alert-dialog.mdx similarity index 65% rename from apps/docs/src/routes/docs/core/components/alert-dialog.mdx rename to apps/docs/src/routes/docs/core/(1)components/alert-dialog.mdx index a9b3b1968..e6c11985d 100644 --- a/apps/docs/src/routes/docs/core/components/alert-dialog.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/alert-dialog.mdx @@ -1,7 +1,20 @@ -import { Preview, Kbd, TabsSnippets } from "../../../../components"; +--- +title: Alert Dialog +badges: + - icon: npm + label: "Since v0.8.0" + - label: "@kobalte/core/alert-dialog" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/alert-dialog" + - icon: aria + label: "Alert dialog" + url: "https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/" +--- + import { BasicExample } from "../../../../examples/alert-dialog"; -# Alert Dialog +# {frontmatter.title} A modal dialog that interrupts the user's workflow to communicate an important message and acquire a response. Examples include action confirmation prompts and error message confirmations. The alertdialog role enables assistive technologies and browsers to distinguish alert dialogs from other dialogs so they have the option of giving alert dialogs special treatment, such as playing a system alert sound. @@ -21,7 +34,7 @@ import { AlertDialog } from "@kobalte/core"; - Supports modal and non-modal modes. - Provides screen reader announcements via rendered title and description. - Focus is trapped and scrolling is blocked while it is open. -- Pressing Esc closes the alert dialog. +- Pressing Esc closes the alert dialog. - Can be controlled or uncontrolled. ## Anatomy @@ -53,184 +66,21 @@ The alert dialog consists of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { AlertDialog } from "@kobalte/core/alert-dialog"; - import { CrossIcon } from "some-icon-library"; - import "./style.css"; - - function App() { - return ( - - Open - - -
- -
- Alert Dialog - - - -
- - An Alert Dialog enables assistive technologies and browsers to distinguish alert dialogs from other dialogs so they have the option of giving alert dialogs special treatment, such as playing a system alert sound. - -
-
-
-
- ); - } - ``` - -
- - ```css - .alert-dialog__trigger { - appearance: none; - display: inline-flex; - justify-content: center; - align-items: center; - height: 40px; - width: auto; - outline: none; - border-radius: 6px; - padding: 0 16px; - background-color: hsl(200 98% 39%); - color: white; - font-size: 16px; - line-height: 0; - transition: 250ms background-color; - } - - .alert-dialog__trigger:hover { - background-color: hsl(201 96% 32%); - } - - .alert-dialog__trigger:focus-visible { - outline: 2px solid hsl(200 98% 39%); - outline-offset: 2px; - } - - .alert-dialog__trigger:active { - background-color: hsl(201 90% 27%); - } - - .alert-dialog__overlay { - position: fixed; - inset: 0; - z-index: 50; - background-color: rgb(0 0 0 / 0.2); - animation: overlayHide 250ms ease 100ms forwards; - } - - .alert-dialog__overlay[data-expanded] { - animation: overlayShow 250ms ease; - } - - .alert-dialog__positioner { - position: fixed; - inset: 0; - z-index: 50; - display: flex; - align-items: center; - justify-content: center; - } - - .alert-dialog__content { - z-index: 50; - max-width: min(calc(100vw - 16px), 500px); - border: 1px solid hsl(240 5% 84%); - border-radius: 6px; - padding: 16px; - background-color: white; - box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - animation: contentHide 300ms ease-in forwards; - } - - .alert-dialog__content[data-expanded] { - animation: contentShow 300ms ease-out; - } - - .alert-dialog__header { - display: flex; - align-items: baseline; - justify-content: space-between; - margin-bottom: 12px; - } - - .alert-dialog__close-button { - height: 16px; - width: 16px; - color: hsl(240 5% 34%); - } - - .alert-dialog__title { - font-size: 20px; - font-weight: 500; - color: hsl(240 6% 10%); - } - - .alert-dialog__description { - font-size: 16px; - color: hsl(240 5% 26%); - } - - @keyframes overlayShow { - from { - opacity: 0; - } - to { - opacity: 1; - } - } - - @keyframes overlayHide { - from { - opacity: 1; - } - to { - opacity: 0; - } - } - - @keyframes contentShow { - from { - opacity: 0; - transform: scale(0.96); - } - to { - opacity: 1; - transform: scale(1); - } - } - - @keyframes contentHide { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.96); - } - } - ``` - - - {/* */} -
+:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/alert-dialog.tsx#L4-L37" + +``` + +```css title="style.css" tab file="../../../../examples/alert-dialog.module.css" + +``` + +::: ## Usage @@ -246,7 +96,7 @@ An initial, uncontrolled open value can be provided using the `defaultOpen` prop The `open` prop can be used to make the open state controlled. The `onOpenChange` event is fired when the user presses the trigger, close button or overlay, and receives the new value. -```tsx {3,6} +```tsx {4,7} import { createSignal } from "solid-js"; function ControlledExample() { @@ -317,8 +167,8 @@ function ControlledExample() { | Key | Description | | :-------------------------------- | :----------------------------------------------------- | -| Space | When focus is on the trigger, opens/closes the dialog. | -| Enter | When focus is on the trigger, opens/closes the dialog. | -| Tab | Moves focus to the next focusable element. | -| Shift + Tab | Moves focus to the previous focusable element. | -| Esc | Closes the dialog and moves focus to the trigger. | +| Space | When focus is on the trigger, opens/closes the dialog. | +| Enter | When focus is on the trigger, opens/closes the dialog. | +| Tab | Moves focus to the next focusable element. | +| Shift + Tab | Moves focus to the previous focusable element. | +| Esc | Closes the dialog and moves focus to the trigger. | diff --git a/apps/docs/src/routes/docs/core/(1)components/alert.mdx b/apps/docs/src/routes/docs/core/(1)components/alert.mdx new file mode 100644 index 000000000..f23b3a616 --- /dev/null +++ b/apps/docs/src/routes/docs/core/(1)components/alert.mdx @@ -0,0 +1,75 @@ +--- +title: Alert +badges: + - icon: npm + label: "Since v0.1.0" + - label: "@kobalte/core/alert" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/alert" + - icon: aria + label: "Alert" + url: "https://www.w3.org/WAI/ARIA/apg/patterns/alert/" +--- + +import { BasicExample } from "../../../../examples/alert"; + +# {frontmatter.title} + +Display a brief, important message in a way that attracts the user's attention without interrupting the user's task. + +## Import + +```ts +import { Alert } from "@kobalte/core/alert"; +// or +import { Root } from "@kobalte/core/alert"; +// or (deprecated) +import { Alert } from "@kobalte/core"; +``` + +## Features + +- Adhere to the [WAI ARIA Alert](https://www.w3.org/WAI/ARIA/apg/patterns/alert/) design pattern. + +## Anatomy + +The alert consists of : + +- **Alert:** The root container for an alert. + +```tsx + +``` + +## Example + +:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/alert.tsx#L3-L9" + +``` + +```css title="style.css" tab file="../../../../examples/alert.module.css" + +``` + +::: + +## API reference + +### Alert + +`Alert` is equivalent to the `Root` import from `@kobalte/core/alert` (and deprecated `Alert.Root`). + +Renders a `div` by default and support all its props. + +## Rendered elements + +| Component | Default rendered element | +| :-------- | :----------------------- | +| `Alert` | `div` | diff --git a/apps/docs/src/routes/docs/core/components/badge.mdx b/apps/docs/src/routes/docs/core/(1)components/badge.mdx similarity index 53% rename from apps/docs/src/routes/docs/core/components/badge.mdx rename to apps/docs/src/routes/docs/core/(1)components/badge.mdx index 652aed4ac..47432aa47 100644 --- a/apps/docs/src/routes/docs/core/components/badge.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/badge.mdx @@ -1,7 +1,17 @@ -import { Preview, TabsSnippets, Callout } from "../../../../components"; +--- +title: Badge +badges: + - icon: npm + label: "Since v0.13.8" + - label: "@kobalte/core/badge" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/badge" +--- + import { BasicExample } from "../../../../examples/badge"; -# Badge +# {frontmatter.title} A `Badge` component is used to display small pieces of information or status indicators. @@ -30,45 +40,21 @@ The badge consists of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { Badge } from "@kobalte/core/badge"; - import "./style.css"; - - function App() { - return ( - - 5 messages - - ); - } - ``` - - - - ```css - .badge { - display: inline-block; - padding: 0.2em 0.4em; - background-color: hsl(201 96% 32%); - color: white; border-radius: 12px; - font-size: 0.875rem; - } - ``` - - - {/* */} - +:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/badge.tsx#L3-L11" + +``` + +```css title="style.css" tab file="../../../../examples/badge.module.css" + +``` + +::: ## API Reference diff --git a/apps/docs/src/routes/docs/core/components/breadcrumbs.mdx b/apps/docs/src/routes/docs/core/(1)components/breadcrumbs.mdx similarity index 62% rename from apps/docs/src/routes/docs/core/components/breadcrumbs.mdx rename to apps/docs/src/routes/docs/core/(1)components/breadcrumbs.mdx index a84a3a481..c34016f41 100644 --- a/apps/docs/src/routes/docs/core/components/breadcrumbs.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/breadcrumbs.mdx @@ -1,7 +1,20 @@ -import { Preview, TabsSnippets, Callout } from "../../../../components"; +--- +title: Breadcrumbs +badges: + - icon: npm + label: "Since v0.5.0" + - label: "@kobalte/core/breadcrumbs" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/breadcrumbs" + - icon: aria + label: "Breadcrumb" + url: "https://www.w3.org/WAI/ARIA/apg/patterns/breadcrumb/" +--- + import { BasicExample, CustomSeparatorExample } from "../../../../examples/breadcrumbs"; -# Breadcrumbs +# {frontmatter.title} Show hierarchy and navigational context for a user’s location within an application. @@ -44,88 +57,21 @@ The breadcrumbs consist of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { Breadcrumbs } from "@kobalte/core/breadcrumbs"; - import "./style.css"; - - function App() { - return ( - - - - ); - } - ``` - - - - ```css - .breadcrumbs__list { - display: inline-flex; - align-items: center; - } - - .breadcrumbs__item { - display: inline-flex; - align-items: center; - } - - .breadcrumbs__link { - font-weight: 500; - color: hsl(240 4% 16%); - } - - .breadcrumbs__link[data-disabled] { - color: hsl(240 4% 46%); - } - - .breadcrumbs__link:hover { - color: hsl(201 96% 32%); - } - - .breadcrumbs__link[data-current] { - font-weight: 400; - } - - .breadcrumbs__separator { - display: inline-block; - margin: 0 4px; - color: hsl(240 5% 65%); - } - ``` - - - {/* */} - +:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/breadcrumbs.tsx#L4-L30" + +``` + +```css title="style.css" tab file="../../../../examples/breadcrumbs.module.css" + +``` + +::: ## Usage @@ -133,11 +79,13 @@ The breadcrumbs consist of: Use the `separator` prop to provide a default content for all `Breadcrumbs.Separator`. You can pass it a `string` or a SolidJS component. - - - +:::preview + + + +--- -```tsx {0,4} +```tsx {1,5} import { ChevronRightIcon } from "some-icon-library"; function App() { @@ -167,11 +115,10 @@ function App() { } ``` - - - You can also override each `Breadcrumbs.Separator` content by providing your own `children`. - - +::: +:::tip +You can also override each `Breadcrumbs.Separator` content by providing your own `children`. +::: ## API Reference diff --git a/apps/docs/src/routes/docs/core/(1)components/button.mdx b/apps/docs/src/routes/docs/core/(1)components/button.mdx new file mode 100644 index 000000000..9f6deda6c --- /dev/null +++ b/apps/docs/src/routes/docs/core/(1)components/button.mdx @@ -0,0 +1,92 @@ +--- +title: Button +badges: + - icon: npm + label: "Since v0.1.0" + - label: "@kobalte/core/button" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/button" + - icon: aria + label: "Button" + url: "https://www.w3.org/WAI/ARIA/apg/patterns/button/" +--- + +import { BasicExample } from "../../../../examples/button"; + +# {frontmatter.title} + +Enables users to trigger an action or event, such as submitting a form, opening a dialog, canceling an action, or performing a delete operation. + +## Import + +```ts +import { Button } from "@kobalte/core/button"; +// or +import { Root } from "@kobalte/core/button"; +// or (deprecated) +import { Button } from "@kobalte/core"; +``` + +## Features + +- Native HTML `
+ + + ); +} + +function App() { + return ( + + Open + + + + + + + + ); +} +``` + +### Non-modal + +Set `modal={false}` to keep the background interactive and remove the overlay. Focus is not trapped. + +```tsx + + Open + + {/* No Drawer.Overlay */} + ... + + +``` + +### Drag handle + +Add a visible drag handle to hint that the drawer is draggable. Any element inside `Drawer.Content` is draggable by default — use `data-no-drag` to opt specific elements out. + +```tsx + +
+ ... + {/* This element will not initiate a drag */} +
Non-draggable region
+ +``` + +### Animating the overlay + +`Drawer.Overlay` automatically drives its `opacity` from the drawer's `openPercentage` (0 when fully closed, 1 when fully open). This means opacity tracks the drag position in real time with no extra JavaScript. + +To animate the opacity on open/close, add a CSS transition: + +```css +.drawer__overlay { + position: fixed; + inset: 0; + background-color: rgb(0 0 0 / 0.4); + /* opacity changes will be animated */ + transition: opacity 350ms cubic-bezier(0.32, 0.72, 0, 1); +} +``` + +The transition is automatically suppressed during drag so the opacity follows the finger instantly. + +### Custom damping and velocity + +Control the rubber-band feel when dragging past the most-open snap point, and the velocity threshold for snap selection on release. + +```tsx + 6 * Math.log(distance + 1)} + // Custom velocity: use raw distance/time ratio with no clamping + velocityFunction={(distance, time) => distance / time} + // Reset velocity window every 100ms (default: 200) + velocityCacheReset={100} + // Prevent fast flings from skipping intermediate snap points + allowSkippingSnapPoints={false} +> + ... + +``` + +## API Reference + +### Drawer + +`Drawer` is equivalent to the `Root` import from `@kobalte/core/drawer`. + +| Prop | Description | +| :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| open | `boolean`
The controlled open state of the drawer. | +| defaultOpen | `boolean`
The default open state when initially rendered. Useful when you do not need to control the open state. | +| onOpenChange | `(open: boolean) => void`
Event handler called when the open state changes. | +| side | `"bottom" \| "top" \| "left" \| "right"`
Which edge of the viewport the drawer slides in from. **Default:** `"bottom"` | +| snapPoints | `DrawerSize[]`
Positions the drawer can settle at. Each value is a fraction (`0`–`1`) or a pixel string (`"200px"`). `0` = fully closed, `1` = fully open. **Default:** `[0, 1]` | +| breakPoints | `(DrawerSize \| null)[]`
Custom thresholds between adjacent snap points. Length must equal `snapPoints.length - 1`. Pass `null` to use the default midpoint. | +| defaultSnapPoint | `DrawerSize`
The snap point the drawer opens to. **Default:** `1` | +| activeSnapPoint | `DrawerSize`
The controlled active snap point. | +| onActiveSnapPointChange | `(snapPoint: DrawerSize) => void`
Event handler called when the active snap point changes. | +| dampFunction | `(distance: number) => number`
Controls rubber-band resistance when dragging past the most-open snap point. **Default:** `(d) => 6 * Math.log(d + 1)` | +| velocityFunction | `(distance: number, time: number) => number`
Computes the velocity multiplier used to project the release position for snap selection. **Default:** `d / t`, clamped to `1` when `\|v\| < 1` | +| velocityCacheReset | `number`
Milliseconds after which the cached drag distance resets for velocity calculation. **Default:** `200` | +| allowSkippingSnapPoints | `boolean`
Whether a high-velocity release can skip intermediate snap points. **Default:** `true` | +| handleScrollableElements | `boolean`
Whether the drag gesture yields to scrollable children. **Default:** `true` | +| id | `string`
A unique identifier for the component. If not provided, a generated id is used. | +| modal | `boolean`
When `true`: interaction with outside elements is disabled, scroll is locked, and focus is trapped inside the content. **Default:** `true` | +| preventScroll | `boolean`
Whether scroll should be locked even when `modal` is `false`. | +| translations | [`DrawerIntlTranslations`](https://github.com/kobaltedev/kobalte/blob/main/packages/core/src/dialog/dialog.intl.ts)
Localization strings. | + +### Drawer.Content + +| Prop | Description | +| :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| onOpenAutoFocus | `(event: Event) => void`
Event handler called when focus moves into the content after opening. Can be prevented by calling `event.preventDefault`. | +| onCloseAutoFocus | `(event: Event) => void`
Event handler called when focus returns to the trigger after closing. Can be prevented by calling `event.preventDefault`. | +| onEscapeKeyDown | `(event: KeyboardEvent) => void`
Event handler called when the escape key is pressed. Can be prevented by calling `event.preventDefault`. | +| onPointerDownOutside | `(event: PointerDownOutsideEvent) => void`
Event handler called when a pointer event occurs outside the content. Can be prevented by calling `event.preventDefault`. | +| onFocusOutside | `(event: FocusOutsideEvent) => void`
Event handler called when focus moves outside the content. Can be prevented by calling `event.preventDefault`. | +| onInteractOutside | `(event: InteractOutsideEvent) => void`
Event handler called when an interaction occurs outside the content. Can be prevented by calling `event.preventDefault`. | + +| Data attribute | Description | +| :----------------- | :----------------------------------------------------------------------------- | +| data-side | The side the drawer appears from: `"bottom"`, `"top"`, `"left"`, or `"right"`. | +| data-expanded | Present when the drawer is open. | +| data-closed | Present when the drawer is closed. | +| data-opening | Present during the open transition. | +| data-closing | Present during the close transition. | +| data-snapping | Present while snapping to a snap point after a drag gesture. | +| data-transitioning | Present during any transition (opening, closing, or snapping). | + +### Drawer.Overlay + +| Data attribute | Description | +| :----------------- | :----------------------------------- | +| data-expanded | Present when the drawer is open. | +| data-closing | Present during the close transition. | +| data-transitioning | Present during any transition. | + +### Drawer.Trigger + +`Drawer.Trigger` consists of [Button](/docs/core/components/button). + +| Data attribute | Description | +| :------------- | :--------------------------------- | +| data-expanded | Present when the drawer is open. | +| data-closed | Present when the drawer is closed. | + +### Drawer.useContext + +Access the drawer's reactive state from any component inside `Drawer`. Useful for reading position, building custom controls, or snapping programmatically. + +```tsx +const ctx = Drawer.useContext(); + +ctx.side(); // DrawerSide — "bottom" | "top" | "left" | "right" +ctx.activeSnapPoint(); // DrawerSize — the current snap point value +ctx.setActiveSnapPoint(); // (snapPoint: DrawerSize) => void +ctx.openPercentage(); // number — 0 (closed) to 1 (open), tracks drag in real time +ctx.translate(); // number — pixel offset from the fully-open position +ctx.isDragging(); // boolean +ctx.isTransitioning(); // boolean +ctx.transitionState(); // null | "opening" | "closing" | "snapping" +``` + +## Rendered elements + +| Component | Default rendered element | +| :------------------- | :----------------------- | +| `Drawer` | none | +| `Drawer.Trigger` | `button` | +| `Drawer.Portal` | `Portal` | +| `Drawer.Overlay` | `div` | +| `Drawer.Content` | `div` | +| `Drawer.CloseButton` | `button` | +| `Drawer.Title` | `h2` | +| `Drawer.Description` | `p` | + +## Accessibility + +### Keyboard Interactions + +| Key | Description | +| :-------------------------------- | :--------------------------------------------------------------- | +| Space | When focus is on the trigger, opens/closes the drawer. | +| Enter | When focus is on the trigger, opens/closes the drawer. | +| Tab | Moves focus to the next focusable element inside the drawer. | +| Shift + Tab | Moves focus to the previous focusable element inside the drawer. | +| Esc | Closes the drawer and returns focus to the trigger. | + +> Snap-point architecture and drag math are adapted from [corvu/drawer](https://github.com/corvudev/corvu/tree/main/packages/drawer) by Jasmin Noetzli (MIT). diff --git a/apps/docs/src/routes/docs/core/components/dropdown-menu.mdx b/apps/docs/src/routes/docs/core/(1)components/dropdown-menu.mdx similarity index 79% rename from apps/docs/src/routes/docs/core/components/dropdown-menu.mdx rename to apps/docs/src/routes/docs/core/(1)components/dropdown-menu.mdx index 2384281ac..424f8a34c 100644 --- a/apps/docs/src/routes/docs/core/components/dropdown-menu.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/dropdown-menu.mdx @@ -1,7 +1,20 @@ -import { Preview, Kbd, TabsSnippets } from "../../../../components"; +--- +title: Dropdown Menu +badges: + - icon: npm + label: "Since v0.1.0" + - label: "@kobalte/core/dropdown-menu" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/dropdown-menu" + - icon: aria + label: "Menu button" + url: "https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/" +--- + import { BasicExample, ControlledExample } from "../../../../examples/dropdown-menu"; -# Dropdown Menu +# {frontmatter.title} Displays a menu to the user —such as a set of actions or functions— triggered by a button. @@ -17,7 +30,7 @@ import { DropdownMenu } from "@kobalte/core"; ## Features -- Exposed to assistive technology as a button with a menu using the [WAI ARIA Menu Button](https://www.w3.org/WAI/ARIA/apg/patterns/menubutton/) design pattern. +- Exposed to assistive technology as a button with a menu using the [WAI-ARIA Menu Button](https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/) design pattern. - Supports modal and non-modal modes. - Supports submenus. - Supports items, labels, groups of items. @@ -106,294 +119,21 @@ The checkable menu item consists of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { DropdownMenu } from "@kobalte/core/dropdown-menu"; - import { createSignal } from "solid-js"; - import { CheckIcon, ChevronDownIcon, ChevronRightIcon, DotFilledIcon } from "some-icon-library"; - import "./style.css"; - - function App() { - const [showGitLog, setShowGitLog] = createSignal(true); - const [showHistory, setShowHistory] = createSignal(false); - const [branch, setBranch] = createSignal("main"); - - return ( - - - Git Settings - - - - - - - - Commit - - - Push - - - Update Project - - - - GitHub - - - - - - Create Pull Request… - - - View Pull Requests - - - Sync Fork - - - - Open on GitHub - - - - - - - - - - - - Show Git Log - - - - - - Show History - - - - - - - Branches - - - - - - - main - - - - - - develop - - - - - - - - - ); - } - ``` - - - - ```css - .dropdown-menu__trigger { - appearance: none; - display: inline-flex; - justify-content: center; - align-items: center; - height: 40px; - width: auto; - outline: none; - border-radius: 6px; - padding: 0 16px; - background-color: hsl(200 98% 39%); - color: white; - font-size: 16px; - gap: 8px; - line-height: 0; - transition: 250ms background-color; - } - - .dropdown-menu__trigger:hover { - background-color: hsl(201 96% 32%); - } - - .dropdown-menu__trigger:focus-visible { - outline: 2px solid hsl(200 98% 39%); - outline-offset: 2px; - } - - .dropdown-menu__trigger:active { - background-color: hsl(201 90% 27%); - } - - .dropdown-menu__trigger-icon { - height: 20px; - width: 20px; - flex: 0 0 20px; - transition: transform 250ms; - } - - .dropdown-menu__trigger-icon[data-expanded] { - transform: rotate(180deg); - } - - .dropdown-menu__content, - .dropdown-menu__sub-content { - min-width: 220px; - padding: 8px; - background-color: white; - border-radius: 6px; - border: 1px solid hsl(240 6% 90%); - box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - outline: none; - transform-origin: var(--kb-menu-content-transform-origin); - animation: contentHide 250ms ease-in forwards; - } - - .dropdown-menu__content[data-expanded], - .dropdown-menu__sub-content[data-expanded] { - animation: contentShow 250ms ease-out; - } - - .dropdown-menu__item, - .dropdown-menu__checkbox-item, - .dropdown-menu__radio-item, - .dropdown-menu__sub-trigger { - font-size: 16px; - line-height: 1; - color: hsl(240 4% 16%); - border-radius: 4px; - display: flex; - align-items: center; - height: 32px; - padding: 0 8px 0 24px; - position: relative; - user-select: none; - outline: none; - } - - .dropdown-menu__sub-trigger[data-expanded] { - background-color: hsl(204 94% 94%); - color: hsl(201 96% 32%); - } - - .dropdown-menu__item[data-disabled], - .dropdown-menu__checkbox-item[data-disabled], - .dropdown-menu__radio-item[data-disabled], - .dropdown-menu__sub-trigger[data-disabled] { - color: hsl(240 5% 65%); - opacity: 0.5; - pointer-events: none; - } - - .dropdown-menu__item[data-highlighted], - .dropdown-menu__checkbox-item[data-highlighted], - .dropdown-menu__radio-item[data-highlighted], - .dropdown-menu__sub-trigger[data-highlighted] { - outline: none; - background-color: hsl(200 98% 39%); - color: white; - } - - .dropdown-menu__group-label { - padding: 0 24px; - font-size: 14px; - line-height: 32px; - color: hsl(240 4% 46%); - } - - .dropdown-menu__separator { - height: 1px; - border-top: 1px solid hsl(240 6% 90%); - margin: 6px; - } - - .dropdown-menu__item-indicator { - position: absolute; - left: 0; - height: 20px; - width: 20px; - display: inline-flex; - align-items: center; - justify-content: center; - } - - .dropdown-menu__item-right-slot { - margin-left: auto; - padding-left: 20px; - font-size: 14px; - color: hsl(240 4% 46%); - } - - [data-highlighted] > .dropdown-menu__item-right-slot { - color: white; - } - - [data-disabled] .dropdown-menu__item-right-slot { - color: hsl(240 5% 65%); - opacity: 0.5; - } - - @keyframes contentShow { - from { - opacity: 0; - transform: scale(0.96); - } - to { - opacity: 1; - transform: scale(1); - } - } - - @keyframes contentHide { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.96); - } - } - ``` - - - {/* */} - +:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/dropdown-menu.tsx#L11-L138" + +``` + +```css title="style.css" tab file="../../../../examples/dropdown-menu.module.css" + +``` + +::: ## Usage @@ -409,11 +149,13 @@ An initial, uncontrolled open value can be provided using the `defaultOpen` prop The `open` prop can be used to make the open state controlled. The `onOpenChange` event is fired when the user presses the trigger, an item or interact outside, and receives the new value. - - - +:::preview -```tsx {3,6} + + +--- + +```tsx {4,7} import { createSignal } from "solid-js"; function ControlledExample() { @@ -430,6 +172,8 @@ function ControlledExample() { } ``` +::: + ### Origin-aware animations We expose a CSS custom property `--kb-menu-content-transform-origin` which can be used to animate the content from its computed origin. @@ -675,11 +419,11 @@ The popper positioner will copy the same `z-index` as the `DropdownMenu.Content` | Key | Description | | :------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | -| Space | When focus is on the trigger, opens the menu and focuses the first item.
When focus is on an item, activates the item. | -| Enter | When focus is on the trigger, opens the menu and focuses the first item.
When focus is on an item, activates the item. | -| ArrowDown | When focus is on the trigger, opens the menu and focuses the first item.
When focus is on an item, moves focus to the next item. | -| ArrowUp | When focus is on the trigger, opens the menu and focuses the last item.
When focus is on an item, moves focus to the previous item. | -| ArrowRight / ArrowLeft | When focus is on a sub menu trigger, opens or closes the submenu depending on reading direction. | -| Home | When focus is on an item, moves focus to first item. | -| End | When focus is on an item, moves focus to last item. | -| Esc | Closes the menu and moves focus to the trigger. | +| Space | When focus is on the trigger, opens the menu and focuses the first item.
When focus is on an item, activates the item. | +| Enter | When focus is on the trigger, opens the menu and focuses the first item.
When focus is on an item, activates the item. | +| ArrowDown | When focus is on the trigger, opens the menu and focuses the first item.
When focus is on an item, moves focus to the next item. | +| ArrowUp | When focus is on the trigger, opens the menu and focuses the last item.
When focus is on an item, moves focus to the previous item. | +| ArrowRight / ArrowLeft | When focus is on a sub menu trigger, opens or closes the submenu depending on reading direction. | +| Home | When focus is on an item, moves focus to first item. | +| End | When focus is on an item, moves focus to last item. | +| Esc | Closes the menu and moves focus to the trigger. | diff --git a/apps/docs/src/routes/docs/core/components/file-field.mdx b/apps/docs/src/routes/docs/core/(1)components/file-field.mdx similarity index 69% rename from apps/docs/src/routes/docs/core/components/file-field.mdx rename to apps/docs/src/routes/docs/core/(1)components/file-field.mdx index 350fd79ce..a305e0d5d 100644 --- a/apps/docs/src/routes/docs/core/components/file-field.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/file-field.mdx @@ -1,7 +1,17 @@ -import { Preview, TabsSnippets, Kbd } from "../../../../components"; +--- +title: File Field +badges: + - icon: npm + label: "Since v0.13.8" + - label: "@kobalte/core/file-field" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/file-field" +--- + import { BasicExample, HTMLFormExample } from "../../../../examples/file-field"; -# File Field +# {frontmatter.title} A file input to upload multiple files, with ability to drag and drop files. @@ -69,165 +79,21 @@ The File Field consists of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { FileField } from "@kobalte/core/file-field"; - import "./style.css"; - - function App() { - return ( - console.log("data", data)} - onFileReject={(data) => console.log("data", data)} - onFileChange={(data) => console.log("data", data)} - > - - File Field - - - Drop your files here... - - Choose files! - - - - - {(file) => ( - - - - - - Delete - - - )} - - - ); - } - ``` - - - - - -```css -.FileField { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - height: 400px; - width: 100%; - row-gap: 5px; -} - -.FileField__label { - color: white; - font-size: 14px; - font-weight: 500; - user-select: none; -} +:::preview -.FileField__dropzone { - display: flex; - flex-direction: column; - row-gap: 10px; - align-items: center; - justify-content: center; - border: 1px dashed rgb(42, 42, 40); - width: 100%; - height: 100%; - color: #ccc; - border-radius: 6px; -} + -.FileField__trigger { - background-color: hsl(201 96% 32%); - color: white; - padding: 5px 10px; - border-radius: 4px; -} +--- -.FileField__itemList { - display: flex; - flex-direction: column; - gap: 3px; - width: 100%; -} - -.FileField__item { - width: 100%; - display: grid; - padding: 16px; - column-gap: 10px; - border-radius: 6px; - grid-template-columns: auto 1fr auto; - grid-template-areas: - "preview name delete" - "preview size delete"; - column-gap: 5px; - border: 1px solid rgb(42, 42, 40); - padding: 10px; -} - -.FileField__itemPreview { - grid-area: preview; -} +```tsx title="index.tsx" tab file="../../../../examples/file-field.tsx#L3-L43" -.FileField__itemPreviewImage { - width: 50px; - object-fit: scale-down; - height: auto; - aspect-ratio: 1; -} - -.FileField__itemName { - grid-area: name; - font-size: 14px; - color: #fff; -} +``` -.FileField__itemSize { - grid-area: size; - font-size: 14px; - color: rgb(181, 179, 173); -} +```css title="style.css" tab file="../../../../examples/file-field.module.css" -.FileField__itemDeleteTrigger { - grid-area: delete; - cursor: pointer; - background-color: #a23434; - color: white; - padding: 2px 8px; - border-radius: 4px; - height: max-content; - align-self: center; -} ``` - - {/* */} - - +::: ## Usage @@ -235,9 +101,11 @@ The File Field consists of: By passing name prop to FileField.HiddenInput, you can use FileField in HTML forms. - - - +:::preview + + + +--- ```tsx function HTMLFormExample() { @@ -284,6 +152,8 @@ function HTMLFormExample() { } ``` +::: + ## API Reference ### FileField @@ -357,5 +227,5 @@ function HTMLFormExample() { | Key | Description | | :--------------- | :------------------------------------------------------------------------------------------------------- | -| Space | When focus is on dropzone, opens the file dialog.
When focus is on trigger, opens the file dialog. | -| Enter | When focus is on dropzone, opens the file dialog.
When focus is on trigger, opens the file dialog. | +| Space | When focus is on dropzone, opens the file dialog.
When focus is on trigger, opens the file dialog. | +| Enter | When focus is on dropzone, opens the file dialog.
When focus is on trigger, opens the file dialog. | diff --git a/apps/docs/src/routes/docs/core/components/hover-card.mdx b/apps/docs/src/routes/docs/core/(1)components/hover-card.mdx similarity index 78% rename from apps/docs/src/routes/docs/core/components/hover-card.mdx rename to apps/docs/src/routes/docs/core/(1)components/hover-card.mdx index 2108214e6..20dc557dd 100644 --- a/apps/docs/src/routes/docs/core/components/hover-card.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/hover-card.mdx @@ -1,7 +1,17 @@ -import { Preview, Kbd, TabsSnippets } from "../../../../components"; +--- +title: Hover Card +badges: + - icon: npm + label: "Since v0.1.0" + - label: "@kobalte/core/hover-card" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/hover-card" +--- + import { BasicExample } from "../../../../examples/hover-card"; -# Hover Card +# {frontmatter.title} Allows sighted users to preview content available behind a link. @@ -46,126 +56,21 @@ The hovercard consists of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { HoverCard } from "@kobalte/core/hover-card"; - import "./style.css"; - - function App() { - return ( - - - @MLFabien - - - - - Fabien MARIE-LOUISE -

Fabien MARIE-LOUISE

-

- Developer and UI Design enthusiast. Building UI related stuffs for @solid_js -

-
-
-
- ); - } - ``` - -
- - ```css - .hovercard__trigger { - outline: none; - color: hsl(201 96% 32%); - font-size: 16px; - } - - .hovercard__trigger:hover { - text-decoration: underline; - } - - .hovercard__trigger:focus-visible { - outline: 2px solid hsl(200 98% 39%); - outline-offset: 2px; - } - - .hovercard__content { - z-index: 50; - max-width: min(calc(100vw - 16px), 380px); - border: 1px solid hsl(240 5% 84%); - border-radius: 6px; - padding: 16px; - background-color: white; - box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - transform-origin: var(--kb-hovercard-content-transform-origin); - animation: contentHide 250ms ease-in forwards; - } - - .hovercard__content[data-expanded] { - animation: contentShow 250ms ease-out; - } - - .hovercard__title { - color: hsl(240 6% 10%); - font-size: 16px; - font-weight: 600; - } - - .hovercard__description { - font-size: 14px; - color: hsl(240 5% 26%); - } - - .hovercard__avatar { - height: 56px; - width: 56px; - } - - @keyframes contentShow { - from { - opacity: 0; - transform: scale(0.96); - } - to { - opacity: 1; - transform: scale(1); - } - } - - @keyframes contentHide { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.96); - } - } - ``` - - - {/* */} -
+:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/hover-card.tsx#L3-L32" + +``` + +```css title="style.css" tab file="../../../../examples/hover-card.module.css" + +``` + +::: ## Usage @@ -181,7 +86,7 @@ An initial, uncontrolled open value can be provided using the `defaultOpen` prop The `open` prop can be used to make the open state controlled. The `onOpenChange` event is fired when the user pointer enter or leave the trigger, and receives the new value. -```tsx {3,6} +```tsx {4,7} import { createSignal } from "solid-js"; function ControlledExample() { diff --git a/apps/docs/src/routes/docs/core/components/i18n-provider.mdx b/apps/docs/src/routes/docs/core/(1)components/i18n-provider.mdx similarity index 89% rename from apps/docs/src/routes/docs/core/components/i18n-provider.mdx rename to apps/docs/src/routes/docs/core/(1)components/i18n-provider.mdx index 49968e9eb..730a70abc 100644 --- a/apps/docs/src/routes/docs/core/components/i18n-provider.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/i18n-provider.mdx @@ -1,4 +1,15 @@ -# I18nProvider +--- +title: I18n Provider +badges: + - icon: npm + label: "Since v0.1.0" + - label: "@kobalte/core/i18n" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/i18n" +--- + +# {frontmatter.title} Provides the locale for the application to all child components. diff --git a/apps/docs/src/routes/docs/core/components/image.mdx b/apps/docs/src/routes/docs/core/(1)components/image.mdx similarity index 60% rename from apps/docs/src/routes/docs/core/components/image.mdx rename to apps/docs/src/routes/docs/core/(1)components/image.mdx index 9ffb97f26..cd85c31f3 100644 --- a/apps/docs/src/routes/docs/core/components/image.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/image.mdx @@ -1,7 +1,17 @@ -import { Preview, TabsSnippets } from "../../../../components"; +--- +title: Image +badges: + - icon: npm + label: "Since v0.5.0" + - label: "@kobalte/core/image" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/image" +--- + import { BasicExample } from "../../../../examples/image"; -# Image +# {frontmatter.title} An image element with an optional fallback for loading and error status. @@ -38,80 +48,21 @@ The image consists of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { Image } from "@kobalte/core/image"; - import "./style.css"; - - function App() { - return ( - <> - - - NS - - - MD - - - ); - } - ``` - - - - ```css - .image { - display: inline-flex; - align-items: center; - justify-content: center; - vertical-align: middle; - overflow: hidden; - user-select: none; - width: 56px; - height: 56px; - border-radius: 100%; - background-color: hsl(240 6% 90%); - } - - .image__img { - width: 100%; - height: 100%; - object-fit: cover; - border-radius: inherit; - } - - .image__fallback { - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - background-color: hsl(204 94% 94%); - color: hsl(201 96% 32%); - font-size: 16px; - line-height: 1; - font-weight: 500; - } - ``` - - - {/* */} - +:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/image.tsx#L3-L21" + +``` + +```css title="style.css" tab file="../../../../examples/image.module.css" + +``` + +::: ## Usage @@ -121,7 +72,7 @@ By default `Image.Fallback` will render when the image hasn't loaded. This means If you notice a flash during loading, use the `fallbackDelay` prop to delay its rendering, so it only renders for those with slower internet connections. -```tsx {0} +```tsx {1} - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { Link } from "@kobalte/core/link"; - import "./style.css"; - - function App() { - return ( - - Kobalte - - ); - } - ``` - - - - ```css - .link { - font-weight: 600; - color: hsl(201 96% 32%); - } - - .link:hover { - text-decoration: underline; - } - - .link[data-disabled] { - opacity: 0.5; - cursor: not-allowed; - } - - .link[data-disabled]:hover { - text-decoration: none; - } - ``` - - - {/* */} - +:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/link.tsx#L3-L11" + +``` + +```css title="style.css" tab file="../../../../examples/link.module.css" + +``` + +::: ## Usage @@ -89,9 +68,11 @@ The link consists of: Use the `disabled` prop to disable a link while keeping it accessible for screen readers. - - - +:::preview + + + +--- ```tsx @@ -99,6 +80,8 @@ Use the `disabled` prop to disable a link while keeping it accessible for screen ``` +::: + ## API Reference ### Link @@ -125,4 +108,4 @@ Use the `disabled` prop to disable a link while keeping it accessible for screen | Key | Description | | :--------------- | :------------------ | -| Enter | Activates the link. | +| Enter | Activates the link. | diff --git a/apps/docs/src/routes/docs/core/components/menubar.mdx b/apps/docs/src/routes/docs/core/(1)components/menubar.mdx similarity index 73% rename from apps/docs/src/routes/docs/core/components/menubar.mdx rename to apps/docs/src/routes/docs/core/(1)components/menubar.mdx index dc64d95f1..6973ad45f 100644 --- a/apps/docs/src/routes/docs/core/components/menubar.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/menubar.mdx @@ -1,8 +1,20 @@ -import { Preview, Kbd, TabsSnippets } from "../../../../components"; +--- +title: Menubar +badges: + - icon: npm + label: "Since v0.12.1" + - label: "@kobalte/core/menubar" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/menubar" + - icon: aria + label: "Menubar" + url: "https://www.w3.org/WAI/ARIA/apg/patterns/menubar/" +--- + import { BasicExample } from "../../../../examples/menubar"; -import { Callout } from "../../../../components/callout"; -# Menubar +# {frontmatter.title} A visually persistent menu common in desktop applications that provides quick access to a consistent set of commands. @@ -112,391 +124,21 @@ The checkable menu item consists of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { Menubar } from "@kobalte/core/menubar"; - import { createSignal } from "solid-js"; - import { CheckIcon, ChevronRightIcon, DotFilledIcon } from "some-icon-library"; - import "./style.css"; - - function App() { - const [showGitLog, setShowGitLog] = createSignal(true); - const [showHistory, setShowHistory] = createSignal(false); - const [branch, setBranch] = createSignal("main"); - - return ( - - - - Git - - - - - Commit - - - Push - - - Update Project - - - - GitHub - - - - - - Create Pull Request… - - - View Pull Requests - - Sync Fork - - - Open on GitHub - - - - - - - - - - - - Show Git Log - - - - - - Show History - - - - - - - Branches - - - - - - - main - - - - - - develop - - - - - - - - - - File - - - - - New Tab - - - New Window - - - New Incognito Window - - - - - - - Share - - - - - - Email Link - - - Messages - - - Notes - - - - - - - - - Print... - - - - - - - - Edit - - - - - Undo - - - Redo - - - - - - - Find - - - - - - Search The Web - - - - Find... - - - Find Next - - - Find Previous - - - - - - - - - Cut - - - Copy - - - Paste - - - - - - ); - } - ``` - - - - ```css - .menubar__root { - display: flex; - justify-content: center; - align-items: center; - } - - .menubar__trigger { - appearance: none; - display: inline-flex; - justify-content: center; - align-items: center; - height: 40px; - width: auto; - outline: none; - padding: 0 16px; - background-color: #f6f6f7; - color: hsl(240 4% 16%); - font-size: 16px; - gap: 8px; - line-height: 0; - transition: 250ms background-color; - } - - .menubar__trigger[data-highlighted="true"] { - background-color: hsl(200 98% 39%); - color: white; - } - - .menubar__trigger:first-child { - border-radius: 4px 0 0 4px; - } - - .menubar__trigger:last-child { - border-left: 2px dashed hsl(240 4% 46%); - border-radius: 0 4px 4px 0; - } - - .menubar__content, - .menubar__sub-content { - min-width: 220px; - padding: 8px; - background-color: white; - border-radius: 6px; - border: 1px solid hsl(240 6% 90%); - box-shadow: - 0 4px 6px -1px rgb(0 0 0 / 0.1), - 0 2px 4px -2px rgb(0 0 0 / 0.1); - outline: none; - transform-origin: var(--kb-menu-content-transform-origin); - animation: contentHide 250ms ease-in forwards; - } - - .menubar__content[data-expanded], - .menubar__sub-content[data-expanded] { - animation: contentShow 250ms ease-out; - } - - .menubar__item, - .menubar__checkbox-item, - .menubar__radio-item, - .menubar__sub-trigger { - font-size: 16px; - line-height: 1; - color: hsl(240 4% 16%); - border-radius: 4px; - display: flex; - align-items: center; - height: 32px; - padding: 0 8px 0 24px; - position: relative; - user-select: none; - outline: none; - } - - .menubar__sub-trigger[data-expanded] { - background-color: hsl(204 94% 94%); - color: hsl(201 96% 32%); - } - - .menubar__item[data-disabled], - .menubar__checkbox-item[data-disabled], - .menubar__radio-item[data-disabled], - .menubar__sub-trigger[data-disabled] { - color: hsl(240 5% 65%); - opacity: 0.5; - pointer-events: none; - } - - .menubar__item[data-highlighted], - .menubar__checkbox-item[data-highlighted], - .menubar__radio-item[data-highlighted], - .menubar__sub-trigger[data-highlighted] { - outline: none; - background-color: hsl(200 98% 39%); - color: white; - } - - .menubar__group-label { - padding: 0 24px; - font-size: 14px; - line-height: 32px; - color: hsl(240 4% 46%); - } - - .menubar__separator { - height: 1px; - border-top: 1px solid hsl(240 6% 90%); - margin: 6px; - } - - .menubar__item-indicator { - position: absolute; - left: 0; - height: 20px; - width: 20px; - display: inline-flex; - align-items: center; - justify-content: center; - } - - .menubar__item-right-slot { - margin-left: auto; - padding-left: 20px; - font-size: 14px; - color: hsl(240 4% 46%); - } - - [data-highlighted] > .menubar__item-right-slot { - color: white; - } - - [data-disabled] .menubar__item-right-slot { - color: hsl(240 5% 65%); - opacity: 0.5; - } - - @keyframes contentShow { - from { - opacity: 0; - transform: scale(0.96); - } - to { - opacity: 1; - transform: scale(1); - } - } - - @keyframes contentHide { - from { - opacity: 1; - transform: scale(1); - } - to { - opacity: 0; - transform: scale(0.96); - } - } - ``` - - - {/* */} - +:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/menubar.tsx#L6-L208" + +``` + +```css title="style.css" tab file="../../../../examples/menubar.module.css" + +``` + +::: ## Usage @@ -504,7 +146,7 @@ The checkable menu item consists of: To make one of the menubar triggers a link instead of opening a menu, omit the `Menubar.Menu` and set `as="a"` on the `Menubar.Trigger`. -```tsx {12} +```tsx {13} Opens a regular menu @@ -776,13 +418,13 @@ The popper positioner will copy the same `z-index` as the `Menubar.Content`. | Key | Description | | :------------------------------------------- | :----------------------------------------------------------------------------------------------- | -| Space | When focus is on an item, activates the item. | -| Enter | When focus is on an item, activates the item. | -| ArrowDown | When focus is on an item, moves focus to the next item. | -| ArrowUp | When focus is on an item, moves focus to the previous item. | -| ArrowRight | When focus is on an item (not sub menu trigger), moves focus to the next menu. | -| ArrowLeft | When focus is on an item (not sub menu item), moves focus to the previous menu. | -| ArrowRight / ArrowLeft | When focus is on a sub menu trigger, opens or closes the submenu depending on reading direction. | -| Home | When focus is on an item, moves focus to first item. | -| End | When focus is on an item, moves focus to last item. | -| Esc | Closes the menu. | +| Space | When focus is on an item, activates the item. | +| Enter | When focus is on an item, activates the item. | +| ArrowDown | When focus is on an item, moves focus to the next item. | +| ArrowUp | When focus is on an item, moves focus to the previous item. | +| ArrowRight | When focus is on an item (not sub menu trigger), moves focus to the next menu. | +| ArrowLeft | When focus is on an item (not sub menu item), moves focus to the previous menu. | +| ArrowRight / ArrowLeft | When focus is on a sub menu trigger, opens or closes the submenu depending on reading direction. | +| Home | When focus is on an item, moves focus to first item. | +| End | When focus is on an item, moves focus to last item. | +| Esc | Closes the menu. | diff --git a/apps/docs/src/routes/docs/core/components/meter.mdx b/apps/docs/src/routes/docs/core/(1)components/meter.mdx similarity index 72% rename from apps/docs/src/routes/docs/core/components/meter.mdx rename to apps/docs/src/routes/docs/core/(1)components/meter.mdx index 70969e31a..ca43219a5 100644 --- a/apps/docs/src/routes/docs/core/components/meter.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/meter.mdx @@ -1,11 +1,24 @@ -import { Preview, TabsSnippets } from "../../../../components"; +--- +title: Meter +badges: + - icon: npm + label: "Since v0.13.8" + - label: "@kobalte/core/meter" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/meter" + - icon: aria + label: "Meter" + url: "https://www.w3.org/WAI/ARIA/apg/patterns/meter/" +--- + import { BasicExample, CustomValueLabelExample, CustomValueScaleExample, } from "../../../../examples/meter"; -# Meter +# {frontmatter.title} Displays numeric value that varies within a defined range @@ -45,74 +58,21 @@ The meter consists of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { Meter } from "@kobalte/core/meter"; - import "./style.css"; - - function App() { - return ( - -
- Battery Level: - -
- - - -
- ); - } - ``` - -
- - ```css - .meter { - display: flex; - flex-direction: column; - gap: 2px; - width: 300px; - } - - .meter__label-container { - display: flex; - justify-content: space-between; - } - - .meter__label, - .meter__value-label { - color: hsl(240 4% 16%); - font-size: 14px; - } - - .meter__track { - height: 10px; - background-color: hsl(240 6% 90%); - } - - .meter__fill { - background-color: hsl(200 98% 39%); - height: 100%; - width: var(--kb-meter-fill-width); - transition: width 250ms linear; - } - - ``` - - - {/* */} -
+:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/meter.tsx#L3-L17" + +``` + +```css title="style.css" tab file="../../../../examples/meter.module.css" + +``` + +::: ## Usage @@ -120,11 +80,13 @@ The meter consists of: By default, the `value` prop represents the current value of meter, as the minimum and maximum values default to 0 and 100, respectively. Alternatively, a different scale can be used by setting the `minValue` and `maxValue` props. - - - +:::preview + + + +--- -```tsx {0} +```tsx {1}
Disk Space Usage: @@ -136,15 +98,19 @@ By default, the `value` prop represents the current value of meter, as the minim ``` +::: + ### Custom value label The `getValueLabel` prop allows the formatted value used in `Meter.ValueLabel` and ARIA to be replaced with a custom string. It receives the current value, min and max values as parameters. - - - +:::preview + + -```tsx {4} +--- + +```tsx {5} ``` +::: + ### Meter fill width We expose a CSS custom property `--kb-meter-fill-width` which corresponds to the percentage of the meter (ex: 80%). If you are building a linear meter, you can use it to set the width of the `Meter.Fill` component in CSS. diff --git a/apps/docs/src/routes/docs/core/components/navigation-menu.mdx b/apps/docs/src/routes/docs/core/(1)components/navigation-menu.mdx similarity index 63% rename from apps/docs/src/routes/docs/core/components/navigation-menu.mdx rename to apps/docs/src/routes/docs/core/(1)components/navigation-menu.mdx index 9831db9cf..4cbe4c658 100644 --- a/apps/docs/src/routes/docs/core/components/navigation-menu.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/navigation-menu.mdx @@ -1,7 +1,20 @@ -import { Preview, Kbd, TabsSnippets } from "../../../../components"; +--- +title: Navigation Menu +badges: + - icon: npm + label: "Since v0.13.3" + - label: "@kobalte/core/navigation-menu" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/navigation-menu" + - icon: aria + label: "Menubar" + url: "https://www.w3.org/WAI/ARIA/apg/patterns/menubar/" +--- + import { BasicExample, AnimationExample } from "../../../../examples/navigation-menu"; -# Navigation Menu +# {frontmatter.title} A collection of links for navigating websites. @@ -15,7 +28,7 @@ import { Root, Menu, ... } from "@kobalte/core/navigation-menu"; ## Features -- Follows the [WAI ARIA Navigation Menubar](https://www.w3.org/WAI/ARIA/apg/patterns/NavigationMenu/) design pattern. +- Follows the [WAI-ARIA Menu and Menubar](https://www.w3.org/WAI/ARIA/apg/patterns/menubar/) design pattern. - Supports modal and non-modal modes. - Supports submenus. - Supports items, labels, groups of items. @@ -112,577 +125,21 @@ The checkable menu item consists of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { NavigationMenu, Orientation } from "@kobalte/core/navigation-menu"; - import { RadioGroup } from "@kobalte/core/radio-group"; - import { For, createSignal } from "solid-js"; - - import "./style.css"; - - export function App() { - const [orientation, setOrientation] = createSignal("horizontal"); - - return ( - <> - - - - Learn{" "} - - - - - - - - Kobalte - - Kobalte - - - Unstyled, accessible components for SolidJS. - - - - - Pigment - - - Ready-to-use components with a consistent look and feel. - - - - - SolidJS - - - Simple and performant reactivity for building user interfaces. - - - - - SolidStart - - - Fine-grained reactivity goes fullstack. - - - - - - - - - Overview{" "} - - - - - - - - - Introduction - - - Build high-quality, accessible design systems and web apps. - - - - - Getting started - - - A quick tutorial to get you up and running with Kobalte. - - - - - Styling - - - Unstyled and compatible with any styling solution. - - - - - Animation - - - Use CSS keyframes or any animation library of your choice. - - - - - Polymorphism - - - Customize behavior or integrate existing libraries. - - - - - Changelog - - - Kobalte releases and their changelogs. - - - - - - - - GitHub - - - - - - - -
- - - class="radio-group" - value={orientation()} - onChange={(value) => setOrientation(value)} - > - - Orientation - -
- - {(orientation) => ( - - - - - - - {orientation} - - - )} - -
- - - ); - } - ``` - - - - ```css - .navigation-menu__root { - display: flex; - justify-content: center; - align-items: center; - padding: 4px; - background-color: white; - width: max-content; - border-radius: 6px; - } - - .navigation-menu__root[data-orientation="vertical"] { - flex-direction: column; - } - - .navigation-menu__trigger { - appearance: none; - display: inline-flex; - justify-content: center; - align-items: center; - width: auto; - outline: none; - padding: 16px 16px; - background-color: white; - color: #0284c7; - font-size: 16px; - gap: 8px; - line-height: 0; - transition: 250ms background-color; - border-radius: 4px; - border: none; - text-decoration: none; - font-weight: 500; - } - - .navigation-menu__trigger[data-highlighted="true"] { - background-color: #0284c710; - } - - .navigation-menu__trigger-indicator { - position: relative; - margin: -7.5px -4px; - height: 15px; - width: 15px; - transition: transform 250ms ease; - } - - .navigation-menu__trigger-indicator[data-expanded] { - transform: rotateX(180deg); - } - - .navigation-menu__root[data-orientation="vertical"] - .navigation-menu-trigger - .navigation-menu__trigger-indicator { - transform: rotate(-90deg); - } - - .navigation-menu__root[data-orientation="vertical"] - .navigation-menu-trigger[data-expanded] - .navigation-menu__trigger-indicator { - transform: rotate(-90deg) rotateX(180deg); - } - - .navigation-menu__viewport { - display: flex; - justify-content: center; - align-items: center; - width: var(--kb-navigation-menu__viewport-width); - height: var(--kb-navigation-menu__viewport-height); - z-index: 1000; - background-color: white; - border: 1px solid hsl(240 6% 90%); - box-shadow: - 0 4px 6px -1px rgb(0 0 0 / 0.1), - 0 2px 4px -2px rgb(0 0 0 / 0.1); - opacity: 0; - overflow-x: clip; - overflow-y: visible; - transform-origin: var(--kb-menu-content-transform-origin); - transition: - width, - height, - 250ms ease; - animation: viewportHide 250ms ease-in forwards; - pointer-events: none; - } - - .navigation-menu__viewport[data-orientation="vertical"] { - overflow-x: visible; - overflow-y: clip; - } - - .navigation-menu__viewport[data-expanded] { - border-radius: 6px; - animation: viewportShow 250ms ease-out; - opacity: 1; - pointer-events: auto; - } - - .navigation-menu__item-callout { - box-sizing: border-box; - display: flex; - justify-content: flex-end; - flex-direction: column; - width: 100%; - height: 100%; - background: linear-gradient(135deg, #0284c7 0%, #42aaff 100%); - border-radius: 6px; - padding: 25px; - text-decoration: none; - outline: none; - user-select: none; - grid-row: span 3; - } - - .navigation-menu__item-callout:focus { - outline: 2px solid #0284c790; - } - - .navigation-menu__item-callout .navigation-menu__item-label { - margin-top: 16px; - font-size: 1.25rem; - color: white; - } - - .navigation-menu__item-callout .navigation-menu__item-description { - color: white; - } - - .navigation-menu__item-label { - font-size: 1rem; - margin-bottom: 8px; - font-weight: 500; - color: #18181b; - line-height: 1.2; - } - - .navigation-menu__item-description { - font-size: 0.9rem; - opacity: 0.8; - color: #18181b; - line-height: 1.4; - } - - .navigation-menu__item-callout > img { - width: 45px; - height: 45px; - } - - .navigation-menu__item { - display: block; - outline: none; - text-decoration: none; - user-select: none; - padding: 12px; - border-radius: 6px; - font-size: 15px; - line-height: 1; - } - - .navigation-menu__item:hover, - .navigation-menu__item:focus { - background-color: #0284c710; - } - - .navigation-menu__content { - position: absolute; - top: 0; - left: 0; - box-sizing: border-box; - outline: none; - display: grid; - padding: 22px; - margin: 0; - column-gap: 10px; - grid-template-rows: repeat(3, 1fr); - grid-auto-flow: column; - animation-duration: 250ms; - animation-timing-function: ease; - animation-fill-mode: forwards; - pointer-events: none; - } - - .navigation-menu__content[data-expanded] { - pointer-events: auto; - } - - .navigation-menu__content[data-motion="from-start"] { - animation-name: enterFromLeft; - } - .navigation-menu__content[data-motion="from-end"] { - animation-name: enterFromRight; - } - .navigation-menu__content[data-motion="to-start"] { - animation-name: exitToLeft; - } - .navigation-menu__content[data-motion="to-end"] { - animation-name: exitToRight; - } - - .navigation-menu__content[data-orientation="vertical"][data-motion="from-start"] { - animation-name: enterFromTop; - } - .navigation-menu__content[data-orientation="vertical"][data-motion="from-end"] { - animation-name: enterFromBottom; - } - .navigation-menu__content[data-orientation="vertical"][data-motion="to-start"] { - animation-name: exitToTop; - } - .navigation-menu__content[data-orientation="vertical"][data-motion="to-end"] { - animation-name: exitToBottom; - } - - @media screen and (max-width: 650px) { - .navigation-menu__item-label { - font-size: 0.9rem; - line-height: 1; - } - - .navigation-menu__item-description { - font-size: 0.75rem; - line-height: 1.1; - } - } - - .navigation-menu__content.content-1 { - width: min(500px, 90dvw); - grid-template-columns: 0.75fr 1fr; - } - - .navigation-menu__content.content-2 { - width: min(600px, 90dvw); - grid-template-columns: 1fr 1fr; - } - - .navigation-menu__content.content-1 > li:first-child { - grid-row: span 3; - } - - .navigation-menu__arrow { - transition: transform 250ms; - } - - @keyframes viewportShow { - from { - opacity: 0; - transform: rotateX(-20deg) scale(0.96); - } - to { - opacity: 1; - transform: rotateX(0deg) scale(1); - } - } - @keyframes viewportHide { - from { - opacity: 1; - transform: rotateX(0deg) scale(1); - } - to { - opacity: 0; - transform: rotateX(-10deg) scale(0.96); - } - } - - @keyframes enterFromRight { - from { - opacity: 0; - transform: translateX(200px); - } - to { - opacity: 1; - transform: translateX(0); - } - } - - @keyframes enterFromLeft { - from { - opacity: 0; - transform: translateX(-200px); - } - to { - opacity: 1; - transform: translateX(0); - } - } - - @keyframes exitToRight { - from { - opacity: 1; - transform: translateX(0); - } - to { - opacity: 0; - transform: translateX(200px); - } - } - - @keyframes exitToLeft { - from { - opacity: 1; - transform: translateX(0); - } - to { - opacity: 0; - transform: translateX(-200px); - } - } - - @keyframes enterFromBottom { - from { - opacity: 0; - transform: translateY(200px); - } - to { - opacity: 1; - transform: translateY(0); - } - } - - @keyframes enterFromTop { - from { - opacity: 0; - transform: translateY(-200px); - } - to { - opacity: 1; - transform: translateY(0); - } - } - - @keyframes exitToBottom { - from { - opacity: 1; - transform: translateY(0); - } - to { - opacity: 0; - transform: translateY(200px); - } - } - - @keyframes exitToTop { - from { - opacity: 1; - transform: translateY(0); - } - to { - opacity: 0; - transform: translateY(-200px); - } - } - ``` - - - {/* */} - +:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/navigation-menu.tsx#L8-L259" + +``` + +```css title="style.css" tab file="../../../../examples/navigation-menu.module.css" + +``` + +::: ## Usage @@ -692,7 +149,7 @@ Since the viewport content has a position of `absolute` to allow animating, Koba The height and width will be copied from the active `NavigationMenu.Content`, which can either be set using CSS or automatically calculated based on it's content. Combined with a transition CSS rule the size can be animated. -```css {2-3} +```css {3-4} /* style.css */ .navigation-menu__viewport { width: var(--kb-navigation-menu-viewport-width); @@ -708,7 +165,7 @@ Combined with a transition CSS rule the size can be animated. To make one of the navigation menu triggers a link instead of opening a menu, omit the `NavigationMenu.Menu` and set `as="a"` on the `NavigationMenu.Trigger`. -```tsx {8} +```tsx {9} Opens a regular menu @@ -731,7 +188,7 @@ To make one of the navigation menu triggers a link instead of opening a menu, om We expose a CSS custom property `--kb-menu-content-transform-origin` which can be used to animate the viewport from its computed origin. -```css {2} +```css {3} /* style.css */ .navigation-menu__viewport { transform-origin: var(--kb-menu-content-transform-origin); @@ -828,202 +285,192 @@ For animating the content of the viewport we apply the attribute `data-motion` o } ``` - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { NavigationMenu } from "@kobalte/core/navigation-menu"; - - import "./style.css"; - - export function App() { - - return ( - - - - Learn{" "} - - - - - - - Learn Content - - - - - - - Overview{" "} - - - - - - - Overview Content - - - - - - GitHub - - - - - - - ); - } - ``` - - - - ```css - /* This snippet only includes the minimum to get the behavior working */ - - .navigation-menu__viewport { - display: flex; - justify-content: center; - align-items: center; - width: var(--kb-navigation-menu__viewport-width); - height: var(--kb-navigation-menu__viewport-height); - z-index: 1000; - opacity: 0; - overflow-x: clip; - overflow-y: visible; - transform-origin: var(--kb-menu-content-transform-origin); - transition: - width, - height, - 250ms ease; - animation: viewportHide 250ms ease-in forwards; - pointer-events: none; - } - - .navigation-menu__viewport[data-expanded] { - animation: viewportShow 250ms ease-out; - opacity: 1; - pointer-events: auto; - } - - .navigation-menu__content { - position: absolute; - top: 0; - left: 0; - box-sizing: border-box; - animation-duration: 250ms; - animation-timing-function: ease; - animation-fill-mode: forwards; - pointer-events: none; - } - - .navigation-menu__content[data-expanded] { - pointer-events: auto; - } - - .navigation-menu__content[data-motion="from-start"] { - animation-name: enterFromLeft; - } - .navigation-menu__content[data-motion="from-end"] { - animation-name: enterFromRight; - } - .navigation-menu__content[data-motion="to-start"] { - animation-name: exitToLeft; - } - .navigation-menu__content[data-motion="to-end"] { - animation-name: exitToRight; - } - - .navigation-menu__arrow { - transition: transform 250ms; - } - - @keyframes viewportShow { - from { - opacity: 0; - transform: rotateX(-20deg) scale(0.96); - } - to { - opacity: 1; - transform: rotateX(0deg) scale(1); - } - } - @keyframes viewportHide { - from { - opacity: 1; - transform: rotateX(0deg) scale(1); - } - to { - opacity: 0; - transform: rotateX(-10deg) scale(0.96); - } - } - - @keyframes enterFromRight { - from { - opacity: 0; - transform: translateX(200px); - } - to { - opacity: 1; - transform: translateX(0); - } - } - - @keyframes enterFromLeft { - from { - opacity: 0; - transform: translateX(-200px); - } - to { - opacity: 1; - transform: translateX(0); - } - } - - @keyframes exitToRight { - from { - opacity: 1; - transform: translateX(0); - } - to { - opacity: 0; - transform: translateX(200px); - } - } - - @keyframes exitToLeft { - from { - opacity: 1; - transform: translateX(0); - } - to { - opacity: 0; - transform: translateX(-200px); - } - } - ``` - - - {/* */} - +:::preview + + + +--- + +```tsx title="index.tsx" tab +import { NavigationMenu } from "@kobalte/core/navigation-menu"; + +import "./style.css"; + +export function App() { + return ( + + + + Learn{" "} + + + + + + + Learn Content + + + + + + + Overview{" "} + + + + + + + Overview Content + + + + + + GitHub + + + + + + + ); +} +``` + +```css title="style.css" tab +/* This snippet only includes the minimum to get the behavior working */ + +.navigation-menu__viewport { + display: flex; + justify-content: center; + align-items: center; + width: var(--kb-navigation-menu__viewport-width); + height: var(--kb-navigation-menu__viewport-height); + z-index: 1000; + opacity: 0; + overflow-x: clip; + overflow-y: visible; + transform-origin: var(--kb-menu-content-transform-origin); + transition: + width, + height, + 250ms ease; + animation: viewportHide 250ms ease-in forwards; + pointer-events: none; +} + +.navigation-menu__viewport[data-expanded] { + animation: viewportShow 250ms ease-out; + opacity: 1; + pointer-events: auto; +} + +.navigation-menu__content { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + animation-duration: 250ms; + animation-timing-function: ease; + animation-fill-mode: forwards; + pointer-events: none; +} + +.navigation-menu__content[data-expanded] { + pointer-events: auto; +} + +.navigation-menu__content[data-motion="from-start"] { + animation-name: enterFromLeft; +} +.navigation-menu__content[data-motion="from-end"] { + animation-name: enterFromRight; +} +.navigation-menu__content[data-motion="to-start"] { + animation-name: exitToLeft; +} +.navigation-menu__content[data-motion="to-end"] { + animation-name: exitToRight; +} + +.navigation-menu__arrow { + transition: transform 250ms; +} + +@keyframes viewportShow { + from { + opacity: 0; + transform: rotateX(-20deg) scale(0.96); + } + to { + opacity: 1; + transform: rotateX(0deg) scale(1); + } +} +@keyframes viewportHide { + from { + opacity: 1; + transform: rotateX(0deg) scale(1); + } + to { + opacity: 0; + transform: rotateX(-10deg) scale(0.96); + } +} + +@keyframes enterFromRight { + from { + opacity: 0; + transform: translateX(200px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes enterFromLeft { + from { + opacity: 0; + transform: translateX(-200px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +@keyframes exitToRight { + from { + opacity: 1; + transform: translateX(0); + } + to { + opacity: 0; + transform: translateX(200px); + } +} + +@keyframes exitToLeft { + from { + opacity: 1; + transform: translateX(0); + } + to { + opacity: 0; + transform: translateX(-200px); + } +} +``` + +::: ## API Reference @@ -1254,13 +701,13 @@ For animating the content of the viewport we apply the attribute `data-motion` o | Key | Description | | :------------------------------------------- | :----------------------------------------------------------------------------------------------- | -| Space | When focus is on an item, activates the item. | -| Enter | When focus is on an item, activates the item. | -| ArrowDown | When focus is on an item, moves focus to the next item. | -| ArrowUp | When focus is on an item, moves focus to the previous item. | -| ArrowRight | When focus is on an item (not sub menu trigger), moves focus to the next menu. | -| ArrowLeft | When focus is on an item (not sub menu item), moves focus to the previous menu. | -| ArrowRight / ArrowLeft | When focus is on a sub menu trigger, opens or closes the submenu depending on reading direction. | -| Home | When focus is on an item, moves focus to first item. | -| End | When focus is on an item, moves focus to last item. | -| Esc | Closes the menu. | +| Space | When focus is on an item, activates the item. | +| Enter | When focus is on an item, activates the item. | +| ArrowDown | When focus is on an item, moves focus to the next item. | +| ArrowUp | When focus is on an item, moves focus to the previous item. | +| ArrowRight | When focus is on an item (not sub menu trigger), moves focus to the next menu. | +| ArrowLeft | When focus is on an item (not sub menu item), moves focus to the previous menu. | +| ArrowRight / ArrowLeft | When focus is on a sub menu trigger, opens or closes the submenu depending on reading direction. | +| Home | When focus is on an item, moves focus to first item. | +| End | When focus is on an item, moves focus to last item. | +| Esc | Closes the menu. | diff --git a/apps/docs/src/routes/docs/core/components/number-field.mdx b/apps/docs/src/routes/docs/core/(1)components/number-field.mdx similarity index 80% rename from apps/docs/src/routes/docs/core/components/number-field.mdx rename to apps/docs/src/routes/docs/core/(1)components/number-field.mdx index ba5139de1..436e17151 100644 --- a/apps/docs/src/routes/docs/core/components/number-field.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/number-field.mdx @@ -1,4 +1,17 @@ -import { Preview, TabsSnippets } from "../../../../components"; +--- +title: Number Field +badges: + - icon: npm + label: "Since v0.12.3" + - label: "@kobalte/core/number-field" + - icon: source + label: "Source" + url: "https://github.com/kobaltedev/kobalte/tree/main/packages/core/src/number-field" + - icon: aria + label: "Spinbutton" + url: "https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/" +--- + import { ControlledExample, DefaultValueExample, @@ -10,7 +23,7 @@ import { TriggersExample, } from "../../../../examples/number-field"; -# Number Field +# {frontmatter.title} A number input that allow users to input custom number entries with a keyboard. @@ -65,115 +78,21 @@ The number field consists of: ## Example - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { NumberField } from "@kobalte/core/number-field"; - import "./style.css"; - - function App() { - return ( - - - Quantity - -
- - - -
-
- ); - } - ``` - -
- - ```css - .number-field { - display: flex; - flex-direction: column; - gap: 4px; - } - - .number-field__label { - color: hsl(240 6% 10%); - font-size: 14px; - font-weight: 500; - user-select: none; - } - - .number-field__input { - display: inline-flex; - width: 200px; - border-radius: 6px; - padding: 6px 12px; - font-size: 16px; - outline: none; - background-color: white; - border: 1px solid hsl(240 6% 90%); - color: hsl(240 4% 16%); - transition: - border-color 250ms, - color 250ms; - } - - .number-field__group { - position: relative; - border-radius: 6px; - } - - .number-field__increment { - top: .25rem; - border-top-left-radius: .25rem; - border-top-right-radius: .25rem; - } - - .number-field__decrement { - bottom: .25rem; - border-bottom-left-radius: .25rem; - border-bottom-right-radius: .25rem; - } - - .number-field__increment, .number-field__decrement { - right: .25rem; - position: absolute; - height: 1rem; - width: 1rem; - background: rgba(0,0,0,0.1); - cursor: default; - } - - .number-field__increment:hover, .number-field__decrement:hover { - background: rgba(0,0,0,0.2); - } - - .number-field__input:hover { - border-color: hsl(240 5% 65%); - } - - .number-field__input:focus-visible { - outline: none; - } - - .number-field__group:focus-within { - outline: 2px solid hsl(200 98% 39%); - outline-offset: 2px; - } - ``` - - - {/* */} -
+:::preview + + + +--- + +```tsx title="index.tsx" tab file="../../../../examples/number-field.tsx#L6-L31" + +``` + +```css title="style.css" tab file="../../../../examples/number-field.module.css" + +``` + +::: ## Usage @@ -181,11 +100,13 @@ The number field consists of: An initial, uncontrolled value can be provided using the `defaultValue` prop. - - - +:::preview + + + +--- -```tsx {0} +```tsx {1} Quantity
@@ -196,6 +117,8 @@ An initial, uncontrolled value can be provided using the `defaultValue` prop. ``` +::: + ### Controlled value The `value` and `rawValue` props can be used to make the value controlled. @@ -203,11 +126,13 @@ It is recommended to only use the `rawValue` as it is of type `number`. The `onChange` event is fired when the user type into the input and receive the new value. The `onRawValueChange` prop is called when the value changes and receives a `number`. - - - +:::preview + + -```tsx {3,4,9-12} +--- + +```tsx {4,5,10-13} import { createSignal } from "solid-js"; function ControlledExample() { @@ -237,15 +162,19 @@ function ControlledExample() { } ``` +::: + ### Description The `NumberField.Description` component can be used to associate additional help text with a number field. - - - +:::preview -```tsx {7} + + +--- + +```tsx {8} Quantity
@@ -257,17 +186,21 @@ The `NumberField.Description` component can be used to associate additional help ``` +::: + ### Error message The `NumberField.ErrorMessage` component can be used to help the user fix a validation error. It should be combined with the `validationState` prop to semantically mark the text field as invalid for assistive technologies. By default, it will render only when the `validationState` prop is set to `invalid`, use the `forceMount` prop to always render the error message (ex: for usage with animation libraries). - - - +:::preview + + -```tsx {8,16} +--- + +```tsx {9,17} import { createSignal } from "solid-js"; function ErrorMessageExample() { @@ -290,17 +223,21 @@ function ErrorMessageExample() { } ``` +::: + ### HTML forms The number field `name` prop along with `` can be used for integration with HTML forms. Only the raw value is passed to the form. If the formatted value is wanted (unrecommended) set the `name` attribute on ``. - - - +:::preview + + + +--- -```tsx {7,9} +```tsx {8,10} function HTMLFormExample() { const onSubmit = (e: SubmitEvent) => { // handle form submission. @@ -326,15 +263,19 @@ function HTMLFormExample() { } ``` +::: + ### Triggers The number field supports optional increment/decrement triggers that are easily customizable. - - - +:::preview + + -```tsx {3,5} +--- + +```tsx {4,6} Quantity
@@ -345,15 +286,19 @@ The number field supports optional increment/decrement triggers that are easily ``` +::: + ### Format The value of the number field component can be formatted based on the [locale with the `I18NProvider`](/docs/core/components/i18n-provider) and `formatOptions`. For more information see [React Spectrum NumberField](https://react-spectrum.adobe.com/react-spectrum/NumberField.html). - - - +:::preview -```tsx {0} + + +--- + +```tsx {1} Price
@@ -364,11 +309,13 @@ The value of the number field component can be formatted based on the [locale wi ``` +::: + ### Autofill The number field supports autofill through `NumberField.HiddenInput`. -```tsx {2} +```tsx {3} Quantity diff --git a/apps/docs/src/routes/docs/core/components/otp-field.mdx b/apps/docs/src/routes/docs/core/(1)components/otp-field.mdx similarity index 67% rename from apps/docs/src/routes/docs/core/components/otp-field.mdx rename to apps/docs/src/routes/docs/core/(1)components/otp-field.mdx index d6eec5931..2453b9268 100644 --- a/apps/docs/src/routes/docs/core/components/otp-field.mdx +++ b/apps/docs/src/routes/docs/core/(1)components/otp-field.mdx @@ -44,7 +44,7 @@ The OTP field consists of: - **OTPField.Input**: The hidden native `` that handles keyboard events, autofill, and selection tracking. - **OTPField.Description**: A description that gives the user more information on the OTP field. - **OTPField.ErrorMessage**: An error message that gives the user information on how to fix a validation error. -- **Slot** *(user-defined)*: A visual character cell built with `useOTPFieldContext`. +- **Slot** _(user-defined)_: A visual character cell built with `useOTPFieldContext`. ```tsx @@ -163,7 +163,7 @@ An initial, uncontrolled value can be provided using the `defaultValue` prop. ```tsx {0} - {(i) => } + {i => } ``` @@ -185,7 +185,7 @@ function ControlledExample() { <> - {(i) => } + {i => }

Value: {value()}

@@ -202,12 +202,9 @@ The `onComplete` prop fires once when all slots are filled. ```tsx {5-7} - console.log("Complete:", v)} -> + console.log("Complete:", v)}> - {(i) => } + {i => } ``` @@ -222,7 +219,7 @@ By default the input only accepts digits (`^\d*$`). Pass a `pattern` prop on `OT ```tsx {2} - {(i) => } + {i => } ``` @@ -311,9 +308,7 @@ function ValidationExample() { Verification code {/* ...slots... */} - - Enter the 6-digit code sent to your device. - + Enter the 6-digit code sent to your device. Please enter all 6 digits. ); @@ -332,7 +327,7 @@ Add a `name` prop to `OTPField.Input` to include the value in form submissions. - {(i) => } + {i => } ``` @@ -343,73 +338,73 @@ Add a `name` prop to `OTPField.Input` to include the value in form submissions. `OTPField` is equivalent to the `Root` import from `@kobalte/core/otp-field` (and deprecated `OTPField.Root`). -| Prop | Description | -| :--------------- | :-------------------------------------------------------------------------------------------------------------- | -| maxLength | `number`
The maximum number of characters the OTP field accepts. | -| value | `string`
The controlled value of the OTP field. | -| defaultValue | `string`
The default value when initially rendered. Useful when you do not need to control the value. | -| onChange | `(value: string) => void`
Event handler called when the value changes. | -| onComplete | `(value: string) => void`
Event handler called once when all slots are filled. | -| shiftPWManagers | `boolean`
Whether to shift password manager icons to the right to avoid overlapping slots. Defaults to `true`. | -| id | `string`
A unique identifier. Used to generate ids for nested Label, Description, and ErrorMessage. Auto-generated if not provided. | -| name | `string`
The name used when submitting an HTML form. | -| validationState | `'valid' \| 'invalid'`
Whether the OTP field should display its "valid" or "invalid" visual styling. | -| required | `boolean`
Whether the user must fill the OTP field before the form can be submitted. | -| disabled | `boolean`
Whether the OTP field is disabled. | -| readOnly | `boolean`
Whether the OTP field is read only. | +| Prop | Description | +| :-------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | +| maxLength | `number`
The maximum number of characters the OTP field accepts. | +| value | `string`
The controlled value of the OTP field. | +| defaultValue | `string`
The default value when initially rendered. Useful when you do not need to control the value. | +| onChange | `(value: string) => void`
Event handler called when the value changes. | +| onComplete | `(value: string) => void`
Event handler called once when all slots are filled. | +| shiftPWManagers | `boolean`
Whether to shift password manager icons to the right to avoid overlapping slots. Defaults to `true`. | +| id | `string`
A unique identifier. Used to generate ids for nested Label, Description, and ErrorMessage. Auto-generated if not provided. | +| name | `string`
The name used when submitting an HTML form. | +| validationState | `'valid' \| 'invalid'`
Whether the OTP field should display its "valid" or "invalid" visual styling. | +| required | `boolean`
Whether the user must fill the OTP field before the form can be submitted. | +| disabled | `boolean`
Whether the OTP field is disabled. | +| readOnly | `boolean`
Whether the OTP field is read only. | ### OTPField.Label -| Prop | Description | -| :--- | :---------- | +| Prop | Description | +| :--- | :------------------------------------------------------------------------------------------- | | `id` | `string`
The id of the label element. Auto-generated from the root id if not provided. | ### OTPField.Description -| Prop | Description | -| :--- | :---------- | +| Prop | Description | +| :--- | :------------------------------------------------------------------------------------------------- | | `id` | `string`
The id of the description element. Auto-generated from the root id if not provided. | ### OTPField.ErrorMessage -| Prop | Description | -| :----------- | :--------------------------------------------------------------------------------------------------------------------------------------- | +| Prop | Description | +| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------- | | `forceMount` | `boolean`
Used to force mounting when more control is needed. Useful when controlling animation with SolidJS animation libraries. | ### OTPField.Input -| Prop | Description | -| :------------------ | :--------------------------------------------------------------------------------------------------------------------------------------- | -| pattern | `string \| null`
Regex pattern for allowed characters. Defaults to `'^\d*$'` (digits only). Pass `null` to allow any character. | -| noScriptCSSFallback | `string \| null`
CSS injected via `
` for one visible month (or duration). Accepts an `offset` prop to show additional months. -- **Calendar.GridHeader:** The `` section. -- **Calendar.GridHeaderRow:** A row of day-name header cells. -- **Calendar.GridHeaderCell:** A single day-name cell (e.g. "Mo"). -- **Calendar.GridBody:** The `` section. -- **Calendar.GridBodyRow:** A week row. Requires a `weekIndex` prop. -- **Calendar.GridBodyCell:** A `
` wrapping one day. Requires a `date` prop. -- **Calendar.GridBodyCellTrigger:** The interactive button inside each cell. - -```tsx - - - - - - - - - - - {(day) => {day()}} - - - - {(weekIndex) => ( - - {(date) => ( - }> - {(d) => ( - - - - )} - - )} - - )} - - - - -``` - -## Example - - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { Show } from "solid-js"; - import { Calendar } from "@kobalte/core/calendar"; - import { GregorianCalendar } from "@internationalized/date"; - import "./style.css"; - - const createCalendar = () => new GregorianCalendar(); - - function App() { - return ( - - - - ‹ - - - - › - - - - - - - {(day) => ( - - {day().slice(0, 2)} - - )} - - - - {(weekIndex) => ( - - {(date) => ( - }> - {(d) => ( - - - - )} - - )} - - )} - - - - - ); - } - ``` - - - ```css - .calendar { - display: inline-block; - background-color: white; - border: 1px solid hsl(214 32% 91%); - border-radius: 10px; - padding: 16px; - } - - .calendar__header { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 12px; - } - - .calendar__heading { - font-size: 14px; - font-weight: 600; - } - - .calendar__nav-button { - display: inline-flex; - align-items: center; - justify-content: center; - width: 28px; - height: 28px; - border-radius: 6px; - border: 1px solid hsl(214 32% 91%); - background-color: white; - cursor: pointer; - } - - .calendar__nav-button[disabled] { - opacity: 0.4; - cursor: default; - } - - .calendar__body { - display: flex; - gap: 24px; - } - - .calendar__grid { - border-collapse: collapse; - } - - .calendar__day-name { - font-size: 11px; - text-align: center; - padding: 4px 0 8px; - text-transform: uppercase; - } - - .calendar__cell-trigger { - display: flex; - align-items: center; - justify-content: center; - width: 32px; - height: 32px; - border-radius: 9999px; - font-size: 13px; - cursor: pointer; - } - - .calendar__cell-trigger[data-selected] { - background-color: hsl(221 83% 53%); - color: white; - } - - .calendar__cell-trigger[data-today] { - font-weight: 600; - color: hsl(221 83% 53%); - } - - .calendar__cell-trigger[data-disabled] { - opacity: 0.3; - cursor: default; - } - - .calendar__cell-trigger[data-unavailable] { - text-decoration: line-through; - opacity: 0.4; - cursor: default; - } - - .calendar__cell-trigger[data-outside-month] { - opacity: 0.2; - } - ``` - - {/* */} - - -## Usage - -### Selection modes - -Use `selectionMode` to control what the user can pick. - -**Single** — default, picks one date at a time: - -```tsx - - ... - -``` - -**Multiple** — click any day to toggle it; multiple dates can be selected simultaneously: - - - - - -```tsx - - ... - -``` - -**Range** — click a start date, then an end date to select a contiguous span. Show multiple months side-by-side by setting `visibleDuration` and rendering additional `Calendar.Grid` elements with an `offset`: - - - - - -```tsx - - ... - - - - - -``` - -### Controlled value - -Pass `value` and `onChange` to control the selection externally. The value type matches the selection mode: `DateValue` for `"single"`, `DateValue[]` for `"multiple"`, and `RangeValue` for `"range"`. - - - - - -```tsx -import { createSignal } from "solid-js"; -import type { DateValue } from "@kobalte/core/calendar"; - -function App() { - const [value, setValue] = createSignal(null); - - return ( - setValue(v)} - > - ... - - ); -} -``` - -### Unavailable dates - -Use `isDateUnavailable` to mark specific dates as unselectable. Unavailable dates receive `data-unavailable` and cannot be focused via keyboard navigation. - - - - - -```tsx -import { isWeekend } from "@internationalized/date"; - - isWeekend(date, "en-US")} -> - ... - -``` - -In range mode, combine with `allowsNonContiguousRanges` to permit ranges that span unavailable dates: - -```tsx - isWeekend(date, "en-US")} - allowsNonContiguousRanges -> - ... - -``` - -### Min / max dates - -Constrain selectable dates with `minValue` and `maxValue`. Dates outside the range are disabled. - -```tsx -import { CalendarDate } from "@internationalized/date"; - - - ... - -``` - -### Default value - -Use `defaultValue` for an uncontrolled calendar with an initial selection: - -```tsx -import { CalendarDate } from "@internationalized/date"; - - - ... - -``` - -### Read only - -Set `readOnly` to show the current selection without allowing changes: - -```tsx - - ... - -``` - -### Disabled - -Set `disabled` to render the calendar in a non-interactive state: - -```tsx - - ... - -``` - -### Locale - -Pass a BCP 47 locale string to `locale` to control formatting (day names, month names, week start day): - -```tsx - - ... - -``` - -### Non-Gregorian calendars - -Supply any `@internationalized/date` calendar to `createCalendar`. The component adapts its grid logic automatically: - -```tsx -import { HebrewCalendar } from "@internationalized/date"; - - new HebrewCalendar()} selectionMode="single"> - ... - -``` - -## Date picker pattern - -Combine `Calendar` with `Popover` to build a date picker — an input that shows the selected date and a button that opens the calendar in a floating panel. - - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { createMemo, createSignal, Show } from "solid-js"; - import { Calendar, type DateValue } from "@kobalte/core/calendar"; - import { Popover } from "@kobalte/core/popover"; - import { GregorianCalendar } from "@internationalized/date"; - import "./style.css"; - - const createCalendar = () => new GregorianCalendar(); - - function DatePicker() { - const [open, setOpen] = createSignal(false); - const [value, setValue] = createSignal(null); - - const formatted = createMemo(() => { - const v = value(); - if (!v) return ""; - const tz = Intl.DateTimeFormat().resolvedOptions().timeZone; - return new Intl.DateTimeFormat("en-US", { - month: "long", day: "numeric", year: "numeric", - }).format(v.toDate(tz)); - }); - - return ( - - - - - {/* calendar icon */} - - - - - { - setValue(v as DateValue); - setOpen(false); - }} - class="calendar" - > - - - - - - - - - - {(day) => {day().slice(0, 2)}} - - - - {(weekIndex) => ( - - {(date) => ( - }> - {(d) => ( - - - - )} - - )} - - )} - - - - - - - - ); - } - ``` - - - ```css - .datepicker { - display: inline-flex; - align-items: center; - border: 1px solid hsl(214 32% 91%); - border-radius: 8px; - background-color: white; - overflow: hidden; - } - - .datepicker:focus-within { - box-shadow: 0 0 0 2px hsl(221 83% 53% / 0.3); - border-color: hsl(221 83% 53%); - } - - .datepicker__input { - flex: 1; - border: none; - outline: none; - padding: 0 12px; - height: 38px; - font-size: 14px; - background: transparent; - cursor: default; - min-width: 180px; - } - - .datepicker__input::placeholder { - color: hsl(215 16% 65%); - } - - .datepicker__button { - display: inline-flex; - align-items: center; - justify-content: center; - width: 36px; - height: 38px; - border: none; - border-left: 1px solid hsl(214 32% 91%); - background-color: white; - cursor: pointer; - } - - .datepicker__button:hover, - .datepicker__button[data-expanded] { - background-color: hsl(210 40% 96%); - color: hsl(221 83% 53%); - } - - .datepicker__popover { - z-index: 50; - transform-origin: var(--kb-popover-content-transform-origin); - animation: datepicker-hide 150ms ease-in forwards; - } - - .datepicker__popover[data-expanded] { - animation: datepicker-show 150ms ease-out; - } - - @keyframes datepicker-show { - from { opacity: 0; transform: translateY(-4px); } - to { opacity: 1; transform: translateY(0); } - } - - @keyframes datepicker-hide { - from { opacity: 1; transform: translateY(0); } - to { opacity: 0; transform: translateY(-4px); } - } - ``` - - {/* */} - - -## Data attributes - -### Calendar.GridBodyCellTrigger - -| Attribute | Value | -|---|---| -| `data-selected` | Present when the date is selected. | -| `data-today` | Present when the date is today. | -| `data-highlighted` | Present when the date is focused (keyboard). | -| `data-disabled` | Present when the date is disabled. | -| `data-unavailable` | Present when `isDateUnavailable` returns `true`. | -| `data-invalid` | Present when `validationState="invalid"`. | -| `data-weekend` | Present for weekend dates. | -| `data-outside-month` | Present when the date falls outside the grid's month. | -| `data-outside-visible-range` | Present when the date falls outside the visible range. | -| `data-selection-start` | Present on the start date of a range selection. | -| `data-selection-end` | Present on the end date of a range selection. | -| `data-value` | The ISO string of the date (e.g. `"2025-06-15"`). | -| `data-type` | Always `"day"`. | - -## Credits - -Calendar logic ported from [corvu/calendar](https://github.com/corvudev/corvu/tree/main/packages/calendar) by Jasmin Noetzli, licensed MIT. State management also draws on [React Spectrum's `useCalendarState`](https://github.com/adobe/react-spectrum), licensed Apache 2.0. diff --git a/apps/docs/src/routes/docs/core/components/color-slider.mdx b/apps/docs/src/routes/docs/core/components/color-slider.mdx deleted file mode 100644 index b59973271..000000000 --- a/apps/docs/src/routes/docs/core/components/color-slider.mdx +++ /dev/null @@ -1,525 +0,0 @@ -import { Preview, TabsSnippets, Kbd } from "../../../../components"; -import { - BasicExample, - DefaultValueExample, - ControlledValueExample, - VerticalSliderExample, - CustomValueExample, -} from "../../../../examples/color-slider"; - -# Color Slider - -Adjusts an individual channel of a color value. - -## Import - -```ts -import { ColorSlider } from "@kobalte/core/color-slider"; -// or -import { Root, Track, ... } from "@kobalte/core/color-slider"; -``` - -## Features - -- Can be controlled or uncontrolled. -- Localized color descriptions for screen reader users. -- Support for adjusting a single channel of RGBA, HSLA and HSBA colors, in both horizontal and vertical orientations. -- Support click or touch on track to change value. -- Support right or left direction. -- Support for custom value label. - -## Anatomy - -The color slider consists of: - -- **ColorSlider:** The root container for the color slider. -- **ColorSlider.Track:** The component that visually represents the color slider track. -- **ColorSlider.Thumb:** The thumb that is used to visually indicate a value in the color slider. -- **ColorSlider.Input:** The native html input that is visually hidden in the color slider thumb. -- **ColorSlider.Label:** The label that gives the user information on the color slider. -- **ColorSlider.ValueLabel:** The accessible label text representing the current value in a human-readable format. - -```tsx - - - - - - - - - -``` - -## Example - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { ColorSlider } from "@kobalte/core/color-slider"; - import { parseColor } from "@kobalte/core/colors"; - import "./style.css"; - - function App() { - return ( - -
- Blue - -
- - - - - -
- ); - } - ``` - -
- - ```css - .ColorSliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - width: 200px; - } - - .ColorSliderTrack { - position: relative; - border-radius: 6px; - height: 24px; - width: 100%; - } - - .ColorSliderThumb { - display: block; - top: 4px; - width: 16px; - height: 16px; - border-radius: 9999px; - border: 2px solid #fff; - background: var(--kb-color-current); - } - - .ColorSliderThumb:focus { - outline: none; - } - - .ColorSliderLabel { - display: flex; - justify-content: space-between; - width: 100%; - } - ``` - - -{/* */} -
- -## Usage - -The value provided to `defaultValue` or `value` should be `Color` object. You can obtain a Color object by using the `parseColor` function to parse a color from a string. The `channel` prop must also be provided to specify which color channel the slider should display. -This must be one of the channels included in the color value, for example, for RGB colors, the "red", "green", and "blue" channels are available. - -### Default value - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { ColorSlider } from "@kobalte/core/color-slider"; - import { parseColor } from "@kobalte/core/colors"; - import "./style.css"; - - function App() { - return ( - -
- Hue - -
- - - - - -
- ); - } - ``` - -
- - ```css - .ColorSliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - width: 200px; - } - - .ColorSliderTrack { - position: relative; - border-radius: 6px; - height: 24px; - width: 100%; - } - - .ColorSliderThumb { - display: block; - top: 4px; - width: 16px; - height: 16px; - border-radius: 9999px; - border: 2px solid #fff; - box-shadow: 0 0 0 1px #0000006b; - } - - .ColorSliderThumb:focus { - outline: none; - } - - .ColorSliderLabel { - display: flex; - justify-content: space-between; - width: 100%; - } - ``` - - -{/* */} -
- -### Controlled value - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { createSignal } from "solid-js"; - import { ColorSlider } from "@kobalte/core/color-slider"; - import { parseColor } from "@kobalte/core/colors"; - import "./style.css"; - - function App() { - const [value, setValue] = createSignal(parseColor('hsl(0, 100%, 50%)')); - return ( - -
- Hue - -
- - - - - -
- ); - } - ``` - -
- - ```css - .ColorSliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - width: 200px; - } - - .ColorSliderTrack { - position: relative; - border-radius: 6px; - height: 24px; - width: 100%; - } - - .ColorSliderThumb { - display: block; - top: 4px; - width: 16px; - height: 16px; - border-radius: 9999px; - border: 2px solid #fff; - box-shadow: 0 0 0 1px #0000006b; - } - - .ColorSliderThumb:focus { - outline: none; - } - - .ColorSliderLabel { - display: flex; - justify-content: space-between; - width: 100%; - } - ``` - - -{/* */} -
- -### Vertical Slider - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { ColorSlider } from "@kobalte/core/color-slider"; - import { parseColor } from "@kobalte/core/colors"; - import "./style.css"; - - function App() { - return ( - -
- Hue - -
- - - - - -
- ); - } - ``` - -
- - ```css - .ColorSliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - height: 200px; - } - - .ColorSliderTrack { - position: relative; - border-radius: 6px; - height: 100%; - width: 24px; - } - - .ColorSliderThumb { - display: block; - left: 4px; - width: 16px; - height: 16px; - border-radius: 9999px; - border: 2px solid #fff; - box-shadow: 0 0 0 1px #0000006b; - } - - .ColorSliderThumb:focus { - outline: none; - } - - .ColorSliderLabel { - display: flex; - justify-content: space-between; - width: 100%; - } - ``` - - -{/* */} -
- -### Custom Value Label - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { ColorSlider } from "@kobalte/core/color-slider"; - import { parseColor } from "@kobalte/core/colors"; - import "./style.css"; - - function App() { - return ( - `${param.toFormat("rgb")}`}> -
- -
- - - - - -
- ); - } - ``` - -
- - ```css - .ColorSliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - width: 200px; - } - - .ColorSliderTrack { - position: relative; - border-radius: 6px; - height: 24px; - width: 100%; - } - - .ColorSliderThumb { - display: block; - top: 4px; - width: 16px; - height: 16px; - border-radius: 9999px; - border: 2px solid #fff; - box-shadow: 0 0 0 1px #0000006b; - } - - .ColorSliderThumb:focus { - outline: none; - } - - .ColorSliderLabel { - display: flex; - justify-content: space-between; - width: 100%; - } - ``` - - -{/* */} -
- -## API Reference - -### ColorSlider - -`ColorSlider` is equivalent to the `Root` import from `@kobalte/core/color-slider`. - -| Prop | Description | -| :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------- | -| value | `Color`
The controlled value of the slider. Must be used in conjunction with `onChange`. | -| defaultValue | `Color`
The value of the slider when initially rendered. Use when you do not need to control the state of the slider. | -| channel | `ColorChannel`
The color channel that the slider manipulates. | -| colorSpace | `ColorSpace`
The color space that the slider operates in. The `channel` must be in this color space. | -| onChange | `(value: Color) => void`
Event handler called when the value changes. | -| onChangeEnd | `(value: Color) => void`
Event handler called when the value changes at the end of an interaction. | -| getValueLabel | `(param: Color) => string`
A function to get the accessible label text representing the current value in a human-readable format. | -| orientation | `'horizontal' \| 'vertical'`
The orientation of the slider. | -| name | `string`
The name of the slider, used when submitting an HTML form. | -| validationState | `'valid' \| 'invalid'`
Whether the slider should display its "valid" or "invalid" visual styling. | -| required | `boolean`
Whether the user must check a radio group item before the owning form can be submitted. | -| disabled | `boolean`
Whether the radio group is disabled. | -| readOnly | `boolean`
Whether the radio group items can be selected but not changed by the user. | -| translations | `ColorIntlTranslations`
Localization strings. | - -| Data attribute | Description | -| :---------------------------- | :--------------------------------------------------------------------------------- | -| data-orientation='horizontal' | Present when the slider has horizontal orientation. | -| data-orientation='vertical' | Present when the slider has vertical orientation. | -| data-valid | Present when the slider is valid according to the validation rules. | -| data-invalid | Present when the slider is invalid according to the validation rules. | -| data-required | Present when the user must slider an item before the owning form can be submitted. | -| data-disabled | Present when the slider is disabled. | -| data-readonly | Present when the slider is read only. | - -`ColorSlider.ValueLabel`, `ColorSlider.Input`, `ColorSlider.Thumb` and `ColorSlider.Track` share the same data-attributes. - -### ColorSlider.Thumb - -The current color is available on the thumb using the custom css property `--kb-color-current`. - -## Rendered elements - -| Component | Default rendered element | -| :------------------------- | :----------------------- | -| `ColorSlider` | `div` | -| `ColorSlider.Track` | `div` | -| `ColorSlider.Thumb` | `span` | -| `ColorSlider.Input` | `input` | -| `ColorSlider.ValueLabel` | `div` | -| `ColorSlider.Label` | `label` | -| `ColorSlider.Description` | `div` | -| `ColorSlider.ErrorMessage` | `div` | - -## Accessibility - -### Keyboard Interactions - -| Key | Description | -| :-------------------- | :------------------------------------------------------------------ | -| PageUp | Increases the value of the thumb by a larger step. | -| PageDown | Decreases the value of the thumb by a larger step. | -| ArrowDown | Decreases the value of the thumb by the step amount. | -| ArrowUp | Increases the value of the thumb by the step amount. | -| ArrowRight | Increments/decrements by the step value depending on `orientation`. | -| ArrowLeft | Increments/decrements by the step value depending on `orientation`. | -| Home | Sets the value of the thumb to the minimum value. | -| End | Sets the value of the thumb to the maximum value. | diff --git a/apps/docs/src/routes/docs/core/components/color-swatch.mdx b/apps/docs/src/routes/docs/core/components/color-swatch.mdx deleted file mode 100644 index b2e5f8ad1..000000000 --- a/apps/docs/src/routes/docs/core/components/color-swatch.mdx +++ /dev/null @@ -1,171 +0,0 @@ -import { Preview, TabsSnippets, Kbd } from "../../../../components"; -import { - BasicExample, - ValueExample, - CustomColorNameExample, -} from "../../../../examples/color-swatch"; - -# Color Swatch - -Displays a preview of a selected color. - -## Import - -```ts -import { ColorSwatch } from "@kobalte/core/color-swatch"; -// or -import { Root } from "@kobalte/core/color-swatch"; -``` - -## Features - -- Localized color descriptions for screen reader users. - -## Anatomy - -The color swatch consists of: - -- **ColorSwatch:** The root container for the color swatch. - -```tsx - -``` - -## Example - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { ColorSwatch } from "@kobalte/core/color-swatch"; - import { parseColor } from "@kobalte/core/colors"; - import "./style.css"; - - function App() { - return ( - - ); - } - ``` - - - - ```css - .ColorSwatchRoot { - height: 56px; - width: 56px; - border-radius: 6px; - } - ``` - - -{/* */} - - -## Usage - -ColorSwatch accepts a value via the `value` prop. The value should be `Color` object. You can obtain a Color object by using the `parseColor` function to parse a color from a string. - -### Value - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { ColorSwatch } from "@kobalte/core/color-swatch"; - import { parseColor } from "@kobalte/core/colors"; - import "./style.css"; - - function App() { - return ( - - ); - } - ``` - - - - ```css - .ColorSwatchRoot { - height: 56px; - width: 56px; - border-radius: 6px; - } - ``` - - -{/* */} - - -### Custom Color Name - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { ColorSwatch } from "@kobalte/core/color-swatch"; - import { parseColor } from "@kobalte/core/colors"; - import "./style.css"; - - function App() { - return ( - - ); - } - ``` - - - - ```css - .ColorSwatchRoot { - height: 56px; - width: 56px; - border-radius: 6px; - } - ``` - - -{/* */} - - -## API Reference - -### ColorSwatch - -`ColorSwatch` is equivalent to the `Root` import from `@kobalte/core/color-swatch`. - -| Prop | Description | -| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| value | `Color`
The color value to display in the swatch. | -| colorName | `string`
A localized accessible name for the color. By default, a description is generated from the color value, but this can be overridden if you have a more specific color name (e.g. Pantone colors). | -| translations | `ColorSwatchIntlTranslations`
Localization strings. | - -## Rendered elements - -| Component | Default rendered element | -| :------------ | :----------------------- | -| `ColorSwatch` | `div` | diff --git a/apps/docs/src/routes/docs/core/components/drawer.mdx b/apps/docs/src/routes/docs/core/components/drawer.mdx deleted file mode 100644 index 4ebbc07ad..000000000 --- a/apps/docs/src/routes/docs/core/components/drawer.mdx +++ /dev/null @@ -1,464 +0,0 @@ -import { Preview, Kbd, TabsSnippets } from "../../../../components"; -import { BasicExample, SnapPointsExample, ControlledExample } from "../../../../examples/drawer"; - -# Drawer - -A panel that slides in from the edge of the screen with drag-to-dismiss and snap-point support. Built on [Dialog](/docs/core/components/dialog) with a two-signal open pattern so content stays mounted during the closing animation. - -## Import - -```ts -import { Drawer } from "@kobalte/core/drawer"; -// or -import { Root, Trigger, Content, Overlay, Portal, CloseButton, Title, Description } from "@kobalte/core/drawer"; -``` - -## Features - -- Slides in from any of the four edges (`bottom`, `top`, `left`, `right`). -- Drag-to-dismiss with configurable snap points and velocity-based release. -- Overlay opacity tracks the drag position in real time. -- Scrollable children are handled automatically — the drag gesture does not conflict with internal scrolling. -- Snap points accept fractional values (`0`–`1`) or absolute pixel strings (`"200px"`). -- Programmatic snap-point control via `useContext().setActiveSnapPoint`. -- Supports modal and non-modal modes. -- Focus is trapped and scroll is locked when modal. -- Pressing Esc closes the drawer. -- Can be controlled or uncontrolled. - -## Anatomy - -- **Drawer:** Contains all the parts of a drawer. -- **Drawer.Trigger:** The button that opens the drawer. -- **Drawer.Portal:** Portals its children into the `body` when the drawer is open. -- **Drawer.Overlay:** The layer that covers the inert portion of the view when the drawer is open. Opacity is driven automatically by `openPercentage`. -- **Drawer.Content:** Contains the content rendered when the drawer is open. Handles all pointer and touch drag gestures. -- **Drawer.CloseButton:** The button that closes the drawer. -- **Drawer.Title:** An accessible title announced when the drawer is opened. -- **Drawer.Description:** An optional accessible description announced when the drawer is opened. - -```tsx - - - - - - - - - - - -``` - -## Example - - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { Drawer } from "@kobalte/core/drawer"; - import { CrossIcon } from "some-icon-library"; - import "./style.css"; - - function App() { - return ( - - Open drawer - - - -
-
- Drawer - - - -
- - Drag the handle or swipe down to dismiss. - - - - - ); - } - ``` - - - ```css - .drawer__trigger { - display: inline-flex; - align-items: center; - justify-content: center; - height: 40px; - padding: 0 16px; - border: none; - border-radius: 6px; - background-color: hsl(200 98% 39%); - color: white; - font-size: 16px; - cursor: pointer; - } - - /* Opacity is driven by JS (openPercentage). Only a CSS transition is needed. */ - .drawer__overlay { - position: fixed; - inset: 0; - z-index: 50; - background-color: rgb(0 0 0 / 0.4); - transition: opacity 350ms cubic-bezier(0.32, 0.72, 0, 1); - } - - .drawer__content { - position: fixed; - z-index: 50; - bottom: 0; - left: 0; - width: 100%; - height: 320px; - background-color: white; - border-radius: 12px 12px 0 0; - border-top: 1px solid hsl(240 5% 84%); - padding: 16px 24px 32px; - outline: none; - /* The drawer applies transform via inline style. This transition animates it. */ - transition: transform 350ms cubic-bezier(0.32, 0.72, 0, 1); - } - - .drawer__handle { - width: 48px; - height: 4px; - background-color: hsl(240 5% 84%); - border-radius: 9999px; - margin: 0 auto 16px; - } - - .drawer__header { - display: flex; - align-items: baseline; - justify-content: space-between; - margin-bottom: 8px; - } - - .drawer__close-button { - height: 16px; - width: 16px; - color: hsl(240 5% 34%); - } - - .drawer__title { - font-size: 18px; - font-weight: 500; - color: hsl(240 6% 10%); - } - - .drawer__description { - font-size: 14px; - color: hsl(240 5% 26%); - } - ``` - - {/* */} - - -## Usage - -### Side - -Use the `side` prop to control which edge of the viewport the drawer slides in from. - -```tsx -... -... -... -... {/* default */} -``` - -The `Drawer.Content` must be positioned against the matching edge: - -```css -/* right drawer */ -.drawer__content { - position: fixed; - top: 0; - right: 0; - height: 100%; - width: 320px; - transition: transform 350ms cubic-bezier(0.32, 0.72, 0, 1); -} - -/* bottom drawer */ -.drawer__content { - position: fixed; - bottom: 0; - left: 0; - width: 100%; - height: 320px; - transition: transform 350ms cubic-bezier(0.32, 0.72, 0, 1); -} -``` - -### Snap points - -Snap points define the positions the drawer can settle at. Each value is either a fraction of the drawer size (`0` = fully closed, `1` = fully open) or a pixel string (`"200px"`). - - - - - -```tsx -// Three snap points: closed, 40% peek, fully open - - ... - - -// Pixel-based snap point - - ... - -``` - -`defaultSnapPoint` sets which snap point the drawer opens to. Defaults to `1` (fully open). - -### Default open - -```tsx -... -``` - -### Controlled open - -The `open` prop makes the open state controlled. The `onOpenChange` event fires whenever the user interacts with the trigger, overlay, close button, or escape key. - - - - - -```tsx {3,6} -import { createSignal } from "solid-js"; - -function ControlledExample() { - const [open, setOpen] = createSignal(false); - - return ( - - ... - - ); -} -``` - -### Programmatic snap - -Access `setActiveSnapPoint` from context to snap to a specific position without dragging. - -```tsx -import { Drawer } from "@kobalte/core/drawer"; - -function SnapButtons() { - const ctx = Drawer.useContext(); - - return ( - <> - - - - ); -} - -function App() { - return ( - - Open - - - - - - - - ); -} -``` - -### Non-modal - -Set `modal={false}` to keep the background interactive and remove the overlay. Focus is not trapped. - -```tsx - - Open - - {/* No Drawer.Overlay */} - ... - - -``` - -### Drag handle - -Add a visible drag handle to hint that the drawer is draggable. Any element inside `Drawer.Content` is draggable by default — use `data-no-drag` to opt specific elements out. - -```tsx - -
- ... - {/* This element will not initiate a drag */} -
Non-draggable region
- -``` - -### Animating the overlay - -`Drawer.Overlay` automatically drives its `opacity` from the drawer's `openPercentage` (0 when fully closed, 1 when fully open). This means opacity tracks the drag position in real time with no extra JavaScript. - -To animate the opacity on open/close, add a CSS transition: - -```css -.drawer__overlay { - position: fixed; - inset: 0; - background-color: rgb(0 0 0 / 0.4); - /* opacity changes will be animated */ - transition: opacity 350ms cubic-bezier(0.32, 0.72, 0, 1); -} -``` - -The transition is automatically suppressed during drag so the opacity follows the finger instantly. - -### Custom damping and velocity - -Control the rubber-band feel when dragging past the most-open snap point, and the velocity threshold for snap selection on release. - -```tsx - 6 * Math.log(distance + 1)} - // Custom velocity: use raw distance/time ratio with no clamping - velocityFunction={(distance, time) => distance / time} - // Reset velocity window every 100ms (default: 200) - velocityCacheReset={100} - // Prevent fast flings from skipping intermediate snap points - allowSkippingSnapPoints={false} -> - ... - -``` - -## API Reference - -### Drawer - -`Drawer` is equivalent to the `Root` import from `@kobalte/core/drawer`. - -| Prop | Description | -| :--- | :--- | -| open | `boolean`
The controlled open state of the drawer. | -| defaultOpen | `boolean`
The default open state when initially rendered. Useful when you do not need to control the open state. | -| onOpenChange | `(open: boolean) => void`
Event handler called when the open state changes. | -| side | `"bottom" \| "top" \| "left" \| "right"`
Which edge of the viewport the drawer slides in from. **Default:** `"bottom"` | -| snapPoints | `DrawerSize[]`
Positions the drawer can settle at. Each value is a fraction (`0`–`1`) or a pixel string (`"200px"`). `0` = fully closed, `1` = fully open. **Default:** `[0, 1]` | -| breakPoints | `(DrawerSize \| null)[]`
Custom thresholds between adjacent snap points. Length must equal `snapPoints.length - 1`. Pass `null` to use the default midpoint. | -| defaultSnapPoint | `DrawerSize`
The snap point the drawer opens to. **Default:** `1` | -| activeSnapPoint | `DrawerSize`
The controlled active snap point. | -| onActiveSnapPointChange | `(snapPoint: DrawerSize) => void`
Event handler called when the active snap point changes. | -| dampFunction | `(distance: number) => number`
Controls rubber-band resistance when dragging past the most-open snap point. **Default:** `(d) => 6 * Math.log(d + 1)` | -| velocityFunction | `(distance: number, time: number) => number`
Computes the velocity multiplier used to project the release position for snap selection. **Default:** `d / t`, clamped to `1` when `\|v\| < 1` | -| velocityCacheReset | `number`
Milliseconds after which the cached drag distance resets for velocity calculation. **Default:** `200` | -| allowSkippingSnapPoints | `boolean`
Whether a high-velocity release can skip intermediate snap points. **Default:** `true` | -| handleScrollableElements | `boolean`
Whether the drag gesture yields to scrollable children. **Default:** `true` | -| id | `string`
A unique identifier for the component. If not provided, a generated id is used. | -| modal | `boolean`
When `true`: interaction with outside elements is disabled, scroll is locked, and focus is trapped inside the content. **Default:** `true` | -| preventScroll | `boolean`
Whether scroll should be locked even when `modal` is `false`. | -| translations | [`DrawerIntlTranslations`](https://github.com/kobaltedev/kobalte/blob/main/packages/core/src/dialog/dialog.intl.ts)
Localization strings. | - -### Drawer.Content - -| Prop | Description | -| :--- | :--- | -| onOpenAutoFocus | `(event: Event) => void`
Event handler called when focus moves into the content after opening. Can be prevented by calling `event.preventDefault`. | -| onCloseAutoFocus | `(event: Event) => void`
Event handler called when focus returns to the trigger after closing. Can be prevented by calling `event.preventDefault`. | -| onEscapeKeyDown | `(event: KeyboardEvent) => void`
Event handler called when the escape key is pressed. Can be prevented by calling `event.preventDefault`. | -| onPointerDownOutside | `(event: PointerDownOutsideEvent) => void`
Event handler called when a pointer event occurs outside the content. Can be prevented by calling `event.preventDefault`. | -| onFocusOutside | `(event: FocusOutsideEvent) => void`
Event handler called when focus moves outside the content. Can be prevented by calling `event.preventDefault`. | -| onInteractOutside | `(event: InteractOutsideEvent) => void`
Event handler called when an interaction occurs outside the content. Can be prevented by calling `event.preventDefault`. | - -| Data attribute | Description | -| :--- | :--- | -| data-side | The side the drawer appears from: `"bottom"`, `"top"`, `"left"`, or `"right"`. | -| data-expanded | Present when the drawer is open. | -| data-closed | Present when the drawer is closed. | -| data-opening | Present during the open transition. | -| data-closing | Present during the close transition. | -| data-snapping | Present while snapping to a snap point after a drag gesture. | -| data-transitioning | Present during any transition (opening, closing, or snapping). | - -### Drawer.Overlay - -| Data attribute | Description | -| :--- | :--- | -| data-expanded | Present when the drawer is open. | -| data-closing | Present during the close transition. | -| data-transitioning | Present during any transition. | - -### Drawer.Trigger - -`Drawer.Trigger` consists of [Button](/docs/core/components/button). - -| Data attribute | Description | -| :--- | :--- | -| data-expanded | Present when the drawer is open. | -| data-closed | Present when the drawer is closed. | - -### Drawer.useContext - -Access the drawer's reactive state from any component inside `Drawer`. Useful for reading position, building custom controls, or snapping programmatically. - -```tsx -const ctx = Drawer.useContext(); - -ctx.side() // DrawerSide — "bottom" | "top" | "left" | "right" -ctx.activeSnapPoint() // DrawerSize — the current snap point value -ctx.setActiveSnapPoint() // (snapPoint: DrawerSize) => void -ctx.openPercentage() // number — 0 (closed) to 1 (open), tracks drag in real time -ctx.translate() // number — pixel offset from the fully-open position -ctx.isDragging() // boolean -ctx.isTransitioning() // boolean -ctx.transitionState() // null | "opening" | "closing" | "snapping" -``` - -## Rendered elements - -| Component | Default rendered element | -| :--- | :--- | -| `Drawer` | none | -| `Drawer.Trigger` | `button` | -| `Drawer.Portal` | `Portal` | -| `Drawer.Overlay` | `div` | -| `Drawer.Content` | `div` | -| `Drawer.CloseButton` | `button` | -| `Drawer.Title` | `h2` | -| `Drawer.Description` | `p` | - -## Accessibility - -### Keyboard Interactions - -| Key | Description | -| :--- | :--- | -| Space | When focus is on the trigger, opens/closes the drawer. | -| Enter | When focus is on the trigger, opens/closes the drawer. | -| Tab | Moves focus to the next focusable element inside the drawer. | -| Shift + Tab | Moves focus to the previous focusable element inside the drawer. | -| Esc | Closes the drawer and returns focus to the trigger. | - -> Snap-point architecture and drag math are adapted from [corvu/drawer](https://github.com/corvudev/corvu/tree/main/packages/drawer) by Jasmin Noetzli (MIT). diff --git a/apps/docs/src/routes/docs/core/components/resizable.mdx b/apps/docs/src/routes/docs/core/components/resizable.mdx deleted file mode 100644 index 5fedb6694..000000000 --- a/apps/docs/src/routes/docs/core/components/resizable.mdx +++ /dev/null @@ -1,443 +0,0 @@ -import { Kbd } from "../../../../components"; - -# Resizable - -A set of panels that can be resized by dragging the handles between them. Supports horizontal and vertical layouts, collapsible panels, pixel or fraction sizes, and full keyboard navigation. - -## Import - -```ts -import { Resizable } from "@kobalte/core/resizable"; -// or -import { Root, Panel, Handle, useResizableContext, useResizablePanelContext } from "@kobalte/core/resizable"; -``` - -## Features - -- Horizontal and vertical layouts. -- Sizes expressed as fractions (`0`–`1`) or absolute pixel strings (`"200px"`). -- Per-panel `minSize` and `maxSize` constraints. -- Collapsible panels with configurable collapsed size and overdrag threshold. -- `initialSizes` on the root or `initialSize` on individual panels. -- Controlled mode via `sizes` / `onSizesChange`. -- Programmatic `resize`, `collapse`, and `expand` via `useResizableContext` or render-prop children. -- Nested resizables supported. -- Full keyboard navigation — arrow keys resize, Shift + arrow jumps to edge, Enter toggles collapse on an adjacent collapsible panel. -- ARIA `role="separator"` with `aria-valuenow` / `aria-valuemin` / `aria-valuemax` on handles. -- Global cursor style managed automatically during drag. -- Handle intersection zones for seamless nested layouts. - -## Anatomy - -- **Resizable:** The root container that measures itself, manages panel sizes, and coordinates all panels and handles. -- **Resizable.Panel:** A panel whose `flex-basis` is driven by the root's size state. -- **Resizable.Handle:** A draggable separator between two panels. - -```tsx - - - - - -``` - -## Example - -```tsx -import { Resizable } from "@kobalte/core/resizable"; -import "./style.css"; - -function App() { - return ( - - Left - - Right - - ); -} -``` - -```css -.resizable { - width: 600px; - height: 300px; - border: 1px solid hsl(240 6% 90%); - border-radius: 8px; - overflow: hidden; -} - -.resizable__panel { - display: flex; - align-items: center; - justify-content: center; - background: hsl(210 40% 98%); -} - -.resizable__handle { - width: 5px; - background: hsl(240 6% 90%); - cursor: col-resize; - flex-shrink: 0; - transition: background 150ms; -} - -.resizable__handle:hover, -.resizable__handle[data-active] { - background: hsl(200 98% 39%); -} -``` - -## Usage - -### Vertical layout - -Use `orientation="vertical"` to stack panels top-to-bottom. Handles then resize vertically. - -```tsx - - Top - - Bottom - -``` - -```css -.resizable__handle--vertical { - height: 5px; - width: auto; - cursor: row-resize; -} -``` - -### Three panels - -Place a handle between each adjacent pair of panels. Each handle operates independently. - -```tsx - - Left - - Center - - Right - -``` - -### Collapsible panel - -Set `collapsible` on a panel to let it be dragged completely closed. `collapseThreshold` controls how far past `collapsedSize` the user must drag to snap it shut. Press Enter on the adjacent handle to toggle it with the keyboard. - -```tsx - - - {(panel) => ( - {panel.collapsed ? "—" : "Sidebar"} - )} - - - Content - -``` - -### Min and max sizes - -Constrain a panel to a range of sizes. Sizes are fractions (`0`–`1`) unless a pixel string is passed. - -```tsx - - - {() => "20% – 50%"} - - - Flexible - -``` - -### Pixel sizes - -Sizes can be absolute pixel strings. The layout converts them to fractions based on the root's measured width (or height for vertical layouts). - -```tsx - - - 200px start - - - Flexible - -``` - -### Controlled sizes - -Pass `sizes` and `onSizesChange` to take full control of the size state. Both handles and programmatic APIs still work normally. - -```tsx -import { createSignal } from "solid-js"; - -function ControlledExample() { - const [sizes, setSizes] = createSignal([0.5, 0.5]); - - return ( - <> - - - Left ({(sizes()[0]! * 100).toFixed(0)}%) - - - - Right ({(sizes()[1]! * 100).toFixed(0)}%) - - - - - - ); -} -``` - -### Programmatic resize via context - -`useResizableContext` (or `Resizable.useContext`) returns `resize`, `collapse`, and `expand` functions. Call them from any component rendered inside ``. - -```tsx -import { Resizable, useResizableContext } from "@kobalte/core/resizable"; - -function Controls() { - const ctx = useResizableContext(); - - return ( -
- - - -
- ); -} - -function App() { - return ( - - - Sidebar - - - - - - - ); -} -``` - -### Programmatic resize via render prop - -The render-prop form of `` passes the same API directly into the children function without needing a context hook. - -```tsx - - {(root) => ( - <> - Left - - - - - - )} - -``` - -### Nested layouts - -Nest a vertical `` inside a panel of a horizontal one. Handles across boundaries work correctly. - -```tsx - - Left - - - - Top-right - - Bottom-right - - - -``` - -## API Reference - -### Resizable - -`Resizable` is equivalent to the `Root` import from `@kobalte/core/resizable`. - -| Prop | Description | -| :--- | :--- | -| orientation | `"horizontal" \| "vertical"`
Orientation of the resizable layout. **Default:** `"horizontal"` | -| sizes | `number[]`
Controlled panel sizes as fractions (0–1). | -| onSizesChange | `(sizes: number[]) => void`
Event handler called when panel sizes change. | -| initialSizes | `ResizableSize[]`
Initial sizes for panels in order. Overridden by `initialSize` on individual panels. | -| keyboardDelta | `ResizableSize`
Delta applied per arrow-key press. **Default:** `0.1` | -| handleCursorStyle | `boolean`
Whether the component manages the global cursor style during drag. **Default:** `true` | - -The render-prop form of `children` receives a `ResizableRootChildrenProps` object: - -| Property | Type | Description | -| :--- | :--- | :--- | -| orientation | `"horizontal" \| "vertical"` | Current orientation. | -| sizes | `number[]` | Current panel sizes as fractions (0–1). | -| setSizes | `Setter` | Directly set all panel sizes. | -| keyboardDelta | `ResizableSize` | Delta applied per arrow-key press. | -| handleCursorStyle | `boolean` | Whether global cursor style is managed during drag. | -| resize | `(panelIndex, size, strategy?) => void` | Resize a panel to the given size. | -| collapse | `(panelIndex, strategy?) => void` | Collapse a panel to its `collapsedSize`. | -| expand | `(panelIndex, strategy?) => void` | Expand a panel from its collapsed state. | - -| Data attribute | Description | -| :--- | :--- | -| data-kb-resizable-root | Present on every root element. | -| data-orientation | `"horizontal"` or `"vertical"`. | - -### Resizable.Panel - -| Prop | Description | -| :--- | :--- | -| initialSize | `ResizableSize`
Initial size as a fraction (0–1) or pixel string. Prefer fractions for SSR to avoid layout shifts. | -| minSize | `ResizableSize`
Minimum size. **Default:** `0` | -| maxSize | `ResizableSize`
Maximum size. **Default:** `1` | -| collapsible | `boolean`
Whether this panel can be fully collapsed. **Default:** `false` | -| collapsedSize | `ResizableSize`
The size the panel collapses to. **Default:** `0` | -| collapseThreshold | `ResizableSize`
How much the user must overdrag past `collapsedSize` to trigger collapse. **Default:** `0.05` | -| onResize | `(size: number) => void`
Fired when the panel is resized. | -| onCollapse | `(size: number) => void`
Fired when the panel collapses. | -| onExpand | `(size: number) => void`
Fired when the panel expands. | -| panelId | `string`
The `id` attribute of the panel element. Auto-generated if not provided. | - -The render-prop form of `children` receives a `ResizablePanelChildrenProps` object: - -| Property | Type | Description | -| :--- | :--- | :--- | -| size | `number` | Current size as a fraction (0–1). | -| minSize | `ResizableSize` | Configured minimum size. | -| maxSize | `ResizableSize` | Configured maximum size. | -| collapsible | `boolean` | Whether the panel can be fully collapsed. | -| collapsedSize | `ResizableSize` | Size the panel collapses to. | -| collapseThreshold | `ResizableSize` | Overdrag threshold required to trigger collapse. | -| collapsed | `boolean` | Whether the panel is currently collapsed. | -| resize | `(size, strategy?) => void` | Resize this panel. | -| collapse | `(strategy?) => void` | Collapse this panel. | -| expand | `(strategy?) => void` | Expand this panel. | -| panelId | `string` | The HTML `id` attribute of the panel element. | - -| Data attribute | Description | -| :--- | :--- | -| data-kb-resizable-panel | Present on every panel element. | -| data-orientation | `"horizontal"` or `"vertical"`. | -| data-collapsed | Present when the panel is collapsed. | -| data-expanded | Present when a collapsible panel is expanded. | - -### Resizable.Handle - -| Prop | Description | -| :--- | :--- | -| startIntersection | `boolean`
Whether the handle exposes an intersection zone at its start edge (left/top). Useful for seamless nested layouts. **Default:** `true` | -| endIntersection | `boolean`
Whether the handle exposes an intersection zone at its end edge (right/bottom). **Default:** `true` | -| altKey | `boolean \| "only"`
Whether Alt-key resize mode is enabled. `"only"` makes it the exclusive resize method. **Default:** `true` | -| disabled | `boolean`
Whether the handle is disabled. | -| onHandleDragStart | `(event: PointerEvent) => void`
Fired when the handle starts being dragged. Call `event.preventDefault()` to cancel. | -| onHandleDrag | `(event: CustomEvent) => void`
Fired while the handle is being dragged. Call `event.preventDefault()` to cancel. | -| onHandleDragEnd | `(event: PointerEvent \| TouchEvent \| MouseEvent) => void`
Fired when the drag ends. | - -| Data attribute | Description | -| :--- | :--- | -| data-kb-resizable-handle | Present on every handle element. | -| data-orientation | `"horizontal"` or `"vertical"`. | -| data-active | Present when the handle is active (hovered, focused, or being dragged). | -| data-dragging | Present while the handle is being dragged. | - -### useResizableContext - -Returns the `ResizableContextValue` object. Must be called inside a ``. Also available as `Resizable.useContext`. - -```tsx -const ctx = useResizableContext(); - -ctx.orientation() // "horizontal" | "vertical" -ctx.sizes() // number[] — fractions (0–1) -ctx.setSizes // Setter -ctx.keyboardDelta() // ResizableSize -ctx.handleCursorStyle() // boolean -ctx.resize(index, size, strategy?) // resize panel at index -ctx.collapse(index, strategy?) // collapse panel at index -ctx.expand(index, strategy?) // expand panel at index -``` - -### useResizablePanelContext - -Returns the `ResizablePanelContextValue` object. Must be called inside a ``. Also available as `Resizable.usePanelContext`. - -```tsx -const ctx = useResizablePanelContext(); - -ctx.size() // number — current fraction (0–1) -ctx.minSize() // ResizableSize -ctx.maxSize() // ResizableSize -ctx.collapsible() // boolean -ctx.collapsedSize() // ResizableSize -ctx.collapseThreshold() // ResizableSize -ctx.collapsed() // boolean -ctx.panelId() // string — the element id -ctx.resize(size, strategy?) // resize this panel -ctx.collapse(strategy?) // collapse this panel -ctx.expand(strategy?) // expand this panel -``` - -### ResizeStrategy - -Controls which neighbouring panels absorb the size change during a resize. - -| Value | Description | -| :--- | :--- | -| `"preceding"` | Only panels before the target give or receive space. | -| `"following"` | Only panels after the target give or receive space. | -| `"both"` | Space is shared across both sides. **Default for programmatic APIs.** | - -## Rendered elements - -| Component | Default rendered element | -| :--- | :--- | -| `Resizable` | `div` | -| `Resizable.Panel` | `div` | -| `Resizable.Handle` | `button` | - -## Accessibility - -### Keyboard Interactions - -| Key | Description | -| :--- | :--- | -| ArrowLeft / ArrowRight | Resize panels horizontally by `keyboardDelta`. | -| ArrowUp / ArrowDown | Resize panels vertically by `keyboardDelta`. | -| Shift + Arrow | Jump the adjacent panel to its minimum or maximum size. | -| Home | Jump to the minimum allowed size in the current direction. | -| End | Jump to the maximum allowed size in the current direction. | -| Enter | Toggle collapse / expand on the nearest collapsible adjacent panel. | - -> Resize algorithms and handle interaction adapted from [corvu/resizable](https://github.com/corvudev/corvu/tree/main/packages/resizable) by Jasmin Noetzli (MIT). diff --git a/apps/docs/src/routes/docs/core/components/skeleton.mdx b/apps/docs/src/routes/docs/core/components/skeleton.mdx deleted file mode 100644 index 02e9bcb41..000000000 --- a/apps/docs/src/routes/docs/core/components/skeleton.mdx +++ /dev/null @@ -1,363 +0,0 @@ -import { Preview, TabsSnippets, Kbd } from "../../../../components"; -import { - BasicExample, - MultipleSkeletonsExample, - ToggleExample, -} from "../../../../examples/skeleton"; - -# Skeleton - -Visually indicates content loading - -## Import - -```ts -import { Skeleton } from "@kobalte/core/skeleton"; -// or -import { Root } from "@kobalte/core/skeleton"; -// or (deprecated) -import { Skeleton } from "@kobalte/core"; -``` - -## Features - -- Support for custom width and height. -- Support for circle skeleton. -- Can toggle visibility and animation properties. - -## Anatomy - -The skeleton consists of: - -- **Skeleton:** The root container for a skeleton. - -```tsx - -``` - -## Example - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { Skeleton } from "@kobalte/core/skeleton"; - import "./style.css"; - - function App() { - return ( - -

- A UI toolkit for building accessible web apps and design systems with SolidJS. -

-
- ); - } - ``` - -
- - ```css - @keyframes skeleton-fade { - 0%, - 100% { - opacity: 0.4; - } - - 50% { - opacity: 1; - } - } - - .skeleton { - height: auto; - width: 100%; - position: relative; - transform: translateZ(0); - -webkit-transform: translateZ(0); - } - .skeleton[data-animate="true"]::after { - animation: skeleton-fade 1500ms linear infinite; - } - - .skeleton[data-visible="true"] { - overflow: hidden; - } - .skeleton[data-visible="true"]::before { - position: absolute; - content: ""; - inset: 0; - z-index: 10; - background-color: white; - } - - .skeleton[data-visible="true"]::after { - position: absolute; - content: ""; - inset: 0; - z-index: 11; - background-color: gray; - } - ``` - - -{/* */} -
- -## Usage - -### Multiple skeletons - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { Skeleton } from "@kobalte/core/skeleton"; - import { Image } from "@kobalte/core/image"; - import "./style.css"; - - function App() { - return ( -
-
- - - - - - - Kobalte - -
- -

- A UI toolkit for building accessible web apps and design systems with SolidJS. -

-
-
- ); - } - ``` - -
- - ```css - @keyframes skeleton-fade { - 0%, - 100% { - opacity: 0.4; - } - - 50% { - opacity: 1; - } - } - - .skeleton { - height: auto; - width: 100%; - position: relative; - transform: translateZ(0); - -webkit-transform: translateZ(0); - } - .skeleton[data-animate="true"]::after { - animation: skeleton-fade 1500ms linear infinite; - } - - .skeleton[data-visible="true"] { - overflow: hidden; - } - .skeleton[data-visible="true"]::before { - position: absolute; - content: ""; - inset: 0; - z-index: 10; - background-color: white; - } - - .skeleton[data-visible="true"]::after { - position: absolute; - content: ""; - inset: 0; - z-index: 11; - background-color: gray; - } - - .multiple-root { - display: flex; - flex-direction: column; - gap: 10px; - } - - .multiple-profile { - display: flex; - gap: 10px; - align-items: center; - } - ``` - - -{/* */} -
- -### Toggle example - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { Skeleton } from "@kobalte/core/skeleton"; - import { ToggleButton } from "@kobalte/core/toggle-button"; - import "./style.css"; - - function App() { - const [visible, setVisible] = createSignal(true); - return ( -
- - Skeleton {visible() ? "Visible" : "Not Visible"} - - -

- A UI toolkit for building accessible web apps and design systems with SolidJS. -

-
-
- ); - } - ``` - -
- - ```css - @keyframes skeleton-fade { - 0%, - 100% { - opacity: 0.4; - } - - 50% { - opacity: 1; - } - } - - .skeleton { - height: auto; - width: 100%; - position: relative; - transform: translateZ(0); - -webkit-transform: translateZ(0); - } - .skeleton[data-animate="true"]::after { - animation: skeleton-fade 1500ms linear infinite; - } - - .skeleton[data-visible="true"] { - overflow: hidden; - } - .skeleton[data-visible="true"]::before { - position: absolute; - content: ""; - inset: 0; - z-index: 10; - background-color: white; - } - - .skeleton[data-visible="true"]::after { - position: absolute; - content: ""; - inset: 0; - z-index: 11; - background-color: gray; - } - - .toggle-root { - display: flex; - flex-direction: column; - align-items: center; - gap: 10px; - } - - .toggle-button { - appearance: none; - display: inline-flex; - justify-content: center; - align-items: center; - height: 40px; - width: 50%; - outline: none; - border-radius: 6px; - background-color: hsl(200 98% 39%); - color: white; - font-size: 16px; - line-height: 0; - } - - .toggle-button:focus-visible { - outline: 2px solid hsl(200 98% 39%); - outline-offset: 2px; - } - - .toggle-button[data-pressed] { - background-color: hsl(0 72% 51%); - } - ``` - - -{/* */} -
- -## API Reference - -### Skeleton - -`Skeleton` is equivalent to the `Root` import from `@kobalte/core/skeleton` (and deprecated `Skeleton.Root`). - -| Prop | Description | -| :------- | :--------------------------------------------------------------------------------------------------- | -| visible | `boolean`
The visible state of the Skeleton. Sets the `data-visible` data attribute. | -| animate | `boolean`
Whether the skeleton should animate. Sets the `data-animate` data attribute. | -| width | `number`
The width of the skeleton in px. Defaults to 100%. | -| height | `number`
The height of the skeleton in px. Defaults to auto. | -| radius | `number`
Roundness of the skeleton in px. Sets border-radius. | -| circle | `boolean`
Whether the skeleton should be a circle. Sets border-radius and width to the height. | -| children | `JSX.Element`
The children of the Skeleton. | - -| Data attribute | Description | -| :------------- | :------------------------------------- | -| data-visible | Present when the Skeleton is visible. | -| data-animate | Present when the Skeleton can animate. | - -## Rendered elements - -| Component | Default rendered element | -| :--------- | :----------------------- | -| `Skeleton` | `div` | diff --git a/apps/docs/src/routes/docs/core/components/slider.mdx b/apps/docs/src/routes/docs/core/components/slider.mdx deleted file mode 100644 index a20fd883c..000000000 --- a/apps/docs/src/routes/docs/core/components/slider.mdx +++ /dev/null @@ -1,825 +0,0 @@ -import { Preview, TabsSnippets, Kbd } from "../../../../components"; -import { - BasicExample, - MultipleThumbsExample, - StepExample, - MinStepsBetweenExample, - VerticalSliderExample, - CustomValueLabelExample, - ControlledExample, -} from "../../../../examples/slider"; - -# Slider - -An input where the user selects a value from within a given range. - -## Import - -```ts -import { Slider } from "@kobalte/core/slider"; -// or -import { Root, Track, ... } from "@kobalte/core/slider"; -// or (deprecated) -import { Slider } from "@kobalte/core"; -``` - -## Features - -- Follow the [WAI ARIA Slider](https://www.w3.org/WAI/ARIA/apg/patterns/slider-multithumb/) design pattern. -- Can be controlled or uncontrolled. -- Support for multiple thumbs. -- Support a minimum step between thumbs. -- Support click or touch on track to change value. -- Support right or left direction. -- Support for custom value label. - -## Anatomy - -The slider consists of: - -- **Slider:** The root container for the slider. -- **Slider.Track:** The component that visually represents the slider track. -- **Slider.Fill:** The component that visually represents the slider value. -- **Slider.Thumb:** The thumb that is used to visually indicate a value in the slider. -- **Slider.Input:** The native html input that is visually hidden in the slider thumb. -- **Slider.Label:** The label that gives the user information on the slider. -- **Slider.ValueLabel:** The accessible label text representing the current value in a human-readable format. -- **Slider.Description**: The description that gives the user more information on the slider. -- **Slider.ErrorMessage**: The error message that gives the user information about how to fix a validation error on the slider. - -```tsx - - - - - - - - - - - - -``` - -## Example - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { Slider } from "@kobalte/core/slider"; - import "./style.css"; - - function App() { - return ( - -
- Label - -
- - - - - - -
- ); - } - ``` - -
- - ```css - .SliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - width: 200px; - } - - .SliderTrack { - background-color: hsl(240 6% 90%); - position: relative; - border-radius: 9999px; - height: 8px; - width: 100%; - } - - .SliderRange { - position: absolute; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - height: 100%; - } - - .SliderThumb { - display: block; - width: 16px; - height: 16px; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - top: -4px; - } - - .SliderThumb:hover { - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderThumb:focus { - outline: none; - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderLabel { - width: 100%; - display: flex; - justify-content: space-between; - } - ``` - - -{/* */} -
- -## Usage - -### Multiple Thumbs - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { Slider } from "@kobalte/core/slider"; - import "./style.css"; - - function App() { - return ( - -
- Label - -
- - - - - - - - - -
- ); - } - ``` - -
- - ```css - .SliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - width: 200px; - } - - .SliderTrack { - background-color: hsl(240 6% 90%); - position: relative; - border-radius: 9999px; - height: 8px; - width: 100%; - } - - .SliderRange { - position: absolute; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - height: 100%; - } - - .SliderThumb { - display: block; - width: 16px; - height: 16px; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - top: -4px; - } - - .SliderThumb:hover { - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderThumb:focus { - outline: none; - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderLabel { - width: 100%; - display: flex; - justify-content: space-between; - } - ``` - - -{/* */} -
- -### Modify step size - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { Slider } from "@kobalte/core/slider"; - import "./style.css"; - - function App() { - return ( - <> - -
- Step size 8 - -
- - - - - - - - - -
- -
- Step size 10 - -
- - - - - - - - - -
- -
- Step size 20 - -
- - - - - - - - - -
- - ); - } - ``` - -
- - ```css - .SliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - width: 200px; - } - - .SliderTrack { - background-color: hsl(240 6% 90%); - position: relative; - border-radius: 9999px; - height: 8px; - width: 100%; - } - - .SliderRange { - position: absolute; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - height: 100%; - } - - .SliderThumb { - display: block; - width: 16px; - height: 16px; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - top: -4px; - } - - .SliderThumb:hover { - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderThumb:focus { - outline: none; - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderLabel { - width: 100%; - display: flex; - justify-content: space-between; - } - ``` - - -{/* */} -
- -### Steps between thumbs - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { Slider } from "@kobalte/core/slider"; - import "./style.css"; - - function App() { - return ( - -
- Label - -
- - - - - - - - - -
- ); - } - ``` - -
- - ```css - .SliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - width: 200px; - } - - .SliderTrack { - background-color: hsl(240 6% 90%); - position: relative; - border-radius: 9999px; - height: 8px; - width: 100%; - } - - .SliderRange { - position: absolute; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - height: 100%; - } - - .SliderThumb { - display: block; - width: 16px; - height: 16px; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - top: -4px; - } - - .SliderThumb:hover { - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderThumb:focus { - outline: none; - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderLabel { - width: 100%; - display: flex; - justify-content: space-between; - } - ``` - - -{/* */} -
- -### Vertical Slider - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { Slider } from "@kobalte/core/slider"; - import "./style.css"; - - function App() { - return ( - -
- Label - -
- - - - - - -
- ); - } - ``` - -
- - ```css - .SliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - height: 200px; - } - - .SliderTrack { - background-color: hsl(240 6% 90%); - position: relative; - border-radius: 9999px; - width: 8px; - height: 100%; - } - - .SliderRange { - position: absolute; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - width: 100%; - } - - .SliderThumb { - display: block; - width: 16px; - height: 16px; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - left: -4px; - } - - .SliderThumb:hover { - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderThumb:focus { - outline: none; - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderLabel { - width: 100%; - display: flex; - justify-content: space-between; - } - ``` - - -{/* */} -
- -### Custom Value Label - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { Slider } from "@kobalte/core/slider"; - import "./style.css"; - - function App() { - return ( - `$${params.values[0]} - $${params.values[1]}`} - > -
- Money - -
- - - - - - - - - -
- ); - } - ``` - -
- - ```css - .SliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - width: 200px; - } - - .SliderTrack { - background-color: hsl(240 6% 90%); - position: relative; - border-radius: 9999px; - height: 8px; - width: 100%; - } - - .SliderRange { - position: absolute; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - height: 100%; - } - - .SliderThumb { - display: block; - width: 16px; - height: 16px; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - top: -4px; - } - - .SliderThumb:hover { - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderThumb:focus { - outline: none; - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderLabel { - width: 100%; - display: flex; - justify-content: space-between; - } - ``` - - -{/* */} -
- -### Controlled Value - - - - - - - - index.tsx - style.css - -{/* */} - - ```tsx - import { createSignal } from 'solid-js' - import { Slider } from "@kobalte/core/slider"; - import "./style.css"; - - function App() { - const [values, setValues] = createSignal([40]) - - return ( - -
- Label - -
- - - - - - -
- ); - } - ``` - -
- - ```css - .SliderRoot { - position: relative; - display: flex; - flex-direction: column; - align-items: center; - user-select: none; - touch-action: none; - width: 200px; - } - - .SliderTrack { - background-color: hsl(240 6% 90%); - position: relative; - border-radius: 9999px; - height: 8px; - width: 100%; - } - - .SliderRange { - position: absolute; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - height: 100%; - } - - .SliderThumb { - display: block; - width: 16px; - height: 16px; - background-color: hsl(200 98% 39%); - border-radius: 9999px; - top: -4px; - } - - .SliderThumb:hover { - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderThumb:focus { - outline: none; - box-shadow: 0 0 0 5px #2a91fe98; - } - - .SliderLabel { - width: 100%; - display: flex; - justify-content: space-between; - } - ``` - - -{/* */} -
-## API Reference - -### Slider - -`Slider` is equivalent to the `Root` import from `@kobalte/core/slider` (and deprecated `Slider.Root`). - -| Prop | Description | -| :-------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| value | `number[]`
The controlled values of the slider. Must be used in conjunction with `onChange`. | -| defaultValue | `number[]`
The value of the slider when initially rendered. Use when you do not need to control the state of the slider. | -| onChange | `(value: number[]) => void`
Event handler called when the value changes. | -| onChangeEnd | `(value: number[]) => void`
Event handler called when the value changes at the end of an interaction. | -| inverted | `boolean`
Whether the slider is visually inverted. Defaults to false. | -| minValue | `number`
The minimum slider value. Defaults to 0 | -| maxValue | `number`
The maximum slider value. Defaults to 100 | -| step | `number`
The stepping interval. Defaults to 1 | -| minStepsBetweenThumbs | `number`
The minimum permitted steps between thumbs. Defaults to 0 | -| getValueLabel | `(params: GetValueLabelParams) => string`
A function to get the accessible label text representing the current value in a human-readable format. If not provided, the value label will be read as a percentage of the max value. | -| orientation | `'horizontal' \| 'vertical'`
The orientation of the slider. | -| name | `string`
The name of the slider, used when submitting an HTML form. | -| validationState | `'valid' \| 'invalid'`
Whether the slider should display its "valid" or "invalid" visual styling. | -| required | `boolean`
Whether the user must check a radio group item before the owning form can be submitted. | -| disabled | `boolean`
Whether the radio group is disabled. | -| readOnly | `boolean`
Whether the radio group items can be selected but not changed by the user. | - -| Data attribute | Description | -| :---------------------------- | :--------------------------------------------------------------------------------- | -| data-orientation='horizontal' | Present when the slider has horizontal orientation. | -| data-orientation='vertical' | Present when the slider has vertical orientation. | -| data-valid | Present when the slider is valid according to the validation rules. | -| data-invalid | Present when the slider is invalid according to the validation rules. | -| data-required | Present when the user must slider an item before the owning form can be submitted. | -| data-disabled | Present when the slider is disabled. | -| data-readonly | Present when the slider is read only. | - -`Slider.ValueLabel`, `Slider.Fill`, `Slider.Input`, `Slider.Thumb` and `Slider.Track` share the same data-attributes. - -## Rendered elements - -| Component | Default rendered element | -| :-------------------- | :----------------------- | -| `Slider` | `div` | -| `Slider.Track` | `div` | -| `Slider.Fill` | `div` | -| `Slider.Thumb` | `span` | -| `Slider.Input` | `input` | -| `Slider.ValueLabel` | `div` | -| `Slider.Description` | `div` | -| `Slider.ErrorMessage` | `div` | - -## Accessibility - -### Keyboard Interactions - -| Key | Description | -| :-------------------- | :-------------------------------------------------------------------- | -| PageUp | Increases the value of the focused thumb by a larger `step`. | -| PageDown | Decreases the value of the focused thumb by a larger `step`. | -| ArrowDown | Decreases the value of the focused thumb by the `step` amount. | -| ArrowUp | Increases the value of the focused thumb by the `step` amount. | -| ArrowRight | Increments/decrements by the `step` value depending on `orientation`. | -| ArrowLeft | Increments/decrements by the `step` value depending on `orientation`. | -| Home | Sets the value of the first thumb to the minimum value. | -| End | Sets the value of the last thumb to the maximum value. | diff --git a/apps/docs/src/routes/docs/core/overview/getting-started.mdx b/apps/docs/src/routes/docs/core/overview/getting-started.mdx deleted file mode 100644 index de16baf9e..000000000 --- a/apps/docs/src/routes/docs/core/overview/getting-started.mdx +++ /dev/null @@ -1,157 +0,0 @@ -import { Preview, TabsSnippets } from "../../../../components"; -import { PopoverDemo } from "../../../../examples/getting-started"; - -# Getting started - -## Installation - -Install Kobalte by running either of the following: - - - - npm - yarn - pnpm - - - {/* */} - ```bash - npm install @kobalte/core - ``` - {/* */} - - - {/* */} - ```bash - yarn add @kobalte/core - ``` - {/* */} - - - {/* */} - ```bash - pnpm add @kobalte/core - ``` - {/* */} - - - -## Using the components - -The example below demonstrate how to create a Popover component with Kobalte. - - - - - - - - index.tsx - style.css - - {/* */} - - ```tsx - import { Popover } from "@kobalte/core/popover"; - import { CrossIcon } from "some-icon-library"; - import "./style.css"; - - function App() { - - Learn more - - - -
- About Kobalte - - - -
- - A UI toolkit for building accessible web apps and design systems with SolidJS. - -
-
-
- } - ``` - -
- - ```css - .popover__trigger { - appearance: none; - display: inline-flex; - justify-content: center; - align-items: center; - height: 40px; - width: auto; - outline: none; - border-radius: 6px; - padding: 0 16px; - background-color: hsl(200 98% 39%); - color: white; - font-size: 16px; - line-height: 0; - transition: 250ms background-color; - } - - .popover__trigger:hover { - background-color: hsl(201 96% 32%); - } - - .popover__trigger:focus-visible { - outline: 2px solid hsl(200 98% 39%); - outline-offset: 2px; - } - - .popover__trigger:active { - background-color: hsl(201 90% 27%); - } - - .popover__content { - z-index: 50; - max-width: min(calc(100vw - 16px), 380px); - border: 1px solid hsl(240 5% 84%); - border-radius: 6px; - padding: 12px; - background-color: white; - box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - } - - .popover__header { - display: flex; - align-items: baseline; - justify-content: space-between; - margin-bottom: 6px; - } - - .popover__close-button { - height: 16px; - width: 16px; - color: hsl(240 5% 34%); - } - - .popover__title { - font-size: 16px; - font-weight: 500; - color: hsl(240 6% 10%); - } - - .popover__description { - font-size: 14px; - color: hsl(240 5% 26%); - } - ``` - - - {/* */} -
- -In a few lines of code, we've implemented a fully accessible Popover component that : - -- Adheres to [WAI-ARIA Dialog](https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/) design pattern. -- Can be controlled or uncontrolled. -- Optionally render a pointing arrow. -- Has focus fully managed and customizable. diff --git a/apps/docs/src/routes/docs/core/overview/ssr.mdx b/apps/docs/src/routes/docs/core/overview/ssr.mdx deleted file mode 100644 index de553be5c..000000000 --- a/apps/docs/src/routes/docs/core/overview/ssr.mdx +++ /dev/null @@ -1,12 +0,0 @@ -import { Callout } from "../../../../components/callout"; - -# Server side rendering - -## Usage with SolidStart - -Kobalte works out of the box with [SolidStart](https://start.solidjs.com/). - - - Kobalte has been tested with `solid-js@1.8.15` and `@solidjs/start@0.6.1`, compatibility with - other versions is not guaranteed. - diff --git a/apps/docs/src/routes/index.tsx b/apps/docs/src/routes/index.tsx index a4182511e..cda9750f2 100644 --- a/apps/docs/src/routes/index.tsx +++ b/apps/docs/src/routes/index.tsx @@ -1,5 +1,17 @@ -import { Navigate } from "@solidjs/router"; +import { Navigate, redirect } from "@solidjs/router"; + +const target = "/docs/core/overview/introduction"; + +export const route = { + preload() { + return redirect(target); + }, +}; + +export function GET() { + throw redirect(target); +} export default function () { - return ; + return ; } diff --git a/apps/docs/src/solidbase-theme/Layout.module.css b/apps/docs/src/solidbase-theme/Layout.module.css new file mode 100644 index 000000000..b68ac8b8e --- /dev/null +++ b/apps/docs/src/solidbase-theme/Layout.module.css @@ -0,0 +1,26 @@ +footer:has(.footer) { + position: relative; +} + +.footer.footer { + position: absolute; + top: 100%; + flex-direction: row; + justify-content: space-evenly; + align-items: center; + width: 100%; + + > a { + color: color-mix(in hsl, var(--sb-text-color) 72.5%, transparent); + box-shadow: color-mix(in hsl, var(--sb-text-color) 25%, transparent) 0 -2px + 0 0 inset; + text-decoration: none; + line-height: 1; + + &:hover, + &:focus { + box-shadow: color-mix(in hsl, var(--sb-text-color) 25%, transparent) 0 + -6px 0 0 inset; + } + } +} diff --git a/apps/docs/src/solidbase-theme/Layout.tsx b/apps/docs/src/solidbase-theme/Layout.tsx new file mode 100644 index 000000000..92954ca5e --- /dev/null +++ b/apps/docs/src/solidbase-theme/Layout.tsx @@ -0,0 +1,34 @@ +import Footer from "@kobalte/solidbase/default-theme/components/Footer.jsx"; +import { DefaultThemeComponentsProvider } from "@kobalte/solidbase/default-theme/context.jsx"; +import Layout from "@kobalte/solidbase/default-theme/Layout.jsx"; +import type { ComponentProps } from "solid-js"; + +import styles from "./Layout.module.css"; + +export default function (props: ComponentProps) { + return ( + ( + + ), + }} + force + > + + + ); +} diff --git a/apps/docs/tailwind.config.cjs b/apps/docs/tailwind.config.cjs deleted file mode 100644 index 891848abb..000000000 --- a/apps/docs/tailwind.config.cjs +++ /dev/null @@ -1,37 +0,0 @@ -const defaultTheme = require("tailwindcss/defaultTheme"); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ["./src/**/*.{html,js,jsx,ts,tsx,mdx}"], - darkMode: ["selector", '[data-kb-theme="dark"]'], - theme: { - fontSize: { - xs: ["0.75rem", { lineHeight: "1rem" }], - sm: ["0.875rem", { lineHeight: "1.5rem" }], - base: ["1rem", { lineHeight: "2rem" }], - lg: ["1.125rem", { lineHeight: "1.75rem" }], - xl: ["1.25rem", { lineHeight: "2rem" }], - "2xl": ["1.5rem", { lineHeight: "2.5rem" }], - "3xl": ["2rem", { lineHeight: "2.5rem" }], - "4xl": ["2.5rem", { lineHeight: "3rem" }], - "5xl": ["3rem", { lineHeight: "3.5rem" }], - "6xl": ["3.75rem", { lineHeight: "1" }], - "7xl": ["4.5rem", { lineHeight: "1" }], - "8xl": ["6rem", { lineHeight: "1" }], - "9xl": ["8rem", { lineHeight: "1" }], - }, - extend: { - fontFamily: { - sans: ["Inter", ...defaultTheme.fontFamily.sans], - display: ["Lexend", ...defaultTheme.fontFamily.sans], - }, - maxWidth: { - "8xl": "88rem", - }, - }, - }, - plugins: [ - require("@tailwindcss/typography"), - require("@kobalte/tailwindcss")(), - ], -}; diff --git a/apps/docs/vite.config.ts b/apps/docs/vite.config.ts new file mode 100644 index 000000000..61a8f8626 --- /dev/null +++ b/apps/docs/vite.config.ts @@ -0,0 +1,121 @@ +import { createSolidBase, defineTheme } from "@kobalte/solidbase/config"; +import { + createDefaultThemeFilesystemSidebar, + default as defaultTheme, +} from "@kobalte/solidbase/default-theme"; +import { solidStart } from "@solidjs/start/config"; +import { nitro } from "nitro/vite"; +import { defineConfig } from "vite"; +import { version as KBVersion } from "../../packages/core/package.json"; + +const theme = defineTheme({ + componentsPath: await import.meta.resolve("./src/solidbase-theme"), + extends: defaultTheme, +}); + +const solidBase = createSolidBase(theme); + +const collator = new Intl.Collator(undefined, { numeric: true }); + +export default defineConfig({ + resolve: { + dedupe: ["solid-js", "@solidjs/router"], + }, + plugins: [ + solidBase.plugin({ + title: "Kobalte", + titleTemplate: ":title – Kobalte", + description: + "Unstyled components and primitives for building accessible web apps and design systems with SolidJS.", + siteUrl: "https://kobalte.dev", + logo: "/kobalte.svg", + llms: true, + sitemap: true, + robots: true, + issueAutolink: "https://github.com/kobaltedev/kobalte/issues/:issue", + lang: "en", + markdown: { + expressiveCode: { + languageSwitcher: false, + }, + }, + routes: { + path: "/{version}/", + version: { + default: "v1", + values: { + v1: { path: "", label: `v${KBVersion}` }, + }, + }, + }, + editPath: + "https://github.com/kobaltedev/kobalte/edit/main/apps/docs/:path", + themeConfig: { + badges: { + icons: { + npm: ``, + source: ``, + aria: ``, + }, + }, + socialLinks: { + github: "https://github.com/kobaltedev/kobalte", + discord: "https://discord.com/invite/solidjs", + }, + nav: [ + { + text: "Components", + link: "/docs/core", + }, + { + text: "Changelog", + link: "/docs/changelog", + }, + ], + sidebar: { + "/docs/core": createDefaultThemeFilesystemSidebar( + "./src/routes/docs/core", + { + sort: (a, b) => { + if (a.filePath.includes("i18n-provider")) return 1; + if (b.filePath.includes("i18n-provider")) return -1; + if (a.filePath.includes("index")) return -1; + if (a.filePath > b.filePath) return 1; + if (b.filePath > a.filePath) return -1; + return 0; + }, + }, + ), + "/docs/changelog": [ + { + title: "Changelog", + items: createDefaultThemeFilesystemSidebar( + "./src/routes/docs/changelog", + { + sort: (a, b) => { + return collator.compare(b.filePath, a.filePath); + }, + }, + ), + }, + ], + }, + search: { + docsearch: { + appId: "8550U3NJ6N", + indexName: "Kobalte Docs", + apiKey: "c36d7de88f1413b5dbe7b36b42f9c734", + }, + }, + }, + }), + solidStart(solidBase.startConfig()), + nitro({ + preset: "netlify", + prerender: { crawlLinks: true }, + }), + ], + ssr: { + noExternal: ["@docsearch/css"], + }, +}); diff --git a/biome.json b/biome.json index 6ca196f6d..7b390a72c 100644 --- a/biome.json +++ b/biome.json @@ -4,16 +4,16 @@ "includes": [ "**", "!tsconfig.json", - "!**/*/netlify/**/*", + "!**/netlify", "!**/package.json", - "!.claude" + "!.claude", + "!**/public" ] }, "css": { "parser": { "cssModules": false, - "allowWrongLineComments": false, - "tailwindDirectives": true + "allowWrongLineComments": false } }, "vcs": { @@ -28,12 +28,14 @@ "a11y": { "noAutofocus": "off", "noNoninteractiveTabindex": "off", - "noNoninteractiveElementToInteractiveRole": "off" + "noNoninteractiveElementToInteractiveRole": "off", + "noSvgWithoutTitle": "off" }, "suspicious": { "noEmptyInterface": "off", "noExplicitAny": "off", - "noAssignInExpressions": "off" + "noAssignInExpressions": "off", + "noDocumentCookie": "off" }, "style": { "noNonNullAssertion": "off" @@ -42,5 +44,17 @@ "noBannedTypes": "off" } } - } + }, + "overrides": [ + { + "includes": ["**/*.stories.tsx"], + "linter": { + "rules": { + "a11y": { + "useValidAnchor": "off" + } + } + } + } + ] } diff --git a/deno.jsonc b/deno.jsonc new file mode 100644 index 000000000..7ba871f34 --- /dev/null +++ b/deno.jsonc @@ -0,0 +1,34 @@ +{ + "workspace": [ + "packages/core", + "packages/utils", + "packages/tailwindcss", + "packages/vanilla-extract" + ], + "nodeModulesDir": "auto", + "preferPackageJson": true, + "lock": true, + "minimumDependencyAge": "0", + "compilerOptions": { + "strict": true, + "jsx": "preserve", + "jsxImportSource": "@solidjs/web", + "lib": ["DOM", "DOM.Iterable", "ESNext"] + }, + "tasks": { + "jsr:check": "deno check packages/core/src/index.tsx packages/utils/src/index.ts packages/tailwindcss/src/index.ts packages/vanilla-extract/src/index.ts", + "jsr:fmt": "deno fmt --check deno.jsonc packages/*/deno.jsonc", + "jsr:list": "deno list -r" + }, + "exclude": [ + "apps", + "packages/tests", + "**/dev", + "**/dist", + "**/stories", + "**/*.test.ts", + "**/*.test.tsx", + "**/node_modules", + "scripts" + ] +} diff --git a/deno.lock b/deno.lock new file mode 100644 index 000000000..3aa01f640 --- /dev/null +++ b/deno.lock @@ -0,0 +1,5589 @@ +{ + "version": "5", + "specifiers": { + "npm:@biomejs/biome@2.5.1": "2.5.1", + "npm:@changesets/cli@2.31.0": "2.31.0_@types+node@26.0.1", + "npm:@commitlint/cli@21.1.0": "21.1.0_@types+node@26.0.1_typescript@6.0.3", + "npm:@commitlint/config-conventional@21.1.0": "21.1.0", + "npm:@commitlint/cz-commitlint@21.1.0": "21.1.0_commitizen@4.3.0__@types+node@26.0.1__typescript@6.0.3_inquirer@8.2.5_@types+node@26.0.1_typescript@6.0.3", + "npm:@floating-ui/dom@^1.5.1": "1.8.0", + "npm:@internationalized/date@^3.4.0": "3.12.2", + "npm:@internationalized/number@^3.2.1": "3.6.7", + "npm:@solid-primitives/a11y@next": "1.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/controlled-signal@1.0.0-next.1": "1.0.0-next.1_solid-js@2.0.0-beta.15_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15", + "npm:@solid-primitives/event-listener@next": "3.0.0-next.1_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/focus@next": "1.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/form@next": "1.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/i18n@next": "3.0.0-next.2_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/interaction@next": "1.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/keyboard@next": "2.0.0-next.3_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/keyed@next": "3.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/map@next": "1.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/media@next": "4.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/presence@next": "1.0.0-next.0_solid-js@2.0.0-beta.15_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15", + "npm:@solid-primitives/props@next": "4.0.0-next.1_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/refs@next": "3.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/resize-observer@next": "4.0.0-next.1_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/scroll@next": "3.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/upload@next": "1.0.0-next.1_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solid-primitives/utils@next": "7.0.0-next.1_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solidjs/signals@2.0.0-beta.15": "2.0.0-beta.15", + "npm:@solidjs/testing-library@1.0.0-beta.2": "1.0.0-beta.2_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@solidjs/web@2.0.0-beta.15": "2.0.0-beta.15_solid-js@2.0.0-beta.15", + "npm:@storybook/addon-docs@^10.4.1": "10.5.0_@types+react@19.2.17_storybook@10.5.0__@types+react@19.2.17__prettier@4.0.0-alpha.10__react@19.2.7_@types+node@26.0.1_prettier@4.0.0-alpha.10_vite@6.4.3__@types+node@26.0.1", + "npm:@tailwindcss/postcss@^4.3.1": "4.3.2", + "npm:@testing-library/dom@9.3.4": "9.3.4", + "npm:@testing-library/jest-dom@6.9.1": "6.9.1", + "npm:@testing-library/user-event@14.6.1": "14.6.1_@testing-library+dom@9.3.4", + "npm:@types/node@26.0.1": "26.0.1", + "npm:@vanilla-extract/css@1.13.0": "1.13.0", + "npm:@vitest/ui@^2.1.9": "2.1.9_vitest@2.1.9_@types+node@26.0.1_jsdom@25.0.1", + "npm:babel-preset-solid@2.0.0-beta.15": "2.0.0-beta.15_@babel+core@7.29.7_solid-js@2.0.0-beta.15", + "npm:commitizen@4.3.0": "4.3.0_@types+node@26.0.1_typescript@6.0.3", + "npm:inquirer@8.2.5": "8.2.5", + "npm:jsdom@25.0.1": "25.0.1", + "npm:postcss@8.4.28": "8.4.28", + "npm:prettier-plugin-tailwindcss@0.8": "0.8.0_prettier@4.0.0-alpha.10", + "npm:prettier@4.0.0-alpha.10": "4.0.0-alpha.10", + "npm:solid-js@2.0.0-beta.15": "2.0.0-beta.15", + "npm:storybook-solidjs-vite@^10.1.0": "10.6.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15_storybook@10.5.0__@types+react@19.2.17__prettier@4.0.0-alpha.10__react@19.2.7_typescript@6.0.3_vite@6.4.3__@types+node@26.0.1_vite-plugin-solid@3.0.0-next.5__@solidjs+web@2.0.0-beta.15___solid-js@2.0.0-beta.15__@testing-library+jest-dom@6.9.1__solid-js@2.0.0-beta.15__vite@6.4.3___@types+node@26.0.1__@types+node@26.0.1_@testing-library+jest-dom@6.9.1_@types+node@26.0.1_@types+react@19.2.17_prettier@4.0.0-alpha.10_react@19.2.7", + "npm:storybook@^10.4.1": "10.5.0_@types+react@19.2.17_prettier@4.0.0-alpha.10_react@19.2.7", + "npm:tailwindcss@^4.3.1": "4.3.2", + "npm:tsdown@0.22.7": "0.22.7_typescript@6.0.3", + "npm:typescript@6.0.3": "6.0.3", + "npm:unplugin-solid@1.0.0": "1.0.0_solid-js@2.0.0-beta.15_@types+node@26.0.1_vite@6.4.3__@types+node@26.0.1", + "npm:vite-plugin-solid@3.0.0-next.5": "3.0.0-next.5_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_@testing-library+jest-dom@6.9.1_solid-js@2.0.0-beta.15_vite@6.4.3__@types+node@26.0.1_@types+node@26.0.1", + "npm:vite@^6.3.5": "6.4.3_@types+node@26.0.1", + "npm:vitest@2.1.9": "2.1.9_@types+node@26.0.1_@vitest+ui@2.1.9_jsdom@25.0.1" + }, + "npm": { + "@adobe/css-tools@4.5.0": { + "integrity": "sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==" + }, + "@alloc/quick-lru@5.2.0": { + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" + }, + "@asamuzakjp/css-color@3.2.0": { + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dependencies": [ + "@csstools/css-calc", + "@csstools/css-color-parser", + "@csstools/css-parser-algorithms", + "@csstools/css-tokenizer", + "lru-cache@10.4.3" + ] + }, + "@babel/code-frame@7.29.7": { + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dependencies": [ + "@babel/helper-validator-identifier", + "js-tokens", + "picocolors" + ] + }, + "@babel/compat-data@7.29.7": { + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==" + }, + "@babel/core@7.29.7": { + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dependencies": [ + "@babel/code-frame", + "@babel/generator", + "@babel/helper-compilation-targets", + "@babel/helper-module-transforms", + "@babel/helpers", + "@babel/parser", + "@babel/template", + "@babel/traverse", + "@babel/types", + "@jridgewell/remapping", + "convert-source-map", + "debug", + "gensync", + "json5", + "semver@6.3.1" + ] + }, + "@babel/generator@7.29.7": { + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dependencies": [ + "@babel/parser", + "@babel/types", + "@jridgewell/gen-mapping", + "@jridgewell/trace-mapping", + "jsesc" + ] + }, + "@babel/helper-compilation-targets@7.29.7": { + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dependencies": [ + "@babel/compat-data", + "@babel/helper-validator-option", + "browserslist", + "lru-cache@5.1.1", + "semver@6.3.1" + ] + }, + "@babel/helper-globals@7.29.7": { + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==" + }, + "@babel/helper-module-imports@7.18.6": { + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": [ + "@babel/types" + ] + }, + "@babel/helper-module-imports@7.29.7": { + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dependencies": [ + "@babel/traverse", + "@babel/types" + ] + }, + "@babel/helper-module-transforms@7.29.7_@babel+core@7.29.7": { + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dependencies": [ + "@babel/core", + "@babel/helper-module-imports@7.29.7", + "@babel/helper-validator-identifier", + "@babel/traverse" + ] + }, + "@babel/helper-plugin-utils@7.29.7": { + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==" + }, + "@babel/helper-string-parser@7.29.7": { + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==" + }, + "@babel/helper-validator-identifier@7.29.7": { + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==" + }, + "@babel/helper-validator-option@7.29.7": { + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==" + }, + "@babel/helpers@7.29.7": { + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dependencies": [ + "@babel/template", + "@babel/types" + ] + }, + "@babel/parser@7.29.7": { + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dependencies": [ + "@babel/types" + ], + "bin": true + }, + "@babel/plugin-syntax-jsx@7.29.7_@babel+core@7.29.7": { + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", + "dependencies": [ + "@babel/core", + "@babel/helper-plugin-utils" + ] + }, + "@babel/runtime@7.29.7": { + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==" + }, + "@babel/template@7.29.7": { + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dependencies": [ + "@babel/code-frame", + "@babel/parser", + "@babel/types" + ] + }, + "@babel/traverse@7.29.7": { + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dependencies": [ + "@babel/code-frame", + "@babel/generator", + "@babel/helper-globals", + "@babel/parser", + "@babel/template", + "@babel/types", + "debug" + ] + }, + "@babel/types@7.29.7": { + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dependencies": [ + "@babel/helper-string-parser", + "@babel/helper-validator-identifier" + ] + }, + "@biomejs/biome@2.5.1": { + "integrity": "sha512-IXWLCxKmae+rI7LOHS1B3EbVisQ6GRAWbhN9msa6KjNCyFWrvKZWR4oUdinaNssrV852OrSHuSPa95h1GPJc7Q==", + "optionalDependencies": [ + "@biomejs/cli-darwin-arm64", + "@biomejs/cli-darwin-x64", + "@biomejs/cli-linux-arm64", + "@biomejs/cli-linux-arm64-musl", + "@biomejs/cli-linux-x64", + "@biomejs/cli-linux-x64-musl", + "@biomejs/cli-win32-arm64", + "@biomejs/cli-win32-x64" + ], + "bin": true + }, + "@biomejs/cli-darwin-arm64@2.5.1": { + "integrity": "sha512-npqDzvqv7vFaWRiNN1Te71siRgPaqS9MpqgYCdP/CrUbkJ7ApezaeaKjueKHRN/JH/6lRjJQAHi8acQDCAz22w==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@biomejs/cli-darwin-x64@2.5.1": { + "integrity": "sha512-RgwTqPAM8g2tn1j+b5oRjF/DbSBX8a4gwojtuG9XuhfK7GgomvZ9+T+tqjXiVbjLEeGJOoL6VEk8mvRTVeSybw==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@biomejs/cli-linux-arm64-musl@2.5.1": { + "integrity": "sha512-WMcvMLgByyTqVxGlq918NBBYliq9FRR9GAQVETHb+VjGVqXCZFfHlZHC1FX4ibuYY/Hg6TJE3rHU0xVrdJXNRw==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@biomejs/cli-linux-arm64@2.5.1": { + "integrity": "sha512-yhV35CzZh38VyMvTEXi3JTjxZBs++oCKK9KG8vB6VI5+uvQvZNR3BFWEKKzuOmx9DJJj7sQpZ4LQJcmbGTs3+Q==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@biomejs/cli-linux-x64-musl@2.5.1": { + "integrity": "sha512-ANTowtlLmPYm5yeMckWY8Xzb9Ix+JJP3tgHR/n6xRj1VWyIzzWtfRfih9hv9VmClwadpBvZduISZIbBsIlYG3A==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@biomejs/cli-linux-x64@2.5.1": { + "integrity": "sha512-J/7uHSX7NfoYDI7HijAkd8lnQIOrRb2W7j3X+tw4R+N5ExvXGsyXFiGdQcfcxfOmNQmZVSQOCDk757fwpzqQcg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@biomejs/cli-win32-arm64@2.5.1": { + "integrity": "sha512-zgXnKNgWPC4iPF7Y1lR3STUeCUuZRpD6IiOrC7TZTlh0Lx6FiVUT05myuMQHQ9D+1cc7uyMldi4forE6lp0ivQ==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@biomejs/cli-win32-x64@2.5.1": { + "integrity": "sha512-6uxpR9hvaglANkZemeSiN/FhYgkGasrEGn267eXIWvjrjJ2LhDlk251IhjVJq6MXzkV2/bcXwLwSroLyPtqRZg==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@changesets/apply-release-plan@7.1.1": { + "integrity": "sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==", + "dependencies": [ + "@changesets/config", + "@changesets/get-version-range-type", + "@changesets/git", + "@changesets/should-skip-package", + "@changesets/types@6.1.0", + "@manypkg/get-packages", + "detect-indent", + "fs-extra@7.0.1", + "lodash.startcase", + "outdent@0.5.0", + "prettier@2.8.8", + "resolve-from@5.0.0", + "semver@7.8.5" + ] + }, + "@changesets/assemble-release-plan@6.0.10": { + "integrity": "sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==", + "dependencies": [ + "@changesets/errors", + "@changesets/get-dependents-graph", + "@changesets/should-skip-package", + "@changesets/types@6.1.0", + "@manypkg/get-packages", + "semver@7.8.5" + ] + }, + "@changesets/changelog-git@0.2.1": { + "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", + "dependencies": [ + "@changesets/types@6.1.0" + ] + }, + "@changesets/cli@2.31.0_@types+node@26.0.1": { + "integrity": "sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==", + "dependencies": [ + "@changesets/apply-release-plan", + "@changesets/assemble-release-plan", + "@changesets/changelog-git", + "@changesets/config", + "@changesets/errors", + "@changesets/get-dependents-graph", + "@changesets/get-release-plan", + "@changesets/git", + "@changesets/logger", + "@changesets/pre", + "@changesets/read", + "@changesets/should-skip-package", + "@changesets/types@6.1.0", + "@changesets/write", + "@inquirer/external-editor", + "@manypkg/get-packages", + "ansi-colors", + "enquirer", + "fs-extra@7.0.1", + "mri", + "package-manager-detector", + "picocolors", + "resolve-from@5.0.0", + "semver@7.8.5", + "spawndamnit", + "term-size" + ], + "bin": true + }, + "@changesets/config@3.1.4": { + "integrity": "sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==", + "dependencies": [ + "@changesets/errors", + "@changesets/get-dependents-graph", + "@changesets/logger", + "@changesets/should-skip-package", + "@changesets/types@6.1.0", + "@manypkg/get-packages", + "fs-extra@7.0.1", + "micromatch" + ] + }, + "@changesets/errors@0.2.0": { + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", + "dependencies": [ + "extendable-error" + ] + }, + "@changesets/get-dependents-graph@2.1.4": { + "integrity": "sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==", + "dependencies": [ + "@changesets/types@6.1.0", + "@manypkg/get-packages", + "picocolors", + "semver@7.8.5" + ] + }, + "@changesets/get-release-plan@4.0.16": { + "integrity": "sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==", + "dependencies": [ + "@changesets/assemble-release-plan", + "@changesets/config", + "@changesets/pre", + "@changesets/read", + "@changesets/types@6.1.0", + "@manypkg/get-packages" + ] + }, + "@changesets/get-version-range-type@0.4.0": { + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==" + }, + "@changesets/git@3.0.4": { + "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", + "dependencies": [ + "@changesets/errors", + "@manypkg/get-packages", + "is-subdir", + "micromatch", + "spawndamnit" + ] + }, + "@changesets/logger@0.1.1": { + "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", + "dependencies": [ + "picocolors" + ] + }, + "@changesets/parse@0.4.3": { + "integrity": "sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==", + "dependencies": [ + "@changesets/types@6.1.0", + "js-yaml@4.3.0" + ] + }, + "@changesets/pre@2.0.2": { + "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", + "dependencies": [ + "@changesets/errors", + "@changesets/types@6.1.0", + "@manypkg/get-packages", + "fs-extra@7.0.1" + ] + }, + "@changesets/read@0.6.7": { + "integrity": "sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==", + "dependencies": [ + "@changesets/git", + "@changesets/logger", + "@changesets/parse", + "@changesets/types@6.1.0", + "fs-extra@7.0.1", + "p-filter", + "picocolors" + ] + }, + "@changesets/should-skip-package@0.1.2": { + "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", + "dependencies": [ + "@changesets/types@6.1.0", + "@manypkg/get-packages" + ] + }, + "@changesets/types@4.1.0": { + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==" + }, + "@changesets/types@6.1.0": { + "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==" + }, + "@changesets/write@0.4.0": { + "integrity": "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==", + "dependencies": [ + "@changesets/types@6.1.0", + "fs-extra@7.0.1", + "human-id", + "prettier@2.8.8" + ] + }, + "@commitlint/cli@21.1.0_@types+node@26.0.1_typescript@6.0.3": { + "integrity": "sha512-CVwY6TxGv5naEaWxBdgNHko1xgL95Mb4WcIqp9iik33H0ctVqRv6YtekCntayhEP0T/apuiGvHu5HcCwFuVxEA==", + "dependencies": [ + "@commitlint/config-conventional", + "@commitlint/format", + "@commitlint/lint", + "@commitlint/load", + "@commitlint/read", + "@commitlint/types", + "tinyexec@1.2.4", + "yargs" + ], + "bin": true + }, + "@commitlint/config-conventional@21.1.0": { + "integrity": "sha512-BIFl8xM+3SLy3jrblUC3wmQLCVbLty+++6o859BDCmybVrQdXmIWO+dlkGIbv/M2bBoC55wGuh0zGiw3TPjL1g==", + "dependencies": [ + "@commitlint/types", + "conventional-changelog-conventionalcommits" + ] + }, + "@commitlint/config-validator@21.2.0": { + "integrity": "sha512-t7AzNHAKeIdo/3NRGwzpufKHsKkPHmFs/56N2Fnsh0/r0rGtnQzTxk6vnFgjaGr4hdSQKNB50/KAhR9Yk4LJKA==", + "dependencies": [ + "@commitlint/types", + "ajv" + ] + }, + "@commitlint/cz-commitlint@21.1.0_commitizen@4.3.0__@types+node@26.0.1__typescript@6.0.3_inquirer@8.2.5_@types+node@26.0.1_typescript@6.0.3": { + "integrity": "sha512-6g6FLihaQ/gvCaJq2bdpmKnffO/JCSDsXrZEiqoi2Gzh2sV8W7HWTK+OGVgsiELMXn1wKtt8Cv1Eersltp+2WA==", + "dependencies": [ + "@commitlint/ensure", + "@commitlint/load", + "@commitlint/types", + "commitizen", + "inquirer", + "is-plain-obj", + "picocolors", + "word-wrap" + ] + }, + "@commitlint/ensure@21.2.0": { + "integrity": "sha512-76IF9vDNS13lAzEEik9eKwzt8f9hYhWiwVXZ2AnyLCz5/f511FsEQ3pw1X3/zSQpdRLQU7i5qDMVKyXi1GWjSg==", + "dependencies": [ + "@commitlint/types", + "es-toolkit" + ] + }, + "@commitlint/execute-rule@21.0.1": { + "integrity": "sha512-RifH+FmImozKBE6mozhF4K3r2RRKP7SMi/Q/zLCmExtp5e05lhHOUYqGBlFBAGNHaZxU/WYw1XuugYK9jQzqnA==" + }, + "@commitlint/format@21.2.0": { + "integrity": "sha512-c4q64xaav2U83t7k7RyzJerBZurPer7FxUOY0RL5L/6CZijZ7K+s6HIBGIghj0ey1P2+seRX0J9XQYtDued6tg==", + "dependencies": [ + "@commitlint/types", + "picocolors" + ] + }, + "@commitlint/is-ignored@21.2.0": { + "integrity": "sha512-4/eB0vBN7L88O/oC4ajAEqi7j2ZfNgxl/+11RfAV9YosejZgDXhY2C9VcHnHJhOzPLoSy5P3Mg/46kqeyJfXKw==", + "dependencies": [ + "@commitlint/types", + "semver@7.8.5" + ] + }, + "@commitlint/lint@21.2.0": { + "integrity": "sha512-ceO5dp9pLjEZ6y6qbq/uXWXDPykqqlTsyzoQ0NzecpisSJhK3kTy9qzQoPeJuWG/IMNdV1lO0RgmzqoAlSi1uw==", + "dependencies": [ + "@commitlint/is-ignored", + "@commitlint/parse", + "@commitlint/rules", + "@commitlint/types" + ] + }, + "@commitlint/load@21.2.0_@types+node@26.0.1_typescript@6.0.3": { + "integrity": "sha512-RjlzWQqruRwIenJEfZtq7kG97co97nKoHpflE5YnF61tDLXxHPrdWImgzw6VL6MlFyaOcVlk74eBV8ZQmc3oIA==", + "dependencies": [ + "@commitlint/config-validator", + "@commitlint/execute-rule", + "@commitlint/resolve-extends", + "@commitlint/types", + "cosmiconfig", + "cosmiconfig-typescript-loader", + "es-toolkit", + "is-plain-obj", + "picocolors" + ] + }, + "@commitlint/message@21.2.0": { + "integrity": "sha512-YxGoiXD/HXNXLJPrQwE5poXa+XH0CBEm+mdvbHQP0g6MV/dmJyUFCzPNzZbxL93GvZ70TmtTK0Z0/IBpAqHv8g==" + }, + "@commitlint/parse@21.2.0": { + "integrity": "sha512-QHWxG4d0PLTF634/AdyZ0MQS+CLn5YOuJlCFhMMlSGKFxzYGUetkHBj18xgBD+6fVzUrA2lrCdi/vlS2f/oYXg==", + "dependencies": [ + "@commitlint/types", + "conventional-changelog-angular", + "conventional-commits-parser" + ] + }, + "@commitlint/read@21.2.1": { + "integrity": "sha512-hUW7EJQnNTL0vPOmVMNK4CrnrNBN0nN+JJHReFkdHO5y4iyHeEmTBwuC15OCqUTjxWo7idnH1LftfpWVIaPWIA==", + "dependencies": [ + "@commitlint/top-level", + "@commitlint/types", + "@conventional-changelog/git-client", + "tinyexec@1.2.4" + ] + }, + "@commitlint/resolve-extends@21.2.0": { + "integrity": "sha512-4O/1j51+79Wth9s/MGxt/5gs0XYLDgNlYpltQfhAvLE0itusLKs9zruxbiNg1oOkmkb9L9L4USYGjEj7n87NxA==", + "dependencies": [ + "@commitlint/config-validator", + "@commitlint/types", + "es-toolkit", + "global-directory", + "resolve-from@5.0.0" + ] + }, + "@commitlint/rules@21.2.0": { + "integrity": "sha512-C2yXMNpiB8ETZKfx5JD8+ExgF8vTU1VQMKPSUUYwqKpw9oJWQBrlXBpdU038mj2WPjof7o9UzFpmTyBeGMZwZg==", + "dependencies": [ + "@commitlint/ensure", + "@commitlint/message", + "@commitlint/to-lines", + "@commitlint/types" + ] + }, + "@commitlint/to-lines@21.0.1": { + "integrity": "sha512-bd1BFII7p1EQZre9Kaj+kKaMFP3cFCdt21K7DItVux9XP5WjLgJ0/Uy1pJJh9aPwVJ6SKg62PxqlZaHI8hQAXw==" + }, + "@commitlint/top-level@21.2.0": { + "integrity": "sha512-Y5gmQ+KxzqCrBFJfLvFEPvvwD3LDiNZoTT2yeFBm96M8qhmqSzQc5DvX3rheAaAMjyIvMXOCLS/mWfdpONsjyQ==", + "dependencies": [ + "escalade" + ] + }, + "@commitlint/types@21.2.0": { + "integrity": "sha512-7zVFCDB2reMvJH5dmbKnOQPjZEvjdJTH8jc0U/PIPU1r3/+vf5pD1HlfitV2MWsWXrvu7u39iY1lyLUPOaN0Gw==", + "dependencies": [ + "conventional-commits-parser", + "picocolors" + ] + }, + "@conventional-changelog/git-client@3.1.0": { + "integrity": "sha512-Tqa/gHco2WJWa740NRjOrfKVvzIqxkZpecb8bemaQ8sKM5PXb1UK4uTyTb/1wIqNuOVaDOFxyBdhTIQZn6gdjQ==", + "dependencies": [ + "@simple-libs/child-process-utils", + "@simple-libs/stream-utils", + "semver@7.8.5" + ] + }, + "@conventional-changelog/template@1.2.1": { + "integrity": "sha512-TzlTVpKPjaqW6qOYjQcYUDuGsLCNsvFHVBXkYGTAnf5V37jCWrE5haKNXzz0WZUtVHjrpV76L1buANjwXMfT8w==" + }, + "@csstools/color-helpers@5.1.0": { + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==" + }, + "@csstools/css-calc@2.1.4_@csstools+css-parser-algorithms@3.0.5__@csstools+css-tokenizer@3.0.4_@csstools+css-tokenizer@3.0.4": { + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dependencies": [ + "@csstools/css-parser-algorithms", + "@csstools/css-tokenizer" + ] + }, + "@csstools/css-color-parser@3.1.0_@csstools+css-parser-algorithms@3.0.5__@csstools+css-tokenizer@3.0.4_@csstools+css-tokenizer@3.0.4": { + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dependencies": [ + "@csstools/color-helpers", + "@csstools/css-calc", + "@csstools/css-parser-algorithms", + "@csstools/css-tokenizer" + ] + }, + "@csstools/css-parser-algorithms@3.0.5_@csstools+css-tokenizer@3.0.4": { + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dependencies": [ + "@csstools/css-tokenizer" + ] + }, + "@csstools/css-tokenizer@3.0.4": { + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==" + }, + "@emnapi/core@1.11.1": { + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dependencies": [ + "@emnapi/wasi-threads@1.2.2", + "tslib" + ] + }, + "@emnapi/core@1.11.2": { + "integrity": "sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==", + "dependencies": [ + "@emnapi/wasi-threads@1.2.2", + "tslib" + ] + }, + "@emnapi/core@1.9.2": { + "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "dependencies": [ + "@emnapi/wasi-threads@1.2.1", + "tslib" + ] + }, + "@emnapi/runtime@1.11.1": { + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dependencies": [ + "tslib" + ] + }, + "@emnapi/runtime@1.11.2": { + "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", + "dependencies": [ + "tslib" + ] + }, + "@emnapi/runtime@1.9.2": { + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "dependencies": [ + "tslib" + ] + }, + "@emnapi/wasi-threads@1.2.1": { + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dependencies": [ + "tslib" + ] + }, + "@emnapi/wasi-threads@1.2.2": { + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dependencies": [ + "tslib" + ] + }, + "@emotion/hash@0.9.2": { + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + }, + "@esbuild/aix-ppc64@0.21.5": { + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "os": ["aix"], + "cpu": ["ppc64"] + }, + "@esbuild/aix-ppc64@0.25.12": { + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "os": ["aix"], + "cpu": ["ppc64"] + }, + "@esbuild/aix-ppc64@0.28.1": { + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "os": ["aix"], + "cpu": ["ppc64"] + }, + "@esbuild/android-arm64@0.21.5": { + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@esbuild/android-arm64@0.25.12": { + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@esbuild/android-arm64@0.28.1": { + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@esbuild/android-arm@0.21.5": { + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "os": ["android"], + "cpu": ["arm"] + }, + "@esbuild/android-arm@0.25.12": { + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "os": ["android"], + "cpu": ["arm"] + }, + "@esbuild/android-arm@0.28.1": { + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "os": ["android"], + "cpu": ["arm"] + }, + "@esbuild/android-x64@0.21.5": { + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "os": ["android"], + "cpu": ["x64"] + }, + "@esbuild/android-x64@0.25.12": { + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "os": ["android"], + "cpu": ["x64"] + }, + "@esbuild/android-x64@0.28.1": { + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "os": ["android"], + "cpu": ["x64"] + }, + "@esbuild/darwin-arm64@0.21.5": { + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@esbuild/darwin-arm64@0.25.12": { + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@esbuild/darwin-arm64@0.28.1": { + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@esbuild/darwin-x64@0.21.5": { + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@esbuild/darwin-x64@0.25.12": { + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@esbuild/darwin-x64@0.28.1": { + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@esbuild/freebsd-arm64@0.21.5": { + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "os": ["freebsd"], + "cpu": ["arm64"] + }, + "@esbuild/freebsd-arm64@0.25.12": { + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "os": ["freebsd"], + "cpu": ["arm64"] + }, + "@esbuild/freebsd-arm64@0.28.1": { + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "os": ["freebsd"], + "cpu": ["arm64"] + }, + "@esbuild/freebsd-x64@0.21.5": { + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@esbuild/freebsd-x64@0.25.12": { + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@esbuild/freebsd-x64@0.28.1": { + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@esbuild/linux-arm64@0.21.5": { + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@esbuild/linux-arm64@0.25.12": { + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@esbuild/linux-arm64@0.28.1": { + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@esbuild/linux-arm@0.21.5": { + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@esbuild/linux-arm@0.25.12": { + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@esbuild/linux-arm@0.28.1": { + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@esbuild/linux-ia32@0.21.5": { + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "os": ["linux"], + "cpu": ["ia32"] + }, + "@esbuild/linux-ia32@0.25.12": { + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "os": ["linux"], + "cpu": ["ia32"] + }, + "@esbuild/linux-ia32@0.28.1": { + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "os": ["linux"], + "cpu": ["ia32"] + }, + "@esbuild/linux-loong64@0.21.5": { + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "os": ["linux"], + "cpu": ["loong64"] + }, + "@esbuild/linux-loong64@0.25.12": { + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "os": ["linux"], + "cpu": ["loong64"] + }, + "@esbuild/linux-loong64@0.28.1": { + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "os": ["linux"], + "cpu": ["loong64"] + }, + "@esbuild/linux-mips64el@0.21.5": { + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "os": ["linux"], + "cpu": ["mips64el"] + }, + "@esbuild/linux-mips64el@0.25.12": { + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "os": ["linux"], + "cpu": ["mips64el"] + }, + "@esbuild/linux-mips64el@0.28.1": { + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "os": ["linux"], + "cpu": ["mips64el"] + }, + "@esbuild/linux-ppc64@0.21.5": { + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@esbuild/linux-ppc64@0.25.12": { + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@esbuild/linux-ppc64@0.28.1": { + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@esbuild/linux-riscv64@0.21.5": { + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@esbuild/linux-riscv64@0.25.12": { + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@esbuild/linux-riscv64@0.28.1": { + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@esbuild/linux-s390x@0.21.5": { + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@esbuild/linux-s390x@0.25.12": { + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@esbuild/linux-s390x@0.28.1": { + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@esbuild/linux-x64@0.21.5": { + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@esbuild/linux-x64@0.25.12": { + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@esbuild/linux-x64@0.28.1": { + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@esbuild/netbsd-arm64@0.25.12": { + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "os": ["netbsd"], + "cpu": ["arm64"] + }, + "@esbuild/netbsd-arm64@0.28.1": { + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "os": ["netbsd"], + "cpu": ["arm64"] + }, + "@esbuild/netbsd-x64@0.21.5": { + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "os": ["netbsd"], + "cpu": ["x64"] + }, + "@esbuild/netbsd-x64@0.25.12": { + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "os": ["netbsd"], + "cpu": ["x64"] + }, + "@esbuild/netbsd-x64@0.28.1": { + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "os": ["netbsd"], + "cpu": ["x64"] + }, + "@esbuild/openbsd-arm64@0.25.12": { + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "os": ["openbsd"], + "cpu": ["arm64"] + }, + "@esbuild/openbsd-arm64@0.28.1": { + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "os": ["openbsd"], + "cpu": ["arm64"] + }, + "@esbuild/openbsd-x64@0.21.5": { + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "os": ["openbsd"], + "cpu": ["x64"] + }, + "@esbuild/openbsd-x64@0.25.12": { + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "os": ["openbsd"], + "cpu": ["x64"] + }, + "@esbuild/openbsd-x64@0.28.1": { + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "os": ["openbsd"], + "cpu": ["x64"] + }, + "@esbuild/openharmony-arm64@0.25.12": { + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "os": ["openharmony"], + "cpu": ["arm64"] + }, + "@esbuild/openharmony-arm64@0.28.1": { + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "os": ["openharmony"], + "cpu": ["arm64"] + }, + "@esbuild/sunos-x64@0.21.5": { + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "os": ["sunos"], + "cpu": ["x64"] + }, + "@esbuild/sunos-x64@0.25.12": { + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "os": ["sunos"], + "cpu": ["x64"] + }, + "@esbuild/sunos-x64@0.28.1": { + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "os": ["sunos"], + "cpu": ["x64"] + }, + "@esbuild/win32-arm64@0.21.5": { + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@esbuild/win32-arm64@0.25.12": { + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@esbuild/win32-arm64@0.28.1": { + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@esbuild/win32-ia32@0.21.5": { + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@esbuild/win32-ia32@0.25.12": { + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@esbuild/win32-ia32@0.28.1": { + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@esbuild/win32-x64@0.21.5": { + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@esbuild/win32-x64@0.25.12": { + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@esbuild/win32-x64@0.28.1": { + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@floating-ui/core@1.8.0": { + "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", + "dependencies": [ + "@floating-ui/utils" + ] + }, + "@floating-ui/dom@1.8.0": { + "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==", + "dependencies": [ + "@floating-ui/core", + "@floating-ui/utils" + ] + }, + "@floating-ui/utils@0.2.12": { + "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==" + }, + "@iarna/toml@2.2.5": { + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" + }, + "@inquirer/external-editor@1.0.3_@types+node@26.0.1": { + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dependencies": [ + "@types/node@26.0.1", + "chardet@2.2.0", + "iconv-lite@0.7.3" + ], + "optionalPeers": [ + "@types/node@26.0.1" + ] + }, + "@internationalized/date@3.12.2": { + "integrity": "sha512-FY1Y+H64NDs+HAF6omlnWxm3mEpfgaCSWtL5l551ZZfImA+kGjPFgrnJrGjH6lfmLL0g8Z/mBu1R3kufeCp6Jw==", + "dependencies": [ + "@swc/helpers" + ] + }, + "@internationalized/number@3.6.7": { + "integrity": "sha512-3ji1fcrT+FPAK86UqEhB/psHixYo6niWPJtt7+qRaYFynt/BaJG8GhAPimtWUpEiVSTq8ZM8L5psMxGquiB/Vg==", + "dependencies": [ + "@swc/helpers" + ] + }, + "@jridgewell/gen-mapping@0.3.13": { + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dependencies": [ + "@jridgewell/sourcemap-codec", + "@jridgewell/trace-mapping" + ] + }, + "@jridgewell/remapping@2.3.5": { + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dependencies": [ + "@jridgewell/gen-mapping", + "@jridgewell/trace-mapping" + ] + }, + "@jridgewell/resolve-uri@3.1.2": { + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/sourcemap-codec@1.5.5": { + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "@jridgewell/trace-mapping@0.3.31": { + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dependencies": [ + "@jridgewell/resolve-uri", + "@jridgewell/sourcemap-codec" + ] + }, + "@manypkg/find-root@1.1.0": { + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "dependencies": [ + "@babel/runtime", + "@types/node@12.20.55", + "find-up", + "fs-extra@8.1.0" + ] + }, + "@manypkg/get-packages@1.1.3": { + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "dependencies": [ + "@babel/runtime", + "@changesets/types@4.1.0", + "@manypkg/find-root", + "fs-extra@8.1.0", + "globby", + "read-yaml-file" + ] + }, + "@mdx-js/react@3.1.1_@types+react@19.2.17_react@19.2.7": { + "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", + "dependencies": [ + "@types/mdx", + "@types/react", + "react" + ] + }, + "@napi-rs/wasm-runtime@1.1.6_@emnapi+core@1.11.1_@emnapi+runtime@1.11.1": { + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dependencies": [ + "@emnapi/core@1.11.1", + "@emnapi/runtime@1.11.1", + "@tybys/wasm-util" + ] + }, + "@napi-rs/wasm-runtime@1.1.6_@emnapi+core@1.11.2_@emnapi+runtime@1.11.2": { + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dependencies": [ + "@emnapi/core@1.11.2", + "@emnapi/runtime@1.11.2", + "@tybys/wasm-util" + ] + }, + "@napi-rs/wasm-runtime@1.1.6_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2": { + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dependencies": [ + "@emnapi/core@1.9.2", + "@emnapi/runtime@1.9.2", + "@tybys/wasm-util" + ] + }, + "@nodelib/fs.scandir@2.1.5": { + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": [ + "@nodelib/fs.stat", + "run-parallel" + ] + }, + "@nodelib/fs.stat@2.0.5": { + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk@1.2.8": { + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": [ + "@nodelib/fs.scandir", + "fastq" + ] + }, + "@oxc-parser/binding-android-arm-eabi@0.127.0": { + "integrity": "sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==", + "os": ["android"], + "cpu": ["arm"] + }, + "@oxc-parser/binding-android-arm64@0.127.0": { + "integrity": "sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@oxc-parser/binding-darwin-arm64@0.127.0": { + "integrity": "sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@oxc-parser/binding-darwin-x64@0.127.0": { + "integrity": "sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@oxc-parser/binding-freebsd-x64@0.127.0": { + "integrity": "sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@oxc-parser/binding-linux-arm-gnueabihf@0.127.0": { + "integrity": "sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@oxc-parser/binding-linux-arm-musleabihf@0.127.0": { + "integrity": "sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@oxc-parser/binding-linux-arm64-gnu@0.127.0": { + "integrity": "sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@oxc-parser/binding-linux-arm64-musl@0.127.0": { + "integrity": "sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@oxc-parser/binding-linux-ppc64-gnu@0.127.0": { + "integrity": "sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@oxc-parser/binding-linux-riscv64-gnu@0.127.0": { + "integrity": "sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@oxc-parser/binding-linux-riscv64-musl@0.127.0": { + "integrity": "sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@oxc-parser/binding-linux-s390x-gnu@0.127.0": { + "integrity": "sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@oxc-parser/binding-linux-x64-gnu@0.127.0": { + "integrity": "sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@oxc-parser/binding-linux-x64-musl@0.127.0": { + "integrity": "sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@oxc-parser/binding-openharmony-arm64@0.127.0": { + "integrity": "sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==", + "os": ["openharmony"], + "cpu": ["arm64"] + }, + "@oxc-parser/binding-wasm32-wasi@0.127.0": { + "integrity": "sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==", + "dependencies": [ + "@emnapi/core@1.9.2", + "@emnapi/runtime@1.9.2", + "@napi-rs/wasm-runtime@1.1.6_@emnapi+core@1.9.2_@emnapi+runtime@1.9.2" + ], + "cpu": ["wasm32"] + }, + "@oxc-parser/binding-win32-arm64-msvc@0.127.0": { + "integrity": "sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@oxc-parser/binding-win32-ia32-msvc@0.127.0": { + "integrity": "sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@oxc-parser/binding-win32-x64-msvc@0.127.0": { + "integrity": "sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@oxc-project/types@0.127.0": { + "integrity": "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==" + }, + "@oxc-project/types@0.139.0": { + "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==" + }, + "@oxc-resolver/binding-android-arm-eabi@11.24.2": { + "integrity": "sha512-y09e0L0SRI2OA2tUIrjBgoV3eH5hvUKXNkJqXmNo5V2WxIjyC7I7aJfRLMEVpA8yi95f90gFDvO0VMgrDw+vwA==", + "os": ["android"], + "cpu": ["arm"] + }, + "@oxc-resolver/binding-android-arm64@11.24.2": { + "integrity": "sha512-cl4icWaZFnLdg8m6qtnh5rBMuGbxc/ptStFHLeCNwr+2cZjkjNwQu/jYRS0CHlnPecOJMpuS5M6/BH+0J/YkEg==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@oxc-resolver/binding-darwin-arm64@11.24.2": { + "integrity": "sha512-At29QEMF6HajbQvgY8K6OXnHD1x9rad74xBEfmCB6ZqCGsdq75aK7tOYcTbOanMy8qdIBrfL3SMr3p/lfSlb9w==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@oxc-resolver/binding-darwin-x64@11.24.2": { + "integrity": "sha512-A5Kqr1EUj4oIL5CF4WRssq/o5P0Y11cwoFouMRmQ7YnC/A8V93nv1nb7aSU8HwcgmXropjLNkVTl4MN87cu28Q==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@oxc-resolver/binding-freebsd-x64@11.24.2": { + "integrity": "sha512-R5xkRBRRz7ceH/P5Jrc6G7FmdUdgpLYyESFAUDVTNQ9K0sGPxcp4ljiwEwEqsvNcQ4sYbMRrWcHHBCu7ksAJVw==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@oxc-resolver/binding-linux-arm-gnueabihf@11.24.2": { + "integrity": "sha512-k/RuYL4L/R58IBn3wT5ma3Wh4k62bp1eYCFRWCmMsasUOqL+H6sW0VGFadEzKWXFFlz+2uIMoeMk9ySSZJHgbg==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@oxc-resolver/binding-linux-arm-musleabihf@11.24.2": { + "integrity": "sha512-bnHAak3ujYfH5pKk4NieFNbvYvernfoQDgwLddbZ3OtMYrem87/qjlA+u+aKG0oZcqSLGCful/6/CEA+aeAgaA==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@oxc-resolver/binding-linux-arm64-gnu@11.24.2": { + "integrity": "sha512-vDT3KHgzYp47gmtNOqL2VNhCyl5Zv643eyxm//A68J8DeUGXrvD1pZFiaT4jSfe+RInfnn1R2yVHye4enx6RnA==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@oxc-resolver/binding-linux-arm64-musl@11.24.2": { + "integrity": "sha512-+kMlQvbzfyEYtu5FcjE4p+ttBLpKW4d/AsAsuE69BxV6V4twZJeIQZFfD8gh/wqglY0MkPSezWXQH0jBV13MUw==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@oxc-resolver/binding-linux-ppc64-gnu@11.24.2": { + "integrity": "sha512-shjfMhmZ3gq9fv/w7bi3PnZlgOPG+2QAOFf0BJF0EgBSIGZ6PMLN2zbGEblTUYB/NKVDRyYhE2ff3dJ1QqNPkA==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@oxc-resolver/binding-linux-riscv64-gnu@11.24.2": { + "integrity": "sha512-zGelwFR5oRo+b69k8Lrzun86DyUHzfKN6cnjbR9l7Z7NIRznOE/2ZvPa1IUKqAL2PzAXOdwkfVqNvO1H2RlpAw==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@oxc-resolver/binding-linux-riscv64-musl@11.24.2": { + "integrity": "sha512-qxZ1SWCXJY0eyhAlP6Lmo9F2Nrtx7EkYj9oCgL8apDPCwXwCEDA2U697bbT81JIc2IrVjxO4KX6WU2N+oN9Z4w==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@oxc-resolver/binding-linux-s390x-gnu@11.24.2": { + "integrity": "sha512-sGCecF3cx2DFlH4t/z7ApnOnXqN48p5p5mlHDEnHTAukQa2P+qMVE4CwyWE9W+q/m3QJ7kKfGrIjax31f44oFQ==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@oxc-resolver/binding-linux-x64-gnu@11.24.2": { + "integrity": "sha512-k/VlMMcSzMlahb3/fENM4rTlsJ0s3fFROA0KXPBmKggqmTSaE383sl8F3KCOXPLmVsYfW6hCitMhXCEtNeZxxg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@oxc-resolver/binding-linux-x64-musl@11.24.2": { + "integrity": "sha512-8hbnZyNi97b/8wapYaIF9+t9GmZKBW2vunaOc3h9HGJptH7b7XpvZqOTBSm/MpTjr7H497BlgOaSfLUdhmy2bw==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@oxc-resolver/binding-openharmony-arm64@11.24.2": { + "integrity": "sha512-MvyGik3a6pVgZ0t/kWlbmFxFLmXQJwgLsY2eYFHLpy0wGwRbfzeIGgDwQ3kXqE30z+kSXennRkCrT7TUvkptNg==", + "os": ["openharmony"], + "cpu": ["arm64"] + }, + "@oxc-resolver/binding-wasm32-wasi@11.24.2": { + "integrity": "sha512-vHcssMPwO08RTvj/c0iOBz90attxyG3wQJ0dTcyEQK43LRpcdLWZlV5feBhv6Isn6ahbQIzHbCgfa81+RiML0Q==", + "dependencies": [ + "@emnapi/core@1.11.2", + "@emnapi/runtime@1.11.2", + "@napi-rs/wasm-runtime@1.1.6_@emnapi+core@1.11.2_@emnapi+runtime@1.11.2" + ], + "cpu": ["wasm32"] + }, + "@oxc-resolver/binding-win32-arm64-msvc@11.24.2": { + "integrity": "sha512-uokJqro2iBqkFvJdKQLP7d8/BUmFwESQFVmIJUQKj1Xn1a/LysJoe1vmeECLF5b3jsV8CAL5sEMJXX6SdK9Nhg==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@oxc-resolver/binding-win32-x64-msvc@11.24.2": { + "integrity": "sha512-UqGPmo56KDfLlfXFAFIrNflHT8tFxWGEivWg3Zeyp4Uy2NlKN1FGPr6/BxcLGG3+kZ6Wp14g5Uj+n71boqZfiw==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@polka/url@1.0.0-next.29": { + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==" + }, + "@prettier/cli@0.6.0_prettier@4.0.0-alpha.10": { + "integrity": "sha512-kPQDTB+FPjvj23SmBH4T9uGCxMVS1cyJSY9dbOHGOC29nL9gR5gwZ4b4uMj4QRB0uE5K9c7avbAo+gvUbcZb4Q==", + "dependencies": [ + "@iarna/toml", + "atomically", + "fast-ignore", + "find-up-json", + "function-once", + "import-meta-resolve", + "is-binary-path", + "js-yaml@4.3.0", + "json-sorted-stringify", + "json5", + "kasi", + "lomemo", + "pioppo", + "prettier@4.0.0-alpha.10", + "promise-resolve-timeout", + "specialist", + "tiny-editorconfig", + "tiny-jsonc", + "tiny-readdir-glob", + "tiny-spinner", + "worktank", + "zeptomatch", + "zeptomatch-escape", + "zeptomatch-is-static" + ], + "bin": true + }, + "@quansync/fs@1.0.0": { + "integrity": "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==", + "dependencies": [ + "quansync@1.0.0" + ] + }, + "@rolldown/binding-android-arm64@1.1.5": { + "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@rolldown/binding-darwin-arm64@1.1.5": { + "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@rolldown/binding-darwin-x64@1.1.5": { + "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@rolldown/binding-freebsd-x64@1.1.5": { + "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@rolldown/binding-linux-arm-gnueabihf@1.1.5": { + "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@rolldown/binding-linux-arm64-gnu@1.1.5": { + "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@rolldown/binding-linux-arm64-musl@1.1.5": { + "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@rolldown/binding-linux-ppc64-gnu@1.1.5": { + "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@rolldown/binding-linux-s390x-gnu@1.1.5": { + "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@rolldown/binding-linux-x64-gnu@1.1.5": { + "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@rolldown/binding-linux-x64-musl@1.1.5": { + "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@rolldown/binding-openharmony-arm64@1.1.5": { + "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", + "os": ["openharmony"], + "cpu": ["arm64"] + }, + "@rolldown/binding-wasm32-wasi@1.1.5": { + "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", + "dependencies": [ + "@emnapi/core@1.11.1", + "@emnapi/runtime@1.11.1", + "@napi-rs/wasm-runtime@1.1.6_@emnapi+core@1.11.1_@emnapi+runtime@1.11.1" + ], + "cpu": ["wasm32"] + }, + "@rolldown/binding-win32-arm64-msvc@1.1.5": { + "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@rolldown/binding-win32-x64-msvc@1.1.5": { + "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@rolldown/pluginutils@1.0.1": { + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==" + }, + "@rollup/pluginutils@5.4.0": { + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "dependencies": [ + "@types/estree", + "estree-walker@2.0.2", + "picomatch@4.0.5" + ] + }, + "@rollup/rollup-android-arm-eabi@4.62.2": { + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "os": ["android"], + "cpu": ["arm"] + }, + "@rollup/rollup-android-arm64@4.62.2": { + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@rollup/rollup-darwin-arm64@4.62.2": { + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@rollup/rollup-darwin-x64@4.62.2": { + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@rollup/rollup-freebsd-arm64@4.62.2": { + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "os": ["freebsd"], + "cpu": ["arm64"] + }, + "@rollup/rollup-freebsd-x64@4.62.2": { + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@rollup/rollup-linux-arm-gnueabihf@4.62.2": { + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@rollup/rollup-linux-arm-musleabihf@4.62.2": { + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@rollup/rollup-linux-arm64-gnu@4.62.2": { + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@rollup/rollup-linux-arm64-musl@4.62.2": { + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@rollup/rollup-linux-loong64-gnu@4.62.2": { + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "os": ["linux"], + "cpu": ["loong64"] + }, + "@rollup/rollup-linux-loong64-musl@4.62.2": { + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "os": ["linux"], + "cpu": ["loong64"] + }, + "@rollup/rollup-linux-ppc64-gnu@4.62.2": { + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@rollup/rollup-linux-ppc64-musl@4.62.2": { + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "os": ["linux"], + "cpu": ["ppc64"] + }, + "@rollup/rollup-linux-riscv64-gnu@4.62.2": { + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@rollup/rollup-linux-riscv64-musl@4.62.2": { + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "os": ["linux"], + "cpu": ["riscv64"] + }, + "@rollup/rollup-linux-s390x-gnu@4.62.2": { + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "os": ["linux"], + "cpu": ["s390x"] + }, + "@rollup/rollup-linux-x64-gnu@4.62.2": { + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@rollup/rollup-linux-x64-musl@4.62.2": { + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@rollup/rollup-openbsd-x64@4.62.2": { + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "os": ["openbsd"], + "cpu": ["x64"] + }, + "@rollup/rollup-openharmony-arm64@4.62.2": { + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "os": ["openharmony"], + "cpu": ["arm64"] + }, + "@rollup/rollup-win32-arm64-msvc@4.62.2": { + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@rollup/rollup-win32-ia32-msvc@4.62.2": { + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "os": ["win32"], + "cpu": ["ia32"] + }, + "@rollup/rollup-win32-x64-gnu@4.62.2": { + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@rollup/rollup-win32-x64-msvc@4.62.2": { + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@simple-libs/child-process-utils@2.0.0": { + "integrity": "sha512-dvNoRKLijXnD0XoJAz94pbNuB5GQgDr55UhpSPhffDkTT0Cmcqh9jSCOtwfT2d4H6MI9E7c4SgtMuJXZ6F3c6A==", + "dependencies": [ + "@simple-libs/stream-utils" + ] + }, + "@simple-libs/stream-utils@2.0.0": { + "integrity": "sha512-fCTuZK4QBa+39Oz9l4OGfJfz+GpwCp3AqO7Zch3to99xHPgstVsRFpeQ8LNd2o1Gv8raL2mCFwiaHh7bFSp5DQ==" + }, + "@solid-primitives/a11y@1.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-mu3WGweGsnyDe42pKarKVZTNwuBw7ufJjuwNJXwM1N17MhMIqbS1RlPMkuAG9f4ZG7QmQIyUsJuLl32aCMB8aQ==", + "dependencies": [ + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/controlled-signal@1.0.0-next.1_solid-js@2.0.0-beta.15_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15": { + "integrity": "sha512-AE4HFWqOGr95FoabFgAFqyTjw8mBUXUISxxPCMbbU4id15mcyeIW/+cSzBq8b8n8so7V8SvvPnYn7TKyM9Eb5g==", + "dependencies": [ + "@solid-primitives/utils", + "solid-js" + ] + }, + "@solid-primitives/event-listener@3.0.0-next.1_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-FWb3EiSZ++rp1AwIMd10u78gO8hpWy46vaPSKDESwi4ycRowtPNdVo/03FMiqeIFsIDc5bYBIERUc+Eka5wYKQ==", + "dependencies": [ + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/focus@1.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-fgW0lse+B4x8PX6IXrswrA4xVQdqYmLYWVc7B9KjrfuVzVQkOqmZ4bg+8X5v+c+bNn9FgLc1YcTPmvKwRXZJbA==", + "dependencies": [ + "@solid-primitives/event-listener", + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/form@1.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-E+zRif9lnL8ekOb+cBxyD7XGOrirR8J4/ieDxChNgZlmZu+hfeZq7UOTTn1qw1I7cO6elfj/aCbwhZ4kubu/AA==", + "dependencies": [ + "@solid-primitives/a11y", + "@solid-primitives/event-listener", + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/i18n@3.0.0-next.2_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-8Ie5TP3lyzBMyUJk6tkQmix1vEAkloVtHv7IEFXawtUEy+SX35+RJvwNr+hscZre/QzRiEBssyn7VS9ZNnON8w==", + "dependencies": [ + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/interaction@1.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-VxIvNZpaXu55bF+VNkPSvEx+TLbR67AbJcLkX0du15JngKUj11Vwh2juxe/atAEqHAf5fyc1FO5bTG5xhQiCGg==", + "dependencies": [ + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/keyboard@2.0.0-next.3_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-AHa3ZufSQuYrCE35pYl7JhNmIZF/GbHsB1Jq50sD0EK+K6RefP5/g28QDmGzPR6AkWuGM0yvD7ekTO2GwXX8YA==", + "dependencies": [ + "@solid-primitives/event-listener", + "@solid-primitives/rootless", + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/keyed@3.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-56lCWOTjhGqTLTvB6Wr6fMWKbEdUTqokz3GA/FcQMCkEaIBRIldiyx5UdpBu7KqzTqERtjnDTBS8WTT2Bui3Ag==", + "dependencies": [ + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/map@1.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-zsdpdJeyzWq+VaFjIgYrPTcvd3PYfZ0jyJ4lzNhrbkeqMFyXlUpRTx89T89iLrywN4MVnWWPAdWNn9wZF4z99Q==", + "dependencies": [ + "@solid-primitives/trigger", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/media@4.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-aJij+btafw8BvjhTkyhcdJEDuxcTdKAMMT4lg7glm2Zetcxx+4Np9hrZ3nxn6Bqqmq0r1S3ybvRQYz9N8ceGCw==", + "dependencies": [ + "@solid-primitives/event-listener", + "@solid-primitives/rootless", + "@solid-primitives/static-store", + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/presence@1.0.0-next.0_solid-js@2.0.0-beta.15_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15": { + "integrity": "sha512-Dr66UGNa3a3JIs6WMf0QOgD3W2gCXrwLr9eGQUOSuUODzSQfKbgUjKK6L6Ly6yiIwvO/R0hnTHBXOGpeqztweg==", + "dependencies": [ + "@solid-primitives/utils", + "solid-js" + ] + }, + "@solid-primitives/props@4.0.0-next.1_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-tZW3t+xfzuyhzSea1b33WT3+f27INCID6lEOVQs9ZVx5YNET6zimDZRvgmocq1PGwNnY8ai7MrWbMyQyrM6tcg==", + "dependencies": [ + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/refs@3.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-GMOi4QG4dHm+ncmx2szI+FGZHU7B5THZWGpllrBSyzMhN9/kiMJ4SUiPC0CILxs0lCR5TxMxZnHef53cqp8K2Q==", + "dependencies": [ + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/resize-observer@4.0.0-next.1_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-dHOwG1CF9+TKIIPUHD9P3027iom6ZSnD449l1X47D7XgQDbLBqbNcMMSxgVh6k6UGByvXWxPerSKrBnzy4VneA==", + "dependencies": [ + "@solid-primitives/event-listener", + "@solid-primitives/rootless", + "@solid-primitives/static-store", + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/rootless@2.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-nDEqRDo6vjWA4GVDHTc7pyM2OaE4bQ4G+g4IhYgF+NQuZicfEqTeN9z7I7zJlrXa+fYky0HHJ/E1Wtk5LcC5Qg==", + "dependencies": [ + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/scroll@3.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-4OHcLTG2mUZloWYfCBggHwtOg8uThxlyGmRAWJdlMfzlLhvs7/OfOV+sgglNUJadaiJhJhWnVGsSqO39DDgQYQ==", + "dependencies": [ + "@solid-primitives/event-listener", + "@solid-primitives/rootless", + "@solid-primitives/static-store", + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/static-store@1.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-Gac0y4+M1IcnA5FwFn1g94lSeKgi22IdrXahYx6cPS2c62kNYzvjJlURvlbzFk+j9HV7kYCwaVYS2yxLTPgHBA==", + "dependencies": [ + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/trigger@3.0.0-next.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-VJDqd/cRn5kjquFvUjn1BkqMslWdp2yeZHRNWVHZp3A8y7fN0svVqhmdtDURfvvRKXlNUx7RBn4+nYLZCJXiNA==", + "dependencies": [ + "@solid-primitives/utils", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/upload@1.0.0-next.1_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-SRns510SDqrE3ow6KXsGSKFqV9anVwRdbrig6M7S70pZcGA7FHXwI+w6D8KhCQAJE85xSzL8jyLc3APndHvDxA==", + "dependencies": [ + "@solid-primitives/event-listener", + "@solidjs/web", + "solid-js" + ] + }, + "@solid-primitives/utils@7.0.0-next.1_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-dcWDzB/g5vfEw1Gg+Ml7r1pde9Sn3v9/IejZs18ZR2m4Ei6NZdQHmmZ5amWW2zfNbnOxr1aewG+KkqoreNN+eQ==", + "dependencies": [ + "@solidjs/web", + "solid-js" + ] + }, + "@solidjs/signals@2.0.0-beta.15": { + "integrity": "sha512-lw4a4frNajnmVjILbyfrgJ4ksqU+YKhkepZ8glKK9Q68O3zq7W8qDLOtsz5v1mt0o3TB11/rozJFpgMTmnYegg==" + }, + "@solidjs/testing-library@1.0.0-beta.2_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-TLhQ5IUT/fdDfqa4X2rkQWB28Y+zEwi6mK/TVTeiQlEHG63eK2jfgwNYf2NtQoPh2c3ihLilsCzxABiSTP3JoQ==", + "dependencies": [ + "@solidjs/web", + "@testing-library/dom@10.4.1", + "solid-js" + ] + }, + "@solidjs/web@2.0.0-beta.15_solid-js@2.0.0-beta.15": { + "integrity": "sha512-+LvmzzN5CHxQ+TeCGgA8DKuB8S4t0EHVlmDUlAp4hkLnh7My3ZGuKYHKWsFMd8w08nPgF6LdBZkH+c5iNcmcSA==", + "dependencies": [ + "seroval", + "seroval-plugins", + "solid-js" + ] + }, + "@storybook/addon-docs@10.5.0_@types+react@19.2.17_storybook@10.5.0__@types+react@19.2.17__prettier@4.0.0-alpha.10__react@19.2.7_@types+node@26.0.1_prettier@4.0.0-alpha.10_vite@6.4.3__@types+node@26.0.1": { + "integrity": "sha512-kbZGdX+mysiY4xezhpcFEwzQ1zSXcMhSS3u09Qt8+w5XetCAMMSv/yAxzpi6z+YoH+EdQ53e1q3MFtPUkzkfUA==", + "dependencies": [ + "@mdx-js/react", + "@storybook/csf-plugin", + "@storybook/icons", + "@storybook/react-dom-shim", + "@types/react", + "react", + "react-dom", + "storybook", + "ts-dedent" + ], + "optionalPeers": [ + "@types/react" + ] + }, + "@storybook/builder-vite@10.5.0_storybook@10.5.0__@types+react@19.2.17__prettier@4.0.0-alpha.10__react@19.2.7_vite@6.4.3__@types+node@26.0.1_@types+node@26.0.1_@types+react@19.2.17_prettier@4.0.0-alpha.10_react@19.2.7": { + "integrity": "sha512-KXlifNIThDgS84KqVAJXyilool8OLTWp6DGoO9h5bHM2IPLe7UcdKfOzMUBkQ807mWBk4aW1yGEekj7kC2dvmg==", + "dependencies": [ + "@storybook/csf-plugin", + "storybook", + "ts-dedent", + "vite@6.4.3_@types+node@26.0.1" + ] + }, + "@storybook/csf-plugin@10.5.0_storybook@10.5.0__@types+react@19.2.17__prettier@4.0.0-alpha.10__react@19.2.7_vite@6.4.3__@types+node@26.0.1_@types+node@26.0.1_@types+react@19.2.17_prettier@4.0.0-alpha.10_react@19.2.7": { + "integrity": "sha512-R7VFw6FnDZTWct0ekOcFnTfDgdHnnAuQW+AbGG9A9IZPvyH9uLJivK7L86+r9MITRrO2+v81HaFDsT/OFk6ZkQ==", + "dependencies": [ + "storybook", + "unplugin", + "vite@6.4.3_@types+node@26.0.1" + ], + "optionalPeers": [ + "vite@6.4.3_@types+node@26.0.1" + ] + }, + "@storybook/global@5.0.0": { + "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==" + }, + "@storybook/icons@2.1.0_react@19.2.7": { + "integrity": "sha512-Fxh9vYpX9bQqFeHRiY8h2ApeRGDzRSMLwJwNZ/AIRqnyOKHxRKL+yFe+ctEkVJmuptRE9u1Hrn8ZZNHyfDKKNg==", + "dependencies": [ + "react" + ] + }, + "@storybook/react-dom-shim@10.5.0_@types+react@19.2.17_react@19.2.7_react-dom@19.2.7__react@19.2.7_storybook@10.5.0__@types+react@19.2.17__prettier@4.0.0-alpha.10__react@19.2.7_prettier@4.0.0-alpha.10": { + "integrity": "sha512-GwGA6zDj4Cfw6vGsdfPKfF39L0W6solNbbnjdjGa57m2ooASkidLhrXo2wgC9wh3o/jcfonmYPDRGY6sEhGDtg==", + "dependencies": [ + "@types/react", + "react", + "react-dom", + "storybook" + ], + "optionalPeers": [ + "@types/react" + ] + }, + "@swc/helpers@0.5.23": { + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", + "dependencies": [ + "tslib" + ] + }, + "@tailwindcss/node@4.3.2": { + "integrity": "sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==", + "dependencies": [ + "@jridgewell/remapping", + "enhanced-resolve", + "jiti@2.7.0", + "lightningcss", + "magic-string", + "source-map-js", + "tailwindcss" + ] + }, + "@tailwindcss/oxide-android-arm64@4.3.2": { + "integrity": "sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==", + "os": ["android"], + "cpu": ["arm64"] + }, + "@tailwindcss/oxide-darwin-arm64@4.3.2": { + "integrity": "sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@tailwindcss/oxide-darwin-x64@4.3.2": { + "integrity": "sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@tailwindcss/oxide-freebsd-x64@4.3.2": { + "integrity": "sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2": { + "integrity": "sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@tailwindcss/oxide-linux-arm64-gnu@4.3.2": { + "integrity": "sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@tailwindcss/oxide-linux-arm64-musl@4.3.2": { + "integrity": "sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@tailwindcss/oxide-linux-x64-gnu@4.3.2": { + "integrity": "sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@tailwindcss/oxide-linux-x64-musl@4.3.2": { + "integrity": "sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@tailwindcss/oxide-wasm32-wasi@4.3.2": { + "integrity": "sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==", + "cpu": ["wasm32"] + }, + "@tailwindcss/oxide-win32-arm64-msvc@4.3.2": { + "integrity": "sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@tailwindcss/oxide-win32-x64-msvc@4.3.2": { + "integrity": "sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@tailwindcss/oxide@4.3.2": { + "integrity": "sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==", + "optionalDependencies": [ + "@tailwindcss/oxide-android-arm64", + "@tailwindcss/oxide-darwin-arm64", + "@tailwindcss/oxide-darwin-x64", + "@tailwindcss/oxide-freebsd-x64", + "@tailwindcss/oxide-linux-arm-gnueabihf", + "@tailwindcss/oxide-linux-arm64-gnu", + "@tailwindcss/oxide-linux-arm64-musl", + "@tailwindcss/oxide-linux-x64-gnu", + "@tailwindcss/oxide-linux-x64-musl", + "@tailwindcss/oxide-wasm32-wasi", + "@tailwindcss/oxide-win32-arm64-msvc", + "@tailwindcss/oxide-win32-x64-msvc" + ] + }, + "@tailwindcss/postcss@4.3.2": { + "integrity": "sha512-rjVWYCa7Ngbi5AarT6k8TkxUG3Wl1QKzHdIZVsjZSzf36Jmo2IKZt/NHRAwly8oDkbBOH0YTu+CHuf9jPxMc+g==", + "dependencies": [ + "@alloc/quick-lru", + "@tailwindcss/node", + "@tailwindcss/oxide", + "postcss@8.5.19", + "tailwindcss" + ] + }, + "@testing-library/dom@10.4.1": { + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dependencies": [ + "@babel/code-frame", + "@babel/runtime", + "@types/aria-query", + "aria-query@5.3.0", + "dom-accessibility-api@0.5.16", + "lz-string", + "picocolors", + "pretty-format" + ] + }, + "@testing-library/dom@9.3.4": { + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dependencies": [ + "@babel/code-frame", + "@babel/runtime", + "@types/aria-query", + "aria-query@5.1.3", + "chalk@4.1.2", + "dom-accessibility-api@0.5.16", + "lz-string", + "pretty-format" + ] + }, + "@testing-library/jest-dom@6.9.1": { + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "dependencies": [ + "@adobe/css-tools", + "aria-query@5.3.0", + "css.escape", + "dom-accessibility-api@0.6.3", + "picocolors", + "redent" + ] + }, + "@testing-library/user-event@14.6.1_@testing-library+dom@10.4.1": { + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dependencies": [ + "@testing-library/dom@10.4.1" + ] + }, + "@testing-library/user-event@14.6.1_@testing-library+dom@9.3.4": { + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dependencies": [ + "@testing-library/dom@9.3.4" + ] + }, + "@tybys/wasm-util@0.10.3": { + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dependencies": [ + "tslib" + ] + }, + "@types/aria-query@5.0.4": { + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" + }, + "@types/babel__core@7.20.5": { + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dependencies": [ + "@babel/parser", + "@babel/types", + "@types/babel__generator", + "@types/babel__template", + "@types/babel__traverse" + ] + }, + "@types/babel__generator@7.27.0": { + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dependencies": [ + "@babel/types" + ] + }, + "@types/babel__template@7.4.4": { + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dependencies": [ + "@babel/parser", + "@babel/types" + ] + }, + "@types/babel__traverse@7.28.0": { + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dependencies": [ + "@babel/types" + ] + }, + "@types/chai@5.2.3": { + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dependencies": [ + "@types/deep-eql", + "assertion-error" + ] + }, + "@types/deep-eql@4.0.2": { + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==" + }, + "@types/estree@1.0.9": { + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==" + }, + "@types/mdx@2.0.14": { + "integrity": "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==" + }, + "@types/node@12.20.55": { + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "@types/node@26.0.1": { + "integrity": "sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==", + "dependencies": [ + "undici-types" + ] + }, + "@types/react@19.2.17": { + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", + "dependencies": [ + "csstype" + ] + }, + "@vanilla-extract/css@1.13.0": { + "integrity": "sha512-JFFBXhnJrPlGqHBabagXqo5ghXw9mtV270ycIGyLDZG8NAK5eRwAYkMowAxuzK7wZSm67GnETWYB7b0AUmyttg==", + "dependencies": [ + "@emotion/hash", + "@vanilla-extract/private", + "ahocorasick", + "chalk@4.1.2", + "css-what", + "cssesc", + "csstype", + "deep-object-diff", + "deepmerge", + "media-query-parser", + "outdent@0.8.0" + ] + }, + "@vanilla-extract/private@1.0.9": { + "integrity": "sha512-gT2jbfZuaaCLrAxwXbRgIhGhcXbRZCG3v4TTUnjw0EJ7ArdBRxkq4msNJkbuRkCgfIK5ATmprB5t9ljvLeFDEA==" + }, + "@vitest/expect@2.1.9": { + "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", + "dependencies": [ + "@vitest/spy@2.1.9", + "@vitest/utils@2.1.9", + "chai", + "tinyrainbow@1.2.0" + ] + }, + "@vitest/expect@3.2.4": { + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dependencies": [ + "@types/chai", + "@vitest/spy@3.2.4", + "@vitest/utils@3.2.4", + "chai", + "tinyrainbow@2.0.0" + ] + }, + "@vitest/mocker@2.1.9_vite@5.4.21__@types+node@26.0.1_@types+node@26.0.1": { + "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", + "dependencies": [ + "@vitest/spy@2.1.9", + "estree-walker@3.0.3", + "magic-string", + "vite@5.4.21_@types+node@26.0.1" + ], + "optionalPeers": [ + "vite@5.4.21_@types+node@26.0.1" + ] + }, + "@vitest/pretty-format@2.1.9": { + "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", + "dependencies": [ + "tinyrainbow@1.2.0" + ] + }, + "@vitest/pretty-format@3.2.4": { + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dependencies": [ + "tinyrainbow@2.0.0" + ] + }, + "@vitest/runner@2.1.9": { + "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", + "dependencies": [ + "@vitest/utils@2.1.9", + "pathe" + ] + }, + "@vitest/snapshot@2.1.9": { + "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", + "dependencies": [ + "@vitest/pretty-format@2.1.9", + "magic-string", + "pathe" + ] + }, + "@vitest/spy@2.1.9": { + "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", + "dependencies": [ + "tinyspy@3.0.2" + ] + }, + "@vitest/spy@3.2.4": { + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dependencies": [ + "tinyspy@4.0.4" + ] + }, + "@vitest/ui@2.1.9_vitest@2.1.9_@types+node@26.0.1_jsdom@25.0.1": { + "integrity": "sha512-izzd2zmnk8Nl5ECYkW27328RbQ1nKvkm6Bb5DAaz1Gk59EbLkiCMa6OLT0NoaAYTjOFS6N+SMYW1nh4/9ljPiw==", + "dependencies": [ + "@vitest/utils@2.1.9", + "fflate", + "flatted", + "pathe", + "sirv", + "tinyglobby", + "tinyrainbow@1.2.0", + "vitest" + ] + }, + "@vitest/utils@2.1.9": { + "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", + "dependencies": [ + "@vitest/pretty-format@2.1.9", + "loupe", + "tinyrainbow@1.2.0" + ] + }, + "@vitest/utils@3.2.4": { + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dependencies": [ + "@vitest/pretty-format@3.2.4", + "loupe", + "tinyrainbow@2.0.0" + ] + }, + "@volar/language-core@2.4.28": { + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dependencies": [ + "@volar/source-map" + ] + }, + "@volar/source-map@2.4.28": { + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==" + }, + "@volar/typescript@2.4.28": { + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dependencies": [ + "@volar/language-core", + "path-browserify", + "vscode-uri" + ] + }, + "@webcontainer/env@1.1.1": { + "integrity": "sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==" + }, + "@yuku-codegen/binding-darwin-arm64@0.6.1": { + "integrity": "sha512-LDJtpOKtcv9f3V0eDUwFmmy47t2VC+DAuN+gq80R1IA+fa0d408i6sHsVtt6n+g5rf8f86ySoPSAe94lHt6Ixw==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@yuku-codegen/binding-darwin-x64@0.6.1": { + "integrity": "sha512-fBwpBOh33W7N87F94SVNExwm2KUV3ROhk51okr3Oy2ost1/JJuBWINVjcgwd2WPKZEFzUXgCzj/03UR/G+WIrQ==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@yuku-codegen/binding-freebsd-x64@0.6.1": { + "integrity": "sha512-UpMkskQV3a5oPnJV+GFFupIqnLwSBD4ZsZAVUZuNVkrqct433FHKqTwuG+P5JhHZbmhf+++3Ie/V2sgduyXrAQ==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@yuku-codegen/binding-linux-arm-gnu@0.6.1": { + "integrity": "sha512-HICjDelfEDeD6TD8OEz/Dvt8KHxJiETR+paI/Fr7eVTQbjMfRrXJz8O1qV1qGH5SHZUGl2SAw2Rp+MLtXOjCrQ==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@yuku-codegen/binding-linux-arm-musl@0.6.1": { + "integrity": "sha512-pUswnwa+WOmtH2ZGOWL05kFLMNY7/TnEAryfIv1yVFzKQnmSy9TKYi3oIOxGZL3w+cdUKCZ6Q+jaD0oI10ztzA==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@yuku-codegen/binding-linux-arm64-gnu@0.6.1": { + "integrity": "sha512-Zro0FOu9clLCmqCnUKzEWHAu30tss0iEfhs+KDXm9Dpm1FkIHAKu43tF6FQU2hsTA7a8xd93NGddzc2EOJFKUg==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@yuku-codegen/binding-linux-arm64-musl@0.6.1": { + "integrity": "sha512-NZaT+mp9toqWuFEA4MYW5HMRxgIa8DCqnTTnM5SrrojZgm4QoMI/mJfifVet1ZHgl/Dly5m6H6GPpq43uXVj8g==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@yuku-codegen/binding-linux-x64-gnu@0.6.1": { + "integrity": "sha512-M5macseSCBPvJ4yfKNyQpMc7nBQBtj39MNfMt0r+8UkTnR5qJE00JJx06puHgPxT5hnGxMAuAWZ+3a9H2ngqAw==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@yuku-codegen/binding-linux-x64-musl@0.6.1": { + "integrity": "sha512-liAyBZI5AbazZGeeNfWj0jCD/TE2L84hgVYh4KkjJA/N9bNzFQCDf4BvWP76nEO89r2tIGEUjbXdM4mM26riHg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@yuku-codegen/binding-win32-arm64@0.6.1": { + "integrity": "sha512-qItzfH3x6MYChPeGfvh22rHD92WLgXQRSuwvspRVSnLvpnubEfZd+9REPRQVT2l9fIuETDCEkDNRqkDROQTkgA==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@yuku-codegen/binding-win32-x64@0.6.1": { + "integrity": "sha512-DFFkKROZ9ZAHmFMUFRtRTkosZds1KH8BOx5t3UpNULIjT3iuUmEx9V5pWR0xOi66sANY38Ap77nz1kOZraQxEg==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@yuku-parser/binding-darwin-arm64@0.6.1": { + "integrity": "sha512-jORysyRZg5zGDgVw15LGMsjZDh7jwjpUIJRBHgFt0ir15O5pEazfvuF2dnwvrJiTF0IT1EgHAVbTAYJWwQLCjg==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "@yuku-parser/binding-darwin-x64@0.6.1": { + "integrity": "sha512-dTeYFkkFlbP/WCB2DtezXas3NApOPtFlXSdssB7wGtY9wpNp4HAkVo1KBwI5mcHK0e2joyUcqTSf44mFE+q7vg==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "@yuku-parser/binding-freebsd-x64@0.6.1": { + "integrity": "sha512-GExDp3rebo28mt3EAjvKQs0ZC3gkznAErV0I9TUNDa9muuhvD35kft61Mpsc6+NWeE+BG+kUyKbm6iO5B6ZMMA==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "@yuku-parser/binding-linux-arm-gnu@0.6.1": { + "integrity": "sha512-a9MjABj4J0VE3Z2oROGhmeddZZrhwwrnl4ZWZOuHUhD/smDtDiNtr0LpCbKB7rEYaQ29snopOPdZ/0T3YgLglQ==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@yuku-parser/binding-linux-arm-musl@0.6.1": { + "integrity": "sha512-ctuvXJgDRKKlmJfHxT4RsTvcAcHEFNJHTCsGbtt4rluQpVDc+ezk9JvQ534ehoIfZ9T0eIHSBgqYAZ4xCatNmQ==", + "os": ["linux"], + "cpu": ["arm"] + }, + "@yuku-parser/binding-linux-arm64-gnu@0.6.1": { + "integrity": "sha512-vRtyoTtT0Ltowuh9LWOl/ZNU9h79J89ilOz5SEGspcw0jfhoUt19i07VNitll4jjfg5p2EN00q+MqX0pAobrFw==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@yuku-parser/binding-linux-arm64-musl@0.6.1": { + "integrity": "sha512-vCsc3GOe1ylmRyfo/WLjIhjiCmaTtJbWNF4ZtgjNegDjpsRsFuCcP9duXB41QcfnJK38repKVFqFh0LR3l48FA==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "@yuku-parser/binding-linux-x64-gnu@0.6.1": { + "integrity": "sha512-gw3d81RdUHSYwjDW2IG6gEtm4VDoPP4ZOqpuC6Nc8+UBfos+4gTWOgzmuxIOVhkSV2fJCcUDpSJIlPzEU0FLZw==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@yuku-parser/binding-linux-x64-musl@0.6.1": { + "integrity": "sha512-nzU+Doq9UgZvYYvald36lZJ2Neeyheije6WE/YpoFt/oJiNmnjArRgr2CMtb/7gWBl80YSMwcHK4Ju0E+7wfWg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "@yuku-parser/binding-win32-arm64@0.6.1": { + "integrity": "sha512-r3tXFVDliWCPe7TL6DVxUkT4rkqnXyeFVSEDf+V9My6Gztq99/gIe3POQqFbshTRuSrpEYMGMbGxeFh+m+stxA==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "@yuku-parser/binding-win32-x64@0.6.1": { + "integrity": "sha512-FqYMOqeCS2XTdn5yvaKlOhtSQ84mVO3aTXp6LGfMd9Zq8RsV4H8qLWv+sxJsgPCXfuBV64u8/f+CTr3uIwNLWA==", + "os": ["win32"], + "cpu": ["x64"] + }, + "@yuku-toolchain/types@0.5.43": { + "integrity": "sha512-kSpvPntnXw5+lYjO71ffBEnQ5ycQ74KGIYknh0TS4xeyCuBkOqxyJumxZkMhLBBUCLjDAbx2+Icnr3Zh4ftjpQ==" + }, + "acorn@8.17.0": { + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "bin": true + }, + "agent-base@7.1.4": { + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==" + }, + "ahocorasick@1.0.2": { + "integrity": "sha512-hCOfMzbFx5IDutmWLAt6MZwOUjIfSM9G9FyVxytmE4Rs/5YDPWQrD/+IR1w+FweD9H2oOZEnv36TmkjhNURBVA==" + }, + "ajv@8.20.0": { + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dependencies": [ + "fast-deep-equal", + "fast-uri", + "json-schema-traverse", + "require-from-string" + ] + }, + "ansi-colors@4.1.3": { + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + }, + "ansi-escapes@4.3.2": { + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": [ + "type-fest" + ] + }, + "ansi-purge@1.1.0": { + "integrity": "sha512-sa1KWMANfZurQkYemaVNNJh8gRF0iUJvcVNxvjPlYM9pPPTB0v+VKH/mFRz4s6gXA8plimQXorJSqJgutxUs8g==" + }, + "ansi-regex@5.0.1": { + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-regex@6.2.2": { + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" + }, + "ansi-styles@3.2.1": { + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": [ + "color-convert@1.9.3" + ] + }, + "ansi-styles@4.3.0": { + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": [ + "color-convert@2.0.1" + ] + }, + "ansi-styles@5.2.0": { + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + }, + "ansi-styles@6.2.3": { + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" + }, + "ansi-truncate@1.4.0": { + "integrity": "sha512-p6d2MrNs/mbpdXFT08fGabIg4pbgnUbbhrsoFfxWV5L3zFKw7tUkYUxGY3xCGJUPohENM80Q4sWkl/VDEN3pZg==", + "dependencies": [ + "fast-string-truncated-width" + ] + }, + "ansis@4.3.1": { + "integrity": "sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==" + }, + "argparse@1.0.10": { + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": [ + "sprintf-js" + ] + }, + "argparse@2.0.1": { + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "argue-cli@3.1.0": { + "integrity": "sha512-DhBpBfXL4SS2uC0N922MMajKR3CdrTG0u2or1PNYgXMsrSzViJrbtvT0nCLlLGUI0plam/ZZCs7aAauHtW9thw==" + }, + "aria-query@5.1.3": { + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": [ + "deep-equal" + ] + }, + "aria-query@5.3.0": { + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": [ + "dequal" + ] + }, + "array-buffer-byte-length@1.0.2": { + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dependencies": [ + "call-bound", + "is-array-buffer" + ] + }, + "array-ify@1.0.0": { + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==" + }, + "array-union@2.1.0": { + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "assertion-error@2.0.1": { + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==" + }, + "ast-types@0.16.1": { + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dependencies": [ + "tslib" + ] + }, + "asynckit@0.4.0": { + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "at-least-node@1.0.0": { + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "atomically@2.1.1": { + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", + "dependencies": [ + "stubborn-fs", + "when-exit" + ] + }, + "available-typed-arrays@1.0.7": { + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": [ + "possible-typed-array-names" + ] + }, + "babel-plugin-jsx-dom-expressions@0.40.7_@babel+core@7.29.7": { + "integrity": "sha512-/O6JWUmjv03OI9lL2ry9bUjpD5S3PclM55RRJEyCdcFZ5W2SEA/59d+l2hNsk3gI6kiWRdRPdOtqZmsQzFN1pQ==", + "dependencies": [ + "@babel/core", + "@babel/helper-module-imports@7.18.6", + "@babel/plugin-syntax-jsx", + "@babel/types", + "html-entities", + "parse5" + ] + }, + "babel-plugin-jsx-dom-expressions@0.50.0-next.14_@babel+core@7.29.7": { + "integrity": "sha512-eMUq8UuVs5ROCiYmtMBp/TWuRxL7GZ32JUs47CmTzZo8hX9AIayTnNtbsBmQlfEnJla3TaxgBYDvGxNlHCqVcA==", + "dependencies": [ + "@babel/core", + "@babel/helper-module-imports@7.18.6", + "@babel/plugin-syntax-jsx", + "@babel/types", + "html-entities", + "parse5", + "validate-html-nesting" + ] + }, + "babel-preset-solid@1.9.12_@babel+core@7.29.7_solid-js@2.0.0-beta.15": { + "integrity": "sha512-LLqnuKVDlKpyBlMPcH6qEvs/wmS9a+NczppxJ3ryS/c0O5IiSFOIBQi9GzyiGDSbcJpx4Gr87jyFTos1MyEuWg==", + "dependencies": [ + "@babel/core", + "babel-plugin-jsx-dom-expressions@0.40.7_@babel+core@7.29.7", + "solid-js" + ], + "optionalPeers": [ + "solid-js" + ] + }, + "babel-preset-solid@2.0.0-beta.15_@babel+core@7.29.7_solid-js@2.0.0-beta.15": { + "integrity": "sha512-nXbT3ZlgHmVcH1VvEFwyrxcMQmpRJ55JoOLy+4wAxpaYtADw5YJh4t5UlT5WyuWfv6VC7URDCkFGEdAOjmTwjw==", + "dependencies": [ + "@babel/core", + "babel-plugin-jsx-dom-expressions@0.50.0-next.14_@babel+core@7.29.7", + "solid-js" + ], + "optionalPeers": [ + "solid-js" + ] + }, + "balanced-match@1.0.2": { + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js@1.5.1": { + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "baseline-browser-mapping@2.10.43": { + "integrity": "sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==", + "bin": true + }, + "better-path-resolve@1.0.0": { + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dependencies": [ + "is-windows" + ] + }, + "binary-extensions@2.3.0": { + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + }, + "bl@4.1.0": { + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": [ + "buffer", + "inherits", + "readable-stream" + ] + }, + "brace-expansion@1.1.16": { + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", + "dependencies": [ + "balanced-match", + "concat-map" + ] + }, + "braces@3.0.3": { + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": [ + "fill-range" + ] + }, + "browserslist@4.28.6": { + "integrity": "sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==", + "dependencies": [ + "baseline-browser-mapping", + "caniuse-lite", + "electron-to-chromium", + "node-releases", + "update-browserslist-db" + ], + "bin": true + }, + "buffer@5.7.1": { + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dependencies": [ + "base64-js", + "ieee754" + ] + }, + "bundle-name@4.1.0": { + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dependencies": [ + "run-applescript" + ] + }, + "cac@6.7.14": { + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==" + }, + "cac@7.0.0": { + "integrity": "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==" + }, + "cachedir@2.3.0": { + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==" + }, + "call-bind-apply-helpers@1.0.2": { + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": [ + "es-errors", + "function-bind" + ] + }, + "call-bind@1.0.9": { + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dependencies": [ + "call-bind-apply-helpers", + "es-define-property", + "get-intrinsic", + "set-function-length" + ] + }, + "call-bound@1.0.4": { + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": [ + "call-bind-apply-helpers", + "get-intrinsic" + ] + }, + "callsites@3.1.0": { + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "caniuse-lite@1.0.30001805": { + "integrity": "sha512-52noaS3DubycKSXaU30TwPGIp+POyQSUVa5jBEq3vkRkY0kjyb3LQgvhU6WGyCcyXqVLWO0Cw0Q6BSdD0kUfVA==" + }, + "chai@5.3.3": { + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dependencies": [ + "assertion-error", + "check-error", + "deep-eql", + "loupe", + "pathval" + ] + }, + "chalk@2.4.2": { + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": [ + "ansi-styles@3.2.1", + "escape-string-regexp", + "supports-color@5.5.0" + ] + }, + "chalk@4.1.2": { + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": [ + "ansi-styles@4.3.0", + "supports-color@7.2.0" + ] + }, + "chardet@0.7.0": { + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "chardet@2.2.0": { + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==" + }, + "check-error@2.1.3": { + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==" + }, + "cli-cursor@3.1.0": { + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": [ + "restore-cursor" + ] + }, + "cli-spinners@2.9.2": { + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==" + }, + "cli-width@3.0.0": { + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "cliui@9.0.1": { + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dependencies": [ + "string-width@7.2.0", + "strip-ansi@7.2.0", + "wrap-ansi@9.0.2" + ] + }, + "clone@1.0.4": { + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + }, + "color-convert@1.9.3": { + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": [ + "color-name@1.1.3" + ] + }, + "color-convert@2.0.1": { + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": [ + "color-name@1.1.4" + ] + }, + "color-name@1.1.3": { + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "color-name@1.1.4": { + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "combined-stream@1.0.8": { + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": [ + "delayed-stream" + ] + }, + "commitizen@4.3.0_@types+node@26.0.1_typescript@6.0.3": { + "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", + "dependencies": [ + "cachedir", + "cz-conventional-changelog", + "dedent", + "detect-indent", + "find-node-modules", + "find-root", + "fs-extra@9.1.0", + "glob", + "inquirer", + "is-utf8", + "lodash", + "minimist", + "strip-bom@4.0.0", + "strip-json-comments" + ], + "bin": true + }, + "compare-func@2.0.0": { + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dependencies": [ + "array-ify", + "dot-prop" + ] + }, + "concat-map@0.0.1": { + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "conventional-changelog-angular@9.2.1": { + "integrity": "sha512-oWSL6ZhnXbYraOFTK3PgRAQJ8fADDAEv5K6AdeyQPLvjFmhG8+ejL0jZZp/R7vTmGJaBvZEE+sE7dB4bCv7sAw==", + "dependencies": [ + "@conventional-changelog/template" + ] + }, + "conventional-changelog-conventionalcommits@9.3.1": { + "integrity": "sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==", + "dependencies": [ + "compare-func" + ] + }, + "conventional-commit-types@3.0.0": { + "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==" + }, + "conventional-commits-parser@7.1.0": { + "integrity": "sha512-DPp6hkUjvwIivxbkrTiLXeRswNv1A/4GFA2X6scXma0AMa9632V3TwxmrlkUIEtUktiM3Ln+RrSH2xlP3/jUTw==", + "dependencies": [ + "@simple-libs/stream-utils", + "argue-cli" + ], + "bin": true + }, + "convert-source-map@2.0.0": { + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "cosmiconfig-typescript-loader@6.3.0_@types+node@26.0.1_cosmiconfig@9.0.2__typescript@6.0.3_typescript@6.0.3": { + "integrity": "sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==", + "dependencies": [ + "@types/node@26.0.1", + "cosmiconfig", + "jiti@2.6.1", + "typescript" + ] + }, + "cosmiconfig@9.0.2_typescript@6.0.3": { + "integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==", + "dependencies": [ + "env-paths", + "import-fresh", + "js-yaml@4.3.0", + "parse-json", + "typescript" + ], + "optionalPeers": [ + "typescript" + ] + }, + "cross-spawn@7.0.6": { + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": [ + "path-key", + "shebang-command", + "which@2.0.2" + ] + }, + "css-what@6.2.2": { + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==" + }, + "css.escape@1.5.1": { + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, + "cssesc@3.0.0": { + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": true + }, + "cssstyle@4.6.0": { + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dependencies": [ + "@asamuzakjp/css-color", + "rrweb-cssom@0.8.0" + ] + }, + "csstype@3.2.3": { + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" + }, + "cz-conventional-changelog@3.3.0_@types+node@26.0.1_typescript@6.0.3": { + "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", + "dependencies": [ + "chalk@2.4.2", + "commitizen", + "conventional-commit-types", + "lodash.map", + "longest", + "word-wrap" + ], + "optionalDependencies": [ + "@commitlint/load" + ] + }, + "data-urls@5.0.0": { + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dependencies": [ + "whatwg-mimetype", + "whatwg-url" + ] + }, + "debug@4.4.3": { + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": [ + "ms" + ] + }, + "decimal.js@10.6.0": { + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==" + }, + "dedent@0.7.0": { + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "deep-eql@5.0.2": { + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==" + }, + "deep-equal@2.2.3": { + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dependencies": [ + "array-buffer-byte-length", + "call-bind", + "es-get-iterator", + "get-intrinsic", + "is-arguments", + "is-array-buffer", + "is-date-object", + "is-regex", + "is-shared-array-buffer", + "isarray", + "object-is", + "object-keys", + "object.assign", + "regexp.prototype.flags", + "side-channel", + "which-boxed-primitive", + "which-collection", + "which-typed-array" + ] + }, + "deep-object-diff@1.1.9": { + "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==" + }, + "deepmerge@4.3.1": { + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + }, + "default-browser-id@5.0.1": { + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==" + }, + "default-browser@5.5.0": { + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dependencies": [ + "bundle-name", + "default-browser-id" + ] + }, + "defaults@1.0.4": { + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": [ + "clone" + ] + }, + "define-data-property@1.1.4": { + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": [ + "es-define-property", + "es-errors", + "gopd" + ] + }, + "define-lazy-prop@3.0.0": { + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" + }, + "define-properties@1.2.1": { + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": [ + "define-data-property", + "has-property-descriptors", + "object-keys" + ] + }, + "defu@6.1.7": { + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==" + }, + "delayed-stream@1.0.0": { + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "dequal@2.0.3": { + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" + }, + "detect-file@1.0.0": { + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==" + }, + "detect-indent@6.1.0": { + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" + }, + "detect-libc@2.1.2": { + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==" + }, + "dettle@1.0.5": { + "integrity": "sha512-ZVyjhAJ7sCe1PNXEGveObOH9AC8QvMga3HJIghHawtG7mE4K5pW9nz/vDGAr/U7a3LWgdOzEE7ac9MURnyfaTA==" + }, + "dir-glob@3.0.1": { + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": [ + "path-type" + ] + }, + "dom-accessibility-api@0.5.16": { + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" + }, + "dom-accessibility-api@0.6.3": { + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==" + }, + "dot-prop@5.3.0": { + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": [ + "is-obj" + ] + }, + "dts-resolver@3.0.0": { + "integrity": "sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==" + }, + "dunder-proto@1.0.1": { + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": [ + "call-bind-apply-helpers", + "es-errors", + "gopd" + ] + }, + "electron-to-chromium@1.5.389": { + "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==" + }, + "emoji-regex@10.6.0": { + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" + }, + "emoji-regex@8.0.0": { + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "empathic@2.0.1": { + "integrity": "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==" + }, + "enhanced-resolve@5.21.6": { + "integrity": "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==", + "dependencies": [ + "graceful-fs", + "tapable" + ] + }, + "enquirer@2.4.1": { + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dependencies": [ + "ansi-colors", + "strip-ansi@6.0.1" + ] + }, + "entities@6.0.1": { + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==" + }, + "env-paths@2.2.1": { + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, + "error-ex@1.3.4": { + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dependencies": [ + "is-arrayish" + ] + }, + "es-define-property@1.0.1": { + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors@1.3.0": { + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-get-iterator@1.1.3": { + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": [ + "call-bind", + "get-intrinsic", + "has-symbols", + "is-arguments", + "is-map", + "is-set", + "is-string", + "isarray", + "stop-iteration-iterator" + ] + }, + "es-module-lexer@1.7.0": { + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==" + }, + "es-object-atoms@1.1.2": { + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dependencies": [ + "es-errors" + ] + }, + "es-set-tostringtag@2.1.0": { + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": [ + "es-errors", + "get-intrinsic", + "has-tostringtag", + "hasown" + ] + }, + "es-toolkit@1.49.0": { + "integrity": "sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==" + }, + "esbuild@0.21.5": { + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "optionalDependencies": [ + "@esbuild/aix-ppc64@0.21.5", + "@esbuild/android-arm@0.21.5", + "@esbuild/android-arm64@0.21.5", + "@esbuild/android-x64@0.21.5", + "@esbuild/darwin-arm64@0.21.5", + "@esbuild/darwin-x64@0.21.5", + "@esbuild/freebsd-arm64@0.21.5", + "@esbuild/freebsd-x64@0.21.5", + "@esbuild/linux-arm@0.21.5", + "@esbuild/linux-arm64@0.21.5", + "@esbuild/linux-ia32@0.21.5", + "@esbuild/linux-loong64@0.21.5", + "@esbuild/linux-mips64el@0.21.5", + "@esbuild/linux-ppc64@0.21.5", + "@esbuild/linux-riscv64@0.21.5", + "@esbuild/linux-s390x@0.21.5", + "@esbuild/linux-x64@0.21.5", + "@esbuild/netbsd-x64@0.21.5", + "@esbuild/openbsd-x64@0.21.5", + "@esbuild/sunos-x64@0.21.5", + "@esbuild/win32-arm64@0.21.5", + "@esbuild/win32-ia32@0.21.5", + "@esbuild/win32-x64@0.21.5" + ], + "scripts": true, + "bin": true + }, + "esbuild@0.25.12": { + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "optionalDependencies": [ + "@esbuild/aix-ppc64@0.25.12", + "@esbuild/android-arm@0.25.12", + "@esbuild/android-arm64@0.25.12", + "@esbuild/android-x64@0.25.12", + "@esbuild/darwin-arm64@0.25.12", + "@esbuild/darwin-x64@0.25.12", + "@esbuild/freebsd-arm64@0.25.12", + "@esbuild/freebsd-x64@0.25.12", + "@esbuild/linux-arm@0.25.12", + "@esbuild/linux-arm64@0.25.12", + "@esbuild/linux-ia32@0.25.12", + "@esbuild/linux-loong64@0.25.12", + "@esbuild/linux-mips64el@0.25.12", + "@esbuild/linux-ppc64@0.25.12", + "@esbuild/linux-riscv64@0.25.12", + "@esbuild/linux-s390x@0.25.12", + "@esbuild/linux-x64@0.25.12", + "@esbuild/netbsd-arm64@0.25.12", + "@esbuild/netbsd-x64@0.25.12", + "@esbuild/openbsd-arm64@0.25.12", + "@esbuild/openbsd-x64@0.25.12", + "@esbuild/openharmony-arm64@0.25.12", + "@esbuild/sunos-x64@0.25.12", + "@esbuild/win32-arm64@0.25.12", + "@esbuild/win32-ia32@0.25.12", + "@esbuild/win32-x64@0.25.12" + ], + "scripts": true, + "bin": true + }, + "esbuild@0.28.1": { + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "optionalDependencies": [ + "@esbuild/aix-ppc64@0.28.1", + "@esbuild/android-arm@0.28.1", + "@esbuild/android-arm64@0.28.1", + "@esbuild/android-x64@0.28.1", + "@esbuild/darwin-arm64@0.28.1", + "@esbuild/darwin-x64@0.28.1", + "@esbuild/freebsd-arm64@0.28.1", + "@esbuild/freebsd-x64@0.28.1", + "@esbuild/linux-arm@0.28.1", + "@esbuild/linux-arm64@0.28.1", + "@esbuild/linux-ia32@0.28.1", + "@esbuild/linux-loong64@0.28.1", + "@esbuild/linux-mips64el@0.28.1", + "@esbuild/linux-ppc64@0.28.1", + "@esbuild/linux-riscv64@0.28.1", + "@esbuild/linux-s390x@0.28.1", + "@esbuild/linux-x64@0.28.1", + "@esbuild/netbsd-arm64@0.28.1", + "@esbuild/netbsd-x64@0.28.1", + "@esbuild/openbsd-arm64@0.28.1", + "@esbuild/openbsd-x64@0.28.1", + "@esbuild/openharmony-arm64@0.28.1", + "@esbuild/sunos-x64@0.28.1", + "@esbuild/win32-arm64@0.28.1", + "@esbuild/win32-ia32@0.28.1", + "@esbuild/win32-x64@0.28.1" + ], + "scripts": true, + "bin": true + }, + "escalade@3.2.0": { + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + }, + "escape-string-regexp@1.0.5": { + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "esprima@4.0.1": { + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": true + }, + "estree-walker@2.0.2": { + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "estree-walker@3.0.3": { + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": [ + "@types/estree" + ] + }, + "expand-tilde@2.0.2": { + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dependencies": [ + "homedir-polyfill" + ] + }, + "expect-type@1.4.0": { + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==" + }, + "extendable-error@0.1.7": { + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==" + }, + "external-editor@3.1.0": { + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": [ + "chardet@0.7.0", + "iconv-lite@0.4.24", + "tmp" + ] + }, + "fast-deep-equal@3.1.3": { + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob@3.3.3": { + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dependencies": [ + "@nodelib/fs.stat", + "@nodelib/fs.walk", + "glob-parent", + "merge2", + "micromatch" + ] + }, + "fast-ignore@1.1.3": { + "integrity": "sha512-xTo4UbrOKfEQgOFlPaqFScodTV/Wf3KATEqCZZSMh6OP4bcez0lTsqww3n3/Fve1q9u0jmfDP0q0nOhH4POZEg==", + "dependencies": [ + "grammex", + "string-escape-regex" + ] + }, + "fast-string-truncated-width@3.0.3": { + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==" + }, + "fast-string-width@3.0.2": { + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dependencies": [ + "fast-string-truncated-width" + ] + }, + "fast-uri@3.1.3": { + "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==" + }, + "fastq@1.20.1": { + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dependencies": [ + "reusify" + ] + }, + "fdir@6.5.0_picomatch@4.0.5": { + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dependencies": [ + "picomatch@4.0.5" + ], + "optionalPeers": [ + "picomatch@4.0.5" + ] + }, + "fflate@0.8.3": { + "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==" + }, + "figures@3.2.0": { + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": [ + "escape-string-regexp" + ] + }, + "fill-range@7.1.1": { + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": [ + "to-regex-range" + ] + }, + "find-node-modules@2.1.3": { + "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", + "dependencies": [ + "findup-sync", + "merge" + ] + }, + "find-root@1.1.0": { + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up-json@2.0.5": { + "integrity": "sha512-1zZZUfD1GOOEEd1AqwbRmCkCCv1O9t0vOpCYgmzfJqKty8WKaKlDyxWej8Aew+vI5lvDiTviaQuaVuu6GzlHzQ==", + "dependencies": [ + "find-up-path" + ] + }, + "find-up-path@1.0.1": { + "integrity": "sha512-cl4Sfxufq9WK848L887b4r+NVZoBjMeB4QydPZ+pXbp6Jt2nUVspTo2svNOm48stIIeSxtuCsULa9+e+LMTzwA==" + }, + "find-up@4.1.0": { + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": [ + "locate-path", + "path-exists" + ] + }, + "findup-sync@4.0.0": { + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "dependencies": [ + "detect-file", + "is-glob", + "micromatch", + "resolve-dir" + ] + }, + "flatted@3.4.2": { + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==" + }, + "for-each@0.3.5": { + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dependencies": [ + "is-callable" + ] + }, + "form-data@4.0.6": { + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dependencies": [ + "asynckit", + "combined-stream", + "es-set-tostringtag", + "hasown", + "mime-types" + ] + }, + "fs-extra@7.0.1": { + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dependencies": [ + "graceful-fs", + "jsonfile@4.0.0", + "universalify@0.1.2" + ] + }, + "fs-extra@8.1.0": { + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": [ + "graceful-fs", + "jsonfile@4.0.0", + "universalify@0.1.2" + ] + }, + "fs-extra@9.1.0": { + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": [ + "at-least-node", + "graceful-fs", + "jsonfile@6.2.1", + "universalify@2.0.1" + ] + }, + "fs.realpath@1.0.0": { + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents@2.3.3": { + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "os": ["darwin"], + "scripts": true + }, + "function-bind@1.1.2": { + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "function-once@3.0.1": { + "integrity": "sha512-bE3E8REk4jANDot3l0sLFkXgywBwzFKsmbwdnVHLJUnt/3kV6dNG0oJJqoRBuS1Z9Lr4ZoQgwV0ZNLDgWDbv7Q==" + }, + "functions-have-names@1.2.3": { + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "gensync@1.0.0-beta.2": { + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file@2.0.5": { + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-current-package@1.0.1": { + "integrity": "sha512-c/Rw5ByDQ+zg+Lh/emBWv0bDpugEFdmXPR6/srIemVtIvol0XbT0JAr8Db0cX+Jj/xY9wj1wdjeq2qNB35Tayg==", + "dependencies": [ + "find-up-json" + ] + }, + "get-east-asian-width@1.6.0": { + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==" + }, + "get-intrinsic@1.3.0": { + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": [ + "call-bind-apply-helpers", + "es-define-property", + "es-errors", + "es-object-atoms", + "function-bind", + "get-proto", + "gopd", + "has-symbols", + "hasown", + "math-intrinsics" + ] + }, + "get-proto@1.0.1": { + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": [ + "dunder-proto", + "es-object-atoms" + ] + }, + "get-tsconfig@5.0.0-beta.5": { + "integrity": "sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==", + "dependencies": [ + "resolve-pkg-maps" + ] + }, + "glob-parent@5.1.2": { + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": [ + "is-glob" + ] + }, + "glob@7.2.3": { + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": [ + "fs.realpath", + "inflight", + "inherits", + "minimatch", + "once", + "path-is-absolute" + ], + "deprecated": true + }, + "global-directory@5.0.0": { + "integrity": "sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==", + "dependencies": [ + "ini@6.0.0" + ] + }, + "global-modules@1.0.0": { + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dependencies": [ + "global-prefix", + "is-windows", + "resolve-dir" + ] + }, + "global-prefix@1.0.2": { + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dependencies": [ + "expand-tilde", + "homedir-polyfill", + "ini@1.3.8", + "is-windows", + "which@1.3.1" + ] + }, + "globby@11.1.0": { + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": [ + "array-union", + "dir-glob", + "fast-glob", + "ignore", + "merge2", + "slash" + ] + }, + "gopd@1.2.0": { + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "graceful-fs@4.2.11": { + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "grammex@3.1.13": { + "integrity": "sha512-LnPnhOBLEJEVKS8WFDVaA397L9Kq55Q9oSITJiVLHVdhAclfUkWzQv74KhvZHKL2Q09Pb1XdsrOsZ4LfTFFTEg==" + }, + "graphmatch@1.1.1": { + "integrity": "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==" + }, + "has-bigints@1.1.0": { + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==" + }, + "has-flag@3.0.0": { + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "has-flag@4.0.0": { + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-property-descriptors@1.0.2": { + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": [ + "es-define-property" + ] + }, + "has-symbols@1.1.0": { + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "has-tostringtag@1.0.2": { + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": [ + "has-symbols" + ] + }, + "hasown@2.0.4": { + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dependencies": [ + "function-bind" + ] + }, + "homedir-polyfill@1.0.3": { + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dependencies": [ + "parse-passwd" + ] + }, + "hookable@6.1.1": { + "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==" + }, + "html-encoding-sniffer@4.0.0": { + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dependencies": [ + "whatwg-encoding" + ] + }, + "html-entities@2.3.3": { + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "http-proxy-agent@7.0.2": { + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": [ + "agent-base", + "debug" + ] + }, + "https-proxy-agent@7.0.6": { + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dependencies": [ + "agent-base", + "debug" + ] + }, + "human-id@4.2.0": { + "integrity": "sha512-K3GbkIWqyvvlpfhBPlbEvD97TtqBpAYA4kt+cn2lD2x2HuohzZCibcA2nOlnJT6exqvJLggoB5nv2dNf192nEA==", + "bin": true + }, + "iconv-lite@0.4.24": { + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": [ + "safer-buffer" + ] + }, + "iconv-lite@0.6.3": { + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": [ + "safer-buffer" + ] + }, + "iconv-lite@0.7.3": { + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "dependencies": [ + "safer-buffer" + ] + }, + "ieee754@1.2.1": { + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore@5.3.2": { + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" + }, + "import-fresh@3.3.1": { + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dependencies": [ + "parent-module", + "resolve-from@4.0.0" + ] + }, + "import-meta-resolve@4.2.0": { + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==" + }, + "import-without-cache@0.4.0": { + "integrity": "sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==" + }, + "indent-string@4.0.0": { + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "inflight@1.0.6": { + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": [ + "once", + "wrappy" + ], + "deprecated": true + }, + "inherits@2.0.4": { + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini-simple-parser@1.0.1": { + "integrity": "sha512-myU5nhF2miBQP3tO/giUi+8BI9QhfM/XRZd0RD7G0p+40K6KPAwxMDtH3UEtJ2XJZbd+ZiQOoGh432DTYfzNVQ==" + }, + "ini@1.3.8": { + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "ini@6.0.0": { + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==" + }, + "inquirer@8.2.5": { + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dependencies": [ + "ansi-escapes", + "chalk@4.1.2", + "cli-cursor", + "cli-width", + "external-editor", + "figures", + "lodash", + "mute-stream", + "ora", + "run-async", + "rxjs", + "string-width@4.2.3", + "strip-ansi@6.0.1", + "through", + "wrap-ansi@7.0.0" + ] + }, + "internal-slot@1.1.0": { + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dependencies": [ + "es-errors", + "hasown", + "side-channel" + ] + }, + "ionstore@1.0.1": { + "integrity": "sha512-g+99vyka3EiNFJCnbq3NxegjV211RzGtkDUMbZGB01Con8ZqUmMx/FpWMeqgDXOqgM7QoVeDhe+CfYCWznaDVA==" + }, + "is-arguments@1.2.0": { + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "dependencies": [ + "call-bound", + "has-tostringtag" + ] + }, + "is-array-buffer@3.0.5": { + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dependencies": [ + "call-bind", + "call-bound", + "get-intrinsic" + ] + }, + "is-arrayish@0.2.1": { + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-bigint@1.1.0": { + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dependencies": [ + "has-bigints" + ] + }, + "is-binary-path@2.1.0": { + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": [ + "binary-extensions" + ] + }, + "is-boolean-object@1.2.2": { + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dependencies": [ + "call-bound", + "has-tostringtag" + ] + }, + "is-callable@1.2.7": { + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, + "is-date-object@1.1.0": { + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dependencies": [ + "call-bound", + "has-tostringtag" + ] + }, + "is-docker@3.0.0": { + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": true + }, + "is-extglob@2.1.1": { + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point@3.0.0": { + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob@4.0.3": { + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": [ + "is-extglob" + ] + }, + "is-inside-container@1.0.0": { + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": [ + "is-docker" + ], + "bin": true + }, + "is-interactive@1.0.0": { + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + }, + "is-map@2.0.3": { + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==" + }, + "is-number-object@1.1.1": { + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dependencies": [ + "call-bound", + "has-tostringtag" + ] + }, + "is-number@7.0.0": { + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj@2.0.0": { + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-plain-obj@4.1.0": { + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, + "is-potential-custom-element-name@1.0.1": { + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "is-regex@1.2.1": { + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dependencies": [ + "call-bound", + "gopd", + "has-tostringtag", + "hasown" + ] + }, + "is-set@2.0.3": { + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==" + }, + "is-shared-array-buffer@1.0.4": { + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dependencies": [ + "call-bound" + ] + }, + "is-string@1.1.1": { + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dependencies": [ + "call-bound", + "has-tostringtag" + ] + }, + "is-subdir@1.2.0": { + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", + "dependencies": [ + "better-path-resolve" + ] + }, + "is-symbol@1.1.1": { + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dependencies": [ + "call-bound", + "has-symbols", + "safe-regex-test" + ] + }, + "is-unicode-supported@0.1.0": { + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, + "is-utf8@0.2.1": { + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + }, + "is-weakmap@2.0.2": { + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==" + }, + "is-weakset@2.0.4": { + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dependencies": [ + "call-bound", + "get-intrinsic" + ] + }, + "is-what@4.1.16": { + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==" + }, + "is-what@5.5.0": { + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==" + }, + "is-windows@1.0.2": { + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl@3.1.1": { + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dependencies": [ + "is-inside-container" + ] + }, + "isarray@2.0.5": { + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "isexe@2.0.0": { + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "jiti@2.6.1": { + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "bin": true + }, + "jiti@2.7.0": { + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "bin": true + }, + "js-tokens@4.0.0": { + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml@3.15.0": { + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", + "dependencies": [ + "argparse@1.0.10", + "esprima" + ], + "bin": true + }, + "js-yaml@4.3.0": { + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "dependencies": [ + "argparse@2.0.1" + ], + "bin": true + }, + "jsdom@25.0.1": { + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", + "dependencies": [ + "cssstyle", + "data-urls", + "decimal.js", + "form-data", + "html-encoding-sniffer", + "http-proxy-agent", + "https-proxy-agent", + "is-potential-custom-element-name", + "nwsapi", + "parse5", + "rrweb-cssom@0.7.1", + "saxes", + "symbol-tree", + "tough-cookie", + "w3c-xmlserializer", + "webidl-conversions", + "whatwg-encoding", + "whatwg-mimetype", + "whatwg-url", + "ws", + "xml-name-validator" + ] + }, + "jsesc@3.1.0": { + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "bin": true + }, + "json-parse-even-better-errors@2.3.1": { + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema-traverse@1.0.0": { + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "json-sorted-stringify@1.0.2": { + "integrity": "sha512-6UiiM9hRn9P+nfznAif3TsmulMJTvlmfNDN8mAmDUvDW/JbSyczdgT0w7NVJvWQwMS83iLnYkH2IXNRZUB4iFg==" + }, + "json5@2.2.3": { + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": true + }, + "jsonc-parser@3.3.1": { + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==" + }, + "jsonfile@4.0.0": { + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": [ + "graceful-fs" + ] + }, + "jsonfile@6.2.1": { + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dependencies": [ + "universalify@2.0.1" + ], + "optionalDependencies": [ + "graceful-fs" + ] + }, + "kasi@1.1.2": { + "integrity": "sha512-Q2N8EHdkJFKdzq8fxzDNSXb4RE8xzcPHwZuT7N1/wJY3XaMkoGXkzGZcEnNODzQXJNOd9inReEW2V1V4svAf/Q==" + }, + "lightningcss-android-arm64@1.32.0": { + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "os": ["android"], + "cpu": ["arm64"] + }, + "lightningcss-darwin-arm64@1.32.0": { + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "os": ["darwin"], + "cpu": ["arm64"] + }, + "lightningcss-darwin-x64@1.32.0": { + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "os": ["darwin"], + "cpu": ["x64"] + }, + "lightningcss-freebsd-x64@1.32.0": { + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "os": ["freebsd"], + "cpu": ["x64"] + }, + "lightningcss-linux-arm-gnueabihf@1.32.0": { + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "os": ["linux"], + "cpu": ["arm"] + }, + "lightningcss-linux-arm64-gnu@1.32.0": { + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "lightningcss-linux-arm64-musl@1.32.0": { + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "os": ["linux"], + "cpu": ["arm64"] + }, + "lightningcss-linux-x64-gnu@1.32.0": { + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "os": ["linux"], + "cpu": ["x64"] + }, + "lightningcss-linux-x64-musl@1.32.0": { + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "os": ["linux"], + "cpu": ["x64"] + }, + "lightningcss-win32-arm64-msvc@1.32.0": { + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "os": ["win32"], + "cpu": ["arm64"] + }, + "lightningcss-win32-x64-msvc@1.32.0": { + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "os": ["win32"], + "cpu": ["x64"] + }, + "lightningcss@1.32.0": { + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dependencies": [ + "detect-libc" + ], + "optionalDependencies": [ + "lightningcss-android-arm64", + "lightningcss-darwin-arm64", + "lightningcss-darwin-x64", + "lightningcss-freebsd-x64", + "lightningcss-linux-arm-gnueabihf", + "lightningcss-linux-arm64-gnu", + "lightningcss-linux-arm64-musl", + "lightningcss-linux-x64-gnu", + "lightningcss-linux-x64-musl", + "lightningcss-win32-arm64-msvc", + "lightningcss-win32-x64-msvc" + ] + }, + "lines-and-columns@1.2.4": { + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "locate-path@5.0.0": { + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": [ + "p-locate" + ] + }, + "lodash.map@4.6.0": { + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==" + }, + "lodash.startcase@4.4.0": { + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==" + }, + "lodash@4.17.21": { + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "log-symbols@4.1.0": { + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": [ + "chalk@4.1.2", + "is-unicode-supported" + ] + }, + "lomemo@1.0.1": { + "integrity": "sha512-g8CnVp7UYypeQKpXpMzyrJoDzhOoqVQYSJApoq/cFI3vGxXoHQ+6lH5cApW9XwzVy5SL9/Owil7/JxbKckw0Lg==" + }, + "longest@2.0.1": { + "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==" + }, + "loupe@3.2.1": { + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==" + }, + "lru-cache@10.4.3": { + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "lru-cache@5.1.1": { + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": [ + "yallist" + ] + }, + "lz-string@1.5.0": { + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "bin": true + }, + "magic-string@0.30.21": { + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dependencies": [ + "@jridgewell/sourcemap-codec" + ] + }, + "math-intrinsics@1.1.0": { + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, + "media-query-parser@2.0.2": { + "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==", + "dependencies": [ + "@babel/runtime" + ] + }, + "merge-anything@5.1.7": { + "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==", + "dependencies": [ + "is-what@4.1.16" + ] + }, + "merge-anything@6.0.6": { + "integrity": "sha512-F3K1W45PvTjRZzbcYIhXntNr8cux00gUxR8IzNPPG+80gNlAHZGVBwFyN4x5yjw/7QkLPKDbRQBK4KrJKo69mw==", + "dependencies": [ + "is-what@5.5.0" + ] + }, + "merge2@1.4.1": { + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "merge@2.1.1": { + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" + }, + "micromatch@4.0.8": { + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": [ + "braces", + "picomatch@2.3.2" + ] + }, + "mime-db@1.52.0": { + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types@2.1.35": { + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": [ + "mime-db" + ] + }, + "mimic-fn@2.1.0": { + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "min-indent@1.0.1": { + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + }, + "minimatch@3.1.5": { + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dependencies": [ + "brace-expansion" + ] + }, + "minimist@1.2.7": { + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "mri@1.2.0": { + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + }, + "mrmime@2.0.1": { + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==" + }, + "ms@2.1.3": { + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "mute-stream@0.0.8": { + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "nanoid@3.3.16": { + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "bin": true + }, + "node-releases@2.0.51": { + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==" + }, + "nwsapi@2.2.24": { + "integrity": "sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==" + }, + "object-inspect@1.13.4": { + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" + }, + "object-is@1.1.6": { + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dependencies": [ + "call-bind", + "define-properties" + ] + }, + "object-keys@1.1.1": { + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign@4.1.7": { + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dependencies": [ + "call-bind", + "call-bound", + "define-properties", + "es-object-atoms", + "has-symbols", + "object-keys" + ] + }, + "obug@2.1.3": { + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==" + }, + "once@1.4.0": { + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": [ + "wrappy" + ] + }, + "onetime@5.1.2": { + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": [ + "mimic-fn" + ] + }, + "open@10.2.0": { + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dependencies": [ + "default-browser", + "define-lazy-prop", + "is-inside-container", + "wsl-utils" + ] + }, + "ora@5.4.1": { + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": [ + "bl", + "chalk@4.1.2", + "cli-cursor", + "cli-spinners", + "is-interactive", + "is-unicode-supported", + "log-symbols", + "strip-ansi@6.0.1", + "wcwidth" + ] + }, + "os-tmpdir@1.0.2": { + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + }, + "outdent@0.5.0": { + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==" + }, + "outdent@0.8.0": { + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==" + }, + "oxc-parser@0.127.0": { + "integrity": "sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==", + "dependencies": [ + "@oxc-project/types@0.127.0" + ], + "optionalDependencies": [ + "@oxc-parser/binding-android-arm-eabi", + "@oxc-parser/binding-android-arm64", + "@oxc-parser/binding-darwin-arm64", + "@oxc-parser/binding-darwin-x64", + "@oxc-parser/binding-freebsd-x64", + "@oxc-parser/binding-linux-arm-gnueabihf", + "@oxc-parser/binding-linux-arm-musleabihf", + "@oxc-parser/binding-linux-arm64-gnu", + "@oxc-parser/binding-linux-arm64-musl", + "@oxc-parser/binding-linux-ppc64-gnu", + "@oxc-parser/binding-linux-riscv64-gnu", + "@oxc-parser/binding-linux-riscv64-musl", + "@oxc-parser/binding-linux-s390x-gnu", + "@oxc-parser/binding-linux-x64-gnu", + "@oxc-parser/binding-linux-x64-musl", + "@oxc-parser/binding-openharmony-arm64", + "@oxc-parser/binding-wasm32-wasi", + "@oxc-parser/binding-win32-arm64-msvc", + "@oxc-parser/binding-win32-ia32-msvc", + "@oxc-parser/binding-win32-x64-msvc" + ] + }, + "oxc-resolver@11.24.2": { + "integrity": "sha512-FY91FiDBj7ls5MsFS9jN3tjz2o0/zsdSsymlakySaBwVJZorHhkWyICLZMKxlu1R9vYo+sd3z1jwb4J8x7bNDw==", + "optionalDependencies": [ + "@oxc-resolver/binding-android-arm-eabi", + "@oxc-resolver/binding-android-arm64", + "@oxc-resolver/binding-darwin-arm64", + "@oxc-resolver/binding-darwin-x64", + "@oxc-resolver/binding-freebsd-x64", + "@oxc-resolver/binding-linux-arm-gnueabihf", + "@oxc-resolver/binding-linux-arm-musleabihf", + "@oxc-resolver/binding-linux-arm64-gnu", + "@oxc-resolver/binding-linux-arm64-musl", + "@oxc-resolver/binding-linux-ppc64-gnu", + "@oxc-resolver/binding-linux-riscv64-gnu", + "@oxc-resolver/binding-linux-riscv64-musl", + "@oxc-resolver/binding-linux-s390x-gnu", + "@oxc-resolver/binding-linux-x64-gnu", + "@oxc-resolver/binding-linux-x64-musl", + "@oxc-resolver/binding-openharmony-arm64", + "@oxc-resolver/binding-wasm32-wasi", + "@oxc-resolver/binding-win32-arm64-msvc", + "@oxc-resolver/binding-win32-x64-msvc" + ] + }, + "p-filter@2.1.0": { + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dependencies": [ + "p-map" + ] + }, + "p-limit@2.3.0": { + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": [ + "p-try" + ] + }, + "p-locate@4.1.0": { + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": [ + "p-limit" + ] + }, + "p-map@2.1.0": { + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, + "p-try@2.2.0": { + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "package-manager-detector@0.2.11": { + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "dependencies": [ + "quansync@0.2.11" + ] + }, + "parent-module@1.0.1": { + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": [ + "callsites" + ] + }, + "parse-json@5.2.0": { + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": [ + "@babel/code-frame", + "error-ex", + "json-parse-even-better-errors", + "lines-and-columns" + ] + }, + "parse-passwd@1.0.0": { + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" + }, + "parse5@7.3.0": { + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dependencies": [ + "entities" + ] + }, + "path-browserify@1.0.1": { + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "path-exists@4.0.0": { + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute@1.0.1": { + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-key@3.1.1": { + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-type@4.0.0": { + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pathe@1.1.2": { + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "pathval@2.0.1": { + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==" + }, + "picocolors@1.1.1": { + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "picomatch@2.3.2": { + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==" + }, + "picomatch@4.0.5": { + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==" + }, + "pify@4.0.1": { + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pioppo@1.2.1": { + "integrity": "sha512-1oErGVWD6wFDPmrJWEY1Cj2p829UGT6Fw9OItYFxLkWtBjCvQSMC8wA5IcAR5ms/6gqiY8pnJvIV/+/Imyobew==", + "dependencies": [ + "dettle", + "when-exit" + ] + }, + "possible-typed-array-names@1.1.0": { + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==" + }, + "postcss@8.4.28": { + "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "dependencies": [ + "nanoid", + "picocolors", + "source-map-js" + ] + }, + "postcss@8.5.19": { + "integrity": "sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==", + "dependencies": [ + "nanoid", + "picocolors", + "source-map-js" + ] + }, + "prettier-plugin-tailwindcss@0.8.0_prettier@4.0.0-alpha.10": { + "integrity": "sha512-V8ITGH87yuBDF6JpEZTOVlUz/saAwqb8f3HRgUj8Lh+tGCcrmorhsLpYqzygwFwK0PE2Ib6Mv3M7T/uE2tZV1g==", + "dependencies": [ + "prettier@4.0.0-alpha.10" + ] + }, + "prettier@2.8.8": { + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "bin": true + }, + "prettier@4.0.0-alpha.10": { + "integrity": "sha512-auyI68pnS9LmLRQCRuRBQaoqWU3Jnrifbhc+patuIGd1gzB/5h2CW1fa3Lub45R03ah+wzxbB2DNV1S1wzz9QQ==", + "dependencies": [ + "@prettier/cli" + ], + "bin": true + }, + "pretty-format@27.5.1": { + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": [ + "ansi-regex@5.0.1", + "ansi-styles@5.2.0", + "react-is" + ] + }, + "promise-make-counter@1.0.2": { + "integrity": "sha512-FJAxTBWQuQoAs4ZOYuKX1FHXxEgKLEzBxUvwr4RoOglkTpOjWuM+RXsK3M9q5lMa8kjqctUrhwYeZFT4ygsnag==", + "dependencies": [ + "promise-make-naked@3.0.2" + ] + }, + "promise-make-naked@2.1.2": { + "integrity": "sha512-y7s8ZuHIG56JYspB24be9GFkXA1zXL85Ur9u1DKrW/tvyUoPxWgBjnalK6Nc6l7wHBcAW0c3PO07+XOsWTRuhg==" + }, + "promise-make-naked@3.0.2": { + "integrity": "sha512-B+b+kQ1YrYS7zO7P7bQcoqqMUizP06BOyNSBEnB5VJKDSWo8fsVuDkfSmwdjF0JsRtaNh83so5MMFJ95soH5jg==" + }, + "promise-resolve-timeout@2.0.1": { + "integrity": "sha512-90Qzzu5SmR+ksmTPsc79121NZGtEiPvKACQLCl6yofknRx5xJI9kNj3oDVSX6dVTneF8Ju6+xpVFdDSzb7cNcg==" + }, + "punycode@2.3.1": { + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + }, + "quansync@0.2.11": { + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==" + }, + "quansync@1.0.0": { + "integrity": "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==" + }, + "queue-microtask@1.2.3": { + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "react-dom@19.2.7_react@19.2.7": { + "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", + "dependencies": [ + "react", + "scheduler" + ] + }, + "react-is@17.0.2": { + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "react@19.2.7": { + "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==" + }, + "read-yaml-file@1.1.0": { + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", + "dependencies": [ + "graceful-fs", + "js-yaml@3.15.0", + "pify", + "strip-bom@3.0.0" + ] + }, + "readable-stream@3.6.2": { + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": [ + "inherits", + "string_decoder", + "util-deprecate" + ] + }, + "recast@0.23.12": { + "integrity": "sha512-dEWRjcINDu/F4l2dYx57ugBtD7HV9KXESyxhzw/MqWLeglJrsjJKqACPyUPg+6AF8mIgm+Zi0dZ3ACoIg+QtpA==", + "dependencies": [ + "ast-types", + "esprima", + "source-map", + "tiny-invariant", + "tslib" + ] + }, + "redent@3.0.0": { + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": [ + "indent-string", + "strip-indent" + ] + }, + "regexp.prototype.flags@1.5.4": { + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dependencies": [ + "call-bind", + "define-properties", + "es-errors", + "get-proto", + "gopd", + "set-function-name" + ] + }, + "require-from-string@2.0.2": { + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "resolve-dir@1.0.1": { + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dependencies": [ + "expand-tilde", + "global-modules" + ] + }, + "resolve-from@4.0.0": { + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "resolve-from@5.0.0": { + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "resolve-pkg-maps@1.0.0": { + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==" + }, + "restore-cursor@3.1.0": { + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": [ + "onetime", + "signal-exit@3.0.7" + ] + }, + "reusify@1.1.0": { + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==" + }, + "rolldown-plugin-dts@0.27.9_rolldown@1.1.5_typescript@6.0.3": { + "integrity": "sha512-d54yt65+ZF/Mk8H6P36As02PAMdaiWRSzVNtJRc1h7nCgUFjuRI4cN2DyTfJyfVpPH6pgy7/2D7YQH1/Rh75Yg==", + "dependencies": [ + "dts-resolver", + "get-tsconfig", + "obug", + "rolldown", + "typescript", + "yuku-ast", + "yuku-codegen", + "yuku-parser" + ], + "optionalPeers": [ + "typescript" + ] + }, + "rolldown@1.1.5": { + "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==", + "dependencies": [ + "@oxc-project/types@0.139.0", + "@rolldown/pluginutils" + ], + "optionalDependencies": [ + "@rolldown/binding-android-arm64", + "@rolldown/binding-darwin-arm64", + "@rolldown/binding-darwin-x64", + "@rolldown/binding-freebsd-x64", + "@rolldown/binding-linux-arm-gnueabihf", + "@rolldown/binding-linux-arm64-gnu", + "@rolldown/binding-linux-arm64-musl", + "@rolldown/binding-linux-ppc64-gnu", + "@rolldown/binding-linux-s390x-gnu", + "@rolldown/binding-linux-x64-gnu", + "@rolldown/binding-linux-x64-musl", + "@rolldown/binding-openharmony-arm64", + "@rolldown/binding-wasm32-wasi", + "@rolldown/binding-win32-arm64-msvc", + "@rolldown/binding-win32-x64-msvc" + ], + "bin": true + }, + "rollup@4.62.2": { + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "dependencies": [ + "@types/estree" + ], + "optionalDependencies": [ + "@rollup/rollup-android-arm-eabi", + "@rollup/rollup-android-arm64", + "@rollup/rollup-darwin-arm64", + "@rollup/rollup-darwin-x64", + "@rollup/rollup-freebsd-arm64", + "@rollup/rollup-freebsd-x64", + "@rollup/rollup-linux-arm-gnueabihf", + "@rollup/rollup-linux-arm-musleabihf", + "@rollup/rollup-linux-arm64-gnu", + "@rollup/rollup-linux-arm64-musl", + "@rollup/rollup-linux-loong64-gnu", + "@rollup/rollup-linux-loong64-musl", + "@rollup/rollup-linux-ppc64-gnu", + "@rollup/rollup-linux-ppc64-musl", + "@rollup/rollup-linux-riscv64-gnu", + "@rollup/rollup-linux-riscv64-musl", + "@rollup/rollup-linux-s390x-gnu", + "@rollup/rollup-linux-x64-gnu", + "@rollup/rollup-linux-x64-musl", + "@rollup/rollup-openbsd-x64", + "@rollup/rollup-openharmony-arm64", + "@rollup/rollup-win32-arm64-msvc", + "@rollup/rollup-win32-ia32-msvc", + "@rollup/rollup-win32-x64-gnu", + "@rollup/rollup-win32-x64-msvc", + "fsevents" + ], + "bin": true + }, + "rrweb-cssom@0.7.1": { + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==" + }, + "rrweb-cssom@0.8.0": { + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==" + }, + "run-applescript@7.1.0": { + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==" + }, + "run-async@2.4.1": { + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "run-parallel@1.2.0": { + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dependencies": [ + "queue-microtask" + ] + }, + "rxjs@7.8.2": { + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dependencies": [ + "tslib" + ] + }, + "safe-buffer@5.2.1": { + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-regex-test@1.1.0": { + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dependencies": [ + "call-bound", + "es-errors", + "is-regex" + ] + }, + "safer-buffer@2.1.2": { + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "saxes@6.0.0": { + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dependencies": [ + "xmlchars" + ] + }, + "scheduler@0.27.0": { + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==" + }, + "semver@6.3.1": { + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": true + }, + "semver@7.8.5": { + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "bin": true + }, + "seroval-plugins@1.5.5_seroval@1.5.5": { + "integrity": "sha512-+BDhqYM6CEn3x09v44dpa9p6974FuUB2dxk+Ctn04k0cO1Zt6QODTXfmEZK0eBaTe/fJBvP4NMGuNJ+R8T+QMg==", + "dependencies": [ + "seroval" + ] + }, + "seroval@1.5.5": { + "integrity": "sha512-bSjOuPcwPKLSJNhr9+bZxA20nQxVle5J5MNsYRVE6cIg7KpRLXGupymePavu0jrxlPiPsr4xGZSB8yUY2sH2sw==" + }, + "set-function-length@1.2.2": { + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": [ + "define-data-property", + "es-errors", + "function-bind", + "get-intrinsic", + "gopd", + "has-property-descriptors" + ] + }, + "set-function-name@2.0.2": { + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": [ + "define-data-property", + "es-errors", + "functions-have-names", + "has-property-descriptors" + ] + }, + "shebang-command@2.0.0": { + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": [ + "shebang-regex" + ] + }, + "shebang-regex@3.0.0": { + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "side-channel-list@1.0.1": { + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dependencies": [ + "es-errors", + "object-inspect" + ] + }, + "side-channel-map@1.0.1": { + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": [ + "call-bound", + "es-errors", + "get-intrinsic", + "object-inspect" + ] + }, + "side-channel-weakmap@1.0.2": { + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": [ + "call-bound", + "es-errors", + "get-intrinsic", + "object-inspect", + "side-channel-map" + ] + }, + "side-channel@1.1.1": { + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dependencies": [ + "es-errors", + "object-inspect", + "side-channel-list", + "side-channel-map", + "side-channel-weakmap" + ] + }, + "siginfo@2.0.0": { + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==" + }, + "signal-exit@3.0.7": { + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "signal-exit@4.1.0": { + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "sirv@3.0.2": { + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dependencies": [ + "@polka/url", + "mrmime", + "totalist" + ] + }, + "slash@3.0.0": { + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "solid-js@2.0.0-beta.15": { + "integrity": "sha512-3hvcmEFUgDlahc++/ulrPhnc5IM7aJbW1P4TUaKsMZpDY5qGcOagtL4nbXGdUPnVP0JsJhMuE9bXEcLdLE+2SA==", + "dependencies": [ + "@solidjs/signals", + "csstype", + "seroval", + "seroval-plugins" + ] + }, + "solid-refresh@0.7.8_solid-js@2.0.0-beta.15": { + "integrity": "sha512-iG442T3HXJp5jEebCy8okETrWnmX7CnxNOKrJQVeufh6WXSn+xtLXaptUXXMHTWcRqTJOJwQ8UwzxrRtVFSIzA==", + "dependencies": [ + "@babel/generator", + "@babel/types", + "solid-js" + ] + }, + "solid-refresh@0.8.0-next.7_solid-js@2.0.0-beta.15": { + "integrity": "sha512-fqkPRAeiE0tqfo2ZljeQBIXwfYssU2w1FmaWFrXmnV33B/CfGfez7BjtOF0Y1/orUNRXI/DZcJlJThHllcCMsA==", + "dependencies": [ + "@babel/generator", + "@babel/types", + "solid-js" + ] + }, + "source-map-js@1.2.1": { + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, + "source-map@0.6.1": { + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "spawndamnit@3.0.1": { + "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", + "dependencies": [ + "cross-spawn", + "signal-exit@4.1.0" + ] + }, + "specialist@1.4.5": { + "integrity": "sha512-4mPQEREzBUW2hzlXX/dWFbQdUWzpkqvMFVpUAdRlo1lUlhKMObDHiAo09oZ94x4cS3uWMJebPOTn+GaQYLfv3Q==", + "dependencies": [ + "tiny-bin", + "tiny-colors", + "tiny-parse-argv", + "tiny-updater" + ] + }, + "sprintf-js@1.0.3": { + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "stackback@0.0.2": { + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==" + }, + "std-env@3.10.0": { + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==" + }, + "stdin-blocker@2.0.1": { + "integrity": "sha512-NEcAEpag+gE/Iivx1prq1AFPwnmgmcyHNvGZLUqGBoOE/7DZtmhtP9iYqJt8ymueFL+kknhfEebAMWbrWp3FJw==" + }, + "stop-iteration-iterator@1.1.0": { + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dependencies": [ + "es-errors", + "internal-slot" + ] + }, + "storybook-solidjs-vite@10.6.0_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_solid-js@2.0.0-beta.15_storybook@10.5.0__@types+react@19.2.17__prettier@4.0.0-alpha.10__react@19.2.7_typescript@6.0.3_vite@6.4.3__@types+node@26.0.1_vite-plugin-solid@3.0.0-next.5__@solidjs+web@2.0.0-beta.15___solid-js@2.0.0-beta.15__@testing-library+jest-dom@6.9.1__solid-js@2.0.0-beta.15__vite@6.4.3___@types+node@26.0.1__@types+node@26.0.1_@testing-library+jest-dom@6.9.1_@types+node@26.0.1_@types+react@19.2.17_prettier@4.0.0-alpha.10_react@19.2.7": { + "integrity": "sha512-/nNRk0D8Uwvqny/DKVNBsCzajjmC//cATifF66ebnpjpRBCwBrflg2ymsGEE0D9LmDsdcMBn1rsoe6Z4C2Jzbw==", + "dependencies": [ + "@solidjs/web", + "@storybook/builder-vite", + "@storybook/global", + "@volar/language-core", + "@volar/typescript", + "semver@7.8.5", + "solid-js", + "storybook", + "typescript", + "vite@6.4.3_@types+node@26.0.1", + "vite-plugin-solid" + ], + "optionalPeers": [ + "@solidjs/web", + "typescript" + ] + }, + "storybook@10.5.0_@types+react@19.2.17_prettier@4.0.0-alpha.10_react@19.2.7": { + "integrity": "sha512-dRhM/kSSvHQR8DmZO41v5sJuz9U6zDjjR2gRBTgZN2RBSXbmF0Brvgszrvvxyx2VfxuYKzhB+xumKwWkwlBtig==", + "dependencies": [ + "@storybook/global", + "@storybook/icons", + "@testing-library/dom@10.4.1", + "@testing-library/jest-dom", + "@testing-library/user-event@14.6.1_@testing-library+dom@10.4.1", + "@types/react", + "@vitest/expect@3.2.4", + "@vitest/spy@3.2.4", + "@webcontainer/env", + "esbuild@0.28.1", + "jsonc-parser", + "open", + "oxc-parser", + "oxc-resolver", + "prettier@4.0.0-alpha.10", + "recast", + "semver@7.8.5", + "use-sync-external-store", + "ws" + ], + "optionalPeers": [ + "@types/react", + "prettier@4.0.0-alpha.10" + ], + "bin": true + }, + "string-escape-regex@1.0.1": { + "integrity": "sha512-cdSXOHSJ32K/T2dbj9t7rJwonujaOkaINpa1zsXT+PNFIv1zuPjtr0tXanCvUhN2bIu2IB0z/C7ksl+Qsy44nA==" + }, + "string-width@4.2.3": { + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": [ + "emoji-regex@8.0.0", + "is-fullwidth-code-point", + "strip-ansi@6.0.1" + ] + }, + "string-width@7.2.0": { + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dependencies": [ + "emoji-regex@10.6.0", + "get-east-asian-width", + "strip-ansi@7.2.0" + ] + }, + "string_decoder@1.3.0": { + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": [ + "safe-buffer" + ] + }, + "strip-ansi@6.0.1": { + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": [ + "ansi-regex@5.0.1" + ] + }, + "strip-ansi@7.2.0": { + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dependencies": [ + "ansi-regex@6.2.2" + ] + }, + "strip-bom@3.0.0": { + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" + }, + "strip-bom@4.0.0": { + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + }, + "strip-indent@3.0.0": { + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": [ + "min-indent" + ] + }, + "strip-json-comments@3.1.1": { + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "stubborn-fs@2.0.0": { + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", + "dependencies": [ + "stubborn-utils" + ] + }, + "stubborn-utils@1.0.2": { + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==" + }, + "supports-color@5.5.0": { + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": [ + "has-flag@3.0.0" + ] + }, + "supports-color@7.2.0": { + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": [ + "has-flag@4.0.0" + ] + }, + "symbol-tree@3.2.4": { + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "tailwindcss@4.3.2": { + "integrity": "sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==" + }, + "tapable@2.3.3": { + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==" + }, + "term-size@2.2.1": { + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" + }, + "through@2.3.8": { + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "tiny-bin@1.11.3": { + "integrity": "sha512-CrBbiKsvJN4bHSDA0cPau4t5KWdGUUAcTXQ8bB14XNqNY+68UZF4Zo7WRVdHLq0j0GYZjIRbNDg+zJbJXDEXeg==", + "dependencies": [ + "ansi-purge", + "fast-string-width", + "get-current-package", + "tiny-colors", + "tiny-levenshtein", + "tiny-parse-argv", + "tiny-updater" + ] + }, + "tiny-colors@2.2.2": { + "integrity": "sha512-Elmv7JL+dX0c78caKEelH1nHHBskHzJkaqBRgVvQuxsvVA/Z9Fa2R3ZZtfmkkajcd18e96RLMwJvtFqC8jsZWA==" + }, + "tiny-cursor@2.0.1": { + "integrity": "sha512-28ytGEfb7m/8Gdflv+wSo5qRM01fROo2CjJVYon6yYbzPsc3ap3Ps5CZXuS19pIROwswSvZMGbEQ7kWnokdUGA==", + "dependencies": [ + "when-exit" + ] + }, + "tiny-editorconfig@1.0.2": { + "integrity": "sha512-QVxndBgsEs5NMdOiUcZhj191moZW3yk0X6b7ItAqIkUGkSLl1IlfkXbraImOEyGqhRynWJjdFkn0a//smQV3GQ==", + "dependencies": [ + "ini-simple-parser", + "zeptomatch" + ] + }, + "tiny-invariant@1.3.3": { + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "tiny-jsonc@1.0.2": { + "integrity": "sha512-f5QDAfLq6zIVSyCZQZhhyl0QS6MvAyTxgz4X4x3+EoCktNWEYJ6PeoEA97fyb98njpBNNi88ybpD7m+BDFXaCw==" + }, + "tiny-levenshtein@1.1.0": { + "integrity": "sha512-sU4wduNrjb2e51rgPOTy6nx3ag8pQPFA9XQCQQsFmECWEDS23LEoYsZv3fhVuJNIcxzBNMvCDDb7e/PPOP+vxw==" + }, + "tiny-parse-argv@2.8.2": { + "integrity": "sha512-RnIDHQ+r9zMuslQWVoRxfKVOumteeheQqbwNYJyQxzM2vzx/vdN5xAeL64F3rQOpfbVdxFkhM4zPDyfq7SxsBQ==" + }, + "tiny-readdir-glob@1.23.2": { + "integrity": "sha512-+47FIdgzEtZj03mOyq9iAljlZZNleqSEwe3i6Uzkzec5axbMg32Vp78U2fLo4TiCMv9gzjnno7yJn34z5pXECw==", + "dependencies": [ + "tiny-readdir", + "zeptomatch", + "zeptomatch-explode", + "zeptomatch-is-static", + "zeptomatch-unescape" + ] + }, + "tiny-readdir@2.7.4": { + "integrity": "sha512-721U+zsYwDirjr8IM6jqpesD/McpZooeFi3Zc6mcjy1pse2C+v19eHPFRqz4chGXZFw7C3KITDjAtHETc2wj7Q==", + "dependencies": [ + "promise-make-counter" + ] + }, + "tiny-spinner@2.0.5": { + "integrity": "sha512-OIGogtfEbA2IQdCBgF0zI3EjpFyiUEd6Uj5j0q5jhIPPq8pgNR83D0t9WIckbD2FzPann8lH/uLf1vX0YIu04w==", + "dependencies": [ + "stdin-blocker", + "tiny-colors", + "tiny-cursor", + "tiny-truncate" + ] + }, + "tiny-truncate@1.0.5": { + "integrity": "sha512-v69A1bjP624gxzBEvvshTMcwU2tkMcuAOIXAjJj0AG7aR+/YFmBYSw3rEKo0Ma2SCX7coeq9MNnUHQo1wZmMHw==", + "dependencies": [ + "ansi-truncate" + ] + }, + "tiny-updater@3.7.0": { + "integrity": "sha512-d1qNP+YObARMlu2FS3XiJmLTj7JGIWrpKB7Vj1WmPmdAUHDI6yXRE1AmI671bTZKsnC3lCrMSnAu5zG1A5gGag==", + "dependencies": [ + "function-once", + "ionstore", + "tiny-colors", + "when-exit" + ] + }, + "tinybench@2.9.0": { + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==" + }, + "tinyexec@0.3.2": { + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" + }, + "tinyexec@1.2.4": { + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==" + }, + "tinyglobby@0.2.17": { + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dependencies": [ + "fdir", + "picomatch@4.0.5" + ] + }, + "tinypool@1.1.1": { + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==" + }, + "tinyrainbow@1.2.0": { + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==" + }, + "tinyrainbow@2.0.0": { + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==" + }, + "tinyspy@3.0.2": { + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==" + }, + "tinyspy@4.0.4": { + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==" + }, + "tldts-core@6.1.86": { + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==" + }, + "tldts@6.1.86": { + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dependencies": [ + "tldts-core" + ], + "bin": true + }, + "tmp@0.0.33": { + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": [ + "os-tmpdir" + ] + }, + "to-regex-range@5.0.1": { + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": [ + "is-number" + ] + }, + "totalist@3.0.1": { + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==" + }, + "tough-cookie@5.1.2": { + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dependencies": [ + "tldts" + ] + }, + "tr46@5.1.1": { + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dependencies": [ + "punycode" + ] + }, + "tree-kill@1.2.2": { + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "bin": true + }, + "ts-dedent@2.3.0": { + "integrity": "sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==" + }, + "tsdown@0.22.7_typescript@6.0.3": { + "integrity": "sha512-4egbOzc9dxVv/QS+gDV75FIxDIjQQeOnXBlUuikyjmn0ozuc6FW11djJjEEo3vqkuJRygpnKHurnj+Iwftk4VA==", + "dependencies": [ + "ansis", + "cac@7.0.0", + "defu", + "empathic", + "hookable", + "import-without-cache", + "obug", + "picomatch@4.0.5", + "rolldown", + "rolldown-plugin-dts", + "semver@7.8.5", + "tinyexec@1.2.4", + "tinyglobby", + "tree-kill", + "typescript", + "unconfig-core" + ], + "optionalPeers": [ + "typescript" + ], + "bin": true + }, + "tslib@2.8.1": { + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "type-fest@0.21.3": { + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + }, + "typescript@6.0.3": { + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "bin": true + }, + "unconfig-core@7.5.0": { + "integrity": "sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==", + "dependencies": [ + "@quansync/fs", + "quansync@1.0.0" + ] + }, + "undici-types@8.3.0": { + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==" + }, + "universalify@0.1.2": { + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "universalify@2.0.1": { + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" + }, + "unplugin-solid@1.0.0_solid-js@2.0.0-beta.15_@types+node@26.0.1_vite@6.4.3__@types+node@26.0.1": { + "integrity": "sha512-pv1CS3XMtf3WwX8Dq9Bvo4qH6mfjN2xOgbaPcnqW1dLhyP/JQCvueGEsN0dYIZ4JvxaD/G/Ot1JnBzNQGHkfeA==", + "dependencies": [ + "@babel/core", + "@rollup/pluginutils", + "babel-preset-solid@1.9.12_@babel+core@7.29.7_solid-js@2.0.0-beta.15", + "merge-anything@6.0.6", + "solid-js", + "solid-refresh@0.7.8_solid-js@2.0.0-beta.15", + "unplugin", + "vitefu" + ] + }, + "unplugin@2.3.11": { + "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", + "dependencies": [ + "@jridgewell/remapping", + "acorn", + "picomatch@4.0.5", + "webpack-virtual-modules" + ] + }, + "update-browserslist-db@1.2.3_browserslist@4.28.6": { + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dependencies": [ + "browserslist", + "escalade", + "picocolors" + ], + "bin": true + }, + "use-sync-external-store@1.6.0_react@19.2.7": { + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "dependencies": [ + "react" + ] + }, + "util-deprecate@1.0.2": { + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "validate-html-nesting@1.2.4": { + "integrity": "sha512-doQi7e8EJ2OWneSG1aZpJluS6A49aZM0+EICXWKm1i6WvqTLmq0tpUcImc4KTWG50mORO0C4YDBtOCSYvElftw==" + }, + "vite-node@2.1.9_@types+node@26.0.1": { + "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", + "dependencies": [ + "cac@6.7.14", + "debug", + "es-module-lexer", + "pathe", + "vite@5.4.21_@types+node@26.0.1" + ], + "bin": true + }, + "vite-plugin-solid@3.0.0-next.5_@solidjs+web@2.0.0-beta.15__solid-js@2.0.0-beta.15_@testing-library+jest-dom@6.9.1_solid-js@2.0.0-beta.15_vite@6.4.3__@types+node@26.0.1_@types+node@26.0.1": { + "integrity": "sha512-hcn3mzevQDv6Oyo/Zv5LXdOrlWwKGeGVxNhc9fUq3AcN9aO6KABy52yq5cvnPDo3qaxmvOJVbNS1H4V5rx7AQg==", + "dependencies": [ + "@babel/core", + "@solidjs/web", + "@testing-library/jest-dom", + "@types/babel__core", + "babel-preset-solid@2.0.0-beta.15_@babel+core@7.29.7_solid-js@2.0.0-beta.15", + "merge-anything@5.1.7", + "solid-js", + "solid-refresh@0.8.0-next.7_solid-js@2.0.0-beta.15", + "vite@6.4.3_@types+node@26.0.1", + "vitefu" + ], + "optionalPeers": [ + "@testing-library/jest-dom" + ] + }, + "vite@5.4.21_@types+node@26.0.1": { + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dependencies": [ + "@types/node@26.0.1", + "esbuild@0.21.5", + "postcss@8.5.19", + "rollup" + ], + "optionalDependencies": [ + "fsevents" + ], + "optionalPeers": [ + "@types/node@26.0.1" + ], + "bin": true + }, + "vite@6.4.3_@types+node@26.0.1": { + "integrity": "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==", + "dependencies": [ + "@types/node@26.0.1", + "esbuild@0.25.12", + "fdir", + "picomatch@4.0.5", + "postcss@8.5.19", + "rollup", + "tinyglobby" + ], + "optionalDependencies": [ + "fsevents" + ], + "optionalPeers": [ + "@types/node@26.0.1" + ], + "bin": true + }, + "vitefu@1.1.3_vite@6.4.3__@types+node@26.0.1_@types+node@26.0.1": { + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "dependencies": [ + "vite@6.4.3_@types+node@26.0.1" + ], + "optionalPeers": [ + "vite@6.4.3_@types+node@26.0.1" + ] + }, + "vitest@2.1.9_@types+node@26.0.1_@vitest+ui@2.1.9_jsdom@25.0.1": { + "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", + "dependencies": [ + "@types/node@26.0.1", + "@vitest/expect@2.1.9", + "@vitest/mocker", + "@vitest/pretty-format@2.1.9", + "@vitest/runner", + "@vitest/snapshot", + "@vitest/spy@2.1.9", + "@vitest/ui", + "@vitest/utils@2.1.9", + "chai", + "debug", + "expect-type", + "jsdom", + "magic-string", + "pathe", + "std-env", + "tinybench", + "tinyexec@0.3.2", + "tinypool", + "tinyrainbow@1.2.0", + "vite@5.4.21_@types+node@26.0.1", + "vite-node", + "why-is-node-running" + ], + "optionalPeers": [ + "@types/node@26.0.1", + "@vitest/ui", + "jsdom" + ], + "bin": true + }, + "vscode-uri@3.1.0": { + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==" + }, + "w3c-xmlserializer@5.0.0": { + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dependencies": [ + "xml-name-validator" + ] + }, + "wcwidth@1.0.1": { + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": [ + "defaults" + ] + }, + "webidl-conversions@7.0.0": { + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, + "webpack-virtual-modules@0.6.2": { + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==" + }, + "webworker-shim@1.1.4": { + "integrity": "sha512-W/40L5W6ZQyGhYr3hJ7N/2SjdK5OdFtnYm94j6xlRyjckegXnIGwz0EdxdkQx6VGTglJjK8mqBhMz3fd3AY4bg==" + }, + "whatwg-encoding@3.1.1": { + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dependencies": [ + "iconv-lite@0.6.3" + ], + "deprecated": true + }, + "whatwg-mimetype@4.0.0": { + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==" + }, + "whatwg-url@14.2.0": { + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dependencies": [ + "tr46", + "webidl-conversions" + ] + }, + "when-exit@2.1.5": { + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==" + }, + "which-boxed-primitive@1.1.1": { + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dependencies": [ + "is-bigint", + "is-boolean-object", + "is-number-object", + "is-string", + "is-symbol" + ] + }, + "which-collection@1.0.2": { + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dependencies": [ + "is-map", + "is-set", + "is-weakmap", + "is-weakset" + ] + }, + "which-typed-array@1.1.22": { + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", + "dependencies": [ + "available-typed-arrays", + "call-bind", + "call-bound", + "for-each", + "get-proto", + "gopd", + "has-tostringtag" + ] + }, + "which@1.3.1": { + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": [ + "isexe" + ], + "bin": true + }, + "which@2.0.2": { + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": [ + "isexe" + ], + "bin": true + }, + "why-is-node-running@2.3.0": { + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dependencies": [ + "siginfo", + "stackback" + ], + "bin": true + }, + "word-wrap@1.2.5": { + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + }, + "worktank@2.7.3": { + "integrity": "sha512-M0fesnpttBPdvNYBdzRvLDsacN0na9RYWFxwmM/x1+/6mufjduv9/9vBObK8EXDqxRMX/SOYJabpo0UCYYBUdQ==", + "dependencies": [ + "promise-make-naked@2.1.2", + "webworker-shim" + ] + }, + "wrap-ansi@7.0.0": { + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": [ + "ansi-styles@4.3.0", + "string-width@4.2.3", + "strip-ansi@6.0.1" + ] + }, + "wrap-ansi@9.0.2": { + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dependencies": [ + "ansi-styles@6.2.3", + "string-width@7.2.0", + "strip-ansi@7.2.0" + ] + }, + "wrappy@1.0.2": { + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "ws@8.21.0": { + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==" + }, + "wsl-utils@0.1.0": { + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dependencies": [ + "is-wsl" + ] + }, + "xml-name-validator@5.0.0": { + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==" + }, + "xmlchars@2.2.0": { + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "y18n@5.0.8": { + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist@3.1.1": { + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "yargs-parser@22.0.0": { + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==" + }, + "yargs@18.0.0": { + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dependencies": [ + "cliui", + "escalade", + "get-caller-file", + "string-width@7.2.0", + "y18n", + "yargs-parser" + ] + }, + "yuku-ast@0.1.7": { + "integrity": "sha512-2RiMEWv500TixY5rJy6OZd4fSy9WYZKWh6gGbIJ7y7vAGcuCugWOWwOLGaQcRZrXcPUfqtLtvpaJ3SdXtWlhKA==", + "dependencies": [ + "@yuku-toolchain/types" + ] + }, + "yuku-codegen@0.6.1": { + "integrity": "sha512-6RJqqON2xYhMEp/sZv5oOSI3uOpWwRwzAi2fc/rMcRFjcqedAC5Fyp4AD9Vn2b8SB7hf9ESqVW+YwbDs/KvyKA==", + "dependencies": [ + "@yuku-toolchain/types" + ], + "optionalDependencies": [ + "@yuku-codegen/binding-darwin-arm64", + "@yuku-codegen/binding-darwin-x64", + "@yuku-codegen/binding-freebsd-x64", + "@yuku-codegen/binding-linux-arm-gnu", + "@yuku-codegen/binding-linux-arm-musl", + "@yuku-codegen/binding-linux-arm64-gnu", + "@yuku-codegen/binding-linux-arm64-musl", + "@yuku-codegen/binding-linux-x64-gnu", + "@yuku-codegen/binding-linux-x64-musl", + "@yuku-codegen/binding-win32-arm64", + "@yuku-codegen/binding-win32-x64" + ] + }, + "yuku-parser@0.6.1": { + "integrity": "sha512-dPE3/+H2VBw9LhjoIVeW/axKidYGd+XzNtrwGGseZ0325cQFl0Dpwyh0R74XWe/WqQn4M8CR5YApsv2KF2zN1A==", + "dependencies": [ + "@yuku-toolchain/types" + ], + "optionalDependencies": [ + "@yuku-parser/binding-darwin-arm64", + "@yuku-parser/binding-darwin-x64", + "@yuku-parser/binding-freebsd-x64", + "@yuku-parser/binding-linux-arm-gnu", + "@yuku-parser/binding-linux-arm-musl", + "@yuku-parser/binding-linux-arm64-gnu", + "@yuku-parser/binding-linux-arm64-musl", + "@yuku-parser/binding-linux-x64-gnu", + "@yuku-parser/binding-linux-x64-musl", + "@yuku-parser/binding-win32-arm64", + "@yuku-parser/binding-win32-x64" + ] + }, + "zeptomatch-escape@1.0.1": { + "integrity": "sha512-kAc5HzvnF66djCYDqpsS46Y/FKi+4pe/KJRmTmm/hwmoaNYzmm6bBY07cdkxmJCdY018S5UeQn4yP+9X2x1MbQ==" + }, + "zeptomatch-explode@1.0.1": { + "integrity": "sha512-7cUQASLLRGZ20+zEQcEgQ9z/gH1+jSfrNg4KfRJSxF1QU2fpymAwWvnAxl69GD5pr3IV0V9vo3ke2np//Nh4tQ==" + }, + "zeptomatch-is-static@1.0.1": { + "integrity": "sha512-bN9q7H/UdXhkub01WE7b7Grg07jLldNnIWG2T1IpBq5NtvcQ4DwFbNiGGapnbKHUdWiCNjg/bIvixV88nj9gog==" + }, + "zeptomatch-unescape@1.0.1": { + "integrity": "sha512-xhSFkKV0aQ03e/eiN4VhOTwJhcqfH7SMiGHrWKw9gXi+0EVJAxJ8Gt4ehozYsYLhUXL1JFbP1g3EE6ZmkStB0g==" + }, + "zeptomatch@2.1.0": { + "integrity": "sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==", + "dependencies": [ + "grammex", + "graphmatch" + ] + } + }, + "workspace": { + "packageJson": { + "dependencies": [ + "npm:@biomejs/biome@2.5.1", + "npm:@changesets/cli@2.31.0", + "npm:@commitlint/cli@21.1.0", + "npm:@commitlint/config-conventional@21.1.0", + "npm:@commitlint/cz-commitlint@21.1.0", + "npm:@solidjs/signals@2.0.0-beta.15", + "npm:@solidjs/testing-library@1.0.0-beta.2", + "npm:@solidjs/web@2.0.0-beta.15", + "npm:@storybook/addon-docs@^10.4.1", + "npm:@tailwindcss/postcss@^4.3.1", + "npm:@testing-library/dom@9.3.4", + "npm:@testing-library/jest-dom@6.9.1", + "npm:@testing-library/user-event@14.6.1", + "npm:@types/node@26.0.1", + "npm:@vitest/ui@^2.1.9", + "npm:babel-preset-solid@2.0.0-beta.15", + "npm:commitizen@4.3.0", + "npm:inquirer@8.2.5", + "npm:jsdom@25.0.1", + "npm:postcss@8.4.28", + "npm:prettier-plugin-tailwindcss@0.8", + "npm:prettier@4.0.0-alpha.10", + "npm:solid-js@2.0.0-beta.15", + "npm:storybook-solidjs-vite@^10.1.0", + "npm:storybook@^10.4.1", + "npm:tailwindcss@^4.3.1", + "npm:tsdown@0.22.7", + "npm:typescript@6.0.3", + "npm:unplugin-solid@1.0.0", + "npm:vite-plugin-solid@3.0.0-next.5", + "npm:vite@^6.3.5", + "npm:vitest@2.1.9" + ] + }, + "members": { + "packages/core": { + "packageJson": { + "dependencies": [ + "npm:@floating-ui/dom@^1.5.1", + "npm:@internationalized/date@^3.4.0", + "npm:@internationalized/number@^3.2.1", + "npm:@kobalte/utils@~0.9.2", + "npm:@solid-primitives/a11y@next", + "npm:@solid-primitives/controlled-signal@1.0.0-next.1", + "npm:@solid-primitives/focus@next", + "npm:@solid-primitives/form@next", + "npm:@solid-primitives/i18n@next", + "npm:@solid-primitives/interaction@next", + "npm:@solid-primitives/keyboard@next", + "npm:@solid-primitives/presence@next", + "npm:@solid-primitives/props@next", + "npm:@solid-primitives/resize-observer@next", + "npm:@solid-primitives/scroll@next", + "npm:@solid-primitives/upload@next", + "npm:@solid-primitives/utils@next", + "npm:tsdown@0.22.7", + "npm:typescript@6.0.3", + "npm:unplugin-solid@1.0.0" + ] + } + }, + "packages/tailwindcss": { + "packageJson": { + "dependencies": [ + "npm:tailwindcss@^4.3.1" + ] + } + }, + "packages/utils": { + "packageJson": { + "dependencies": [ + "npm:@solid-primitives/event-listener@next", + "npm:@solid-primitives/keyed@next", + "npm:@solid-primitives/map@next", + "npm:@solid-primitives/media@next", + "npm:@solid-primitives/props@next", + "npm:@solid-primitives/refs@next", + "npm:@solid-primitives/utils@next", + "npm:@solidjs/web@2.0.0-beta.15", + "npm:solid-js@2.0.0-beta.15" + ] + } + }, + "packages/vanilla-extract": { + "packageJson": { + "dependencies": [ + "npm:@vanilla-extract/css@1.13.0" + ] + } + } + } + } +} diff --git a/package.json b/package.json index d1dfcdd30..0a2f98114 100644 --- a/package.json +++ b/package.json @@ -13,17 +13,13 @@ "Fabien Marie-Louise ", "David Di Biase " ], - "workspaces": [ - "apps/*", - "packages/*" - ], "scripts": { - "build": "turbo run build", + "build": "pnpm -r run build", "build:libs": "pnpm -F \\!docs -F \\!playground build && pnpm i", "changeset": "changeset", "ci:release": "pnpm build && changeset publish", "ci:version": "changeset version && pnpm i --no-frozen-lockfile && git add .", - "clean": "turbo run clean && rm -rf node_modules", + "clean": "pnpm -r run clean && rm -rf node_modules", "commit": "git-cz", "dev:core": "pnpm -F @kobalte/core dev", "dev:docs": "pnpm -F @kobalte/docs dev", @@ -31,8 +27,10 @@ "build-storybook": "storybook build", "format": "biome check --write && prettier . --write", "check": "biome check", - "test": "turbo run test", - "typecheck": "turbo run typecheck" + "test": "pnpm --filter @kobalte/tests --filter @kobalte/utils run build && pnpm -r run test", + "typecheck": "pnpm -r run typecheck", + "jsr:sync": "node scripts/sync-jsr.mjs", + "jsr:sync:check": "node scripts/sync-jsr.mjs --check" }, "config": { "commitizen": { @@ -40,43 +38,37 @@ } }, "devDependencies": { - "@biomejs/biome": "2.5.1", + "@biomejs/biome": "2.5.4", "@changesets/cli": "2.31.0", "@commitlint/cli": "21.1.0", "@commitlint/config-conventional": "21.1.0", "@commitlint/cz-commitlint": "21.1.0", - "@solidjs/signals": "2.0.0-beta.15", - "@solidjs/testing-library": "1.0.0-beta.2", - "@solidjs/web": "2.0.0-beta.15", + "@solidjs/signals": "catalog:", + "@solidjs/testing-library": "catalog:", + "@solidjs/web": "catalog:", "@storybook/addon-docs": "^10.4.1", - "@tailwindcss/postcss": "^4.3.1", "@testing-library/dom": "9.3.4", "@testing-library/jest-dom": "6.9.1", "@testing-library/user-event": "14.6.1", "@types/node": "26.0.1", "@vitest/ui": "^2.1.9", - "babel-preset-solid": "2.0.0-beta.15", + "babel-preset-solid": "catalog:", "commitizen": "4.3.0", "inquirer": "8.2.5", "jsdom": "25.0.1", - "postcss": "8.4.28", "prettier": "4.0.0-alpha.10", - "prettier-plugin-tailwindcss": "^0.8.0", - "rollup": "4.62.2", - "rollup-plugin-cleanup": "3.2.1", - "rollup-plugin-copy": "3.5.0", - "rollup-plugin-license": "3.7.1", - "rollup-preset-solid": "2.0.1", - "solid-js": "2.0.0-beta.15", + "solid-js": "catalog:", "storybook": "^10.4.1", "storybook-solidjs-vite": "^10.1.0", - "tailwindcss": "^4.3.1", - "tsup": "8.5.1", - "turbo": "1.10.13", - "typescript": "6.0.3", + "tsdown": "catalog:", + "typescript": "catalog:", + "unplugin-solid": "catalog:", "vite": "^6.3.5", "vite-plugin-solid": "3.0.0-next.5", - "vitest": "2.1.9" + "vitest": "catalog:" }, - "packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b" + "packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } } diff --git a/packages/core/deno.jsonc b/packages/core/deno.jsonc new file mode 100644 index 000000000..28d55f8b1 --- /dev/null +++ b/packages/core/deno.jsonc @@ -0,0 +1,86 @@ +{ + "name": "@kobalte/core", + "version": "0.13.12", + "description": "Unstyled components and primitives for building accessible web apps and design systems with SolidJS.", + "license": "MIT", + "exports": { + ".": "./src/index.tsx", + "./accordion": "./src/accordion/index.tsx", + "./alert": "./src/alert/index.tsx", + "./alert-dialog": "./src/alert-dialog/index.tsx", + "./badge": "./src/badge/index.tsx", + "./breadcrumbs": "./src/breadcrumbs/index.tsx", + "./button": "./src/button/index.tsx", + "./calendar": "./src/calendar/index.tsx", + "./checkbox": "./src/checkbox/index.tsx", + "./collapsible": "./src/collapsible/index.tsx", + "./color-area": "./src/color-area/index.tsx", + "./color-channel-field": "./src/color-channel-field/index.tsx", + "./color-field": "./src/color-field/index.tsx", + "./color-mode": "./src/color-mode/index.tsx", + "./color-slider": "./src/color-slider/index.tsx", + "./color-swatch": "./src/color-swatch/index.tsx", + "./color-wheel": "./src/color-wheel/index.tsx", + "./combobox": "./src/combobox/index.tsx", + "./context-menu": "./src/context-menu/index.tsx", + "./dialog": "./src/dialog/index.tsx", + "./drawer": "./src/drawer/index.tsx", + "./dropdown-menu": "./src/dropdown-menu/index.tsx", + "./file-field": "./src/file-field/index.tsx", + "./hover-card": "./src/hover-card/index.tsx", + "./i18n": "./src/i18n/index.tsx", + "./image": "./src/image/index.tsx", + "./link": "./src/link/index.tsx", + "./listbox": "./src/listbox/index.tsx", + "./menubar": "./src/menubar/index.tsx", + "./meter": "./src/meter/index.tsx", + "./navigation-menu": "./src/navigation-menu/index.tsx", + "./number-field": "./src/number-field/index.tsx", + "./otp-field": "./src/otp-field/index.tsx", + "./pagination": "./src/pagination/index.tsx", + "./polymorphic": "./src/polymorphic/index.tsx", + "./popover": "./src/popover/index.tsx", + "./popper": "./src/popper/index.tsx", + "./primitives/create-collection": "./src/primitives/create-collection/index.ts", + "./primitives/create-disclosure-state": "./src/primitives/create-disclosure-state/index.ts", + "./primitives/create-dom-collection": "./src/primitives/create-dom-collection/index.ts", + "./primitives/create-register-id": "./src/primitives/create-register-id/index.ts", + "./primitives/create-tag-name": "./src/primitives/create-tag-name/index.ts", + "./primitives/create-toggle-state": "./src/primitives/create-toggle-state/index.ts", + "./progress": "./src/progress/index.tsx", + "./radio-group": "./src/radio-group/index.tsx", + "./rating": "./src/rating/index.tsx", + "./resizable": "./src/resizable/index.tsx", + "./search": "./src/search/index.tsx", + "./segmented-control": "./src/segmented-control/index.tsx", + "./select": "./src/select/index.tsx", + "./separator": "./src/separator/index.tsx", + "./skeleton": "./src/skeleton/index.tsx", + "./slider": "./src/slider/index.tsx", + "./spin-button": "./src/spin-button/index.tsx", + "./switch": "./src/switch/index.tsx", + "./tabs": "./src/tabs/index.tsx", + "./text-field": "./src/text-field/index.tsx", + "./time-field": "./src/time-field/index.tsx", + "./toast": "./src/toast/index.tsx", + "./toggle-button": "./src/toggle-button/index.tsx", + "./toggle-group": "./src/toggle-group/index.tsx", + "./tooltip": "./src/tooltip/index.tsx" + }, + "publish": { + "include": [ + "README.md", + "NOTICE.txt", + "src/**/*.ts", + "src/**/*.tsx", + "package.json" + ], + "exclude": [ + "dist", + "dev", + "node_modules", + "tsconfig.json", + "vite.config.ts" + ] + } +} diff --git a/packages/core/dev/index.tsx b/packages/core/dev/index.tsx index bb27f50df..f3e1214f2 100644 --- a/packages/core/dev/index.tsx +++ b/packages/core/dev/index.tsx @@ -1,6 +1,6 @@ import "./index.css"; -import { render } from "solid-js/web"; +import { render } from "@solidjs/web"; import App from "./App"; diff --git a/packages/core/package.json b/packages/core/package.json index 29fcedda5..bd57e3dee 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -30,17 +30,11 @@ "sideEffects": false, "type": "module", "exports": { - ".": { - "types": "./dist/index.d.ts", - "solid": "./dist/index.jsx", - "default": "./dist/index.js" - }, "./*": { "types": "./dist/*/index.d.ts", "solid": "./dist/*/index.jsx", "default": "./dist/*/index.js" - }, - "./src/*": "./src/*" + } }, "main": "dist/index.js", "module": "dist/index.js", @@ -53,19 +47,16 @@ ] } }, - "source": "src/index.tsx", "files": [ "dist", - "src", "NOTICE.txt" ], "scripts": { - "build": "pnpm build:cp && pnpm build:tsup", + "build": "pnpm build:cp && pnpm build:tsdown", "build:cp": "cp ../../NOTICE.txt .", - "build:tsup": "NODE_OPTIONS=\"--max-old-space-size=8192\" tsup", - "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist && rm NOTICE.txt", + "build:tsdown": "NODE_OPTIONS=\"--max-old-space-size=8192\" tsdown", + "clean": "rm -rf node_modules && rm -rf dist && rm NOTICE.txt", "dev": "vite serve dev --host", - "test-old": "jest --passWithNoTests", "test": "vitest run", "typecheck": "tsc --noEmit" }, @@ -73,29 +64,30 @@ "@floating-ui/dom": "^1.5.1", "@internationalized/date": "^3.4.0", "@internationalized/number": "^3.2.1", - "@kobalte/utils": "^0.9.2", - "@solid-primitives/a11y": "next", - "@solid-primitives/controlled-signal": "1.0.0-next.1", - "@solid-primitives/i18n": "next", - "@solid-primitives/focus": "next", - "@solid-primitives/form": "next", - "@solid-primitives/interaction": "next", - "@solid-primitives/keyboard": "next", - "@solid-primitives/props": "next", - "@solid-primitives/resize-observer": "next", - "@solid-primitives/presence": "next", - "@solid-primitives/scroll": "next", - "@solid-primitives/upload": "next", - "@solid-primitives/utils": "next" + "@kobalte/utils": "workspace:*", + "@solid-primitives/a11y": "catalog:", + "@solid-primitives/controlled-signal": "catalog:", + "@solid-primitives/i18n": "catalog:", + "@solid-primitives/focus": "catalog:", + "@solid-primitives/form": "catalog:", + "@solid-primitives/interaction": "catalog:", + "@solid-primitives/keyboard": "catalog:", + "@solid-primitives/props": "catalog:", + "@solid-primitives/resize-observer": "catalog:", + "@solid-primitives/presence": "catalog:", + "@solid-primitives/scroll": "catalog:", + "@solid-primitives/upload": "catalog:", + "@solid-primitives/utils": "catalog:" }, "devDependencies": { "@kobalte/tests": "workspace:*", - "esbuild-plugin-solid": "^0.5.0", - "tsup": "8.5.1" + "tsdown": "catalog:", + "typescript": "catalog:", + "unplugin-solid": "catalog:" }, "peerDependencies": { - "@solidjs/web": "^2.0.0-beta.14", - "solid-js": "^2.0.0-beta.14" + "@solidjs/web": "catalog:", + "solid-js": "catalog:" }, "publishConfig": { "access": "public" diff --git a/packages/core/src/accordion/accordion-content.tsx b/packages/core/src/accordion/accordion-content.tsx index 1c51c006d..cd1fd964d 100644 --- a/packages/core/src/accordion/accordion-content.tsx +++ b/packages/core/src/accordion/accordion-content.tsx @@ -10,9 +10,9 @@ import { mergeDefaultProps } from "@kobalte/utils"; import { combineStyle } from "@solid-primitives/props"; import type { ValidComponent } from "@solidjs/web"; import { type Component, createEffect, omit } from "solid-js"; -import * as Collapsible from "../collapsible"; -import type { ElementOf, PolymorphicProps } from "../polymorphic"; -import { useAccordionItemContext } from "./accordion-item-context"; +import * as Collapsible from "../collapsible/index.tsx"; +import type { ElementOf, PolymorphicProps } from "../polymorphic/index.tsx"; +import { useAccordionItemContext } from "./accordion-item-context.tsx"; export interface AccordionContentOptions {} diff --git a/packages/core/src/accordion/accordion-context.tsx b/packages/core/src/accordion/accordion-context.tsx index 169935fa0..24f137bb8 100644 --- a/packages/core/src/accordion/accordion-context.tsx +++ b/packages/core/src/accordion/accordion-context.tsx @@ -1,6 +1,6 @@ import { type Accessor, createContext, useContext } from "solid-js"; -import type { ListState } from "../list"; +import type { ListState } from "../list/index.ts"; export interface AccordionContextValue { listState: Accessor; diff --git a/packages/core/src/accordion/accordion-header.tsx b/packages/core/src/accordion/accordion-header.tsx index 1aa1459cd..77ae65538 100644 --- a/packages/core/src/accordion/accordion-header.tsx +++ b/packages/core/src/accordion/accordion-header.tsx @@ -1,20 +1,19 @@ -import { OverrideComponentProps } from "@kobalte/utils"; import type { ValidComponent } from "@solidjs/web"; import { type CollapsibleDataSet, useCollapsibleContext, -} from "../collapsible/collapsible-context"; +} from "../collapsible/collapsible-context.tsx"; import { type ElementOf, Polymorphic, type PolymorphicProps, -} from "../polymorphic"; +} from "../polymorphic/index.tsx"; export interface AccordionHeaderOptions {} export interface AccordionHeaderCommonProps< - T extends HTMLElement = HTMLElement, + _T extends HTMLElement = HTMLElement, > {} export interface AccordionHeaderRenderProps diff --git a/packages/core/src/accordion/accordion-item.tsx b/packages/core/src/accordion/accordion-item.tsx index e2b1a28db..df3770f50 100644 --- a/packages/core/src/accordion/accordion-item.tsx +++ b/packages/core/src/accordion/accordion-item.tsx @@ -10,14 +10,14 @@ import { createGenerateId, mergeDefaultProps } from "@kobalte/utils"; import type { ValidComponent } from "@solidjs/web"; import { type Component, createSignal, createUniqueId, omit } from "solid-js"; -import * as Collapsible from "../collapsible"; -import type { PolymorphicProps } from "../polymorphic"; -import { createRegisterId } from "../primitives"; -import { useAccordionContext } from "./accordion-context"; +import * as Collapsible from "../collapsible/index.tsx"; +import type { PolymorphicProps } from "../polymorphic/index.tsx"; +import { createRegisterId } from "../primitives/index.ts"; +import { useAccordionContext } from "./accordion-context.tsx"; import { AccordionItemContext, type AccordionItemContextValue, -} from "./accordion-item-context"; +} from "./accordion-item-context.tsx"; export interface AccordionItemOptions { /** A unique value for the item. */ diff --git a/packages/core/src/accordion/accordion-root.tsx b/packages/core/src/accordion/accordion-root.tsx index a647ac6da..339d391e6 100644 --- a/packages/core/src/accordion/accordion-root.tsx +++ b/packages/core/src/accordion/accordion-root.tsx @@ -15,18 +15,18 @@ import { import type { JSX, ValidComponent } from "@solidjs/web"; import { createUniqueId, omit } from "solid-js"; -import { createListState, createSelectableList } from "../list"; +import { createListState, createSelectableList } from "../list/index.ts"; import { type ElementOf, Polymorphic, type PolymorphicProps, -} from "../polymorphic"; -import type { CollectionItemWithRef } from "../primitives"; -import { createDomCollection } from "../primitives/create-dom-collection"; +} from "../polymorphic/index.tsx"; +import { createDomCollection } from "../primitives/create-dom-collection/index.ts"; +import type { CollectionItemWithRef } from "../primitives/index.ts"; import { AccordionContext, type AccordionContextValue, -} from "./accordion-context"; +} from "./accordion-context.tsx"; export interface AccordionRootOptions { /** The controlled value of the accordion item(s) to expand. */ diff --git a/packages/core/src/accordion/accordion-trigger.tsx b/packages/core/src/accordion/accordion-trigger.tsx index 0be6244c2..8a086e0b5 100644 --- a/packages/core/src/accordion/accordion-trigger.tsx +++ b/packages/core/src/accordion/accordion-trigger.tsx @@ -14,15 +14,14 @@ import { } from "@kobalte/utils"; import type { JSX, ValidComponent } from "@solidjs/web"; import { type Component, createEffect, omit } from "solid-js"; - -import * as Collapsible from "../collapsible"; -import { useCollapsibleContext } from "../collapsible/collapsible-context"; -import type { ElementOf, PolymorphicProps } from "../polymorphic"; -import type { CollectionItemWithRef } from "../primitives"; -import { createDomCollectionItem } from "../primitives/create-dom-collection"; -import { createSelectableItem } from "../selection"; -import { useAccordionContext } from "./accordion-context"; -import { useAccordionItemContext } from "./accordion-item-context"; +import { useCollapsibleContext } from "../collapsible/collapsible-context.tsx"; +import * as Collapsible from "../collapsible/index.tsx"; +import type { ElementOf, PolymorphicProps } from "../polymorphic/index.tsx"; +import { createDomCollectionItem } from "../primitives/create-dom-collection/index.ts"; +import type { CollectionItemWithRef } from "../primitives/index.ts"; +import { createSelectableItem } from "../selection/index.ts"; +import { useAccordionContext } from "./accordion-context.tsx"; +import { useAccordionItemContext } from "./accordion-item-context.tsx"; export interface AccordionTriggerOptions {} diff --git a/packages/core/src/accordion/accordion.test.tsx b/packages/core/src/accordion/accordion.test.tsx index 082a71cb9..f9dcc5236 100644 --- a/packages/core/src/accordion/accordion.test.tsx +++ b/packages/core/src/accordion/accordion.test.tsx @@ -8,8 +8,9 @@ import { installPointerEvent } from "@kobalte/tests"; import { fireEvent, render, within } from "@solidjs/testing-library"; +import type { ComponentProps } from "@solidjs/web"; import userEvent from "@testing-library/user-event"; -import { type ComponentProps, For } from "solid-js"; +import { For } from "solid-js"; import { vi } from "vitest"; import * as Accordion from "."; @@ -274,7 +275,7 @@ describe.skipIf(process.env.GITHUB_ACTIONS)("Accordion", () => { describe("collapsible", () => { it("should toggle the same accordion item when clicking its trigger if collapsible", async () => { - const { getAllByRole, getByText, queryByText } = render(() => ( + const { getAllByRole, getByText } = render(() => ( )); @@ -294,7 +295,7 @@ describe.skipIf(process.env.GITHUB_ACTIONS)("Accordion", () => { }); it("should allows users to open and close accordion item with enter / space key when collapsible", async () => { - const { getAllByRole, getByText, queryByText } = render(() => ( + const { getAllByRole, getByText } = render(() => ( )); @@ -348,7 +349,7 @@ describe.skipIf(process.env.GITHUB_ACTIONS)("Accordion", () => { }); it("should toggle the same accordion item when clicking its trigger if multiple", async () => { - const { getAllByRole, getByText, queryByText } = render(() => ( + const { getAllByRole, getByText } = render(() => ( )); @@ -368,7 +369,7 @@ describe.skipIf(process.env.GITHUB_ACTIONS)("Accordion", () => { }); it("should allows users to open and close accordion item with enter / space key when multiple", async () => { - const { getAllByRole, getByText, queryByText } = render(() => ( + const { getAllByRole, getByText } = render(() => ( )); diff --git a/packages/core/src/accordion/index.tsx b/packages/core/src/accordion/index.tsx index 647c6fb4d..93a178aa2 100644 --- a/packages/core/src/accordion/index.tsx +++ b/packages/core/src/accordion/index.tsx @@ -4,35 +4,35 @@ import { type AccordionContentProps, type AccordionContentRenderProps, AccordionContent as Content, -} from "./accordion-content"; +} from "./accordion-content.tsx"; import { type AccordionHeaderCommonProps, type AccordionHeaderOptions, type AccordionHeaderProps, type AccordionHeaderRenderProps, AccordionHeader as Header, -} from "./accordion-header"; +} from "./accordion-header.tsx"; import { type AccordionItemCommonProps, type AccordionItemOptions, type AccordionItemProps, type AccordionItemRenderProps, AccordionItem as Item, -} from "./accordion-item"; +} from "./accordion-item.tsx"; import { type AccordionRootCommonProps, type AccordionRootOptions, type AccordionRootProps, type AccordionRootRenderProps, AccordionRoot as Root, -} from "./accordion-root"; +} from "./accordion-root.tsx"; import { type AccordionTriggerCommonProps, type AccordionTriggerOptions, type AccordionTriggerProps, type AccordionTriggerRenderProps, AccordionTrigger as Trigger, -} from "./accordion-trigger"; +} from "./accordion-trigger.tsx"; export type { AccordionContentCommonProps, @@ -71,4 +71,4 @@ export const Accordion = Object.assign(Root, { export { type AccordionContextValue, useAccordionContext, -} from "./accordion-context"; +} from "./accordion-context.tsx"; diff --git a/packages/core/src/accordion/stories/accordion.stories.tsx b/packages/core/src/accordion/stories/accordion.stories.tsx index 36a97b381..a96f8975f 100644 --- a/packages/core/src/accordion/stories/accordion.stories.tsx +++ b/packages/core/src/accordion/stories/accordion.stories.tsx @@ -5,7 +5,8 @@ import { Item as AccordionItem, Root as AccordionRoot, Trigger as AccordionTrigger, -} from "../index"; +} from "../index.tsx"; +import style from "./stories.module.css"; const meta = preview.meta({ title: "Components/Accordion", @@ -27,21 +28,13 @@ function Chevron() { stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" - class="shrink-0 transition-transform duration-200 group-data-[expanded]:rotate-180" + class={style.accordion__chevron} > ); } -const triggerClass = - "group flex w-full items-center justify-between bg-white px-4 py-3.5 text-left text-sm font-medium text-slate-900 hover:bg-slate-50 transition-colors data-[expanded]:text-blue-600 data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 cursor-pointer"; - -const contentClass = "overflow-hidden bg-slate-50"; - -const rootClass = - "w-80 divide-y divide-slate-200 rounded-lg border border-slate-200 overflow-hidden font-sans"; - interface ItemProps { value: string; question: string; @@ -52,16 +45,14 @@ interface ItemProps { function Item(props: ItemProps) { return ( - - + + {props.question} - -

- {props.answer} -

+ +

{props.answer}

); @@ -89,7 +80,7 @@ export const Default = meta.story({ ( - + ( - + ( - + ( - + - - + + {props.question} - -
-

- {props.answer} -

+ +
+

{props.answer}

@@ -268,7 +261,7 @@ export const Controlled = meta.story({ ...(args.item3 ? ["item-3"] : []), ]} multiple - class={rootClass} + class={style.accordion__root} > :not([hidden]) ~ :not([hidden]) { + border-top: 1px solid hsl(214 32% 91%); +} + +.accordion__trigger { + display: flex; + width: 100%; + align-items: center; + justify-content: space-between; + background-color: white; + padding: 0.875rem 1rem; + text-align: left; + font-size: 0.875rem; + font-weight: 500; + color: hsl(222 47% 11%); + transition-property: + color, background-color, border-color, text-decoration-color, fill, stroke; + cursor: pointer; +} + +.accordion__trigger:hover { + background-color: hsl(210 40% 98%); +} + +.accordion__trigger[data-expanded] { + color: hsl(221 83% 53%); +} + +.accordion__trigger[data-disabled] { + cursor: not-allowed; + opacity: 0.5; +} + +.accordion__chevron { + flex-shrink: 0; + transition: transform 200ms; +} + +.accordion__trigger[data-expanded] .accordion__chevron { + transform: rotate(180deg); +} + +.accordion__header { + display: flex; +} + +.accordion__content { + overflow: hidden; + background-color: hsl(210 40% 98%); +} + +.accordion__contentText { + padding: 0.75rem 1rem; + font-size: 0.875rem; + color: hsl(215 19% 35%); + line-height: 1.625; + margin: 0; +} + +.accordion__content--animated { + display: grid; + background-color: hsl(210 40% 98%); + transition: grid-template-rows 300ms ease-out; +} + +.accordion__content--animated[data-expanded] { + grid-template-rows: 1fr; +} + +.accordion__content--animated[data-closed] { + grid-template-rows: 0fr; +} + +.accordion__animatedInner { + overflow: hidden; +} diff --git a/packages/core/src/alert-dialog/alert-dialog-content.tsx b/packages/core/src/alert-dialog/alert-dialog-content.tsx index 7334c9074..f01c3e1a0 100644 --- a/packages/core/src/alert-dialog/alert-dialog-content.tsx +++ b/packages/core/src/alert-dialog/alert-dialog-content.tsx @@ -5,8 +5,8 @@ import { type DialogContentCommonProps, type DialogContentOptions, type DialogContentRenderProps, -} from "../dialog/dialog-content"; -import type { ElementOf, PolymorphicProps } from "../polymorphic"; +} from "../dialog/dialog-content.tsx"; +import type { ElementOf, PolymorphicProps } from "../polymorphic/index.tsx"; export interface AlertDialogContentOptions extends DialogContentOptions {} diff --git a/packages/core/src/alert-dialog/index.tsx b/packages/core/src/alert-dialog/index.tsx index 93fccda84..c8a12c409 100644 --- a/packages/core/src/alert-dialog/index.tsx +++ b/packages/core/src/alert-dialog/index.tsx @@ -29,14 +29,14 @@ import { Root, Title, Trigger, -} from "../dialog"; +} from "../dialog/index.tsx"; import { type AlertDialogContentCommonProps, type AlertDialogContentOptions, type AlertDialogContentProps, type AlertDialogContentRenderProps, AlertDialogContent as Content, -} from "./alert-dialog-content"; +} from "./alert-dialog-content.tsx"; export type { AlertDialogCloseButtonCommonProps, diff --git a/packages/core/src/alert-dialog/stories/alert-dialog.stories.tsx b/packages/core/src/alert-dialog/stories/alert-dialog.stories.tsx index 3142dc777..3798e0d15 100644 --- a/packages/core/src/alert-dialog/stories/alert-dialog.stories.tsx +++ b/packages/core/src/alert-dialog/stories/alert-dialog.stories.tsx @@ -9,7 +9,8 @@ import { Root, Title, Trigger, -} from "../index"; +} from "../index.tsx"; +import style from "./stories.module.css"; const meta = preview.meta({ title: "Components/AlertDialog", @@ -18,42 +19,33 @@ const meta = preview.meta({ export default meta; -const triggerClass = - "inline-flex items-center justify-center rounded-md px-3 py-1.5 text-sm font-medium border border-slate-200 bg-white text-slate-700 hover:bg-slate-50 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2"; - -const overlayClass = "fixed inset-0 z-50 bg-black/40 backdrop-blur-sm"; - -const contentClass = - "fixed left-1/2 top-1/2 z-50 w-full max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lg border border-slate-200 bg-white p-6 shadow-xl outline-none font-sans"; - -const closeClass = - "absolute top-3 right-3 inline-flex h-7 w-7 items-center justify-center rounded text-slate-400 hover:bg-slate-100 hover:text-slate-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500"; - -const cancelBtnClass = - "inline-flex items-center justify-center rounded-md px-3 py-1.5 text-sm font-medium border border-slate-200 bg-white text-slate-700 hover:bg-slate-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2"; - /** Interrupts the user with an important message requiring acknowledgement. */ export const Default = meta.story({ name: "Default", render: () => ( - Open alert + Open alert - - - + + + - - Session timeout - - + Session timeout + Your session is about to expire. You will be logged out in 2 minutes. -
- Dismiss -
@@ -68,22 +60,30 @@ export const Destructive = meta.story({ name: "Destructive", render: () => ( - + Delete account - - - - Delete account - - + + + Delete account + This action cannot be undone. Your account and all associated data will be permanently deleted. -
- Cancel -
@@ -97,22 +97,30 @@ export const Destructive = meta.story({ function ControlledDemo() { const [open, setOpen] = createSignal(false); return ( -
-
+
+
- Controlled alert + + Controlled alert + - - - + <Overlay class={style["alert-dialog__overlay"]} /> + <Content class={style["alert-dialog__content"]}> + <Title class={style["alert-dialog__title"]}> Controlled alert - + Open state is managed externally. -
+
-

+

State: {open() ? "open" : "closed"}

diff --git a/packages/core/src/alert-dialog/stories/stories.module.css b/packages/core/src/alert-dialog/stories/stories.module.css new file mode 100644 index 000000000..c7f76c8d6 --- /dev/null +++ b/packages/core/src/alert-dialog/stories/stories.module.css @@ -0,0 +1,205 @@ +.alert-dialog__trigger { + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 6px; + padding: 6px 12px; + font-size: 14px; + font-weight: 500; + border: 1px solid hsl(214 32% 91%); + background-color: white; + color: hsl(215 25% 27%); + transition: + 250ms background-color, + 250ms color; +} + +.alert-dialog__trigger:hover { + background-color: hsl(210 40% 96%); +} + +.alert-dialog__trigger:focus-visible { + outline: none; + box-shadow: 0 0 0 2px hsl(217 91% 60%); + outline-offset: 2px; +} + +.alert-dialog__overlay { + position: fixed; + inset: 0; + z-index: 50; + background-color: rgb(0 0 0 / 0.4); + backdrop-filter: blur(4px); +} + +.alert-dialog__content { + position: fixed; + left: 50%; + top: 50%; + z-index: 50; + width: 100%; + max-width: 448px; + transform: translate(-50%, -50%); + border-radius: 8px; + border: 1px solid hsl(214 32% 91%); + background-color: white; + padding: 24px; + box-shadow: + 0 20px 25px -5px rgb(0 0 0 / 0.1), + 0 8px 10px -6px rgb(0 0 0 / 0.1); + outline: none; +} + +.alert-dialog__close { + position: absolute; + top: 12px; + right: 12px; + display: inline-flex; + height: 28px; + width: 28px; + align-items: center; + justify-content: center; + border-radius: 4px; + color: hsl(215 20% 65%); +} + +.alert-dialog__close:hover { + background-color: hsl(210 40% 96%); + color: hsl(215 25% 27%); +} + +.alert-dialog__close:focus-visible { + outline: none; + box-shadow: 0 0 0 2px hsl(217 91% 60%); +} + +.alert-dialog__title { + margin-bottom: 4px; + font-size: 16px; + font-weight: 600; + color: hsl(222 47% 11%); +} + +.alert-dialog__description { + font-size: 14px; + color: hsl(215 16% 47%); +} + +.alert-dialog__description--mb { + margin-bottom: 16px; +} + +.alert-dialog__action-btn { + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 6px; + padding: 6px 12px; + font-size: 14px; + font-weight: 500; + background-color: hsl(222 47% 11%); + color: white; +} + +.alert-dialog__action-btn:hover { + background-color: hsl(217 33% 17%); +} + +.alert-dialog__action-btn:focus-visible { + outline: none; + box-shadow: 0 0 0 2px hsl(217 91% 60%); + outline-offset: 2px; +} + +.alert-dialog__cancel-btn { + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 6px; + padding: 6px 12px; + font-size: 14px; + font-weight: 500; + border: 1px solid hsl(214 32% 91%); + background-color: white; + color: hsl(215 25% 27%); +} + +.alert-dialog__cancel-btn:hover { + background-color: hsl(210 40% 96%); +} + +.alert-dialog__cancel-btn:focus-visible { + outline: none; + box-shadow: 0 0 0 2px hsl(217 91% 60%); + outline-offset: 2px; +} + +.alert-dialog__footer { + display: flex; + justify-content: flex-end; + gap: 8px; +} + +.alert-dialog__destructive-trigger { + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 6px; + padding: 6px 12px; + font-size: 14px; + font-weight: 500; + background-color: hsl(0 72% 51%); + color: white; + transition: + 250ms background-color, + 250ms color; +} + +.alert-dialog__destructive-trigger:hover { + background-color: hsl(0 74% 42%); +} + +.alert-dialog__destructive-trigger:focus-visible { + outline: none; + box-shadow: 0 0 0 2px hsl(0 84% 60%); + outline-offset: 2px; +} + +.alert-dialog__destructive-action { + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 6px; + padding: 6px 12px; + font-size: 14px; + font-weight: 500; + background-color: hsl(0 72% 51%); + color: white; +} + +.alert-dialog__destructive-action:hover { + background-color: hsl(0 74% 42%); +} + +.alert-dialog__destructive-action:focus-visible { + outline: none; + box-shadow: 0 0 0 2px hsl(0 84% 60%); + outline-offset: 2px; +} + +.alert-dialog__wrapper { + display: flex; + flex-direction: column; + gap: 12px; +} + +.alert-dialog__row { + display: flex; + align-items: center; + gap: 8px; +} + +.alert-dialog__state { + font-size: 12px; + color: hsl(215 16% 47%); +} diff --git a/packages/core/src/alert/alert-root.tsx b/packages/core/src/alert/alert-root.tsx index 91799d923..44523b32d 100644 --- a/packages/core/src/alert/alert-root.tsx +++ b/packages/core/src/alert/alert-root.tsx @@ -4,11 +4,11 @@ import { type ElementOf, Polymorphic, type PolymorphicProps, -} from "../polymorphic"; +} from "../polymorphic/index.tsx"; export interface AlertRootOptions {} -export interface AlertRootCommonProps {} +export interface AlertRootCommonProps<_T extends HTMLElement = HTMLElement> {} export interface AlertRootRenderProps extends AlertRootCommonProps { role: "alert"; diff --git a/packages/core/src/alert/index.tsx b/packages/core/src/alert/index.tsx index 2680c8912..0a236465d 100644 --- a/packages/core/src/alert/index.tsx +++ b/packages/core/src/alert/index.tsx @@ -4,7 +4,7 @@ import { type AlertRootProps, type AlertRootRenderProps, AlertRoot as Root, -} from "./alert-root"; +} from "./alert-root.tsx"; export type { AlertRootCommonProps, diff --git a/packages/core/src/alert/stories/alert.stories.tsx b/packages/core/src/alert/stories/alert.stories.tsx index 67af081c6..d4a57ade4 100644 --- a/packages/core/src/alert/stories/alert.stories.tsx +++ b/packages/core/src/alert/stories/alert.stories.tsx @@ -1,5 +1,6 @@ import preview from "../../../../../.storybook/preview.js"; -import { Root } from "../index"; +import { Root } from "../index.tsx"; +import style from "./stories.module.css"; const meta = preview.meta({ title: "Components/Alert", @@ -8,14 +9,11 @@ const meta = preview.meta({ export default meta; -const baseClass = - "flex items-start gap-3 rounded-lg border px-4 py-3 text-sm font-sans w-80"; - /** A plain alert with no decoration — role="alert" is always present. */ export const Default = meta.story({ name: "Default", render: () => ( - + Your session was saved successfully. ), @@ -25,10 +23,10 @@ export const Default = meta.story({ export const WithTitle = meta.story({ name: "With Title", render: () => ( - -
-

Update available

-

+ +

+

Update available

+

A new version is ready. Refresh to apply changes.

@@ -40,13 +38,18 @@ export const WithTitle = meta.story({ export const Success = meta.story({ name: "Success", render: () => ( - -